aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3114-drm-amd-display-Make-create_stream_for_sink-more-con.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3114-drm-amd-display-Make-create_stream_for_sink-more-con.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3114-drm-amd-display-Make-create_stream_for_sink-more-con.patch109
1 files changed, 109 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3114-drm-amd-display-Make-create_stream_for_sink-more-con.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3114-drm-amd-display-Make-create_stream_for_sink-more-con.patch
new file mode 100644
index 00000000..56ff0b4b
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3114-drm-amd-display-Make-create_stream_for_sink-more-con.patch
@@ -0,0 +1,109 @@
+From fa796b1a7a079b65990fdb00c5e8c23e2cab9a67 Mon Sep 17 00:00:00 2001
+From: Harry Wentland <harry.wentland@amd.com>
+Date: Mon, 18 Dec 2017 13:48:12 -0500
+Subject: [PATCH 3114/4131] drm/amd/display: Make create_stream_for_sink more
+ consistent
+
+We've got a helper function to call dc_create_stream_for_sink and one
+other place that calls it directly. Make sure we call the helper
+functions always since we need to update a bunch of things in stream and
+don't want to miss that.
+
+Signed-off-by: Harry Wentland <harry.wentland@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 53 +++++++++++------------
+ 1 file changed, 25 insertions(+), 28 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 73e7d2d..c94c5ac 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -2203,30 +2203,32 @@ static void update_stream_scaling_settings(const struct drm_display_mode *mode,
+ dst.width = stream->timing.h_addressable;
+ dst.height = stream->timing.v_addressable;
+
+- rmx_type = dm_state->scaling;
+- if (rmx_type == RMX_ASPECT || rmx_type == RMX_OFF) {
+- if (src.width * dst.height <
+- src.height * dst.width) {
+- /* height needs less upscaling/more downscaling */
+- dst.width = src.width *
+- dst.height / src.height;
+- } else {
+- /* width needs less upscaling/more downscaling */
+- dst.height = src.height *
+- dst.width / src.width;
++ if (dm_state) {
++ rmx_type = dm_state->scaling;
++ if (rmx_type == RMX_ASPECT || rmx_type == RMX_OFF) {
++ if (src.width * dst.height <
++ src.height * dst.width) {
++ /* height needs less upscaling/more downscaling */
++ dst.width = src.width *
++ dst.height / src.height;
++ } else {
++ /* width needs less upscaling/more downscaling */
++ dst.height = src.height *
++ dst.width / src.width;
++ }
++ } else if (rmx_type == RMX_CENTER) {
++ dst = src;
+ }
+- } else if (rmx_type == RMX_CENTER) {
+- dst = src;
+- }
+
+- dst.x = (stream->timing.h_addressable - dst.width) / 2;
+- dst.y = (stream->timing.v_addressable - dst.height) / 2;
++ dst.x = (stream->timing.h_addressable - dst.width) / 2;
++ dst.y = (stream->timing.v_addressable - dst.height) / 2;
+
+- if (dm_state->underscan_enable) {
+- dst.x += dm_state->underscan_hborder / 2;
+- dst.y += dm_state->underscan_vborder / 2;
+- dst.width -= dm_state->underscan_hborder;
+- dst.height -= dm_state->underscan_vborder;
++ if (dm_state->underscan_enable) {
++ dst.x += dm_state->underscan_hborder / 2;
++ dst.y += dm_state->underscan_vborder / 2;
++ dst.width -= dm_state->underscan_hborder;
++ dst.height -= dm_state->underscan_vborder;
++ }
+ }
+
+ stream->src = src;
+@@ -2554,11 +2556,6 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
+ return stream;
+ }
+
+- if (dm_state == NULL) {
+- DRM_ERROR("dm_state is NULL!\n");
+- return stream;
+- }
+-
+ drm_connector = &aconnector->base;
+
+ if (!aconnector->dc_sink) {
+@@ -2605,7 +2602,7 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
+ } else {
+ decide_crtc_timing_for_drm_display_mode(
+ &mode, preferred_mode,
+- dm_state->scaling != RMX_OFF);
++ dm_state ? (dm_state->scaling != RMX_OFF) : false);
+ }
+
+ fill_stream_properties_from_drm_display_mode(stream,
+@@ -3127,7 +3124,7 @@ int amdgpu_dm_connector_mode_valid(struct drm_connector *connector,
+ goto fail;
+ }
+
+- stream = dc_create_stream_for_sink(dc_sink);
++ stream = create_stream_for_sink(aconnector, mode, NULL);
+ if (stream == NULL) {
+ DRM_ERROR("Failed to create stream for sink!\n");
+ goto fail;
+--
+2.7.4
+