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, xe}/bo: move display bo calls to parent interface

Continue i915 and xe separation from display by moving the bo calls to
the display parent interface. Instead of adding all these functions to
intel_parent.[ch], reuse the now vacated intel_bo.[ch], and avoid mass
renames to calls of these functions. This is similar to
intel_display_rpm.[ch].

Make many of the hooks optional to avoid having to implement dummy
functions in xe. Indeed now we can remove many of the existing dummy
functions.

Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
Link: https://patch.msgid.link/7899eef2ccf0cd603df69099df065226a0df917b.1773238670.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>

+138 -45
+1
drivers/gpu/drm/i915/Makefile
··· 240 240 display/intel_atomic.o \ 241 241 display/intel_audio.o \ 242 242 display/intel_bios.o \ 243 + display/intel_bo.o \ 243 244 display/intel_bw.o \ 244 245 display/intel_casf.o \ 245 246 display/intel_cdclk.o \
+66
drivers/gpu/drm/i915/display/intel_bo.c
··· 1 + // SPDX-License-Identifier: MIT 2 + /* Copyright © 2026 Intel Corporation */ 3 + 4 + #include <drm/drm_gem.h> 5 + #include <drm/intel/display_parent_interface.h> 6 + 7 + #include "intel_bo.h" 8 + #include "intel_display_core.h" 9 + #include "intel_display_types.h" 10 + 11 + bool intel_bo_is_tiled(struct drm_gem_object *obj) 12 + { 13 + struct intel_display *display = to_intel_display(obj->dev); 14 + 15 + return display->parent->bo->is_tiled && display->parent->bo->is_tiled(obj); 16 + } 17 + 18 + bool intel_bo_is_userptr(struct drm_gem_object *obj) 19 + { 20 + struct intel_display *display = to_intel_display(obj->dev); 21 + 22 + return display->parent->bo->is_userptr && display->parent->bo->is_userptr(obj); 23 + } 24 + 25 + bool intel_bo_is_shmem(struct drm_gem_object *obj) 26 + { 27 + struct intel_display *display = to_intel_display(obj->dev); 28 + 29 + return display->parent->bo->is_shmem && display->parent->bo->is_shmem(obj); 30 + } 31 + 32 + bool intel_bo_is_protected(struct drm_gem_object *obj) 33 + { 34 + struct intel_display *display = to_intel_display(obj->dev); 35 + 36 + return display->parent->bo->is_protected(obj); 37 + } 38 + 39 + int intel_bo_key_check(struct drm_gem_object *obj) 40 + { 41 + struct intel_display *display = to_intel_display(obj->dev); 42 + 43 + return display->parent->bo->key_check(obj); 44 + } 45 + 46 + int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) 47 + { 48 + struct intel_display *display = to_intel_display(obj->dev); 49 + 50 + return display->parent->bo->fb_mmap(obj, vma); 51 + } 52 + 53 + int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size) 54 + { 55 + struct intel_display *display = to_intel_display(obj->dev); 56 + 57 + return display->parent->bo->read_from_page(obj, offset, dst, size); 58 + } 59 + 60 + void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj) 61 + { 62 + struct intel_display *display = to_intel_display(obj->dev); 63 + 64 + if (display->parent->bo->describe) 65 + display->parent->bo->describe(m, obj); 66 + }
+22 -10
drivers/gpu/drm/i915/i915_bo.c
··· 2 2 /* Copyright © 2024 Intel Corporation */ 3 3 4 4 #include <drm/drm_panic.h> 5 - 6 - #include "display/intel_bo.h" 5 + #include <drm/intel/display_parent_interface.h> 7 6 8 7 #include "gem/i915_gem_mman.h" 9 8 #include "gem/i915_gem_object.h" 10 9 #include "gem/i915_gem_object_frontbuffer.h" 11 10 #include "pxp/intel_pxp.h" 11 + 12 + #include "i915_bo.h" 12 13 #include "i915_debugfs.h" 13 14 14 - bool intel_bo_is_tiled(struct drm_gem_object *obj) 15 + static bool i915_bo_is_tiled(struct drm_gem_object *obj) 15 16 { 16 17 return i915_gem_object_is_tiled(to_intel_bo(obj)); 17 18 } 18 19 19 - bool intel_bo_is_userptr(struct drm_gem_object *obj) 20 + static bool i915_bo_is_userptr(struct drm_gem_object *obj) 20 21 { 21 22 return i915_gem_object_is_userptr(to_intel_bo(obj)); 22 23 } 23 24 24 - bool intel_bo_is_shmem(struct drm_gem_object *obj) 25 + static bool i915_bo_is_shmem(struct drm_gem_object *obj) 25 26 { 26 27 return i915_gem_object_is_shmem(to_intel_bo(obj)); 27 28 } 28 29 29 - bool intel_bo_is_protected(struct drm_gem_object *obj) 30 + static bool i915_bo_is_protected(struct drm_gem_object *obj) 30 31 { 31 32 return i915_gem_object_is_protected(to_intel_bo(obj)); 32 33 } 33 34 34 - int intel_bo_key_check(struct drm_gem_object *obj) 35 + static int i915_bo_key_check(struct drm_gem_object *obj) 35 36 { 36 37 return intel_pxp_key_check(obj, false); 37 38 } 38 39 39 - int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) 40 + static int i915_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) 40 41 { 41 42 return i915_gem_fb_mmap(to_intel_bo(obj), vma); 42 43 } 43 44 44 - int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size) 45 + static int i915_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size) 45 46 { 46 47 return i915_gem_object_read_from_page(to_intel_bo(obj), offset, dst, size); 47 48 } 48 49 49 - void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj) 50 + static void i915_bo_describe(struct seq_file *m, struct drm_gem_object *obj) 50 51 { 51 52 i915_debugfs_describe_obj(m, to_intel_bo(obj)); 52 53 } 54 + 55 + const struct intel_display_bo_interface i915_display_bo_interface = { 56 + .is_tiled = i915_bo_is_tiled, 57 + .is_userptr = i915_bo_is_userptr, 58 + .is_shmem = i915_bo_is_shmem, 59 + .is_protected = i915_bo_is_protected, 60 + .key_check = i915_bo_key_check, 61 + .fb_mmap = i915_bo_fb_mmap, 62 + .read_from_page = i915_bo_read_from_page, 63 + .describe = i915_bo_describe, 64 + };
+9
drivers/gpu/drm/i915/i915_bo.h
··· 1 + /* SPDX-License-Identifier: MIT */ 2 + /* Copyright © 2026 Intel Corporation */ 3 + 4 + #ifndef __I915_BO_H__ 5 + #define __I915_BO_H__ 6 + 7 + extern const struct intel_display_bo_interface i915_display_bo_interface; 8 + 9 + #endif /* __I915_BO_H__ */
+2
drivers/gpu/drm/i915/i915_driver.c
··· 90 90 #include "pxp/intel_pxp_debugfs.h" 91 91 #include "pxp/intel_pxp_pm.h" 92 92 93 + #include "i915_bo.h" 93 94 #include "i915_debugfs.h" 94 95 #include "i915_display_pc8.h" 95 96 #include "i915_dpt.h" ··· 766 765 } 767 766 768 767 static const struct intel_display_parent_interface parent = { 768 + .bo = &i915_display_bo_interface, 769 769 .dpt = &i915_display_dpt_interface, 770 770 .dsb = &i915_display_dsb_interface, 771 771 .frontbuffer = &i915_display_frontbuffer_interface,
+1
drivers/gpu/drm/xe/Makefile
··· 233 233 i915-display/intel_audio.o \ 234 234 i915-display/intel_backlight.o \ 235 235 i915-display/intel_bios.o \ 236 + i915-display/intel_bo.o \ 236 237 i915-display/intel_bw.o \ 237 238 i915-display/intel_casf.o \ 238 239 i915-display/intel_cdclk.o \
+2
drivers/gpu/drm/xe/display/xe_display.c
··· 35 35 #include "intel_hotplug.h" 36 36 #include "intel_opregion.h" 37 37 #include "skl_watermark.h" 38 + #include "xe_display_bo.h" 38 39 #include "xe_display_pcode.h" 39 40 #include "xe_display_rpm.h" 40 41 #include "xe_dsb_buffer.h" ··· 542 541 }; 543 542 544 543 static const struct intel_display_parent_interface parent = { 544 + .bo = &xe_display_bo_interface, 545 545 .dsb = &xe_display_dsb_interface, 546 546 .frontbuffer = &xe_display_frontbuffer_interface, 547 547 .hdcp = &xe_display_hdcp_interface,
+10 -35
drivers/gpu/drm/xe/display/xe_display_bo.c
··· 2 2 /* Copyright © 2024 Intel Corporation */ 3 3 4 4 #include <drm/drm_gem.h> 5 + #include <drm/intel/display_parent_interface.h> 5 6 6 - #include "intel_bo.h" 7 - #include "intel_frontbuffer.h" 8 7 #include "xe_bo.h" 8 + #include "xe_display_bo.h" 9 9 #include "xe_pxp.h" 10 10 11 - bool intel_bo_is_tiled(struct drm_gem_object *obj) 12 - { 13 - /* legacy tiling is unused */ 14 - return false; 15 - } 16 - 17 - bool intel_bo_is_userptr(struct drm_gem_object *obj) 18 - { 19 - /* xe does not have userptr bos */ 20 - return false; 21 - } 22 - 23 - bool intel_bo_is_shmem(struct drm_gem_object *obj) 24 - { 25 - return false; 26 - } 27 - 28 - bool intel_bo_is_protected(struct drm_gem_object *obj) 11 + static bool xe_display_bo_is_protected(struct drm_gem_object *obj) 29 12 { 30 13 return xe_bo_is_protected(gem_to_xe_bo(obj)); 31 14 } 32 15 33 - int intel_bo_key_check(struct drm_gem_object *obj) 34 - { 35 - return xe_pxp_obj_key_check(obj); 36 - } 37 - 38 - int intel_bo_fb_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma) 39 - { 40 - return drm_gem_prime_mmap(obj, vma); 41 - } 42 - 43 - int intel_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size) 16 + static int xe_display_bo_read_from_page(struct drm_gem_object *obj, u64 offset, void *dst, int size) 44 17 { 45 18 struct xe_bo *bo = gem_to_xe_bo(obj); 46 19 47 20 return xe_bo_read(bo, offset, dst, size); 48 21 } 49 22 50 - void intel_bo_describe(struct seq_file *m, struct drm_gem_object *obj) 51 - { 52 - /* FIXME */ 53 - } 23 + const struct intel_display_bo_interface xe_display_bo_interface = { 24 + .is_protected = xe_display_bo_is_protected, 25 + .key_check = xe_pxp_obj_key_check, 26 + .fb_mmap = drm_gem_prime_mmap, 27 + .read_from_page = xe_display_bo_read_from_page, 28 + };
+9
drivers/gpu/drm/xe/display/xe_display_bo.h
··· 1 + /* SPDX-License-Identifier: MIT */ 2 + /* Copyright © 2026 Intel Corporation */ 3 + 4 + #ifndef __XE_DISPLAY_BO_H__ 5 + #define __XE_DISPLAY_BO_H__ 6 + 7 + extern const struct intel_display_bo_interface xe_display_bo_interface; 8 + 9 + #endif
+16
include/drm/intel/display_parent_interface.h
··· 23 23 struct intel_panic; 24 24 struct intel_stolen_node; 25 25 struct ref_tracker; 26 + struct seq_file; 27 + struct vm_area_struct; 26 28 27 29 /* Keep struct definitions sorted */ 30 + 31 + struct intel_display_bo_interface { 32 + bool (*is_tiled)(struct drm_gem_object *obj); /* Optional */ 33 + bool (*is_userptr)(struct drm_gem_object *obj); /* Optional */ 34 + bool (*is_shmem)(struct drm_gem_object *obj); /* Optional */ 35 + bool (*is_protected)(struct drm_gem_object *obj); 36 + int (*key_check)(struct drm_gem_object *obj); 37 + int (*fb_mmap)(struct drm_gem_object *obj, struct vm_area_struct *vma); 38 + int (*read_from_page)(struct drm_gem_object *obj, u64 offset, void *dst, int size); 39 + void (*describe)(struct seq_file *m, struct drm_gem_object *obj); /* Optional */ 40 + }; 28 41 29 42 struct intel_display_dpt_interface { 30 43 struct intel_dpt *(*create)(struct drm_gem_object *obj, size_t size); ··· 187 174 * check the optional pointers. 188 175 */ 189 176 struct intel_display_parent_interface { 177 + /** @bo: BO interface */ 178 + const struct intel_display_bo_interface *bo; 179 + 190 180 /** @dpt: DPT interface. Optional. */ 191 181 const struct intel_display_dpt_interface *dpt; 192 182