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:
commit
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);
|
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;
|
continue;
|
||||||
|
|
||||||
ring->me = mec + 1;
|
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,
|
const unsigned align = min(AMDGPU_VM_PTB_ALIGN_SIZE,
|
||||||
AMDGPU_VM_PTE_COUNT(adev) * 8);
|
AMDGPU_VM_PTE_COUNT(adev) * 8);
|
||||||
|
uint64_t init_pde_value = 0, flags;
|
||||||
unsigned ring_instance;
|
unsigned ring_instance;
|
||||||
struct amdgpu_ring *ring;
|
struct amdgpu_ring *ring;
|
||||||
struct drm_sched_rq *rq;
|
struct drm_sched_rq *rq;
|
||||||
|
unsigned long size;
|
||||||
int r, i;
|
int r, i;
|
||||||
u64 flags;
|
|
||||||
uint64_t init_pde_value = 0;
|
|
||||||
|
|
||||||
vm->va = RB_ROOT_CACHED;
|
vm->va = RB_ROOT_CACHED;
|
||||||
for (i = 0; i < AMDGPU_MAX_VMHUBS; i++)
|
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 |
|
flags |= (AMDGPU_GEM_CREATE_NO_CPU_ACCESS |
|
||||||
AMDGPU_GEM_CREATE_SHADOW);
|
AMDGPU_GEM_CREATE_SHADOW);
|
||||||
|
|
||||||
r = amdgpu_bo_create(adev,
|
size = amdgpu_vm_bo_size(adev, adev->vm_manager.root_level);
|
||||||
amdgpu_vm_bo_size(adev, adev->vm_manager.root_level),
|
r = amdgpu_bo_create(adev, size, align, true, AMDGPU_GEM_DOMAIN_VRAM,
|
||||||
align, true,
|
flags, NULL, NULL, init_pde_value,
|
||||||
AMDGPU_GEM_DOMAIN_VRAM,
|
&vm->root.base.bo);
|
||||||
flags,
|
|
||||||
NULL, NULL, init_pde_value, &vm->root.base.bo);
|
|
||||||
if (r)
|
if (r)
|
||||||
goto error_free_sched_entity;
|
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;
|
vm->root.base.vm = vm;
|
||||||
list_add_tail(&vm->root.base.bo_list, &vm->root.base.bo->va);
|
list_add_tail(&vm->root.base.bo_list, &vm->root.base.bo->va);
|
||||||
INIT_LIST_HEAD(&vm->root.base.vm_status);
|
list_add_tail(&vm->root.base.vm_status, &vm->evicted);
|
||||||
|
amdgpu_bo_unreserve(vm->root.base.bo);
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pasid) {
|
if (pasid) {
|
||||||
unsigned long flags;
|
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. */
|
/* Track retry faults in per-VM fault FIFO. */
|
||||||
spin_lock(&adev->vm_manager.pasid_lock);
|
spin_lock(&adev->vm_manager.pasid_lock);
|
||||||
vm = idr_find(&adev->vm_manager.pasid_idr, pasid);
|
vm = idr_find(&adev->vm_manager.pasid_idr, pasid);
|
||||||
spin_unlock(&adev->vm_manager.pasid_lock);
|
if (!vm) {
|
||||||
if (WARN_ON_ONCE(!vm)) {
|
|
||||||
/* VM not found, process it normally */
|
/* VM not found, process it normally */
|
||||||
|
spin_unlock(&adev->vm_manager.pasid_lock);
|
||||||
amdgpu_ih_clear_fault(adev, key);
|
amdgpu_ih_clear_fault(adev, key);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -288,9 +288,11 @@ static bool vega10_ih_prescreen_iv(struct amdgpu_device *adev)
|
||||||
r = kfifo_put(&vm->faults, key);
|
r = kfifo_put(&vm->faults, key);
|
||||||
if (!r) {
|
if (!r) {
|
||||||
/* FIFO is full. Ignore it until there is space */
|
/* FIFO is full. Ignore it until there is space */
|
||||||
|
spin_unlock(&adev->vm_manager.pasid_lock);
|
||||||
amdgpu_ih_clear_fault(adev, key);
|
amdgpu_ih_clear_fault(adev, key);
|
||||||
goto ignore_iv;
|
goto ignore_iv;
|
||||||
}
|
}
|
||||||
|
spin_unlock(&adev->vm_manager.pasid_lock);
|
||||||
|
|
||||||
/* It's the first fault for this address, process it normally */
|
/* It's the first fault for this address, process it normally */
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -1049,7 +1049,6 @@ static int vi_common_early_init(void *handle)
|
||||||
AMD_CG_SUPPORT_GFX_CP_LS |
|
AMD_CG_SUPPORT_GFX_CP_LS |
|
||||||
AMD_CG_SUPPORT_GFX_CGTS |
|
AMD_CG_SUPPORT_GFX_CGTS |
|
||||||
AMD_CG_SUPPORT_GFX_CGTS_LS |
|
AMD_CG_SUPPORT_GFX_CGTS_LS |
|
||||||
AMD_CG_SUPPORT_GFX_CGCG |
|
|
||||||
AMD_CG_SUPPORT_GFX_CGLS |
|
AMD_CG_SUPPORT_GFX_CGLS |
|
||||||
AMD_CG_SUPPORT_BIF_LS |
|
AMD_CG_SUPPORT_BIF_LS |
|
||||||
AMD_CG_SUPPORT_HDP_MGCG |
|
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 */
|
/* calc dclk divider with current vco freq */
|
||||||
dclk_div = radeon_uvd_calc_upll_post_div(vco_freq, dclk,
|
dclk_div = radeon_uvd_calc_upll_post_div(vco_freq, dclk,
|
||||||
pd_min, pd_even);
|
pd_min, pd_even);
|
||||||
if (vclk_div > pd_max)
|
if (dclk_div > pd_max)
|
||||||
break; /* vco is too big, it has to stop */
|
break; /* vco is too big, it has to stop */
|
||||||
|
|
||||||
/* calc score with current vco freq */
|
/* 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);
|
kref_get(&bo->list_kref);
|
||||||
|
|
||||||
if (!list_empty(&bo->ddestroy)) {
|
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);
|
kref_put(&bo->list_kref, ttm_bo_release_list);
|
||||||
return ret;
|
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,
|
static int ttm_bo_vm_access_kmap(struct ttm_buffer_object *bo,
|
||||||
unsigned long offset,
|
unsigned long offset,
|
||||||
void *buf, int len, int write)
|
uint8_t *buf, int len, int write)
|
||||||
{
|
{
|
||||||
unsigned long page = offset >> PAGE_SHIFT;
|
unsigned long page = offset >> PAGE_SHIFT;
|
||||||
unsigned long bytes_left = len;
|
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);
|
ttm_bo_kunmap(&map);
|
||||||
|
|
||||||
page++;
|
page++;
|
||||||
|
buf += bytes;
|
||||||
bytes_left -= bytes;
|
bytes_left -= bytes;
|
||||||
offset = 0;
|
offset = 0;
|
||||||
} while (bytes_left);
|
} while (bytes_left);
|
||||||
|
|
Loading…
Reference in New Issue