ASoC: SOF: amd: clear panic mask status when panic occurs
authorVijendar Mukunda <Vijendar.Mukunda@amd.com>
Wed, 23 Aug 2023 07:33:38 +0000 (13:03 +0530)
committerMark Brown <broonie@kernel.org>
Wed, 23 Aug 2023 12:27:18 +0000 (13:27 +0100)
Due to scratch memory persistence, Once the DSP panic is reported, need to
clear the panic mask after handling DSP panic. Otherwise, It results in DSP
panic on next reboot.

Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
Link: https://lore.kernel.org/r/20230823073340.2829821-6-Vijendar.Mukunda@amd.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/amd/acp-ipc.c

index 81a2c09..fcb54f5 100644 (file)
@@ -170,6 +170,8 @@ irqreturn_t acp_sof_ipc_irq_thread(int irq, void *context)
                if ((status & SOF_IPC_PANIC_MAGIC_MASK) == SOF_IPC_PANIC_MAGIC) {
                        snd_sof_dsp_panic(sdev, sdev->dsp_box.offset + sizeof(status),
                                          true);
+                       status = 0;
+                       acp_mailbox_write(sdev, sdev->dsp_box.offset, &status, sizeof(status));
                        return IRQ_HANDLED;
                }
                snd_sof_ipc_msgs_rx(sdev);
@@ -199,6 +201,8 @@ irqreturn_t acp_sof_ipc_irq_thread(int irq, void *context)
        acp_mailbox_read(sdev, sdev->debug_box.offset, &status, sizeof(u32));
        if ((status & SOF_IPC_PANIC_MAGIC_MASK) == SOF_IPC_PANIC_MAGIC) {
                snd_sof_dsp_panic(sdev, sdev->dsp_oops_offset, true);
+               status = 0;
+               acp_mailbox_write(sdev, sdev->debug_box.offset, &status, sizeof(status));
                return IRQ_HANDLED;
        }