aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2501-drm-amd-display-add-option-to-disable-DCC-for-DCC-12.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2501-drm-amd-display-add-option-to-disable-DCC-for-DCC-12.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2501-drm-amd-display-add-option-to-disable-DCC-for-DCC-12.patch134
1 files changed, 134 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2501-drm-amd-display-add-option-to-disable-DCC-for-DCC-12.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2501-drm-amd-display-add-option-to-disable-DCC-for-DCC-12.patch
new file mode 100644
index 00000000..aa46bc21
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2501-drm-amd-display-add-option-to-disable-DCC-for-DCC-12.patch
@@ -0,0 +1,134 @@
+From 0583d5223319bcc64f85415dfd54718d7fb83f6d Mon Sep 17 00:00:00 2001
+From: Tony Cheng <tony.cheng@amd.com>
+Date: Mon, 25 Sep 2017 18:06:11 -0400
+Subject: [PATCH 2501/4131] drm/amd/display: add option to disable DCC for DCC
+ 128b request
+
+1. reverts commit e67f51012740 ("dc: temp disable DCC on high res.")
+- default still DCC enabled
+
+2. add debug options to decide how DCC is disabled
+- disable DCC
+- disable DCC if DCC requires 128b (aka. half) request
+-- observed compressed data corruption result in screen corruption in
+full (256b) request while half (128b) would cause DCN to hang, result in
+DF hang
+
+Signed-off-by: Tony Cheng <tony.cheng@amd.com>
+Reviewed-by: Yongqiang Sun <yongqiang.sun@amd.com>
+Acked-by: Harry Wentland <Harry.Wentland@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/dc.h | 11 ++++++++---
+ drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c | 18 ++++++++----------
+ 2 files changed, 16 insertions(+), 13 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h
+index cffa955..4899465 100644
+--- a/drivers/gpu/drm/amd/display/dc/dc.h
++++ b/drivers/gpu/drm/amd/display/dc/dc.h
+@@ -56,11 +56,10 @@ struct dc_caps {
+ uint32_t max_planes;
+ uint32_t max_downscale_ratio;
+ uint32_t i2c_speed_in_khz;
+-
+ unsigned int max_cursor_size;
++ bool dcc_const_color;
+ };
+
+-
+ struct dc_dcc_surface_param {
+ struct dc_size surface_size;
+ enum surface_pixel_format format;
+@@ -162,6 +161,12 @@ struct dc_config {
+ bool disable_disp_pll_sharing;
+ };
+
++enum dcc_option {
++ DCC_ENABLE = 0,
++ DCC_DISABLE = 1,
++ DCC_HALF_REQ_DISALBE = 2,
++};
++
+ enum pipe_split_policy {
+ MPC_SPLIT_DYNAMIC = 0,
+ MPC_SPLIT_AVOID = 1,
+@@ -177,7 +182,7 @@ struct dc_debug {
+ bool clock_trace;
+ bool validation_trace;
+ bool disable_stutter;
+- bool disable_dcc;
++ enum dcc_option disable_dcc;
+ bool disable_dfs_bypass;
+ bool disable_dpp_power_gate;
+ bool disable_hubp_power_gate;
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
+index ee4488d..6751b6e 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
+@@ -414,7 +414,6 @@ static const struct resource_caps res_cap = {
+ };
+
+ static const struct dc_debug debug_defaults_drv = {
+- .disable_dcc = false,
+ .sanity_checks = true,
+ .disable_dmcu = true,
+ .force_abm_enable = false,
+@@ -428,6 +427,7 @@ static const struct dc_debug debug_defaults_drv = {
+ .use_dml_wm = false,
+
+ .pipe_split_policy = MPC_SPLIT_AVOID_MULT_DISP,
++ .disable_dcc = DCC_ENABLE,
+ };
+
+ static const struct dc_debug debug_defaults_diags = {
+@@ -1080,7 +1080,7 @@ static bool get_dcc_compression_cap(const struct dc *dc,
+
+ memset(output, 0, sizeof(*output));
+
+- if (dc->debug.disable_dcc)
++ if (dc->debug.disable_dcc == DCC_DISABLE)
+ return false;
+
+ if (!dcc_support_pixel_format(input->format,
+@@ -1124,32 +1124,30 @@ static bool get_dcc_compression_cap(const struct dc *dc,
+ dcc_control = dcc_control__128_128_xxx;
+ }
+
++ if (dc->debug.disable_dcc == DCC_HALF_REQ_DISALBE &&
++ dcc_control != dcc_control__256_256_xxx)
++ return false;
++
+ switch (dcc_control) {
+ case dcc_control__256_256_xxx:
+ output->grph.rgb.max_uncompressed_blk_size = 256;
+ output->grph.rgb.max_compressed_blk_size = 256;
+ output->grph.rgb.independent_64b_blks = false;
+- output->capable = true;
+- output->const_color_support = false;
+ break;
+ case dcc_control__128_128_xxx:
+ output->grph.rgb.max_uncompressed_blk_size = 128;
+ output->grph.rgb.max_compressed_blk_size = 128;
+ output->grph.rgb.independent_64b_blks = false;
+- /*temp: not allow dcc on high res*/
+- output->capable = false;
+- output->const_color_support = false;
+ break;
+ case dcc_control__256_64_64:
+ output->grph.rgb.max_uncompressed_blk_size = 256;
+ output->grph.rgb.max_compressed_blk_size = 64;
+ output->grph.rgb.independent_64b_blks = true;
+- /*temp: not allow dcc on high res*/
+- output->capable = false;
+- output->const_color_support = false;
+ break;
+ }
+
++ output->capable = true;
++ output->const_color_support = false;
+
+ return true;
+ }
+--
+2.7.4
+