diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-12-25 14:48:26 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-12-25 14:48:26 -0500 |
commit | 4971f090aa7f6ce5daa094ce4334f6618f93a7eb (patch) | |
tree | 45d75782b7dedbec76a3ab82d2769f7707668071 /drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | |
parent | c76cd634eb5bfd497617ea224a54a03b545c8c4d (diff) | |
parent | 2a3c83f5fe0770d13bbb71b23674886ff4111f44 (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.c | 52 |
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(¶ms, start, last + 1, addr, flags); | 1844 | r = amdgpu_vm_update_ptes(¶ms, 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 | */ | ||
3283 | bool 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 |