[PATCH 2/2] drm/amd/display: Use new connector state when getting color depth

Deucher, Alexander Alexander.Deucher at amd.com
Wed May 22 15:23:52 UTC 2019


Series is:
Acked-by: Alex Deucher <alexander.deucher at amd.com>
________________________________
From: amd-gfx <amd-gfx-bounces at lists.freedesktop.org> on behalf of Nicholas Kazlauskas <nicholas.kazlauskas at amd.com>
Sent: Wednesday, May 22, 2019 11:11 AM
To: amd-gfx at lists.freedesktop.org
Cc: Li, Sun peng (Leo); Wentland, Harry; Kazlauskas, Nicholas
Subject: [PATCH 2/2] drm/amd/display: Use new connector state when getting color depth

[CAUTION: External Email]

[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.

Cc: Leo Li <sunpeng.li at amd.com>
Cc: Harry Wentland <harry.wentland at amd.com>
Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas at amd.com>
---
 .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 26 +++++++++++--------
 1 file changed, 15 insertions(+), 11 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 a7a9e4d81a17..580c324891fd 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -3038,13 +3038,14 @@ 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)
 {
        uint32_t bpc = 8;

        /* TODO: Use passed in state instead of the current state. */
-       if (connector->state) {
-               bpc = connector->state->max_bpc;
+       if (state) {
+               bpc = state->max_bpc;
                /* Round down to the nearest even number. */
                bpc = bpc - (bpc & 1);
        }
@@ -3165,11 +3166,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;
@@ -3192,7 +3194,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;

@@ -3389,6 +3391,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;
@@ -3461,10 +3465,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

_______________________________________________
amd-gfx mailing list
amd-gfx at lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/amd-gfx/attachments/20190522/e159d6c8/attachment.html>


More information about the amd-gfx mailing list