Before making a function call to sw_init, validate
the function pointer.

Signed-off-by: Sunil Khatri <sunil.kha...@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 38a7423101f3..4a6def74964e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -2851,13 +2851,15 @@ 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",
+               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;
+                               goto init_failed;
+                       }
+                       adev->ip_blocks[i].status.sw = true;
                }
-               adev->ip_blocks[i].status.sw = true;
 
                if (!amdgpu_ip_member_of_hwini(
                            adev, adev->ip_blocks[i].version->type))
-- 
2.34.1

Reply via email to