Change-Id: I110af93c4f17ab18d1be199c6ebe9ee965483a66
Signed-off-by: Monk Liu <monk....@amd.com>
---
 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    |  6 ++++++
 drivers/gpu/drm/amd/amdgpu/vi.c            |  3 +++
 4 files changed, 35 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 6159afc..083ab73 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->vm_virt.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..21b757c 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_deallocate_static_csa(adev);
+
        return 0;
 }
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index 47bc8e1..9b37317 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);
 
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
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to