Split the size determination between caller and callee to drop the dependency on struct intel_framebuffer from DPT code, but avoid adding a dependency on I915_GTT_PAGE_SIZE in the caller side.
Pass zero size to let intel_dpt_create() handle the regular obj->size case, but remapped size if fb needs stride remap. Signed-off-by: Jani Nikula <[email protected]> --- drivers/gpu/drm/i915/display/intel_dpt.h | 5 ++--- drivers/gpu/drm/i915/display/intel_fb.c | 7 ++++++- drivers/gpu/drm/i915/i915_dpt.c | 8 ++------ drivers/gpu/drm/xe/display/xe_fb_pin.c | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/i915/display/intel_dpt.h b/drivers/gpu/drm/i915/display/intel_dpt.h index db521401b828..79d9bb80941a 100644 --- a/drivers/gpu/drm/i915/display/intel_dpt.h +++ b/drivers/gpu/drm/i915/display/intel_dpt.h @@ -8,10 +8,10 @@ #include <linux/types.h> +struct drm_gem_object; struct i915_address_space; struct i915_vma; struct intel_display; -struct intel_framebuffer; void intel_dpt_destroy(struct i915_address_space *vm); struct i915_vma *intel_dpt_pin_to_ggtt(struct i915_address_space *vm, @@ -19,8 +19,7 @@ struct i915_vma *intel_dpt_pin_to_ggtt(struct i915_address_space *vm, void intel_dpt_unpin_from_ggtt(struct i915_address_space *vm); void intel_dpt_suspend(struct intel_display *display); void intel_dpt_resume(struct intel_display *display); -struct i915_address_space * -intel_dpt_create(struct intel_framebuffer *fb); +struct i915_address_space *intel_dpt_create(struct drm_gem_object *obj, size_t size); u64 intel_dpt_offset(struct i915_vma *dpt_vma); #endif /* __INTEL_DPT_H__ */ diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c index b9bd9b6dfe94..5ea3ad27153c 100644 --- a/drivers/gpu/drm/i915/display/intel_fb.c +++ b/drivers/gpu/drm/i915/display/intel_fb.c @@ -2304,9 +2304,14 @@ int intel_framebuffer_init(struct intel_framebuffer *intel_fb, goto err_bo_framebuffer_fini; if (intel_fb_uses_dpt(fb)) { + struct drm_gem_object *obj = intel_fb_bo(&intel_fb->base); struct i915_address_space *vm; + size_t size = 0; - vm = intel_dpt_create(intel_fb); + if (intel_fb_needs_pot_stride_remap(intel_fb)) + size = intel_remapped_info_size(&intel_fb->remapped_view.gtt.remapped); + + vm = intel_dpt_create(obj, size); if (IS_ERR(vm)) { drm_dbg_kms(display->drm, "failed to create DPT\n"); ret = PTR_ERR(vm); diff --git a/drivers/gpu/drm/i915/i915_dpt.c b/drivers/gpu/drm/i915/i915_dpt.c index e229c5e26f5f..c01e5576f09e 100644 --- a/drivers/gpu/drm/i915/i915_dpt.c +++ b/drivers/gpu/drm/i915/i915_dpt.c @@ -243,19 +243,15 @@ void intel_dpt_suspend(struct intel_display *display) } struct i915_address_space * -intel_dpt_create(struct intel_framebuffer *fb) +intel_dpt_create(struct drm_gem_object *obj, size_t size) { - struct drm_gem_object *obj = intel_fb_bo(&fb->base); struct drm_i915_private *i915 = to_i915(obj->dev); struct drm_i915_gem_object *dpt_obj; struct i915_address_space *vm; struct i915_dpt *dpt; - size_t size; int ret; - if (intel_fb_needs_pot_stride_remap(fb)) - size = intel_remapped_info_size(&fb->remapped_view.gtt.remapped); - else + if (!size) size = DIV_ROUND_UP_ULL(obj->size, I915_GTT_PAGE_SIZE); size = round_up(size * sizeof(gen8_pte_t), I915_GTT_PAGE_SIZE); diff --git a/drivers/gpu/drm/xe/display/xe_fb_pin.c b/drivers/gpu/drm/xe/display/xe_fb_pin.c index d2c4e94180fa..36eb6c0b9d76 100644 --- a/drivers/gpu/drm/xe/display/xe_fb_pin.c +++ b/drivers/gpu/drm/xe/display/xe_fb_pin.c @@ -456,7 +456,7 @@ void intel_plane_unpin_fb(struct intel_plane_state *old_plane_state) * For Xe introduce dummy intel_dpt_create which just return NULL, * intel_dpt_destroy which does nothing, and fake intel_dpt_ofsset returning 0; */ -struct i915_address_space *intel_dpt_create(struct intel_framebuffer *fb) +struct i915_address_space *intel_dpt_create(struct drm_gem_object *obj, size_t size) { return NULL; } -- 2.47.3
