Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amd/amdgpu: L1 Policy(2/5) - removed GC GRBM violations from gfxhub

Signed-off-by: Zhigang Luo <zhigang.luo@amd.com>
Signed-off-by: Jane Jian <jane.jian@amd.com>
Reviewed-by: Emily Deng <Emily.Deng@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Zhigang Luo and committed by
Alex Deucher
08546895 20bf2f6f

+40 -33
+39 -32
drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
··· 75 75 WREG32_SOC15_RLC(GC, 0, mmMC_VM_AGP_BOT, adev->gmc.agp_start >> 24); 76 76 WREG32_SOC15_RLC(GC, 0, mmMC_VM_AGP_TOP, adev->gmc.agp_end >> 24); 77 77 78 - /* Program the system aperture low logical page number. */ 79 - WREG32_SOC15_RLC(GC, 0, mmMC_VM_SYSTEM_APERTURE_LOW_ADDR, 80 - min(adev->gmc.fb_start, adev->gmc.agp_start) >> 18); 78 + if (!amdgpu_sriov_vf(adev) || adev->asic_type <= CHIP_VEGA10) { 79 + /* Program the system aperture low logical page number. */ 80 + WREG32_SOC15_RLC(GC, 0, mmMC_VM_SYSTEM_APERTURE_LOW_ADDR, 81 + min(adev->gmc.fb_start, adev->gmc.agp_start) >> 18); 81 82 82 - if (adev->asic_type == CHIP_RAVEN && adev->rev_id >= 0x8) 83 - /* 84 - * Raven2 has a HW issue that it is unable to use the vram which 85 - * is out of MC_VM_SYSTEM_APERTURE_HIGH_ADDR. So here is the 86 - * workaround that increase system aperture high address (add 1) 87 - * to get rid of the VM fault and hardware hang. 88 - */ 89 - WREG32_SOC15_RLC(GC, 0, mmMC_VM_SYSTEM_APERTURE_HIGH_ADDR, 90 - max((adev->gmc.fb_end >> 18) + 0x1, 91 - adev->gmc.agp_end >> 18)); 92 - else 93 - WREG32_SOC15_RLC(GC, 0, mmMC_VM_SYSTEM_APERTURE_HIGH_ADDR, 94 - max(adev->gmc.fb_end, adev->gmc.agp_end) >> 18); 83 + if (adev->asic_type == CHIP_RAVEN && adev->rev_id >= 0x8) 84 + /* 85 + * Raven2 has a HW issue that it is unable to use the 86 + * vram which is out of MC_VM_SYSTEM_APERTURE_HIGH_ADDR. 87 + * So here is the workaround that increase system 88 + * aperture high address (add 1) to get rid of the VM 89 + * fault and hardware hang. 90 + */ 91 + WREG32_SOC15_RLC(GC, 0, 92 + mmMC_VM_SYSTEM_APERTURE_HIGH_ADDR, 93 + max((adev->gmc.fb_end >> 18) + 0x1, 94 + adev->gmc.agp_end >> 18)); 95 + else 96 + WREG32_SOC15_RLC( 97 + GC, 0, mmMC_VM_SYSTEM_APERTURE_HIGH_ADDR, 98 + max(adev->gmc.fb_end, adev->gmc.agp_end) >> 18); 95 99 96 - /* Set default page address. */ 97 - value = adev->vram_scratch.gpu_addr - adev->gmc.vram_start 98 - + adev->vm_manager.vram_base_offset; 99 - WREG32_SOC15(GC, 0, mmMC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, 100 - (u32)(value >> 12)); 101 - WREG32_SOC15(GC, 0, mmMC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, 102 - (u32)(value >> 44)); 100 + /* Set default page address. */ 101 + value = adev->vram_scratch.gpu_addr - adev->gmc.vram_start + 102 + adev->vm_manager.vram_base_offset; 103 + WREG32_SOC15(GC, 0, mmMC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, 104 + (u32)(value >> 12)); 105 + WREG32_SOC15(GC, 0, mmMC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, 106 + (u32)(value >> 44)); 103 107 104 - /* Program "protection fault". */ 105 - WREG32_SOC15(GC, 0, mmVM_L2_PROTECTION_FAULT_DEFAULT_ADDR_LO32, 106 - (u32)(adev->dummy_page_addr >> 12)); 107 - WREG32_SOC15(GC, 0, mmVM_L2_PROTECTION_FAULT_DEFAULT_ADDR_HI32, 108 - (u32)((u64)adev->dummy_page_addr >> 44)); 108 + /* Program "protection fault". */ 109 + WREG32_SOC15(GC, 0, mmVM_L2_PROTECTION_FAULT_DEFAULT_ADDR_LO32, 110 + (u32)(adev->dummy_page_addr >> 12)); 111 + WREG32_SOC15(GC, 0, mmVM_L2_PROTECTION_FAULT_DEFAULT_ADDR_HI32, 112 + (u32)((u64)adev->dummy_page_addr >> 44)); 109 113 110 - WREG32_FIELD15(GC, 0, VM_L2_PROTECTION_FAULT_CNTL2, 111 - ACTIVE_PAGE_MIGRATION_PTE_READ_RETRY, 1); 114 + WREG32_FIELD15(GC, 0, VM_L2_PROTECTION_FAULT_CNTL2, 115 + ACTIVE_PAGE_MIGRATION_PTE_READ_RETRY, 1); 116 + } 112 117 } 113 118 114 119 static void gfxhub_v1_0_init_tlb_regs(struct amdgpu_device *adev) ··· 285 280 gfxhub_v1_0_init_gart_aperture_regs(adev); 286 281 gfxhub_v1_0_init_system_aperture_regs(adev); 287 282 gfxhub_v1_0_init_tlb_regs(adev); 288 - gfxhub_v1_0_init_cache_regs(adev); 283 + if (!amdgpu_sriov_vf(adev)) 284 + gfxhub_v1_0_init_cache_regs(adev); 289 285 290 286 gfxhub_v1_0_enable_system_domain(adev); 291 - gfxhub_v1_0_disable_identity_aperture(adev); 287 + if (!amdgpu_sriov_vf(adev)) 288 + gfxhub_v1_0_disable_identity_aperture(adev); 292 289 gfxhub_v1_0_setup_vmid_config(adev); 293 290 gfxhub_v1_0_program_invalidation(adev); 294 291
+1 -1
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
··· 1307 1307 else 1308 1308 value = true; 1309 1309 1310 - gfxhub_v1_0_set_fault_enable_default(adev, value); 1311 1310 if (!amdgpu_sriov_vf(adev)) { 1311 + gfxhub_v1_0_set_fault_enable_default(adev, value); 1312 1312 if (adev->asic_type == CHIP_ARCTURUS) 1313 1313 mmhub_v9_4_set_fault_enable_default(adev, value); 1314 1314 else