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/display: Add i915 hook for format_mod_supported_async

Hook up the newly added plane function pointer
format_mod_supported_async to populate the modifiers/formats supported
by asynchronous flips.

v5: Correct the if condition for modifier support check (Chaitanya)
v6: Replace uint32_t/uint64_t with u32/u64 (Jani)
v7: Move plannar check from intel_async_flip_check_hw() to
intel_plane_format_mod_supported_async() (Ville)
v8: In case of error print format/modifier (Chaitanya)
v9: Exclude C8 format as its not supported by hardware
v10: filter only planar formats
move changes in can_async_flip to new patch (Ville)

Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
Link: https://lore.kernel.org/r/20250407-asyn-v13-4-b93ef83076c5@intel.com

authored by

Arun R Murthy and committed by
Suraj Kandpal
01963b62 ed1d563c

+19
+2
drivers/gpu/drm/i915/display/i9xx_plane.c
··· 897 897 .atomic_duplicate_state = intel_plane_duplicate_state, 898 898 .atomic_destroy_state = intel_plane_destroy_state, 899 899 .format_mod_supported = i965_plane_format_mod_supported, 900 + .format_mod_supported_async = intel_plane_format_mod_supported_async, 900 901 }; 901 902 902 903 static const struct drm_plane_funcs i8xx_plane_funcs = { ··· 907 906 .atomic_duplicate_state = intel_plane_duplicate_state, 908 907 .atomic_destroy_state = intel_plane_destroy_state, 909 908 .format_mod_supported = i8xx_plane_format_mod_supported, 909 + .format_mod_supported_async = intel_plane_format_mod_supported_async, 910 910 }; 911 911 912 912 struct intel_plane *
+11
drivers/gpu/drm/i915/display/intel_atomic_plane.c
··· 183 183 return plane->can_async_flip && plane->can_async_flip(modifier); 184 184 } 185 185 186 + bool intel_plane_format_mod_supported_async(struct drm_plane *plane, 187 + u32 format, 188 + u64 modifier) 189 + { 190 + if (!plane->funcs->format_mod_supported(plane, format, modifier)) 191 + return false; 192 + 193 + return intel_plane_can_async_flip(to_intel_plane(plane), 194 + format, modifier); 195 + } 196 + 186 197 unsigned int intel_adjusted_rate(const struct drm_rect *src, 187 198 const struct drm_rect *dst, 188 199 unsigned int rate)
+3
drivers/gpu/drm/i915/display/intel_atomic_plane.h
··· 90 90 int intel_atomic_check_planes(struct intel_atomic_state *state); 91 91 92 92 u32 intel_plane_ggtt_offset(const struct intel_plane_state *plane_state); 93 + bool intel_plane_format_mod_supported_async(struct drm_plane *plane, 94 + u32 format, 95 + u64 modifier); 93 96 94 97 #endif /* __INTEL_ATOMIC_PLANE_H__ */
+3
drivers/gpu/drm/i915/display/skl_universal_plane.c
··· 2666 2666 .atomic_duplicate_state = intel_plane_duplicate_state, 2667 2667 .atomic_destroy_state = intel_plane_destroy_state, 2668 2668 .format_mod_supported = skl_plane_format_mod_supported, 2669 + .format_mod_supported_async = intel_plane_format_mod_supported_async, 2669 2670 }; 2670 2671 2671 2672 static const struct drm_plane_funcs icl_plane_funcs = { ··· 2676 2675 .atomic_duplicate_state = intel_plane_duplicate_state, 2677 2676 .atomic_destroy_state = intel_plane_destroy_state, 2678 2677 .format_mod_supported = icl_plane_format_mod_supported, 2678 + .format_mod_supported_async = intel_plane_format_mod_supported_async, 2679 2679 }; 2680 2680 2681 2681 static const struct drm_plane_funcs tgl_plane_funcs = { ··· 2686 2684 .atomic_duplicate_state = intel_plane_duplicate_state, 2687 2685 .atomic_destroy_state = intel_plane_destroy_state, 2688 2686 .format_mod_supported = tgl_plane_format_mod_supported, 2687 + .format_mod_supported_async = intel_plane_format_mod_supported_async, 2689 2688 }; 2690 2689 2691 2690 static void