diff options
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.patch | 109 |
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 + |