@@ -2690,8 +2690,10 @@ static int amdgpu_device_ip_early_init(struct amdgpu_device *adev)
26902690 break ;
26912691 default :
26922692 r = amdgpu_discovery_set_ip_blocks (adev );
2693- if (r )
2693+ if (r ) {
2694+ adev -> num_ip_blocks = 0 ;
26942695 return r ;
2696+ }
26952697 break ;
26962698 }
26972699
@@ -3247,6 +3249,8 @@ int amdgpu_device_set_cg_state(struct amdgpu_device *adev,
32473249 i = state == AMD_CG_STATE_GATE ? j : adev -> num_ip_blocks - j - 1 ;
32483250 if (!adev -> ip_blocks [i ].status .late_initialized )
32493251 continue ;
3252+ if (!adev -> ip_blocks [i ].version )
3253+ continue ;
32503254 /* skip CG for GFX, SDMA on S0ix */
32513255 if (adev -> in_s0ix &&
32523256 (adev -> ip_blocks [i ].version -> type == AMD_IP_BLOCK_TYPE_GFX ||
@@ -3286,6 +3290,8 @@ int amdgpu_device_set_pg_state(struct amdgpu_device *adev,
32863290 i = state == AMD_PG_STATE_GATE ? j : adev -> num_ip_blocks - j - 1 ;
32873291 if (!adev -> ip_blocks [i ].status .late_initialized )
32883292 continue ;
3293+ if (!adev -> ip_blocks [i ].version )
3294+ continue ;
32893295 /* skip PG for GFX, SDMA on S0ix */
32903296 if (adev -> in_s0ix &&
32913297 (adev -> ip_blocks [i ].version -> type == AMD_IP_BLOCK_TYPE_GFX ||
@@ -3493,6 +3499,8 @@ static int amdgpu_device_ip_fini_early(struct amdgpu_device *adev)
34933499 int i , r ;
34943500
34953501 for (i = 0 ; i < adev -> num_ip_blocks ; i ++ ) {
3502+ if (!adev -> ip_blocks [i ].version )
3503+ continue ;
34963504 if (!adev -> ip_blocks [i ].version -> funcs -> early_fini )
34973505 continue ;
34983506
@@ -3570,6 +3578,8 @@ static int amdgpu_device_ip_fini(struct amdgpu_device *adev)
35703578 if (!adev -> ip_blocks [i ].status .sw )
35713579 continue ;
35723580
3581+ if (!adev -> ip_blocks [i ].version )
3582+ continue ;
35733583 if (adev -> ip_blocks [i ].version -> type == AMD_IP_BLOCK_TYPE_GMC ) {
35743584 amdgpu_ucode_free_bo (adev );
35753585 amdgpu_free_static_csa (& adev -> virt .csa_obj );
@@ -3596,6 +3606,8 @@ static int amdgpu_device_ip_fini(struct amdgpu_device *adev)
35963606 for (i = adev -> num_ip_blocks - 1 ; i >= 0 ; i -- ) {
35973607 if (!adev -> ip_blocks [i ].status .late_initialized )
35983608 continue ;
3609+ if (!adev -> ip_blocks [i ].version )
3610+ continue ;
35993611 if (adev -> ip_blocks [i ].version -> funcs -> late_fini )
36003612 adev -> ip_blocks [i ].version -> funcs -> late_fini (& adev -> ip_blocks [i ]);
36013613 adev -> ip_blocks [i ].status .late_initialized = false;
0 commit comments