Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Link: https://patch.msgid.link/3a6e987ce8bb9f2c8d90c35342de14494a64de1b.1772030909.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>

+11 -11
+2 -3
drivers/gpu/drm/i915/display/intel_dpt.h
··· 8 8 9 9 #include <linux/types.h> 10 10 11 + struct drm_gem_object; 11 12 struct i915_address_space; 12 13 struct i915_vma; 13 14 struct intel_display; 14 - struct intel_framebuffer; 15 15 16 16 void intel_dpt_destroy(struct i915_address_space *vm); 17 17 struct i915_vma *intel_dpt_pin_to_ggtt(struct i915_address_space *vm, ··· 19 19 void intel_dpt_unpin_from_ggtt(struct i915_address_space *vm); 20 20 void intel_dpt_suspend(struct intel_display *display); 21 21 void intel_dpt_resume(struct intel_display *display); 22 - struct i915_address_space * 23 - intel_dpt_create(struct intel_framebuffer *fb); 22 + struct i915_address_space *intel_dpt_create(struct drm_gem_object *obj, size_t size); 24 23 u64 intel_dpt_offset(struct i915_vma *dpt_vma); 25 24 26 25 #endif /* __INTEL_DPT_H__ */
+6 -1
drivers/gpu/drm/i915/display/intel_fb.c
··· 2304 2304 goto err_bo_framebuffer_fini; 2305 2305 2306 2306 if (intel_fb_uses_dpt(fb)) { 2307 + struct drm_gem_object *obj = intel_fb_bo(&intel_fb->base); 2307 2308 struct i915_address_space *vm; 2309 + size_t size = 0; 2308 2310 2309 - vm = intel_dpt_create(intel_fb); 2311 + if (intel_fb_needs_pot_stride_remap(intel_fb)) 2312 + size = intel_remapped_info_size(&intel_fb->remapped_view.gtt.remapped); 2313 + 2314 + vm = intel_dpt_create(obj, size); 2310 2315 if (IS_ERR(vm)) { 2311 2316 drm_dbg_kms(display->drm, "failed to create DPT\n"); 2312 2317 ret = PTR_ERR(vm);
+2 -6
drivers/gpu/drm/i915/i915_dpt.c
··· 243 243 } 244 244 245 245 struct i915_address_space * 246 - intel_dpt_create(struct intel_framebuffer *fb) 246 + intel_dpt_create(struct drm_gem_object *obj, size_t size) 247 247 { 248 - struct drm_gem_object *obj = intel_fb_bo(&fb->base); 249 248 struct drm_i915_private *i915 = to_i915(obj->dev); 250 249 struct drm_i915_gem_object *dpt_obj; 251 250 struct i915_address_space *vm; 252 251 struct i915_dpt *dpt; 253 - size_t size; 254 252 int ret; 255 253 256 - if (intel_fb_needs_pot_stride_remap(fb)) 257 - size = intel_remapped_info_size(&fb->remapped_view.gtt.remapped); 258 - else 254 + if (!size) 259 255 size = DIV_ROUND_UP_ULL(obj->size, I915_GTT_PAGE_SIZE); 260 256 261 257 size = round_up(size * sizeof(gen8_pte_t), I915_GTT_PAGE_SIZE);
+1 -1
drivers/gpu/drm/xe/display/xe_fb_pin.c
··· 456 456 * For Xe introduce dummy intel_dpt_create which just return NULL, 457 457 * intel_dpt_destroy which does nothing, and fake intel_dpt_ofsset returning 0; 458 458 */ 459 - struct i915_address_space *intel_dpt_create(struct intel_framebuffer *fb) 459 + struct i915_address_space *intel_dpt_create(struct drm_gem_object *obj, size_t size) 460 460 { 461 461 return NULL; 462 462 }