aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/4742-drm-amd-display-Allow-DP-register-double-buffer.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4742-drm-amd-display-Allow-DP-register-double-buffer.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/4742-drm-amd-display-Allow-DP-register-double-buffer.patch138
1 files changed, 138 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4742-drm-amd-display-Allow-DP-register-double-buffer.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4742-drm-amd-display-Allow-DP-register-double-buffer.patch
new file mode 100644
index 00000000..39405e58
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4742-drm-amd-display-Allow-DP-register-double-buffer.patch
@@ -0,0 +1,138 @@
+From 2bb61af9b1b1035849a1c869916188f9c8c08f0b Mon Sep 17 00:00:00 2001
+From: Eric Bernstein <eric.bernstein@amd.com>
+Date: Fri, 25 May 2018 11:57:26 -0400
+Subject: [PATCH 4742/5725] drm/amd/display: Allow DP register double buffer
+
+Remove setting DP_DB_DISABLE to avoid issues when changing
+bit depth after vbios take over.
+Refactor code to perform single register update for both
+pixel encoding and component depth fields.
+
+Signed-off-by: Eric Bernstein <eric.bernstein@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ .../drm/amd/display/dc/dce/dce_stream_encoder.c | 5 ---
+ .../amd/display/dc/dcn10/dcn10_stream_encoder.c | 44 ++++++++++------------
+ 2 files changed, 19 insertions(+), 30 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
+index c0e813c..91642e6 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_stream_encoder.c
+@@ -289,11 +289,6 @@ static void dce110_stream_encoder_dp_set_stream_attribute(
+
+ struct dce110_stream_encoder *enc110 = DCE110STRENC_FROM_STRENC(enc);
+
+-#if defined(CONFIG_DRM_AMD_DC_DCN1_0)
+- if (REG(DP_DB_CNTL))
+- REG_UPDATE(DP_DB_CNTL, DP_DB_DISABLE, 1);
+-#endif
+-
+ /* set pixel encoding */
+ switch (crtc_timing->pixel_encoding) {
+ case PIXEL_ENCODING_YCBCR422:
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_stream_encoder.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_stream_encoder.c
+index c6a13d0..6f9078f 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_stream_encoder.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_stream_encoder.c
+@@ -257,20 +257,18 @@ void enc1_stream_encoder_dp_set_stream_attribute(
+ uint8_t colorimetry_bpc;
+ uint8_t dynamic_range_rgb = 0; /*full range*/
+ uint8_t dynamic_range_ycbcr = 1; /*bt709*/
++ uint8_t dp_pixel_encoding = 0;
++ uint8_t dp_component_depth = 0;
+
+ struct dcn10_stream_encoder *enc1 = DCN10STRENC_FROM_STRENC(enc);
+
+- REG_UPDATE(DP_DB_CNTL, DP_DB_DISABLE, 1);
+-
+ /* set pixel encoding */
+ switch (crtc_timing->pixel_encoding) {
+ case PIXEL_ENCODING_YCBCR422:
+- REG_UPDATE(DP_PIXEL_FORMAT, DP_PIXEL_ENCODING,
+- DP_PIXEL_ENCODING_TYPE_YCBCR422);
++ dp_pixel_encoding = DP_PIXEL_ENCODING_TYPE_YCBCR422;
+ break;
+ case PIXEL_ENCODING_YCBCR444:
+- REG_UPDATE(DP_PIXEL_FORMAT, DP_PIXEL_ENCODING,
+- DP_PIXEL_ENCODING_TYPE_YCBCR444);
++ dp_pixel_encoding = DP_PIXEL_ENCODING_TYPE_YCBCR444;
+
+ if (crtc_timing->flags.Y_ONLY)
+ if (crtc_timing->display_color_depth != COLOR_DEPTH_666)
+@@ -278,8 +276,8 @@ void enc1_stream_encoder_dp_set_stream_attribute(
+ * Color depth of Y-only could be
+ * 8, 10, 12, 16 bits
+ */
+- REG_UPDATE(DP_PIXEL_FORMAT, DP_PIXEL_ENCODING,
+- DP_PIXEL_ENCODING_TYPE_Y_ONLY);
++ dp_pixel_encoding = DP_PIXEL_ENCODING_TYPE_Y_ONLY;
++
+ /* Note: DP_MSA_MISC1 bit 7 is the indicator
+ * of Y-only mode.
+ * This bit is set in HW if register
+@@ -287,13 +285,11 @@ void enc1_stream_encoder_dp_set_stream_attribute(
+ */
+ break;
+ case PIXEL_ENCODING_YCBCR420:
+- REG_UPDATE(DP_PIXEL_FORMAT, DP_PIXEL_ENCODING,
+- DP_PIXEL_ENCODING_TYPE_YCBCR420);
++ dp_pixel_encoding = DP_PIXEL_ENCODING_TYPE_YCBCR420;
+ REG_UPDATE(DP_VID_TIMING, DP_VID_N_MUL, 1);
+ break;
+ default:
+- REG_UPDATE(DP_PIXEL_FORMAT, DP_PIXEL_ENCODING,
+- DP_PIXEL_ENCODING_TYPE_RGB444);
++ dp_pixel_encoding = DP_PIXEL_ENCODING_TYPE_RGB444;
+ break;
+ }
+
+@@ -314,32 +310,30 @@ void enc1_stream_encoder_dp_set_stream_attribute(
+ /* set color depth */
+ switch (crtc_timing->display_color_depth) {
+ case COLOR_DEPTH_666:
+- REG_UPDATE(DP_PIXEL_FORMAT, DP_COMPONENT_DEPTH,
+- 0);
++ dp_component_depth = DP_COMPONENT_PIXEL_DEPTH_6BPC;
+ break;
+ case COLOR_DEPTH_888:
+- REG_UPDATE(DP_PIXEL_FORMAT, DP_COMPONENT_DEPTH,
+- DP_COMPONENT_PIXEL_DEPTH_8BPC);
++ dp_component_depth = DP_COMPONENT_PIXEL_DEPTH_8BPC;
+ break;
+ case COLOR_DEPTH_101010:
+- REG_UPDATE(DP_PIXEL_FORMAT, DP_COMPONENT_DEPTH,
+- DP_COMPONENT_PIXEL_DEPTH_10BPC);
+-
++ dp_component_depth = DP_COMPONENT_PIXEL_DEPTH_10BPC;
+ break;
+ case COLOR_DEPTH_121212:
+- REG_UPDATE(DP_PIXEL_FORMAT, DP_COMPONENT_DEPTH,
+- DP_COMPONENT_PIXEL_DEPTH_12BPC);
++ dp_component_depth = DP_COMPONENT_PIXEL_DEPTH_12BPC;
+ break;
+ case COLOR_DEPTH_161616:
+- REG_UPDATE(DP_PIXEL_FORMAT, DP_COMPONENT_DEPTH,
+- DP_COMPONENT_PIXEL_DEPTH_16BPC);
++ dp_component_depth = DP_COMPONENT_PIXEL_DEPTH_16BPC;
+ break;
+ default:
+- REG_UPDATE(DP_PIXEL_FORMAT, DP_COMPONENT_DEPTH,
+- DP_COMPONENT_PIXEL_DEPTH_6BPC);
++ dp_component_depth = DP_COMPONENT_PIXEL_DEPTH_6BPC;
+ break;
+ }
+
++ /* Set DP pixel encoding and component depth */
++ REG_UPDATE_2(DP_PIXEL_FORMAT,
++ DP_PIXEL_ENCODING, dp_pixel_encoding,
++ DP_COMPONENT_DEPTH, dp_component_depth);
++
+ /* set dynamic range and YCbCr range */
+
+ switch (crtc_timing->display_color_depth) {
+--
+2.7.4
+