]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
drm/amd/display: Adjust refactored dm for color management only
authorStylon Wang <stylon.wang@amd.com>
Thu, 9 Apr 2020 14:37:47 +0000 (22:37 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 22 Apr 2020 22:11:48 +0000 (18:11 -0400)
[Why]
Commit cdde482caabf2adad47d23f0d1e235db2c4f2b7d is causing regression
from changing the order of call sequence.

[How]
Keep the call sequence and take in extra dm state only if plane-level
color management is enabled.

Fixes: cdde482caabf2a ("drm/amd/display: Refactor color management to take dm plane state")
Signed-off-by: Stylon Wang <stylon.wang@amd.com>
Reviewed-by: Nicholas Kazlauskas <Nicholas.Kazlauskas@amd.com>
Acked-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c

index 28b18cbd68aac8335bfaa1cdd492ad0ab5eefcab..f8e431893fb517e78b4294afdaa3a564abb01610 100644 (file)
@@ -3698,12 +3698,11 @@ fill_dc_plane_info_and_addr(struct amdgpu_device *adev,
 }
 
 static int fill_dc_plane_attributes(struct amdgpu_device *adev,
-                                   struct dm_plane_state *dm_plane_state,
+                                   struct dc_plane_state *dc_plane_state,
                                    struct drm_plane_state *plane_state,
                                    struct drm_crtc_state *crtc_state)
 {
        struct dm_crtc_state *dm_crtc_state = to_dm_crtc_state(crtc_state);
-       struct dc_plane_state *dc_plane_state = dm_plane_state->dc_state;
        const struct amdgpu_framebuffer *amdgpu_fb =
                to_amdgpu_framebuffer(plane_state->fb);
        struct dc_scaling_info scaling_info;
@@ -3749,7 +3748,7 @@ static int fill_dc_plane_attributes(struct amdgpu_device *adev,
         * Always set input transfer function, since plane state is refreshed
         * every time.
         */
-       ret = amdgpu_dm_update_plane_color_mgmt(dm_crtc_state, dm_plane_state);
+       ret = amdgpu_dm_update_plane_color_mgmt(dm_crtc_state, dc_plane_state);
        if (ret)
                return ret;
 
@@ -7942,6 +7941,16 @@ static int dm_update_plane_state(struct dc *dc,
                DRM_DEBUG_DRIVER("Enabling DRM plane: %d on DRM crtc %d\n",
                                plane->base.id, new_plane_crtc->base.id);
 
+               ret = fill_dc_plane_attributes(
+                       new_plane_crtc->dev->dev_private,
+                       dc_new_plane_state,
+                       new_plane_state,
+                       new_crtc_state);
+               if (ret) {
+                       dc_plane_state_release(dc_new_plane_state);
+                       return ret;
+               }
+
                ret = dm_atomic_get_state(state, &dm_state);
                if (ret) {
                        dc_plane_state_release(dc_new_plane_state);
@@ -7967,14 +7976,6 @@ static int dm_update_plane_state(struct dc *dc,
 
                dm_new_plane_state->dc_state = dc_new_plane_state;
 
-               ret = fill_dc_plane_attributes(
-                       new_plane_crtc->dev->dev_private,
-                       dm_new_plane_state,
-                       new_plane_state,
-                       new_crtc_state);
-               if (ret)
-                       return ret;
-
                /* Tell DC to do a full surface update every time there
                 * is a plane change. Inefficient, but works for now.
                 */
index cdf0dc1b2e058714a833e6c0b7910bc6433955f5..5cab3e65d9925e6baf89cdadc19bae3c892e356d 100644 (file)
@@ -481,7 +481,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_connector *connector,
 void amdgpu_dm_init_color_mod(void);
 int amdgpu_dm_update_crtc_color_mgmt(struct dm_crtc_state *crtc);
 int amdgpu_dm_update_plane_color_mgmt(struct dm_crtc_state *crtc,
-                                     struct dm_plane_state *plane);
+                                     struct dc_plane_state *dc_plane_state);
 
 void amdgpu_dm_update_connector_after_detect(
                struct amdgpu_dm_connector *aconnector);
index d0554082f0dc52079d7e9afc70be10d2e04e659d..838f35668f12d61aaa664e22baba884cebb648de 100644 (file)
@@ -416,10 +416,9 @@ int amdgpu_dm_update_crtc_color_mgmt(struct dm_crtc_state *crtc)
  * Returns 0 on success.
  */
 int amdgpu_dm_update_plane_color_mgmt(struct dm_crtc_state *crtc,
-                                     struct dm_plane_state *plane)
+                                     struct dc_plane_state *dc_plane_state)
 {
        const struct drm_color_lut *degamma_lut;
-       struct dc_plane_state *dc_plane_state = plane->dc_state;
        enum dc_transfer_func_predefined tf = TRANSFER_FUNCTION_SRGB;
        uint32_t degamma_size;
        int r;