* [PATCH 0/3] static CSA patches
@ 2017-01-10 10:33 Monk Liu
[not found] ` <1484044422-2898-1-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org>
0 siblings, 1 reply; 7+ messages in thread
From: Monk Liu @ 2017-01-10 10:33 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Monk Liu
allocate/deallocate static CSA per device
and map CSA per VM
no need to unmap CSA when VM die.
*** BLURB HERE ***
Monk Liu (3):
drm/amdgpu:new field members for SRIOV
drm/amdgpu:add new file for SRIOV
drm/amdgpu:invoke CSA functions
drivers/gpu/drm/amd/amdgpu/Makefile | 2 +-
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/amdgpu_virt.c | 105 +++++++++++++++++++++++++++++
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h | 19 ++++++
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 2 +
drivers/gpu/drm/amd/amdgpu/vi.c | 3 +
8 files changed, 162 insertions(+), 1 deletion(-)
create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
--
2.7.4
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 7+ messages in thread[parent not found: <1484044422-2898-1-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org>]
* [PATCH 1/3] drm/amdgpu:new field members for SRIOV [not found] ` <1484044422-2898-1-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org> @ 2017-01-10 10:33 ` Monk Liu 2017-01-10 10:33 ` [PATCH 2/3] drm/amdgpu:add new file " Monk Liu 2017-01-10 10:33 ` [PATCH 3/3] drm/amdgpu:invoke CSA functions Monk Liu 2 siblings, 0 replies; 7+ messages in thread From: Monk Liu @ 2017-01-10 10:33 UTC (permalink / raw) To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Monk Liu and implement CSA functions in this file Change-Id: Ife0eff7b13b8b5946f005a39f6ecb8db1cb72c38 Signed-off-by: Monk Liu <Monk.Liu@amd.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h | 14 ++++++++++++++ drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 2 ++ 2 files changed, 16 insertions(+) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h index 0d821d9..cc36d28 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h @@ -28,9 +28,23 @@ #define AMDGPU_SRIOV_CAPS_ENABLE_IOV (1 << 1) /* sr-iov is enabled on this GPU */ #define AMDGPU_SRIOV_CAPS_IS_VF (1 << 2) /* this GPU is a virtual function */ #define AMDGPU_PASSTHROUGH_MODE (1 << 3) /* thw whole GPU is pass through for VM */ + /* GPU virtualization */ struct amdgpu_virt { uint32_t caps; + uint32_t csa_size; + struct amdgpu_bo *csa_obj; + uint64_t csa_vmid0_addr; + uint64_t gds_vmid0_addr; +}; + +struct amdgpu_vm_virt { + /* each VM will map on CSA */ + struct ttm_validate_buffer csa_tv; + struct amdgpu_bo_va *csa_bo_va; + /* virtual MC address of CSA & GDS for each VM */ + uint64_t vm_csa_addr; + uint64_t vm_gds_addr; }; #define amdgpu_sriov_enabled(adev) \ diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h index 42a629b..27cbcbc 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h @@ -29,6 +29,7 @@ #include "gpu_scheduler.h" #include "amdgpu_sync.h" #include "amdgpu_ring.h" +#include "amdgpu_virt.h" struct amdgpu_bo_va; struct amdgpu_job; @@ -111,6 +112,7 @@ struct amdgpu_vm { /* client id */ u64 client_id; + struct amdgpu_vm_virt vm_virt; }; struct amdgpu_vm_id { -- 2.7.4 _______________________________________________ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/3] drm/amdgpu:add new file for SRIOV [not found] ` <1484044422-2898-1-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org> 2017-01-10 10:33 ` [PATCH 1/3] drm/amdgpu:new field members for SRIOV Monk Liu @ 2017-01-10 10:33 ` Monk Liu 2017-01-10 10:33 ` [PATCH 3/3] drm/amdgpu:invoke CSA functions Monk Liu 2 siblings, 0 replies; 7+ messages in thread From: Monk Liu @ 2017-01-10 10:33 UTC (permalink / raw) To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Monk Liu for SRIOV usage, CSA is only used per device and each VM will map on it. Change-Id: Ibc63d87be59d7d89b96117e4d1b7e970a872580d Signed-off-by: Monk Liu <Monk.Liu@amd.com> --- drivers/gpu/drm/amd/amdgpu/Makefile | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 105 +++++++++++++++++++++++++++++++ drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h | 5 ++ 3 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c diff --git a/drivers/gpu/drm/amd/amdgpu/Makefile b/drivers/gpu/drm/amd/amdgpu/Makefile index 4185b03..0b8e470 100644 --- a/drivers/gpu/drm/amd/amdgpu/Makefile +++ b/drivers/gpu/drm/amd/amdgpu/Makefile @@ -30,7 +30,7 @@ amdgpu-y += amdgpu_device.o amdgpu_kms.o \ atombios_encoders.o amdgpu_sa.o atombios_i2c.o \ amdgpu_prime.o amdgpu_vm.o amdgpu_ib.o amdgpu_pll.o \ amdgpu_ucode.o amdgpu_bo_list.o amdgpu_ctx.o amdgpu_sync.o \ - amdgpu_gtt_mgr.o amdgpu_vram_mgr.o + amdgpu_gtt_mgr.o amdgpu_vram_mgr.o amdgpu_virt.o # add asic specific block amdgpu-$(CONFIG_DRM_AMDGPU_CIK)+= cik.o cik_ih.o kv_smc.o kv_dpm.o \ diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c new file mode 100644 index 0000000..243fa10 --- /dev/null +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c @@ -0,0 +1,105 @@ +/* + * Copyright 2016 Advanced Micro Devices, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ + +#include "amdgpu.h" + +int amdgpu_allocate_static_csa(struct amdgpu_device *adev) +{ + int r; + void *ptr; + + r = amdgpu_bo_create_kernel(adev, adev->virt.csa_size, PAGE_SIZE, + AMDGPU_GEM_DOMAIN_VRAM, &adev->virt.csa_obj, + &adev->virt.csa_vmid0_addr, &ptr); + if (r) + return r; + + /* gds part take the bottom half buffer */ + adev->virt.gds_vmid0_addr = adev->virt.csa_vmid0_addr + PAGE_SIZE; + memset(ptr, 0, adev->virt.csa_size); + return 0; +} + +void amdgpu_deallocate_static_csa(struct amdgpu_device *adev) +{ + amdgpu_bo_free_kernel(&adev->virt.csa_obj, &adev->virt.csa_vmid0_addr, NULL); +} + +/* + * amdgpu_map_static_csa should be called during amdgpu_vm_init + * it maps virtual address "AMDGPU_VA_RESERVED_SIZE - adev->virt.csa_size" + * to this VM, and each command submission of GFX should use this virtual + * address within META_DATA init package to support SRIOV gfx preemption. + */ + +int amdgpu_map_static_csa(struct amdgpu_device *adev, struct amdgpu_vm *vm) +{ + int r; + uint64_t vaddr; + struct amdgpu_bo_va *bo_va; + struct ww_acquire_ctx ticket; + struct list_head list, duplicates; + struct amdgpu_bo_list_entry pd; + + INIT_LIST_HEAD(&list); + INIT_LIST_HEAD(&duplicates); + INIT_LIST_HEAD(&vm->vm_virt.csa_tv.head); + vm->vm_virt.csa_tv.bo = &adev->virt.csa_obj->tbo; + vm->vm_virt.csa_tv.shared = true; + + list_add(&vm->vm_virt.csa_tv.head, &list); + amdgpu_vm_get_pd_bo(vm, &list, &pd); + + vaddr = AMDGPU_VA_RESERVED_SIZE - adev->virt.csa_size; + r = ttm_eu_reserve_buffers(&ticket, &list, true, &duplicates); + if (r) { + DRM_ERROR("failed to reserve CSA,PD BOs: err=%d\n", r); + return r; + } + + bo_va = amdgpu_vm_bo_add(adev, vm, adev->virt.csa_obj); + if (!bo_va) { + ttm_eu_backoff_reservation(&ticket, &list); + DRM_ERROR("failed to create bo_va for static CSA\n"); + return -ENOMEM; + } + + r = amdgpu_vm_bo_map(adev, bo_va, vaddr, 0, adev->virt.csa_size, + AMDGPU_PTE_READABLE | AMDGPU_PTE_WRITEABLE | + AMDGPU_PTE_EXECUTABLE); + + if (r) { + DRM_ERROR("failed to do bo_map on static CSA, err=%d\n", r); + amdgpu_vm_bo_rmv(adev, bo_va); + ttm_eu_backoff_reservation(&ticket, &list); + kfree(bo_va); + return r; + } + + ttm_eu_backoff_reservation(&ticket, &list); + + vm->vm_virt.csa_bo_va = bo_va; + vm->vm_virt.vm_csa_addr = vaddr; + vm->vm_virt.vm_gds_addr = vaddr + PAGE_SIZE; + return 0; +} diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h index cc36d28..827162a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h @@ -68,4 +68,9 @@ static inline bool is_virtual_machine(void) #endif } +struct amdgpu_vm; +int amdgpu_allocate_static_csa(struct amdgpu_device *adev); +void amdgpu_deallocate_static_csa(struct amdgpu_device *adev); +int amdgpu_map_static_csa(struct amdgpu_device *adev, struct amdgpu_vm *vm); + #endif -- 2.7.4 _______________________________________________ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/3] drm/amdgpu:invoke CSA functions [not found] ` <1484044422-2898-1-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org> 2017-01-10 10:33 ` [PATCH 1/3] drm/amdgpu:new field members for SRIOV Monk Liu 2017-01-10 10:33 ` [PATCH 2/3] drm/amdgpu:add new file " Monk Liu @ 2017-01-10 10:33 ` Monk Liu 2 siblings, 0 replies; 7+ messages in thread From: Monk Liu @ 2017-01-10 10:33 UTC (permalink / raw) To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Monk Liu Change-Id: I110af93c4f17ab18d1be199c6ebe9ee965483a66 Signed-off-by: Monk Liu <Monk.Liu@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 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 0/3] CSA patches
@ 2017-01-11 2:53 Monk Liu
[not found] ` <1484103205-5789-1-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org>
0 siblings, 1 reply; 7+ messages in thread
From: Monk Liu @ 2017-01-11 2:53 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Monk Liu
*** BLURB HERE ***
Monk Liu (3):
drm/amdgpu:new field members for SRIOV
drm/amdgpu:add new file for SRIOV
drm/amdgpu:invoke CSA functions
drivers/gpu/drm/amd/amdgpu/Makefile | 2 +-
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/amdgpu_virt.c | 95 ++++++++++++++++++++++++++++++
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h | 12 ++++
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 3 +
drivers/gpu/drm/amd/amdgpu/vi.c | 3 +
8 files changed, 151 insertions(+), 1 deletion(-)
create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
--
2.7.4
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 7+ messages in thread[parent not found: <1484103205-5789-1-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org>]
* [PATCH 3/3] drm/amdgpu:invoke CSA functions [not found] ` <1484103205-5789-1-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org> @ 2017-01-11 2:53 ` Monk Liu 0 siblings, 0 replies; 7+ messages in thread From: Monk Liu @ 2017-01-11 2:53 UTC (permalink / raw) To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Monk Liu Change-Id: I528c2f324830aaa21ab8d8250bc80a2a6bab33bd Signed-off-by: Monk Liu <Monk.Liu@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 | 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 amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 0/3] CSA patch v3
@ 2017-01-11 10:43 Monk Liu
[not found] ` <1484131406-19893-1-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org>
0 siblings, 1 reply; 7+ messages in thread
From: Monk Liu @ 2017-01-11 10:43 UTC (permalink / raw)
To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Monk Liu
v2:
drop invoking gem_va and update CSA address in CS routines,
v3:
reserve CSA bo and call vm_bo_rmv() to remove CSA mappings
prior to vm_fini()
Monk Liu (3):
drm/amdgpu:new field members for SRIOV
drm/amdgpu:add new file for SRIOV
drm/amdgpu:invoke CSA functions
drivers/gpu/drm/amd/amdgpu/Makefile | 2 +-
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 | 14 +++++
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 95 ++++++++++++++++++++++++++++++
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.h | 12 ++++
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 3 +
drivers/gpu/drm/amd/amdgpu/vi.c | 3 +
8 files changed, 154 insertions(+), 1 deletion(-)
create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
--
2.7.4
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 7+ messages in thread[parent not found: <1484131406-19893-1-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org>]
* [PATCH 3/3] drm/amdgpu:invoke CSA functions [not found] ` <1484131406-19893-1-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org> @ 2017-01-11 10:43 ` Monk Liu [not found] ` <1484131406-19893-4-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org> 0 siblings, 1 reply; 7+ messages in thread From: Monk Liu @ 2017-01-11 10:43 UTC (permalink / raw) To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW; +Cc: Monk Liu Change-Id: I528c2f324830aaa21ab8d8250bc80a2a6bab33bd Signed-off-by: Monk Liu <Monk.Liu@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 | 14 ++++++++++++++ drivers/gpu/drm/amd/amdgpu/vi.c | 3 +++ 4 files changed, 43 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..1421a9d 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,14 @@ 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)) { + /* TODO: how to handle reserve failure */ + BUG_ON(amdgpu_bo_reserve(adev->virt.csa_obj, false)); + amdgpu_vm_bo_rmv(adev, fpriv->vm.csa_bo_va); + fpriv->vm.csa_bo_va = NULL; + amdgpu_bo_unreserve(adev->virt.csa_obj); + } + 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..1f307c3 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 = AMDGPU_CSA_SIZE; /* 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 ^ permalink raw reply related [flat|nested] 7+ messages in thread
[parent not found: <1484131406-19893-4-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org>]
* Re: [PATCH 3/3] drm/amdgpu:invoke CSA functions [not found] ` <1484131406-19893-4-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org> @ 2017-01-11 12:54 ` Christian König 0 siblings, 0 replies; 7+ messages in thread From: Christian König @ 2017-01-11 12:54 UTC (permalink / raw) To: Monk Liu, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW Am 11.01.2017 um 11:43 schrieb Monk Liu: > Change-Id: I528c2f324830aaa21ab8d8250bc80a2a6bab33bd > Signed-off-by: Monk Liu <Monk.Liu@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 | 14 ++++++++++++++ > drivers/gpu/drm/amd/amdgpu/vi.c | 3 +++ > 4 files changed, 43 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; A new line between declaration and code. > + 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; > + } > + } We sooner or later need to fix those extras in the init order, but that is clearly not topic of this patch. > } > } > > @@ -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..1421a9d 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,14 @@ 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)) { > + /* TODO: how to handle reserve failure */ > + BUG_ON(amdgpu_bo_reserve(adev->virt.csa_obj, false)); Reservation should never fail as long as you don't set the interruptible paramter to true, so using BUG_ON() should be ok here. But I'm not 100% sure if BUG_ON() doesn't works like assert(), e.g. on a not debug build the compiler could optimize the call to amdgpu_bo_reserve away. So better do: r = amdgpu_bo_reserve(adev->virt.csa_obj, false); BUG_ON(!r); With that fixed the patch is Reviewed-by: Christian König <christian.koenig@amd.com>. Regards, Christian. > + amdgpu_vm_bo_rmv(adev, fpriv->vm.csa_bo_va); > + fpriv->vm.csa_bo_va = NULL; > + amdgpu_bo_unreserve(adev->virt.csa_obj); > + } > + > 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..1f307c3 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 = AMDGPU_CSA_SIZE; /* two page now for VI and AI */ > } > > static const struct amdgpu_allowed_register_entry tonga_allowed_read_registers[] = { _______________________________________________ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2017-01-11 12:54 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-01-10 10:33 [PATCH 0/3] static CSA patches Monk Liu
[not found] ` <1484044422-2898-1-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org>
2017-01-10 10:33 ` [PATCH 1/3] drm/amdgpu:new field members for SRIOV Monk Liu
2017-01-10 10:33 ` [PATCH 2/3] drm/amdgpu:add new file " Monk Liu
2017-01-10 10:33 ` [PATCH 3/3] drm/amdgpu:invoke CSA functions Monk Liu
-- strict thread matches above, loose matches on Subject: below --
2017-01-11 2:53 [PATCH 0/3] CSA patches Monk Liu
[not found] ` <1484103205-5789-1-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org>
2017-01-11 2:53 ` [PATCH 3/3] drm/amdgpu:invoke CSA functions Monk Liu
2017-01-11 10:43 [PATCH 0/3] CSA patch v3 Monk Liu
[not found] ` <1484131406-19893-1-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org>
2017-01-11 10:43 ` [PATCH 3/3] drm/amdgpu:invoke CSA functions Monk Liu
[not found] ` <1484131406-19893-4-git-send-email-Monk.Liu-5C7GfCeVMHo@public.gmane.org>
2017-01-11 12:54 ` Christian König
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox