[PATCH 12/40] drm/i915: Use phys_addr_t for the address of stolen memory
Tvrtko Ursulin
tvrtko.ursulin at linux.intel.com
Thu Jan 5 16:40:42 UTC 2017
On 05/01/2017 14:54, Chris Wilson wrote:
> 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.
Not sure about this one. If we are changing it could as well make our
own stolen_addr_t and save some bytes?
Regards,
Tvrtko
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
> drivers/gpu/drm/i915/i915_drv.h | 2 +-
> drivers/gpu/drm/i915/i915_gem_stolen.c | 49 ++++++++++++++++++----------------
> 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 6073c3a675e7..d97dc0757eda 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 {
> struct work_struct free_work;
>
> /** Usable portion of the GTT for GEM */
> - unsigned long stolen_base; /* limited to low memory (32-bit) */
> + phys_addr_t stolen_base; /* limited to low memory (32-bit) */
>
> /** PPGTT used for aliasing the PPGTT with the GTT */
> 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)
> }
>
> static void g4x_get_stolen_reserved(struct drm_i915_private *dev_priv,
> - unsigned long *base, unsigned long *size)
> + phys_addr_t *base, unsigned long *size)
> {
> struct i915_ggtt *ggtt = &dev_priv->ggtt;
> uint32_t reg_val = I915_READ(IS_GM45(dev_priv) ?
> CTG_STOLEN_RESERVED :
> ELK_STOLEN_RESERVED);
> - unsigned long stolen_top = dev_priv->mm.stolen_base +
> - ggtt->stolen_size;
> + phys_addr_t stolen_top = dev_priv->mm.stolen_base + ggtt->stolen_size;
>
> *base = (reg_val & G4X_STOLEN_RESERVED_ADDR2_MASK) << 16;
>
> @@ -305,7 +304,7 @@ static void g4x_get_stolen_reserved(struct drm_i915_private *dev_priv,
> }
>
> static void gen6_get_stolen_reserved(struct drm_i915_private *dev_priv,
> - unsigned long *base, unsigned long *size)
> + phys_addr_t *base, unsigned long *size)
> {
> uint32_t reg_val = I915_READ(GEN6_STOLEN_RESERVED);
>
> @@ -331,7 +330,7 @@ static void gen6_get_stolen_reserved(struct drm_i915_private *dev_priv,
> }
>
> static void gen7_get_stolen_reserved(struct drm_i915_private *dev_priv,
> - unsigned long *base, unsigned long *size)
> + phys_addr_t *base, unsigned long *size)
> {
> uint32_t reg_val = I915_READ(GEN6_STOLEN_RESERVED);
>
> @@ -351,7 +350,7 @@ static void gen7_get_stolen_reserved(struct drm_i915_private *dev_priv,
> }
>
> static void chv_get_stolen_reserved(struct drm_i915_private *dev_priv,
> - unsigned long *base, unsigned long *size)
> + phys_addr_t *base, unsigned long *size)
> {
> uint32_t reg_val = I915_READ(GEN6_STOLEN_RESERVED);
>
> @@ -377,11 +376,11 @@ static void chv_get_stolen_reserved(struct drm_i915_private *dev_priv,
> }
>
> static void bdw_get_stolen_reserved(struct drm_i915_private *dev_priv,
> - unsigned long *base, unsigned long *size)
> + phys_addr_t *base, unsigned long *size)
> {
> struct i915_ggtt *ggtt = &dev_priv->ggtt;
> uint32_t reg_val = I915_READ(GEN6_STOLEN_RESERVED);
> - unsigned long stolen_top;
> + phys_addr_t stolen_top;
>
> stolen_top = dev_priv->mm.stolen_base + ggtt->stolen_size;
>
> @@ -400,8 +399,9 @@ static void bdw_get_stolen_reserved(struct drm_i915_private *dev_priv,
> int i915_gem_init_stolen(struct drm_i915_private *dev_priv)
> {
> struct i915_ggtt *ggtt = &dev_priv->ggtt;
> - unsigned long reserved_total, reserved_base = 0, reserved_size;
> - unsigned long stolen_usable_start, stolen_top;
> + phys_addr_t reserved_base, stolen_top;
> + unsigned long reserved_total, reserved_size;
> + unsigned long stolen_usable_start;
>
> mutex_init(&dev_priv->mm.stolen_lock);
>
> @@ -420,6 +420,8 @@ int i915_gem_init_stolen(struct drm_i915_private *dev_priv)
> return 0;
>
> stolen_top = dev_priv->mm.stolen_base + ggtt->stolen_size;
> + reserved_base = 0;
> + reserved_size = 0;
>
> switch (INTEL_INFO(dev_priv)->gen) {
> case 2:
> @@ -427,8 +429,8 @@ int i915_gem_init_stolen(struct drm_i915_private *dev_priv)
> break;
> case 4:
> if (IS_G4X(dev_priv))
> - g4x_get_stolen_reserved(dev_priv, &reserved_base,
> - &reserved_size);
> + g4x_get_stolen_reserved(dev_priv,
> + &reserved_base, &reserved_size);
> break;
> case 5:
> /* Assume the gen6 maximum for the older platforms. */
> @@ -436,20 +438,20 @@ int i915_gem_init_stolen(struct drm_i915_private *dev_priv)
> reserved_base = stolen_top - reserved_size;
> break;
> case 6:
> - gen6_get_stolen_reserved(dev_priv, &reserved_base,
> - &reserved_size);
> + gen6_get_stolen_reserved(dev_priv,
> + &reserved_base, &reserved_size);
> break;
> case 7:
> - gen7_get_stolen_reserved(dev_priv, &reserved_base,
> - &reserved_size);
> + gen7_get_stolen_reserved(dev_priv,
> + &reserved_base, &reserved_size);
> break;
> default:
> if (IS_LP(dev_priv))
> - chv_get_stolen_reserved(dev_priv, &reserved_base,
> - &reserved_size);
> + chv_get_stolen_reserved(dev_priv,
> + &reserved_base, &reserved_size);
> else
> - bdw_get_stolen_reserved(dev_priv, &reserved_base,
> - &reserved_size);
> + bdw_get_stolen_reserved(dev_priv,
> + &reserved_base, &reserved_size);
> break;
> }
>
> @@ -462,9 +464,10 @@ int i915_gem_init_stolen(struct drm_i915_private *dev_priv)
>
> if (reserved_base < dev_priv->mm.stolen_base ||
> reserved_base + reserved_size > stolen_top) {
> - DRM_DEBUG_KMS("Stolen reserved area [0x%08lx - 0x%08lx] outside stolen memory [0x%08lx - 0x%08lx]\n",
> - reserved_base, reserved_base + reserved_size,
> - dev_priv->mm.stolen_base, stolen_top);
> + phys_addr_t reserved_top = reserved_base + reserved_size;
> + DRM_DEBUG_KMS("Stolen reserved area [%pa - %pa] outside stolen memory [%pa - %pa]\n",
> + &reserved_base, &reserved_top,
> + &dev_priv->mm.stolen_base, &stolen_top);
> return 0;
> }
>
>
More information about the Intel-gfx-trybot
mailing list