Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Matthew 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: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20171211151822.20953-7-matthew.auld@intel.com

authored by

Matthew Auld and committed by
Joonas Lahtinen
17a05345 77894226

+12 -14
+4
drivers/gpu/drm/i915/i915_drv.h
··· 2259 2259 * some portion of it is in fact reserved for use by hardware functions. 2260 2260 */ 2261 2261 struct resource dsm; 2262 + /** 2263 + * Reseved portion of Data Stolen Memory 2264 + */ 2265 + struct resource dsm_reserved; 2262 2266 2263 2267 void __iomem *regs; 2264 2268
-2
drivers/gpu/drm/i915/i915_gem_gtt.h
··· 382 382 * hardware functions and similarly removed from the accessible range. 383 383 */ 384 384 u32 stolen_usable_size; /* Total size minus reserved ranges */ 385 - u32 stolen_reserved_base; 386 - u32 stolen_reserved_size; 387 385 388 386 /** "Graphics Stolen Memory" holds the global PTEs */ 389 387 void __iomem *gsm;
+6 -8
drivers/gpu/drm/i915/i915_gem_stolen.c
··· 394 394 reserved_base = stolen_top; 395 395 } 396 396 397 - if (reserved_base < dev_priv->dsm.start || 398 - reserved_base + reserved_size > stolen_top) { 399 - dma_addr_t reserved_top = reserved_base + reserved_size; 400 - DRM_ERROR("Stolen reserved area [%pad - %pad] outside stolen memory %pR\n", 401 - &reserved_base, &reserved_top, &dev_priv->dsm); 397 + dev_priv->dsm_reserved = 398 + (struct resource) DEFINE_RES_MEM(reserved_base, reserved_size); 399 + 400 + if (!resource_contains(&dev_priv->dsm, &dev_priv->dsm_reserved)) { 401 + DRM_ERROR("Stolen reserved area %pR outside stolen memory %pR\n", 402 + &dev_priv->dsm_reserved, &dev_priv->dsm); 402 403 return 0; 403 404 } 404 - 405 - ggtt->stolen_reserved_base = reserved_base; 406 - ggtt->stolen_reserved_size = reserved_size; 407 405 408 406 /* It is possible for the reserved area to end before the end of stolen 409 407 * memory, so just consider the start. */
+2 -4
drivers/gpu/drm/i915/intel_pm.c
··· 6416 6416 6417 6417 static bool bxt_check_bios_rc6_setup(struct drm_i915_private *dev_priv) 6418 6418 { 6419 - struct i915_ggtt *ggtt = &dev_priv->ggtt; 6420 6419 bool enable_rc6 = true; 6421 6420 unsigned long rc6_ctx_base; 6422 6421 u32 rc_ctl; ··· 6440 6441 * for this check. 6441 6442 */ 6442 6443 rc6_ctx_base = I915_READ(RC6_CTX_BASE) & RC6_CTX_BASE_MASK; 6443 - if (!((rc6_ctx_base >= ggtt->stolen_reserved_base) && 6444 - (rc6_ctx_base + PAGE_SIZE <= ggtt->stolen_reserved_base + 6445 - ggtt->stolen_reserved_size))) { 6444 + if (!((rc6_ctx_base >= dev_priv->dsm_reserved.start) && 6445 + (rc6_ctx_base + PAGE_SIZE < dev_priv->dsm_reserved.end))) { 6446 6446 DRM_DEBUG_DRIVER("RC6 Base address not as expected.\n"); 6447 6447 enable_rc6 = false; 6448 6448 }