int amdgpu_uvd_sw_init(struct amdgpu_device *adev)
 {
-       struct amdgpu_ring *ring;
-       struct drm_sched_rq *rq;
        unsigned long bo_size;
        const char *fw_name;
        const struct common_firmware_header *hdr;
                }
        }
 
-       ring = &adev->uvd.inst[0].ring;
-       rq = &ring->sched.sched_rq[DRM_SCHED_PRIORITY_NORMAL];
-       r = drm_sched_entity_init(&adev->uvd.entity, &rq, 1, NULL);
-       if (r) {
-               DRM_ERROR("Failed setting up UVD kernel entity.\n");
-               return r;
-       }
        for (i = 0; i < adev->uvd.max_handles; ++i) {
                atomic_set(&adev->uvd.handles[i], 0);
                adev->uvd.filp[i] = NULL;
        return 0;
 }
 
+/**
+ * amdgpu_uvd_entity_init - init entity
+ *
+ * @adev: amdgpu_device pointer
+ *
+ */
+int amdgpu_uvd_entity_init(struct amdgpu_device *adev)
+{
+       struct amdgpu_ring *ring;
+       struct drm_sched_rq *rq;
+       int r;
+
+       ring = &adev->uvd.inst[0].ring;
+       rq = &ring->sched.sched_rq[DRM_SCHED_PRIORITY_NORMAL];
+       r = drm_sched_entity_init(&adev->uvd.entity, &rq, 1, NULL);
+       if (r) {
+               DRM_ERROR("Failed setting up UVD kernel entity.\n");
+               return r;
+       }
+
+       return 0;
+}
+
 int amdgpu_uvd_suspend(struct amdgpu_device *adev)
 {
        unsigned size;
 
 
 int amdgpu_uvd_sw_init(struct amdgpu_device *adev);
 int amdgpu_uvd_sw_fini(struct amdgpu_device *adev);
+int amdgpu_uvd_entity_init(struct amdgpu_device *adev);
 int amdgpu_uvd_suspend(struct amdgpu_device *adev);
 int amdgpu_uvd_resume(struct amdgpu_device *adev);
 int amdgpu_uvd_get_create_msg(struct amdgpu_ring *ring, uint32_t handle,
 
        ring = &adev->uvd.inst->ring;
        sprintf(ring->name, "uvd");
        r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0);
+       if (r)
+               return r;
+
+       r = amdgpu_uvd_entity_init(adev);
 
        return r;
 }
 
        ring = &adev->uvd.inst->ring;
        sprintf(ring->name, "uvd");
        r = amdgpu_ring_init(adev, ring, 512, &adev->uvd.inst->irq, 0);
+       if (r)
+               return r;
+
+       r = amdgpu_uvd_entity_init(adev);
 
        return r;
 }
 
 static int uvd_v7_0_sw_init(void *handle)
 {
        struct amdgpu_ring *ring;
+
        int i, j, r;
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
                }
        }
 
+       r = amdgpu_uvd_entity_init(adev);
+       if (r)
+               return r;
+
        r = amdgpu_virt_alloc_mm_table(adev);
        if (r)
                return r;