aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2000-drm-amd-display-Use-new-connector-state-when-getting.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2000-drm-amd-display-Use-new-connector-state-when-getting.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2000-drm-amd-display-Use-new-connector-state-when-getting.patch117
1 files changed, 117 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2000-drm-amd-display-Use-new-connector-state-when-getting.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2000-drm-amd-display-Use-new-connector-state-when-getting.patch
new file mode 100644
index 00000000..1dda7707
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2000-drm-amd-display-Use-new-connector-state-when-getting.patch
@@ -0,0 +1,117 @@
+From 33995377a1a5f98119f7d336f5772988b975aa67 Mon Sep 17 00:00:00 2001
+From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
+Date: Wed, 22 May 2019 12:00:55 -0400
+Subject: [PATCH 2000/2940] drm/amd/display: Use new connector state when
+ getting color depth
+
+[Why]
+The current state on the connector is queried when getting the max bpc
+rather than the new state. This means that a new max bpc value can only
+currently take effect on the commit *after* it changes.
+
+The new state should be passed in instead.
+
+[How]
+Pass down the dm_state as drm state to where we do color depth lookup.
+
+The passed in state can still be NULL when called from
+amdgpu_dm_connector_mode_valid, so make sure that we have reasonable
+defaults in place. That should probably be addressed at some point.
+
+This change now (correctly) causes a modeset to occur when changing the
+max bpc for a connector.
+
+v2: Drop extra TODO.
+
+Change-Id: Ic4bd1d8628469cbfbd55a6f4e3ca52059a7d7ab3
+Cc: Leo Li <sunpeng.li@amd.com>
+Cc: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
+Acked-by: Alex Deucher <alexander.deucher@amd.com>
+Reviewed-by: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Chaudhary Amit Kumar <Chaudharyamit.Kumar@amd.com>
+---
+ .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 32 +++++++++++--------
+ 1 file changed, 18 insertions(+), 14 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 7369c00b24b7..565cb321cdec 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -3055,17 +3055,18 @@ static void update_stream_scaling_settings(const struct drm_display_mode *mode,
+ }
+
+ static enum dc_color_depth
+-convert_color_depth_from_display_info(const struct drm_connector *connector)
++convert_color_depth_from_display_info(const struct drm_connector *connector,
++ const struct drm_connector_state *state)
+ {
+ struct dm_connector_state *dm_conn_state =
+ to_dm_connector_state(connector->state);
+ uint32_t bpc = connector->display_info.bpc;
+
+- /* TODO: Remove this when there's support for max_bpc in drm */
+- if (dm_conn_state && bpc > dm_conn_state->max_bpc)
+- /* Round down to nearest even number. */
+- bpc = dm_conn_state->max_bpc - (dm_conn_state->max_bpc & 1);
+-
++ if (state) {
++ bpc = state->max_bpc;
++ /* Round down to the nearest even number. */
++ bpc = bpc - (bpc & 1);
++ }
+ switch (bpc) {
+ case 0:
+ /*
+@@ -3182,11 +3183,12 @@ static void adjust_colour_depth_from_display_info(struct dc_crtc_timing *timing_
+
+ }
+
+-static void
+-fill_stream_properties_from_drm_display_mode(struct dc_stream_state *stream,
+- const struct drm_display_mode *mode_in,
+- const struct drm_connector *connector,
+- const struct dc_stream_state *old_stream)
++static void fill_stream_properties_from_drm_display_mode(
++ struct dc_stream_state *stream,
++ const struct drm_display_mode *mode_in,
++ const struct drm_connector *connector,
++ const struct drm_connector_state *connector_state,
++ const struct dc_stream_state *old_stream)
+ {
+ struct dc_crtc_timing *timing_out = &stream->timing;
+ const struct drm_display_info *info = &connector->display_info;
+@@ -3209,7 +3211,7 @@ fill_stream_properties_from_drm_display_mode(struct dc_stream_state *stream,
+
+ timing_out->timing_3d_format = TIMING_3D_FORMAT_NONE;
+ timing_out->display_color_depth = convert_color_depth_from_display_info(
+- connector);
++ connector, connector_state);
+ timing_out->scan_type = SCANNING_TYPE_NODATA;
+ timing_out->hdmi_vic = 0;
+
+@@ -3406,6 +3408,8 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
+ {
+ struct drm_display_mode *preferred_mode = NULL;
+ struct drm_connector *drm_connector;
++ const struct drm_connector_state *con_state =
++ dm_state ? &dm_state->base : NULL;
+ struct dc_stream_state *stream = NULL;
+ struct drm_display_mode mode = *drm_mode;
+ bool native_mode_found = false;
+@@ -3477,10 +3481,10 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
+ */
+ if (!scale || mode_refresh != preferred_refresh)
+ fill_stream_properties_from_drm_display_mode(stream,
+- &mode, &aconnector->base, NULL);
++ &mode, &aconnector->base, con_state, NULL);
+ else
+ fill_stream_properties_from_drm_display_mode(stream,
+- &mode, &aconnector->base, old_stream);
++ &mode, &aconnector->base, con_state, old_stream);
+
+ update_stream_scaling_settings(&mode, dm_state, stream);
+
+--
+2.17.1
+