|
@@ -344,6 +344,35 @@ static void bdw_get_stolen_reserved(struct drm_i915_private *dev_priv,
|
|
|
*size = stolen_top - *base;
|
|
|
}
|
|
|
|
|
|
+static void icl_get_stolen_reserved(struct drm_i915_private *dev_priv,
|
|
|
+ resource_size_t *base,
|
|
|
+ resource_size_t *size)
|
|
|
+{
|
|
|
+ u64 reg_val = I915_READ64(GEN6_STOLEN_RESERVED);
|
|
|
+
|
|
|
+ DRM_DEBUG_DRIVER("GEN6_STOLEN_RESERVED = 0x%016llx\n", reg_val);
|
|
|
+
|
|
|
+ *base = reg_val & GEN11_STOLEN_RESERVED_ADDR_MASK;
|
|
|
+
|
|
|
+ switch (reg_val & GEN8_STOLEN_RESERVED_SIZE_MASK) {
|
|
|
+ case GEN8_STOLEN_RESERVED_1M:
|
|
|
+ *size = 1024 * 1024;
|
|
|
+ break;
|
|
|
+ case GEN8_STOLEN_RESERVED_2M:
|
|
|
+ *size = 2 * 1024 * 1024;
|
|
|
+ break;
|
|
|
+ case GEN8_STOLEN_RESERVED_4M:
|
|
|
+ *size = 4 * 1024 * 1024;
|
|
|
+ break;
|
|
|
+ case GEN8_STOLEN_RESERVED_8M:
|
|
|
+ *size = 8 * 1024 * 1024;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ *size = 8 * 1024 * 1024;
|
|
|
+ MISSING_CASE(reg_val & GEN8_STOLEN_RESERVED_SIZE_MASK);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
int i915_gem_init_stolen(struct drm_i915_private *dev_priv)
|
|
|
{
|
|
|
resource_size_t reserved_base, stolen_top;
|
|
@@ -400,7 +429,9 @@ int i915_gem_init_stolen(struct drm_i915_private *dev_priv)
|
|
|
gen7_get_stolen_reserved(dev_priv,
|
|
|
&reserved_base, &reserved_size);
|
|
|
break;
|
|
|
- default:
|
|
|
+ case 8:
|
|
|
+ case 9:
|
|
|
+ case 10:
|
|
|
if (IS_LP(dev_priv))
|
|
|
chv_get_stolen_reserved(dev_priv,
|
|
|
&reserved_base, &reserved_size);
|
|
@@ -408,6 +439,11 @@ int i915_gem_init_stolen(struct drm_i915_private *dev_priv)
|
|
|
bdw_get_stolen_reserved(dev_priv,
|
|
|
&reserved_base, &reserved_size);
|
|
|
break;
|
|
|
+ case 11:
|
|
|
+ default:
|
|
|
+ icl_get_stolen_reserved(dev_priv, &reserved_base,
|
|
|
+ &reserved_size);
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
/*
|