drm/amdgpu: validate sw_init before function call
authorSunil Khatri <sunil.khatri@amd.com>
Wed, 9 Oct 2024 08:43:35 +0000 (14:13 +0530)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 22 Oct 2024 21:50:37 +0000 (17:50 -0400)
Before making a function call to sw_init, validate
the function pointer like we do in late_init.

Signed-off-by: Sunil Khatri <sunil.khatri@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c

index 928b11a..e923aef 100644 (file)
@@ -2851,11 +2851,13 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev)
        for (i = 0; i < adev->num_ip_blocks; i++) {
                if (!adev->ip_blocks[i].status.valid)
                        continue;
-               r = adev->ip_blocks[i].version->funcs->sw_init(&adev->ip_blocks[i]);
-               if (r) {
-                       DRM_ERROR("sw_init of IP block <%s> failed %d\n",
-                                 adev->ip_blocks[i].version->funcs->name, r);
-                       goto init_failed;
+               if (adev->ip_blocks[i].version->funcs->sw_init) {
+                       r = adev->ip_blocks[i].version->funcs->sw_init(&adev->ip_blocks[i]);
+                       if (r) {
+                               DRM_ERROR("sw_init of IP block <%s> failed %d\n",
+                                         adev->ip_blocks[i].version->funcs->name, r);
+                               goto init_failed;
+                       }
                }
                adev->ip_blocks[i].status.sw = true;