[PATCH v3 3/5] drm/xe/display: Avoid calling readq()
Matt Roper
matthew.d.roper at intel.com
Fri Jan 19 00:25:13 UTC 2024
On Thu, Jan 18, 2024 at 04:16:10PM -0800, Lucas De Marchi wrote:
> readq() is not available in 32bits and i915_gem_object_read_from_page()
> is supposed to allow reading arbitrary sizes determined by the `size`
> argument. Currently the only caller only passes a size == 8 so the second
> problem is not that big. Migrate to calling memcpy()/memcpy_fromio() to allow
> possible changes in the display side and to fix the build on 32b architectures.
>
> v2: Use memcpy/memcpy_fromio directly rather than using iosys-map with
> the same size == 8 bytes restriction (Matt Roper)
>
> Fixes: 44e694958b95 ("drm/xe/display: Implement display support")
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
Reviewed-by: Matt Roper <matthew.d.roper at intel.com>
> ---
> .../drm/xe/compat-i915-headers/gem/i915_gem_object.h | 11 +++++------
> 1 file changed, 5 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object.h b/drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object.h
> index 5f19550cc845..68d9f6116bdf 100644
> --- a/drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object.h
> +++ b/drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object.h
> @@ -35,12 +35,10 @@ static inline int i915_gem_object_read_from_page(struct xe_bo *bo,
> u32 ofs, u64 *ptr, u32 size)
> {
> struct ttm_bo_kmap_obj map;
> - void *virtual;
> + void *src;
> bool is_iomem;
> int ret;
>
> - XE_WARN_ON(size != 8);
> -
> ret = xe_bo_lock(bo, true);
> if (ret)
> return ret;
> @@ -50,11 +48,12 @@ static inline int i915_gem_object_read_from_page(struct xe_bo *bo,
> goto out_unlock;
>
> ofs &= ~PAGE_MASK;
> - virtual = ttm_kmap_obj_virtual(&map, &is_iomem);
> + src = ttm_kmap_obj_virtual(&map, &is_iomem);
> + src += ofs;
> if (is_iomem)
> - *ptr = readq((void __iomem *)(virtual + ofs));
> + memcpy_fromio(ptr, (void __iomem *)src, size);
> else
> - *ptr = *(u64 *)(virtual + ofs);
> + memcpy(ptr, src, size);
>
> ttm_bo_kunmap(&map);
> out_unlock:
> --
> 2.40.1
>
--
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation
More information about the Intel-xe
mailing list