drm/i915: Move intel_format_info_is_yuv_semiplanar() to intel_fb.c
authorImre Deak <imre.deak@intel.com>
Wed, 20 Oct 2021 19:51:33 +0000 (22:51 +0300)
committerImre Deak <imre.deak@intel.com>
Thu, 21 Oct 2021 18:44:36 +0000 (21:44 +0300)
Move intel_format_info_is_yuv_semiplanar() to intel_fb.c . The number of
planes for YUV semiplanar formats using CCS modifiers will change on
future platforms. We can use the modifier descriptors to simplify
getting the plane numbers for all modifiers, prepare for that here.

Cc: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
Reviewed-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211020195138.1841242-7-imre.deak@intel.com
drivers/gpu/drm/i915/display/intel_atomic_plane.c
drivers/gpu/drm/i915/display/intel_display.c
drivers/gpu/drm/i915/display/intel_display.h
drivers/gpu/drm/i915/display/intel_fb.c
drivers/gpu/drm/i915/display/intel_fb.h
drivers/gpu/drm/i915/intel_pm.c

index 0be8c00e3db9ad7c8306d32f63a9201f208f346d..f61a48e1a562b77a0fdbc40b1e3c8bc6d3fff0d3 100644 (file)
@@ -39,6 +39,7 @@
 #include "intel_atomic_plane.h"
 #include "intel_cdclk.h"
 #include "intel_display_types.h"
+#include "intel_fb.h"
 #include "intel_fb_pin.h"
 #include "intel_pm.h"
 #include "intel_sprite.h"
index 86333c0cd79373e0177cf17d9f7e8e3b6e29fbf6..c66d525612ad1f005ead5544d7dc60d73c24603e 100644 (file)
@@ -595,14 +595,6 @@ void intel_disable_transcoder(const struct intel_crtc_state *old_crtc_state)
                intel_wait_for_pipe_off(old_crtc_state);
 }
 
-bool
-intel_format_info_is_yuv_semiplanar(const struct drm_format_info *info,
-                                   u64 modifier)
-{
-       return info->is_yuv &&
-              info->num_planes == (is_ccs_modifier(modifier) ? 4 : 2);
-}
-
 unsigned int intel_rotation_info_size(const struct intel_rotation_info *rot_info)
 {
        unsigned int size = 0;
index c2efba7c6c172966a0506bec6009c4b71707299d..38c15ec30ee7cf2434a9a5ce69d0fb60d6a5af22 100644 (file)
@@ -605,9 +605,6 @@ int bdw_get_pipemisc_bpp(struct intel_crtc *crtc);
 unsigned int intel_plane_fence_y_offset(const struct intel_plane_state *plane_state);
 
 bool intel_plane_uses_fence(const struct intel_plane_state *plane_state);
-bool
-intel_format_info_is_yuv_semiplanar(const struct drm_format_info *info,
-                                   u64 modifier);
 
 struct intel_encoder *
 intel_get_crtc_new_encoder(const struct intel_atomic_state *state,
index 3fe22f4418a0de8c5b3af2d0894be7cb3e809523..00e76571799ed9e6836d3271fd653d9491135838 100644 (file)
@@ -330,6 +330,36 @@ bool intel_fb_plane_supports_modifier(struct intel_plane *plane, u64 modifier)
        return false;
 }
 
+static bool format_is_yuv_semiplanar(const struct intel_modifier_desc *md,
+                                    const struct drm_format_info *info)
+{
+       int yuv_planes;
+
+       if (!info->is_yuv)
+               return false;
+
+       if (is_ccs_type_modifier(md, INTEL_CCS_ANY))
+               yuv_planes = 4;
+       else
+               yuv_planes = 2;
+
+       return info->num_planes == yuv_planes;
+}
+
+/**
+ * intel_format_info_is_yuv_semiplanar: Check if the given format is YUV semiplanar
+ * @info: format to check
+ * @modifier: modifier used with the format
+ *
+ * Returns:
+ * %true if @info / @modifier is YUV semiplanar.
+ */
+bool intel_format_info_is_yuv_semiplanar(const struct drm_format_info *info,
+                                        u64 modifier)
+{
+       return format_is_yuv_semiplanar(lookup_modifier(modifier), info);
+}
+
 bool is_ccs_plane(const struct drm_framebuffer *fb, int plane)
 {
        if (!is_ccs_modifier(fb->modifier))
index c331df575490dc3a4be15c1ff81e1ea488281685..a2cdf48f13395bcac8475836c3e8b605956b03f1 100644 (file)
@@ -38,6 +38,10 @@ bool intel_fb_plane_supports_modifier(struct intel_plane *plane, u64 modifier);
 const struct drm_format_info *
 intel_fb_get_format_info(const struct drm_mode_fb_cmd2 *cmd);
 
+bool
+intel_format_info_is_yuv_semiplanar(const struct drm_format_info *info,
+                                   u64 modifier);
+
 bool is_surface_linear(const struct drm_framebuffer *fb, int color_plane);
 
 int main_to_ccs_plane(const struct drm_framebuffer *fb, int main_plane);
index aaa3a0998e4c65b9c8e2860dd5b0640da65d2801..9089569f36a3c8fde62a0d1c3ad45a4d5f1fae75 100644 (file)
@@ -37,6 +37,7 @@
 #include "display/intel_bw.h"
 #include "display/intel_de.h"
 #include "display/intel_display_types.h"
+#include "display/intel_fb.h"
 #include "display/intel_fbc.h"
 #include "display/intel_sprite.h"
 #include "display/skl_universal_plane.h"