]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Move some init routines to dm_sw_init()
authorAurabindo Pillai <aurabindo.pillai@amd.com>
Thu, 16 May 2024 14:23:19 +0000 (10:23 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 29 May 2024 18:40:39 +0000 (14:40 -0400)
Move creation of CGS device node and the DAL allocation list from
amdgpu_dm_init() to dm_sw_init() which runs before dmub's sw init hook.

This is required for communicating with the VBIOS DMUB image from the
VBIOS that was loaded for early pre-os boot.

Signed-off-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Acked-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 975feb1c69b8510181b12fc0185e0bb4b266339c..6688b13d28e10645324b9b5a94db9c2a98671407 100644 (file)
@@ -1662,13 +1662,7 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
 
        init_data.driver = adev;
 
-       adev->dm.cgs_device = amdgpu_cgs_create_device(adev);
-
-       if (!adev->dm.cgs_device) {
-               DRM_ERROR("amdgpu: failed to create cgs device.\n");
-               goto error;
-       }
-
+       /* cgs_device was created in dm_sw_init() */
        init_data.cgs_device = adev->dm.cgs_device;
 
        init_data.dce_environment = DCE_ENV_PRODUCTION_DRV;
@@ -1752,8 +1746,6 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
        if (amdgpu_ip_version(adev, DCE_HWIP, 0) >= IP_VERSION(3, 0, 0))
                init_data.num_virtual_links = 1;
 
-       INIT_LIST_HEAD(&adev->dm.da_list);
-
        retrieve_dmi_info(&adev->dm);
 
        /* Display Core create. */
@@ -2321,6 +2313,16 @@ static int dm_sw_init(void *handle)
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
        int r;
 
+       adev->dm.cgs_device = amdgpu_cgs_create_device(adev);
+
+       if (!adev->dm.cgs_device) {
+               DRM_ERROR("amdgpu: failed to create cgs device.\n");
+               return -EINVAL;
+       }
+
+       /* Moved from dm init since we need to use allocations for storing bounding box data */
+       INIT_LIST_HEAD(&adev->dm.da_list);
+
        r = dm_dmub_sw_init(adev);
        if (r)
                return r;