On Thu, Sep 12, 2024 at 05:46:06PM +0300, Juha-Pekka Heikkila wrote: > On Intel Xe2 hw tile4 is not supported with horizontal flip > > bspec 69853 The notes on this page seem to say that, but there's also bspec 68904 which seems to have two two conflicting statements that apply to Xe2: "Horizontal flip (mirror the image from right to left) supported with tile modes other than linear." implies this _is_ supported for Tile4 (and TileX), but immediately below that, "Horizontal flip (mirror the image from right to left) is not supported with tile mode of Tile4. Horizontal flip (mirror the image from right to left) is supported with tile mode of linear." says pretty much the opposite for Tile4 and linear. It might be worth explicitly confirming this with the hardware guys and getting them to re-visit the tagging of these bspec pages to avoid the conflicting information. Matt > > Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@xxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_fb.c | 13 +++++++++++++ > drivers/gpu/drm/i915/display/intel_fb.h | 1 + > drivers/gpu/drm/i915/display/skl_universal_plane.c | 12 ++++++++++++ > 3 files changed, 26 insertions(+) > > diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c > index d2ff21e98545..c9038d239eb2 100644 > --- a/drivers/gpu/drm/i915/display/intel_fb.c > +++ b/drivers/gpu/drm/i915/display/intel_fb.c > @@ -439,6 +439,19 @@ bool intel_fb_needs_64k_phys(u64 modifier) > INTEL_PLANE_CAP_NEED64K_PHYS); > } > > +/** > + * intel_fb_is_tile4_modifier: Check if a modifier is a tile4 modifier type > + * @modifier: Modifier to check > + * > + * Returns: > + * Returns %true if @modifier is a tile4 modifier. > + */ > +bool intel_fb_is_tile4_modifier(u64 modifier) > +{ > + return plane_caps_contain_any(lookup_modifier(modifier)->plane_caps, > + INTEL_PLANE_CAP_TILING_4); > +} > + > static bool check_modifier_display_ver_range(const struct intel_modifier_desc *md, > u8 display_ver_from, u8 display_ver_until) > { > diff --git a/drivers/gpu/drm/i915/display/intel_fb.h b/drivers/gpu/drm/i915/display/intel_fb.h > index 068f3aee99aa..bff87994cf2c 100644 > --- a/drivers/gpu/drm/i915/display/intel_fb.h > +++ b/drivers/gpu/drm/i915/display/intel_fb.h > @@ -35,6 +35,7 @@ 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_tile4_modifier(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); > diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c b/drivers/gpu/drm/i915/display/skl_universal_plane.c > index 17d4c880ecc4..4de41ab5060a 100644 > --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c > +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c > @@ -1591,6 +1591,18 @@ static int skl_plane_check_fb(const struct intel_crtc_state *crtc_state, > return -EINVAL; > } > > + /* > + * Starting with LNL and BMG tile4 hflip is not supported > + */ > + if (rotation & DRM_MODE_REFLECT_X && > + intel_fb_is_tile4_modifier(fb->modifier) && > + ((DISPLAY_VER(dev_priv) >= 14 && IS_DGFX(dev_priv)) || > + (DISPLAY_VER(dev_priv) >= 20 && !IS_DGFX(dev_priv)))) { > + drm_dbg_kms(&dev_priv->drm, > + "horizontal flip is not supported with tile4 surface formats\n"); > + return -EINVAL; > + } > + > if (drm_rotation_90_or_270(rotation)) { > if (!intel_fb_supports_90_270_rotation(to_intel_framebuffer(fb))) { > drm_dbg_kms(&dev_priv->drm, > -- > 2.45.2 > -- Matt Roper Graphics Software Engineer Linux GPU Platform Enablement Intel Corporation