aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2510-drm-amd-display-Consider-DSC-target-bpp-precision-wh.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2510-drm-amd-display-Consider-DSC-target-bpp-precision-wh.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2510-drm-amd-display-Consider-DSC-target-bpp-precision-wh.patch147
1 files changed, 147 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2510-drm-amd-display-Consider-DSC-target-bpp-precision-wh.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2510-drm-amd-display-Consider-DSC-target-bpp-precision-wh.patch
new file mode 100644
index 00000000..863d4aa0
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2510-drm-amd-display-Consider-DSC-target-bpp-precision-wh.patch
@@ -0,0 +1,147 @@
+From 6e0ad6d5b3e3717f2baf6f35c7227cd17c212571 Mon Sep 17 00:00:00 2001
+From: Nikola Cornij <nikola.cornij@amd.com>
+Date: Fri, 5 Apr 2019 15:02:18 -0400
+Subject: [PATCH 2510/2940] drm/amd/display: Consider DSC target bpp precision
+ when calculating DSC target bpp
+
+[why]
+DSC target bpp precision is a decoder DPCD and an AMD encoder capability.
+It must be taken into account when calculating target bitrate.
+
+[how]
+Add a DC DSC function that does this calculation.
+
+Signed-off-by: Nikola Cornij <nikola.cornij@amd.com>
+Reviewed-by: Wenjing Liu <Wenjing.Liu@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+Acked-by: Hawking Zhang <Hawking.Zhang@amd.com>
+Acked-by: Tony Cheng <Tony.Cheng@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/dc_dsc.h | 10 +++++----
+ drivers/gpu/drm/amd/display/dc/dsc/dc_dsc.c | 25 ++++++++++++++-------
+ 2 files changed, 23 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dc_dsc.h b/drivers/gpu/drm/amd/display/dc/dc_dsc.h
+index ddaf7532bb59..be0f7b09086a 100644
+--- a/drivers/gpu/drm/amd/display/dc/dc_dsc.h
++++ b/drivers/gpu/drm/amd/display/dc/dc_dsc.h
+@@ -24,12 +24,13 @@
+ *
+ * Author: AMD
+ */
++
+ struct dc_dsc_bw_range {
+- uint32_t min_kbps;
++ uint32_t min_kbps; /* Bandwidth if min_target_bpp_x16 is used */
+ uint32_t min_target_bpp_x16;
+- uint32_t max_kbps;
++ uint32_t max_kbps; /* Bandwidth if max_target_bpp_x16 is used */
+ uint32_t max_target_bpp_x16;
+- uint32_t stream_kbps;
++ uint32_t stream_kbps; /* Uncompressed stream bandwidth */
+ };
+
+
+@@ -43,10 +44,11 @@ bool dc_dsc_compute_bandwidth_range(
+ const struct dsc_dec_dpcd_caps *dsc_sink_caps,
+ const struct dc_crtc_timing *timing,
+ struct dc_dsc_bw_range *range);
++
+ bool dc_dsc_compute_config(
+ const struct dc *dc,
+ const struct dsc_dec_dpcd_caps *dsc_sink_caps,
+- int target_bandwidth,
++ uint32_t target_bandwidth_kbps,
+ const struct dc_crtc_timing *timing,
+ struct dc_dsc_config *dsc_cfg);
+ #endif
+diff --git a/drivers/gpu/drm/amd/display/dc/dsc/dc_dsc.c b/drivers/gpu/drm/amd/display/dc/dsc/dc_dsc.c
+index d15da6f906e8..d58d718171b5 100644
+--- a/drivers/gpu/drm/amd/display/dc/dsc/dc_dsc.c
++++ b/drivers/gpu/drm/amd/display/dc/dsc/dc_dsc.c
+@@ -283,6 +283,10 @@ const struct dc_dsc_policy dsc_policy = {
+ .min_target_bpp = 8,
+ };
+
++
++/* Get DSC bandwidth range based on [min_bpp, max_bpp] target bitrate range, and timing's pixel clock
++ * and uncompressed bandwidth.
++ */
+ static void get_dsc_bandwidth_range(
+ const uint32_t min_bpp,
+ const uint32_t max_bpp,
+@@ -312,6 +316,7 @@ static void get_dsc_bandwidth_range(
+ }
+ }
+
++
+ /* Decides if DSC should be used and calculates target bpp if it should, applying DSC policy.
+ *
+ * Returns:
+@@ -494,10 +499,10 @@ static int fit_num_slices_up(union dsc_enc_slice_caps slice_caps, int num_slices
+ *
+ * dsc_enc_caps - DSC encoder capabilities
+ *
+- * target_bandwidth - Target bandwidth to fit the stream into.
+- * If 0, do not calculate target bpp.
++ * target_bandwidth_kbps - Target bandwidth to fit the stream into.
++ * If 0, do not calculate target bpp.
+ *
+- * timing - The stream timing to fit into 'target_bandwidth' or apply
++ * timing - The stream timing to fit into 'target_bandwidth_kbps' or apply
+ * maximum compression to, if 'target_badwidth == 0'
+ *
+ * dsc_cfg - DSC configuration to use if it was possible to come up with
+@@ -510,7 +515,7 @@ static int fit_num_slices_up(union dsc_enc_slice_caps slice_caps, int num_slices
+ static bool setup_dsc_config(
+ const struct dsc_dec_dpcd_caps *dsc_sink_caps,
+ const struct dsc_enc_caps *dsc_enc_caps,
+- int target_bandwidth,
++ int target_bandwidth_kbps,
+ const struct dc_crtc_timing *timing,
+ struct dc_dsc_config *dsc_cfg)
+ {
+@@ -536,8 +541,8 @@ static bool setup_dsc_config(
+ if (!is_dsc_possible)
+ goto done;
+
+- if (target_bandwidth > 0) {
+- is_dsc_possible = decide_dsc_target_bpp_x16(&dsc_policy, &dsc_common_caps, target_bandwidth, timing, &target_bpp);
++ if (target_bandwidth_kbps > 0) {
++ is_dsc_possible = decide_dsc_target_bpp_x16(&dsc_policy, &dsc_common_caps, target_bandwidth_kbps, timing, &target_bpp);
+ dsc_cfg->bits_per_pixel = target_bpp;
+ }
+ if (!is_dsc_possible)
+@@ -753,6 +758,10 @@ bool dc_dsc_parse_dsc_dpcd(const uint8_t *dpcd_dsc_data, struct dsc_dec_dpcd_cap
+ }
+
+
++/* If DSC is possbile, get DSC bandwidth range based on [min_bpp, max_bpp] target bitrate range and
++ * timing's pixel clock and uncompressed bandwidth.
++ * If DSC is not possible, leave '*range' untouched.
++ */
+ bool dc_dsc_compute_bandwidth_range(
+ const struct dc *dc,
+ const uint32_t min_bpp,
+@@ -780,7 +789,7 @@ bool dc_dsc_compute_bandwidth_range(
+ bool dc_dsc_compute_config(
+ const struct dc *dc,
+ const struct dsc_dec_dpcd_caps *dsc_sink_caps,
+- int target_bandwidth,
++ uint32_t target_bandwidth_kbps,
+ const struct dc_crtc_timing *timing,
+ struct dc_dsc_config *dsc_cfg)
+ {
+@@ -790,7 +799,7 @@ bool dc_dsc_compute_config(
+ get_dsc_enc_caps(dc, &dsc_enc_caps, timing->pix_clk_100hz);
+ is_dsc_possible = setup_dsc_config(dsc_sink_caps,
+ &dsc_enc_caps,
+- target_bandwidth,
++ target_bandwidth_kbps,
+ timing, dsc_cfg);
+ return is_dsc_possible;
+ }
+--
+2.17.1
+