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

Reply via email to