Commit 17a05345 authored by Matthew Auld's avatar Matthew Auld Committed by Joonas Lahtinen

drm/i915: make reserved struct resource centric

Now that we are using struct resource to track the stolen region, it is
more convenient if we track the reserved portion of that region in a
resource as well.

v2: s/<= end + 1/< end/ (Chris)
v3: prefer DEFINE_RES_MEM
Signed-off-by: default avatarMatthew Auld <matthew.auld@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171211151822.20953-7-matthew.auld@intel.com
parent 77894226
...@@ -2259,6 +2259,10 @@ struct drm_i915_private { ...@@ -2259,6 +2259,10 @@ struct drm_i915_private {
* some portion of it is in fact reserved for use by hardware functions. * some portion of it is in fact reserved for use by hardware functions.
*/ */
struct resource dsm; struct resource dsm;
/**
* Reseved portion of Data Stolen Memory
*/
struct resource dsm_reserved;
void __iomem *regs; void __iomem *regs;
......
...@@ -382,8 +382,6 @@ struct i915_ggtt { ...@@ -382,8 +382,6 @@ struct i915_ggtt {
* hardware functions and similarly removed from the accessible range. * hardware functions and similarly removed from the accessible range.
*/ */
u32 stolen_usable_size; /* Total size minus reserved ranges */ u32 stolen_usable_size; /* Total size minus reserved ranges */
u32 stolen_reserved_base;
u32 stolen_reserved_size;
/** "Graphics Stolen Memory" holds the global PTEs */ /** "Graphics Stolen Memory" holds the global PTEs */
void __iomem *gsm; void __iomem *gsm;
......
...@@ -394,17 +394,15 @@ int i915_gem_init_stolen(struct drm_i915_private *dev_priv) ...@@ -394,17 +394,15 @@ int i915_gem_init_stolen(struct drm_i915_private *dev_priv)
reserved_base = stolen_top; reserved_base = stolen_top;
} }
if (reserved_base < dev_priv->dsm.start || dev_priv->dsm_reserved =
reserved_base + reserved_size > stolen_top) { (struct resource) DEFINE_RES_MEM(reserved_base, reserved_size);
dma_addr_t reserved_top = reserved_base + reserved_size;
DRM_ERROR("Stolen reserved area [%pad - %pad] outside stolen memory %pR\n", if (!resource_contains(&dev_priv->dsm, &dev_priv->dsm_reserved)) {
&reserved_base, &reserved_top, &dev_priv->dsm); DRM_ERROR("Stolen reserved area %pR outside stolen memory %pR\n",
&dev_priv->dsm_reserved, &dev_priv->dsm);
return 0; return 0;
} }
ggtt->stolen_reserved_base = reserved_base;
ggtt->stolen_reserved_size = reserved_size;
/* It is possible for the reserved area to end before the end of stolen /* It is possible for the reserved area to end before the end of stolen
* memory, so just consider the start. */ * memory, so just consider the start. */
reserved_total = stolen_top - reserved_base; reserved_total = stolen_top - reserved_base;
......
...@@ -6416,7 +6416,6 @@ static void valleyview_disable_rps(struct drm_i915_private *dev_priv) ...@@ -6416,7 +6416,6 @@ static void valleyview_disable_rps(struct drm_i915_private *dev_priv)
static bool bxt_check_bios_rc6_setup(struct drm_i915_private *dev_priv) static bool bxt_check_bios_rc6_setup(struct drm_i915_private *dev_priv)
{ {
struct i915_ggtt *ggtt = &dev_priv->ggtt;
bool enable_rc6 = true; bool enable_rc6 = true;
unsigned long rc6_ctx_base; unsigned long rc6_ctx_base;
u32 rc_ctl; u32 rc_ctl;
...@@ -6441,9 +6440,8 @@ static bool bxt_check_bios_rc6_setup(struct drm_i915_private *dev_priv) ...@@ -6441,9 +6440,8 @@ static bool bxt_check_bios_rc6_setup(struct drm_i915_private *dev_priv)
* for this check. * for this check.
*/ */
rc6_ctx_base = I915_READ(RC6_CTX_BASE) & RC6_CTX_BASE_MASK; rc6_ctx_base = I915_READ(RC6_CTX_BASE) & RC6_CTX_BASE_MASK;
if (!((rc6_ctx_base >= ggtt->stolen_reserved_base) && if (!((rc6_ctx_base >= dev_priv->dsm_reserved.start) &&
(rc6_ctx_base + PAGE_SIZE <= ggtt->stolen_reserved_base + (rc6_ctx_base + PAGE_SIZE < dev_priv->dsm_reserved.end))) {
ggtt->stolen_reserved_size))) {
DRM_DEBUG_DRIVER("RC6 Base address not as expected.\n"); DRM_DEBUG_DRIVER("RC6 Base address not as expected.\n");
enable_rc6 = false; enable_rc6 = false;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment