Commit b3e523e5 authored by Jani Nikula's avatar Jani Nikula
Browse files

drm/i915/dpt: pass obj, size instead of framebuffer to intel_dpt_create()



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.

Reviewed-by: default avatarJuha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Link: https://patch.msgid.link/3a6e987ce8bb9f2c8d90c35342de14494a64de1b.1772030909.git.jani.nikula@intel.com


Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
parent dc88f63a
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -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__ */
+6 −1
Original line number Diff line number Diff line
@@ -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);
+2 −6
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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;
}