]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amd/display: Always allocate initial connector state state
authorNicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Tue, 4 Jun 2019 19:21:14 +0000 (15:21 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 31 Jul 2019 05:24:38 +0000 (07:24 +0200)
[ Upstream commit f04bee34d6e35df26cbb2d65e801adfd0d8fe20d ]

[Why]
Unlike our regular connectors, MST connectors don't start off with
an initial connector state. This causes a NULL pointer dereference to
occur when attaching the bpc property since it tries to modify the
connector state.

We need an initial connector state on the connector to avoid the crash.

[How]
Use our reset helper to allocate an initial state and reset the values
to their defaults. We were already doing this before, just not for
MST connectors.

Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
Reviewed-by: Leo Li <sunpeng.li@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 0e482349a5cb51c2589b85a9d7ca84013d87f45b..dc3ac66a44503474c2ce75abd1e03b7a7b8b5711 100644 (file)
@@ -4627,6 +4627,13 @@ void amdgpu_dm_connector_init_helper(struct amdgpu_display_manager *dm,
 {
        struct amdgpu_device *adev = dm->ddev->dev_private;
 
+       /*
+        * Some of the properties below require access to state, like bpc.
+        * Allocate some default initial connector state with our reset helper.
+        */
+       if (aconnector->base.funcs->reset)
+               aconnector->base.funcs->reset(&aconnector->base);
+
        aconnector->connector_id = link_index;
        aconnector->dc_link = link;
        aconnector->base.interlace_allowed = false;
@@ -4809,9 +4816,6 @@ static int amdgpu_dm_connector_init(struct amdgpu_display_manager *dm,
                        &aconnector->base,
                        &amdgpu_dm_connector_helper_funcs);
 
-       if (aconnector->base.funcs->reset)
-               aconnector->base.funcs->reset(&aconnector->base);
-
        amdgpu_dm_connector_init_helper(
                dm,
                aconnector,