dev_err(adev->dev, "Failed to get BIF handle\n");
                return -EINVAL;
        }
-       r = cmn_block->version->funcs->resume(cmn_block);
+       r = amdgpu_ip_block_resume(cmn_block);
        if (r)
                return r;
 
                      adev->ip_blocks[i].version->type ==
                              AMD_IP_BLOCK_TYPE_SDMA))
                        continue;
-               r = adev->ip_blocks[i].version->funcs->resume(&adev->ip_blocks[i]);
-               if (r) {
-                       dev_err(adev->dev,
-                               "resume of IP block <%s> failed %d\n",
-                               adev->ip_blocks[i].version->funcs->name, r);
-                       return r;
-               }
 
-               adev->ip_blocks[i].status.hw = true;
+               r = amdgpu_ip_block_resume(&adev->ip_blocks[i]);
+               if (r)
+                       return r;
        }
 
        for (i = 0; i < adev->num_ip_blocks; i++) {
 
        return 0;
 }
 
+int amdgpu_ip_block_resume(struct amdgpu_ip_block *ip_block)
+{
+       int r;
+
+       if (ip_block->version->funcs->resume) {
+               r = ip_block->version->funcs->resume(ip_block);
+               if (r) {
+                       dev_err(ip_block->adev->dev,
+                               "resume of IP block <%s> failed %d\n",
+                               ip_block->version->funcs->name, r);
+                       return r;
+               }
+       }
+
+       ip_block->status.hw = true;
+       return 0;
+}
+
 /**
  * DOC: board_info
  *
                                break;
 
                        if (amdgpu_in_reset(adev) || adev->in_suspend) {
-                               r = adev->ip_blocks[i].version->funcs->resume(&adev->ip_blocks[i]);
-                               if (r) {
-                                       DRM_ERROR("resume of IP block <%s> failed %d\n",
-                                                         adev->ip_blocks[i].version->funcs->name, r);
+                               r = amdgpu_ip_block_resume(&adev->ip_blocks[i]);
+                               if (r)
                                        return r;
-                               }
                        } else {
                                r = adev->ip_blocks[i].version->funcs->hw_init(&adev->ip_blocks[i]);
                                if (r) {
                                                          adev->ip_blocks[i].version->funcs->name, r);
                                        return r;
                                }
+                               adev->ip_blocks[i].status.hw = true;
                        }
-
-                       adev->ip_blocks[i].status.hw = true;
                        break;
                }
        }
                                block->status.hw)
                                continue;
 
-                       if (block->version->type == AMD_IP_BLOCK_TYPE_SMC)
-                               r = block->version->funcs->resume(&adev->ip_blocks[i]);
-                       else
+                       if (block->version->type == AMD_IP_BLOCK_TYPE_SMC) {
+                               r = amdgpu_ip_block_resume(&adev->ip_blocks[i]);
+                               if (r)
+                                       return r;
+                       } else {
                                r = block->version->funcs->hw_init(&adev->ip_blocks[i]);
-
-                       DRM_INFO("RE-INIT-late: %s %s\n", block->version->funcs->name, r?"failed":"succeeded");
-                       if (r)
-                               return r;
-                       block->status.hw = true;
+                               if (r) {
+                                       DRM_ERROR("hw_init of IP block <%s> failed %d\n",
+                                                 adev->ip_blocks[i].version->funcs->name, r);
+                                       return r;
+                               }
+                               block->status.hw = true;
+                       }
                }
        }
 
                    adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_IH ||
                    (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP && amdgpu_sriov_vf(adev))) {
 
-                       r = adev->ip_blocks[i].version->funcs->resume(&adev->ip_blocks[i]);
-                       if (r) {
-                               DRM_ERROR("resume of IP block <%s> failed %d\n",
-                                         adev->ip_blocks[i].version->funcs->name, r);
+                       r = amdgpu_ip_block_resume(&adev->ip_blocks[i]);
+                       if (r)
                                return r;
-                       }
-                       adev->ip_blocks[i].status.hw = true;
                }
        }
 
                    adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_IH ||
                    adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP)
                        continue;
-               r = adev->ip_blocks[i].version->funcs->resume(&adev->ip_blocks[i]);
-               if (r) {
-                       DRM_ERROR("resume of IP block <%s> failed %d\n",
-                                 adev->ip_blocks[i].version->funcs->name, r);
+               r = amdgpu_ip_block_resume(&adev->ip_blocks[i]);
+               if (r)
                        return r;
-               }
-               adev->ip_blocks[i].status.hw = true;
        }
 
        return 0;
 
 
        for (i = 0; i < adev->num_ip_blocks; i++) {
                if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_IH) {
-                       r = adev->ip_blocks[i].version->funcs->resume(&adev->ip_blocks[i]);
-                       if (r) {
-                               dev_err(adev->dev,
-                                       "resume of IP block <%s> failed %d\n",
-                                       adev->ip_blocks[i].version->funcs->name, r);
+                       r = amdgpu_ip_block_resume(&adev->ip_blocks[i]);
+                       if (r)
                                return r;
-                       }
-
-                       adev->ip_blocks[i].status.hw = true;
                }
        }
 
                      adev->ip_blocks[i].version->type ==
                              AMD_IP_BLOCK_TYPE_SDMA))
                        continue;
-               r = adev->ip_blocks[i].version->funcs->resume(&adev->ip_blocks[i]);
-               if (r) {
-                       dev_err(adev->dev,
-                               "resume of IP block <%s> failed %d\n",
-                               adev->ip_blocks[i].version->funcs->name, r);
+               r = amdgpu_ip_block_resume(&adev->ip_blocks[i]);
+               if (r)
                        return r;
-               }
-
-               adev->ip_blocks[i].status.hw = true;
        }
 
        for (i = 0; i < adev->num_ip_blocks; i++) {