aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2017-01-06 10:20:10 -0500
committerChris Wilson <chris@chris-wilson.co.uk>2017-01-06 11:02:08 -0500
commit46fad808b1b73c3f7c0b88016dcc6fb4cd549b27 (patch)
tree3e5462d96ecd8c6fa39090ed14fb8f339e216383
parentc4d3ae6852bd9f024611d2e8722736ca553e1e43 (diff)
drm/i915: Use phys_addr_t for the address of stolen memory
Though we know the hw is limited to keeping stolen memory inside the first 4GiB, it is clearer to the reader that we are handling physical address if we use phys_addr_t to refer to the base of stolen memory. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170106152013.24684-2-chris@chris-wilson.co.uk
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h2
-rw-r--r--drivers/gpu/drm/i915/i915_gem_stolen.c49
2 files changed, 27 insertions, 24 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index ce051a5b97ca..f66eeedecf97 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1453,7 +1453,7 @@ struct i915_gem_mm {
1453 struct work_struct free_work; 1453 struct work_struct free_work;
1454 1454
1455 /** Usable portion of the GTT for GEM */ 1455 /** Usable portion of the GTT for GEM */
1456 unsigned long stolen_base; /* limited to low memory (32-bit) */ 1456 phys_addr_t stolen_base; /* limited to low memory (32-bit) */
1457 1457
1458 /** PPGTT used for aliasing the PPGTT with the GTT */ 1458 /** PPGTT used for aliasing the PPGTT with the GTT */
1459 struct i915_hw_ppgtt *aliasing_ppgtt; 1459 struct i915_hw_ppgtt *aliasing_ppgtt;
diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c b/drivers/gpu/drm/i915/i915_gem_stolen.c
index f1a80bfa9919..38ae6b228ca9 100644
--- a/drivers/gpu/drm/i915/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
@@ -281,14 +281,13 @@ void i915_gem_cleanup_stolen(struct drm_device *dev)
281} 281}
282 282
283static void g4x_get_stolen_reserved(struct drm_i915_private *dev_priv, 283static void g4x_get_stolen_reserved(struct drm_i915_private *dev_priv,
284 unsigned long *base, unsigned long *size) 284 phys_addr_t *base, unsigned long *size)
285{ 285{
286 struct i915_ggtt *ggtt = &dev_priv->ggtt; 286 struct i915_ggtt *ggtt = &dev_priv->ggtt;
287 uint32_t reg_val = I915_READ(IS_GM45(dev_priv) ? 287 uint32_t reg_val = I915_READ(IS_GM45(dev_priv) ?
288 CTG_STOLEN_RESERVED : 288 CTG_STOLEN_RESERVED :
289 ELK_STOLEN_RESERVED); 289 ELK_STOLEN_RESERVED);
290 unsigned long stolen_top = dev_priv->mm.stolen_base + 290 phys_addr_t stolen_top = dev_priv->mm.stolen_base + ggtt->stolen_size;
291 ggtt->stolen_size;
292 291
293 *base = (reg_val & G4X_STOLEN_RESERVED_ADDR2_MASK) << 16; 292 *base = (reg_val & G4X_STOLEN_RESERVED_ADDR2_MASK) << 16;
294 293
@@ -305,7 +304,7 @@ static void g4x_get_stolen_reserved(struct drm_i915_private *dev_priv,
305} 304}
306 305
307static void gen6_get_stolen_reserved(struct drm_i915_private *dev_priv, 306static void gen6_get_stolen_reserved(struct drm_i915_private *dev_priv,
308 unsigned long *base, unsigned long *size) 307 phys_addr_t *base, unsigned long *size)
309{ 308{
310 uint32_t reg_val = I915_READ(GEN6_STOLEN_RESERVED); 309 uint32_t reg_val = I915_READ(GEN6_STOLEN_RESERVED);
311 310
@@ -331,7 +330,7 @@ static void gen6_get_stolen_reserved(struct drm_i915_private *dev_priv,
331} 330}
332 331
333static void gen7_get_stolen_reserved(struct drm_i915_private *dev_priv, 332static void gen7_get_stolen_reserved(struct drm_i915_private *dev_priv,
334 unsigned long *base, unsigned long *size) 333 phys_addr_t *base, unsigned long *size)
335{ 334{
336 uint32_t reg_val = I915_READ(GEN6_STOLEN_RESERVED); 335 uint32_t reg_val = I915_READ(GEN6_STOLEN_RESERVED);
337 336
@@ -351,7 +350,7 @@ static void gen7_get_stolen_reserved(struct drm_i915_private *dev_priv,
351} 350}
352 351
353static void chv_get_stolen_reserved(struct drm_i915_private *dev_priv, 352static void chv_get_stolen_reserved(struct drm_i915_private *dev_priv,
354 unsigned long *base, unsigned long *size) 353 phys_addr_t *base, unsigned long *size)
355{ 354{
356 uint32_t reg_val = I915_READ(GEN6_STOLEN_RESERVED); 355 uint32_t reg_val = I915_READ(GEN6_STOLEN_RESERVED);
357 356
@@ -377,11 +376,11 @@ static void chv_get_stolen_reserved(struct drm_i915_private *dev_priv,
377} 376}
378 377
379static void bdw_get_stolen_reserved(struct drm_i915_private *dev_priv, 378static void bdw_get_stolen_reserved(struct drm_i915_private *dev_priv,
380 unsigned long *base, unsigned long *size) 379 phys_addr_t *base, unsigned long *size)
381{ 380{
382 struct i915_ggtt *ggtt = &dev_priv->ggtt; 381 struct i915_ggtt *ggtt = &dev_priv->ggtt;
383 uint32_t reg_val = I915_READ(GEN6_STOLEN_RESERVED); 382 uint32_t reg_val = I915_READ(GEN6_STOLEN_RESERVED);
384 unsigned long stolen_top; 383 phys_addr_t stolen_top;
385 384
386 stolen_top = dev_priv->mm.stolen_base + ggtt->stolen_size; 385 stolen_top = dev_priv->mm.stolen_base + ggtt->stolen_size;
387 386
@@ -400,8 +399,9 @@ static void bdw_get_stolen_reserved(struct drm_i915_private *dev_priv,
400int i915_gem_init_stolen(struct drm_i915_private *dev_priv) 399int i915_gem_init_stolen(struct drm_i915_private *dev_priv)
401{ 400{
402 struct i915_ggtt *ggtt = &dev_priv->ggtt; 401 struct i915_ggtt *ggtt = &dev_priv->ggtt;
403 unsigned long reserved_total, reserved_base = 0, reserved_size; 402 phys_addr_t reserved_base, stolen_top;
404 unsigned long stolen_usable_start, stolen_top; 403 unsigned long reserved_total, reserved_size;
404 unsigned long stolen_usable_start;
405 405
406 mutex_init(&dev_priv->mm.stolen_lock); 406 mutex_init(&dev_priv->mm.stolen_lock);
407 407
@@ -420,6 +420,8 @@ int i915_gem_init_stolen(struct drm_i915_private *dev_priv)
420 return 0; 420 return 0;
421 421
422 stolen_top = dev_priv->mm.stolen_base + ggtt->stolen_size; 422 stolen_top = dev_priv->mm.stolen_base + ggtt->stolen_size;
423 reserved_base = 0;
424 reserved_size = 0;
423 425
424 switch (INTEL_INFO(dev_priv)->gen) { 426 switch (INTEL_INFO(dev_priv)->gen) {
425 case 2: 427 case 2:
@@ -427,8 +429,8 @@ int i915_gem_init_stolen(struct drm_i915_private *dev_priv)
427 break; 429 break;
428 case 4: 430 case 4:
429 if (IS_G4X(dev_priv)) 431 if (IS_G4X(dev_priv))
430 g4x_get_stolen_reserved(dev_priv, &reserved_base, 432 g4x_get_stolen_reserved(dev_priv,
431 &reserved_size); 433 &reserved_base, &reserved_size);
432 break; 434 break;
433 case 5: 435 case 5:
434 /* Assume the gen6 maximum for the older platforms. */ 436 /* Assume the gen6 maximum for the older platforms. */
@@ -436,20 +438,20 @@ int i915_gem_init_stolen(struct drm_i915_private *dev_priv)
436 reserved_base = stolen_top - reserved_size; 438 reserved_base = stolen_top - reserved_size;
437 break; 439 break;
438 case 6: 440 case 6:
439 gen6_get_stolen_reserved(dev_priv, &reserved_base, 441 gen6_get_stolen_reserved(dev_priv,
440 &reserved_size); 442 &reserved_base, &reserved_size);
441 break; 443 break;
442 case 7: 444 case 7:
443 gen7_get_stolen_reserved(dev_priv, &reserved_base, 445 gen7_get_stolen_reserved(dev_priv,
444 &reserved_size); 446 &reserved_base, &reserved_size);
445 break; 447 break;
446 default: 448 default:
447 if (IS_LP(dev_priv)) 449 if (IS_LP(dev_priv))
448 chv_get_stolen_reserved(dev_priv, &reserved_base, 450 chv_get_stolen_reserved(dev_priv,
449 &reserved_size); 451 &reserved_base, &reserved_size);
450 else 452 else
451 bdw_get_stolen_reserved(dev_priv, &reserved_base, 453 bdw_get_stolen_reserved(dev_priv,
452 &reserved_size); 454 &reserved_base, &reserved_size);
453 break; 455 break;
454 } 456 }
455 457
@@ -462,9 +464,10 @@ int i915_gem_init_stolen(struct drm_i915_private *dev_priv)
462 464
463 if (reserved_base < dev_priv->mm.stolen_base || 465 if (reserved_base < dev_priv->mm.stolen_base ||
464 reserved_base + reserved_size > stolen_top) { 466 reserved_base + reserved_size > stolen_top) {
465 DRM_DEBUG_KMS("Stolen reserved area [0x%08lx - 0x%08lx] outside stolen memory [0x%08lx - 0x%08lx]\n", 467 phys_addr_t reserved_top = reserved_base + reserved_size;
466 reserved_base, reserved_base + reserved_size, 468 DRM_DEBUG_KMS("Stolen reserved area [%pa - %pa] outside stolen memory [%pa - %pa]\n",
467 dev_priv->mm.stolen_base, stolen_top); 469 &reserved_base, &reserved_top,
470 &dev_priv->mm.stolen_base, &stolen_top);
468 return 0; 471 return 0;
469 } 472 }
470 473