Hello,
I’m successfully using a 1920x1200 MIPI-DSI panel (MI1010AQT-1) on a Verdin iMX8MM with BSPv6.2 and a custom carrier board. Since the panel is factory-initialized and only requires a power supply I’m using the panel-simple driver (patch (2.1 KB)).
I have the problem when I want to resume the system after suspending, that the display remains black. When I look into dmesg I see the following error:
[ 633.128709] imx_sec_dsim_drv 32e10000.mipi_dsi: panel prepare failed: -13
This error message is printed by sec_mipi_dsim_bridge_atomic_enable
(sec-dsim.c « bridge « drm « gpu « drivers - linux-toradex.git - Linux kernel for Apalis, Colibri and Verdin modules) because panel_simple_prepare
fails.
panel_simple_prepare
calls pm_runtime_get_sync
which calls rpm_resume
(runtime.c « power « base « drivers - linux-toradex.git - Linux kernel for Apalis, Colibri and Verdin modules). This function returns -EACCES when several conditions aren’t met (disable_depth, power state, runtime_status).
When I restart weston with systemctl restart weston
then the panel is initialized correctly. So I used ftrace to look into the function calls when restarting weston
kworker/0:2-1138 [000] ..... 3892.029188: panel_simple_disable <-drm_panel_disable
kworker/0:2-1138 [000] ..... 3892.029196: panel_simple_unprepare <-drm_panel_unprepare
systemd-1 [000] ..... 3892.169078: panel_simple_prepare <-drm_panel_prepare
systemd-1 [000] ..... 3892.169085: panel_simple_enable <-drm_panel_enable
vs. when the system suspends/resumes
systemd-sleep-1200 [002] ..... 3950.229790: panel_simple_suspend <-pm_generic_runtime_suspend
systemd-sleep-1200 [003] ..... 3950.361140: panel_simple_disable <-drm_panel_disable
systemd-sleep-1200 [003] ..... 3950.361147: panel_simple_unprepare <-drm_panel_unprepare
systemd-sleep-1200 [000] ..... 3950.380098: panel_simple_prepare <-drm_panel_prepare
systemd-sleep-1200 [000] ..... 3950.497089: panel_simple_resume <-pm_generic_runtime_resume
So basically weston calls the same functions (disable, unprepare, prepare & enable) in the same order as when the system suspend/resume. But why does prepare
fail in the second case so that enable
isn’t called?
Best regards,
Markus