Merge branch 'drm-next-4.16' of git://people.freedesktop.org/~agd5f/linux into drm-next
A few more misc fixes for 4.16. * 'drm-next-4.16' of git://people.freedesktop.org/~agd5f/linux: drm/amdgpu: re-enable CGCG on CZ and disable on ST drm/amdgpu: disable coarse grain clockgating for ST drm/radeon: adjust tested variable drm/amdgpu: remove WARN_ON when VM isn't found v2 drm/amdgpu: fix locking in vega10_ih_prescreen_iv drm/amdgpu: fix another potential cause of VM faults drm/amdgpu: use queue 0 for kiq ring drm/ttm: Fix 'buf' pointer update in ttm_bo_vm_access_kmap() (v2) drm/ttm: fix missing parameter change for ttm_bo_cleanup_refs
This commit is contained in:
Коммит
2dd27794b9
|
@ -179,8 +179,12 @@ static int amdgpu_gfx_kiq_acquire(struct amdgpu_device *adev,
|
|||
|
||||
amdgpu_gfx_bit_to_queue(adev, queue_bit, &mec, &pipe, &queue);
|
||||
|
||||
/* Using pipes 2/3 from MEC 2 seems cause problems */
|
||||
if (mec == 1 && pipe > 1)
|
||||
/*
|
||||
* 1. Using pipes 2/3 from MEC 2 seems cause problems.
|
||||
* 2. It must use queue id 0, because CGPG_IDLE/SAVE/LOAD/RUN
|
||||
* only can be issued on queue 0.
|
||||
*/
|
||||
if ((mec == 1 && pipe > 1) || queue != 0)
|
||||
continue;
|
||||
|
||||
ring->me = mec + 1;
|
||||
|
|
|
@ -2262,12 +2262,12 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
|
|||
{
|
||||
const unsigned align = min(AMDGPU_VM_PTB_ALIGN_SIZE,
|
||||
AMDGPU_VM_PTE_COUNT(adev) * 8);
|
||||
uint64_t init_pde_value = 0, flags;
|
||||
unsigned ring_instance;
|
||||
struct amdgpu_ring *ring;
|
||||
struct drm_sched_rq *rq;
|
||||
unsigned long size;
|
||||
int r, i;
|
||||
u64 flags;
|
||||
uint64_t init_pde_value = 0;
|
||||
|
||||
vm->va = RB_ROOT_CACHED;
|
||||
for (i = 0; i < AMDGPU_MAX_VMHUBS; i++)
|
||||
|
@ -2318,29 +2318,21 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
|
|||
flags |= (AMDGPU_GEM_CREATE_NO_CPU_ACCESS |
|
||||
AMDGPU_GEM_CREATE_SHADOW);
|
||||
|
||||
r = amdgpu_bo_create(adev,
|
||||
amdgpu_vm_bo_size(adev, adev->vm_manager.root_level),
|
||||
align, true,
|
||||
AMDGPU_GEM_DOMAIN_VRAM,
|
||||
flags,
|
||||
NULL, NULL, init_pde_value, &vm->root.base.bo);
|
||||
size = amdgpu_vm_bo_size(adev, adev->vm_manager.root_level);
|
||||
r = amdgpu_bo_create(adev, size, align, true, AMDGPU_GEM_DOMAIN_VRAM,
|
||||
flags, NULL, NULL, init_pde_value,
|
||||
&vm->root.base.bo);
|
||||
if (r)
|
||||
goto error_free_sched_entity;
|
||||
|
||||
r = amdgpu_bo_reserve(vm->root.base.bo, true);
|
||||
if (r)
|
||||
goto error_free_root;
|
||||
|
||||
vm->root.base.vm = vm;
|
||||
list_add_tail(&vm->root.base.bo_list, &vm->root.base.bo->va);
|
||||
INIT_LIST_HEAD(&vm->root.base.vm_status);
|
||||
|
||||
if (vm->use_cpu_for_update) {
|
||||
r = amdgpu_bo_reserve(vm->root.base.bo, false);
|
||||
if (r)
|
||||
goto error_free_root;
|
||||
|
||||
r = amdgpu_bo_kmap(vm->root.base.bo, NULL);
|
||||
amdgpu_bo_unreserve(vm->root.base.bo);
|
||||
if (r)
|
||||
goto error_free_root;
|
||||
}
|
||||
list_add_tail(&vm->root.base.vm_status, &vm->evicted);
|
||||
amdgpu_bo_unreserve(vm->root.base.bo);
|
||||
|
||||
if (pasid) {
|
||||
unsigned long flags;
|
||||
|
|
|
@ -278,9 +278,9 @@ static bool vega10_ih_prescreen_iv(struct amdgpu_device *adev)
|
|||
/* Track retry faults in per-VM fault FIFO. */
|
||||
spin_lock(&adev->vm_manager.pasid_lock);
|
||||
vm = idr_find(&adev->vm_manager.pasid_idr, pasid);
|
||||
spin_unlock(&adev->vm_manager.pasid_lock);
|
||||
if (WARN_ON_ONCE(!vm)) {
|
||||
if (!vm) {
|
||||
/* VM not found, process it normally */
|
||||
spin_unlock(&adev->vm_manager.pasid_lock);
|
||||
amdgpu_ih_clear_fault(adev, key);
|
||||
return true;
|
||||
}
|
||||
|
@ -288,9 +288,11 @@ static bool vega10_ih_prescreen_iv(struct amdgpu_device *adev)
|
|||
r = kfifo_put(&vm->faults, key);
|
||||
if (!r) {
|
||||
/* FIFO is full. Ignore it until there is space */
|
||||
spin_unlock(&adev->vm_manager.pasid_lock);
|
||||
amdgpu_ih_clear_fault(adev, key);
|
||||
goto ignore_iv;
|
||||
}
|
||||
spin_unlock(&adev->vm_manager.pasid_lock);
|
||||
|
||||
/* It's the first fault for this address, process it normally */
|
||||
return true;
|
||||
|
|
|
@ -1049,7 +1049,6 @@ static int vi_common_early_init(void *handle)
|
|||
AMD_CG_SUPPORT_GFX_CP_LS |
|
||||
AMD_CG_SUPPORT_GFX_CGTS |
|
||||
AMD_CG_SUPPORT_GFX_CGTS_LS |
|
||||
AMD_CG_SUPPORT_GFX_CGCG |
|
||||
AMD_CG_SUPPORT_GFX_CGLS |
|
||||
AMD_CG_SUPPORT_BIF_LS |
|
||||
AMD_CG_SUPPORT_HDP_MGCG |
|
||||
|
|
|
@ -995,7 +995,7 @@ int radeon_uvd_calc_upll_dividers(struct radeon_device *rdev,
|
|||
/* calc dclk divider with current vco freq */
|
||||
dclk_div = radeon_uvd_calc_upll_post_div(vco_freq, dclk,
|
||||
pd_min, pd_even);
|
||||
if (vclk_div > pd_max)
|
||||
if (dclk_div > pd_max)
|
||||
break; /* vco is too big, it has to stop */
|
||||
|
||||
/* calc score with current vco freq */
|
||||
|
|
|
@ -1727,7 +1727,7 @@ int ttm_bo_swapout(struct ttm_bo_global *glob, struct ttm_operation_ctx *ctx)
|
|||
kref_get(&bo->list_kref);
|
||||
|
||||
if (!list_empty(&bo->ddestroy)) {
|
||||
ret = ttm_bo_cleanup_refs(bo, false, false, true);
|
||||
ret = ttm_bo_cleanup_refs(bo, false, false, locked);
|
||||
kref_put(&bo->list_kref, ttm_bo_release_list);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -316,7 +316,7 @@ static void ttm_bo_vm_close(struct vm_area_struct *vma)
|
|||
|
||||
static int ttm_bo_vm_access_kmap(struct ttm_buffer_object *bo,
|
||||
unsigned long offset,
|
||||
void *buf, int len, int write)
|
||||
uint8_t *buf, int len, int write)
|
||||
{
|
||||
unsigned long page = offset >> PAGE_SHIFT;
|
||||
unsigned long bytes_left = len;
|
||||
|
@ -345,6 +345,7 @@ static int ttm_bo_vm_access_kmap(struct ttm_buffer_object *bo,
|
|||
ttm_bo_kunmap(&map);
|
||||
|
||||
page++;
|
||||
buf += bytes;
|
||||
bytes_left -= bytes;
|
||||
offset = 0;
|
||||
} while (bytes_left);
|
||||
|
|
Загрузка…
Ссылка в новой задаче