return ret;
 }
 
-/* IPC Firmware ready */
-
-static void ipc_get_windows(struct snd_sof_dev *sdev)
+int hda_dsp_ipc_get_mailbox_offset(struct snd_sof_dev *sdev)
 {
-       struct sof_ipc_window_elem *elem;
-       u32 outbox_offset = 0;
-       u32 stream_offset = 0;
-       u32 inbox_offset = 0;
-       u32 outbox_size = 0;
-       u32 stream_size = 0;
-       u32 inbox_size = 0;
-       int i;
-
-       if (!sdev->info_window) {
-               dev_err(sdev->dev, "error: have no window info\n");
-               return;
-       }
-
-       for (i = 0; i < sdev->info_window->num_windows; i++) {
-               elem = &sdev->info_window->window[i];
-
-               switch (elem->type) {
-               case SOF_IPC_REGION_UPBOX:
-                       inbox_offset =
-                               elem->offset + SRAM_WINDOW_OFFSET(elem->id);
-                       inbox_size = elem->size;
-                       snd_sof_debugfs_io_item(sdev,
-                                               sdev->bar[HDA_DSP_BAR] +
-                                               inbox_offset,
-                                               elem->size, "inbox",
-                                               SOF_DEBUGFS_ACCESS_D0_ONLY);
-                       break;
-               case SOF_IPC_REGION_DOWNBOX:
-                       outbox_offset =
-                               elem->offset + SRAM_WINDOW_OFFSET(elem->id);
-                       outbox_size = elem->size;
-                       snd_sof_debugfs_io_item(sdev,
-                                               sdev->bar[HDA_DSP_BAR] +
-                                               outbox_offset,
-                                               elem->size, "outbox",
-                                               SOF_DEBUGFS_ACCESS_D0_ONLY);
-                       break;
-               case SOF_IPC_REGION_TRACE:
-                       snd_sof_debugfs_io_item(sdev,
-                                               sdev->bar[HDA_DSP_BAR] +
-                                               elem->offset +
-                                               SRAM_WINDOW_OFFSET
-                                               (elem->id),
-                                               elem->size, "etrace",
-                                               SOF_DEBUGFS_ACCESS_D0_ONLY);
-                       break;
-               case SOF_IPC_REGION_DEBUG:
-                       snd_sof_debugfs_io_item(sdev,
-                                               sdev->bar[HDA_DSP_BAR] +
-                                               elem->offset +
-                                               SRAM_WINDOW_OFFSET
-                                               (elem->id),
-                                               elem->size, "debug",
-                                               SOF_DEBUGFS_ACCESS_D0_ONLY);
-                       break;
-               case SOF_IPC_REGION_STREAM:
-                       stream_offset =
-                               elem->offset + SRAM_WINDOW_OFFSET(elem->id);
-                       stream_size = elem->size;
-                       snd_sof_debugfs_io_item(sdev,
-                                               sdev->bar[HDA_DSP_BAR] +
-                                               elem->offset +
-                                               SRAM_WINDOW_OFFSET
-                                               (elem->id),
-                                               elem->size, "stream",
-                                               SOF_DEBUGFS_ACCESS_D0_ONLY);
-                       break;
-               case SOF_IPC_REGION_REGS:
-                       snd_sof_debugfs_io_item(sdev,
-                                               sdev->bar[HDA_DSP_BAR] +
-                                               elem->offset +
-                                               SRAM_WINDOW_OFFSET
-                                               (elem->id),
-                                               elem->size, "regs",
-                                               SOF_DEBUGFS_ACCESS_D0_ONLY);
-                       break;
-               case SOF_IPC_REGION_EXCEPTION:
-                       sdev->dsp_oops_offset = elem->offset +
-                                               SRAM_WINDOW_OFFSET(elem->id);
-                       snd_sof_debugfs_io_item(sdev,
-                                               sdev->bar[HDA_DSP_BAR] +
-                                               elem->offset +
-                                               SRAM_WINDOW_OFFSET
-                                               (elem->id),
-                                               elem->size, "exception",
-                                               SOF_DEBUGFS_ACCESS_D0_ONLY);
-                       break;
-               default:
-                       dev_err(sdev->dev, "error: get illegal window info\n");
-                       return;
-               }
-       }
-
-       if (outbox_size == 0 || inbox_size == 0) {
-               dev_err(sdev->dev, "error: get illegal mailbox window\n");
-               return;
-       }
-
-       snd_sof_dsp_mailbox_init(sdev, inbox_offset, inbox_size,
-                                outbox_offset, outbox_size);
-       sdev->stream_box.offset = stream_offset;
-       sdev->stream_box.size = stream_size;
-
-       dev_dbg(sdev->dev, " mailbox upstream 0x%x - size 0x%x\n",
-               inbox_offset, inbox_size);
-       dev_dbg(sdev->dev, " mailbox downstream 0x%x - size 0x%x\n",
-               outbox_offset, outbox_size);
-       dev_dbg(sdev->dev, " stream region 0x%x - size 0x%x\n",
-               stream_offset, stream_size);
+       return HDA_DSP_MBOX_UPLINK_OFFSET;
 }
 
-/* check for ABI compatibility and create memory windows on first boot */
-int hda_dsp_ipc_fw_ready(struct snd_sof_dev *sdev, u32 msg_id)
+int hda_dsp_ipc_get_window_offset(struct snd_sof_dev *sdev, u32 id)
 {
-       struct sof_ipc_fw_ready *fw_ready = &sdev->fw_ready;
-       u32 offset;
-       int ret;
-
-       /* mailbox must be on 4k boundary */
-       offset = HDA_DSP_MBOX_UPLINK_OFFSET;
-
-       dev_dbg(sdev->dev, "ipc: DSP is ready 0x%8.8x offset 0x%x\n",
-               msg_id, offset);
-
-       /* no need to re-check version/ABI for subsequent boots */
-       if (!sdev->first_boot)
-               return 0;
-
-       /* copy data from the DSP FW ready offset */
-       sof_block_read(sdev, sdev->mmio_bar, offset, fw_ready,
-                      sizeof(*fw_ready));
-
-       /* make sure ABI version is compatible */
-       ret = snd_sof_ipc_valid(sdev);
-       if (ret < 0)
-               return ret;
-
-       /* now check for extended data */
-       snd_sof_fw_parse_ext_data(sdev, sdev->mmio_bar,
-                                 HDA_DSP_MBOX_UPLINK_OFFSET +
-                                 sizeof(struct sof_ipc_fw_ready));
-
-       ipc_get_windows(sdev);
-
-       return 0;
+       return SRAM_WINDOW_OFFSET(id);
 }
 
 void hda_ipc_msg_data(struct snd_sof_dev *sdev,