|
@@ -155,10 +155,15 @@ static void mmhub_v1_0_init_cache_regs(struct amdgpu_device *adev)
|
|
|
tmp = REG_SET_FIELD(tmp, VM_L2_CNTL2, INVALIDATE_L2_CACHE, 1);
|
|
|
WREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL2, tmp);
|
|
|
|
|
|
- tmp = mmVM_L2_CNTL3_DEFAULT;
|
|
|
- tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, 9);
|
|
|
- tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, L2_CACHE_BIGK_FRAGMENT_SIZE, 6);
|
|
|
- WREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL3, tmp);
|
|
|
+ if (adev->mc.translate_further) {
|
|
|
+ tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, 12);
|
|
|
+ tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3,
|
|
|
+ L2_CACHE_BIGK_FRAGMENT_SIZE, 9);
|
|
|
+ } else {
|
|
|
+ tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, 9);
|
|
|
+ tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3,
|
|
|
+ L2_CACHE_BIGK_FRAGMENT_SIZE, 6);
|
|
|
+ }
|
|
|
|
|
|
tmp = mmVM_L2_CNTL4_DEFAULT;
|
|
|
tmp = REG_SET_FIELD(tmp, VM_L2_CNTL4, VMC_TAP_PDE_REQUEST_PHYSICAL, 0);
|
|
@@ -196,32 +201,40 @@ static void mmhub_v1_0_disable_identity_aperture(struct amdgpu_device *adev)
|
|
|
|
|
|
static void mmhub_v1_0_setup_vmid_config(struct amdgpu_device *adev)
|
|
|
{
|
|
|
- int i;
|
|
|
+ unsigned num_level, block_size;
|
|
|
uint32_t tmp;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ num_level = adev->vm_manager.num_level;
|
|
|
+ block_size = adev->vm_manager.block_size;
|
|
|
+ if (adev->mc.translate_further)
|
|
|
+ num_level -= 1;
|
|
|
+ else
|
|
|
+ block_size -= 9;
|
|
|
|
|
|
for (i = 0; i <= 14; i++) {
|
|
|
tmp = RREG32_SOC15_OFFSET(MMHUB, 0, mmVM_CONTEXT1_CNTL, i);
|
|
|
+ tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, ENABLE_CONTEXT, 1);
|
|
|
+ tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, PAGE_TABLE_DEPTH,
|
|
|
+ num_level);
|
|
|
tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL,
|
|
|
- ENABLE_CONTEXT, 1);
|
|
|
- tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL,
|
|
|
- PAGE_TABLE_DEPTH, adev->vm_manager.num_level);
|
|
|
- tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL,
|
|
|
- RANGE_PROTECTION_FAULT_ENABLE_DEFAULT, 1);
|
|
|
+ RANGE_PROTECTION_FAULT_ENABLE_DEFAULT, 1);
|
|
|
tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL,
|
|
|
- DUMMY_PAGE_PROTECTION_FAULT_ENABLE_DEFAULT, 1);
|
|
|
+ DUMMY_PAGE_PROTECTION_FAULT_ENABLE_DEFAULT,
|
|
|
+ 1);
|
|
|
tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL,
|
|
|
- PDE0_PROTECTION_FAULT_ENABLE_DEFAULT, 1);
|
|
|
+ PDE0_PROTECTION_FAULT_ENABLE_DEFAULT, 1);
|
|
|
tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL,
|
|
|
- VALID_PROTECTION_FAULT_ENABLE_DEFAULT, 1);
|
|
|
+ VALID_PROTECTION_FAULT_ENABLE_DEFAULT, 1);
|
|
|
tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL,
|
|
|
- READ_PROTECTION_FAULT_ENABLE_DEFAULT, 1);
|
|
|
+ READ_PROTECTION_FAULT_ENABLE_DEFAULT, 1);
|
|
|
tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL,
|
|
|
- WRITE_PROTECTION_FAULT_ENABLE_DEFAULT, 1);
|
|
|
+ WRITE_PROTECTION_FAULT_ENABLE_DEFAULT, 1);
|
|
|
tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL,
|
|
|
- EXECUTE_PROTECTION_FAULT_ENABLE_DEFAULT, 1);
|
|
|
+ EXECUTE_PROTECTION_FAULT_ENABLE_DEFAULT, 1);
|
|
|
tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL,
|
|
|
- PAGE_TABLE_BLOCK_SIZE,
|
|
|
- adev->vm_manager.block_size - 9);
|
|
|
+ PAGE_TABLE_BLOCK_SIZE,
|
|
|
+ block_size);
|
|
|
/* Send no-retry XNACK on fault to suppress VM fault storm. */
|
|
|
tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL,
|
|
|
RETRY_PERMISSION_OR_INVALID_PAGE_FAULT, 0);
|