aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3564-drm-amd-display-Rework-DCE-transform-bit-depth-reduc.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3564-drm-amd-display-Rework-DCE-transform-bit-depth-reduc.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3564-drm-amd-display-Rework-DCE-transform-bit-depth-reduc.patch141
1 files changed, 141 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3564-drm-amd-display-Rework-DCE-transform-bit-depth-reduc.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3564-drm-amd-display-Rework-DCE-transform-bit-depth-reduc.patch
new file mode 100644
index 00000000..8f0d99ef
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3564-drm-amd-display-Rework-DCE-transform-bit-depth-reduc.patch
@@ -0,0 +1,141 @@
+From 1129d72a86a59b310fc7818900028d6ade170a66 Mon Sep 17 00:00:00 2001
+From: "Leo (Sunpeng) Li" <sunpeng.li@amd.com>
+Date: Tue, 6 Feb 2018 16:35:21 -0500
+Subject: [PATCH 3564/4131] drm/amd/display: Rework DCE transform bit depth
+ reduction programming.
+
+Clear up the logic, and enable programming truncation as a bit reduction
+mode.
+
+Signed-off-by: Leo (Sunpeng) Li <sunpeng.li@amd.com>
+Reviewed-by: Harry Wentland <Harry.Wentland@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/dce/dce_transform.c | 104 +++++++--------------
+ 1 file changed, 36 insertions(+), 68 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_transform.c b/drivers/gpu/drm/amd/display/dc/dce/dce_transform.c
+index 6357546..ad411da 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_transform.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_transform.c
+@@ -618,80 +618,48 @@ static void program_bit_depth_reduction(
+ enum dc_color_depth depth,
+ const struct bit_depth_reduction_params *bit_depth_params)
+ {
+- enum dcp_bit_depth_reduction_mode depth_reduction_mode;
+- enum dcp_spatial_dither_mode spatial_dither_mode;
+- bool frame_random_enable;
+- bool rgb_random_enable;
+- bool highpass_random_enable;
++ enum dcp_out_trunc_round_depth trunc_round_depth;
++ enum dcp_out_trunc_round_mode trunc_mode;
++ bool spatial_dither_enable;
+
+ ASSERT(depth < COLOR_DEPTH_121212); /* Invalid clamp bit depth */
+
+- if (bit_depth_params->flags.SPATIAL_DITHER_ENABLED) {
+- depth_reduction_mode = DCP_BIT_DEPTH_REDUCTION_MODE_DITHER;
+- frame_random_enable = true;
+- rgb_random_enable = true;
+- highpass_random_enable = true;
+-
+- } else {
+- depth_reduction_mode = DCP_BIT_DEPTH_REDUCTION_MODE_DISABLED;
+- frame_random_enable = false;
+- rgb_random_enable = false;
+- highpass_random_enable = false;
++ spatial_dither_enable = bit_depth_params->flags.SPATIAL_DITHER_ENABLED;
++ /* Default to 12 bit truncation without rounding */
++ trunc_round_depth = DCP_OUT_TRUNC_ROUND_DEPTH_12BIT;
++ trunc_mode = DCP_OUT_TRUNC_ROUND_MODE_TRUNCATE;
++
++ if (bit_depth_params->flags.TRUNCATE_ENABLED) {
++ /* Don't enable dithering if truncation is enabled */
++ spatial_dither_enable = false;
++ trunc_mode = bit_depth_params->flags.TRUNCATE_MODE ?
++ DCP_OUT_TRUNC_ROUND_MODE_ROUND :
++ DCP_OUT_TRUNC_ROUND_MODE_TRUNCATE;
++
++ if (bit_depth_params->flags.TRUNCATE_DEPTH == 0 ||
++ bit_depth_params->flags.TRUNCATE_DEPTH == 1)
++ trunc_round_depth = DCP_OUT_TRUNC_ROUND_DEPTH_8BIT;
++ else if (bit_depth_params->flags.TRUNCATE_DEPTH == 2)
++ trunc_round_depth = DCP_OUT_TRUNC_ROUND_DEPTH_10BIT;
++ else {
++ /*
++ * Invalid truncate/round depth. Setting here to 12bit
++ * to prevent use-before-initialize errors.
++ */
++ trunc_round_depth = DCP_OUT_TRUNC_ROUND_DEPTH_12BIT;
++ BREAK_TO_DEBUGGER();
++ }
+ }
+
+- spatial_dither_mode = DCP_SPATIAL_DITHER_MODE_A_AA_A;
+-
+ set_clamp(xfm_dce, depth);
+-
+- switch (depth_reduction_mode) {
+- case DCP_BIT_DEPTH_REDUCTION_MODE_DITHER:
+- /* Spatial Dither: Set round/truncate to bypass (12bit),
+- * enable Dither (30bpp) */
+- set_round(xfm_dce,
+- DCP_OUT_TRUNC_ROUND_MODE_TRUNCATE,
+- DCP_OUT_TRUNC_ROUND_DEPTH_12BIT);
+-
+- set_dither(xfm_dce, true, spatial_dither_mode,
+- DCP_SPATIAL_DITHER_DEPTH_30BPP, frame_random_enable,
+- rgb_random_enable, highpass_random_enable);
+- break;
+- case DCP_BIT_DEPTH_REDUCTION_MODE_ROUND:
+- /* Round: Enable round (10bit), disable Dither */
+- set_round(xfm_dce,
+- DCP_OUT_TRUNC_ROUND_MODE_ROUND,
+- DCP_OUT_TRUNC_ROUND_DEPTH_10BIT);
+-
+- set_dither(xfm_dce, false, spatial_dither_mode,
+- DCP_SPATIAL_DITHER_DEPTH_30BPP, frame_random_enable,
+- rgb_random_enable, highpass_random_enable);
+- break;
+- case DCP_BIT_DEPTH_REDUCTION_MODE_TRUNCATE: /* Truncate */
+- /* Truncate: Enable truncate (10bit), disable Dither */
+- set_round(xfm_dce,
+- DCP_OUT_TRUNC_ROUND_MODE_TRUNCATE,
+- DCP_OUT_TRUNC_ROUND_DEPTH_10BIT);
+-
+- set_dither(xfm_dce, false, spatial_dither_mode,
+- DCP_SPATIAL_DITHER_DEPTH_30BPP, frame_random_enable,
+- rgb_random_enable, highpass_random_enable);
+- break;
+-
+- case DCP_BIT_DEPTH_REDUCTION_MODE_DISABLED: /* Disabled */
+- /* Truncate: Set round/truncate to bypass (12bit),
+- * disable Dither */
+- set_round(xfm_dce,
+- DCP_OUT_TRUNC_ROUND_MODE_TRUNCATE,
+- DCP_OUT_TRUNC_ROUND_DEPTH_12BIT);
+-
+- set_dither(xfm_dce, false, spatial_dither_mode,
+- DCP_SPATIAL_DITHER_DEPTH_30BPP, frame_random_enable,
+- rgb_random_enable, highpass_random_enable);
+- break;
+- default:
+- /* Invalid DCP Depth reduction mode */
+- BREAK_TO_DEBUGGER();
+- break;
+- }
++ set_round(xfm_dce, trunc_mode, trunc_round_depth);
++ set_dither(xfm_dce,
++ spatial_dither_enable,
++ DCP_SPATIAL_DITHER_MODE_A_AA_A,
++ DCP_SPATIAL_DITHER_DEPTH_30BPP,
++ bit_depth_params->flags.FRAME_RANDOM,
++ bit_depth_params->flags.RGB_RANDOM,
++ bit_depth_params->flags.HIGHPASS_RANDOM);
+ }
+
+ static int dce_transform_get_max_num_of_supported_lines(
+--
+2.7.4
+