aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2014-09-11 07:28:08 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-09-19 08:41:19 -0400
commit40bae736116233a7e46711a9d28fc72d0e7d33eb (patch)
tree1ed20b361de2f5ca90d33aa836fcbea08d602a02 /drivers
parent4144f9b5e003e65b7e4be6abfff133bc83e73fec (diff)
drm/i915: Extend BIOS stolen mem handling to all platform
Based upon a patch from Deepak, but reworked to only apply on gen7+ and with the logic a bit clarified. v2: Fix s/SHIFT/MASK/ fumble that Ville spotted. Cc: Deepak S <deepak.s@intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/i915/i915_gem_stolen.c13
-rw-r--r--drivers/gpu/drm/i915/i915_reg.h8
2 files changed, 19 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c b/drivers/gpu/drm/i915/i915_gem_stolen.c
index 21c025a209c0..85fda6b803e4 100644
--- a/drivers/gpu/drm/i915/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
@@ -289,6 +289,7 @@ void i915_gem_cleanup_stolen(struct drm_device *dev)
289int i915_gem_init_stolen(struct drm_device *dev) 289int i915_gem_init_stolen(struct drm_device *dev)
290{ 290{
291 struct drm_i915_private *dev_priv = dev->dev_private; 291 struct drm_i915_private *dev_priv = dev->dev_private;
292 u32 tmp;
292 int bios_reserved = 0; 293 int bios_reserved = 0;
293 294
294#ifdef CONFIG_INTEL_IOMMU 295#ifdef CONFIG_INTEL_IOMMU
@@ -308,8 +309,16 @@ int i915_gem_init_stolen(struct drm_device *dev)
308 DRM_DEBUG_KMS("found %zd bytes of stolen memory at %08lx\n", 309 DRM_DEBUG_KMS("found %zd bytes of stolen memory at %08lx\n",
309 dev_priv->gtt.stolen_size, dev_priv->mm.stolen_base); 310 dev_priv->gtt.stolen_size, dev_priv->mm.stolen_base);
310 311
311 if (IS_VALLEYVIEW(dev)) 312 if (INTEL_INFO(dev)->gen >= 8) {
312 bios_reserved = 1024*1024; /* top 1M on VLV/BYT */ 313 tmp = I915_READ(GEN7_BIOS_RESERVED);
314 tmp >>= GEN8_BIOS_RESERVED_SHIFT;
315 tmp &= GEN8_BIOS_RESERVED_MASK;
316 bios_reserved = (1024*1024) << tmp;
317 } else if (IS_GEN7(dev)) {
318 tmp = I915_READ(GEN7_BIOS_RESERVED);
319 bios_reserved = tmp & GEN7_BIOS_RESERVED_256K ?
320 256*1024 : 1024*1024;
321 }
313 322
314 if (WARN_ON(bios_reserved > dev_priv->gtt.stolen_size)) 323 if (WARN_ON(bios_reserved > dev_priv->gtt.stolen_size))
315 return 0; 324 return 0;
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index b65bdfc23ccb..ad8179b40d19 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -143,6 +143,14 @@
143#define GAB_CTL 0x24000 143#define GAB_CTL 0x24000
144#define GAB_CTL_CONT_AFTER_PAGEFAULT (1<<8) 144#define GAB_CTL_CONT_AFTER_PAGEFAULT (1<<8)
145 145
146#define GEN7_BIOS_RESERVED 0x1082C0
147#define GEN7_BIOS_RESERVED_1M (0 << 5)
148#define GEN7_BIOS_RESERVED_256K (1 << 5)
149#define GEN8_BIOS_RESERVED_SHIFT 7
150#define GEN7_BIOS_RESERVED_MASK 0x1
151#define GEN8_BIOS_RESERVED_MASK 0x3
152
153
146/* VGA stuff */ 154/* VGA stuff */
147 155
148#define VGA_ST01_MDA 0x3ba 156#define VGA_ST01_MDA 0x3ba