For 444 to 420 output format conversion, scaler uses 2x downscaling in
each direction. Introduce skl_scaler_chroma_downscale_factor() to
encapsulate the chroma subsampling adjustment used in scaler/dsc
pre-fill latency calculations.

Signed-off-by: Ankit Nautiyal <ankit.k.nauti...@intel.com>
---
 drivers/gpu/drm/i915/display/skl_scaler.c    | 5 +++++
 drivers/gpu/drm/i915/display/skl_scaler.h    | 2 ++
 drivers/gpu/drm/i915/display/skl_watermark.c | 7 +++----
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/skl_scaler.c 
b/drivers/gpu/drm/i915/display/skl_scaler.c
index 4cc55f4e1f9f..a8244684df62 100644
--- a/drivers/gpu/drm/i915/display/skl_scaler.c
+++ b/drivers/gpu/drm/i915/display/skl_scaler.c
@@ -938,3 +938,8 @@ void skl_scaler_get_config(struct intel_crtc_state 
*crtc_state)
        else
                scaler_state->scaler_users &= ~(1 << SKL_CRTC_INDEX);
 }
+
+int skl_scaler_chroma_downscale_factor(const struct intel_crtc_state 
*crtc_state)
+{
+       return crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420 ? 4 : 
1;
+}
diff --git a/drivers/gpu/drm/i915/display/skl_scaler.h 
b/drivers/gpu/drm/i915/display/skl_scaler.h
index e3b35d2c13be..80b0eaa64bde 100644
--- a/drivers/gpu/drm/i915/display/skl_scaler.h
+++ b/drivers/gpu/drm/i915/display/skl_scaler.h
@@ -42,4 +42,6 @@ skl_scaler_mode_valid(struct intel_display *display,
                      enum intel_output_format output_format,
                      int num_joined_pipes);
 
+int skl_scaler_chroma_downscale_factor(const struct intel_crtc_state 
*crtc_state);
+
 #endif
diff --git a/drivers/gpu/drm/i915/display/skl_watermark.c 
b/drivers/gpu/drm/i915/display/skl_watermark.c
index 97f08d78d22f..6c7e9e7d7b8e 100644
--- a/drivers/gpu/drm/i915/display/skl_watermark.c
+++ b/drivers/gpu/drm/i915/display/skl_watermark.c
@@ -31,6 +31,7 @@
 #include "intel_plane.h"
 #include "intel_wm.h"
 #include "skl_universal_plane_regs.h"
+#include "skl_scaler.h"
 #include "skl_watermark.h"
 #include "skl_watermark_regs.h"
 
@@ -2183,8 +2184,7 @@ dsc_prefill_latency(const struct intel_crtc_state 
*crtc_state, int linetime)
        const struct intel_crtc_scaler_state *scaler_state =
                                        &crtc_state->scaler_state;
        int num_scaler_users = hweight32(scaler_state->scaler_users);
-       int chroma_downscaling_factor =
-               crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420 ? 4 : 
1;
+       int chroma_downscaling_factor = 
skl_scaler_chroma_downscale_factor(crtc_state);
        u32 dsc_prefill_latency = 0;
 
        if (!crtc_state->dsc.compression_enable ||
@@ -2225,8 +2225,7 @@ scaler_prefill_latency(const struct intel_crtc_state 
*crtc_state, int linetime)
        if (num_scaler_users > 1) {
                u64 hscale_k = max(1000, 
mul_u32_u32(scaler_state->scalers[0].hscale, 1000) >> 16);
                u64 vscale_k = max(1000, 
mul_u32_u32(scaler_state->scalers[0].vscale, 1000) >> 16);
-               int chroma_downscaling_factor =
-                       crtc_state->output_format == 
INTEL_OUTPUT_FORMAT_YCBCR420 ? 4 : 1;
+               int chroma_downscaling_factor = 
skl_scaler_chroma_downscale_factor(crtc_state);
                int latency;
 
                latency = DIV_ROUND_UP_ULL((4 * linetime * hscale_k * vscale_k *
-- 
2.45.2

Reply via email to