]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
drm/i915/display: Plane capability for 64k phys alignment
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Mon, 26 Aug 2024 17:01:15 +0000 (19:01 +0200)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Tue, 27 Aug 2024 22:15:20 +0000 (18:15 -0400)
Some plane formats have been designed to require 64k physical alignment.
By returning whether this is the case for certain formats, we do not
need to hardcode this check inside Xe.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: Zbigniew KempczyƄski <zbigniew.kempczynski@intel.com>
Acked-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240826170117.327709-2-maarten.lankhorst@linux.intel.com
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/i915/display/intel_fb.c
drivers/gpu/drm/i915/display/intel_fb.h

index d2716915d046d99b02025f7e31ff6fb8e25434df..5be7bb43e2e0d0ea2646df162f440d3443c67ed5 100644 (file)
@@ -169,7 +169,7 @@ static const struct intel_modifier_desc intel_modifiers[] = {
        }, {
                .modifier = I915_FORMAT_MOD_4_TILED_BMG_CCS,
                .display_ver = { 14, -1 },
-               .plane_caps = INTEL_PLANE_CAP_TILING_4,
+               .plane_caps = INTEL_PLANE_CAP_TILING_4 | INTEL_PLANE_CAP_NEED64K_PHYS,
        }, {
                .modifier = I915_FORMAT_MOD_4_TILED_MTL_MC_CCS,
                .display_ver = { 14, 14 },
@@ -420,6 +420,24 @@ bool intel_fb_is_mc_ccs_modifier(u64 modifier)
                                      INTEL_PLANE_CAP_CCS_MC);
 }
 
+/**
+ * intel_fb_needs_64k_phys: Check if modifier requires 64k physical placement.
+ * @modifier: Modifier to check
+ *
+ * Returns:
+ * Returns %true if @modifier requires 64k aligned physical pages.
+ */
+bool intel_fb_needs_64k_phys(u64 modifier)
+{
+       const struct intel_modifier_desc *md = lookup_modifier_or_null(modifier);
+
+       if (!md)
+               return false;
+
+       return plane_caps_contain_any(md->plane_caps,
+                                     INTEL_PLANE_CAP_NEED64K_PHYS);
+}
+
 static bool check_modifier_display_ver_range(const struct intel_modifier_desc *md,
                                             u8 display_ver_from, u8 display_ver_until)
 {
index 6dee0c8b7f2264fd7bc3793e87fb59b4cb92fec8..10de437e8ef845eab444fb2bbcdb201ee1a9fee5 100644 (file)
@@ -28,11 +28,13 @@ struct intel_plane_state;
 #define INTEL_PLANE_CAP_TILING_Y       BIT(4)
 #define INTEL_PLANE_CAP_TILING_Yf      BIT(5)
 #define INTEL_PLANE_CAP_TILING_4       BIT(6)
+#define INTEL_PLANE_CAP_NEED64K_PHYS   BIT(7)
 
 bool intel_fb_is_tiled_modifier(u64 modifier);
 bool intel_fb_is_ccs_modifier(u64 modifier);
 bool intel_fb_is_rc_ccs_cc_modifier(u64 modifier);
 bool intel_fb_is_mc_ccs_modifier(u64 modifier);
+bool intel_fb_needs_64k_phys(u64 modifier);
 
 bool intel_fb_is_ccs_aux_plane(const struct drm_framebuffer *fb, int color_plane);
 int intel_fb_rc_ccs_cc_plane(const struct drm_framebuffer *fb);