link->mmio_base = res->mmio_base;
        link->registers = res->mmio_base + SDW_LINK_BASE
                + (SDW_LINK_SIZE * link_id);
-       link->shim = res->mmio_base + SDW_SHIM_BASE;
-       link->alh = res->mmio_base + SDW_ALH_BASE;
+       link->shim = res->mmio_base + res->shim_base;
+       link->alh = res->mmio_base + res->alh_base;
 
        link->ops = res->ops;
        link->dev = res->dev;
        }
 
        ctx->mmio_base = res->mmio_base;
+       ctx->shim_base = res->shim_base;
+       ctx->alh_base = res->alh_base;
        ctx->link_mask = res->link_mask;
        ctx->handle = res->handle;
        mutex_init(&ctx->shim_lock);
                return -EINVAL;
 
        /* Check SNDWLCAP.LCOUNT */
-       caps = ioread32(ctx->mmio_base + SDW_SHIM_BASE + SDW_SHIM_LCAP);
+       caps = ioread32(ctx->mmio_base + ctx->shim_base + SDW_SHIM_LCAP);
        caps &= GENMASK(2, 0);
 
        /* Check HW supported vs property value */
 
  * @link_list: list to handle interrupts across all links
  * @shim_lock: mutex to handle concurrent rmw access to shared SHIM registers.
  * @shim_mask: flags to track initialization of SHIM shared registers
+ * @shim_base: sdw shim base.
+ * @alh_base: sdw alh base.
  */
 struct sdw_intel_ctx {
        int count;
        struct list_head link_list;
        struct mutex shim_lock; /* lock for access to shared SHIM registers */
        u32 shim_mask;
+       u32 shim_base;
+       u32 alh_base;
 };
 
 /**
  * machine-specific quirks are handled in the DSP driver.
  * @clock_stop_quirks: mask array of possible behaviors requested by the
  * DSP driver. The quirks are common for all links for now.
+ * @shim_base: sdw shim base.
+ * @alh_base: sdw alh base.
  */
 struct sdw_intel_res {
        int count;
        struct device *dev;
        u32 link_mask;
        u32 clock_stop_quirks;
+       u32 shim_base;
+       u32 alh_base;
 };
 
 /*
 
        memset(&res, 0, sizeof(res));
 
        res.mmio_base = sdev->bar[HDA_DSP_BAR];
+       res.shim_base = hdev->desc->sdw_shim_base;
+       res.alh_base = hdev->desc->sdw_alh_base;
        res.irq = sdev->ipc_irq;
        res.handle = hdev->info.handle;
        res.parent = sdev->dev;