mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-09-03 02:16:09 +02:00
![]() The imx95 driver requests the necessary mailbox channels during imx-dsp's probe operation. If WAKEUP domain is shut down during system suspend, MU7A (used by Linux side) will end up losing its register state. This means that GI's will end up being masked when the system is resumed (since GIER is set to 0x0, which means all GI's are masked). As such, SOF will assert the GIP bits required for triggering an interrupt on Linux side but no interrupt will be triggered since GI's are masked, thus resulting on a crash on Linux side as it will assume that the firmware did not boot. This was reproduced using the following steps: 1) Put Linux into suspend-to-RAM state by running: echo 'mem' > /sys/power/state 2) Put SM into idle mode by running: idle 3) Resume the system by running: wakeupsource What seems to happen is that if all CPUs are either in STOP/SLEEP state and SM is put into idle state it will attempt to system suspend, during which WAKEUP domain is powered off, thus leading to the aforementioned register state loss. If SM is not put into idle state, then WAKEUP domain is not powered off, thus if step 2) is left out then everything will work as expected. To fix this, make sure the mailbox channels are requested during resume() and released during suspend(). This way, by requesting the mailbox channels during resume() we make sure to unmask the GI's used in firmware communcation. Signed-off-by: Laurentiu Mihalcea <laurentiu.mihalcea@nxp.com> Reviewed-by: Iuliana Prodan <iuliana.prodan@nxp.com> Acked-by: Jason Liu <jason.hui.liu@nxp.com> |
||
---|---|---|
.. | ||
imx-common.c | ||
imx-common.h | ||
imx8.c | ||
imx8m.c | ||
imx8ulp.c | ||
imx95.c | ||
Kconfig | ||
Makefile |