// This file is provided under a dual BSD/GPLv2 license. When using or
 // redistributing this file, you may do so under either license.
 //
-// Copyright(c) 2021 Advanced Micro Devices, Inc.
+// Copyright(c) 2021, 2023 Advanced Micro Devices, Inc.
 //
 // Authors: Balakishore Pati <Balakishore.pati@amd.com>
 //         Ajit Kumar Pandey <AjitKumar.Pandey@amd.com>
 
        dsp_ack = snd_sof_dsp_read(sdev, ACP_DSP_BAR, ACP_SCRATCH_REG_0 + dsp_ack_write);
        if (dsp_ack) {
-               spin_lock_irq(&sdev->ipc_lock);
                /* handle immediate reply from DSP core */
                acp_dsp_ipc_get_reply(sdev);
                snd_sof_ipc_reply(sdev, 0);
                /* set the done bit */
                acp_dsp_ipc_dsp_done(sdev);
-               spin_unlock_irq(&sdev->ipc_lock);
                ipc_irq = true;
        }
 
 
        const struct sof_amd_acp_desc *desc = get_chip_info(sdev->pdata);
        unsigned int count = ACP_HW_SEM_RETRY_COUNT;
 
+       spin_lock_irq(&sdev->ipc_lock);
        while (snd_sof_dsp_read(sdev, ACP_DSP_BAR, desc->hw_semaphore_offset)) {
                /* Wait until acquired HW Semaphore lock or timeout */
                count--;
                if (!count) {
                        dev_err(sdev->dev, "%s: Failed to acquire HW lock\n", __func__);
+                       spin_unlock_irq(&sdev->ipc_lock);
                        return IRQ_NONE;
                }
        }
        /* Unlock or Release HW Semaphore */
        snd_sof_dsp_write(sdev, ACP_DSP_BAR, desc->hw_semaphore_offset, 0x0);
 
+       spin_unlock_irq(&sdev->ipc_lock);
        return IRQ_HANDLED;
 };