enum forcewake_domains fw_domains = 0;
        unsigned int i;
 
-       guc->send_regs.base = i915_mmio_reg_offset(SOFT_SCRATCH(0));
-       guc->send_regs.count = GUC_MAX_MMIO_MSG_LEN;
-       BUILD_BUG_ON(GUC_MAX_MMIO_MSG_LEN > SOFT_SCRATCH_COUNT);
+       if (HAS_GUC_CT(dev_priv) && INTEL_GEN(dev_priv) >= 11) {
+               guc->send_regs.base =
+                               i915_mmio_reg_offset(GEN11_SOFT_SCRATCH(0));
+               guc->send_regs.count = GEN11_SOFT_SCRATCH_COUNT;
+       } else {
+               guc->send_regs.base = i915_mmio_reg_offset(SOFT_SCRATCH(0));
+               guc->send_regs.count = GUC_MAX_MMIO_MSG_LEN;
+               BUILD_BUG_ON(GUC_MAX_MMIO_MSG_LEN > SOFT_SCRATCH_COUNT);
+       }
 
        for (i = 0; i < guc->send_regs.count; i++) {
                fw_domains |= intel_uncore_forcewake_for_reg(&dev_priv->uncore,
 
 #define SOFT_SCRATCH(n)                        _MMIO(0xc180 + (n) * 4)
 #define SOFT_SCRATCH_COUNT             16
 
+#define GEN11_SOFT_SCRATCH(n)          _MMIO(0x190240 + (n) * 4)
+#define GEN11_SOFT_SCRATCH_COUNT       4
+
 #define UOS_RSA_SCRATCH(i)             _MMIO(0xc200 + (i) * 4)
 #define UOS_RSA_SCRATCH_COUNT          64