}
        }
 
+       ret = amdgpu_bo_create_kernel(adev, PSP_1_MEG, PSP_1_MEG,
+                                     amdgpu_sriov_vf(adev) ?
+                                     AMDGPU_GEM_DOMAIN_VRAM : AMDGPU_GEM_DOMAIN_GTT,
+                                     &psp->fw_pri_bo,
+                                     &psp->fw_pri_mc_addr,
+                                     &psp->fw_pri_buf);
+       if (ret)
+               return ret;
+
+       ret = amdgpu_bo_create_kernel(adev, PSP_FENCE_BUFFER_SIZE, PAGE_SIZE,
+                                     AMDGPU_GEM_DOMAIN_VRAM,
+                                     &psp->fence_buf_bo,
+                                     &psp->fence_buf_mc_addr,
+                                     &psp->fence_buf);
+       if (ret)
+               goto failed1;
+
+       ret = amdgpu_bo_create_kernel(adev, PSP_CMD_BUFFER_SIZE, PAGE_SIZE,
+                                     AMDGPU_GEM_DOMAIN_VRAM,
+                                     &psp->cmd_buf_bo, &psp->cmd_buf_mc_addr,
+                                     (void **)&psp->cmd_buf_mem);
+       if (ret)
+               goto failed2;
+
        return 0;
+
+failed2:
+       amdgpu_bo_free_kernel(&psp->fw_pri_bo,
+                             &psp->fw_pri_mc_addr, &psp->fw_pri_buf);
+failed1:
+       amdgpu_bo_free_kernel(&psp->fence_buf_bo,
+                             &psp->fence_buf_mc_addr, &psp->fence_buf);
+       return ret;
 }
 
 static int psp_sw_fini(void *handle)
        kfree(cmd);
        cmd = NULL;
 
+       amdgpu_bo_free_kernel(&psp->fw_pri_bo,
+                             &psp->fw_pri_mc_addr, &psp->fw_pri_buf);
+       amdgpu_bo_free_kernel(&psp->fence_buf_bo,
+                             &psp->fence_buf_mc_addr, &psp->fence_buf);
+       amdgpu_bo_free_kernel(&psp->cmd_buf_bo, &psp->cmd_buf_mc_addr,
+                             (void **)&psp->cmd_buf_mem);
+
        return 0;
 }
 
        struct psp_context *psp = &adev->psp;
 
        if (amdgpu_sriov_vf(adev) && amdgpu_in_reset(adev)) {
-               psp_ring_stop(psp, PSP_RING_TYPE__KM); /* should not destroy ring, only stop */
-               goto skip_memalloc;
-       }
-
-       if (amdgpu_sriov_vf(adev)) {
-               ret = amdgpu_bo_create_kernel(adev, PSP_1_MEG, PSP_1_MEG,
-                                               AMDGPU_GEM_DOMAIN_VRAM,
-                                               &psp->fw_pri_bo,
-                                               &psp->fw_pri_mc_addr,
-                                               &psp->fw_pri_buf);
+               /* should not destroy ring, only stop */
+               psp_ring_stop(psp, PSP_RING_TYPE__KM);
        } else {
-               ret = amdgpu_bo_create_kernel(adev, PSP_1_MEG, PSP_1_MEG,
-                                               AMDGPU_GEM_DOMAIN_GTT,
-                                               &psp->fw_pri_bo,
-                                               &psp->fw_pri_mc_addr,
-                                               &psp->fw_pri_buf);
-       }
-
-       if (ret)
-               goto failed;
-
-       ret = amdgpu_bo_create_kernel(adev, PSP_FENCE_BUFFER_SIZE, PAGE_SIZE,
-                                       AMDGPU_GEM_DOMAIN_VRAM,
-                                       &psp->fence_buf_bo,
-                                       &psp->fence_buf_mc_addr,
-                                       &psp->fence_buf);
-       if (ret)
-               goto failed;
-
-       ret = amdgpu_bo_create_kernel(adev, PSP_CMD_BUFFER_SIZE, PAGE_SIZE,
-                                     AMDGPU_GEM_DOMAIN_VRAM,
-                                     &psp->cmd_buf_bo, &psp->cmd_buf_mc_addr,
-                                     (void **)&psp->cmd_buf_mem);
-       if (ret)
-               goto failed;
+               memset(psp->fence_buf, 0, PSP_FENCE_BUFFER_SIZE);
 
-       memset(psp->fence_buf, 0, PSP_FENCE_BUFFER_SIZE);
-
-       ret = psp_ring_init(psp, PSP_RING_TYPE__KM);
-       if (ret) {
-               DRM_ERROR("PSP ring init failed!\n");
-               goto failed;
+               ret = psp_ring_init(psp, PSP_RING_TYPE__KM);
+               if (ret) {
+                       DRM_ERROR("PSP ring init failed!\n");
+                       goto failed;
+               }
        }
 
-skip_memalloc:
        ret = psp_hw_start(psp);
        if (ret)
                goto failed;
        psp_tmr_terminate(psp);
        psp_ring_destroy(psp, PSP_RING_TYPE__KM);
 
-       amdgpu_bo_free_kernel(&psp->fw_pri_bo,
-                             &psp->fw_pri_mc_addr, &psp->fw_pri_buf);
-       amdgpu_bo_free_kernel(&psp->fence_buf_bo,
-                             &psp->fence_buf_mc_addr, &psp->fence_buf);
-       amdgpu_bo_free_kernel(&psp->cmd_buf_bo, &psp->cmd_buf_mc_addr,
-                             (void **)&psp->cmd_buf_mem);
-
        return 0;
 }