Change-Id: I528c2f324830aaa21ab8d8250bc80a2a6bab33bd
Signed-off-by: Monk Liu <[email protected]>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c     | 14 ++++++++++++++
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 12 ++++++++++++
 drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c    | 11 +++++++++++
 drivers/gpu/drm/amd/amdgpu/vi.c            |  3 +++
 4 files changed, 40 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 6159afc..328f1c7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -771,6 +771,20 @@ static int amdgpu_bo_vm_update_pte(struct amdgpu_cs_parser 
*p,
        if (r)
                return r;
 
+       if (amdgpu_sriov_vf(adev)) {
+               struct fence *f;
+               bo_va = vm->csa_bo_va;
+               BUG_ON(!bo_va);
+               r = amdgpu_vm_bo_update(adev, bo_va, false);
+               if (r)
+                       return r;
+
+               f = bo_va->last_pt_update;
+               r = amdgpu_sync_fence(adev, &p->job->sync, f);
+               if (r)
+                       return r;
+       }
+
        if (p->bo_list) {
                for (i = 0; i < p->bo_list->num_entries; i++) {
                        struct fence *f;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index f82919d..7c73dee 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1384,6 +1384,15 @@ static int amdgpu_init(struct amdgpu_device *adev)
                                return r;
                        }
                        adev->ip_blocks[i].status.hw = true;
+
+                       /* right after GMC hw init, we create CSA */
+                       if (amdgpu_sriov_vf(adev)) {
+                               r = amdgpu_allocate_static_csa(adev);
+                               if (r) {
+                                       DRM_ERROR("allocate CSA failed %d\n", 
r);
+                                       return r;
+                               }
+                       }
                }
        }
 
@@ -1517,6 +1526,9 @@ static int amdgpu_fini(struct amdgpu_device *adev)
                adev->ip_blocks[i].status.late_initialized = false;
        }
 
+       if (amdgpu_sriov_vf(adev))
+               amdgpu_bo_free_kernel(&adev->virt.csa_obj, 
&adev->virt.csa_vmid0_addr, NULL);
+
        return 0;
 }
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index 47bc8e1..41a9ca1 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
@@ -650,6 +650,12 @@ int amdgpu_driver_open_kms(struct drm_device *dev, struct 
drm_file *file_priv)
                goto out_suspend;
        }
 
+       if (amdgpu_sriov_vf(adev)) {
+               r = amdgpu_map_static_csa(adev, &fpriv->vm);
+               if (r)
+                       goto out_suspend;
+       }
+
        mutex_init(&fpriv->bo_list_lock);
        idr_init(&fpriv->bo_list_handles);
 
@@ -688,6 +694,11 @@ void amdgpu_driver_postclose_kms(struct drm_device *dev,
        amdgpu_uvd_free_handles(adev, file_priv);
        amdgpu_vce_free_handles(adev, file_priv);
 
+       if (amdgpu_sriov_vf(adev)) {
+               fence_put(fpriv->vm.csa_bo_va->last_pt_update);
+               kfree(fpriv->vm.csa_bo_va);
+       }
+
        amdgpu_vm_fini(adev, &fpriv->vm);
 
        idr_for_each_entry(&fpriv->bo_list_handles, list, handle)
diff --git a/drivers/gpu/drm/amd/amdgpu/vi.c b/drivers/gpu/drm/amd/amdgpu/vi.c
index 7350a8f..921917b 100644
--- a/drivers/gpu/drm/amd/amdgpu/vi.c
+++ b/drivers/gpu/drm/amd/amdgpu/vi.c
@@ -455,6 +455,9 @@ static void vi_detect_hw_virtualization(struct 
amdgpu_device *adev)
                if (is_virtual_machine()) /* passthrough mode exclus sr-iov 
mode */
                        adev->virt.caps |= AMDGPU_PASSTHROUGH_MODE;
        }
+
+       if (amdgpu_sriov_vf(adev))
+               adev->virt.csa_size = 8 * 1024; /* two page now for VI and AI */
 }
 
 static const struct amdgpu_allowed_register_entry 
tonga_allowed_read_registers[] = {
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to