drm_dbg(&i915->drm, "GEN6_STOLEN_RESERVED = 0x%016llx\n", reg_val);
 
+       /* Wa_14019821291 */
+       if (MEDIA_VER_FULL(i915) == IP_VER(13, 0)) {
+               /*
+                * This workaround is primarily implemented by the BIOS.  We
+                * just need to figure out whether the BIOS has applied the
+                * workaround (meaning the programmed address falls within
+                * the DSM) and, if so, reserve that part of the DSM to
+                * prevent accidental reuse.  The DSM location should be just
+                * below the WOPCM.
+                */
+               u64 gscpsmi_base = intel_uncore_read64_2x32(uncore,
+                                                           MTL_GSCPSMI_BASEADDR_LSB,
+                                                           MTL_GSCPSMI_BASEADDR_MSB);
+               if (gscpsmi_base >= i915->dsm.stolen.start &&
+                   gscpsmi_base < i915->dsm.stolen.end) {
+                       *base = gscpsmi_base;
+                       *size = i915->dsm.stolen.end - gscpsmi_base;
+                       return;
+               }
+       }
+
        switch (reg_val & GEN8_STOLEN_RESERVED_SIZE_MASK) {
        case GEN8_STOLEN_RESERVED_1M:
                *size = 1024 * 1024;
 
 #define XEHP_SQCM                              MCR_REG(0x8724)
 #define   EN_32B_ACCESS                                REG_BIT(30)
 
+#define MTL_GSCPSMI_BASEADDR_LSB               _MMIO(0x880c)
+#define MTL_GSCPSMI_BASEADDR_MSB               _MMIO(0x8810)
+
 #define HSW_IDICR                              _MMIO(0x9008)
 #define   IDIHASHMSK(x)                                (((x) & 0x3f) << 16)