aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3502-drm-amd-display-Enable-SST-DSC-in-DM.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3502-drm-amd-display-Enable-SST-DSC-in-DM.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3502-drm-amd-display-Enable-SST-DSC-in-DM.patch88
1 files changed, 88 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3502-drm-amd-display-Enable-SST-DSC-in-DM.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3502-drm-amd-display-Enable-SST-DSC-in-DM.patch
new file mode 100644
index 00000000..330b423f
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/3502-drm-amd-display-Enable-SST-DSC-in-DM.patch
@@ -0,0 +1,88 @@
+From c08e0e873d9ba38c5882afbf3c99f209f5791361 Mon Sep 17 00:00:00 2001
+From: David Francis <David.Francis@amd.com>
+Date: Wed, 19 Jun 2019 14:30:59 -0400
+Subject: [PATCH 3502/4256] drm/amd/display: Enable SST DSC in DM
+
+In create_stream_for_sink, check for SST DP connectors
+
+Parse DSC caps to DC format, then, if DSC is supported,
+compute the config
+
+DSC hardware will be programmed by dc_commit_state
+
+Tested-by: Mikita Lipski <Mikita.Lipski@amd.com>
+Signed-off-by: David Francis <David.Francis@amd.com>
+Reviewed-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
+---
+ .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 ++++++++++++-------
+ .../amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 4 ++-
+ 2 files changed, 24 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+index 76708b620892..4bec6ffb3940 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -3587,6 +3587,10 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
+ bool scale = dm_state ? (dm_state->scaling != RMX_OFF) : false;
+ int mode_refresh;
+ int preferred_refresh = 0;
++#ifdef CONFIG_DRM_AMD_DC_DSC_SUPPORT
++ struct dsc_dec_dpcd_caps dsc_caps;
++ uint32_t link_bandwidth_kbps;
++#endif
+
+ struct dc_sink *sink = NULL;
+ if (aconnector == NULL) {
+@@ -3658,17 +3662,23 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
+ &mode, &aconnector->base, con_state, old_stream);
+
+ #ifdef CONFIG_DRM_AMD_DC_DSC_SUPPORT
+- /* stream->timing.flags.DSC = 0; */
+- /* */
+- /* if (aconnector->dc_link && */
+- /* aconnector->dc_link->connector_signal == SIGNAL_TYPE_DISPLAY_PORT #<{(|&& */
+- /* aconnector->dc_link->dpcd_caps.dsc_caps.dsc_basic_caps.is_dsc_supported|)}>#) */
+- /* if (dc_dsc_compute_config(aconnector->dc_link->ctx->dc, */
+- /* &aconnector->dc_link->dpcd_caps.dsc_caps, */
+- /* dc_link_bandwidth_kbps(aconnector->dc_link, dc_link_get_link_cap(aconnector->dc_link)), */
+- /* &stream->timing, */
+- /* &stream->timing.dsc_cfg)) */
+- /* stream->timing.flags.DSC = 1; */
++ stream->timing.flags.DSC = 0;
++
++ if (aconnector->dc_link && sink->sink_signal == SIGNAL_TYPE_DISPLAY_PORT) {
++ dc_dsc_parse_dsc_dpcd(aconnector->dc_link->dpcd_caps.dsc_caps.dsc_basic_caps.raw,
++ aconnector->dc_link->dpcd_caps.dsc_caps.dsc_ext_caps.raw,
++ &dsc_caps);
++ link_bandwidth_kbps = dc_link_bandwidth_kbps(aconnector->dc_link,
++ dc_link_get_link_cap(aconnector->dc_link));
++
++ if (dsc_caps.is_dsc_supported)
++ if (dc_dsc_compute_config(aconnector->dc_link->ctx->dc,
++ &dsc_caps,
++ link_bandwidth_kbps,
++ &stream->timing,
++ &stream->timing.dsc_cfg))
++ stream->timing.flags.DSC = 1;
++ }
+ #endif
+
+ update_stream_scaling_settings(&mode, dm_state, stream);
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
+index 9f8597280814..9328882230d8 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
+@@ -549,7 +549,9 @@ bool dm_helpers_dp_write_dsc_enable(
+ bool enable
+ )
+ {
+- return false;
++ uint8_t enable_dsc = enable ? 1 : 0;
++
++ return dm_helpers_dp_write_dpcd(ctx, stream->sink->link, DP_DSC_ENABLE, &enable_dsc, 1);
+ }
+ #endif
+
+--
+2.17.1
+