Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2016 Advanced Micro Devices, Inc. |
| 3 | * |
| 4 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 5 | * copy of this software and associated documentation files (the "Software"), |
| 6 | * to deal in the Software without restriction, including without limitation |
| 7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
| 8 | * and/or sell copies of the Software, and to permit persons to whom the |
| 9 | * Software is furnished to do so, subject to the following conditions: |
| 10 | * |
| 11 | * The above copyright notice and this permission notice shall be included in |
| 12 | * all copies or substantial portions of the Software. |
| 13 | * |
| 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
| 17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR |
| 18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
| 19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
| 20 | * OTHER DEALINGS IN THE SOFTWARE. |
| 21 | * |
| 22 | */ |
| 23 | #include "amdgpu.h" |
| 24 | #include "gfxhub_v1_0.h" |
Kevin Wang | 21470d9 | 2020-10-14 20:09:57 +0800 | [diff] [blame] | 25 | #include "gfxhub_v1_1.h" |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 26 | |
Feifei Xu | cde5c34 | 2017-11-24 10:29:00 +0800 | [diff] [blame] | 27 | #include "gc/gc_9_0_offset.h" |
| 28 | #include "gc/gc_9_0_sh_mask.h" |
| 29 | #include "gc/gc_9_0_default.h" |
Feifei Xu | fb960bd | 2017-11-24 12:31:36 +0800 | [diff] [blame] | 30 | #include "vega10_enum.h" |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 31 | |
| 32 | #include "soc15_common.h" |
| 33 | |
Hawking Zhang | 0d4d951 | 2020-11-16 22:45:42 +0800 | [diff] [blame] | 34 | static u64 gfxhub_v1_0_get_mc_fb_offset(struct amdgpu_device *adev) |
Chunming Zhou | 2d8e898 | 2016-12-15 11:15:27 +0800 | [diff] [blame] | 35 | { |
Tom St Denis | f704740 | 2017-06-12 12:12:22 -0400 | [diff] [blame] | 36 | return (u64)RREG32_SOC15(GC, 0, mmMC_VM_FB_OFFSET) << 24; |
Chunming Zhou | 2d8e898 | 2016-12-15 11:15:27 +0800 | [diff] [blame] | 37 | } |
| 38 | |
Hawking Zhang | 0d4d951 | 2020-11-16 22:45:42 +0800 | [diff] [blame] | 39 | static void gfxhub_v1_0_setup_vm_pt_regs(struct amdgpu_device *adev, |
| 40 | uint32_t vmid, |
| 41 | uint64_t page_table_base) |
Huang Rui | a51dca4 | 2017-05-31 16:20:48 +0800 | [diff] [blame] | 42 | { |
Huang Rui | 8c47136 | 2020-07-01 16:08:23 +0800 | [diff] [blame] | 43 | struct amdgpu_vmhub *hub = &adev->vmhub[AMDGPU_GFXHUB_0]; |
Huang Rui | a51dca4 | 2017-05-31 16:20:48 +0800 | [diff] [blame] | 44 | |
Yong Zhao | c7ff7be | 2018-10-12 15:22:46 -0400 | [diff] [blame] | 45 | WREG32_SOC15_OFFSET(GC, 0, mmVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32, |
Huang Rui | 8c47136 | 2020-07-01 16:08:23 +0800 | [diff] [blame] | 46 | hub->ctx_addr_distance * vmid, |
| 47 | lower_32_bits(page_table_base)); |
Huang Rui | a51dca4 | 2017-05-31 16:20:48 +0800 | [diff] [blame] | 48 | |
Yong Zhao | c7ff7be | 2018-10-12 15:22:46 -0400 | [diff] [blame] | 49 | WREG32_SOC15_OFFSET(GC, 0, mmVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32, |
Huang Rui | 8c47136 | 2020-07-01 16:08:23 +0800 | [diff] [blame] | 50 | hub->ctx_addr_distance * vmid, |
| 51 | upper_32_bits(page_table_base)); |
Huang Rui | a51dca4 | 2017-05-31 16:20:48 +0800 | [diff] [blame] | 52 | } |
| 53 | |
Huang Rui | 9bbad6f | 2017-05-31 16:40:14 +0800 | [diff] [blame] | 54 | static void gfxhub_v1_0_init_gart_aperture_regs(struct amdgpu_device *adev) |
| 55 | { |
Oak Zeng | 0c19cab | 2020-09-17 23:12:56 -0500 | [diff] [blame] | 56 | uint64_t pt_base; |
| 57 | |
| 58 | if (adev->gmc.pdb0_bo) |
| 59 | pt_base = amdgpu_gmc_pd_addr(adev->gmc.pdb0_bo); |
| 60 | else |
| 61 | pt_base = amdgpu_gmc_pd_addr(adev->gart.bo); |
Yong Zhao | c7ff7be | 2018-10-12 15:22:46 -0400 | [diff] [blame] | 62 | |
| 63 | gfxhub_v1_0_setup_vm_pt_regs(adev, 0, pt_base); |
Huang Rui | 9bbad6f | 2017-05-31 16:40:14 +0800 | [diff] [blame] | 64 | |
Oak Zeng | 0c19cab | 2020-09-17 23:12:56 -0500 | [diff] [blame] | 65 | /* If use GART for FB translation, vmid0 page table covers both |
| 66 | * vram and system memory (gart) |
| 67 | */ |
| 68 | if (adev->gmc.pdb0_bo) { |
| 69 | WREG32_SOC15(GC, 0, mmVM_CONTEXT0_PAGE_TABLE_START_ADDR_LO32, |
| 70 | (u32)(adev->gmc.fb_start >> 12)); |
| 71 | WREG32_SOC15(GC, 0, mmVM_CONTEXT0_PAGE_TABLE_START_ADDR_HI32, |
| 72 | (u32)(adev->gmc.fb_start >> 44)); |
Huang Rui | 9bbad6f | 2017-05-31 16:40:14 +0800 | [diff] [blame] | 73 | |
Oak Zeng | 0c19cab | 2020-09-17 23:12:56 -0500 | [diff] [blame] | 74 | WREG32_SOC15(GC, 0, mmVM_CONTEXT0_PAGE_TABLE_END_ADDR_LO32, |
| 75 | (u32)(adev->gmc.gart_end >> 12)); |
| 76 | WREG32_SOC15(GC, 0, mmVM_CONTEXT0_PAGE_TABLE_END_ADDR_HI32, |
| 77 | (u32)(adev->gmc.gart_end >> 44)); |
| 78 | } else { |
| 79 | WREG32_SOC15(GC, 0, mmVM_CONTEXT0_PAGE_TABLE_START_ADDR_LO32, |
| 80 | (u32)(adev->gmc.gart_start >> 12)); |
| 81 | WREG32_SOC15(GC, 0, mmVM_CONTEXT0_PAGE_TABLE_START_ADDR_HI32, |
| 82 | (u32)(adev->gmc.gart_start >> 44)); |
| 83 | |
| 84 | WREG32_SOC15(GC, 0, mmVM_CONTEXT0_PAGE_TABLE_END_ADDR_LO32, |
| 85 | (u32)(adev->gmc.gart_end >> 12)); |
| 86 | WREG32_SOC15(GC, 0, mmVM_CONTEXT0_PAGE_TABLE_END_ADDR_HI32, |
| 87 | (u32)(adev->gmc.gart_end >> 44)); |
| 88 | } |
Huang Rui | 9bbad6f | 2017-05-31 16:40:14 +0800 | [diff] [blame] | 89 | } |
| 90 | |
Huang Rui | fc4b884 | 2017-05-31 17:04:28 +0800 | [diff] [blame] | 91 | static void gfxhub_v1_0_init_system_aperture_regs(struct amdgpu_device *adev) |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 92 | { |
Huang Rui | fc4b884 | 2017-05-31 17:04:28 +0800 | [diff] [blame] | 93 | uint64_t value; |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 94 | |
Christian König | c3e1b43 | 2018-08-27 18:23:11 +0200 | [diff] [blame] | 95 | /* Program the AGP BAR */ |
Trigger Huang | 1bff7f6c6 | 2019-05-02 20:33:49 +0800 | [diff] [blame] | 96 | WREG32_SOC15_RLC(GC, 0, mmMC_VM_AGP_BASE, 0); |
| 97 | WREG32_SOC15_RLC(GC, 0, mmMC_VM_AGP_BOT, adev->gmc.agp_start >> 24); |
| 98 | WREG32_SOC15_RLC(GC, 0, mmMC_VM_AGP_TOP, adev->gmc.agp_end >> 24); |
Huang Rui | a51dca4 | 2017-05-31 16:20:48 +0800 | [diff] [blame] | 99 | |
Zhigang Luo | 0854689 | 2019-12-02 09:50:19 -0500 | [diff] [blame] | 100 | if (!amdgpu_sriov_vf(adev) || adev->asic_type <= CHIP_VEGA10) { |
| 101 | /* Program the system aperture low logical page number. */ |
| 102 | WREG32_SOC15_RLC(GC, 0, mmMC_VM_SYSTEM_APERTURE_LOW_ADDR, |
| 103 | min(adev->gmc.fb_start, adev->gmc.agp_start) >> 18); |
Huang Rui | 7600677 | 2018-01-16 10:42:58 +0800 | [diff] [blame] | 104 | |
Alex Deucher | 54f78a7 | 2020-05-15 14:18:29 -0400 | [diff] [blame] | 105 | if (adev->apu_flags & AMD_APU_IS_RAVEN2) |
Zhigang Luo | 0854689 | 2019-12-02 09:50:19 -0500 | [diff] [blame] | 106 | /* |
| 107 | * Raven2 has a HW issue that it is unable to use the |
| 108 | * vram which is out of MC_VM_SYSTEM_APERTURE_HIGH_ADDR. |
| 109 | * So here is the workaround that increase system |
| 110 | * aperture high address (add 1) to get rid of the VM |
| 111 | * fault and hardware hang. |
| 112 | */ |
| 113 | WREG32_SOC15_RLC(GC, 0, |
| 114 | mmMC_VM_SYSTEM_APERTURE_HIGH_ADDR, |
| 115 | max((adev->gmc.fb_end >> 18) + 0x1, |
| 116 | adev->gmc.agp_end >> 18)); |
| 117 | else |
| 118 | WREG32_SOC15_RLC( |
| 119 | GC, 0, mmMC_VM_SYSTEM_APERTURE_HIGH_ADDR, |
| 120 | max(adev->gmc.fb_end, adev->gmc.agp_end) >> 18); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 121 | |
Zhigang Luo | 0854689 | 2019-12-02 09:50:19 -0500 | [diff] [blame] | 122 | /* Set default page address. */ |
Oak Zeng | 0ca565a | 2021-04-01 14:36:41 -0500 | [diff] [blame] | 123 | value = amdgpu_gmc_vram_mc2pa(adev, adev->vram_scratch.gpu_addr); |
Zhigang Luo | 0854689 | 2019-12-02 09:50:19 -0500 | [diff] [blame] | 124 | WREG32_SOC15(GC, 0, mmMC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_LSB, |
| 125 | (u32)(value >> 12)); |
| 126 | WREG32_SOC15(GC, 0, mmMC_VM_SYSTEM_APERTURE_DEFAULT_ADDR_MSB, |
| 127 | (u32)(value >> 44)); |
Huang Rui | fc4b884 | 2017-05-31 17:04:28 +0800 | [diff] [blame] | 128 | |
Zhigang Luo | 0854689 | 2019-12-02 09:50:19 -0500 | [diff] [blame] | 129 | /* Program "protection fault". */ |
| 130 | WREG32_SOC15(GC, 0, mmVM_L2_PROTECTION_FAULT_DEFAULT_ADDR_LO32, |
| 131 | (u32)(adev->dummy_page_addr >> 12)); |
| 132 | WREG32_SOC15(GC, 0, mmVM_L2_PROTECTION_FAULT_DEFAULT_ADDR_HI32, |
| 133 | (u32)((u64)adev->dummy_page_addr >> 44)); |
Huang Rui | fc4b884 | 2017-05-31 17:04:28 +0800 | [diff] [blame] | 134 | |
Zhigang Luo | 0854689 | 2019-12-02 09:50:19 -0500 | [diff] [blame] | 135 | WREG32_FIELD15(GC, 0, VM_L2_PROTECTION_FAULT_CNTL2, |
| 136 | ACTIVE_PAGE_MIGRATION_PTE_READ_RETRY, 1); |
| 137 | } |
Oak Zeng | 0c19cab | 2020-09-17 23:12:56 -0500 | [diff] [blame] | 138 | |
| 139 | /* In the case squeezing vram into GART aperture, we don't use |
| 140 | * FB aperture and AGP aperture. Disable them. |
| 141 | */ |
| 142 | if (adev->gmc.pdb0_bo) { |
Oak Zeng | 5f41741a | 2021-03-11 11:17:51 -0600 | [diff] [blame] | 143 | WREG32_SOC15(GC, 0, mmMC_VM_FB_LOCATION_TOP, 0); |
| 144 | WREG32_SOC15(GC, 0, mmMC_VM_FB_LOCATION_BASE, 0x00FFFFFF); |
| 145 | WREG32_SOC15(GC, 0, mmMC_VM_AGP_TOP, 0); |
| 146 | WREG32_SOC15(GC, 0, mmMC_VM_AGP_BOT, 0xFFFFFF); |
| 147 | WREG32_SOC15(GC, 0, mmMC_VM_SYSTEM_APERTURE_LOW_ADDR, 0x3FFFFFFF); |
| 148 | WREG32_SOC15(GC, 0, mmMC_VM_SYSTEM_APERTURE_HIGH_ADDR, 0); |
Oak Zeng | 0c19cab | 2020-09-17 23:12:56 -0500 | [diff] [blame] | 149 | } |
Huang Rui | fc4b884 | 2017-05-31 17:04:28 +0800 | [diff] [blame] | 150 | } |
| 151 | |
Huang Rui | 3426983 | 2017-05-31 17:19:01 +0800 | [diff] [blame] | 152 | static void gfxhub_v1_0_init_tlb_regs(struct amdgpu_device *adev) |
| 153 | { |
| 154 | uint32_t tmp; |
| 155 | |
| 156 | /* Setup TLB control */ |
Huang Rui | 89f99ce | 2017-06-01 15:15:28 +0800 | [diff] [blame] | 157 | tmp = RREG32_SOC15(GC, 0, mmMC_VM_MX_L1_TLB_CNTL); |
Huang Rui | 3426983 | 2017-05-31 17:19:01 +0800 | [diff] [blame] | 158 | |
| 159 | tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ENABLE_L1_TLB, 1); |
| 160 | tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, SYSTEM_ACCESS_MODE, 3); |
| 161 | tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, |
| 162 | ENABLE_ADVANCED_DRIVER_MODEL, 1); |
| 163 | tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, |
| 164 | SYSTEM_APERTURE_UNMAPPED_ACCESS, 0); |
| 165 | tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ECO_BITS, 0); |
| 166 | tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, |
| 167 | MTYPE, MTYPE_UC);/* XXX for emulation. */ |
| 168 | tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ATC_EN, 1); |
| 169 | |
Trigger Huang | 1bff7f6c6 | 2019-05-02 20:33:49 +0800 | [diff] [blame] | 170 | WREG32_SOC15_RLC(GC, 0, mmMC_VM_MX_L1_TLB_CNTL, tmp); |
Huang Rui | 3426983 | 2017-05-31 17:19:01 +0800 | [diff] [blame] | 171 | } |
| 172 | |
Huang Rui | 41f6f31 | 2017-05-31 18:07:48 +0800 | [diff] [blame] | 173 | static void gfxhub_v1_0_init_cache_regs(struct amdgpu_device *adev) |
| 174 | { |
Roger He | a3ce364 | 2017-08-24 14:57:57 +0800 | [diff] [blame] | 175 | uint32_t tmp; |
Huang Rui | 41f6f31 | 2017-05-31 18:07:48 +0800 | [diff] [blame] | 176 | |
| 177 | /* Setup L2 cache */ |
Huang Rui | 89f99ce | 2017-06-01 15:15:28 +0800 | [diff] [blame] | 178 | tmp = RREG32_SOC15(GC, 0, mmVM_L2_CNTL); |
Huang Rui | 41f6f31 | 2017-05-31 18:07:48 +0800 | [diff] [blame] | 179 | tmp = REG_SET_FIELD(tmp, VM_L2_CNTL, ENABLE_L2_CACHE, 1); |
Christian König | 6be7adb | 2017-05-23 18:35:22 +0200 | [diff] [blame] | 180 | tmp = REG_SET_FIELD(tmp, VM_L2_CNTL, ENABLE_L2_FRAGMENT_PROCESSING, 1); |
Huang Rui | 41f6f31 | 2017-05-31 18:07:48 +0800 | [diff] [blame] | 181 | /* XXX for emulation, Refer to closed source code.*/ |
| 182 | tmp = REG_SET_FIELD(tmp, VM_L2_CNTL, L2_PDE0_CACHE_TAG_GENERATION_MODE, |
| 183 | 0); |
Yong Zhao | 0cd57ee | 2019-02-25 17:50:43 -0500 | [diff] [blame] | 184 | tmp = REG_SET_FIELD(tmp, VM_L2_CNTL, PDE_FAULT_CLASSIFICATION, 0); |
Huang Rui | 41f6f31 | 2017-05-31 18:07:48 +0800 | [diff] [blame] | 185 | tmp = REG_SET_FIELD(tmp, VM_L2_CNTL, CONTEXT1_IDENTITY_ACCESS_MODE, 1); |
| 186 | tmp = REG_SET_FIELD(tmp, VM_L2_CNTL, IDENTITY_MODE_FRAGMENT_SIZE, 0); |
Emily Deng | bdb5027 | 2019-05-31 17:30:39 +0800 | [diff] [blame] | 187 | WREG32_SOC15_RLC(GC, 0, mmVM_L2_CNTL, tmp); |
Huang Rui | 41f6f31 | 2017-05-31 18:07:48 +0800 | [diff] [blame] | 188 | |
Huang Rui | 89f99ce | 2017-06-01 15:15:28 +0800 | [diff] [blame] | 189 | tmp = RREG32_SOC15(GC, 0, mmVM_L2_CNTL2); |
Huang Rui | 41f6f31 | 2017-05-31 18:07:48 +0800 | [diff] [blame] | 190 | tmp = REG_SET_FIELD(tmp, VM_L2_CNTL2, INVALIDATE_ALL_L1_TLBS, 1); |
| 191 | tmp = REG_SET_FIELD(tmp, VM_L2_CNTL2, INVALIDATE_L2_CACHE, 1); |
Emily Deng | bdb5027 | 2019-05-31 17:30:39 +0800 | [diff] [blame] | 192 | WREG32_SOC15_RLC(GC, 0, mmVM_L2_CNTL2, tmp); |
Huang Rui | 41f6f31 | 2017-05-31 18:07:48 +0800 | [diff] [blame] | 193 | |
| 194 | tmp = mmVM_L2_CNTL3_DEFAULT; |
Christian König | 770d13b1 | 2018-01-12 14:52:22 +0100 | [diff] [blame] | 195 | if (adev->gmc.translate_further) { |
Christian König | 6a42fd6 | 2017-12-05 15:23:26 +0100 | [diff] [blame] | 196 | tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, 12); |
| 197 | tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, |
| 198 | L2_CACHE_BIGK_FRAGMENT_SIZE, 9); |
| 199 | } else { |
| 200 | tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, 9); |
| 201 | tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, |
| 202 | L2_CACHE_BIGK_FRAGMENT_SIZE, 6); |
| 203 | } |
Emily Deng | bdb5027 | 2019-05-31 17:30:39 +0800 | [diff] [blame] | 204 | WREG32_SOC15_RLC(GC, 0, mmVM_L2_CNTL3, tmp); |
Huang Rui | 41f6f31 | 2017-05-31 18:07:48 +0800 | [diff] [blame] | 205 | |
| 206 | tmp = mmVM_L2_CNTL4_DEFAULT; |
Oak Zeng | 1f928f5 | 2021-01-23 11:34:45 -0600 | [diff] [blame] | 207 | if (adev->gmc.xgmi.connected_to_cpu) { |
| 208 | tmp = REG_SET_FIELD(tmp, VM_L2_CNTL4, VMC_TAP_PDE_REQUEST_PHYSICAL, 1); |
| 209 | tmp = REG_SET_FIELD(tmp, VM_L2_CNTL4, VMC_TAP_PTE_REQUEST_PHYSICAL, 1); |
| 210 | } else { |
| 211 | tmp = REG_SET_FIELD(tmp, VM_L2_CNTL4, VMC_TAP_PDE_REQUEST_PHYSICAL, 0); |
| 212 | tmp = REG_SET_FIELD(tmp, VM_L2_CNTL4, VMC_TAP_PTE_REQUEST_PHYSICAL, 0); |
| 213 | } |
Emily Deng | bdb5027 | 2019-05-31 17:30:39 +0800 | [diff] [blame] | 214 | WREG32_SOC15_RLC(GC, 0, mmVM_L2_CNTL4, tmp); |
Huang Rui | 41f6f31 | 2017-05-31 18:07:48 +0800 | [diff] [blame] | 215 | } |
| 216 | |
Huang Rui | 02c4704 | 2017-05-31 21:39:10 +0800 | [diff] [blame] | 217 | static void gfxhub_v1_0_enable_system_domain(struct amdgpu_device *adev) |
| 218 | { |
| 219 | uint32_t tmp; |
| 220 | |
Huang Rui | 89f99ce | 2017-06-01 15:15:28 +0800 | [diff] [blame] | 221 | tmp = RREG32_SOC15(GC, 0, mmVM_CONTEXT0_CNTL); |
Huang Rui | 02c4704 | 2017-05-31 21:39:10 +0800 | [diff] [blame] | 222 | tmp = REG_SET_FIELD(tmp, VM_CONTEXT0_CNTL, ENABLE_CONTEXT, 1); |
Oak Zeng | 7b454b3 | 2020-09-17 20:32:56 -0500 | [diff] [blame] | 223 | tmp = REG_SET_FIELD(tmp, VM_CONTEXT0_CNTL, PAGE_TABLE_DEPTH, |
| 224 | adev->gmc.vmid0_page_table_depth); |
| 225 | tmp = REG_SET_FIELD(tmp, VM_CONTEXT0_CNTL, PAGE_TABLE_BLOCK_SIZE, |
| 226 | adev->gmc.vmid0_page_table_block_size); |
Felix Kuehling | 7cae706 | 2019-09-04 19:26:16 -0400 | [diff] [blame] | 227 | tmp = REG_SET_FIELD(tmp, VM_CONTEXT0_CNTL, |
| 228 | RETRY_PERMISSION_OR_INVALID_PAGE_FAULT, 0); |
Huang Rui | 89f99ce | 2017-06-01 15:15:28 +0800 | [diff] [blame] | 229 | WREG32_SOC15(GC, 0, mmVM_CONTEXT0_CNTL, tmp); |
Huang Rui | 02c4704 | 2017-05-31 21:39:10 +0800 | [diff] [blame] | 230 | } |
| 231 | |
Huang Rui | d5c8739 | 2017-05-31 21:52:00 +0800 | [diff] [blame] | 232 | static void gfxhub_v1_0_disable_identity_aperture(struct amdgpu_device *adev) |
| 233 | { |
Huang Rui | 89f99ce | 2017-06-01 15:15:28 +0800 | [diff] [blame] | 234 | WREG32_SOC15(GC, 0, mmVM_L2_CONTEXT1_IDENTITY_APERTURE_LOW_ADDR_LO32, |
| 235 | 0XFFFFFFFF); |
| 236 | WREG32_SOC15(GC, 0, mmVM_L2_CONTEXT1_IDENTITY_APERTURE_LOW_ADDR_HI32, |
| 237 | 0x0000000F); |
Huang Rui | d5c8739 | 2017-05-31 21:52:00 +0800 | [diff] [blame] | 238 | |
Huang Rui | 89f99ce | 2017-06-01 15:15:28 +0800 | [diff] [blame] | 239 | WREG32_SOC15(GC, 0, mmVM_L2_CONTEXT1_IDENTITY_APERTURE_HIGH_ADDR_LO32, |
| 240 | 0); |
| 241 | WREG32_SOC15(GC, 0, mmVM_L2_CONTEXT1_IDENTITY_APERTURE_HIGH_ADDR_HI32, |
| 242 | 0); |
Huang Rui | d5c8739 | 2017-05-31 21:52:00 +0800 | [diff] [blame] | 243 | |
Huang Rui | 89f99ce | 2017-06-01 15:15:28 +0800 | [diff] [blame] | 244 | WREG32_SOC15(GC, 0, mmVM_L2_CONTEXT_IDENTITY_PHYSICAL_OFFSET_LO32, 0); |
| 245 | WREG32_SOC15(GC, 0, mmVM_L2_CONTEXT_IDENTITY_PHYSICAL_OFFSET_HI32, 0); |
Huang Rui | d5c8739 | 2017-05-31 21:52:00 +0800 | [diff] [blame] | 246 | |
| 247 | } |
| 248 | |
Huang Rui | 3dff4cc | 2017-05-31 22:17:11 +0800 | [diff] [blame] | 249 | static void gfxhub_v1_0_setup_vmid_config(struct amdgpu_device *adev) |
Huang Rui | fc4b884 | 2017-05-31 17:04:28 +0800 | [diff] [blame] | 250 | { |
Huang Rui | 8c47136 | 2020-07-01 16:08:23 +0800 | [diff] [blame] | 251 | struct amdgpu_vmhub *hub = &adev->vmhub[AMDGPU_GFXHUB_0]; |
Christian König | 6a42fd6 | 2017-12-05 15:23:26 +0100 | [diff] [blame] | 252 | unsigned num_level, block_size; |
Huang Rui | 3dff4cc | 2017-05-31 22:17:11 +0800 | [diff] [blame] | 253 | uint32_t tmp; |
Christian König | 6a42fd6 | 2017-12-05 15:23:26 +0100 | [diff] [blame] | 254 | int i; |
| 255 | |
| 256 | num_level = adev->vm_manager.num_level; |
| 257 | block_size = adev->vm_manager.block_size; |
Christian König | 770d13b1 | 2018-01-12 14:52:22 +0100 | [diff] [blame] | 258 | if (adev->gmc.translate_further) |
Christian König | 6a42fd6 | 2017-12-05 15:23:26 +0100 | [diff] [blame] | 259 | num_level -= 1; |
| 260 | else |
| 261 | block_size -= 9; |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 262 | |
| 263 | for (i = 0; i <= 14; i++) { |
Tom St Denis | f704740 | 2017-06-12 12:12:22 -0400 | [diff] [blame] | 264 | tmp = RREG32_SOC15_OFFSET(GC, 0, mmVM_CONTEXT1_CNTL, i); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 265 | tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, ENABLE_CONTEXT, 1); |
Chunming Zhou | 4fb1cf3 | 2017-03-23 17:38:34 +0800 | [diff] [blame] | 266 | tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, PAGE_TABLE_DEPTH, |
Christian König | 6a42fd6 | 2017-12-05 15:23:26 +0100 | [diff] [blame] | 267 | num_level); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 268 | tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, |
Christian König | 6a42fd6 | 2017-12-05 15:23:26 +0100 | [diff] [blame] | 269 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT, 1); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 270 | tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, |
Christian König | 6a42fd6 | 2017-12-05 15:23:26 +0100 | [diff] [blame] | 271 | DUMMY_PAGE_PROTECTION_FAULT_ENABLE_DEFAULT, |
| 272 | 1); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 273 | tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, |
Christian König | 6a42fd6 | 2017-12-05 15:23:26 +0100 | [diff] [blame] | 274 | PDE0_PROTECTION_FAULT_ENABLE_DEFAULT, 1); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 275 | tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, |
Christian König | 6a42fd6 | 2017-12-05 15:23:26 +0100 | [diff] [blame] | 276 | VALID_PROTECTION_FAULT_ENABLE_DEFAULT, 1); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 277 | tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, |
Christian König | 6a42fd6 | 2017-12-05 15:23:26 +0100 | [diff] [blame] | 278 | READ_PROTECTION_FAULT_ENABLE_DEFAULT, 1); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 279 | tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, |
Christian König | 6a42fd6 | 2017-12-05 15:23:26 +0100 | [diff] [blame] | 280 | WRITE_PROTECTION_FAULT_ENABLE_DEFAULT, 1); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 281 | tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, |
Christian König | 6a42fd6 | 2017-12-05 15:23:26 +0100 | [diff] [blame] | 282 | EXECUTE_PROTECTION_FAULT_ENABLE_DEFAULT, 1); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 283 | tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, |
Christian König | 6a42fd6 | 2017-12-05 15:23:26 +0100 | [diff] [blame] | 284 | PAGE_TABLE_BLOCK_SIZE, |
| 285 | block_size); |
Felix Kuehling | 9705c85 | 2021-02-11 15:57:20 -0500 | [diff] [blame] | 286 | /* Send no-retry XNACK on fault to suppress VM fault storm. |
| 287 | * On Aldebaran, XNACK can be enabled in the SQ per-process. |
| 288 | * Retry faults need to be enabled for that to work. |
| 289 | */ |
Jay Cornwall | 9f57f7b | 2017-04-26 14:51:57 -0500 | [diff] [blame] | 290 | tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, |
Felix Kuehling | 75ee648 | 2019-06-21 19:50:03 -0400 | [diff] [blame] | 291 | RETRY_PERMISSION_OR_INVALID_PAGE_FAULT, |
Felix Kuehling | 9705c85 | 2021-02-11 15:57:20 -0500 | [diff] [blame] | 292 | !adev->gmc.noretry || |
| 293 | adev->asic_type == CHIP_ALDEBARAN); |
Huang Rui | 8c47136 | 2020-07-01 16:08:23 +0800 | [diff] [blame] | 294 | WREG32_SOC15_OFFSET(GC, 0, mmVM_CONTEXT1_CNTL, |
| 295 | i * hub->ctx_distance, tmp); |
| 296 | WREG32_SOC15_OFFSET(GC, 0, mmVM_CONTEXT1_PAGE_TABLE_START_ADDR_LO32, |
| 297 | i * hub->ctx_addr_distance, 0); |
| 298 | WREG32_SOC15_OFFSET(GC, 0, mmVM_CONTEXT1_PAGE_TABLE_START_ADDR_HI32, |
| 299 | i * hub->ctx_addr_distance, 0); |
| 300 | WREG32_SOC15_OFFSET(GC, 0, mmVM_CONTEXT1_PAGE_TABLE_END_ADDR_LO32, |
| 301 | i * hub->ctx_addr_distance, |
| 302 | lower_32_bits(adev->vm_manager.max_pfn - 1)); |
| 303 | WREG32_SOC15_OFFSET(GC, 0, mmVM_CONTEXT1_PAGE_TABLE_END_ADDR_HI32, |
| 304 | i * hub->ctx_addr_distance, |
| 305 | upper_32_bits(adev->vm_manager.max_pfn - 1)); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 306 | } |
Huang Rui | 3dff4cc | 2017-05-31 22:17:11 +0800 | [diff] [blame] | 307 | } |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 308 | |
Huang Rui | 1e4eccd | 2017-05-31 22:32:35 +0800 | [diff] [blame] | 309 | static void gfxhub_v1_0_program_invalidation(struct amdgpu_device *adev) |
| 310 | { |
Huang Rui | 8c47136 | 2020-07-01 16:08:23 +0800 | [diff] [blame] | 311 | struct amdgpu_vmhub *hub = &adev->vmhub[AMDGPU_GFXHUB_0]; |
Huang Rui | 1e4eccd | 2017-05-31 22:32:35 +0800 | [diff] [blame] | 312 | unsigned i; |
| 313 | |
| 314 | for (i = 0 ; i < 18; ++i) { |
Tom St Denis | f704740 | 2017-06-12 12:12:22 -0400 | [diff] [blame] | 315 | WREG32_SOC15_OFFSET(GC, 0, mmVM_INVALIDATE_ENG0_ADDR_RANGE_LO32, |
Huang Rui | 8c47136 | 2020-07-01 16:08:23 +0800 | [diff] [blame] | 316 | i * hub->eng_addr_distance, 0xffffffff); |
Tom St Denis | f704740 | 2017-06-12 12:12:22 -0400 | [diff] [blame] | 317 | WREG32_SOC15_OFFSET(GC, 0, mmVM_INVALIDATE_ENG0_ADDR_RANGE_HI32, |
Huang Rui | 8c47136 | 2020-07-01 16:08:23 +0800 | [diff] [blame] | 318 | i * hub->eng_addr_distance, 0x1f); |
Huang Rui | 1e4eccd | 2017-05-31 22:32:35 +0800 | [diff] [blame] | 319 | } |
| 320 | } |
| 321 | |
Hawking Zhang | 0d4d951 | 2020-11-16 22:45:42 +0800 | [diff] [blame] | 322 | static int gfxhub_v1_0_gart_enable(struct amdgpu_device *adev) |
Huang Rui | 3dff4cc | 2017-05-31 22:17:11 +0800 | [diff] [blame] | 323 | { |
Huang Rui | 3dff4cc | 2017-05-31 22:17:11 +0800 | [diff] [blame] | 324 | /* GART Enable. */ |
| 325 | gfxhub_v1_0_init_gart_aperture_regs(adev); |
| 326 | gfxhub_v1_0_init_system_aperture_regs(adev); |
| 327 | gfxhub_v1_0_init_tlb_regs(adev); |
Zhigang Luo | 0854689 | 2019-12-02 09:50:19 -0500 | [diff] [blame] | 328 | if (!amdgpu_sriov_vf(adev)) |
| 329 | gfxhub_v1_0_init_cache_regs(adev); |
Huang Rui | 3dff4cc | 2017-05-31 22:17:11 +0800 | [diff] [blame] | 330 | |
| 331 | gfxhub_v1_0_enable_system_domain(adev); |
Zhigang Luo | 0854689 | 2019-12-02 09:50:19 -0500 | [diff] [blame] | 332 | if (!amdgpu_sriov_vf(adev)) |
| 333 | gfxhub_v1_0_disable_identity_aperture(adev); |
Huang Rui | 3dff4cc | 2017-05-31 22:17:11 +0800 | [diff] [blame] | 334 | gfxhub_v1_0_setup_vmid_config(adev); |
Huang Rui | 1e4eccd | 2017-05-31 22:32:35 +0800 | [diff] [blame] | 335 | gfxhub_v1_0_program_invalidation(adev); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 336 | |
| 337 | return 0; |
| 338 | } |
| 339 | |
Hawking Zhang | 0d4d951 | 2020-11-16 22:45:42 +0800 | [diff] [blame] | 340 | static void gfxhub_v1_0_gart_disable(struct amdgpu_device *adev) |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 341 | { |
Huang Rui | 8c47136 | 2020-07-01 16:08:23 +0800 | [diff] [blame] | 342 | struct amdgpu_vmhub *hub = &adev->vmhub[AMDGPU_GFXHUB_0]; |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 343 | u32 tmp; |
| 344 | u32 i; |
| 345 | |
| 346 | /* Disable all tables */ |
| 347 | for (i = 0; i < 16; i++) |
Huang Rui | 8c47136 | 2020-07-01 16:08:23 +0800 | [diff] [blame] | 348 | WREG32_SOC15_OFFSET(GC, 0, mmVM_CONTEXT0_CNTL, |
| 349 | i * hub->ctx_distance, 0); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 350 | |
YuBiao Wang | c4fc13b | 2021-11-04 10:50:41 +0800 | [diff] [blame] | 351 | if (amdgpu_sriov_vf(adev)) |
| 352 | /* Avoid write to GMC registers */ |
| 353 | return; |
| 354 | |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 355 | /* Setup TLB control */ |
Huang Rui | 89f99ce | 2017-06-01 15:15:28 +0800 | [diff] [blame] | 356 | tmp = RREG32_SOC15(GC, 0, mmMC_VM_MX_L1_TLB_CNTL); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 357 | tmp = REG_SET_FIELD(tmp, MC_VM_MX_L1_TLB_CNTL, ENABLE_L1_TLB, 0); |
| 358 | tmp = REG_SET_FIELD(tmp, |
| 359 | MC_VM_MX_L1_TLB_CNTL, |
| 360 | ENABLE_ADVANCED_DRIVER_MODEL, |
| 361 | 0); |
Trigger Huang | 1bff7f6c6 | 2019-05-02 20:33:49 +0800 | [diff] [blame] | 362 | WREG32_SOC15_RLC(GC, 0, mmMC_VM_MX_L1_TLB_CNTL, tmp); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 363 | |
| 364 | /* Setup L2 cache */ |
Tom St Denis | 805cb75 | 2017-06-12 12:30:41 -0400 | [diff] [blame] | 365 | WREG32_FIELD15(GC, 0, VM_L2_CNTL, ENABLE_L2_CACHE, 0); |
Huang Rui | 89f99ce | 2017-06-01 15:15:28 +0800 | [diff] [blame] | 366 | WREG32_SOC15(GC, 0, mmVM_L2_CNTL3, 0); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 367 | } |
| 368 | |
| 369 | /** |
| 370 | * gfxhub_v1_0_set_fault_enable_default - update GART/VM fault handling |
| 371 | * |
| 372 | * @adev: amdgpu_device pointer |
| 373 | * @value: true redirects VM faults to the default page |
| 374 | */ |
Hawking Zhang | 0d4d951 | 2020-11-16 22:45:42 +0800 | [diff] [blame] | 375 | static void gfxhub_v1_0_set_fault_enable_default(struct amdgpu_device *adev, |
| 376 | bool value) |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 377 | { |
| 378 | u32 tmp; |
Huang Rui | 89f99ce | 2017-06-01 15:15:28 +0800 | [diff] [blame] | 379 | tmp = RREG32_SOC15(GC, 0, mmVM_L2_PROTECTION_FAULT_CNTL); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 380 | tmp = REG_SET_FIELD(tmp, VM_L2_PROTECTION_FAULT_CNTL, |
| 381 | RANGE_PROTECTION_FAULT_ENABLE_DEFAULT, value); |
| 382 | tmp = REG_SET_FIELD(tmp, VM_L2_PROTECTION_FAULT_CNTL, |
| 383 | PDE0_PROTECTION_FAULT_ENABLE_DEFAULT, value); |
| 384 | tmp = REG_SET_FIELD(tmp, VM_L2_PROTECTION_FAULT_CNTL, |
| 385 | PDE1_PROTECTION_FAULT_ENABLE_DEFAULT, value); |
| 386 | tmp = REG_SET_FIELD(tmp, VM_L2_PROTECTION_FAULT_CNTL, |
| 387 | PDE2_PROTECTION_FAULT_ENABLE_DEFAULT, value); |
| 388 | tmp = REG_SET_FIELD(tmp, |
| 389 | VM_L2_PROTECTION_FAULT_CNTL, |
| 390 | TRANSLATE_FURTHER_PROTECTION_FAULT_ENABLE_DEFAULT, |
| 391 | value); |
| 392 | tmp = REG_SET_FIELD(tmp, VM_L2_PROTECTION_FAULT_CNTL, |
| 393 | NACK_PROTECTION_FAULT_ENABLE_DEFAULT, value); |
| 394 | tmp = REG_SET_FIELD(tmp, VM_L2_PROTECTION_FAULT_CNTL, |
| 395 | DUMMY_PAGE_PROTECTION_FAULT_ENABLE_DEFAULT, value); |
| 396 | tmp = REG_SET_FIELD(tmp, VM_L2_PROTECTION_FAULT_CNTL, |
| 397 | VALID_PROTECTION_FAULT_ENABLE_DEFAULT, value); |
| 398 | tmp = REG_SET_FIELD(tmp, VM_L2_PROTECTION_FAULT_CNTL, |
| 399 | READ_PROTECTION_FAULT_ENABLE_DEFAULT, value); |
| 400 | tmp = REG_SET_FIELD(tmp, VM_L2_PROTECTION_FAULT_CNTL, |
| 401 | WRITE_PROTECTION_FAULT_ENABLE_DEFAULT, value); |
| 402 | tmp = REG_SET_FIELD(tmp, VM_L2_PROTECTION_FAULT_CNTL, |
| 403 | EXECUTE_PROTECTION_FAULT_ENABLE_DEFAULT, value); |
Monk Liu | 4bd9a67 | 2017-07-04 16:40:58 +0800 | [diff] [blame] | 404 | if (!value) { |
| 405 | tmp = REG_SET_FIELD(tmp, VM_L2_PROTECTION_FAULT_CNTL, |
| 406 | CRASH_ON_NO_RETRY_FAULT, 1); |
| 407 | tmp = REG_SET_FIELD(tmp, VM_L2_PROTECTION_FAULT_CNTL, |
| 408 | CRASH_ON_RETRY_FAULT, 1); |
Huang Rui | 8c47136 | 2020-07-01 16:08:23 +0800 | [diff] [blame] | 409 | } |
Huang Rui | 89f99ce | 2017-06-01 15:15:28 +0800 | [diff] [blame] | 410 | WREG32_SOC15(GC, 0, mmVM_L2_PROTECTION_FAULT_CNTL, tmp); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 411 | } |
| 412 | |
Hawking Zhang | 0d4d951 | 2020-11-16 22:45:42 +0800 | [diff] [blame] | 413 | static void gfxhub_v1_0_init(struct amdgpu_device *adev) |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 414 | { |
Le Ma | a2d15ed | 2019-07-16 13:29:19 -0500 | [diff] [blame] | 415 | struct amdgpu_vmhub *hub = &adev->vmhub[AMDGPU_GFXHUB_0]; |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 416 | |
| 417 | hub->ctx0_ptb_addr_lo32 = |
| 418 | SOC15_REG_OFFSET(GC, 0, |
| 419 | mmVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32); |
| 420 | hub->ctx0_ptb_addr_hi32 = |
| 421 | SOC15_REG_OFFSET(GC, 0, |
| 422 | mmVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_HI32); |
changzhu | 6c2c897 | 2019-11-19 10:18:39 +0800 | [diff] [blame] | 423 | hub->vm_inv_eng0_sem = |
| 424 | SOC15_REG_OFFSET(GC, 0, mmVM_INVALIDATE_ENG0_SEM); |
Alex Xie | e60f8db | 2017-03-09 11:36:26 -0500 | [diff] [blame] | 425 | hub->vm_inv_eng0_req = |
| 426 | SOC15_REG_OFFSET(GC, 0, mmVM_INVALIDATE_ENG0_REQ); |
| 427 | hub->vm_inv_eng0_ack = |
| 428 | SOC15_REG_OFFSET(GC, 0, mmVM_INVALIDATE_ENG0_ACK); |
| 429 | hub->vm_context0_cntl = |
| 430 | SOC15_REG_OFFSET(GC, 0, mmVM_CONTEXT0_CNTL); |
| 431 | hub->vm_l2_pro_fault_status = |
| 432 | SOC15_REG_OFFSET(GC, 0, mmVM_L2_PROTECTION_FAULT_STATUS); |
| 433 | hub->vm_l2_pro_fault_cntl = |
| 434 | SOC15_REG_OFFSET(GC, 0, mmVM_L2_PROTECTION_FAULT_CNTL); |
Huang Rui | 1f9d56c | 2020-07-01 09:37:56 +0800 | [diff] [blame] | 435 | |
| 436 | hub->ctx_distance = mmVM_CONTEXT1_CNTL - mmVM_CONTEXT0_CNTL; |
| 437 | hub->ctx_addr_distance = mmVM_CONTEXT1_PAGE_TABLE_BASE_ADDR_LO32 - |
| 438 | mmVM_CONTEXT0_PAGE_TABLE_BASE_ADDR_LO32; |
| 439 | hub->eng_distance = mmVM_INVALIDATE_ENG1_REQ - mmVM_INVALIDATE_ENG0_REQ; |
| 440 | hub->eng_addr_distance = mmVM_INVALIDATE_ENG1_ADDR_RANGE_LO32 - |
| 441 | mmVM_INVALIDATE_ENG0_ADDR_RANGE_LO32; |
Huang Rui | 0c8c084 | 2017-05-31 22:57:18 +0800 | [diff] [blame] | 442 | } |
Oak Zeng | 8ffff9b | 2020-09-17 18:10:12 -0500 | [diff] [blame] | 443 | |
| 444 | |
| 445 | const struct amdgpu_gfxhub_funcs gfxhub_v1_0_funcs = { |
| 446 | .get_mc_fb_offset = gfxhub_v1_0_get_mc_fb_offset, |
| 447 | .setup_vm_pt_regs = gfxhub_v1_0_setup_vm_pt_regs, |
| 448 | .gart_enable = gfxhub_v1_0_gart_enable, |
| 449 | .gart_disable = gfxhub_v1_0_gart_disable, |
| 450 | .set_fault_enable_default = gfxhub_v1_0_set_fault_enable_default, |
| 451 | .init = gfxhub_v1_0_init, |
Kevin Wang | 21470d9 | 2020-10-14 20:09:57 +0800 | [diff] [blame] | 452 | .get_xgmi_info = gfxhub_v1_1_get_xgmi_info, |
Oak Zeng | 8ffff9b | 2020-09-17 18:10:12 -0500 | [diff] [blame] | 453 | }; |