1 1.5 mrg /* $NetBSD: amdgpu_si.c,v 1.5 2023/09/30 10:46:45 mrg Exp $ */ 2 1.1 riastrad 3 1.1 riastrad /* 4 1.1 riastrad * Copyright 2015 Advanced Micro Devices, Inc. 5 1.1 riastrad * 6 1.1 riastrad * Permission is hereby granted, free of charge, to any person obtaining a 7 1.1 riastrad * copy of this software and associated documentation files (the "Software"), 8 1.1 riastrad * to deal in the Software without restriction, including without limitation 9 1.1 riastrad * the rights to use, copy, modify, merge, publish, distribute, sublicense, 10 1.1 riastrad * and/or sell copies of the Software, and to permit persons to whom the 11 1.1 riastrad * Software is furnished to do so, subject to the following conditions: 12 1.1 riastrad * 13 1.1 riastrad * The above copyright notice and this permission notice shall be included in 14 1.1 riastrad * all copies or substantial portions of the Software. 15 1.1 riastrad * 16 1.1 riastrad * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 1.1 riastrad * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 1.1 riastrad * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 1.1 riastrad * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 1.1 riastrad * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 1.1 riastrad * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 1.1 riastrad * OTHER DEALINGS IN THE SOFTWARE. 23 1.1 riastrad * 24 1.1 riastrad */ 25 1.1 riastrad 26 1.1 riastrad #include <sys/cdefs.h> 27 1.5 mrg __KERNEL_RCSID(0, "$NetBSD: amdgpu_si.c,v 1.5 2023/09/30 10:46:45 mrg Exp $"); 28 1.1 riastrad 29 1.1 riastrad #include <linux/firmware.h> 30 1.1 riastrad #include <linux/slab.h> 31 1.1 riastrad #include <linux/module.h> 32 1.1 riastrad #include <linux/pci.h> 33 1.1 riastrad 34 1.1 riastrad #include "amdgpu.h" 35 1.1 riastrad #include "amdgpu_atombios.h" 36 1.1 riastrad #include "amdgpu_ih.h" 37 1.1 riastrad #include "amdgpu_uvd.h" 38 1.1 riastrad #include "amdgpu_vce.h" 39 1.1 riastrad #include "atom.h" 40 1.1 riastrad #include "amd_pcie.h" 41 1.1 riastrad #include "si_dpm.h" 42 1.1 riastrad #include "sid.h" 43 1.1 riastrad #include "si_ih.h" 44 1.1 riastrad #include "gfx_v6_0.h" 45 1.1 riastrad #include "gmc_v6_0.h" 46 1.1 riastrad #include "si_dma.h" 47 1.1 riastrad #include "dce_v6_0.h" 48 1.1 riastrad #include "si.h" 49 1.1 riastrad #include "dce_virtual.h" 50 1.1 riastrad #include "gca/gfx_6_0_d.h" 51 1.1 riastrad #include "oss/oss_1_0_d.h" 52 1.1 riastrad #include "gmc/gmc_6_0_d.h" 53 1.1 riastrad #include "dce/dce_6_0_d.h" 54 1.1 riastrad #include "uvd/uvd_4_0_d.h" 55 1.1 riastrad #include "bif/bif_3_0_d.h" 56 1.1 riastrad #include "bif/bif_3_0_sh_mask.h" 57 1.1 riastrad 58 1.3 riastrad #include <linux/nbsd-namespace.h> 59 1.3 riastrad 60 1.1 riastrad static const u32 tahiti_golden_registers[] = 61 1.1 riastrad { 62 1.1 riastrad mmAZALIA_SCLK_CONTROL, 0x00000030, 0x00000011, 63 1.1 riastrad mmCB_HW_CONTROL, 0x00010000, 0x00018208, 64 1.1 riastrad mmDB_DEBUG, 0xffffffff, 0x00000000, 65 1.1 riastrad mmDB_DEBUG2, 0xf00fffff, 0x00000400, 66 1.1 riastrad mmDB_DEBUG3, 0x0002021c, 0x00020200, 67 1.1 riastrad mmDCI_CLK_CNTL, 0x00000080, 0x00000000, 68 1.1 riastrad 0x340c, 0x000000c0, 0x00800040, 69 1.1 riastrad 0x360c, 0x000000c0, 0x00800040, 70 1.1 riastrad mmFBC_DEBUG_COMP, 0x000000f0, 0x00000070, 71 1.1 riastrad mmFBC_MISC, 0x00200000, 0x50100000, 72 1.1 riastrad mmDIG0_HDMI_CONTROL, 0x31000311, 0x00000011, 73 1.1 riastrad mmMC_ARB_WTM_CNTL_RD, 0x00000003, 0x000007ff, 74 1.1 riastrad mmMC_XPB_P2P_BAR_CFG, 0x000007ff, 0x00000000, 75 1.1 riastrad mmPA_CL_ENHANCE, 0xf000001f, 0x00000007, 76 1.1 riastrad mmPA_SC_FORCE_EOV_MAX_CNTS, 0xffffffff, 0x00ffffff, 77 1.1 riastrad mmPA_SC_LINE_STIPPLE_STATE, 0x0000ff0f, 0x00000000, 78 1.1 riastrad mmPA_SC_MODE_CNTL_1, 0x07ffffff, 0x4e000000, 79 1.1 riastrad mmPA_SC_RASTER_CONFIG, 0x3f3f3fff, 0x2a00126a, 80 1.1 riastrad 0x000c, 0xffffffff, 0x0040, 81 1.1 riastrad 0x000d, 0x00000040, 0x00004040, 82 1.1 riastrad mmSPI_CONFIG_CNTL, 0x07ffffff, 0x03000000, 83 1.1 riastrad mmSQ_DED_CNT, 0x01ff1f3f, 0x00000000, 84 1.1 riastrad mmSQ_SEC_CNT, 0x01ff1f3f, 0x00000000, 85 1.1 riastrad mmSX_DEBUG_1, 0x0000007f, 0x00000020, 86 1.1 riastrad mmTA_CNTL_AUX, 0x00010000, 0x00010000, 87 1.1 riastrad mmTCP_ADDR_CONFIG, 0x00000200, 0x000002fb, 88 1.1 riastrad mmTCP_CHAN_STEER_HI, 0xffffffff, 0x0000543b, 89 1.1 riastrad mmTCP_CHAN_STEER_LO, 0xffffffff, 0xa9210876, 90 1.1 riastrad mmVGT_FIFO_DEPTHS, 0xffffffff, 0x000fff40, 91 1.1 riastrad mmVGT_GS_VERTEX_REUSE, 0x0000001f, 0x00000010, 92 1.1 riastrad mmVM_CONTEXT0_CNTL, 0x20000000, 0x20fffed8, 93 1.1 riastrad mmVM_L2_CG, 0x000c0fc0, 0x000c0400, 94 1.1 riastrad mmVM_PRT_APERTURE0_LOW_ADDR, 0x0fffffff, 0xffffffff, 95 1.1 riastrad mmVM_PRT_APERTURE1_LOW_ADDR, 0x0fffffff, 0x0fffffff, 96 1.1 riastrad mmVM_PRT_APERTURE2_LOW_ADDR, 0x0fffffff, 0x0fffffff, 97 1.1 riastrad mmVM_PRT_APERTURE3_LOW_ADDR, 0x0fffffff, 0x0fffffff, 98 1.1 riastrad }; 99 1.1 riastrad 100 1.1 riastrad static const u32 tahiti_golden_registers2[] = 101 1.1 riastrad { 102 1.1 riastrad mmMCIF_MEM_CONTROL, 0x00000001, 0x00000001, 103 1.1 riastrad }; 104 1.1 riastrad 105 1.1 riastrad static const u32 tahiti_golden_rlc_registers[] = 106 1.1 riastrad { 107 1.1 riastrad mmGB_ADDR_CONFIG, 0xffffffff, 0x12011003, 108 1.1 riastrad mmRLC_LB_PARAMS, 0xffffffff, 0x00601005, 109 1.1 riastrad 0x311f, 0xffffffff, 0x10104040, 110 1.1 riastrad 0x3122, 0xffffffff, 0x0100000a, 111 1.1 riastrad mmRLC_LB_CNTR_MAX, 0xffffffff, 0x00000800, 112 1.1 riastrad mmRLC_LB_CNTL, 0xffffffff, 0x800000f4, 113 1.1 riastrad mmUVD_CGC_GATE, 0x00000008, 0x00000000, 114 1.1 riastrad }; 115 1.1 riastrad 116 1.1 riastrad static const u32 pitcairn_golden_registers[] = 117 1.1 riastrad { 118 1.1 riastrad mmAZALIA_SCLK_CONTROL, 0x00000030, 0x00000011, 119 1.1 riastrad mmCB_HW_CONTROL, 0x00010000, 0x00018208, 120 1.1 riastrad mmDB_DEBUG, 0xffffffff, 0x00000000, 121 1.1 riastrad mmDB_DEBUG2, 0xf00fffff, 0x00000400, 122 1.1 riastrad mmDB_DEBUG3, 0x0002021c, 0x00020200, 123 1.1 riastrad mmDCI_CLK_CNTL, 0x00000080, 0x00000000, 124 1.1 riastrad 0x340c, 0x000300c0, 0x00800040, 125 1.1 riastrad 0x360c, 0x000300c0, 0x00800040, 126 1.1 riastrad mmFBC_DEBUG_COMP, 0x000000f0, 0x00000070, 127 1.1 riastrad mmFBC_MISC, 0x00200000, 0x50100000, 128 1.1 riastrad mmDIG0_HDMI_CONTROL, 0x31000311, 0x00000011, 129 1.1 riastrad mmMC_SEQ_PMG_PG_HWCNTL, 0x00073ffe, 0x000022a2, 130 1.1 riastrad mmMC_XPB_P2P_BAR_CFG, 0x000007ff, 0x00000000, 131 1.1 riastrad mmPA_CL_ENHANCE, 0xf000001f, 0x00000007, 132 1.1 riastrad mmPA_SC_FORCE_EOV_MAX_CNTS, 0xffffffff, 0x00ffffff, 133 1.1 riastrad mmPA_SC_LINE_STIPPLE_STATE, 0x0000ff0f, 0x00000000, 134 1.1 riastrad mmPA_SC_MODE_CNTL_1, 0x07ffffff, 0x4e000000, 135 1.1 riastrad mmPA_SC_RASTER_CONFIG, 0x3f3f3fff, 0x2a00126a, 136 1.1 riastrad 0x000c, 0xffffffff, 0x0040, 137 1.1 riastrad 0x000d, 0x00000040, 0x00004040, 138 1.1 riastrad mmSPI_CONFIG_CNTL, 0x07ffffff, 0x03000000, 139 1.1 riastrad mmSX_DEBUG_1, 0x0000007f, 0x00000020, 140 1.1 riastrad mmTA_CNTL_AUX, 0x00010000, 0x00010000, 141 1.1 riastrad mmTCP_ADDR_CONFIG, 0x000003ff, 0x000000f7, 142 1.1 riastrad mmTCP_CHAN_STEER_HI, 0xffffffff, 0x00000000, 143 1.1 riastrad mmTCP_CHAN_STEER_LO, 0xffffffff, 0x32761054, 144 1.1 riastrad mmVGT_GS_VERTEX_REUSE, 0x0000001f, 0x00000010, 145 1.1 riastrad mmVM_L2_CG, 0x000c0fc0, 0x000c0400, 146 1.1 riastrad mmVM_PRT_APERTURE0_LOW_ADDR, 0x0fffffff, 0xffffffff, 147 1.1 riastrad mmVM_PRT_APERTURE1_LOW_ADDR, 0x0fffffff, 0x0fffffff, 148 1.1 riastrad mmVM_PRT_APERTURE2_LOW_ADDR, 0x0fffffff, 0x0fffffff, 149 1.1 riastrad mmVM_PRT_APERTURE3_LOW_ADDR, 0x0fffffff, 0x0fffffff, 150 1.1 riastrad }; 151 1.1 riastrad 152 1.1 riastrad static const u32 pitcairn_golden_rlc_registers[] = 153 1.1 riastrad { 154 1.1 riastrad mmGB_ADDR_CONFIG, 0xffffffff, 0x12011003, 155 1.1 riastrad mmRLC_LB_PARAMS, 0xffffffff, 0x00601004, 156 1.1 riastrad 0x311f, 0xffffffff, 0x10102020, 157 1.1 riastrad 0x3122, 0xffffffff, 0x01000020, 158 1.1 riastrad mmRLC_LB_CNTR_MAX, 0xffffffff, 0x00000800, 159 1.1 riastrad mmRLC_LB_CNTL, 0xffffffff, 0x800000a4, 160 1.1 riastrad }; 161 1.1 riastrad 162 1.1 riastrad static const u32 verde_pg_init[] = 163 1.1 riastrad { 164 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x40000, 165 1.1 riastrad mmGMCON_PGFSM_CONFIG, 0xffffffff, 0x200010ff, 166 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 167 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 168 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 169 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 170 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 171 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x7007, 172 1.1 riastrad mmGMCON_PGFSM_CONFIG, 0xffffffff, 0x300010ff, 173 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 174 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 175 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 176 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 177 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 178 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x400000, 179 1.1 riastrad mmGMCON_PGFSM_CONFIG, 0xffffffff, 0x100010ff, 180 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 181 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 182 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 183 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 184 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 185 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x120200, 186 1.1 riastrad mmGMCON_PGFSM_CONFIG, 0xffffffff, 0x500010ff, 187 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 188 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 189 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 190 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 191 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 192 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x1e1e16, 193 1.1 riastrad mmGMCON_PGFSM_CONFIG, 0xffffffff, 0x600010ff, 194 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 195 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 196 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 197 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 198 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 199 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x171f1e, 200 1.1 riastrad mmGMCON_PGFSM_CONFIG, 0xffffffff, 0x700010ff, 201 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 202 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 203 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 204 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 205 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 206 1.1 riastrad mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0, 207 1.1 riastrad mmGMCON_PGFSM_CONFIG, 0xffffffff, 0x9ff, 208 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x0, 209 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x10000800, 210 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xf, 211 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xf, 212 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x4, 213 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x1000051e, 214 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xffff, 215 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xffff, 216 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x8, 217 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x80500, 218 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x12, 219 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x9050c, 220 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x1d, 221 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xb052c, 222 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x2a, 223 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x1053e, 224 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x2d, 225 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x10546, 226 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x30, 227 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xa054e, 228 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x3c, 229 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x1055f, 230 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x3f, 231 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x10567, 232 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x42, 233 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x1056f, 234 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x45, 235 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x10572, 236 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x48, 237 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x20575, 238 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x4c, 239 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x190801, 240 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x67, 241 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x1082a, 242 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x6a, 243 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x1b082d, 244 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x87, 245 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x310851, 246 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xba, 247 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x891, 248 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xbc, 249 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x893, 250 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xbe, 251 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x20895, 252 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xc2, 253 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x20899, 254 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xc6, 255 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x2089d, 256 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xca, 257 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x8a1, 258 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xcc, 259 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x8a3, 260 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xce, 261 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x308a5, 262 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xd3, 263 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x6d08cd, 264 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x142, 265 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x2000095a, 266 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x1, 267 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x144, 268 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x301f095b, 269 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x165, 270 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xc094d, 271 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x173, 272 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xf096d, 273 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x184, 274 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x15097f, 275 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x19b, 276 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xc0998, 277 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x1a9, 278 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x409a7, 279 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x1af, 280 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xcdc, 281 1.1 riastrad mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x1b1, 282 1.1 riastrad mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x800, 283 1.1 riastrad mmGMCON_RENG_EXECUTE, 0xffffffff, 0x6c9b2000, 284 1.1 riastrad mmGMCON_MISC2, 0xfc00, 0x2000, 285 1.1 riastrad mmGMCON_MISC3, 0xffffffff, 0xfc0, 286 1.1 riastrad mmMC_PMG_AUTO_CFG, 0x00000100, 0x100, 287 1.1 riastrad }; 288 1.1 riastrad 289 1.1 riastrad static const u32 verde_golden_rlc_registers[] = 290 1.1 riastrad { 291 1.1 riastrad mmGB_ADDR_CONFIG, 0xffffffff, 0x02010002, 292 1.1 riastrad mmRLC_LB_PARAMS, 0xffffffff, 0x033f1005, 293 1.1 riastrad 0x311f, 0xffffffff, 0x10808020, 294 1.1 riastrad 0x3122, 0xffffffff, 0x00800008, 295 1.1 riastrad mmRLC_LB_CNTR_MAX, 0xffffffff, 0x00001000, 296 1.1 riastrad mmRLC_LB_CNTL, 0xffffffff, 0x80010014, 297 1.1 riastrad }; 298 1.1 riastrad 299 1.1 riastrad static const u32 verde_golden_registers[] = 300 1.1 riastrad { 301 1.1 riastrad mmAZALIA_SCLK_CONTROL, 0x00000030, 0x00000011, 302 1.1 riastrad mmCB_HW_CONTROL, 0x00010000, 0x00018208, 303 1.1 riastrad mmDB_DEBUG, 0xffffffff, 0x00000000, 304 1.1 riastrad mmDB_DEBUG2, 0xf00fffff, 0x00000400, 305 1.1 riastrad mmDB_DEBUG3, 0x0002021c, 0x00020200, 306 1.1 riastrad mmDCI_CLK_CNTL, 0x00000080, 0x00000000, 307 1.1 riastrad 0x340c, 0x000300c0, 0x00800040, 308 1.1 riastrad 0x360c, 0x000300c0, 0x00800040, 309 1.1 riastrad mmFBC_DEBUG_COMP, 0x000000f0, 0x00000070, 310 1.1 riastrad mmFBC_MISC, 0x00200000, 0x50100000, 311 1.1 riastrad mmDIG0_HDMI_CONTROL, 0x31000311, 0x00000011, 312 1.1 riastrad mmMC_SEQ_PMG_PG_HWCNTL, 0x00073ffe, 0x000022a2, 313 1.1 riastrad mmMC_XPB_P2P_BAR_CFG, 0x000007ff, 0x00000000, 314 1.1 riastrad mmPA_CL_ENHANCE, 0xf000001f, 0x00000007, 315 1.1 riastrad mmPA_SC_FORCE_EOV_MAX_CNTS, 0xffffffff, 0x00ffffff, 316 1.1 riastrad mmPA_SC_LINE_STIPPLE_STATE, 0x0000ff0f, 0x00000000, 317 1.1 riastrad mmPA_SC_MODE_CNTL_1, 0x07ffffff, 0x4e000000, 318 1.1 riastrad mmPA_SC_RASTER_CONFIG, 0x3f3f3fff, 0x0000124a, 319 1.1 riastrad 0x000c, 0xffffffff, 0x0040, 320 1.1 riastrad 0x000d, 0x00000040, 0x00004040, 321 1.1 riastrad mmSPI_CONFIG_CNTL, 0x07ffffff, 0x03000000, 322 1.1 riastrad mmSQ_DED_CNT, 0x01ff1f3f, 0x00000000, 323 1.1 riastrad mmSQ_SEC_CNT, 0x01ff1f3f, 0x00000000, 324 1.1 riastrad mmSX_DEBUG_1, 0x0000007f, 0x00000020, 325 1.1 riastrad mmTA_CNTL_AUX, 0x00010000, 0x00010000, 326 1.1 riastrad mmTCP_ADDR_CONFIG, 0x000003ff, 0x00000003, 327 1.1 riastrad mmTCP_CHAN_STEER_HI, 0xffffffff, 0x00000000, 328 1.1 riastrad mmTCP_CHAN_STEER_LO, 0xffffffff, 0x00001032, 329 1.1 riastrad mmVGT_GS_VERTEX_REUSE, 0x0000001f, 0x00000010, 330 1.1 riastrad mmVM_L2_CG, 0x000c0fc0, 0x000c0400, 331 1.1 riastrad mmVM_PRT_APERTURE0_LOW_ADDR, 0x0fffffff, 0xffffffff, 332 1.1 riastrad mmVM_PRT_APERTURE1_LOW_ADDR, 0x0fffffff, 0x0fffffff, 333 1.1 riastrad mmVM_PRT_APERTURE2_LOW_ADDR, 0x0fffffff, 0x0fffffff, 334 1.1 riastrad mmVM_PRT_APERTURE3_LOW_ADDR, 0x0fffffff, 0x0fffffff, 335 1.1 riastrad }; 336 1.1 riastrad 337 1.1 riastrad static const u32 oland_golden_registers[] = 338 1.1 riastrad { 339 1.1 riastrad mmAZALIA_SCLK_CONTROL, 0x00000030, 0x00000011, 340 1.1 riastrad mmCB_HW_CONTROL, 0x00010000, 0x00018208, 341 1.1 riastrad mmDB_DEBUG, 0xffffffff, 0x00000000, 342 1.1 riastrad mmDB_DEBUG2, 0xf00fffff, 0x00000400, 343 1.1 riastrad mmDB_DEBUG3, 0x0002021c, 0x00020200, 344 1.1 riastrad mmDCI_CLK_CNTL, 0x00000080, 0x00000000, 345 1.1 riastrad 0x340c, 0x000300c0, 0x00800040, 346 1.1 riastrad 0x360c, 0x000300c0, 0x00800040, 347 1.1 riastrad mmFBC_DEBUG_COMP, 0x000000f0, 0x00000070, 348 1.1 riastrad mmFBC_MISC, 0x00200000, 0x50100000, 349 1.1 riastrad mmDIG0_HDMI_CONTROL, 0x31000311, 0x00000011, 350 1.1 riastrad mmMC_SEQ_PMG_PG_HWCNTL, 0x00073ffe, 0x000022a2, 351 1.1 riastrad mmMC_XPB_P2P_BAR_CFG, 0x000007ff, 0x00000000, 352 1.1 riastrad mmPA_CL_ENHANCE, 0xf000001f, 0x00000007, 353 1.1 riastrad mmPA_SC_FORCE_EOV_MAX_CNTS, 0xffffffff, 0x00ffffff, 354 1.1 riastrad mmPA_SC_LINE_STIPPLE_STATE, 0x0000ff0f, 0x00000000, 355 1.1 riastrad mmPA_SC_MODE_CNTL_1, 0x07ffffff, 0x4e000000, 356 1.1 riastrad mmPA_SC_RASTER_CONFIG, 0x3f3f3fff, 0x00000082, 357 1.1 riastrad 0x000c, 0xffffffff, 0x0040, 358 1.1 riastrad 0x000d, 0x00000040, 0x00004040, 359 1.1 riastrad mmSPI_CONFIG_CNTL, 0x07ffffff, 0x03000000, 360 1.1 riastrad mmSX_DEBUG_1, 0x0000007f, 0x00000020, 361 1.1 riastrad mmTA_CNTL_AUX, 0x00010000, 0x00010000, 362 1.1 riastrad mmTCP_ADDR_CONFIG, 0x000003ff, 0x000000f3, 363 1.1 riastrad mmTCP_CHAN_STEER_HI, 0xffffffff, 0x00000000, 364 1.1 riastrad mmTCP_CHAN_STEER_LO, 0xffffffff, 0x00003210, 365 1.1 riastrad mmVGT_GS_VERTEX_REUSE, 0x0000001f, 0x00000010, 366 1.1 riastrad mmVM_L2_CG, 0x000c0fc0, 0x000c0400, 367 1.1 riastrad mmVM_PRT_APERTURE0_LOW_ADDR, 0x0fffffff, 0xffffffff, 368 1.1 riastrad mmVM_PRT_APERTURE1_LOW_ADDR, 0x0fffffff, 0x0fffffff, 369 1.1 riastrad mmVM_PRT_APERTURE2_LOW_ADDR, 0x0fffffff, 0x0fffffff, 370 1.1 riastrad mmVM_PRT_APERTURE3_LOW_ADDR, 0x0fffffff, 0x0fffffff, 371 1.1 riastrad 372 1.1 riastrad }; 373 1.1 riastrad 374 1.1 riastrad static const u32 oland_golden_rlc_registers[] = 375 1.1 riastrad { 376 1.1 riastrad mmGB_ADDR_CONFIG, 0xffffffff, 0x02010002, 377 1.1 riastrad mmRLC_LB_PARAMS, 0xffffffff, 0x00601005, 378 1.1 riastrad 0x311f, 0xffffffff, 0x10104040, 379 1.1 riastrad 0x3122, 0xffffffff, 0x0100000a, 380 1.1 riastrad mmRLC_LB_CNTR_MAX, 0xffffffff, 0x00000800, 381 1.1 riastrad mmRLC_LB_CNTL, 0xffffffff, 0x800000f4, 382 1.1 riastrad }; 383 1.1 riastrad 384 1.1 riastrad static const u32 hainan_golden_registers[] = 385 1.1 riastrad { 386 1.1 riastrad 0x17bc, 0x00000030, 0x00000011, 387 1.1 riastrad mmCB_HW_CONTROL, 0x00010000, 0x00018208, 388 1.1 riastrad mmDB_DEBUG, 0xffffffff, 0x00000000, 389 1.1 riastrad mmDB_DEBUG2, 0xf00fffff, 0x00000400, 390 1.1 riastrad mmDB_DEBUG3, 0x0002021c, 0x00020200, 391 1.1 riastrad 0x031e, 0x00000080, 0x00000000, 392 1.1 riastrad 0x3430, 0xff000fff, 0x00000100, 393 1.1 riastrad 0x340c, 0x000300c0, 0x00800040, 394 1.1 riastrad 0x3630, 0xff000fff, 0x00000100, 395 1.1 riastrad 0x360c, 0x000300c0, 0x00800040, 396 1.1 riastrad 0x16ec, 0x000000f0, 0x00000070, 397 1.1 riastrad 0x16f0, 0x00200000, 0x50100000, 398 1.1 riastrad 0x1c0c, 0x31000311, 0x00000011, 399 1.1 riastrad mmMC_SEQ_PMG_PG_HWCNTL, 0x00073ffe, 0x000022a2, 400 1.1 riastrad mmMC_XPB_P2P_BAR_CFG, 0x000007ff, 0x00000000, 401 1.1 riastrad mmPA_CL_ENHANCE, 0xf000001f, 0x00000007, 402 1.1 riastrad mmPA_SC_FORCE_EOV_MAX_CNTS, 0xffffffff, 0x00ffffff, 403 1.1 riastrad mmPA_SC_LINE_STIPPLE_STATE, 0x0000ff0f, 0x00000000, 404 1.1 riastrad mmPA_SC_MODE_CNTL_1, 0x07ffffff, 0x4e000000, 405 1.1 riastrad mmPA_SC_RASTER_CONFIG, 0x3f3f3fff, 0x00000000, 406 1.1 riastrad 0x000c, 0xffffffff, 0x0040, 407 1.1 riastrad 0x000d, 0x00000040, 0x00004040, 408 1.1 riastrad mmSPI_CONFIG_CNTL, 0x03e00000, 0x03600000, 409 1.1 riastrad mmSX_DEBUG_1, 0x0000007f, 0x00000020, 410 1.1 riastrad mmTA_CNTL_AUX, 0x00010000, 0x00010000, 411 1.1 riastrad mmTCP_ADDR_CONFIG, 0x000003ff, 0x000000f1, 412 1.1 riastrad mmTCP_CHAN_STEER_HI, 0xffffffff, 0x00000000, 413 1.1 riastrad mmTCP_CHAN_STEER_LO, 0xffffffff, 0x00003210, 414 1.1 riastrad mmVGT_GS_VERTEX_REUSE, 0x0000001f, 0x00000010, 415 1.1 riastrad mmVM_L2_CG, 0x000c0fc0, 0x000c0400, 416 1.1 riastrad mmVM_PRT_APERTURE0_LOW_ADDR, 0x0fffffff, 0xffffffff, 417 1.1 riastrad mmVM_PRT_APERTURE1_LOW_ADDR, 0x0fffffff, 0x0fffffff, 418 1.1 riastrad mmVM_PRT_APERTURE2_LOW_ADDR, 0x0fffffff, 0x0fffffff, 419 1.1 riastrad mmVM_PRT_APERTURE3_LOW_ADDR, 0x0fffffff, 0x0fffffff, 420 1.1 riastrad }; 421 1.1 riastrad 422 1.1 riastrad static const u32 hainan_golden_registers2[] = 423 1.1 riastrad { 424 1.1 riastrad mmGB_ADDR_CONFIG, 0xffffffff, 0x2011003, 425 1.1 riastrad }; 426 1.1 riastrad 427 1.1 riastrad static const u32 tahiti_mgcg_cgcg_init[] = 428 1.1 riastrad { 429 1.1 riastrad mmRLC_CGTT_MGCG_OVERRIDE, 0xffffffff, 0xfffffffc, 430 1.1 riastrad mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000, 431 1.1 riastrad mmCB_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, 432 1.1 riastrad mmCGTT_BCI_CLK_CTRL, 0xffffffff, 0x00000100, 433 1.1 riastrad mmCGTT_CP_CLK_CTRL, 0xffffffff, 0x00000100, 434 1.1 riastrad mmCGTT_GDS_CLK_CTRL, 0xffffffff, 0x00000100, 435 1.1 riastrad mmCGTT_IA_CLK_CTRL, 0xffffffff, 0x06000100, 436 1.1 riastrad mmCGTT_PA_CLK_CTRL, 0xffffffff, 0x00000100, 437 1.1 riastrad mmCGTT_PC_CLK_CTRL, 0xffffffff, 0x00000100, 438 1.1 riastrad mmCGTT_RLC_CLK_CTRL, 0xffffffff, 0x00000100, 439 1.1 riastrad mmCGTT_SC_CLK_CTRL, 0xffffffff, 0x00000100, 440 1.1 riastrad mmCGTT_SPI_CLK_CTRL, 0xffffffff, 0x00000100, 441 1.1 riastrad mmCGTT_SQ_CLK_CTRL, 0xffffffff, 0x00000100, 442 1.1 riastrad mmCGTT_SQG_CLK_CTRL, 0xffffffff, 0x00000100, 443 1.1 riastrad mmCGTT_SX_CLK_CTRL0, 0xffffffff, 0x00000100, 444 1.1 riastrad mmCGTT_SX_CLK_CTRL1, 0xffffffff, 0x00000100, 445 1.1 riastrad mmCGTT_SX_CLK_CTRL2, 0xffffffff, 0x00000100, 446 1.1 riastrad mmCGTT_SX_CLK_CTRL3, 0xffffffff, 0x00000100, 447 1.1 riastrad mmCGTT_TCI_CLK_CTRL, 0xffffffff, 0x00000100, 448 1.1 riastrad mmCGTT_TCP_CLK_CTRL, 0xffffffff, 0x00000100, 449 1.1 riastrad mmCGTT_VGT_CLK_CTRL, 0xffffffff, 0x06000100, 450 1.1 riastrad mmDB_CGTT_CLK_CTRL_0, 0xffffffff, 0x00000100, 451 1.1 riastrad mmTA_CGTT_CTRL, 0xffffffff, 0x00000100, 452 1.1 riastrad mmTCA_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, 453 1.1 riastrad mmTCC_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, 454 1.1 riastrad mmTD_CGTT_CTRL, 0xffffffff, 0x00000100, 455 1.1 riastrad mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000, 456 1.1 riastrad 0x2458, 0xffffffff, 0x00010000, 457 1.1 riastrad 0x2459, 0xffffffff, 0x00030002, 458 1.1 riastrad 0x245a, 0xffffffff, 0x00040007, 459 1.1 riastrad 0x245b, 0xffffffff, 0x00060005, 460 1.1 riastrad 0x245c, 0xffffffff, 0x00090008, 461 1.1 riastrad 0x245d, 0xffffffff, 0x00020001, 462 1.1 riastrad 0x245e, 0xffffffff, 0x00040003, 463 1.1 riastrad 0x245f, 0xffffffff, 0x00000007, 464 1.1 riastrad 0x2460, 0xffffffff, 0x00060005, 465 1.1 riastrad 0x2461, 0xffffffff, 0x00090008, 466 1.1 riastrad 0x2462, 0xffffffff, 0x00030002, 467 1.1 riastrad 0x2463, 0xffffffff, 0x00050004, 468 1.1 riastrad 0x2464, 0xffffffff, 0x00000008, 469 1.1 riastrad 0x2465, 0xffffffff, 0x00070006, 470 1.1 riastrad 0x2466, 0xffffffff, 0x000a0009, 471 1.1 riastrad 0x2467, 0xffffffff, 0x00040003, 472 1.1 riastrad 0x2468, 0xffffffff, 0x00060005, 473 1.1 riastrad 0x2469, 0xffffffff, 0x00000009, 474 1.1 riastrad 0x246a, 0xffffffff, 0x00080007, 475 1.1 riastrad 0x246b, 0xffffffff, 0x000b000a, 476 1.1 riastrad 0x246c, 0xffffffff, 0x00050004, 477 1.1 riastrad 0x246d, 0xffffffff, 0x00070006, 478 1.1 riastrad 0x246e, 0xffffffff, 0x0008000b, 479 1.1 riastrad 0x246f, 0xffffffff, 0x000a0009, 480 1.1 riastrad 0x2470, 0xffffffff, 0x000d000c, 481 1.1 riastrad 0x2471, 0xffffffff, 0x00060005, 482 1.1 riastrad 0x2472, 0xffffffff, 0x00080007, 483 1.1 riastrad 0x2473, 0xffffffff, 0x0000000b, 484 1.1 riastrad 0x2474, 0xffffffff, 0x000a0009, 485 1.1 riastrad 0x2475, 0xffffffff, 0x000d000c, 486 1.1 riastrad 0x2476, 0xffffffff, 0x00070006, 487 1.1 riastrad 0x2477, 0xffffffff, 0x00090008, 488 1.1 riastrad 0x2478, 0xffffffff, 0x0000000c, 489 1.1 riastrad 0x2479, 0xffffffff, 0x000b000a, 490 1.1 riastrad 0x247a, 0xffffffff, 0x000e000d, 491 1.1 riastrad 0x247b, 0xffffffff, 0x00080007, 492 1.1 riastrad 0x247c, 0xffffffff, 0x000a0009, 493 1.1 riastrad 0x247d, 0xffffffff, 0x0000000d, 494 1.1 riastrad 0x247e, 0xffffffff, 0x000c000b, 495 1.1 riastrad 0x247f, 0xffffffff, 0x000f000e, 496 1.1 riastrad 0x2480, 0xffffffff, 0x00090008, 497 1.1 riastrad 0x2481, 0xffffffff, 0x000b000a, 498 1.1 riastrad 0x2482, 0xffffffff, 0x000c000f, 499 1.1 riastrad 0x2483, 0xffffffff, 0x000e000d, 500 1.1 riastrad 0x2484, 0xffffffff, 0x00110010, 501 1.1 riastrad 0x2485, 0xffffffff, 0x000a0009, 502 1.1 riastrad 0x2486, 0xffffffff, 0x000c000b, 503 1.1 riastrad 0x2487, 0xffffffff, 0x0000000f, 504 1.1 riastrad 0x2488, 0xffffffff, 0x000e000d, 505 1.1 riastrad 0x2489, 0xffffffff, 0x00110010, 506 1.1 riastrad 0x248a, 0xffffffff, 0x000b000a, 507 1.1 riastrad 0x248b, 0xffffffff, 0x000d000c, 508 1.1 riastrad 0x248c, 0xffffffff, 0x00000010, 509 1.1 riastrad 0x248d, 0xffffffff, 0x000f000e, 510 1.1 riastrad 0x248e, 0xffffffff, 0x00120011, 511 1.1 riastrad 0x248f, 0xffffffff, 0x000c000b, 512 1.1 riastrad 0x2490, 0xffffffff, 0x000e000d, 513 1.1 riastrad 0x2491, 0xffffffff, 0x00000011, 514 1.1 riastrad 0x2492, 0xffffffff, 0x0010000f, 515 1.1 riastrad 0x2493, 0xffffffff, 0x00130012, 516 1.1 riastrad 0x2494, 0xffffffff, 0x000d000c, 517 1.1 riastrad 0x2495, 0xffffffff, 0x000f000e, 518 1.1 riastrad 0x2496, 0xffffffff, 0x00100013, 519 1.1 riastrad 0x2497, 0xffffffff, 0x00120011, 520 1.1 riastrad 0x2498, 0xffffffff, 0x00150014, 521 1.1 riastrad 0x2499, 0xffffffff, 0x000e000d, 522 1.1 riastrad 0x249a, 0xffffffff, 0x0010000f, 523 1.1 riastrad 0x249b, 0xffffffff, 0x00000013, 524 1.1 riastrad 0x249c, 0xffffffff, 0x00120011, 525 1.1 riastrad 0x249d, 0xffffffff, 0x00150014, 526 1.1 riastrad 0x249e, 0xffffffff, 0x000f000e, 527 1.1 riastrad 0x249f, 0xffffffff, 0x00110010, 528 1.1 riastrad 0x24a0, 0xffffffff, 0x00000014, 529 1.1 riastrad 0x24a1, 0xffffffff, 0x00130012, 530 1.1 riastrad 0x24a2, 0xffffffff, 0x00160015, 531 1.1 riastrad 0x24a3, 0xffffffff, 0x0010000f, 532 1.1 riastrad 0x24a4, 0xffffffff, 0x00120011, 533 1.1 riastrad 0x24a5, 0xffffffff, 0x00000015, 534 1.1 riastrad 0x24a6, 0xffffffff, 0x00140013, 535 1.1 riastrad 0x24a7, 0xffffffff, 0x00170016, 536 1.1 riastrad mmCGTS_SM_CTRL_REG, 0xffffffff, 0x96940200, 537 1.1 riastrad mmCP_RB_WPTR_POLL_CNTL, 0xffffffff, 0x00900100, 538 1.1 riastrad mmRLC_GCPM_GENERAL_3, 0xffffffff, 0x00000080, 539 1.1 riastrad mmRLC_CGCG_CGLS_CTRL, 0xffffffff, 0x0020003f, 540 1.1 riastrad 0x000c, 0xffffffff, 0x0000001c, 541 1.1 riastrad 0x000d, 0x000f0000, 0x000f0000, 542 1.1 riastrad 0x0583, 0xffffffff, 0x00000100, 543 1.1 riastrad mmXDMA_CLOCK_GATING_CNTL, 0xffffffff, 0x00000100, 544 1.1 riastrad mmXDMA_MEM_POWER_CNTL, 0x00000101, 0x00000000, 545 1.1 riastrad mmMC_MEM_POWER_LS, 0xffffffff, 0x00000104, 546 1.1 riastrad mmMC_CITF_MISC_WR_CG, 0x000c0000, 0x000c0000, 547 1.1 riastrad mmMC_CITF_MISC_RD_CG, 0x000c0000, 0x000c0000, 548 1.1 riastrad mmCGTT_DRM_CLK_CTRL0, 0xff000fff, 0x00000100, 549 1.1 riastrad 0x157a, 0x00000001, 0x00000001, 550 1.1 riastrad mmHDP_MEM_POWER_LS, 0x00000001, 0x00000001, 551 1.1 riastrad mmHDP_XDP_CGTT_BLK_CTRL, 0xc0000fff, 0x00000104, 552 1.1 riastrad mmCP_MEM_SLP_CNTL, 0x00000001, 0x00000001, 553 1.1 riastrad 0x3430, 0xfffffff0, 0x00000100, 554 1.1 riastrad 0x3630, 0xfffffff0, 0x00000100, 555 1.1 riastrad }; 556 1.1 riastrad static const u32 pitcairn_mgcg_cgcg_init[] = 557 1.1 riastrad { 558 1.1 riastrad mmRLC_CGTT_MGCG_OVERRIDE, 0xffffffff, 0xfffffffc, 559 1.1 riastrad mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000, 560 1.1 riastrad mmCB_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, 561 1.1 riastrad mmCGTT_BCI_CLK_CTRL, 0xffffffff, 0x00000100, 562 1.1 riastrad mmCGTT_CP_CLK_CTRL, 0xffffffff, 0x00000100, 563 1.1 riastrad mmCGTT_GDS_CLK_CTRL, 0xffffffff, 0x00000100, 564 1.1 riastrad mmCGTT_IA_CLK_CTRL, 0xffffffff, 0x06000100, 565 1.1 riastrad mmCGTT_PA_CLK_CTRL, 0xffffffff, 0x00000100, 566 1.1 riastrad mmCGTT_PC_CLK_CTRL, 0xffffffff, 0x00000100, 567 1.1 riastrad mmCGTT_RLC_CLK_CTRL, 0xffffffff, 0x00000100, 568 1.1 riastrad mmCGTT_SC_CLK_CTRL, 0xffffffff, 0x00000100, 569 1.1 riastrad mmCGTT_SPI_CLK_CTRL, 0xffffffff, 0x00000100, 570 1.1 riastrad mmCGTT_SQ_CLK_CTRL, 0xffffffff, 0x00000100, 571 1.1 riastrad mmCGTT_SQG_CLK_CTRL, 0xffffffff, 0x00000100, 572 1.1 riastrad mmCGTT_SX_CLK_CTRL0, 0xffffffff, 0x00000100, 573 1.1 riastrad mmCGTT_SX_CLK_CTRL1, 0xffffffff, 0x00000100, 574 1.1 riastrad mmCGTT_SX_CLK_CTRL2, 0xffffffff, 0x00000100, 575 1.1 riastrad mmCGTT_SX_CLK_CTRL3, 0xffffffff, 0x00000100, 576 1.1 riastrad mmCGTT_TCI_CLK_CTRL, 0xffffffff, 0x00000100, 577 1.1 riastrad mmCGTT_TCP_CLK_CTRL, 0xffffffff, 0x00000100, 578 1.1 riastrad mmCGTT_VGT_CLK_CTRL, 0xffffffff, 0x06000100, 579 1.1 riastrad mmDB_CGTT_CLK_CTRL_0, 0xffffffff, 0x00000100, 580 1.1 riastrad mmTA_CGTT_CTRL, 0xffffffff, 0x00000100, 581 1.1 riastrad mmTCA_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, 582 1.1 riastrad mmTCC_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, 583 1.1 riastrad mmTD_CGTT_CTRL, 0xffffffff, 0x00000100, 584 1.1 riastrad mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000, 585 1.1 riastrad 0x2458, 0xffffffff, 0x00010000, 586 1.1 riastrad 0x2459, 0xffffffff, 0x00030002, 587 1.1 riastrad 0x245a, 0xffffffff, 0x00040007, 588 1.1 riastrad 0x245b, 0xffffffff, 0x00060005, 589 1.1 riastrad 0x245c, 0xffffffff, 0x00090008, 590 1.1 riastrad 0x245d, 0xffffffff, 0x00020001, 591 1.1 riastrad 0x245e, 0xffffffff, 0x00040003, 592 1.1 riastrad 0x245f, 0xffffffff, 0x00000007, 593 1.1 riastrad 0x2460, 0xffffffff, 0x00060005, 594 1.1 riastrad 0x2461, 0xffffffff, 0x00090008, 595 1.1 riastrad 0x2462, 0xffffffff, 0x00030002, 596 1.1 riastrad 0x2463, 0xffffffff, 0x00050004, 597 1.1 riastrad 0x2464, 0xffffffff, 0x00000008, 598 1.1 riastrad 0x2465, 0xffffffff, 0x00070006, 599 1.1 riastrad 0x2466, 0xffffffff, 0x000a0009, 600 1.1 riastrad 0x2467, 0xffffffff, 0x00040003, 601 1.1 riastrad 0x2468, 0xffffffff, 0x00060005, 602 1.1 riastrad 0x2469, 0xffffffff, 0x00000009, 603 1.1 riastrad 0x246a, 0xffffffff, 0x00080007, 604 1.1 riastrad 0x246b, 0xffffffff, 0x000b000a, 605 1.1 riastrad 0x246c, 0xffffffff, 0x00050004, 606 1.1 riastrad 0x246d, 0xffffffff, 0x00070006, 607 1.1 riastrad 0x246e, 0xffffffff, 0x0008000b, 608 1.1 riastrad 0x246f, 0xffffffff, 0x000a0009, 609 1.1 riastrad 0x2470, 0xffffffff, 0x000d000c, 610 1.1 riastrad 0x2480, 0xffffffff, 0x00090008, 611 1.1 riastrad 0x2481, 0xffffffff, 0x000b000a, 612 1.1 riastrad 0x2482, 0xffffffff, 0x000c000f, 613 1.1 riastrad 0x2483, 0xffffffff, 0x000e000d, 614 1.1 riastrad 0x2484, 0xffffffff, 0x00110010, 615 1.1 riastrad 0x2485, 0xffffffff, 0x000a0009, 616 1.1 riastrad 0x2486, 0xffffffff, 0x000c000b, 617 1.1 riastrad 0x2487, 0xffffffff, 0x0000000f, 618 1.1 riastrad 0x2488, 0xffffffff, 0x000e000d, 619 1.1 riastrad 0x2489, 0xffffffff, 0x00110010, 620 1.1 riastrad 0x248a, 0xffffffff, 0x000b000a, 621 1.1 riastrad 0x248b, 0xffffffff, 0x000d000c, 622 1.1 riastrad 0x248c, 0xffffffff, 0x00000010, 623 1.1 riastrad 0x248d, 0xffffffff, 0x000f000e, 624 1.1 riastrad 0x248e, 0xffffffff, 0x00120011, 625 1.1 riastrad 0x248f, 0xffffffff, 0x000c000b, 626 1.1 riastrad 0x2490, 0xffffffff, 0x000e000d, 627 1.1 riastrad 0x2491, 0xffffffff, 0x00000011, 628 1.1 riastrad 0x2492, 0xffffffff, 0x0010000f, 629 1.1 riastrad 0x2493, 0xffffffff, 0x00130012, 630 1.1 riastrad 0x2494, 0xffffffff, 0x000d000c, 631 1.1 riastrad 0x2495, 0xffffffff, 0x000f000e, 632 1.1 riastrad 0x2496, 0xffffffff, 0x00100013, 633 1.1 riastrad 0x2497, 0xffffffff, 0x00120011, 634 1.1 riastrad 0x2498, 0xffffffff, 0x00150014, 635 1.1 riastrad mmCGTS_SM_CTRL_REG, 0xffffffff, 0x96940200, 636 1.1 riastrad mmCP_RB_WPTR_POLL_CNTL, 0xffffffff, 0x00900100, 637 1.1 riastrad mmRLC_GCPM_GENERAL_3, 0xffffffff, 0x00000080, 638 1.1 riastrad mmRLC_CGCG_CGLS_CTRL, 0xffffffff, 0x0020003f, 639 1.1 riastrad 0x000c, 0xffffffff, 0x0000001c, 640 1.1 riastrad 0x000d, 0x000f0000, 0x000f0000, 641 1.1 riastrad 0x0583, 0xffffffff, 0x00000100, 642 1.1 riastrad mmXDMA_CLOCK_GATING_CNTL, 0xffffffff, 0x00000100, 643 1.1 riastrad mmXDMA_MEM_POWER_CNTL, 0x00000101, 0x00000000, 644 1.1 riastrad mmMC_MEM_POWER_LS, 0xffffffff, 0x00000104, 645 1.1 riastrad mmCGTT_DRM_CLK_CTRL0, 0xff000fff, 0x00000100, 646 1.1 riastrad 0x157a, 0x00000001, 0x00000001, 647 1.1 riastrad mmHDP_MEM_POWER_LS, 0x00000001, 0x00000001, 648 1.1 riastrad mmHDP_XDP_CGTT_BLK_CTRL, 0xc0000fff, 0x00000104, 649 1.1 riastrad mmCP_MEM_SLP_CNTL, 0x00000001, 0x00000001, 650 1.1 riastrad 0x3430, 0xfffffff0, 0x00000100, 651 1.1 riastrad 0x3630, 0xfffffff0, 0x00000100, 652 1.1 riastrad }; 653 1.1 riastrad 654 1.1 riastrad static const u32 verde_mgcg_cgcg_init[] = 655 1.1 riastrad { 656 1.1 riastrad mmRLC_CGTT_MGCG_OVERRIDE, 0xffffffff, 0xfffffffc, 657 1.1 riastrad mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000, 658 1.1 riastrad mmCB_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, 659 1.1 riastrad mmCGTT_BCI_CLK_CTRL, 0xffffffff, 0x00000100, 660 1.1 riastrad mmCGTT_CP_CLK_CTRL, 0xffffffff, 0x00000100, 661 1.1 riastrad mmCGTT_GDS_CLK_CTRL, 0xffffffff, 0x00000100, 662 1.1 riastrad mmCGTT_IA_CLK_CTRL, 0xffffffff, 0x06000100, 663 1.1 riastrad mmCGTT_PA_CLK_CTRL, 0xffffffff, 0x00000100, 664 1.1 riastrad mmCGTT_PC_CLK_CTRL, 0xffffffff, 0x00000100, 665 1.1 riastrad mmCGTT_RLC_CLK_CTRL, 0xffffffff, 0x00000100, 666 1.1 riastrad mmCGTT_SC_CLK_CTRL, 0xffffffff, 0x00000100, 667 1.1 riastrad mmCGTT_SPI_CLK_CTRL, 0xffffffff, 0x00000100, 668 1.1 riastrad mmCGTT_SQ_CLK_CTRL, 0xffffffff, 0x00000100, 669 1.1 riastrad mmCGTT_SQG_CLK_CTRL, 0xffffffff, 0x00000100, 670 1.1 riastrad mmCGTT_SX_CLK_CTRL0, 0xffffffff, 0x00000100, 671 1.1 riastrad mmCGTT_SX_CLK_CTRL1, 0xffffffff, 0x00000100, 672 1.1 riastrad mmCGTT_SX_CLK_CTRL2, 0xffffffff, 0x00000100, 673 1.1 riastrad mmCGTT_SX_CLK_CTRL3, 0xffffffff, 0x00000100, 674 1.1 riastrad mmCGTT_TCI_CLK_CTRL, 0xffffffff, 0x00000100, 675 1.1 riastrad mmCGTT_TCP_CLK_CTRL, 0xffffffff, 0x00000100, 676 1.1 riastrad mmCGTT_VGT_CLK_CTRL, 0xffffffff, 0x06000100, 677 1.1 riastrad mmDB_CGTT_CLK_CTRL_0, 0xffffffff, 0x00000100, 678 1.1 riastrad mmTA_CGTT_CTRL, 0xffffffff, 0x00000100, 679 1.1 riastrad mmTCA_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, 680 1.1 riastrad mmTCC_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, 681 1.1 riastrad mmTD_CGTT_CTRL, 0xffffffff, 0x00000100, 682 1.1 riastrad mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000, 683 1.1 riastrad 0x2458, 0xffffffff, 0x00010000, 684 1.1 riastrad 0x2459, 0xffffffff, 0x00030002, 685 1.1 riastrad 0x245a, 0xffffffff, 0x00040007, 686 1.1 riastrad 0x245b, 0xffffffff, 0x00060005, 687 1.1 riastrad 0x245c, 0xffffffff, 0x00090008, 688 1.1 riastrad 0x245d, 0xffffffff, 0x00020001, 689 1.1 riastrad 0x245e, 0xffffffff, 0x00040003, 690 1.1 riastrad 0x245f, 0xffffffff, 0x00000007, 691 1.1 riastrad 0x2460, 0xffffffff, 0x00060005, 692 1.1 riastrad 0x2461, 0xffffffff, 0x00090008, 693 1.1 riastrad 0x2462, 0xffffffff, 0x00030002, 694 1.1 riastrad 0x2463, 0xffffffff, 0x00050004, 695 1.1 riastrad 0x2464, 0xffffffff, 0x00000008, 696 1.1 riastrad 0x2465, 0xffffffff, 0x00070006, 697 1.1 riastrad 0x2466, 0xffffffff, 0x000a0009, 698 1.1 riastrad 0x2467, 0xffffffff, 0x00040003, 699 1.1 riastrad 0x2468, 0xffffffff, 0x00060005, 700 1.1 riastrad 0x2469, 0xffffffff, 0x00000009, 701 1.1 riastrad 0x246a, 0xffffffff, 0x00080007, 702 1.1 riastrad 0x246b, 0xffffffff, 0x000b000a, 703 1.1 riastrad 0x246c, 0xffffffff, 0x00050004, 704 1.1 riastrad 0x246d, 0xffffffff, 0x00070006, 705 1.1 riastrad 0x246e, 0xffffffff, 0x0008000b, 706 1.1 riastrad 0x246f, 0xffffffff, 0x000a0009, 707 1.1 riastrad 0x2470, 0xffffffff, 0x000d000c, 708 1.1 riastrad 0x2480, 0xffffffff, 0x00090008, 709 1.1 riastrad 0x2481, 0xffffffff, 0x000b000a, 710 1.1 riastrad 0x2482, 0xffffffff, 0x000c000f, 711 1.1 riastrad 0x2483, 0xffffffff, 0x000e000d, 712 1.1 riastrad 0x2484, 0xffffffff, 0x00110010, 713 1.1 riastrad 0x2485, 0xffffffff, 0x000a0009, 714 1.1 riastrad 0x2486, 0xffffffff, 0x000c000b, 715 1.1 riastrad 0x2487, 0xffffffff, 0x0000000f, 716 1.1 riastrad 0x2488, 0xffffffff, 0x000e000d, 717 1.1 riastrad 0x2489, 0xffffffff, 0x00110010, 718 1.1 riastrad 0x248a, 0xffffffff, 0x000b000a, 719 1.1 riastrad 0x248b, 0xffffffff, 0x000d000c, 720 1.1 riastrad 0x248c, 0xffffffff, 0x00000010, 721 1.1 riastrad 0x248d, 0xffffffff, 0x000f000e, 722 1.1 riastrad 0x248e, 0xffffffff, 0x00120011, 723 1.1 riastrad 0x248f, 0xffffffff, 0x000c000b, 724 1.1 riastrad 0x2490, 0xffffffff, 0x000e000d, 725 1.1 riastrad 0x2491, 0xffffffff, 0x00000011, 726 1.1 riastrad 0x2492, 0xffffffff, 0x0010000f, 727 1.1 riastrad 0x2493, 0xffffffff, 0x00130012, 728 1.1 riastrad 0x2494, 0xffffffff, 0x000d000c, 729 1.1 riastrad 0x2495, 0xffffffff, 0x000f000e, 730 1.1 riastrad 0x2496, 0xffffffff, 0x00100013, 731 1.1 riastrad 0x2497, 0xffffffff, 0x00120011, 732 1.1 riastrad 0x2498, 0xffffffff, 0x00150014, 733 1.1 riastrad mmCGTS_SM_CTRL_REG, 0xffffffff, 0x96940200, 734 1.1 riastrad mmCP_RB_WPTR_POLL_CNTL, 0xffffffff, 0x00900100, 735 1.1 riastrad mmRLC_GCPM_GENERAL_3, 0xffffffff, 0x00000080, 736 1.1 riastrad mmRLC_CGCG_CGLS_CTRL, 0xffffffff, 0x0020003f, 737 1.1 riastrad 0x000c, 0xffffffff, 0x0000001c, 738 1.1 riastrad 0x000d, 0x000f0000, 0x000f0000, 739 1.1 riastrad 0x0583, 0xffffffff, 0x00000100, 740 1.1 riastrad mmXDMA_CLOCK_GATING_CNTL, 0xffffffff, 0x00000100, 741 1.1 riastrad mmXDMA_MEM_POWER_CNTL, 0x00000101, 0x00000000, 742 1.1 riastrad mmMC_MEM_POWER_LS, 0xffffffff, 0x00000104, 743 1.1 riastrad mmMC_CITF_MISC_WR_CG, 0x000c0000, 0x000c0000, 744 1.1 riastrad mmMC_CITF_MISC_RD_CG, 0x000c0000, 0x000c0000, 745 1.1 riastrad mmCGTT_DRM_CLK_CTRL0, 0xff000fff, 0x00000100, 746 1.1 riastrad 0x157a, 0x00000001, 0x00000001, 747 1.1 riastrad mmHDP_MEM_POWER_LS, 0x00000001, 0x00000001, 748 1.1 riastrad mmHDP_XDP_CGTT_BLK_CTRL, 0xc0000fff, 0x00000104, 749 1.1 riastrad mmCP_MEM_SLP_CNTL, 0x00000001, 0x00000001, 750 1.1 riastrad 0x3430, 0xfffffff0, 0x00000100, 751 1.1 riastrad 0x3630, 0xfffffff0, 0x00000100, 752 1.1 riastrad }; 753 1.1 riastrad 754 1.1 riastrad static const u32 oland_mgcg_cgcg_init[] = 755 1.1 riastrad { 756 1.1 riastrad mmRLC_CGTT_MGCG_OVERRIDE, 0xffffffff, 0xfffffffc, 757 1.1 riastrad mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000, 758 1.1 riastrad mmCB_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, 759 1.1 riastrad mmCGTT_BCI_CLK_CTRL, 0xffffffff, 0x00000100, 760 1.1 riastrad mmCGTT_CP_CLK_CTRL, 0xffffffff, 0x00000100, 761 1.1 riastrad mmCGTT_GDS_CLK_CTRL, 0xffffffff, 0x00000100, 762 1.1 riastrad mmCGTT_IA_CLK_CTRL, 0xffffffff, 0x06000100, 763 1.1 riastrad mmCGTT_PA_CLK_CTRL, 0xffffffff, 0x00000100, 764 1.1 riastrad mmCGTT_PC_CLK_CTRL, 0xffffffff, 0x00000100, 765 1.1 riastrad mmCGTT_RLC_CLK_CTRL, 0xffffffff, 0x00000100, 766 1.1 riastrad mmCGTT_SC_CLK_CTRL, 0xffffffff, 0x00000100, 767 1.1 riastrad mmCGTT_SPI_CLK_CTRL, 0xffffffff, 0x00000100, 768 1.1 riastrad mmCGTT_SQ_CLK_CTRL, 0xffffffff, 0x00000100, 769 1.1 riastrad mmCGTT_SQG_CLK_CTRL, 0xffffffff, 0x00000100, 770 1.1 riastrad mmCGTT_SX_CLK_CTRL0, 0xffffffff, 0x00000100, 771 1.1 riastrad mmCGTT_SX_CLK_CTRL1, 0xffffffff, 0x00000100, 772 1.1 riastrad mmCGTT_SX_CLK_CTRL2, 0xffffffff, 0x00000100, 773 1.1 riastrad mmCGTT_SX_CLK_CTRL3, 0xffffffff, 0x00000100, 774 1.1 riastrad mmCGTT_TCI_CLK_CTRL, 0xffffffff, 0x00000100, 775 1.1 riastrad mmCGTT_TCP_CLK_CTRL, 0xffffffff, 0x00000100, 776 1.1 riastrad mmCGTT_VGT_CLK_CTRL, 0xffffffff, 0x06000100, 777 1.1 riastrad mmDB_CGTT_CLK_CTRL_0, 0xffffffff, 0x00000100, 778 1.1 riastrad mmTA_CGTT_CTRL, 0xffffffff, 0x00000100, 779 1.1 riastrad mmTCA_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, 780 1.1 riastrad mmTCC_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, 781 1.1 riastrad mmTD_CGTT_CTRL, 0xffffffff, 0x00000100, 782 1.1 riastrad mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000, 783 1.1 riastrad 0x2458, 0xffffffff, 0x00010000, 784 1.1 riastrad 0x2459, 0xffffffff, 0x00030002, 785 1.1 riastrad 0x245a, 0xffffffff, 0x00040007, 786 1.1 riastrad 0x245b, 0xffffffff, 0x00060005, 787 1.1 riastrad 0x245c, 0xffffffff, 0x00090008, 788 1.1 riastrad 0x245d, 0xffffffff, 0x00020001, 789 1.1 riastrad 0x245e, 0xffffffff, 0x00040003, 790 1.1 riastrad 0x245f, 0xffffffff, 0x00000007, 791 1.1 riastrad 0x2460, 0xffffffff, 0x00060005, 792 1.1 riastrad 0x2461, 0xffffffff, 0x00090008, 793 1.1 riastrad 0x2462, 0xffffffff, 0x00030002, 794 1.1 riastrad 0x2463, 0xffffffff, 0x00050004, 795 1.1 riastrad 0x2464, 0xffffffff, 0x00000008, 796 1.1 riastrad 0x2465, 0xffffffff, 0x00070006, 797 1.1 riastrad 0x2466, 0xffffffff, 0x000a0009, 798 1.1 riastrad 0x2467, 0xffffffff, 0x00040003, 799 1.1 riastrad 0x2468, 0xffffffff, 0x00060005, 800 1.1 riastrad 0x2469, 0xffffffff, 0x00000009, 801 1.1 riastrad 0x246a, 0xffffffff, 0x00080007, 802 1.1 riastrad 0x246b, 0xffffffff, 0x000b000a, 803 1.1 riastrad 0x246c, 0xffffffff, 0x00050004, 804 1.1 riastrad 0x246d, 0xffffffff, 0x00070006, 805 1.1 riastrad 0x246e, 0xffffffff, 0x0008000b, 806 1.1 riastrad 0x246f, 0xffffffff, 0x000a0009, 807 1.1 riastrad 0x2470, 0xffffffff, 0x000d000c, 808 1.1 riastrad 0x2471, 0xffffffff, 0x00060005, 809 1.1 riastrad 0x2472, 0xffffffff, 0x00080007, 810 1.1 riastrad 0x2473, 0xffffffff, 0x0000000b, 811 1.1 riastrad 0x2474, 0xffffffff, 0x000a0009, 812 1.1 riastrad 0x2475, 0xffffffff, 0x000d000c, 813 1.1 riastrad mmCGTS_SM_CTRL_REG, 0xffffffff, 0x96940200, 814 1.1 riastrad mmCP_RB_WPTR_POLL_CNTL, 0xffffffff, 0x00900100, 815 1.1 riastrad mmRLC_GCPM_GENERAL_3, 0xffffffff, 0x00000080, 816 1.1 riastrad mmRLC_CGCG_CGLS_CTRL, 0xffffffff, 0x0020003f, 817 1.1 riastrad 0x000c, 0xffffffff, 0x0000001c, 818 1.1 riastrad 0x000d, 0x000f0000, 0x000f0000, 819 1.1 riastrad 0x0583, 0xffffffff, 0x00000100, 820 1.1 riastrad mmXDMA_CLOCK_GATING_CNTL, 0xffffffff, 0x00000100, 821 1.1 riastrad mmXDMA_MEM_POWER_CNTL, 0x00000101, 0x00000000, 822 1.1 riastrad mmMC_MEM_POWER_LS, 0xffffffff, 0x00000104, 823 1.1 riastrad mmMC_CITF_MISC_WR_CG, 0x000c0000, 0x000c0000, 824 1.1 riastrad mmMC_CITF_MISC_RD_CG, 0x000c0000, 0x000c0000, 825 1.1 riastrad mmCGTT_DRM_CLK_CTRL0, 0xff000fff, 0x00000100, 826 1.1 riastrad 0x157a, 0x00000001, 0x00000001, 827 1.1 riastrad mmHDP_MEM_POWER_LS, 0x00000001, 0x00000001, 828 1.1 riastrad mmHDP_XDP_CGTT_BLK_CTRL, 0xc0000fff, 0x00000104, 829 1.1 riastrad mmCP_MEM_SLP_CNTL, 0x00000001, 0x00000001, 830 1.1 riastrad 0x3430, 0xfffffff0, 0x00000100, 831 1.1 riastrad 0x3630, 0xfffffff0, 0x00000100, 832 1.1 riastrad }; 833 1.1 riastrad 834 1.1 riastrad static const u32 hainan_mgcg_cgcg_init[] = 835 1.1 riastrad { 836 1.1 riastrad mmRLC_CGTT_MGCG_OVERRIDE, 0xffffffff, 0xfffffffc, 837 1.1 riastrad mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000, 838 1.1 riastrad mmCB_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, 839 1.1 riastrad mmCGTT_BCI_CLK_CTRL, 0xffffffff, 0x00000100, 840 1.1 riastrad mmCGTT_CP_CLK_CTRL, 0xffffffff, 0x00000100, 841 1.1 riastrad mmCGTT_GDS_CLK_CTRL, 0xffffffff, 0x00000100, 842 1.1 riastrad mmCGTT_IA_CLK_CTRL, 0xffffffff, 0x06000100, 843 1.1 riastrad mmCGTT_PA_CLK_CTRL, 0xffffffff, 0x00000100, 844 1.1 riastrad mmCGTT_PC_CLK_CTRL, 0xffffffff, 0x00000100, 845 1.1 riastrad mmCGTT_RLC_CLK_CTRL, 0xffffffff, 0x00000100, 846 1.1 riastrad mmCGTT_SC_CLK_CTRL, 0xffffffff, 0x00000100, 847 1.1 riastrad mmCGTT_SPI_CLK_CTRL, 0xffffffff, 0x00000100, 848 1.1 riastrad mmCGTT_SQ_CLK_CTRL, 0xffffffff, 0x00000100, 849 1.1 riastrad mmCGTT_SQG_CLK_CTRL, 0xffffffff, 0x00000100, 850 1.1 riastrad mmCGTT_SX_CLK_CTRL0, 0xffffffff, 0x00000100, 851 1.1 riastrad mmCGTT_SX_CLK_CTRL1, 0xffffffff, 0x00000100, 852 1.1 riastrad mmCGTT_SX_CLK_CTRL2, 0xffffffff, 0x00000100, 853 1.1 riastrad mmCGTT_SX_CLK_CTRL3, 0xffffffff, 0x00000100, 854 1.1 riastrad mmCGTT_TCI_CLK_CTRL, 0xffffffff, 0x00000100, 855 1.1 riastrad mmCGTT_TCP_CLK_CTRL, 0xffffffff, 0x00000100, 856 1.1 riastrad mmCGTT_VGT_CLK_CTRL, 0xffffffff, 0x06000100, 857 1.1 riastrad mmDB_CGTT_CLK_CTRL_0, 0xffffffff, 0x00000100, 858 1.1 riastrad mmTA_CGTT_CTRL, 0xffffffff, 0x00000100, 859 1.1 riastrad mmTCA_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, 860 1.1 riastrad mmTCC_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100, 861 1.1 riastrad mmTD_CGTT_CTRL, 0xffffffff, 0x00000100, 862 1.1 riastrad mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000, 863 1.1 riastrad 0x2458, 0xffffffff, 0x00010000, 864 1.1 riastrad 0x2459, 0xffffffff, 0x00030002, 865 1.1 riastrad 0x245a, 0xffffffff, 0x00040007, 866 1.1 riastrad 0x245b, 0xffffffff, 0x00060005, 867 1.1 riastrad 0x245c, 0xffffffff, 0x00090008, 868 1.1 riastrad 0x245d, 0xffffffff, 0x00020001, 869 1.1 riastrad 0x245e, 0xffffffff, 0x00040003, 870 1.1 riastrad 0x245f, 0xffffffff, 0x00000007, 871 1.1 riastrad 0x2460, 0xffffffff, 0x00060005, 872 1.1 riastrad 0x2461, 0xffffffff, 0x00090008, 873 1.1 riastrad 0x2462, 0xffffffff, 0x00030002, 874 1.1 riastrad 0x2463, 0xffffffff, 0x00050004, 875 1.1 riastrad 0x2464, 0xffffffff, 0x00000008, 876 1.1 riastrad 0x2465, 0xffffffff, 0x00070006, 877 1.1 riastrad 0x2466, 0xffffffff, 0x000a0009, 878 1.1 riastrad 0x2467, 0xffffffff, 0x00040003, 879 1.1 riastrad 0x2468, 0xffffffff, 0x00060005, 880 1.1 riastrad 0x2469, 0xffffffff, 0x00000009, 881 1.1 riastrad 0x246a, 0xffffffff, 0x00080007, 882 1.1 riastrad 0x246b, 0xffffffff, 0x000b000a, 883 1.1 riastrad 0x246c, 0xffffffff, 0x00050004, 884 1.1 riastrad 0x246d, 0xffffffff, 0x00070006, 885 1.1 riastrad 0x246e, 0xffffffff, 0x0008000b, 886 1.1 riastrad 0x246f, 0xffffffff, 0x000a0009, 887 1.1 riastrad 0x2470, 0xffffffff, 0x000d000c, 888 1.1 riastrad 0x2471, 0xffffffff, 0x00060005, 889 1.1 riastrad 0x2472, 0xffffffff, 0x00080007, 890 1.1 riastrad 0x2473, 0xffffffff, 0x0000000b, 891 1.1 riastrad 0x2474, 0xffffffff, 0x000a0009, 892 1.1 riastrad 0x2475, 0xffffffff, 0x000d000c, 893 1.1 riastrad mmCGTS_SM_CTRL_REG, 0xffffffff, 0x96940200, 894 1.1 riastrad mmCP_RB_WPTR_POLL_CNTL, 0xffffffff, 0x00900100, 895 1.1 riastrad mmRLC_GCPM_GENERAL_3, 0xffffffff, 0x00000080, 896 1.1 riastrad mmRLC_CGCG_CGLS_CTRL, 0xffffffff, 0x0020003f, 897 1.1 riastrad 0x000c, 0xffffffff, 0x0000001c, 898 1.1 riastrad 0x000d, 0x000f0000, 0x000f0000, 899 1.1 riastrad 0x0583, 0xffffffff, 0x00000100, 900 1.1 riastrad 0x0409, 0xffffffff, 0x00000100, 901 1.1 riastrad mmMC_MEM_POWER_LS, 0xffffffff, 0x00000104, 902 1.1 riastrad mmMC_CITF_MISC_WR_CG, 0x000c0000, 0x000c0000, 903 1.1 riastrad mmMC_CITF_MISC_RD_CG, 0x000c0000, 0x000c0000, 904 1.1 riastrad mmHDP_MEM_POWER_LS, 0x00000001, 0x00000001, 905 1.1 riastrad mmHDP_XDP_CGTT_BLK_CTRL, 0xc0000fff, 0x00000104, 906 1.1 riastrad mmCP_MEM_SLP_CNTL, 0x00000001, 0x00000001, 907 1.1 riastrad 0x3430, 0xfffffff0, 0x00000100, 908 1.1 riastrad 0x3630, 0xfffffff0, 0x00000100, 909 1.1 riastrad }; 910 1.1 riastrad 911 1.1 riastrad static u32 si_pcie_rreg(struct amdgpu_device *adev, u32 reg) 912 1.1 riastrad { 913 1.1 riastrad unsigned long flags; 914 1.1 riastrad u32 r; 915 1.1 riastrad 916 1.1 riastrad spin_lock_irqsave(&adev->pcie_idx_lock, flags); 917 1.1 riastrad WREG32(AMDGPU_PCIE_INDEX, reg); 918 1.1 riastrad (void)RREG32(AMDGPU_PCIE_INDEX); 919 1.1 riastrad r = RREG32(AMDGPU_PCIE_DATA); 920 1.1 riastrad spin_unlock_irqrestore(&adev->pcie_idx_lock, flags); 921 1.1 riastrad return r; 922 1.1 riastrad } 923 1.1 riastrad 924 1.1 riastrad static void si_pcie_wreg(struct amdgpu_device *adev, u32 reg, u32 v) 925 1.1 riastrad { 926 1.1 riastrad unsigned long flags; 927 1.1 riastrad 928 1.1 riastrad spin_lock_irqsave(&adev->pcie_idx_lock, flags); 929 1.1 riastrad WREG32(AMDGPU_PCIE_INDEX, reg); 930 1.1 riastrad (void)RREG32(AMDGPU_PCIE_INDEX); 931 1.1 riastrad WREG32(AMDGPU_PCIE_DATA, v); 932 1.1 riastrad (void)RREG32(AMDGPU_PCIE_DATA); 933 1.1 riastrad spin_unlock_irqrestore(&adev->pcie_idx_lock, flags); 934 1.1 riastrad } 935 1.1 riastrad 936 1.1 riastrad static u32 si_pciep_rreg(struct amdgpu_device *adev, u32 reg) 937 1.1 riastrad { 938 1.1 riastrad unsigned long flags; 939 1.1 riastrad u32 r; 940 1.1 riastrad 941 1.1 riastrad spin_lock_irqsave(&adev->pcie_idx_lock, flags); 942 1.1 riastrad WREG32(PCIE_PORT_INDEX, ((reg) & 0xff)); 943 1.1 riastrad (void)RREG32(PCIE_PORT_INDEX); 944 1.1 riastrad r = RREG32(PCIE_PORT_DATA); 945 1.1 riastrad spin_unlock_irqrestore(&adev->pcie_idx_lock, flags); 946 1.1 riastrad return r; 947 1.1 riastrad } 948 1.1 riastrad 949 1.1 riastrad static void si_pciep_wreg(struct amdgpu_device *adev, u32 reg, u32 v) 950 1.1 riastrad { 951 1.1 riastrad unsigned long flags; 952 1.1 riastrad 953 1.1 riastrad spin_lock_irqsave(&adev->pcie_idx_lock, flags); 954 1.1 riastrad WREG32(PCIE_PORT_INDEX, ((reg) & 0xff)); 955 1.1 riastrad (void)RREG32(PCIE_PORT_INDEX); 956 1.1 riastrad WREG32(PCIE_PORT_DATA, (v)); 957 1.1 riastrad (void)RREG32(PCIE_PORT_DATA); 958 1.1 riastrad spin_unlock_irqrestore(&adev->pcie_idx_lock, flags); 959 1.1 riastrad } 960 1.1 riastrad 961 1.1 riastrad static u32 si_smc_rreg(struct amdgpu_device *adev, u32 reg) 962 1.1 riastrad { 963 1.1 riastrad unsigned long flags; 964 1.1 riastrad u32 r; 965 1.1 riastrad 966 1.1 riastrad spin_lock_irqsave(&adev->smc_idx_lock, flags); 967 1.1 riastrad WREG32(SMC_IND_INDEX_0, (reg)); 968 1.1 riastrad r = RREG32(SMC_IND_DATA_0); 969 1.1 riastrad spin_unlock_irqrestore(&adev->smc_idx_lock, flags); 970 1.1 riastrad return r; 971 1.1 riastrad } 972 1.1 riastrad 973 1.1 riastrad static void si_smc_wreg(struct amdgpu_device *adev, u32 reg, u32 v) 974 1.1 riastrad { 975 1.1 riastrad unsigned long flags; 976 1.1 riastrad 977 1.1 riastrad spin_lock_irqsave(&adev->smc_idx_lock, flags); 978 1.1 riastrad WREG32(SMC_IND_INDEX_0, (reg)); 979 1.1 riastrad WREG32(SMC_IND_DATA_0, (v)); 980 1.1 riastrad spin_unlock_irqrestore(&adev->smc_idx_lock, flags); 981 1.1 riastrad } 982 1.1 riastrad 983 1.1 riastrad static struct amdgpu_allowed_register_entry si_allowed_read_registers[] = { 984 1.1 riastrad {GRBM_STATUS}, 985 1.1 riastrad {mmGRBM_STATUS2}, 986 1.1 riastrad {mmGRBM_STATUS_SE0}, 987 1.1 riastrad {mmGRBM_STATUS_SE1}, 988 1.1 riastrad {mmSRBM_STATUS}, 989 1.1 riastrad {mmSRBM_STATUS2}, 990 1.1 riastrad {DMA_STATUS_REG + DMA0_REGISTER_OFFSET}, 991 1.1 riastrad {DMA_STATUS_REG + DMA1_REGISTER_OFFSET}, 992 1.1 riastrad {mmCP_STAT}, 993 1.1 riastrad {mmCP_STALLED_STAT1}, 994 1.1 riastrad {mmCP_STALLED_STAT2}, 995 1.1 riastrad {mmCP_STALLED_STAT3}, 996 1.1 riastrad {GB_ADDR_CONFIG}, 997 1.1 riastrad {MC_ARB_RAMCFG}, 998 1.1 riastrad {GB_TILE_MODE0}, 999 1.1 riastrad {GB_TILE_MODE1}, 1000 1.1 riastrad {GB_TILE_MODE2}, 1001 1.1 riastrad {GB_TILE_MODE3}, 1002 1.1 riastrad {GB_TILE_MODE4}, 1003 1.1 riastrad {GB_TILE_MODE5}, 1004 1.1 riastrad {GB_TILE_MODE6}, 1005 1.1 riastrad {GB_TILE_MODE7}, 1006 1.1 riastrad {GB_TILE_MODE8}, 1007 1.1 riastrad {GB_TILE_MODE9}, 1008 1.1 riastrad {GB_TILE_MODE10}, 1009 1.1 riastrad {GB_TILE_MODE11}, 1010 1.1 riastrad {GB_TILE_MODE12}, 1011 1.1 riastrad {GB_TILE_MODE13}, 1012 1.1 riastrad {GB_TILE_MODE14}, 1013 1.1 riastrad {GB_TILE_MODE15}, 1014 1.1 riastrad {GB_TILE_MODE16}, 1015 1.1 riastrad {GB_TILE_MODE17}, 1016 1.1 riastrad {GB_TILE_MODE18}, 1017 1.1 riastrad {GB_TILE_MODE19}, 1018 1.1 riastrad {GB_TILE_MODE20}, 1019 1.1 riastrad {GB_TILE_MODE21}, 1020 1.1 riastrad {GB_TILE_MODE22}, 1021 1.1 riastrad {GB_TILE_MODE23}, 1022 1.1 riastrad {GB_TILE_MODE24}, 1023 1.1 riastrad {GB_TILE_MODE25}, 1024 1.1 riastrad {GB_TILE_MODE26}, 1025 1.1 riastrad {GB_TILE_MODE27}, 1026 1.1 riastrad {GB_TILE_MODE28}, 1027 1.1 riastrad {GB_TILE_MODE29}, 1028 1.1 riastrad {GB_TILE_MODE30}, 1029 1.1 riastrad {GB_TILE_MODE31}, 1030 1.1 riastrad {CC_RB_BACKEND_DISABLE, true}, 1031 1.1 riastrad {GC_USER_RB_BACKEND_DISABLE, true}, 1032 1.1 riastrad {PA_SC_RASTER_CONFIG, true}, 1033 1.1 riastrad }; 1034 1.1 riastrad 1035 1.1 riastrad static uint32_t si_get_register_value(struct amdgpu_device *adev, 1036 1.1 riastrad bool indexed, u32 se_num, 1037 1.1 riastrad u32 sh_num, u32 reg_offset) 1038 1.1 riastrad { 1039 1.1 riastrad if (indexed) { 1040 1.1 riastrad uint32_t val; 1041 1.1 riastrad unsigned se_idx = (se_num == 0xffffffff) ? 0 : se_num; 1042 1.1 riastrad unsigned sh_idx = (sh_num == 0xffffffff) ? 0 : sh_num; 1043 1.1 riastrad 1044 1.1 riastrad switch (reg_offset) { 1045 1.1 riastrad case mmCC_RB_BACKEND_DISABLE: 1046 1.1 riastrad return adev->gfx.config.rb_config[se_idx][sh_idx].rb_backend_disable; 1047 1.1 riastrad case mmGC_USER_RB_BACKEND_DISABLE: 1048 1.1 riastrad return adev->gfx.config.rb_config[se_idx][sh_idx].user_rb_backend_disable; 1049 1.1 riastrad case mmPA_SC_RASTER_CONFIG: 1050 1.1 riastrad return adev->gfx.config.rb_config[se_idx][sh_idx].raster_config; 1051 1.1 riastrad } 1052 1.1 riastrad 1053 1.1 riastrad mutex_lock(&adev->grbm_idx_mutex); 1054 1.1 riastrad if (se_num != 0xffffffff || sh_num != 0xffffffff) 1055 1.1 riastrad amdgpu_gfx_select_se_sh(adev, se_num, sh_num, 0xffffffff); 1056 1.1 riastrad 1057 1.1 riastrad val = RREG32(reg_offset); 1058 1.1 riastrad 1059 1.1 riastrad if (se_num != 0xffffffff || sh_num != 0xffffffff) 1060 1.1 riastrad amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff); 1061 1.1 riastrad mutex_unlock(&adev->grbm_idx_mutex); 1062 1.1 riastrad return val; 1063 1.1 riastrad } else { 1064 1.1 riastrad unsigned idx; 1065 1.1 riastrad 1066 1.1 riastrad switch (reg_offset) { 1067 1.1 riastrad case mmGB_ADDR_CONFIG: 1068 1.1 riastrad return adev->gfx.config.gb_addr_config; 1069 1.1 riastrad case mmMC_ARB_RAMCFG: 1070 1.1 riastrad return adev->gfx.config.mc_arb_ramcfg; 1071 1.1 riastrad case mmGB_TILE_MODE0: 1072 1.1 riastrad case mmGB_TILE_MODE1: 1073 1.1 riastrad case mmGB_TILE_MODE2: 1074 1.1 riastrad case mmGB_TILE_MODE3: 1075 1.1 riastrad case mmGB_TILE_MODE4: 1076 1.1 riastrad case mmGB_TILE_MODE5: 1077 1.1 riastrad case mmGB_TILE_MODE6: 1078 1.1 riastrad case mmGB_TILE_MODE7: 1079 1.1 riastrad case mmGB_TILE_MODE8: 1080 1.1 riastrad case mmGB_TILE_MODE9: 1081 1.1 riastrad case mmGB_TILE_MODE10: 1082 1.1 riastrad case mmGB_TILE_MODE11: 1083 1.1 riastrad case mmGB_TILE_MODE12: 1084 1.1 riastrad case mmGB_TILE_MODE13: 1085 1.1 riastrad case mmGB_TILE_MODE14: 1086 1.1 riastrad case mmGB_TILE_MODE15: 1087 1.1 riastrad case mmGB_TILE_MODE16: 1088 1.1 riastrad case mmGB_TILE_MODE17: 1089 1.1 riastrad case mmGB_TILE_MODE18: 1090 1.1 riastrad case mmGB_TILE_MODE19: 1091 1.1 riastrad case mmGB_TILE_MODE20: 1092 1.1 riastrad case mmGB_TILE_MODE21: 1093 1.1 riastrad case mmGB_TILE_MODE22: 1094 1.1 riastrad case mmGB_TILE_MODE23: 1095 1.1 riastrad case mmGB_TILE_MODE24: 1096 1.1 riastrad case mmGB_TILE_MODE25: 1097 1.1 riastrad case mmGB_TILE_MODE26: 1098 1.1 riastrad case mmGB_TILE_MODE27: 1099 1.1 riastrad case mmGB_TILE_MODE28: 1100 1.1 riastrad case mmGB_TILE_MODE29: 1101 1.1 riastrad case mmGB_TILE_MODE30: 1102 1.1 riastrad case mmGB_TILE_MODE31: 1103 1.1 riastrad idx = (reg_offset - mmGB_TILE_MODE0); 1104 1.1 riastrad return adev->gfx.config.tile_mode_array[idx]; 1105 1.1 riastrad default: 1106 1.1 riastrad return RREG32(reg_offset); 1107 1.1 riastrad } 1108 1.1 riastrad } 1109 1.1 riastrad } 1110 1.1 riastrad static int si_read_register(struct amdgpu_device *adev, u32 se_num, 1111 1.1 riastrad u32 sh_num, u32 reg_offset, u32 *value) 1112 1.1 riastrad { 1113 1.1 riastrad uint32_t i; 1114 1.1 riastrad 1115 1.1 riastrad *value = 0; 1116 1.1 riastrad for (i = 0; i < ARRAY_SIZE(si_allowed_read_registers); i++) { 1117 1.1 riastrad bool indexed = si_allowed_read_registers[i].grbm_indexed; 1118 1.1 riastrad 1119 1.1 riastrad if (reg_offset != si_allowed_read_registers[i].reg_offset) 1120 1.1 riastrad continue; 1121 1.1 riastrad 1122 1.1 riastrad *value = si_get_register_value(adev, indexed, se_num, sh_num, 1123 1.1 riastrad reg_offset); 1124 1.1 riastrad return 0; 1125 1.1 riastrad } 1126 1.1 riastrad return -EINVAL; 1127 1.1 riastrad } 1128 1.1 riastrad 1129 1.1 riastrad static bool si_read_disabled_bios(struct amdgpu_device *adev) 1130 1.1 riastrad { 1131 1.1 riastrad u32 bus_cntl; 1132 1.1 riastrad u32 d1vga_control = 0; 1133 1.1 riastrad u32 d2vga_control = 0; 1134 1.1 riastrad u32 vga_render_control = 0; 1135 1.1 riastrad u32 rom_cntl; 1136 1.1 riastrad bool r; 1137 1.1 riastrad 1138 1.1 riastrad bus_cntl = RREG32(R600_BUS_CNTL); 1139 1.1 riastrad if (adev->mode_info.num_crtc) { 1140 1.1 riastrad d1vga_control = RREG32(AVIVO_D1VGA_CONTROL); 1141 1.1 riastrad d2vga_control = RREG32(AVIVO_D2VGA_CONTROL); 1142 1.1 riastrad vga_render_control = RREG32(VGA_RENDER_CONTROL); 1143 1.1 riastrad } 1144 1.1 riastrad rom_cntl = RREG32(R600_ROM_CNTL); 1145 1.1 riastrad 1146 1.1 riastrad /* enable the rom */ 1147 1.1 riastrad WREG32(R600_BUS_CNTL, (bus_cntl & ~R600_BIOS_ROM_DIS)); 1148 1.1 riastrad if (adev->mode_info.num_crtc) { 1149 1.1 riastrad /* Disable VGA mode */ 1150 1.1 riastrad WREG32(AVIVO_D1VGA_CONTROL, 1151 1.1 riastrad (d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | 1152 1.1 riastrad AVIVO_DVGA_CONTROL_TIMING_SELECT))); 1153 1.1 riastrad WREG32(AVIVO_D2VGA_CONTROL, 1154 1.1 riastrad (d2vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE | 1155 1.1 riastrad AVIVO_DVGA_CONTROL_TIMING_SELECT))); 1156 1.1 riastrad WREG32(VGA_RENDER_CONTROL, 1157 1.1 riastrad (vga_render_control & C_000300_VGA_VSTATUS_CNTL)); 1158 1.1 riastrad } 1159 1.1 riastrad WREG32(R600_ROM_CNTL, rom_cntl | R600_SCK_OVERWRITE); 1160 1.1 riastrad 1161 1.1 riastrad r = amdgpu_read_bios(adev); 1162 1.1 riastrad 1163 1.1 riastrad /* restore regs */ 1164 1.1 riastrad WREG32(R600_BUS_CNTL, bus_cntl); 1165 1.1 riastrad if (adev->mode_info.num_crtc) { 1166 1.1 riastrad WREG32(AVIVO_D1VGA_CONTROL, d1vga_control); 1167 1.1 riastrad WREG32(AVIVO_D2VGA_CONTROL, d2vga_control); 1168 1.1 riastrad WREG32(VGA_RENDER_CONTROL, vga_render_control); 1169 1.1 riastrad } 1170 1.1 riastrad WREG32(R600_ROM_CNTL, rom_cntl); 1171 1.1 riastrad return r; 1172 1.1 riastrad } 1173 1.1 riastrad 1174 1.1 riastrad #define mmROM_INDEX 0x2A 1175 1.1 riastrad #define mmROM_DATA 0x2B 1176 1.1 riastrad 1177 1.1 riastrad static bool si_read_bios_from_rom(struct amdgpu_device *adev, 1178 1.1 riastrad u8 *bios, u32 length_bytes) 1179 1.1 riastrad { 1180 1.1 riastrad u32 *dw_ptr; 1181 1.1 riastrad u32 i, length_dw; 1182 1.1 riastrad 1183 1.1 riastrad if (bios == NULL) 1184 1.1 riastrad return false; 1185 1.1 riastrad if (length_bytes == 0) 1186 1.1 riastrad return false; 1187 1.1 riastrad /* APU vbios image is part of sbios image */ 1188 1.1 riastrad if (adev->flags & AMD_IS_APU) 1189 1.1 riastrad return false; 1190 1.1 riastrad 1191 1.1 riastrad dw_ptr = (u32 *)bios; 1192 1.1 riastrad length_dw = ALIGN(length_bytes, 4) / 4; 1193 1.1 riastrad /* set rom index to 0 */ 1194 1.1 riastrad WREG32(mmROM_INDEX, 0); 1195 1.1 riastrad for (i = 0; i < length_dw; i++) 1196 1.1 riastrad dw_ptr[i] = RREG32(mmROM_DATA); 1197 1.1 riastrad 1198 1.1 riastrad return true; 1199 1.1 riastrad } 1200 1.1 riastrad 1201 1.1 riastrad //xxx: not implemented 1202 1.1 riastrad static int si_asic_reset(struct amdgpu_device *adev) 1203 1.1 riastrad { 1204 1.1 riastrad return 0; 1205 1.1 riastrad } 1206 1.1 riastrad 1207 1.1 riastrad static bool si_asic_supports_baco(struct amdgpu_device *adev) 1208 1.1 riastrad { 1209 1.1 riastrad return false; 1210 1.1 riastrad } 1211 1.1 riastrad 1212 1.1 riastrad static enum amd_reset_method 1213 1.1 riastrad si_asic_reset_method(struct amdgpu_device *adev) 1214 1.1 riastrad { 1215 1.1 riastrad return AMD_RESET_METHOD_LEGACY; 1216 1.1 riastrad } 1217 1.1 riastrad 1218 1.1 riastrad static u32 si_get_config_memsize(struct amdgpu_device *adev) 1219 1.1 riastrad { 1220 1.1 riastrad return RREG32(mmCONFIG_MEMSIZE); 1221 1.1 riastrad } 1222 1.1 riastrad 1223 1.1 riastrad static void si_vga_set_state(struct amdgpu_device *adev, bool state) 1224 1.1 riastrad { 1225 1.1 riastrad uint32_t temp; 1226 1.1 riastrad 1227 1.1 riastrad temp = RREG32(CONFIG_CNTL); 1228 1.1 riastrad if (state == false) { 1229 1.1 riastrad temp &= ~(1<<0); 1230 1.1 riastrad temp |= (1<<1); 1231 1.1 riastrad } else { 1232 1.1 riastrad temp &= ~(1<<1); 1233 1.1 riastrad } 1234 1.1 riastrad WREG32(CONFIG_CNTL, temp); 1235 1.1 riastrad } 1236 1.1 riastrad 1237 1.1 riastrad static u32 si_get_xclk(struct amdgpu_device *adev) 1238 1.1 riastrad { 1239 1.1 riastrad u32 reference_clock = adev->clock.spll.reference_freq; 1240 1.1 riastrad u32 tmp; 1241 1.1 riastrad 1242 1.1 riastrad tmp = RREG32(CG_CLKPIN_CNTL_2); 1243 1.1 riastrad if (tmp & MUX_TCLK_TO_XCLK) 1244 1.1 riastrad return TCLK; 1245 1.1 riastrad 1246 1.1 riastrad tmp = RREG32(CG_CLKPIN_CNTL); 1247 1.1 riastrad if (tmp & XTALIN_DIVIDE) 1248 1.1 riastrad return reference_clock / 4; 1249 1.1 riastrad 1250 1.1 riastrad return reference_clock; 1251 1.1 riastrad } 1252 1.1 riastrad 1253 1.1 riastrad //xxx:not implemented 1254 1.1 riastrad static int si_set_uvd_clocks(struct amdgpu_device *adev, u32 vclk, u32 dclk) 1255 1.1 riastrad { 1256 1.1 riastrad return 0; 1257 1.1 riastrad } 1258 1.1 riastrad 1259 1.1 riastrad static void si_detect_hw_virtualization(struct amdgpu_device *adev) 1260 1.1 riastrad { 1261 1.1 riastrad if (is_virtual_machine()) /* passthrough mode */ 1262 1.1 riastrad adev->virt.caps |= AMDGPU_PASSTHROUGH_MODE; 1263 1.1 riastrad } 1264 1.1 riastrad 1265 1.1 riastrad static void si_flush_hdp(struct amdgpu_device *adev, struct amdgpu_ring *ring) 1266 1.1 riastrad { 1267 1.1 riastrad if (!ring || !ring->funcs->emit_wreg) { 1268 1.1 riastrad WREG32(mmHDP_MEM_COHERENCY_FLUSH_CNTL, 1); 1269 1.1 riastrad RREG32(mmHDP_MEM_COHERENCY_FLUSH_CNTL); 1270 1.1 riastrad } else { 1271 1.1 riastrad amdgpu_ring_emit_wreg(ring, mmHDP_MEM_COHERENCY_FLUSH_CNTL, 1); 1272 1.1 riastrad } 1273 1.1 riastrad } 1274 1.1 riastrad 1275 1.1 riastrad static void si_invalidate_hdp(struct amdgpu_device *adev, 1276 1.1 riastrad struct amdgpu_ring *ring) 1277 1.1 riastrad { 1278 1.1 riastrad if (!ring || !ring->funcs->emit_wreg) { 1279 1.1 riastrad WREG32(mmHDP_DEBUG0, 1); 1280 1.1 riastrad RREG32(mmHDP_DEBUG0); 1281 1.1 riastrad } else { 1282 1.1 riastrad amdgpu_ring_emit_wreg(ring, mmHDP_DEBUG0, 1); 1283 1.1 riastrad } 1284 1.1 riastrad } 1285 1.1 riastrad 1286 1.1 riastrad static bool si_need_full_reset(struct amdgpu_device *adev) 1287 1.1 riastrad { 1288 1.1 riastrad /* change this when we support soft reset */ 1289 1.1 riastrad return true; 1290 1.1 riastrad } 1291 1.1 riastrad 1292 1.1 riastrad static bool si_need_reset_on_init(struct amdgpu_device *adev) 1293 1.1 riastrad { 1294 1.1 riastrad return false; 1295 1.1 riastrad } 1296 1.1 riastrad 1297 1.1 riastrad static int si_get_pcie_lanes(struct amdgpu_device *adev) 1298 1.1 riastrad { 1299 1.1 riastrad u32 link_width_cntl; 1300 1.1 riastrad 1301 1.1 riastrad if (adev->flags & AMD_IS_APU) 1302 1.1 riastrad return 0; 1303 1.1 riastrad 1304 1.1 riastrad link_width_cntl = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL); 1305 1.1 riastrad 1306 1.1 riastrad switch ((link_width_cntl & LC_LINK_WIDTH_RD_MASK) >> LC_LINK_WIDTH_RD_SHIFT) { 1307 1.1 riastrad case LC_LINK_WIDTH_X1: 1308 1.1 riastrad return 1; 1309 1.1 riastrad case LC_LINK_WIDTH_X2: 1310 1.1 riastrad return 2; 1311 1.1 riastrad case LC_LINK_WIDTH_X4: 1312 1.1 riastrad return 4; 1313 1.1 riastrad case LC_LINK_WIDTH_X8: 1314 1.1 riastrad return 8; 1315 1.1 riastrad case LC_LINK_WIDTH_X0: 1316 1.1 riastrad case LC_LINK_WIDTH_X16: 1317 1.1 riastrad default: 1318 1.1 riastrad return 16; 1319 1.1 riastrad } 1320 1.1 riastrad } 1321 1.1 riastrad 1322 1.1 riastrad static void si_set_pcie_lanes(struct amdgpu_device *adev, int lanes) 1323 1.1 riastrad { 1324 1.1 riastrad u32 link_width_cntl, mask; 1325 1.1 riastrad 1326 1.1 riastrad if (adev->flags & AMD_IS_APU) 1327 1.1 riastrad return; 1328 1.1 riastrad 1329 1.1 riastrad switch (lanes) { 1330 1.1 riastrad case 0: 1331 1.1 riastrad mask = LC_LINK_WIDTH_X0; 1332 1.1 riastrad break; 1333 1.1 riastrad case 1: 1334 1.1 riastrad mask = LC_LINK_WIDTH_X1; 1335 1.1 riastrad break; 1336 1.1 riastrad case 2: 1337 1.1 riastrad mask = LC_LINK_WIDTH_X2; 1338 1.1 riastrad break; 1339 1.1 riastrad case 4: 1340 1.1 riastrad mask = LC_LINK_WIDTH_X4; 1341 1.1 riastrad break; 1342 1.1 riastrad case 8: 1343 1.1 riastrad mask = LC_LINK_WIDTH_X8; 1344 1.1 riastrad break; 1345 1.1 riastrad case 16: 1346 1.1 riastrad mask = LC_LINK_WIDTH_X16; 1347 1.1 riastrad break; 1348 1.1 riastrad default: 1349 1.1 riastrad DRM_ERROR("invalid pcie lane request: %d\n", lanes); 1350 1.1 riastrad return; 1351 1.1 riastrad } 1352 1.1 riastrad 1353 1.1 riastrad link_width_cntl = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL); 1354 1.1 riastrad link_width_cntl &= ~LC_LINK_WIDTH_MASK; 1355 1.1 riastrad link_width_cntl |= mask << LC_LINK_WIDTH_SHIFT; 1356 1.1 riastrad link_width_cntl |= (LC_RECONFIG_NOW | 1357 1.1 riastrad LC_RECONFIG_ARC_MISSING_ESCAPE); 1358 1.1 riastrad 1359 1.1 riastrad WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, link_width_cntl); 1360 1.1 riastrad } 1361 1.1 riastrad 1362 1.1 riastrad static void si_get_pcie_usage(struct amdgpu_device *adev, uint64_t *count0, 1363 1.1 riastrad uint64_t *count1) 1364 1.1 riastrad { 1365 1.1 riastrad uint32_t perfctr = 0; 1366 1.1 riastrad uint64_t cnt0_of, cnt1_of; 1367 1.1 riastrad int tmp; 1368 1.1 riastrad 1369 1.1 riastrad /* This reports 0 on APUs, so return to avoid writing/reading registers 1370 1.1 riastrad * that may or may not be different from their GPU counterparts 1371 1.1 riastrad */ 1372 1.1 riastrad if (adev->flags & AMD_IS_APU) 1373 1.1 riastrad return; 1374 1.1 riastrad 1375 1.1 riastrad /* Set the 2 events that we wish to watch, defined above */ 1376 1.1 riastrad /* Reg 40 is # received msgs, Reg 104 is # of posted requests sent */ 1377 1.1 riastrad perfctr = REG_SET_FIELD(perfctr, PCIE_PERF_CNTL_TXCLK, EVENT0_SEL, 40); 1378 1.1 riastrad perfctr = REG_SET_FIELD(perfctr, PCIE_PERF_CNTL_TXCLK, EVENT1_SEL, 104); 1379 1.1 riastrad 1380 1.1 riastrad /* Write to enable desired perf counters */ 1381 1.1 riastrad WREG32_PCIE(ixPCIE_PERF_CNTL_TXCLK, perfctr); 1382 1.1 riastrad /* Zero out and enable the perf counters 1383 1.1 riastrad * Write 0x5: 1384 1.1 riastrad * Bit 0 = Start all counters(1) 1385 1.1 riastrad * Bit 2 = Global counter reset enable(1) 1386 1.1 riastrad */ 1387 1.1 riastrad WREG32_PCIE(ixPCIE_PERF_COUNT_CNTL, 0x00000005); 1388 1.1 riastrad 1389 1.1 riastrad msleep(1000); 1390 1.1 riastrad 1391 1.1 riastrad /* Load the shadow and disable the perf counters 1392 1.1 riastrad * Write 0x2: 1393 1.1 riastrad * Bit 0 = Stop counters(0) 1394 1.1 riastrad * Bit 1 = Load the shadow counters(1) 1395 1.1 riastrad */ 1396 1.1 riastrad WREG32_PCIE(ixPCIE_PERF_COUNT_CNTL, 0x00000002); 1397 1.1 riastrad 1398 1.1 riastrad /* Read register values to get any >32bit overflow */ 1399 1.1 riastrad tmp = RREG32_PCIE(ixPCIE_PERF_CNTL_TXCLK); 1400 1.1 riastrad cnt0_of = REG_GET_FIELD(tmp, PCIE_PERF_CNTL_TXCLK, COUNTER0_UPPER); 1401 1.1 riastrad cnt1_of = REG_GET_FIELD(tmp, PCIE_PERF_CNTL_TXCLK, COUNTER1_UPPER); 1402 1.1 riastrad 1403 1.1 riastrad /* Get the values and add the overflow */ 1404 1.1 riastrad *count0 = RREG32_PCIE(ixPCIE_PERF_COUNT0_TXCLK) | (cnt0_of << 32); 1405 1.1 riastrad *count1 = RREG32_PCIE(ixPCIE_PERF_COUNT1_TXCLK) | (cnt1_of << 32); 1406 1.1 riastrad } 1407 1.1 riastrad 1408 1.1 riastrad static uint64_t si_get_pcie_replay_count(struct amdgpu_device *adev) 1409 1.1 riastrad { 1410 1.1 riastrad uint64_t nak_r, nak_g; 1411 1.1 riastrad 1412 1.1 riastrad /* Get the number of NAKs received and generated */ 1413 1.1 riastrad nak_r = RREG32_PCIE(ixPCIE_RX_NUM_NAK); 1414 1.1 riastrad nak_g = RREG32_PCIE(ixPCIE_RX_NUM_NAK_GENERATED); 1415 1.1 riastrad 1416 1.1 riastrad /* Add the total number of NAKs, i.e the number of replays */ 1417 1.1 riastrad return (nak_r + nak_g); 1418 1.1 riastrad } 1419 1.1 riastrad 1420 1.1 riastrad static const struct amdgpu_asic_funcs si_asic_funcs = 1421 1.1 riastrad { 1422 1.1 riastrad .read_disabled_bios = &si_read_disabled_bios, 1423 1.1 riastrad .read_bios_from_rom = &si_read_bios_from_rom, 1424 1.1 riastrad .read_register = &si_read_register, 1425 1.1 riastrad .reset = &si_asic_reset, 1426 1.1 riastrad .reset_method = &si_asic_reset_method, 1427 1.1 riastrad .set_vga_state = &si_vga_set_state, 1428 1.1 riastrad .get_xclk = &si_get_xclk, 1429 1.1 riastrad .set_uvd_clocks = &si_set_uvd_clocks, 1430 1.1 riastrad .set_vce_clocks = NULL, 1431 1.1 riastrad .get_pcie_lanes = &si_get_pcie_lanes, 1432 1.1 riastrad .set_pcie_lanes = &si_set_pcie_lanes, 1433 1.1 riastrad .get_config_memsize = &si_get_config_memsize, 1434 1.1 riastrad .flush_hdp = &si_flush_hdp, 1435 1.1 riastrad .invalidate_hdp = &si_invalidate_hdp, 1436 1.1 riastrad .need_full_reset = &si_need_full_reset, 1437 1.1 riastrad .get_pcie_usage = &si_get_pcie_usage, 1438 1.1 riastrad .need_reset_on_init = &si_need_reset_on_init, 1439 1.1 riastrad .get_pcie_replay_count = &si_get_pcie_replay_count, 1440 1.1 riastrad .supports_baco = &si_asic_supports_baco, 1441 1.1 riastrad }; 1442 1.1 riastrad 1443 1.1 riastrad static uint32_t si_get_rev_id(struct amdgpu_device *adev) 1444 1.1 riastrad { 1445 1.1 riastrad return (RREG32(CC_DRM_ID_STRAPS) & CC_DRM_ID_STRAPS__ATI_REV_ID_MASK) 1446 1.1 riastrad >> CC_DRM_ID_STRAPS__ATI_REV_ID__SHIFT; 1447 1.1 riastrad } 1448 1.1 riastrad 1449 1.1 riastrad static int si_common_early_init(void *handle) 1450 1.1 riastrad { 1451 1.1 riastrad struct amdgpu_device *adev = (struct amdgpu_device *)handle; 1452 1.1 riastrad 1453 1.1 riastrad adev->smc_rreg = &si_smc_rreg; 1454 1.1 riastrad adev->smc_wreg = &si_smc_wreg; 1455 1.1 riastrad adev->pcie_rreg = &si_pcie_rreg; 1456 1.1 riastrad adev->pcie_wreg = &si_pcie_wreg; 1457 1.1 riastrad adev->pciep_rreg = &si_pciep_rreg; 1458 1.1 riastrad adev->pciep_wreg = &si_pciep_wreg; 1459 1.1 riastrad adev->uvd_ctx_rreg = NULL; 1460 1.1 riastrad adev->uvd_ctx_wreg = NULL; 1461 1.1 riastrad adev->didt_rreg = NULL; 1462 1.1 riastrad adev->didt_wreg = NULL; 1463 1.1 riastrad 1464 1.1 riastrad adev->asic_funcs = &si_asic_funcs; 1465 1.1 riastrad 1466 1.1 riastrad adev->rev_id = si_get_rev_id(adev); 1467 1.1 riastrad adev->external_rev_id = 0xFF; 1468 1.1 riastrad switch (adev->asic_type) { 1469 1.1 riastrad case CHIP_TAHITI: 1470 1.1 riastrad adev->cg_flags = 1471 1.1 riastrad AMD_CG_SUPPORT_GFX_MGCG | 1472 1.1 riastrad AMD_CG_SUPPORT_GFX_MGLS | 1473 1.1 riastrad /*AMD_CG_SUPPORT_GFX_CGCG |*/ 1474 1.1 riastrad AMD_CG_SUPPORT_GFX_CGLS | 1475 1.1 riastrad AMD_CG_SUPPORT_GFX_CGTS | 1476 1.1 riastrad AMD_CG_SUPPORT_GFX_CP_LS | 1477 1.1 riastrad AMD_CG_SUPPORT_MC_MGCG | 1478 1.1 riastrad AMD_CG_SUPPORT_SDMA_MGCG | 1479 1.1 riastrad AMD_CG_SUPPORT_BIF_LS | 1480 1.1 riastrad AMD_CG_SUPPORT_VCE_MGCG | 1481 1.1 riastrad AMD_CG_SUPPORT_UVD_MGCG | 1482 1.1 riastrad AMD_CG_SUPPORT_HDP_LS | 1483 1.1 riastrad AMD_CG_SUPPORT_HDP_MGCG; 1484 1.1 riastrad adev->pg_flags = 0; 1485 1.1 riastrad adev->external_rev_id = (adev->rev_id == 0) ? 1 : 1486 1.1 riastrad (adev->rev_id == 1) ? 5 : 6; 1487 1.1 riastrad break; 1488 1.1 riastrad case CHIP_PITCAIRN: 1489 1.1 riastrad adev->cg_flags = 1490 1.1 riastrad AMD_CG_SUPPORT_GFX_MGCG | 1491 1.1 riastrad AMD_CG_SUPPORT_GFX_MGLS | 1492 1.1 riastrad /*AMD_CG_SUPPORT_GFX_CGCG |*/ 1493 1.1 riastrad AMD_CG_SUPPORT_GFX_CGLS | 1494 1.1 riastrad AMD_CG_SUPPORT_GFX_CGTS | 1495 1.1 riastrad AMD_CG_SUPPORT_GFX_CP_LS | 1496 1.1 riastrad AMD_CG_SUPPORT_GFX_RLC_LS | 1497 1.1 riastrad AMD_CG_SUPPORT_MC_LS | 1498 1.1 riastrad AMD_CG_SUPPORT_MC_MGCG | 1499 1.1 riastrad AMD_CG_SUPPORT_SDMA_MGCG | 1500 1.1 riastrad AMD_CG_SUPPORT_BIF_LS | 1501 1.1 riastrad AMD_CG_SUPPORT_VCE_MGCG | 1502 1.1 riastrad AMD_CG_SUPPORT_UVD_MGCG | 1503 1.1 riastrad AMD_CG_SUPPORT_HDP_LS | 1504 1.1 riastrad AMD_CG_SUPPORT_HDP_MGCG; 1505 1.1 riastrad adev->pg_flags = 0; 1506 1.1 riastrad adev->external_rev_id = adev->rev_id + 20; 1507 1.1 riastrad break; 1508 1.1 riastrad 1509 1.1 riastrad case CHIP_VERDE: 1510 1.1 riastrad adev->cg_flags = 1511 1.1 riastrad AMD_CG_SUPPORT_GFX_MGCG | 1512 1.1 riastrad AMD_CG_SUPPORT_GFX_MGLS | 1513 1.1 riastrad AMD_CG_SUPPORT_GFX_CGLS | 1514 1.1 riastrad AMD_CG_SUPPORT_GFX_CGTS | 1515 1.1 riastrad AMD_CG_SUPPORT_GFX_CGTS_LS | 1516 1.1 riastrad AMD_CG_SUPPORT_GFX_CP_LS | 1517 1.1 riastrad AMD_CG_SUPPORT_MC_LS | 1518 1.1 riastrad AMD_CG_SUPPORT_MC_MGCG | 1519 1.1 riastrad AMD_CG_SUPPORT_SDMA_MGCG | 1520 1.1 riastrad AMD_CG_SUPPORT_SDMA_LS | 1521 1.1 riastrad AMD_CG_SUPPORT_BIF_LS | 1522 1.1 riastrad AMD_CG_SUPPORT_VCE_MGCG | 1523 1.1 riastrad AMD_CG_SUPPORT_UVD_MGCG | 1524 1.1 riastrad AMD_CG_SUPPORT_HDP_LS | 1525 1.1 riastrad AMD_CG_SUPPORT_HDP_MGCG; 1526 1.1 riastrad adev->pg_flags = 0; 1527 1.1 riastrad //??? 1528 1.1 riastrad adev->external_rev_id = adev->rev_id + 40; 1529 1.1 riastrad break; 1530 1.1 riastrad case CHIP_OLAND: 1531 1.1 riastrad adev->cg_flags = 1532 1.1 riastrad AMD_CG_SUPPORT_GFX_MGCG | 1533 1.1 riastrad AMD_CG_SUPPORT_GFX_MGLS | 1534 1.1 riastrad /*AMD_CG_SUPPORT_GFX_CGCG |*/ 1535 1.1 riastrad AMD_CG_SUPPORT_GFX_CGLS | 1536 1.1 riastrad AMD_CG_SUPPORT_GFX_CGTS | 1537 1.1 riastrad AMD_CG_SUPPORT_GFX_CP_LS | 1538 1.1 riastrad AMD_CG_SUPPORT_GFX_RLC_LS | 1539 1.1 riastrad AMD_CG_SUPPORT_MC_LS | 1540 1.1 riastrad AMD_CG_SUPPORT_MC_MGCG | 1541 1.1 riastrad AMD_CG_SUPPORT_SDMA_MGCG | 1542 1.1 riastrad AMD_CG_SUPPORT_BIF_LS | 1543 1.1 riastrad AMD_CG_SUPPORT_UVD_MGCG | 1544 1.1 riastrad AMD_CG_SUPPORT_HDP_LS | 1545 1.1 riastrad AMD_CG_SUPPORT_HDP_MGCG; 1546 1.1 riastrad adev->pg_flags = 0; 1547 1.1 riastrad adev->external_rev_id = 60; 1548 1.1 riastrad break; 1549 1.1 riastrad case CHIP_HAINAN: 1550 1.1 riastrad adev->cg_flags = 1551 1.1 riastrad AMD_CG_SUPPORT_GFX_MGCG | 1552 1.1 riastrad AMD_CG_SUPPORT_GFX_MGLS | 1553 1.1 riastrad /*AMD_CG_SUPPORT_GFX_CGCG |*/ 1554 1.1 riastrad AMD_CG_SUPPORT_GFX_CGLS | 1555 1.1 riastrad AMD_CG_SUPPORT_GFX_CGTS | 1556 1.1 riastrad AMD_CG_SUPPORT_GFX_CP_LS | 1557 1.1 riastrad AMD_CG_SUPPORT_GFX_RLC_LS | 1558 1.1 riastrad AMD_CG_SUPPORT_MC_LS | 1559 1.1 riastrad AMD_CG_SUPPORT_MC_MGCG | 1560 1.1 riastrad AMD_CG_SUPPORT_SDMA_MGCG | 1561 1.1 riastrad AMD_CG_SUPPORT_BIF_LS | 1562 1.1 riastrad AMD_CG_SUPPORT_HDP_LS | 1563 1.1 riastrad AMD_CG_SUPPORT_HDP_MGCG; 1564 1.1 riastrad adev->pg_flags = 0; 1565 1.1 riastrad adev->external_rev_id = 70; 1566 1.1 riastrad break; 1567 1.1 riastrad 1568 1.1 riastrad default: 1569 1.1 riastrad return -EINVAL; 1570 1.1 riastrad } 1571 1.1 riastrad 1572 1.1 riastrad return 0; 1573 1.1 riastrad } 1574 1.1 riastrad 1575 1.1 riastrad static int si_common_sw_init(void *handle) 1576 1.1 riastrad { 1577 1.1 riastrad return 0; 1578 1.1 riastrad } 1579 1.1 riastrad 1580 1.1 riastrad static int si_common_sw_fini(void *handle) 1581 1.1 riastrad { 1582 1.1 riastrad return 0; 1583 1.1 riastrad } 1584 1.1 riastrad 1585 1.1 riastrad 1586 1.1 riastrad static void si_init_golden_registers(struct amdgpu_device *adev) 1587 1.1 riastrad { 1588 1.1 riastrad switch (adev->asic_type) { 1589 1.1 riastrad case CHIP_TAHITI: 1590 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1591 1.1 riastrad tahiti_golden_registers, 1592 1.1 riastrad ARRAY_SIZE(tahiti_golden_registers)); 1593 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1594 1.1 riastrad tahiti_golden_rlc_registers, 1595 1.1 riastrad ARRAY_SIZE(tahiti_golden_rlc_registers)); 1596 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1597 1.1 riastrad tahiti_mgcg_cgcg_init, 1598 1.1 riastrad ARRAY_SIZE(tahiti_mgcg_cgcg_init)); 1599 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1600 1.1 riastrad tahiti_golden_registers2, 1601 1.1 riastrad ARRAY_SIZE(tahiti_golden_registers2)); 1602 1.1 riastrad break; 1603 1.1 riastrad case CHIP_PITCAIRN: 1604 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1605 1.1 riastrad pitcairn_golden_registers, 1606 1.1 riastrad ARRAY_SIZE(pitcairn_golden_registers)); 1607 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1608 1.1 riastrad pitcairn_golden_rlc_registers, 1609 1.1 riastrad ARRAY_SIZE(pitcairn_golden_rlc_registers)); 1610 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1611 1.1 riastrad pitcairn_mgcg_cgcg_init, 1612 1.1 riastrad ARRAY_SIZE(pitcairn_mgcg_cgcg_init)); 1613 1.1 riastrad break; 1614 1.1 riastrad case CHIP_VERDE: 1615 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1616 1.1 riastrad verde_golden_registers, 1617 1.1 riastrad ARRAY_SIZE(verde_golden_registers)); 1618 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1619 1.1 riastrad verde_golden_rlc_registers, 1620 1.1 riastrad ARRAY_SIZE(verde_golden_rlc_registers)); 1621 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1622 1.1 riastrad verde_mgcg_cgcg_init, 1623 1.1 riastrad ARRAY_SIZE(verde_mgcg_cgcg_init)); 1624 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1625 1.1 riastrad verde_pg_init, 1626 1.1 riastrad ARRAY_SIZE(verde_pg_init)); 1627 1.1 riastrad break; 1628 1.1 riastrad case CHIP_OLAND: 1629 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1630 1.1 riastrad oland_golden_registers, 1631 1.1 riastrad ARRAY_SIZE(oland_golden_registers)); 1632 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1633 1.1 riastrad oland_golden_rlc_registers, 1634 1.1 riastrad ARRAY_SIZE(oland_golden_rlc_registers)); 1635 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1636 1.1 riastrad oland_mgcg_cgcg_init, 1637 1.1 riastrad ARRAY_SIZE(oland_mgcg_cgcg_init)); 1638 1.1 riastrad break; 1639 1.1 riastrad case CHIP_HAINAN: 1640 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1641 1.1 riastrad hainan_golden_registers, 1642 1.1 riastrad ARRAY_SIZE(hainan_golden_registers)); 1643 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1644 1.1 riastrad hainan_golden_registers2, 1645 1.1 riastrad ARRAY_SIZE(hainan_golden_registers2)); 1646 1.1 riastrad amdgpu_device_program_register_sequence(adev, 1647 1.1 riastrad hainan_mgcg_cgcg_init, 1648 1.1 riastrad ARRAY_SIZE(hainan_mgcg_cgcg_init)); 1649 1.1 riastrad break; 1650 1.1 riastrad 1651 1.1 riastrad 1652 1.1 riastrad default: 1653 1.1 riastrad BUG(); 1654 1.1 riastrad } 1655 1.1 riastrad } 1656 1.1 riastrad 1657 1.1 riastrad static void si_pcie_gen3_enable(struct amdgpu_device *adev) 1658 1.1 riastrad { 1659 1.1 riastrad struct pci_dev *root = adev->pdev->bus->self; 1660 1.1 riastrad u32 speed_cntl, current_data_rate; 1661 1.1 riastrad int i; 1662 1.1 riastrad u16 tmp16; 1663 1.1 riastrad 1664 1.1 riastrad if (pci_is_root_bus(adev->pdev->bus)) 1665 1.1 riastrad return; 1666 1.1 riastrad 1667 1.1 riastrad if (amdgpu_pcie_gen2 == 0) 1668 1.1 riastrad return; 1669 1.1 riastrad 1670 1.1 riastrad if (adev->flags & AMD_IS_APU) 1671 1.1 riastrad return; 1672 1.1 riastrad 1673 1.1 riastrad if (!(adev->pm.pcie_gen_mask & (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 | 1674 1.1 riastrad CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3))) 1675 1.1 riastrad return; 1676 1.1 riastrad 1677 1.1 riastrad speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); 1678 1.1 riastrad current_data_rate = (speed_cntl & LC_CURRENT_DATA_RATE_MASK) >> 1679 1.1 riastrad LC_CURRENT_DATA_RATE_SHIFT; 1680 1.1 riastrad if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) { 1681 1.1 riastrad if (current_data_rate == 2) { 1682 1.1 riastrad DRM_INFO("PCIE gen 3 link speeds already enabled\n"); 1683 1.1 riastrad return; 1684 1.1 riastrad } 1685 1.1 riastrad DRM_INFO("enabling PCIE gen 3 link speeds, disable with amdgpu.pcie_gen2=0\n"); 1686 1.1 riastrad } else if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2) { 1687 1.1 riastrad if (current_data_rate == 1) { 1688 1.1 riastrad DRM_INFO("PCIE gen 2 link speeds already enabled\n"); 1689 1.1 riastrad return; 1690 1.1 riastrad } 1691 1.1 riastrad DRM_INFO("enabling PCIE gen 2 link speeds, disable with amdgpu.pcie_gen2=0\n"); 1692 1.1 riastrad } 1693 1.1 riastrad 1694 1.1 riastrad if (!pci_is_pcie(root) || !pci_is_pcie(adev->pdev)) 1695 1.1 riastrad return; 1696 1.1 riastrad 1697 1.1 riastrad if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) { 1698 1.1 riastrad if (current_data_rate != 2) { 1699 1.1 riastrad u16 bridge_cfg, gpu_cfg; 1700 1.1 riastrad u16 bridge_cfg2, gpu_cfg2; 1701 1.1 riastrad u32 max_lw, current_lw, tmp; 1702 1.1 riastrad 1703 1.1 riastrad pcie_capability_read_word(root, PCI_EXP_LNKCTL, 1704 1.1 riastrad &bridge_cfg); 1705 1.1 riastrad pcie_capability_read_word(adev->pdev, PCI_EXP_LNKCTL, 1706 1.1 riastrad &gpu_cfg); 1707 1.1 riastrad 1708 1.1 riastrad tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD; 1709 1.1 riastrad pcie_capability_write_word(root, PCI_EXP_LNKCTL, tmp16); 1710 1.1 riastrad 1711 1.1 riastrad tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD; 1712 1.1 riastrad pcie_capability_write_word(adev->pdev, PCI_EXP_LNKCTL, 1713 1.1 riastrad tmp16); 1714 1.1 riastrad 1715 1.1 riastrad tmp = RREG32_PCIE(PCIE_LC_STATUS1); 1716 1.1 riastrad max_lw = (tmp & LC_DETECTED_LINK_WIDTH_MASK) >> LC_DETECTED_LINK_WIDTH_SHIFT; 1717 1.1 riastrad current_lw = (tmp & LC_OPERATING_LINK_WIDTH_MASK) >> LC_OPERATING_LINK_WIDTH_SHIFT; 1718 1.1 riastrad 1719 1.1 riastrad if (current_lw < max_lw) { 1720 1.1 riastrad tmp = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL); 1721 1.1 riastrad if (tmp & LC_RENEGOTIATION_SUPPORT) { 1722 1.1 riastrad tmp &= ~(LC_LINK_WIDTH_MASK | LC_UPCONFIGURE_DIS); 1723 1.1 riastrad tmp |= (max_lw << LC_LINK_WIDTH_SHIFT); 1724 1.1 riastrad tmp |= LC_UPCONFIGURE_SUPPORT | LC_RENEGOTIATE_EN | LC_RECONFIG_NOW; 1725 1.1 riastrad WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, tmp); 1726 1.1 riastrad } 1727 1.1 riastrad } 1728 1.1 riastrad 1729 1.1 riastrad for (i = 0; i < 10; i++) { 1730 1.1 riastrad pcie_capability_read_word(adev->pdev, 1731 1.1 riastrad PCI_EXP_DEVSTA, 1732 1.1 riastrad &tmp16); 1733 1.1 riastrad if (tmp16 & PCI_EXP_DEVSTA_TRPND) 1734 1.1 riastrad break; 1735 1.1 riastrad 1736 1.1 riastrad pcie_capability_read_word(root, PCI_EXP_LNKCTL, 1737 1.1 riastrad &bridge_cfg); 1738 1.1 riastrad pcie_capability_read_word(adev->pdev, 1739 1.1 riastrad PCI_EXP_LNKCTL, 1740 1.1 riastrad &gpu_cfg); 1741 1.1 riastrad 1742 1.1 riastrad pcie_capability_read_word(root, PCI_EXP_LNKCTL2, 1743 1.1 riastrad &bridge_cfg2); 1744 1.1 riastrad pcie_capability_read_word(adev->pdev, 1745 1.1 riastrad PCI_EXP_LNKCTL2, 1746 1.1 riastrad &gpu_cfg2); 1747 1.1 riastrad 1748 1.1 riastrad tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); 1749 1.1 riastrad tmp |= LC_SET_QUIESCE; 1750 1.1 riastrad WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp); 1751 1.1 riastrad 1752 1.1 riastrad tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); 1753 1.1 riastrad tmp |= LC_REDO_EQ; 1754 1.1 riastrad WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp); 1755 1.1 riastrad 1756 1.1 riastrad mdelay(100); 1757 1.1 riastrad 1758 1.1 riastrad pcie_capability_read_word(root, PCI_EXP_LNKCTL, 1759 1.1 riastrad &tmp16); 1760 1.1 riastrad tmp16 &= ~PCI_EXP_LNKCTL_HAWD; 1761 1.1 riastrad tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD); 1762 1.1 riastrad pcie_capability_write_word(root, PCI_EXP_LNKCTL, 1763 1.1 riastrad tmp16); 1764 1.1 riastrad 1765 1.1 riastrad pcie_capability_read_word(adev->pdev, 1766 1.1 riastrad PCI_EXP_LNKCTL, 1767 1.1 riastrad &tmp16); 1768 1.1 riastrad tmp16 &= ~PCI_EXP_LNKCTL_HAWD; 1769 1.1 riastrad tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD); 1770 1.1 riastrad pcie_capability_write_word(adev->pdev, 1771 1.1 riastrad PCI_EXP_LNKCTL, 1772 1.1 riastrad tmp16); 1773 1.1 riastrad 1774 1.1 riastrad pcie_capability_read_word(root, PCI_EXP_LNKCTL2, 1775 1.1 riastrad &tmp16); 1776 1.1 riastrad tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | 1777 1.1 riastrad PCI_EXP_LNKCTL2_TX_MARGIN); 1778 1.1 riastrad tmp16 |= (bridge_cfg2 & 1779 1.1 riastrad (PCI_EXP_LNKCTL2_ENTER_COMP | 1780 1.1 riastrad PCI_EXP_LNKCTL2_TX_MARGIN)); 1781 1.1 riastrad pcie_capability_write_word(root, 1782 1.1 riastrad PCI_EXP_LNKCTL2, 1783 1.1 riastrad tmp16); 1784 1.1 riastrad 1785 1.1 riastrad pcie_capability_read_word(adev->pdev, 1786 1.1 riastrad PCI_EXP_LNKCTL2, 1787 1.1 riastrad &tmp16); 1788 1.1 riastrad tmp16 &= ~(PCI_EXP_LNKCTL2_ENTER_COMP | 1789 1.1 riastrad PCI_EXP_LNKCTL2_TX_MARGIN); 1790 1.1 riastrad tmp16 |= (gpu_cfg2 & 1791 1.1 riastrad (PCI_EXP_LNKCTL2_ENTER_COMP | 1792 1.1 riastrad PCI_EXP_LNKCTL2_TX_MARGIN)); 1793 1.1 riastrad pcie_capability_write_word(adev->pdev, 1794 1.1 riastrad PCI_EXP_LNKCTL2, 1795 1.1 riastrad tmp16); 1796 1.1 riastrad 1797 1.1 riastrad tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4); 1798 1.1 riastrad tmp &= ~LC_SET_QUIESCE; 1799 1.1 riastrad WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp); 1800 1.1 riastrad } 1801 1.1 riastrad } 1802 1.1 riastrad } 1803 1.1 riastrad 1804 1.1 riastrad speed_cntl |= LC_FORCE_EN_SW_SPEED_CHANGE | LC_FORCE_DIS_HW_SPEED_CHANGE; 1805 1.1 riastrad speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE; 1806 1.1 riastrad WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); 1807 1.1 riastrad 1808 1.1 riastrad pcie_capability_read_word(adev->pdev, PCI_EXP_LNKCTL2, &tmp16); 1809 1.1 riastrad tmp16 &= ~PCI_EXP_LNKCTL2_TLS; 1810 1.1 riastrad 1811 1.1 riastrad if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3) 1812 1.1 riastrad tmp16 |= PCI_EXP_LNKCTL2_TLS_8_0GT; /* gen3 */ 1813 1.1 riastrad else if (adev->pm.pcie_gen_mask & CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2) 1814 1.1 riastrad tmp16 |= PCI_EXP_LNKCTL2_TLS_5_0GT; /* gen2 */ 1815 1.1 riastrad else 1816 1.1 riastrad tmp16 |= PCI_EXP_LNKCTL2_TLS_2_5GT; /* gen1 */ 1817 1.1 riastrad pcie_capability_write_word(adev->pdev, PCI_EXP_LNKCTL2, tmp16); 1818 1.1 riastrad 1819 1.1 riastrad speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); 1820 1.1 riastrad speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE; 1821 1.1 riastrad WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl); 1822 1.1 riastrad 1823 1.1 riastrad for (i = 0; i < adev->usec_timeout; i++) { 1824 1.1 riastrad speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL); 1825 1.1 riastrad if ((speed_cntl & LC_INITIATE_LINK_SPEED_CHANGE) == 0) 1826 1.1 riastrad break; 1827 1.1 riastrad udelay(1); 1828 1.1 riastrad } 1829 1.1 riastrad } 1830 1.1 riastrad 1831 1.1 riastrad static inline u32 si_pif_phy0_rreg(struct amdgpu_device *adev, u32 reg) 1832 1.1 riastrad { 1833 1.1 riastrad unsigned long flags; 1834 1.1 riastrad u32 r; 1835 1.1 riastrad 1836 1.1 riastrad spin_lock_irqsave(&adev->pcie_idx_lock, flags); 1837 1.1 riastrad WREG32(EVERGREEN_PIF_PHY0_INDEX, ((reg) & 0xffff)); 1838 1.1 riastrad r = RREG32(EVERGREEN_PIF_PHY0_DATA); 1839 1.1 riastrad spin_unlock_irqrestore(&adev->pcie_idx_lock, flags); 1840 1.1 riastrad return r; 1841 1.1 riastrad } 1842 1.1 riastrad 1843 1.1 riastrad static inline void si_pif_phy0_wreg(struct amdgpu_device *adev, u32 reg, u32 v) 1844 1.1 riastrad { 1845 1.1 riastrad unsigned long flags; 1846 1.1 riastrad 1847 1.1 riastrad spin_lock_irqsave(&adev->pcie_idx_lock, flags); 1848 1.1 riastrad WREG32(EVERGREEN_PIF_PHY0_INDEX, ((reg) & 0xffff)); 1849 1.1 riastrad WREG32(EVERGREEN_PIF_PHY0_DATA, (v)); 1850 1.1 riastrad spin_unlock_irqrestore(&adev->pcie_idx_lock, flags); 1851 1.1 riastrad } 1852 1.1 riastrad 1853 1.1 riastrad static inline u32 si_pif_phy1_rreg(struct amdgpu_device *adev, u32 reg) 1854 1.1 riastrad { 1855 1.1 riastrad unsigned long flags; 1856 1.1 riastrad u32 r; 1857 1.1 riastrad 1858 1.1 riastrad spin_lock_irqsave(&adev->pcie_idx_lock, flags); 1859 1.1 riastrad WREG32(EVERGREEN_PIF_PHY1_INDEX, ((reg) & 0xffff)); 1860 1.1 riastrad r = RREG32(EVERGREEN_PIF_PHY1_DATA); 1861 1.1 riastrad spin_unlock_irqrestore(&adev->pcie_idx_lock, flags); 1862 1.1 riastrad return r; 1863 1.1 riastrad } 1864 1.1 riastrad 1865 1.1 riastrad static inline void si_pif_phy1_wreg(struct amdgpu_device *adev, u32 reg, u32 v) 1866 1.1 riastrad { 1867 1.1 riastrad unsigned long flags; 1868 1.1 riastrad 1869 1.1 riastrad spin_lock_irqsave(&adev->pcie_idx_lock, flags); 1870 1.1 riastrad WREG32(EVERGREEN_PIF_PHY1_INDEX, ((reg) & 0xffff)); 1871 1.1 riastrad WREG32(EVERGREEN_PIF_PHY1_DATA, (v)); 1872 1.1 riastrad spin_unlock_irqrestore(&adev->pcie_idx_lock, flags); 1873 1.1 riastrad } 1874 1.1 riastrad static void si_program_aspm(struct amdgpu_device *adev) 1875 1.1 riastrad { 1876 1.1 riastrad u32 data, orig; 1877 1.1 riastrad bool disable_l0s = false, disable_l1 = false, disable_plloff_in_l1 = false; 1878 1.1 riastrad bool disable_clkreq = false; 1879 1.1 riastrad 1880 1.1 riastrad if (amdgpu_aspm == 0) 1881 1.1 riastrad return; 1882 1.1 riastrad 1883 1.1 riastrad if (adev->flags & AMD_IS_APU) 1884 1.1 riastrad return; 1885 1.1 riastrad orig = data = RREG32_PCIE_PORT(PCIE_LC_N_FTS_CNTL); 1886 1.1 riastrad data &= ~LC_XMIT_N_FTS_MASK; 1887 1.1 riastrad data |= LC_XMIT_N_FTS(0x24) | LC_XMIT_N_FTS_OVERRIDE_EN; 1888 1.1 riastrad if (orig != data) 1889 1.1 riastrad WREG32_PCIE_PORT(PCIE_LC_N_FTS_CNTL, data); 1890 1.1 riastrad 1891 1.1 riastrad orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL3); 1892 1.1 riastrad data |= LC_GO_TO_RECOVERY; 1893 1.1 riastrad if (orig != data) 1894 1.1 riastrad WREG32_PCIE_PORT(PCIE_LC_CNTL3, data); 1895 1.1 riastrad 1896 1.1 riastrad orig = data = RREG32_PCIE(PCIE_P_CNTL); 1897 1.1 riastrad data |= P_IGNORE_EDB_ERR; 1898 1.1 riastrad if (orig != data) 1899 1.1 riastrad WREG32_PCIE(PCIE_P_CNTL, data); 1900 1.1 riastrad 1901 1.1 riastrad orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL); 1902 1.1 riastrad data &= ~(LC_L0S_INACTIVITY_MASK | LC_L1_INACTIVITY_MASK); 1903 1.1 riastrad data |= LC_PMI_TO_L1_DIS; 1904 1.1 riastrad if (!disable_l0s) 1905 1.1 riastrad data |= LC_L0S_INACTIVITY(7); 1906 1.1 riastrad 1907 1.1 riastrad if (!disable_l1) { 1908 1.1 riastrad data |= LC_L1_INACTIVITY(7); 1909 1.1 riastrad data &= ~LC_PMI_TO_L1_DIS; 1910 1.1 riastrad if (orig != data) 1911 1.1 riastrad WREG32_PCIE_PORT(PCIE_LC_CNTL, data); 1912 1.1 riastrad 1913 1.1 riastrad if (!disable_plloff_in_l1) { 1914 1.1 riastrad bool clk_req_support; 1915 1.1 riastrad 1916 1.1 riastrad orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_0); 1917 1.1 riastrad data &= ~(PLL_POWER_STATE_IN_OFF_0_MASK | PLL_POWER_STATE_IN_TXS2_0_MASK); 1918 1.1 riastrad data |= PLL_POWER_STATE_IN_OFF_0(7) | PLL_POWER_STATE_IN_TXS2_0(7); 1919 1.1 riastrad if (orig != data) 1920 1.1 riastrad si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_0, data); 1921 1.1 riastrad 1922 1.1 riastrad orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_1); 1923 1.1 riastrad data &= ~(PLL_POWER_STATE_IN_OFF_1_MASK | PLL_POWER_STATE_IN_TXS2_1_MASK); 1924 1.1 riastrad data |= PLL_POWER_STATE_IN_OFF_1(7) | PLL_POWER_STATE_IN_TXS2_1(7); 1925 1.1 riastrad if (orig != data) 1926 1.1 riastrad si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_1, data); 1927 1.1 riastrad 1928 1.1 riastrad orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_0); 1929 1.1 riastrad data &= ~(PLL_POWER_STATE_IN_OFF_0_MASK | PLL_POWER_STATE_IN_TXS2_0_MASK); 1930 1.1 riastrad data |= PLL_POWER_STATE_IN_OFF_0(7) | PLL_POWER_STATE_IN_TXS2_0(7); 1931 1.1 riastrad if (orig != data) 1932 1.1 riastrad si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_0, data); 1933 1.1 riastrad 1934 1.1 riastrad orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_1); 1935 1.1 riastrad data &= ~(PLL_POWER_STATE_IN_OFF_1_MASK | PLL_POWER_STATE_IN_TXS2_1_MASK); 1936 1.1 riastrad data |= PLL_POWER_STATE_IN_OFF_1(7) | PLL_POWER_STATE_IN_TXS2_1(7); 1937 1.1 riastrad if (orig != data) 1938 1.1 riastrad si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_1, data); 1939 1.1 riastrad 1940 1.1 riastrad if ((adev->asic_type != CHIP_OLAND) && (adev->asic_type != CHIP_HAINAN)) { 1941 1.1 riastrad orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_0); 1942 1.1 riastrad data &= ~PLL_RAMP_UP_TIME_0_MASK; 1943 1.1 riastrad if (orig != data) 1944 1.1 riastrad si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_0, data); 1945 1.1 riastrad 1946 1.1 riastrad orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_1); 1947 1.1 riastrad data &= ~PLL_RAMP_UP_TIME_1_MASK; 1948 1.1 riastrad if (orig != data) 1949 1.1 riastrad si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_1, data); 1950 1.1 riastrad 1951 1.1 riastrad orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_2); 1952 1.1 riastrad data &= ~PLL_RAMP_UP_TIME_2_MASK; 1953 1.1 riastrad if (orig != data) 1954 1.1 riastrad si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_2, data); 1955 1.1 riastrad 1956 1.1 riastrad orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_3); 1957 1.1 riastrad data &= ~PLL_RAMP_UP_TIME_3_MASK; 1958 1.1 riastrad if (orig != data) 1959 1.1 riastrad si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_3, data); 1960 1.1 riastrad 1961 1.1 riastrad orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_0); 1962 1.1 riastrad data &= ~PLL_RAMP_UP_TIME_0_MASK; 1963 1.1 riastrad if (orig != data) 1964 1.1 riastrad si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_0, data); 1965 1.1 riastrad 1966 1.1 riastrad orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_1); 1967 1.1 riastrad data &= ~PLL_RAMP_UP_TIME_1_MASK; 1968 1.1 riastrad if (orig != data) 1969 1.1 riastrad si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_1, data); 1970 1.1 riastrad 1971 1.1 riastrad orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_2); 1972 1.1 riastrad data &= ~PLL_RAMP_UP_TIME_2_MASK; 1973 1.1 riastrad if (orig != data) 1974 1.1 riastrad si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_2, data); 1975 1.1 riastrad 1976 1.1 riastrad orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_3); 1977 1.1 riastrad data &= ~PLL_RAMP_UP_TIME_3_MASK; 1978 1.1 riastrad if (orig != data) 1979 1.1 riastrad si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_3, data); 1980 1.1 riastrad } 1981 1.1 riastrad orig = data = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL); 1982 1.1 riastrad data &= ~LC_DYN_LANES_PWR_STATE_MASK; 1983 1.1 riastrad data |= LC_DYN_LANES_PWR_STATE(3); 1984 1.1 riastrad if (orig != data) 1985 1.1 riastrad WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, data); 1986 1.1 riastrad 1987 1.1 riastrad orig = data = si_pif_phy0_rreg(adev,PB0_PIF_CNTL); 1988 1.1 riastrad data &= ~LS2_EXIT_TIME_MASK; 1989 1.1 riastrad if ((adev->asic_type == CHIP_OLAND) || (adev->asic_type == CHIP_HAINAN)) 1990 1.1 riastrad data |= LS2_EXIT_TIME(5); 1991 1.1 riastrad if (orig != data) 1992 1.1 riastrad si_pif_phy0_wreg(adev,PB0_PIF_CNTL, data); 1993 1.1 riastrad 1994 1.1 riastrad orig = data = si_pif_phy1_rreg(adev,PB1_PIF_CNTL); 1995 1.1 riastrad data &= ~LS2_EXIT_TIME_MASK; 1996 1.1 riastrad if ((adev->asic_type == CHIP_OLAND) || (adev->asic_type == CHIP_HAINAN)) 1997 1.1 riastrad data |= LS2_EXIT_TIME(5); 1998 1.1 riastrad if (orig != data) 1999 1.1 riastrad si_pif_phy1_wreg(adev,PB1_PIF_CNTL, data); 2000 1.1 riastrad 2001 1.1 riastrad if (!disable_clkreq && 2002 1.1 riastrad !pci_is_root_bus(adev->pdev->bus)) { 2003 1.1 riastrad struct pci_dev *root = adev->pdev->bus->self; 2004 1.1 riastrad u32 lnkcap; 2005 1.1 riastrad 2006 1.1 riastrad clk_req_support = false; 2007 1.1 riastrad pcie_capability_read_dword(root, PCI_EXP_LNKCAP, &lnkcap); 2008 1.1 riastrad if (lnkcap & PCI_EXP_LNKCAP_CLKPM) 2009 1.1 riastrad clk_req_support = true; 2010 1.1 riastrad } else { 2011 1.1 riastrad clk_req_support = false; 2012 1.1 riastrad } 2013 1.1 riastrad 2014 1.1 riastrad if (clk_req_support) { 2015 1.1 riastrad orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL2); 2016 1.1 riastrad data |= LC_ALLOW_PDWN_IN_L1 | LC_ALLOW_PDWN_IN_L23; 2017 1.1 riastrad if (orig != data) 2018 1.1 riastrad WREG32_PCIE_PORT(PCIE_LC_CNTL2, data); 2019 1.1 riastrad 2020 1.1 riastrad orig = data = RREG32(THM_CLK_CNTL); 2021 1.1 riastrad data &= ~(CMON_CLK_SEL_MASK | TMON_CLK_SEL_MASK); 2022 1.1 riastrad data |= CMON_CLK_SEL(1) | TMON_CLK_SEL(1); 2023 1.1 riastrad if (orig != data) 2024 1.1 riastrad WREG32(THM_CLK_CNTL, data); 2025 1.1 riastrad 2026 1.1 riastrad orig = data = RREG32(MISC_CLK_CNTL); 2027 1.1 riastrad data &= ~(DEEP_SLEEP_CLK_SEL_MASK | ZCLK_SEL_MASK); 2028 1.1 riastrad data |= DEEP_SLEEP_CLK_SEL(1) | ZCLK_SEL(1); 2029 1.1 riastrad if (orig != data) 2030 1.1 riastrad WREG32(MISC_CLK_CNTL, data); 2031 1.1 riastrad 2032 1.1 riastrad orig = data = RREG32(CG_CLKPIN_CNTL); 2033 1.1 riastrad data &= ~BCLK_AS_XCLK; 2034 1.1 riastrad if (orig != data) 2035 1.1 riastrad WREG32(CG_CLKPIN_CNTL, data); 2036 1.1 riastrad 2037 1.1 riastrad orig = data = RREG32(CG_CLKPIN_CNTL_2); 2038 1.1 riastrad data &= ~FORCE_BIF_REFCLK_EN; 2039 1.1 riastrad if (orig != data) 2040 1.1 riastrad WREG32(CG_CLKPIN_CNTL_2, data); 2041 1.1 riastrad 2042 1.1 riastrad orig = data = RREG32(MPLL_BYPASSCLK_SEL); 2043 1.1 riastrad data &= ~MPLL_CLKOUT_SEL_MASK; 2044 1.1 riastrad data |= MPLL_CLKOUT_SEL(4); 2045 1.1 riastrad if (orig != data) 2046 1.1 riastrad WREG32(MPLL_BYPASSCLK_SEL, data); 2047 1.1 riastrad 2048 1.1 riastrad orig = data = RREG32(SPLL_CNTL_MODE); 2049 1.1 riastrad data &= ~SPLL_REFCLK_SEL_MASK; 2050 1.1 riastrad if (orig != data) 2051 1.1 riastrad WREG32(SPLL_CNTL_MODE, data); 2052 1.1 riastrad } 2053 1.1 riastrad } 2054 1.1 riastrad } else { 2055 1.1 riastrad if (orig != data) 2056 1.1 riastrad WREG32_PCIE_PORT(PCIE_LC_CNTL, data); 2057 1.1 riastrad } 2058 1.1 riastrad 2059 1.1 riastrad orig = data = RREG32_PCIE(PCIE_CNTL2); 2060 1.1 riastrad data |= SLV_MEM_LS_EN | MST_MEM_LS_EN | REPLAY_MEM_LS_EN; 2061 1.1 riastrad if (orig != data) 2062 1.1 riastrad WREG32_PCIE(PCIE_CNTL2, data); 2063 1.1 riastrad 2064 1.1 riastrad if (!disable_l0s) { 2065 1.1 riastrad data = RREG32_PCIE_PORT(PCIE_LC_N_FTS_CNTL); 2066 1.1 riastrad if((data & LC_N_FTS_MASK) == LC_N_FTS_MASK) { 2067 1.1 riastrad data = RREG32_PCIE(PCIE_LC_STATUS1); 2068 1.1 riastrad if ((data & LC_REVERSE_XMIT) && (data & LC_REVERSE_RCVR)) { 2069 1.1 riastrad orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL); 2070 1.1 riastrad data &= ~LC_L0S_INACTIVITY_MASK; 2071 1.1 riastrad if (orig != data) 2072 1.1 riastrad WREG32_PCIE_PORT(PCIE_LC_CNTL, data); 2073 1.1 riastrad } 2074 1.1 riastrad } 2075 1.1 riastrad } 2076 1.1 riastrad } 2077 1.1 riastrad 2078 1.1 riastrad static void si_fix_pci_max_read_req_size(struct amdgpu_device *adev) 2079 1.1 riastrad { 2080 1.1 riastrad int readrq; 2081 1.1 riastrad u16 v; 2082 1.1 riastrad 2083 1.1 riastrad readrq = pcie_get_readrq(adev->pdev); 2084 1.1 riastrad v = ffs(readrq) - 8; 2085 1.1 riastrad if ((v == 0) || (v == 6) || (v == 7)) 2086 1.1 riastrad pcie_set_readrq(adev->pdev, 512); 2087 1.1 riastrad } 2088 1.1 riastrad 2089 1.1 riastrad static int si_common_hw_init(void *handle) 2090 1.1 riastrad { 2091 1.1 riastrad struct amdgpu_device *adev = (struct amdgpu_device *)handle; 2092 1.1 riastrad 2093 1.1 riastrad si_fix_pci_max_read_req_size(adev); 2094 1.1 riastrad si_init_golden_registers(adev); 2095 1.1 riastrad si_pcie_gen3_enable(adev); 2096 1.1 riastrad si_program_aspm(adev); 2097 1.1 riastrad 2098 1.1 riastrad return 0; 2099 1.1 riastrad } 2100 1.1 riastrad 2101 1.1 riastrad static int si_common_hw_fini(void *handle) 2102 1.1 riastrad { 2103 1.1 riastrad return 0; 2104 1.1 riastrad } 2105 1.1 riastrad 2106 1.1 riastrad static int si_common_suspend(void *handle) 2107 1.1 riastrad { 2108 1.1 riastrad struct amdgpu_device *adev = (struct amdgpu_device *)handle; 2109 1.1 riastrad 2110 1.1 riastrad return si_common_hw_fini(adev); 2111 1.1 riastrad } 2112 1.1 riastrad 2113 1.1 riastrad static int si_common_resume(void *handle) 2114 1.1 riastrad { 2115 1.1 riastrad struct amdgpu_device *adev = (struct amdgpu_device *)handle; 2116 1.1 riastrad 2117 1.1 riastrad return si_common_hw_init(adev); 2118 1.1 riastrad } 2119 1.1 riastrad 2120 1.1 riastrad static bool si_common_is_idle(void *handle) 2121 1.1 riastrad { 2122 1.1 riastrad return true; 2123 1.1 riastrad } 2124 1.1 riastrad 2125 1.1 riastrad static int si_common_wait_for_idle(void *handle) 2126 1.1 riastrad { 2127 1.1 riastrad return 0; 2128 1.1 riastrad } 2129 1.1 riastrad 2130 1.1 riastrad static int si_common_soft_reset(void *handle) 2131 1.1 riastrad { 2132 1.1 riastrad return 0; 2133 1.1 riastrad } 2134 1.1 riastrad 2135 1.1 riastrad static int si_common_set_clockgating_state(void *handle, 2136 1.1 riastrad enum amd_clockgating_state state) 2137 1.1 riastrad { 2138 1.1 riastrad return 0; 2139 1.1 riastrad } 2140 1.1 riastrad 2141 1.1 riastrad static int si_common_set_powergating_state(void *handle, 2142 1.1 riastrad enum amd_powergating_state state) 2143 1.1 riastrad { 2144 1.1 riastrad return 0; 2145 1.1 riastrad } 2146 1.1 riastrad 2147 1.1 riastrad static const struct amd_ip_funcs si_common_ip_funcs = { 2148 1.1 riastrad .name = "si_common", 2149 1.1 riastrad .early_init = si_common_early_init, 2150 1.1 riastrad .late_init = NULL, 2151 1.1 riastrad .sw_init = si_common_sw_init, 2152 1.1 riastrad .sw_fini = si_common_sw_fini, 2153 1.1 riastrad .hw_init = si_common_hw_init, 2154 1.1 riastrad .hw_fini = si_common_hw_fini, 2155 1.1 riastrad .suspend = si_common_suspend, 2156 1.1 riastrad .resume = si_common_resume, 2157 1.1 riastrad .is_idle = si_common_is_idle, 2158 1.1 riastrad .wait_for_idle = si_common_wait_for_idle, 2159 1.1 riastrad .soft_reset = si_common_soft_reset, 2160 1.1 riastrad .set_clockgating_state = si_common_set_clockgating_state, 2161 1.1 riastrad .set_powergating_state = si_common_set_powergating_state, 2162 1.1 riastrad }; 2163 1.1 riastrad 2164 1.1 riastrad static const struct amdgpu_ip_block_version si_common_ip_block = 2165 1.1 riastrad { 2166 1.1 riastrad .type = AMD_IP_BLOCK_TYPE_COMMON, 2167 1.1 riastrad .major = 1, 2168 1.1 riastrad .minor = 0, 2169 1.1 riastrad .rev = 0, 2170 1.1 riastrad .funcs = &si_common_ip_funcs, 2171 1.1 riastrad }; 2172 1.1 riastrad 2173 1.1 riastrad int si_set_ip_blocks(struct amdgpu_device *adev) 2174 1.1 riastrad { 2175 1.1 riastrad si_detect_hw_virtualization(adev); 2176 1.1 riastrad 2177 1.1 riastrad switch (adev->asic_type) { 2178 1.1 riastrad case CHIP_VERDE: 2179 1.1 riastrad case CHIP_TAHITI: 2180 1.1 riastrad case CHIP_PITCAIRN: 2181 1.1 riastrad amdgpu_device_ip_block_add(adev, &si_common_ip_block); 2182 1.1 riastrad amdgpu_device_ip_block_add(adev, &gmc_v6_0_ip_block); 2183 1.1 riastrad amdgpu_device_ip_block_add(adev, &si_ih_ip_block); 2184 1.1 riastrad amdgpu_device_ip_block_add(adev, &gfx_v6_0_ip_block); 2185 1.1 riastrad amdgpu_device_ip_block_add(adev, &si_dma_ip_block); 2186 1.1 riastrad amdgpu_device_ip_block_add(adev, &si_smu_ip_block); 2187 1.1 riastrad if (adev->enable_virtual_display) 2188 1.1 riastrad amdgpu_device_ip_block_add(adev, &dce_virtual_ip_block); 2189 1.1 riastrad else 2190 1.1 riastrad amdgpu_device_ip_block_add(adev, &dce_v6_0_ip_block); 2191 1.1 riastrad /* amdgpu_device_ip_block_add(adev, &uvd_v3_1_ip_block); */ 2192 1.1 riastrad /* amdgpu_device_ip_block_add(adev, &vce_v1_0_ip_block); */ 2193 1.1 riastrad break; 2194 1.1 riastrad case CHIP_OLAND: 2195 1.1 riastrad amdgpu_device_ip_block_add(adev, &si_common_ip_block); 2196 1.1 riastrad amdgpu_device_ip_block_add(adev, &gmc_v6_0_ip_block); 2197 1.1 riastrad amdgpu_device_ip_block_add(adev, &si_ih_ip_block); 2198 1.1 riastrad amdgpu_device_ip_block_add(adev, &gfx_v6_0_ip_block); 2199 1.1 riastrad amdgpu_device_ip_block_add(adev, &si_dma_ip_block); 2200 1.1 riastrad amdgpu_device_ip_block_add(adev, &si_smu_ip_block); 2201 1.1 riastrad if (adev->enable_virtual_display) 2202 1.1 riastrad amdgpu_device_ip_block_add(adev, &dce_virtual_ip_block); 2203 1.1 riastrad else 2204 1.1 riastrad amdgpu_device_ip_block_add(adev, &dce_v6_4_ip_block); 2205 1.1 riastrad 2206 1.1 riastrad /* amdgpu_device_ip_block_add(adev, &uvd_v3_1_ip_block); */ 2207 1.1 riastrad /* amdgpu_device_ip_block_add(adev, &vce_v1_0_ip_block); */ 2208 1.1 riastrad break; 2209 1.1 riastrad case CHIP_HAINAN: 2210 1.1 riastrad amdgpu_device_ip_block_add(adev, &si_common_ip_block); 2211 1.1 riastrad amdgpu_device_ip_block_add(adev, &gmc_v6_0_ip_block); 2212 1.1 riastrad amdgpu_device_ip_block_add(adev, &si_ih_ip_block); 2213 1.1 riastrad amdgpu_device_ip_block_add(adev, &gfx_v6_0_ip_block); 2214 1.1 riastrad amdgpu_device_ip_block_add(adev, &si_dma_ip_block); 2215 1.1 riastrad amdgpu_device_ip_block_add(adev, &si_smu_ip_block); 2216 1.1 riastrad if (adev->enable_virtual_display) 2217 1.1 riastrad amdgpu_device_ip_block_add(adev, &dce_virtual_ip_block); 2218 1.1 riastrad break; 2219 1.1 riastrad default: 2220 1.1 riastrad BUG(); 2221 1.1 riastrad } 2222 1.1 riastrad return 0; 2223 1.1 riastrad } 2224 1.1 riastrad 2225