[Intel-xe] [PATCH v2 5/9] drivers/xe: Move Xe stolen memory handling away form fbc code
Maarten Lankhorst
maarten.lankhorst at linux.intel.com
Tue May 30 14:13:30 UTC 2023
00000000000000
On 2023-05-30 12:47, Jouni Högander wrote:
> More correct place for Xe stolen memory handling details is in
> xe_ttm_stolen_mgr. Move it there and add necessary defines into
> i915_gem_stolen.h to satisfy fbc code.
>
> Signed-off-by: Jouni Högander <jouni.hogander at intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_fbc.c | 62 -----------------
> .../xe/compat-i915-headers/i915_gem_stolen.h | 66 +++++++++++++++++++
> drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c | 8 +++
> drivers/gpu/drm/xe/xe_ttm_stolen_mgr.h | 1 +
> 4 files changed, 75 insertions(+), 62 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c b/drivers/gpu/drm/i915/display/intel_fbc.c
> index 90c48ccce1a7..19698ab117a1 100644
> --- a/drivers/gpu/drm/i915/display/intel_fbc.c
> +++ b/drivers/gpu/drm/i915/display/intel_fbc.c
> @@ -61,68 +61,6 @@
> #define i915_gem_stolen_node_offset(node) ((node)->start)
> #define i915_gem_stolen_node_size(node) ((node)->size)
>
> -#else
> -
> -#include "xe_ttm_stolen_mgr.h"
> -#include "xe_res_cursor.h"
> -
> -static inline int i915_gem_stolen_insert_node_in_range(struct xe_device *xe,
> - struct i915_stolen_fb *fb,
> - u32 size, u32 align,
> - u32 start, u32 end)
> -{
> - struct xe_bo *bo;
> - int err;
> - u32 flags = XE_BO_CREATE_PINNED_BIT | XE_BO_CREATE_STOLEN_BIT;
> -
> - bo = xe_bo_create_locked_range(xe, to_gt(xe), NULL, size, start, end,
> - ttm_bo_type_kernel, flags);
> - if (IS_ERR(bo)) {
> - err = PTR_ERR(bo);
> - bo = NULL;
> - return err;
> - }
> - err = xe_bo_pin(bo);
> - xe_bo_unlock_vm_held(bo);
> -
> - if (err) {
> - xe_bo_put(bo);
> - bo = NULL;
> - }
> -
> - fb->bo = bo;
> -
> - return err;
> -}
> -
> -static int i915_gem_stolen_insert_node(struct xe_device *xe,
> - struct i915_stolen_fb *fb, u32 size,
> - u32 align)
> -{
> - /* Not used on xe */
> - BUG_ON(1);
> - return -ENODEV;
> -}
> -
> -static void i915_gem_stolen_remove_node(struct xe_device *xe,
> - struct i915_stolen_fb *fb)
> -{
> - xe_bo_unpin_map_no_vm(fb->bo);
> - fb->bo = NULL;
> -}
> -
> -#define i915_gem_stolen_initialized(xe) (!!ttm_manager_type(&(xe)->ttm, XE_PL_STOLEN))
> -#define i915_gem_stolen_node_allocated(fb) (!!(fb.bo))
> -
> -static inline u32 i915_gem_stolen_node_offset(struct i915_stolen_fb *fb)
> -{
> - struct xe_res_cursor res;
> -
> - xe_res_first(fb->bo->ttm.resource, 0, 4096, &res);
> - return res.start;
> -}
> -
> -#define i915_gem_stolen_node_size(fb) ((u64)((fb)->bo->ttm.base.size))
> #endif
>
> #define for_each_fbc_id(__dev_priv, __fbc_id) \
> diff --git a/drivers/gpu/drm/xe/compat-i915-headers/i915_gem_stolen.h b/drivers/gpu/drm/xe/compat-i915-headers/i915_gem_stolen.h
> index b6eeeba1087b..a9020d408407 100644
> --- a/drivers/gpu/drm/xe/compat-i915-headers/i915_gem_stolen.h
> +++ b/drivers/gpu/drm/xe/compat-i915-headers/i915_gem_stolen.h
> @@ -1,10 +1,76 @@
> #ifndef _I915_GEM_OBJECT_H_
> #define _I915_GEM_OBJECT_H_
>
> +#include "xe_ttm_stolen_mgr.h"
> +#include "xe_res_cursor.h"
> +
> struct xe_bo;
>
> struct i915_stolen_fb {
> struct xe_bo *bo;
> };
>
> +static inline int i915_gem_stolen_insert_node_in_range(struct xe_device *xe,
> + struct i915_stolen_fb *fb,
> + u32 size, u32 align,
> + u32 start, u32 end)
> +{
> + struct xe_bo *bo;
> + int err;
> + u32 flags = XE_BO_CREATE_PINNED_BIT | XE_BO_CREATE_STOLEN_BIT;
> +
> + bo = xe_bo_create_locked_range(xe, to_gt(xe), NULL, size, start, end,
> + ttm_bo_type_kernel, flags);
> + if (IS_ERR(bo)) {
> + err = PTR_ERR(bo);
> + bo = NULL;
> + return err;
> + }
> + err = xe_bo_pin(bo);
> + xe_bo_unlock_vm_held(bo);
> +
> + if (err) {
> + xe_bo_put(fb->bo);
> + bo = NULL;
> + }
> +
> + fb->bo = bo;
> +
> + return err;
> +}
> +
> +static inline int i915_gem_stolen_insert_node(struct xe_device *xe,
> + struct i915_stolen_fb *fb,
> + u32 size, u32 align)
> +{
> + /* Not used on xe */
> + BUG_ON(1);
> + return -ENODEV;
> +}
> +
> +static inline void i915_gem_stolen_remove_node(struct xe_device *xe,
> + struct i915_stolen_fb *fb)
> +{
> + xe_bo_unpin_map_no_vm(fb->bo);
> + fb->bo = NULL;
> +}
> +
> +#define i915_gem_stolen_initialized(xe) (!!ttm_manager_type(&(xe)->ttm, XE_PL_STOLEN))
> +#define i915_gem_stolen_node_allocated(fb) (!!(fb.bo))
> +
> +static inline u32 i915_gem_stolen_node_offset(struct i915_stolen_fb *fb)
> +{
> + struct xe_res_cursor res;
> +
> + xe_res_first(fb->bo->ttm.resource, 0, 4096, &res);
> + return res.start;
> +}
> +
> +#define i915_gem_stolen_area_address(xe) (xe_ttm_stolen_gpu_offset(xe))
> +#define i915_gem_stolen_area_size(xe) (xe_ttm_stolen_size(xe))
area_size is used for a workaround that's gen9 specific, no point in adding it for xe. Could be (!WARN_ON(1)) instead.
Similarly, the check for area_address is pointless in Xe, as it's used for programming gen4-.
That's why it was ifdeffed out. If it's not expected to be used, it's better not to implement.
~Maarten
More information about the Intel-xe
mailing list