OSDN Git Service

drm/i915: make reserved struct resource centric
authorMatthew Auld <matthew.auld@intel.com>
Mon, 11 Dec 2017 15:18:19 +0000 (15:18 +0000)
committerJoonas Lahtinen <joonas.lahtinen@linux.intel.com>
Tue, 12 Dec 2017 10:30:21 +0000 (12:30 +0200)
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
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gem_gtt.h
drivers/gpu/drm/i915/i915_gem_stolen.c
drivers/gpu/drm/i915/intel_pm.c

index 1677b7e..7945af0 100644 (file)
@@ -2259,6 +2259,10 @@ struct drm_i915_private {
         * some portion of it is in fact reserved for use by hardware functions.
         */
        struct resource dsm;
+       /**
+        * Reseved portion of Data Stolen Memory
+        */
+       struct resource dsm_reserved;
 
        void __iomem *regs;
 
index 30a2920..db20c72 100644 (file)
@@ -382,8 +382,6 @@ struct i915_ggtt {
         * hardware functions and similarly removed from the accessible range.
         */
        u32 stolen_usable_size; /* Total size minus reserved ranges */
-       u32 stolen_reserved_base;
-       u32 stolen_reserved_size;
 
        /** "Graphics Stolen Memory" holds the global PTEs */
        void __iomem *gsm;
index 5b5558f..b6cca0d 100644 (file)
@@ -394,17 +394,15 @@ int i915_gem_init_stolen(struct drm_i915_private *dev_priv)
                reserved_base = stolen_top;
        }
 
-       if (reserved_base < dev_priv->dsm.start ||
-           reserved_base + reserved_size > stolen_top) {
-               dma_addr_t reserved_top = reserved_base + reserved_size;
-               DRM_ERROR("Stolen reserved area [%pad - %pad] outside stolen memory %pR\n",
-                         &reserved_base, &reserved_top, &dev_priv->dsm);
+       dev_priv->dsm_reserved =
+               (struct resource) DEFINE_RES_MEM(reserved_base, reserved_size);
+
+       if (!resource_contains(&dev_priv->dsm, &dev_priv->dsm_reserved)) {
+               DRM_ERROR("Stolen reserved area %pR outside stolen memory %pR\n",
+                         &dev_priv->dsm_reserved, &dev_priv->dsm);
                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
         * memory, so just consider the start. */
        reserved_total = stolen_top - reserved_base;
index 79b3fd6..57dcf8e 100644 (file)
@@ -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)
 {
-       struct i915_ggtt *ggtt = &dev_priv->ggtt;
        bool enable_rc6 = true;
        unsigned long rc6_ctx_base;
        u32 rc_ctl;
@@ -6441,9 +6440,8 @@ static bool bxt_check_bios_rc6_setup(struct drm_i915_private *dev_priv)
         * for this check.
         */
        rc6_ctx_base = I915_READ(RC6_CTX_BASE) & RC6_CTX_BASE_MASK;
-       if (!((rc6_ctx_base >= ggtt->stolen_reserved_base) &&
-             (rc6_ctx_base + PAGE_SIZE <= ggtt->stolen_reserved_base +
-                                       ggtt->stolen_reserved_size))) {
+       if (!((rc6_ctx_base >= dev_priv->dsm_reserved.start) &&
+             (rc6_ctx_base + PAGE_SIZE < dev_priv->dsm_reserved.end))) {
                DRM_DEBUG_DRIVER("RC6 Base address not as expected.\n");
                enable_rc6 = false;
        }