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