aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-12-25 14:48:26 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2018-12-25 14:48:26 -0500
commit4971f090aa7f6ce5daa094ce4334f6618f93a7eb (patch)
tree45d75782b7dedbec76a3ab82d2769f7707668071 /drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
parentc76cd634eb5bfd497617ea224a54a03b545c8c4d (diff)
parent2a3c83f5fe0770d13bbb71b23674886ff4111f44 (diff)
Merge tag 'drm-next-2018-12-14' of git://anongit.freedesktop.org/drm/drm
Pull drm updates from Dave Airlie: "Core: - shared fencing staging removal - drop transactional atomic helpers and move helpers to new location - DP/MST atomic cleanup - Leasing cleanups and drop EXPORT_SYMBOL - Convert drivers to atomic helpers and generic fbdev. - removed deprecated obj_ref/unref in favour of get/put - Improve dumb callback documentation - MODESET_LOCK_BEGIN/END helpers panels: - CDTech panels, Banana Pi Panel, DLC1010GIG, - Olimex LCD-O-LinuXino, Samsung S6D16D0, Truly NT35597 WQXGA, - Himax HX8357D, simulated RTSM AEMv8. - GPD Win2 panel - AUO G101EVN010 vgem: - render node support ttm: - move global init out of drivers - fix LRU handling for ghost objects - Support for simultaneous submissions to multiple engines scheduler: - timeout/fault handling changes to help GPU recovery - helpers for hw with preemption support i915: - Scaler/Watermark fixes - DP MST + powerwell fixes - PSR fixes - Break long get/put shmemfs pages - Icelake fixes - Icelake DSI video mode enablement - Engine workaround improvements amdgpu: - freesync support - GPU reset enabled on CI, VI, SOC15 dGPUs - ABM support in DC - KFD support for vega12/polaris12 - SDMA paging queue on vega - More amdkfd code sharing - DCC scanout on GFX9 - DC kerneldoc - Updated SMU firmware for GFX8 chips - XGMI PSP + hive reset support - GPU reset - DC trace support - Powerplay updates for newer Polaris - Cursor plane update fast path - kfd dma-buf support virtio-gpu: - add EDID support vmwgfx: - pageflip with damage support nouveau: - Initial Turing TU104/TU106 modesetting support msm: - a2xx gpu support for apq8060 and imx5 - a2xx gpummu support - mdp4 display support for apq8060 - DPU fixes and cleanups - enhanced profiling support - debug object naming interface - get_iova/page pinning decoupling tegra: - Tegra194 host1x, VIC and display support enabled - Audio over HDMI for Tegra186 and Tegra194 exynos: - DMA/IOMMU refactoring - plane alpha + blend mode support - Color format fixes for mixer driver rcar-du: - R8A7744 and R8A77470 support - R8A77965 LVDS support imx: - fbdev emulation fix - multi-tiled scalling fixes - SPDX identifiers rockchip - dw_hdmi support - dw-mipi-dsi + dual dsi support - mailbox read size fix qxl: - fix cursor pinning vc4: - YUV support (scaling + cursor) v3d: - enable TFU (Texture Formatting Unit) mali-dp: - add support for linear tiled formats sun4i: - Display Engine 3 support - H6 DE3 mixer 0 support - H6 display engine support - dw-hdmi support - H6 HDMI phy support - implicit fence waiting - BGRX8888 support meson: - Overlay plane support - implicit fence waiting - HDMI 1.4 4k modes bridge: - i2c fixes for sii902x" * tag 'drm-next-2018-12-14' of git://anongit.freedesktop.org/drm/drm: (1403 commits) drm/amd/display: Add fast path for cursor plane updates drm/amdgpu: Enable GPU recovery by default for CI drm/amd/display: Fix duplicating scaling/underscan connector state drm/amd/display: Fix unintialized max_bpc state values Revert "drm/amd/display: Set RMX_ASPECT as default" drm/amdgpu: Fix stub function name drm/msm/dpu: Fix clock issue after bind failure drm/msm/dpu: Clean up dpu_media_info.h static inline functions drm/msm/dpu: Further cleanups for static inline functions drm/msm/dpu: Cleanup the debugfs functions drm/msm/dpu: Remove dpu_irq and unused functions drm/msm: Make irq_postinstall optional drm/msm/dpu: Cleanup callers of dpu_hw_blk_init drm/msm/dpu: Remove unused functions drm/msm/dpu: Remove dpu_crtc_is_enabled() drm/msm/dpu: Remove dpu_crtc_get_mixer_height drm/msm/dpu: Remove dpu_dbg drm/msm: dpu: Remove crtc_lock drm/msm: dpu: Remove vblank_requested flag from dpu_crtc drm/msm: dpu: Separate crtc assignment from vblank enable ...
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c52
1 files changed, 6 insertions, 46 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 0877ff9a9594..e73d152659a2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -617,7 +617,8 @@ void amdgpu_vm_get_pd_bo(struct amdgpu_vm *vm,
617{ 617{
618 entry->priority = 0; 618 entry->priority = 0;
619 entry->tv.bo = &vm->root.base.bo->tbo; 619 entry->tv.bo = &vm->root.base.bo->tbo;
620 entry->tv.shared = true; 620 /* One for the VM updates, one for TTM and one for the CS job */
621 entry->tv.num_shared = 3;
621 entry->user_pages = NULL; 622 entry->user_pages = NULL;
622 list_add(&entry->tv.head, validated); 623 list_add(&entry->tv.head, validated);
623} 624}
@@ -773,10 +774,6 @@ static int amdgpu_vm_clear_bo(struct amdgpu_device *adev,
773 774
774 ring = container_of(vm->entity.rq->sched, struct amdgpu_ring, sched); 775 ring = container_of(vm->entity.rq->sched, struct amdgpu_ring, sched);
775 776
776 r = reservation_object_reserve_shared(bo->tbo.resv);
777 if (r)
778 return r;
779
780 r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); 777 r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx);
781 if (r) 778 if (r)
782 goto error; 779 goto error;
@@ -1844,10 +1841,6 @@ static int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev,
1844 if (r) 1841 if (r)
1845 goto error_free; 1842 goto error_free;
1846 1843
1847 r = reservation_object_reserve_shared(vm->root.base.bo->tbo.resv);
1848 if (r)
1849 goto error_free;
1850
1851 r = amdgpu_vm_update_ptes(&params, start, last + 1, addr, flags); 1844 r = amdgpu_vm_update_ptes(&params, start, last + 1, addr, flags);
1852 if (r) 1845 if (r)
1853 goto error_free; 1846 goto error_free;
@@ -3028,6 +3021,10 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
3028 if (r) 3021 if (r)
3029 goto error_free_root; 3022 goto error_free_root;
3030 3023
3024 r = reservation_object_reserve_shared(root->tbo.resv, 1);
3025 if (r)
3026 goto error_unreserve;
3027
3031 r = amdgpu_vm_clear_bo(adev, vm, root, 3028 r = amdgpu_vm_clear_bo(adev, vm, root,
3032 adev->vm_manager.root_level, 3029 adev->vm_manager.root_level,
3033 vm->pte_support_ats); 3030 vm->pte_support_ats);
@@ -3057,7 +3054,6 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
3057 } 3054 }
3058 3055
3059 INIT_KFIFO(vm->faults); 3056 INIT_KFIFO(vm->faults);
3060 vm->fault_credit = 16;
3061 3057
3062 return 0; 3058 return 0;
3063 3059
@@ -3270,42 +3266,6 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm)
3270} 3266}
3271 3267
3272/** 3268/**
3273 * amdgpu_vm_pasid_fault_credit - Check fault credit for given PASID
3274 *
3275 * @adev: amdgpu_device pointer
3276 * @pasid: PASID do identify the VM
3277 *
3278 * This function is expected to be called in interrupt context.
3279 *
3280 * Returns:
3281 * True if there was fault credit, false otherwise
3282 */
3283bool amdgpu_vm_pasid_fault_credit(struct amdgpu_device *adev,
3284 unsigned int pasid)
3285{
3286 struct amdgpu_vm *vm;
3287
3288 spin_lock(&adev->vm_manager.pasid_lock);
3289 vm = idr_find(&adev->vm_manager.pasid_idr, pasid);
3290 if (!vm) {
3291 /* VM not found, can't track fault credit */
3292 spin_unlock(&adev->vm_manager.pasid_lock);
3293 return true;
3294 }
3295
3296 /* No lock needed. only accessed by IRQ handler */
3297 if (!vm->fault_credit) {
3298 /* Too many faults in this VM */
3299 spin_unlock(&adev->vm_manager.pasid_lock);
3300 return false;
3301 }
3302
3303 vm->fault_credit--;
3304 spin_unlock(&adev->vm_manager.pasid_lock);
3305 return true;
3306}
3307
3308/**
3309 * amdgpu_vm_manager_init - init the VM manager 3269 * amdgpu_vm_manager_init - init the VM manager
3310 * 3270 *
3311 * @adev: amdgpu_device pointer 3271 * @adev: amdgpu_device pointer