blob: 9bf7afb2f74ef857699dad2d7a56f65eaab45875 [file] [log] [blame]
Ken Wang62a37552016-01-19 14:08:49 +08001/*
2 * Copyright 2015 Advanced Micro Devices, Inc.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 *
22 */
23
24#include <linux/firmware.h>
25#include <linux/slab.h>
26#include <linux/module.h>
27#include "drmP.h"
28#include "amdgpu.h"
29#include "amdgpu_atombios.h"
30#include "amdgpu_ih.h"
31#include "amdgpu_uvd.h"
32#include "amdgpu_vce.h"
33#include "atom.h"
34#include "amdgpu_powerplay.h"
35#include "si/sid.h"
36#include "si_ih.h"
37#include "gfx_v6_0.h"
38#include "gmc_v6_0.h"
39#include "si_dma.h"
40#include "dce_v6_0.h"
41#include "si.h"
Alex Deucher2120df42016-10-13 16:01:18 -040042#include "dce_virtual.h"
Tom St Denis78bbe772016-12-16 08:08:27 -050043#include "gca/gfx_6_0_d.h"
44#include "oss/oss_1_0_d.h"
45#include "gmc/gmc_6_0_d.h"
46#include "dce/dce_6_0_d.h"
47#include "uvd/uvd_4_0_d.h"
Ken Wang62a37552016-01-19 14:08:49 +080048
49static const u32 tahiti_golden_registers[] =
50{
Tom St Denis78bbe772016-12-16 08:08:27 -050051 mmAZALIA_SCLK_CONTROL, 0x00000030, 0x00000011,
52 mmCB_HW_CONTROL, 0x00010000, 0x00018208,
53 mmDB_DEBUG, 0xffffffff, 0x00000000,
54 mmDB_DEBUG2, 0xf00fffff, 0x00000400,
55 mmDB_DEBUG3, 0x0002021c, 0x00020200,
56 mmDCI_CLK_CNTL, 0x00000080, 0x00000000,
Flora Cui7c0a7052016-12-14 14:35:49 +080057 0x340c, 0x000000c0, 0x00800040,
58 0x360c, 0x000000c0, 0x00800040,
Tom St Denis78bbe772016-12-16 08:08:27 -050059 mmFBC_DEBUG_COMP, 0x000000f0, 0x00000070,
60 mmFBC_MISC, 0x00200000, 0x50100000,
61 mmDIG0_HDMI_CONTROL, 0x31000311, 0x00000011,
62 mmMC_ARB_WTM_CNTL_RD, 0x00000003, 0x000007ff,
63 mmMC_XPB_P2P_BAR_CFG, 0x000007ff, 0x00000000,
64 mmPA_CL_ENHANCE, 0xf000001f, 0x00000007,
65 mmPA_SC_FORCE_EOV_MAX_CNTS, 0xffffffff, 0x00ffffff,
66 mmPA_SC_LINE_STIPPLE_STATE, 0x0000ff0f, 0x00000000,
67 mmPA_SC_MODE_CNTL_1, 0x07ffffff, 0x4e000000,
68 mmPA_SC_RASTER_CONFIG, 0x3f3f3fff, 0x2a00126a,
Flora Cui7c0a7052016-12-14 14:35:49 +080069 0x000c, 0xffffffff, 0x0040,
Ken Wang62a37552016-01-19 14:08:49 +080070 0x000d, 0x00000040, 0x00004040,
Tom St Denis78bbe772016-12-16 08:08:27 -050071 mmSPI_CONFIG_CNTL, 0x07ffffff, 0x03000000,
72 mmSQ_DED_CNT, 0x01ff1f3f, 0x00000000,
73 mmSQ_SEC_CNT, 0x01ff1f3f, 0x00000000,
74 mmSX_DEBUG_1, 0x0000007f, 0x00000020,
75 mmTA_CNTL_AUX, 0x00010000, 0x00010000,
76 mmTCP_ADDR_CONFIG, 0x00000200, 0x000002fb,
77 mmTCP_CHAN_STEER_HI, 0xffffffff, 0x0000543b,
78 mmTCP_CHAN_STEER_LO, 0xffffffff, 0xa9210876,
79 mmVGT_FIFO_DEPTHS, 0xffffffff, 0x000fff40,
80 mmVGT_GS_VERTEX_REUSE, 0x0000001f, 0x00000010,
81 mmVM_CONTEXT0_CNTL, 0x20000000, 0x20fffed8,
82 mmVM_L2_CG, 0x000c0fc0, 0x000c0400,
83 mmVM_PRT_APERTURE0_LOW_ADDR, 0x0fffffff, 0xffffffff,
84 mmVM_PRT_APERTURE1_LOW_ADDR, 0x0fffffff, 0x0fffffff,
85 mmVM_PRT_APERTURE2_LOW_ADDR, 0x0fffffff, 0x0fffffff,
86 mmVM_PRT_APERTURE3_LOW_ADDR, 0x0fffffff, 0x0fffffff,
Ken Wang62a37552016-01-19 14:08:49 +080087};
88
89static const u32 tahiti_golden_registers2[] =
90{
Tom St Denis78bbe772016-12-16 08:08:27 -050091 mmMCIF_MEM_CONTROL, 0x00000001, 0x00000001,
Ken Wang62a37552016-01-19 14:08:49 +080092};
93
94static const u32 tahiti_golden_rlc_registers[] =
95{
Tom St Denis78bbe772016-12-16 08:08:27 -050096 mmGB_ADDR_CONFIG, 0xffffffff, 0x12011003,
97 mmRLC_LB_PARAMS, 0xffffffff, 0x00601005,
Ken Wang62a37552016-01-19 14:08:49 +080098 0x311f, 0xffffffff, 0x10104040,
99 0x3122, 0xffffffff, 0x0100000a,
Tom St Denis78bbe772016-12-16 08:08:27 -0500100 mmRLC_LB_CNTR_MAX, 0xffffffff, 0x00000800,
101 mmRLC_LB_CNTL, 0xffffffff, 0x800000f4,
102 mmUVD_CGC_GATE, 0x00000008, 0x00000000,
Ken Wang62a37552016-01-19 14:08:49 +0800103};
104
105static const u32 pitcairn_golden_registers[] =
106{
Tom St Denis78bbe772016-12-16 08:08:27 -0500107 mmAZALIA_SCLK_CONTROL, 0x00000030, 0x00000011,
108 mmCB_HW_CONTROL, 0x00010000, 0x00018208,
109 mmDB_DEBUG, 0xffffffff, 0x00000000,
110 mmDB_DEBUG2, 0xf00fffff, 0x00000400,
111 mmDB_DEBUG3, 0x0002021c, 0x00020200,
112 mmDCI_CLK_CNTL, 0x00000080, 0x00000000,
Ken Wang62a37552016-01-19 14:08:49 +0800113 0x340c, 0x000300c0, 0x00800040,
114 0x360c, 0x000300c0, 0x00800040,
Tom St Denis78bbe772016-12-16 08:08:27 -0500115 mmFBC_DEBUG_COMP, 0x000000f0, 0x00000070,
116 mmFBC_MISC, 0x00200000, 0x50100000,
117 mmDIG0_HDMI_CONTROL, 0x31000311, 0x00000011,
118 mmMC_SEQ_PMG_PG_HWCNTL, 0x00073ffe, 0x000022a2,
119 mmMC_XPB_P2P_BAR_CFG, 0x000007ff, 0x00000000,
120 mmPA_CL_ENHANCE, 0xf000001f, 0x00000007,
121 mmPA_SC_FORCE_EOV_MAX_CNTS, 0xffffffff, 0x00ffffff,
122 mmPA_SC_LINE_STIPPLE_STATE, 0x0000ff0f, 0x00000000,
123 mmPA_SC_MODE_CNTL_1, 0x07ffffff, 0x4e000000,
124 mmPA_SC_RASTER_CONFIG, 0x3f3f3fff, 0x2a00126a,
Flora Cui1245a692016-12-15 15:29:38 +0800125 0x000c, 0xffffffff, 0x0040,
Ken Wang62a37552016-01-19 14:08:49 +0800126 0x000d, 0x00000040, 0x00004040,
Tom St Denis78bbe772016-12-16 08:08:27 -0500127 mmSPI_CONFIG_CNTL, 0x07ffffff, 0x03000000,
128 mmSX_DEBUG_1, 0x0000007f, 0x00000020,
129 mmTA_CNTL_AUX, 0x00010000, 0x00010000,
130 mmTCP_ADDR_CONFIG, 0x000003ff, 0x000000f7,
131 mmTCP_CHAN_STEER_HI, 0xffffffff, 0x00000000,
132 mmTCP_CHAN_STEER_LO, 0xffffffff, 0x32761054,
133 mmVGT_GS_VERTEX_REUSE, 0x0000001f, 0x00000010,
134 mmVM_L2_CG, 0x000c0fc0, 0x000c0400,
135 mmVM_PRT_APERTURE0_LOW_ADDR, 0x0fffffff, 0xffffffff,
136 mmVM_PRT_APERTURE1_LOW_ADDR, 0x0fffffff, 0x0fffffff,
137 mmVM_PRT_APERTURE2_LOW_ADDR, 0x0fffffff, 0x0fffffff,
138 mmVM_PRT_APERTURE3_LOW_ADDR, 0x0fffffff, 0x0fffffff,
Ken Wang62a37552016-01-19 14:08:49 +0800139};
140
141static const u32 pitcairn_golden_rlc_registers[] =
142{
Tom St Denis78bbe772016-12-16 08:08:27 -0500143 mmGB_ADDR_CONFIG, 0xffffffff, 0x12011003,
144 mmRLC_LB_PARAMS, 0xffffffff, 0x00601004,
Ken Wang62a37552016-01-19 14:08:49 +0800145 0x311f, 0xffffffff, 0x10102020,
146 0x3122, 0xffffffff, 0x01000020,
Tom St Denis78bbe772016-12-16 08:08:27 -0500147 mmRLC_LB_CNTR_MAX, 0xffffffff, 0x00000800,
148 mmRLC_LB_CNTL, 0xffffffff, 0x800000a4,
Ken Wang62a37552016-01-19 14:08:49 +0800149};
150
151static const u32 verde_pg_init[] =
152{
Tom St Denis78bbe772016-12-16 08:08:27 -0500153 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x40000,
154 mmGMCON_PGFSM_CONFIG, 0xffffffff, 0x200010ff,
155 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
156 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
157 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
158 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
159 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
160 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x7007,
161 mmGMCON_PGFSM_CONFIG, 0xffffffff, 0x300010ff,
162 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
163 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
164 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
165 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
166 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
167 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x400000,
168 mmGMCON_PGFSM_CONFIG, 0xffffffff, 0x100010ff,
169 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
170 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
171 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
172 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
173 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
174 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x120200,
175 mmGMCON_PGFSM_CONFIG, 0xffffffff, 0x500010ff,
176 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
177 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
178 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
179 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
180 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
181 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x1e1e16,
182 mmGMCON_PGFSM_CONFIG, 0xffffffff, 0x600010ff,
183 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
184 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
185 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
186 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
187 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
188 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x171f1e,
189 mmGMCON_PGFSM_CONFIG, 0xffffffff, 0x700010ff,
190 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
191 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
192 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
193 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
194 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
195 mmGMCON_PGFSM_WRITE, 0xffffffff, 0x0,
196 mmGMCON_PGFSM_CONFIG, 0xffffffff, 0x9ff,
197 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x0,
198 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x10000800,
199 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xf,
200 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xf,
201 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x4,
202 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x1000051e,
203 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xffff,
204 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xffff,
205 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x8,
206 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x80500,
207 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x12,
208 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x9050c,
209 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x1d,
210 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xb052c,
211 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x2a,
212 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x1053e,
213 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x2d,
214 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x10546,
215 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x30,
216 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xa054e,
217 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x3c,
218 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x1055f,
219 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x3f,
220 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x10567,
221 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x42,
222 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x1056f,
223 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x45,
224 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x10572,
225 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x48,
226 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x20575,
227 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x4c,
228 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x190801,
229 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x67,
230 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x1082a,
231 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x6a,
232 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x1b082d,
233 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x87,
234 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x310851,
235 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xba,
236 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x891,
237 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xbc,
238 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x893,
239 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xbe,
240 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x20895,
241 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xc2,
242 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x20899,
243 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xc6,
244 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x2089d,
245 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xca,
246 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x8a1,
247 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xcc,
248 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x8a3,
249 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xce,
250 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x308a5,
251 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0xd3,
252 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x6d08cd,
253 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x142,
254 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x2000095a,
255 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x1,
256 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x144,
257 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x301f095b,
258 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x165,
259 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xc094d,
260 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x173,
261 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xf096d,
262 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x184,
263 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x15097f,
264 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x19b,
265 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xc0998,
266 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x1a9,
267 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x409a7,
268 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x1af,
269 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0xcdc,
270 mmGMCON_RENG_RAM_INDEX, 0xffffffff, 0x1b1,
271 mmGMCON_RENG_RAM_DATA, 0xffffffff, 0x800,
272 mmGMCON_RENG_EXECUTE, 0xffffffff, 0x6c9b2000,
273 mmGMCON_MISC2, 0xfc00, 0x2000,
274 mmGMCON_MISC3, 0xffffffff, 0xfc0,
275 mmMC_PMG_AUTO_CFG, 0x00000100, 0x100,
Ken Wang62a37552016-01-19 14:08:49 +0800276};
277
278static const u32 verde_golden_rlc_registers[] =
279{
Tom St Denis78bbe772016-12-16 08:08:27 -0500280 mmGB_ADDR_CONFIG, 0xffffffff, 0x02010002,
281 mmRLC_LB_PARAMS, 0xffffffff, 0x033f1005,
Ken Wang62a37552016-01-19 14:08:49 +0800282 0x311f, 0xffffffff, 0x10808020,
283 0x3122, 0xffffffff, 0x00800008,
Tom St Denis78bbe772016-12-16 08:08:27 -0500284 mmRLC_LB_CNTR_MAX, 0xffffffff, 0x00001000,
285 mmRLC_LB_CNTL, 0xffffffff, 0x80010014,
Ken Wang62a37552016-01-19 14:08:49 +0800286};
287
288static const u32 verde_golden_registers[] =
289{
Tom St Denis78bbe772016-12-16 08:08:27 -0500290 mmAZALIA_SCLK_CONTROL, 0x00000030, 0x00000011,
291 mmCB_HW_CONTROL, 0x00010000, 0x00018208,
292 mmDB_DEBUG, 0xffffffff, 0x00000000,
293 mmDB_DEBUG2, 0xf00fffff, 0x00000400,
294 mmDB_DEBUG3, 0x0002021c, 0x00020200,
295 mmDCI_CLK_CNTL, 0x00000080, 0x00000000,
Ken Wang62a37552016-01-19 14:08:49 +0800296 0x340c, 0x000300c0, 0x00800040,
Ken Wang62a37552016-01-19 14:08:49 +0800297 0x360c, 0x000300c0, 0x00800040,
Tom St Denis78bbe772016-12-16 08:08:27 -0500298 mmFBC_DEBUG_COMP, 0x000000f0, 0x00000070,
299 mmFBC_MISC, 0x00200000, 0x50100000,
300 mmDIG0_HDMI_CONTROL, 0x31000311, 0x00000011,
301 mmMC_SEQ_PMG_PG_HWCNTL, 0x00073ffe, 0x000022a2,
302 mmMC_XPB_P2P_BAR_CFG, 0x000007ff, 0x00000000,
303 mmPA_CL_ENHANCE, 0xf000001f, 0x00000007,
304 mmPA_SC_FORCE_EOV_MAX_CNTS, 0xffffffff, 0x00ffffff,
305 mmPA_SC_LINE_STIPPLE_STATE, 0x0000ff0f, 0x00000000,
306 mmPA_SC_MODE_CNTL_1, 0x07ffffff, 0x4e000000,
307 mmPA_SC_RASTER_CONFIG, 0x3f3f3fff, 0x0000124a,
Flora Cuidae5c292016-12-15 15:26:22 +0800308 0x000c, 0xffffffff, 0x0040,
Ken Wang62a37552016-01-19 14:08:49 +0800309 0x000d, 0x00000040, 0x00004040,
Tom St Denis78bbe772016-12-16 08:08:27 -0500310 mmSPI_CONFIG_CNTL, 0x07ffffff, 0x03000000,
311 mmSQ_DED_CNT, 0x01ff1f3f, 0x00000000,
312 mmSQ_SEC_CNT, 0x01ff1f3f, 0x00000000,
313 mmSX_DEBUG_1, 0x0000007f, 0x00000020,
314 mmTA_CNTL_AUX, 0x00010000, 0x00010000,
315 mmTCP_ADDR_CONFIG, 0x000003ff, 0x00000003,
316 mmTCP_CHAN_STEER_HI, 0xffffffff, 0x00000000,
317 mmTCP_CHAN_STEER_LO, 0xffffffff, 0x00001032,
318 mmVGT_GS_VERTEX_REUSE, 0x0000001f, 0x00000010,
319 mmVM_L2_CG, 0x000c0fc0, 0x000c0400,
320 mmVM_PRT_APERTURE0_LOW_ADDR, 0x0fffffff, 0xffffffff,
321 mmVM_PRT_APERTURE1_LOW_ADDR, 0x0fffffff, 0x0fffffff,
322 mmVM_PRT_APERTURE2_LOW_ADDR, 0x0fffffff, 0x0fffffff,
323 mmVM_PRT_APERTURE3_LOW_ADDR, 0x0fffffff, 0x0fffffff,
Ken Wang62a37552016-01-19 14:08:49 +0800324};
325
326static const u32 oland_golden_registers[] =
327{
Tom St Denis78bbe772016-12-16 08:08:27 -0500328 mmAZALIA_SCLK_CONTROL, 0x00000030, 0x00000011,
329 mmCB_HW_CONTROL, 0x00010000, 0x00018208,
330 mmDB_DEBUG, 0xffffffff, 0x00000000,
331 mmDB_DEBUG2, 0xf00fffff, 0x00000400,
332 mmDB_DEBUG3, 0x0002021c, 0x00020200,
333 mmDCI_CLK_CNTL, 0x00000080, 0x00000000,
Ken Wang62a37552016-01-19 14:08:49 +0800334 0x340c, 0x000300c0, 0x00800040,
335 0x360c, 0x000300c0, 0x00800040,
Tom St Denis78bbe772016-12-16 08:08:27 -0500336 mmFBC_DEBUG_COMP, 0x000000f0, 0x00000070,
337 mmFBC_MISC, 0x00200000, 0x50100000,
338 mmDIG0_HDMI_CONTROL, 0x31000311, 0x00000011,
339 mmMC_SEQ_PMG_PG_HWCNTL, 0x00073ffe, 0x000022a2,
340 mmMC_XPB_P2P_BAR_CFG, 0x000007ff, 0x00000000,
341 mmPA_CL_ENHANCE, 0xf000001f, 0x00000007,
342 mmPA_SC_FORCE_EOV_MAX_CNTS, 0xffffffff, 0x00ffffff,
343 mmPA_SC_LINE_STIPPLE_STATE, 0x0000ff0f, 0x00000000,
344 mmPA_SC_MODE_CNTL_1, 0x07ffffff, 0x4e000000,
345 mmPA_SC_RASTER_CONFIG, 0x3f3f3fff, 0x00000082,
Flora Cui6b7985e2016-12-15 15:03:43 +0800346 0x000c, 0xffffffff, 0x0040,
Ken Wang62a37552016-01-19 14:08:49 +0800347 0x000d, 0x00000040, 0x00004040,
Tom St Denis78bbe772016-12-16 08:08:27 -0500348 mmSPI_CONFIG_CNTL, 0x07ffffff, 0x03000000,
349 mmSX_DEBUG_1, 0x0000007f, 0x00000020,
350 mmTA_CNTL_AUX, 0x00010000, 0x00010000,
351 mmTCP_ADDR_CONFIG, 0x000003ff, 0x000000f3,
352 mmTCP_CHAN_STEER_HI, 0xffffffff, 0x00000000,
353 mmTCP_CHAN_STEER_LO, 0xffffffff, 0x00003210,
354 mmVGT_GS_VERTEX_REUSE, 0x0000001f, 0x00000010,
355 mmVM_L2_CG, 0x000c0fc0, 0x000c0400,
356 mmVM_PRT_APERTURE0_LOW_ADDR, 0x0fffffff, 0xffffffff,
357 mmVM_PRT_APERTURE1_LOW_ADDR, 0x0fffffff, 0x0fffffff,
358 mmVM_PRT_APERTURE2_LOW_ADDR, 0x0fffffff, 0x0fffffff,
359 mmVM_PRT_APERTURE3_LOW_ADDR, 0x0fffffff, 0x0fffffff,
360
Ken Wang62a37552016-01-19 14:08:49 +0800361};
362
363static const u32 oland_golden_rlc_registers[] =
364{
Tom St Denis78bbe772016-12-16 08:08:27 -0500365 mmGB_ADDR_CONFIG, 0xffffffff, 0x02010002,
366 mmRLC_LB_PARAMS, 0xffffffff, 0x00601005,
Ken Wang62a37552016-01-19 14:08:49 +0800367 0x311f, 0xffffffff, 0x10104040,
368 0x3122, 0xffffffff, 0x0100000a,
Tom St Denis78bbe772016-12-16 08:08:27 -0500369 mmRLC_LB_CNTR_MAX, 0xffffffff, 0x00000800,
370 mmRLC_LB_CNTL, 0xffffffff, 0x800000f4,
Ken Wang62a37552016-01-19 14:08:49 +0800371};
372
373static const u32 hainan_golden_registers[] =
374{
Flora Cuibd27b672016-12-15 14:58:12 +0800375 0x17bc, 0x00000030, 0x00000011,
Tom St Denis78bbe772016-12-16 08:08:27 -0500376 mmCB_HW_CONTROL, 0x00010000, 0x00018208,
377 mmDB_DEBUG, 0xffffffff, 0x00000000,
378 mmDB_DEBUG2, 0xf00fffff, 0x00000400,
379 mmDB_DEBUG3, 0x0002021c, 0x00020200,
Flora Cuibd27b672016-12-15 14:58:12 +0800380 0x031e, 0x00000080, 0x00000000,
381 0x3430, 0xff000fff, 0x00000100,
Ken Wang62a37552016-01-19 14:08:49 +0800382 0x340c, 0x000300c0, 0x00800040,
383 0x3630, 0xff000fff, 0x00000100,
384 0x360c, 0x000300c0, 0x00800040,
Flora Cuibd27b672016-12-15 14:58:12 +0800385 0x16ec, 0x000000f0, 0x00000070,
386 0x16f0, 0x00200000, 0x50100000,
387 0x1c0c, 0x31000311, 0x00000011,
Tom St Denis78bbe772016-12-16 08:08:27 -0500388 mmMC_SEQ_PMG_PG_HWCNTL, 0x00073ffe, 0x000022a2,
389 mmMC_XPB_P2P_BAR_CFG, 0x000007ff, 0x00000000,
390 mmPA_CL_ENHANCE, 0xf000001f, 0x00000007,
391 mmPA_SC_FORCE_EOV_MAX_CNTS, 0xffffffff, 0x00ffffff,
392 mmPA_SC_LINE_STIPPLE_STATE, 0x0000ff0f, 0x00000000,
393 mmPA_SC_MODE_CNTL_1, 0x07ffffff, 0x4e000000,
394 mmPA_SC_RASTER_CONFIG, 0x3f3f3fff, 0x00000000,
Flora Cuibd27b672016-12-15 14:58:12 +0800395 0x000c, 0xffffffff, 0x0040,
Ken Wang62a37552016-01-19 14:08:49 +0800396 0x000d, 0x00000040, 0x00004040,
Tom St Denis78bbe772016-12-16 08:08:27 -0500397 mmSPI_CONFIG_CNTL, 0x03e00000, 0x03600000,
398 mmSX_DEBUG_1, 0x0000007f, 0x00000020,
399 mmTA_CNTL_AUX, 0x00010000, 0x00010000,
400 mmTCP_ADDR_CONFIG, 0x000003ff, 0x000000f1,
401 mmTCP_CHAN_STEER_HI, 0xffffffff, 0x00000000,
402 mmTCP_CHAN_STEER_LO, 0xffffffff, 0x00003210,
403 mmVGT_GS_VERTEX_REUSE, 0x0000001f, 0x00000010,
404 mmVM_L2_CG, 0x000c0fc0, 0x000c0400,
405 mmVM_PRT_APERTURE0_LOW_ADDR, 0x0fffffff, 0xffffffff,
406 mmVM_PRT_APERTURE1_LOW_ADDR, 0x0fffffff, 0x0fffffff,
407 mmVM_PRT_APERTURE2_LOW_ADDR, 0x0fffffff, 0x0fffffff,
408 mmVM_PRT_APERTURE3_LOW_ADDR, 0x0fffffff, 0x0fffffff,
Ken Wang62a37552016-01-19 14:08:49 +0800409};
410
411static const u32 hainan_golden_registers2[] =
412{
Tom St Denis78bbe772016-12-16 08:08:27 -0500413 mmGB_ADDR_CONFIG, 0xffffffff, 0x2011003,
Ken Wang62a37552016-01-19 14:08:49 +0800414};
415
416static const u32 tahiti_mgcg_cgcg_init[] =
417{
Tom St Denis78bbe772016-12-16 08:08:27 -0500418 mmRLC_CGTT_MGCG_OVERRIDE, 0xffffffff, 0xfffffffc,
419 mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000,
420 mmCB_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100,
421 mmCGTT_BCI_CLK_CTRL, 0xffffffff, 0x00000100,
422 mmCGTT_CP_CLK_CTRL, 0xffffffff, 0x00000100,
423 mmCGTT_GDS_CLK_CTRL, 0xffffffff, 0x00000100,
424 mmCGTT_IA_CLK_CTRL, 0xffffffff, 0x06000100,
425 mmCGTT_PA_CLK_CTRL, 0xffffffff, 0x00000100,
426 mmCGTT_PC_CLK_CTRL, 0xffffffff, 0x00000100,
427 mmCGTT_RLC_CLK_CTRL, 0xffffffff, 0x00000100,
428 mmCGTT_SC_CLK_CTRL, 0xffffffff, 0x00000100,
429 mmCGTT_SPI_CLK_CTRL, 0xffffffff, 0x00000100,
430 mmCGTT_SQ_CLK_CTRL, 0xffffffff, 0x00000100,
431 mmCGTT_SQG_CLK_CTRL, 0xffffffff, 0x00000100,
432 mmCGTT_SX_CLK_CTRL0, 0xffffffff, 0x00000100,
433 mmCGTT_SX_CLK_CTRL1, 0xffffffff, 0x00000100,
434 mmCGTT_SX_CLK_CTRL2, 0xffffffff, 0x00000100,
435 mmCGTT_SX_CLK_CTRL3, 0xffffffff, 0x00000100,
436 mmCGTT_TCI_CLK_CTRL, 0xffffffff, 0x00000100,
437 mmCGTT_TCP_CLK_CTRL, 0xffffffff, 0x00000100,
438 mmCGTT_VGT_CLK_CTRL, 0xffffffff, 0x06000100,
439 mmDB_CGTT_CLK_CTRL_0, 0xffffffff, 0x00000100,
440 mmTA_CGTT_CTRL, 0xffffffff, 0x00000100,
441 mmTCA_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100,
442 mmTCC_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100,
443 mmTD_CGTT_CTRL, 0xffffffff, 0x00000100,
444 mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000,
Ken Wang62a37552016-01-19 14:08:49 +0800445 0x2458, 0xffffffff, 0x00010000,
446 0x2459, 0xffffffff, 0x00030002,
447 0x245a, 0xffffffff, 0x00040007,
448 0x245b, 0xffffffff, 0x00060005,
449 0x245c, 0xffffffff, 0x00090008,
450 0x245d, 0xffffffff, 0x00020001,
451 0x245e, 0xffffffff, 0x00040003,
452 0x245f, 0xffffffff, 0x00000007,
453 0x2460, 0xffffffff, 0x00060005,
454 0x2461, 0xffffffff, 0x00090008,
455 0x2462, 0xffffffff, 0x00030002,
456 0x2463, 0xffffffff, 0x00050004,
457 0x2464, 0xffffffff, 0x00000008,
458 0x2465, 0xffffffff, 0x00070006,
459 0x2466, 0xffffffff, 0x000a0009,
460 0x2467, 0xffffffff, 0x00040003,
461 0x2468, 0xffffffff, 0x00060005,
462 0x2469, 0xffffffff, 0x00000009,
463 0x246a, 0xffffffff, 0x00080007,
464 0x246b, 0xffffffff, 0x000b000a,
465 0x246c, 0xffffffff, 0x00050004,
466 0x246d, 0xffffffff, 0x00070006,
467 0x246e, 0xffffffff, 0x0008000b,
468 0x246f, 0xffffffff, 0x000a0009,
469 0x2470, 0xffffffff, 0x000d000c,
470 0x2471, 0xffffffff, 0x00060005,
471 0x2472, 0xffffffff, 0x00080007,
472 0x2473, 0xffffffff, 0x0000000b,
473 0x2474, 0xffffffff, 0x000a0009,
474 0x2475, 0xffffffff, 0x000d000c,
475 0x2476, 0xffffffff, 0x00070006,
476 0x2477, 0xffffffff, 0x00090008,
477 0x2478, 0xffffffff, 0x0000000c,
478 0x2479, 0xffffffff, 0x000b000a,
479 0x247a, 0xffffffff, 0x000e000d,
480 0x247b, 0xffffffff, 0x00080007,
481 0x247c, 0xffffffff, 0x000a0009,
482 0x247d, 0xffffffff, 0x0000000d,
483 0x247e, 0xffffffff, 0x000c000b,
484 0x247f, 0xffffffff, 0x000f000e,
485 0x2480, 0xffffffff, 0x00090008,
486 0x2481, 0xffffffff, 0x000b000a,
487 0x2482, 0xffffffff, 0x000c000f,
488 0x2483, 0xffffffff, 0x000e000d,
489 0x2484, 0xffffffff, 0x00110010,
490 0x2485, 0xffffffff, 0x000a0009,
491 0x2486, 0xffffffff, 0x000c000b,
492 0x2487, 0xffffffff, 0x0000000f,
493 0x2488, 0xffffffff, 0x000e000d,
494 0x2489, 0xffffffff, 0x00110010,
495 0x248a, 0xffffffff, 0x000b000a,
496 0x248b, 0xffffffff, 0x000d000c,
497 0x248c, 0xffffffff, 0x00000010,
498 0x248d, 0xffffffff, 0x000f000e,
499 0x248e, 0xffffffff, 0x00120011,
500 0x248f, 0xffffffff, 0x000c000b,
501 0x2490, 0xffffffff, 0x000e000d,
502 0x2491, 0xffffffff, 0x00000011,
503 0x2492, 0xffffffff, 0x0010000f,
504 0x2493, 0xffffffff, 0x00130012,
505 0x2494, 0xffffffff, 0x000d000c,
506 0x2495, 0xffffffff, 0x000f000e,
507 0x2496, 0xffffffff, 0x00100013,
508 0x2497, 0xffffffff, 0x00120011,
509 0x2498, 0xffffffff, 0x00150014,
510 0x2499, 0xffffffff, 0x000e000d,
511 0x249a, 0xffffffff, 0x0010000f,
512 0x249b, 0xffffffff, 0x00000013,
513 0x249c, 0xffffffff, 0x00120011,
514 0x249d, 0xffffffff, 0x00150014,
515 0x249e, 0xffffffff, 0x000f000e,
516 0x249f, 0xffffffff, 0x00110010,
517 0x24a0, 0xffffffff, 0x00000014,
518 0x24a1, 0xffffffff, 0x00130012,
519 0x24a2, 0xffffffff, 0x00160015,
520 0x24a3, 0xffffffff, 0x0010000f,
521 0x24a4, 0xffffffff, 0x00120011,
522 0x24a5, 0xffffffff, 0x00000015,
523 0x24a6, 0xffffffff, 0x00140013,
524 0x24a7, 0xffffffff, 0x00170016,
Tom St Denis78bbe772016-12-16 08:08:27 -0500525 mmCGTS_SM_CTRL_REG, 0xffffffff, 0x96940200,
526 mmCP_RB_WPTR_POLL_CNTL, 0xffffffff, 0x00900100,
527 mmRLC_GCPM_GENERAL_3, 0xffffffff, 0x00000080,
528 mmRLC_CGCG_CGLS_CTRL, 0xffffffff, 0x0020003f,
Flora Cui7c0a7052016-12-14 14:35:49 +0800529 0x000c, 0xffffffff, 0x0000001c,
530 0x000d, 0x000f0000, 0x000f0000,
531 0x0583, 0xffffffff, 0x00000100,
Tom St Denis78bbe772016-12-16 08:08:27 -0500532 mmXDMA_CLOCK_GATING_CNTL, 0xffffffff, 0x00000100,
533 mmXDMA_MEM_POWER_CNTL, 0x00000101, 0x00000000,
534 mmMC_MEM_POWER_LS, 0xffffffff, 0x00000104,
535 mmMC_CITF_MISC_WR_CG, 0x000c0000, 0x000c0000,
536 mmMC_CITF_MISC_RD_CG, 0x000c0000, 0x000c0000,
537 mmCGTT_DRM_CLK_CTRL0, 0xff000fff, 0x00000100,
Ken Wang62a37552016-01-19 14:08:49 +0800538 0x157a, 0x00000001, 0x00000001,
Tom St Denis78bbe772016-12-16 08:08:27 -0500539 mmHDP_MEM_POWER_LS, 0x00000001, 0x00000001,
540 mmHDP_XDP_CGTT_BLK_CTRL, 0xc0000fff, 0x00000104,
541 mmCP_MEM_SLP_CNTL, 0x00000001, 0x00000001,
Ken Wang62a37552016-01-19 14:08:49 +0800542 0x3430, 0xfffffff0, 0x00000100,
Tom St Denis78bbe772016-12-16 08:08:27 -0500543 0x3630, 0xfffffff0, 0x00000100,
Ken Wang62a37552016-01-19 14:08:49 +0800544};
545static const u32 pitcairn_mgcg_cgcg_init[] =
546{
Tom St Denis78bbe772016-12-16 08:08:27 -0500547 mmRLC_CGTT_MGCG_OVERRIDE, 0xffffffff, 0xfffffffc,
548 mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000,
549 mmCB_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100,
550 mmCGTT_BCI_CLK_CTRL, 0xffffffff, 0x00000100,
551 mmCGTT_CP_CLK_CTRL, 0xffffffff, 0x00000100,
552 mmCGTT_GDS_CLK_CTRL, 0xffffffff, 0x00000100,
553 mmCGTT_IA_CLK_CTRL, 0xffffffff, 0x06000100,
554 mmCGTT_PA_CLK_CTRL, 0xffffffff, 0x00000100,
555 mmCGTT_PC_CLK_CTRL, 0xffffffff, 0x00000100,
556 mmCGTT_RLC_CLK_CTRL, 0xffffffff, 0x00000100,
557 mmCGTT_SC_CLK_CTRL, 0xffffffff, 0x00000100,
558 mmCGTT_SPI_CLK_CTRL, 0xffffffff, 0x00000100,
559 mmCGTT_SQ_CLK_CTRL, 0xffffffff, 0x00000100,
560 mmCGTT_SQG_CLK_CTRL, 0xffffffff, 0x00000100,
561 mmCGTT_SX_CLK_CTRL0, 0xffffffff, 0x00000100,
562 mmCGTT_SX_CLK_CTRL1, 0xffffffff, 0x00000100,
563 mmCGTT_SX_CLK_CTRL2, 0xffffffff, 0x00000100,
564 mmCGTT_SX_CLK_CTRL3, 0xffffffff, 0x00000100,
565 mmCGTT_TCI_CLK_CTRL, 0xffffffff, 0x00000100,
566 mmCGTT_TCP_CLK_CTRL, 0xffffffff, 0x00000100,
567 mmCGTT_VGT_CLK_CTRL, 0xffffffff, 0x06000100,
568 mmDB_CGTT_CLK_CTRL_0, 0xffffffff, 0x00000100,
569 mmTA_CGTT_CTRL, 0xffffffff, 0x00000100,
570 mmTCA_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100,
571 mmTCC_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100,
572 mmTD_CGTT_CTRL, 0xffffffff, 0x00000100,
573 mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000,
Ken Wang62a37552016-01-19 14:08:49 +0800574 0x2458, 0xffffffff, 0x00010000,
575 0x2459, 0xffffffff, 0x00030002,
576 0x245a, 0xffffffff, 0x00040007,
577 0x245b, 0xffffffff, 0x00060005,
578 0x245c, 0xffffffff, 0x00090008,
579 0x245d, 0xffffffff, 0x00020001,
580 0x245e, 0xffffffff, 0x00040003,
581 0x245f, 0xffffffff, 0x00000007,
582 0x2460, 0xffffffff, 0x00060005,
583 0x2461, 0xffffffff, 0x00090008,
584 0x2462, 0xffffffff, 0x00030002,
585 0x2463, 0xffffffff, 0x00050004,
586 0x2464, 0xffffffff, 0x00000008,
587 0x2465, 0xffffffff, 0x00070006,
588 0x2466, 0xffffffff, 0x000a0009,
589 0x2467, 0xffffffff, 0x00040003,
590 0x2468, 0xffffffff, 0x00060005,
591 0x2469, 0xffffffff, 0x00000009,
592 0x246a, 0xffffffff, 0x00080007,
593 0x246b, 0xffffffff, 0x000b000a,
594 0x246c, 0xffffffff, 0x00050004,
595 0x246d, 0xffffffff, 0x00070006,
596 0x246e, 0xffffffff, 0x0008000b,
597 0x246f, 0xffffffff, 0x000a0009,
598 0x2470, 0xffffffff, 0x000d000c,
599 0x2480, 0xffffffff, 0x00090008,
600 0x2481, 0xffffffff, 0x000b000a,
601 0x2482, 0xffffffff, 0x000c000f,
602 0x2483, 0xffffffff, 0x000e000d,
603 0x2484, 0xffffffff, 0x00110010,
604 0x2485, 0xffffffff, 0x000a0009,
605 0x2486, 0xffffffff, 0x000c000b,
606 0x2487, 0xffffffff, 0x0000000f,
607 0x2488, 0xffffffff, 0x000e000d,
608 0x2489, 0xffffffff, 0x00110010,
609 0x248a, 0xffffffff, 0x000b000a,
610 0x248b, 0xffffffff, 0x000d000c,
611 0x248c, 0xffffffff, 0x00000010,
612 0x248d, 0xffffffff, 0x000f000e,
613 0x248e, 0xffffffff, 0x00120011,
614 0x248f, 0xffffffff, 0x000c000b,
615 0x2490, 0xffffffff, 0x000e000d,
616 0x2491, 0xffffffff, 0x00000011,
617 0x2492, 0xffffffff, 0x0010000f,
618 0x2493, 0xffffffff, 0x00130012,
619 0x2494, 0xffffffff, 0x000d000c,
620 0x2495, 0xffffffff, 0x000f000e,
621 0x2496, 0xffffffff, 0x00100013,
622 0x2497, 0xffffffff, 0x00120011,
623 0x2498, 0xffffffff, 0x00150014,
Tom St Denis78bbe772016-12-16 08:08:27 -0500624 mmCGTS_SM_CTRL_REG, 0xffffffff, 0x96940200,
625 mmCP_RB_WPTR_POLL_CNTL, 0xffffffff, 0x00900100,
626 mmRLC_GCPM_GENERAL_3, 0xffffffff, 0x00000080,
627 mmRLC_CGCG_CGLS_CTRL, 0xffffffff, 0x0020003f,
Flora Cui1245a692016-12-15 15:29:38 +0800628 0x000c, 0xffffffff, 0x0000001c,
629 0x000d, 0x000f0000, 0x000f0000,
630 0x0583, 0xffffffff, 0x00000100,
Tom St Denis78bbe772016-12-16 08:08:27 -0500631 mmXDMA_CLOCK_GATING_CNTL, 0xffffffff, 0x00000100,
632 mmXDMA_MEM_POWER_CNTL, 0x00000101, 0x00000000,
633 mmMC_MEM_POWER_LS, 0xffffffff, 0x00000104,
634 mmCGTT_DRM_CLK_CTRL0, 0xff000fff, 0x00000100,
Ken Wang62a37552016-01-19 14:08:49 +0800635 0x157a, 0x00000001, 0x00000001,
Tom St Denis78bbe772016-12-16 08:08:27 -0500636 mmHDP_MEM_POWER_LS, 0x00000001, 0x00000001,
637 mmHDP_XDP_CGTT_BLK_CTRL, 0xc0000fff, 0x00000104,
638 mmCP_MEM_SLP_CNTL, 0x00000001, 0x00000001,
Ken Wang62a37552016-01-19 14:08:49 +0800639 0x3430, 0xfffffff0, 0x00000100,
Tom St Denis78bbe772016-12-16 08:08:27 -0500640 0x3630, 0xfffffff0, 0x00000100,
Ken Wang62a37552016-01-19 14:08:49 +0800641};
Tom St Denis78bbe772016-12-16 08:08:27 -0500642
Ken Wang62a37552016-01-19 14:08:49 +0800643static const u32 verde_mgcg_cgcg_init[] =
644{
Tom St Denis78bbe772016-12-16 08:08:27 -0500645 mmRLC_CGTT_MGCG_OVERRIDE, 0xffffffff, 0xfffffffc,
646 mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000,
647 mmCB_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100,
648 mmCGTT_BCI_CLK_CTRL, 0xffffffff, 0x00000100,
649 mmCGTT_CP_CLK_CTRL, 0xffffffff, 0x00000100,
650 mmCGTT_GDS_CLK_CTRL, 0xffffffff, 0x00000100,
651 mmCGTT_IA_CLK_CTRL, 0xffffffff, 0x06000100,
652 mmCGTT_PA_CLK_CTRL, 0xffffffff, 0x00000100,
653 mmCGTT_PC_CLK_CTRL, 0xffffffff, 0x00000100,
654 mmCGTT_RLC_CLK_CTRL, 0xffffffff, 0x00000100,
655 mmCGTT_SC_CLK_CTRL, 0xffffffff, 0x00000100,
656 mmCGTT_SPI_CLK_CTRL, 0xffffffff, 0x00000100,
657 mmCGTT_SQ_CLK_CTRL, 0xffffffff, 0x00000100,
658 mmCGTT_SQG_CLK_CTRL, 0xffffffff, 0x00000100,
659 mmCGTT_SX_CLK_CTRL0, 0xffffffff, 0x00000100,
660 mmCGTT_SX_CLK_CTRL1, 0xffffffff, 0x00000100,
661 mmCGTT_SX_CLK_CTRL2, 0xffffffff, 0x00000100,
662 mmCGTT_SX_CLK_CTRL3, 0xffffffff, 0x00000100,
663 mmCGTT_TCI_CLK_CTRL, 0xffffffff, 0x00000100,
664 mmCGTT_TCP_CLK_CTRL, 0xffffffff, 0x00000100,
665 mmCGTT_VGT_CLK_CTRL, 0xffffffff, 0x06000100,
666 mmDB_CGTT_CLK_CTRL_0, 0xffffffff, 0x00000100,
667 mmTA_CGTT_CTRL, 0xffffffff, 0x00000100,
668 mmTCA_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100,
669 mmTCC_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100,
670 mmTD_CGTT_CTRL, 0xffffffff, 0x00000100,
671 mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000,
Ken Wang62a37552016-01-19 14:08:49 +0800672 0x2458, 0xffffffff, 0x00010000,
673 0x2459, 0xffffffff, 0x00030002,
674 0x245a, 0xffffffff, 0x00040007,
675 0x245b, 0xffffffff, 0x00060005,
676 0x245c, 0xffffffff, 0x00090008,
677 0x245d, 0xffffffff, 0x00020001,
678 0x245e, 0xffffffff, 0x00040003,
679 0x245f, 0xffffffff, 0x00000007,
680 0x2460, 0xffffffff, 0x00060005,
681 0x2461, 0xffffffff, 0x00090008,
682 0x2462, 0xffffffff, 0x00030002,
683 0x2463, 0xffffffff, 0x00050004,
684 0x2464, 0xffffffff, 0x00000008,
685 0x2465, 0xffffffff, 0x00070006,
686 0x2466, 0xffffffff, 0x000a0009,
687 0x2467, 0xffffffff, 0x00040003,
688 0x2468, 0xffffffff, 0x00060005,
689 0x2469, 0xffffffff, 0x00000009,
690 0x246a, 0xffffffff, 0x00080007,
691 0x246b, 0xffffffff, 0x000b000a,
692 0x246c, 0xffffffff, 0x00050004,
693 0x246d, 0xffffffff, 0x00070006,
694 0x246e, 0xffffffff, 0x0008000b,
695 0x246f, 0xffffffff, 0x000a0009,
696 0x2470, 0xffffffff, 0x000d000c,
697 0x2480, 0xffffffff, 0x00090008,
698 0x2481, 0xffffffff, 0x000b000a,
699 0x2482, 0xffffffff, 0x000c000f,
700 0x2483, 0xffffffff, 0x000e000d,
701 0x2484, 0xffffffff, 0x00110010,
702 0x2485, 0xffffffff, 0x000a0009,
703 0x2486, 0xffffffff, 0x000c000b,
704 0x2487, 0xffffffff, 0x0000000f,
705 0x2488, 0xffffffff, 0x000e000d,
706 0x2489, 0xffffffff, 0x00110010,
707 0x248a, 0xffffffff, 0x000b000a,
708 0x248b, 0xffffffff, 0x000d000c,
709 0x248c, 0xffffffff, 0x00000010,
710 0x248d, 0xffffffff, 0x000f000e,
711 0x248e, 0xffffffff, 0x00120011,
712 0x248f, 0xffffffff, 0x000c000b,
713 0x2490, 0xffffffff, 0x000e000d,
714 0x2491, 0xffffffff, 0x00000011,
715 0x2492, 0xffffffff, 0x0010000f,
716 0x2493, 0xffffffff, 0x00130012,
717 0x2494, 0xffffffff, 0x000d000c,
718 0x2495, 0xffffffff, 0x000f000e,
719 0x2496, 0xffffffff, 0x00100013,
720 0x2497, 0xffffffff, 0x00120011,
721 0x2498, 0xffffffff, 0x00150014,
Tom St Denis78bbe772016-12-16 08:08:27 -0500722 mmCGTS_SM_CTRL_REG, 0xffffffff, 0x96940200,
723 mmCP_RB_WPTR_POLL_CNTL, 0xffffffff, 0x00900100,
724 mmRLC_GCPM_GENERAL_3, 0xffffffff, 0x00000080,
725 mmRLC_CGCG_CGLS_CTRL, 0xffffffff, 0x0020003f,
Flora Cuidae5c292016-12-15 15:26:22 +0800726 0x000c, 0xffffffff, 0x0000001c,
727 0x000d, 0x000f0000, 0x000f0000,
728 0x0583, 0xffffffff, 0x00000100,
Tom St Denis78bbe772016-12-16 08:08:27 -0500729 mmXDMA_CLOCK_GATING_CNTL, 0xffffffff, 0x00000100,
730 mmXDMA_MEM_POWER_CNTL, 0x00000101, 0x00000000,
731 mmMC_MEM_POWER_LS, 0xffffffff, 0x00000104,
732 mmMC_CITF_MISC_WR_CG, 0x000c0000, 0x000c0000,
733 mmMC_CITF_MISC_RD_CG, 0x000c0000, 0x000c0000,
734 mmCGTT_DRM_CLK_CTRL0, 0xff000fff, 0x00000100,
Ken Wang62a37552016-01-19 14:08:49 +0800735 0x157a, 0x00000001, 0x00000001,
Tom St Denis78bbe772016-12-16 08:08:27 -0500736 mmHDP_MEM_POWER_LS, 0x00000001, 0x00000001,
737 mmHDP_XDP_CGTT_BLK_CTRL, 0xc0000fff, 0x00000104,
738 mmCP_MEM_SLP_CNTL, 0x00000001, 0x00000001,
Ken Wang62a37552016-01-19 14:08:49 +0800739 0x3430, 0xfffffff0, 0x00000100,
Tom St Denis78bbe772016-12-16 08:08:27 -0500740 0x3630, 0xfffffff0, 0x00000100,
Ken Wang62a37552016-01-19 14:08:49 +0800741};
Tom St Denis78bbe772016-12-16 08:08:27 -0500742
Ken Wang62a37552016-01-19 14:08:49 +0800743static const u32 oland_mgcg_cgcg_init[] =
744{
Tom St Denis78bbe772016-12-16 08:08:27 -0500745 mmRLC_CGTT_MGCG_OVERRIDE, 0xffffffff, 0xfffffffc,
746 mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000,
747 mmCB_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100,
748 mmCGTT_BCI_CLK_CTRL, 0xffffffff, 0x00000100,
749 mmCGTT_CP_CLK_CTRL, 0xffffffff, 0x00000100,
750 mmCGTT_GDS_CLK_CTRL, 0xffffffff, 0x00000100,
751 mmCGTT_IA_CLK_CTRL, 0xffffffff, 0x06000100,
752 mmCGTT_PA_CLK_CTRL, 0xffffffff, 0x00000100,
753 mmCGTT_PC_CLK_CTRL, 0xffffffff, 0x00000100,
754 mmCGTT_RLC_CLK_CTRL, 0xffffffff, 0x00000100,
755 mmCGTT_SC_CLK_CTRL, 0xffffffff, 0x00000100,
756 mmCGTT_SPI_CLK_CTRL, 0xffffffff, 0x00000100,
757 mmCGTT_SQ_CLK_CTRL, 0xffffffff, 0x00000100,
758 mmCGTT_SQG_CLK_CTRL, 0xffffffff, 0x00000100,
759 mmCGTT_SX_CLK_CTRL0, 0xffffffff, 0x00000100,
760 mmCGTT_SX_CLK_CTRL1, 0xffffffff, 0x00000100,
761 mmCGTT_SX_CLK_CTRL2, 0xffffffff, 0x00000100,
762 mmCGTT_SX_CLK_CTRL3, 0xffffffff, 0x00000100,
763 mmCGTT_TCI_CLK_CTRL, 0xffffffff, 0x00000100,
764 mmCGTT_TCP_CLK_CTRL, 0xffffffff, 0x00000100,
765 mmCGTT_VGT_CLK_CTRL, 0xffffffff, 0x06000100,
766 mmDB_CGTT_CLK_CTRL_0, 0xffffffff, 0x00000100,
767 mmTA_CGTT_CTRL, 0xffffffff, 0x00000100,
768 mmTCA_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100,
769 mmTCC_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100,
770 mmTD_CGTT_CTRL, 0xffffffff, 0x00000100,
771 mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000,
Ken Wang62a37552016-01-19 14:08:49 +0800772 0x2458, 0xffffffff, 0x00010000,
773 0x2459, 0xffffffff, 0x00030002,
774 0x245a, 0xffffffff, 0x00040007,
775 0x245b, 0xffffffff, 0x00060005,
776 0x245c, 0xffffffff, 0x00090008,
777 0x245d, 0xffffffff, 0x00020001,
778 0x245e, 0xffffffff, 0x00040003,
779 0x245f, 0xffffffff, 0x00000007,
780 0x2460, 0xffffffff, 0x00060005,
781 0x2461, 0xffffffff, 0x00090008,
782 0x2462, 0xffffffff, 0x00030002,
783 0x2463, 0xffffffff, 0x00050004,
784 0x2464, 0xffffffff, 0x00000008,
785 0x2465, 0xffffffff, 0x00070006,
786 0x2466, 0xffffffff, 0x000a0009,
787 0x2467, 0xffffffff, 0x00040003,
788 0x2468, 0xffffffff, 0x00060005,
789 0x2469, 0xffffffff, 0x00000009,
790 0x246a, 0xffffffff, 0x00080007,
791 0x246b, 0xffffffff, 0x000b000a,
792 0x246c, 0xffffffff, 0x00050004,
793 0x246d, 0xffffffff, 0x00070006,
794 0x246e, 0xffffffff, 0x0008000b,
795 0x246f, 0xffffffff, 0x000a0009,
796 0x2470, 0xffffffff, 0x000d000c,
797 0x2471, 0xffffffff, 0x00060005,
798 0x2472, 0xffffffff, 0x00080007,
799 0x2473, 0xffffffff, 0x0000000b,
800 0x2474, 0xffffffff, 0x000a0009,
801 0x2475, 0xffffffff, 0x000d000c,
Tom St Denis78bbe772016-12-16 08:08:27 -0500802 mmCGTS_SM_CTRL_REG, 0xffffffff, 0x96940200,
803 mmCP_RB_WPTR_POLL_CNTL, 0xffffffff, 0x00900100,
804 mmRLC_GCPM_GENERAL_3, 0xffffffff, 0x00000080,
805 mmRLC_CGCG_CGLS_CTRL, 0xffffffff, 0x0020003f,
Flora Cui6b7985e2016-12-15 15:03:43 +0800806 0x000c, 0xffffffff, 0x0000001c,
807 0x000d, 0x000f0000, 0x000f0000,
808 0x0583, 0xffffffff, 0x00000100,
Tom St Denis78bbe772016-12-16 08:08:27 -0500809 mmXDMA_CLOCK_GATING_CNTL, 0xffffffff, 0x00000100,
810 mmXDMA_MEM_POWER_CNTL, 0x00000101, 0x00000000,
811 mmMC_MEM_POWER_LS, 0xffffffff, 0x00000104,
812 mmMC_CITF_MISC_WR_CG, 0x000c0000, 0x000c0000,
813 mmMC_CITF_MISC_RD_CG, 0x000c0000, 0x000c0000,
814 mmCGTT_DRM_CLK_CTRL0, 0xff000fff, 0x00000100,
Ken Wang62a37552016-01-19 14:08:49 +0800815 0x157a, 0x00000001, 0x00000001,
Tom St Denis78bbe772016-12-16 08:08:27 -0500816 mmHDP_MEM_POWER_LS, 0x00000001, 0x00000001,
817 mmHDP_XDP_CGTT_BLK_CTRL, 0xc0000fff, 0x00000104,
818 mmCP_MEM_SLP_CNTL, 0x00000001, 0x00000001,
Ken Wang62a37552016-01-19 14:08:49 +0800819 0x3430, 0xfffffff0, 0x00000100,
Tom St Denis78bbe772016-12-16 08:08:27 -0500820 0x3630, 0xfffffff0, 0x00000100,
Ken Wang62a37552016-01-19 14:08:49 +0800821};
Tom St Denis78bbe772016-12-16 08:08:27 -0500822
Ken Wang62a37552016-01-19 14:08:49 +0800823static const u32 hainan_mgcg_cgcg_init[] =
824{
Tom St Denis78bbe772016-12-16 08:08:27 -0500825 mmRLC_CGTT_MGCG_OVERRIDE, 0xffffffff, 0xfffffffc,
826 mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000,
827 mmCB_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100,
828 mmCGTT_BCI_CLK_CTRL, 0xffffffff, 0x00000100,
829 mmCGTT_CP_CLK_CTRL, 0xffffffff, 0x00000100,
830 mmCGTT_GDS_CLK_CTRL, 0xffffffff, 0x00000100,
831 mmCGTT_IA_CLK_CTRL, 0xffffffff, 0x06000100,
832 mmCGTT_PA_CLK_CTRL, 0xffffffff, 0x00000100,
833 mmCGTT_PC_CLK_CTRL, 0xffffffff, 0x00000100,
834 mmCGTT_RLC_CLK_CTRL, 0xffffffff, 0x00000100,
835 mmCGTT_SC_CLK_CTRL, 0xffffffff, 0x00000100,
836 mmCGTT_SPI_CLK_CTRL, 0xffffffff, 0x00000100,
837 mmCGTT_SQ_CLK_CTRL, 0xffffffff, 0x00000100,
838 mmCGTT_SQG_CLK_CTRL, 0xffffffff, 0x00000100,
839 mmCGTT_SX_CLK_CTRL0, 0xffffffff, 0x00000100,
840 mmCGTT_SX_CLK_CTRL1, 0xffffffff, 0x00000100,
841 mmCGTT_SX_CLK_CTRL2, 0xffffffff, 0x00000100,
842 mmCGTT_SX_CLK_CTRL3, 0xffffffff, 0x00000100,
843 mmCGTT_TCI_CLK_CTRL, 0xffffffff, 0x00000100,
844 mmCGTT_TCP_CLK_CTRL, 0xffffffff, 0x00000100,
845 mmCGTT_VGT_CLK_CTRL, 0xffffffff, 0x06000100,
846 mmDB_CGTT_CLK_CTRL_0, 0xffffffff, 0x00000100,
847 mmTA_CGTT_CTRL, 0xffffffff, 0x00000100,
848 mmTCA_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100,
849 mmTCC_CGTT_SCLK_CTRL, 0xffffffff, 0x00000100,
850 mmTD_CGTT_CTRL, 0xffffffff, 0x00000100,
851 mmGRBM_GFX_INDEX, 0xffffffff, 0xe0000000,
Ken Wang62a37552016-01-19 14:08:49 +0800852 0x2458, 0xffffffff, 0x00010000,
853 0x2459, 0xffffffff, 0x00030002,
854 0x245a, 0xffffffff, 0x00040007,
855 0x245b, 0xffffffff, 0x00060005,
856 0x245c, 0xffffffff, 0x00090008,
857 0x245d, 0xffffffff, 0x00020001,
858 0x245e, 0xffffffff, 0x00040003,
859 0x245f, 0xffffffff, 0x00000007,
860 0x2460, 0xffffffff, 0x00060005,
861 0x2461, 0xffffffff, 0x00090008,
862 0x2462, 0xffffffff, 0x00030002,
863 0x2463, 0xffffffff, 0x00050004,
864 0x2464, 0xffffffff, 0x00000008,
865 0x2465, 0xffffffff, 0x00070006,
866 0x2466, 0xffffffff, 0x000a0009,
867 0x2467, 0xffffffff, 0x00040003,
868 0x2468, 0xffffffff, 0x00060005,
869 0x2469, 0xffffffff, 0x00000009,
870 0x246a, 0xffffffff, 0x00080007,
871 0x246b, 0xffffffff, 0x000b000a,
872 0x246c, 0xffffffff, 0x00050004,
873 0x246d, 0xffffffff, 0x00070006,
874 0x246e, 0xffffffff, 0x0008000b,
875 0x246f, 0xffffffff, 0x000a0009,
876 0x2470, 0xffffffff, 0x000d000c,
877 0x2471, 0xffffffff, 0x00060005,
878 0x2472, 0xffffffff, 0x00080007,
879 0x2473, 0xffffffff, 0x0000000b,
880 0x2474, 0xffffffff, 0x000a0009,
881 0x2475, 0xffffffff, 0x000d000c,
Tom St Denis78bbe772016-12-16 08:08:27 -0500882 mmCGTS_SM_CTRL_REG, 0xffffffff, 0x96940200,
883 mmCP_RB_WPTR_POLL_CNTL, 0xffffffff, 0x00900100,
884 mmRLC_GCPM_GENERAL_3, 0xffffffff, 0x00000080,
885 mmRLC_CGCG_CGLS_CTRL, 0xffffffff, 0x0020003f,
Flora Cuibd27b672016-12-15 14:58:12 +0800886 0x000c, 0xffffffff, 0x0000001c,
887 0x000d, 0x000f0000, 0x000f0000,
888 0x0583, 0xffffffff, 0x00000100,
889 0x0409, 0xffffffff, 0x00000100,
Tom St Denis78bbe772016-12-16 08:08:27 -0500890 mmMC_MEM_POWER_LS, 0xffffffff, 0x00000104,
891 mmMC_CITF_MISC_WR_CG, 0x000c0000, 0x000c0000,
892 mmMC_CITF_MISC_RD_CG, 0x000c0000, 0x000c0000,
893 mmHDP_MEM_POWER_LS, 0x00000001, 0x00000001,
894 mmHDP_XDP_CGTT_BLK_CTRL, 0xc0000fff, 0x00000104,
895 mmCP_MEM_SLP_CNTL, 0x00000001, 0x00000001,
Ken Wang62a37552016-01-19 14:08:49 +0800896 0x3430, 0xfffffff0, 0x00000100,
Tom St Denis78bbe772016-12-16 08:08:27 -0500897 0x3630, 0xfffffff0, 0x00000100,
Ken Wang62a37552016-01-19 14:08:49 +0800898};
899
900static u32 si_pcie_rreg(struct amdgpu_device *adev, u32 reg)
901{
902 unsigned long flags;
903 u32 r;
904
905 spin_lock_irqsave(&adev->pcie_idx_lock, flags);
906 WREG32(AMDGPU_PCIE_INDEX, reg);
907 (void)RREG32(AMDGPU_PCIE_INDEX);
908 r = RREG32(AMDGPU_PCIE_DATA);
909 spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
910 return r;
911}
912
913static void si_pcie_wreg(struct amdgpu_device *adev, u32 reg, u32 v)
914{
915 unsigned long flags;
916
917 spin_lock_irqsave(&adev->pcie_idx_lock, flags);
918 WREG32(AMDGPU_PCIE_INDEX, reg);
919 (void)RREG32(AMDGPU_PCIE_INDEX);
920 WREG32(AMDGPU_PCIE_DATA, v);
921 (void)RREG32(AMDGPU_PCIE_DATA);
922 spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
923}
924
Baoyou Xied1936cc2016-10-22 16:48:26 +0800925static u32 si_pciep_rreg(struct amdgpu_device *adev, u32 reg)
Huang Rui36b9a952016-08-31 13:23:25 +0800926{
927 unsigned long flags;
928 u32 r;
929
930 spin_lock_irqsave(&adev->pcie_idx_lock, flags);
931 WREG32(PCIE_PORT_INDEX, ((reg) & 0xff));
932 (void)RREG32(PCIE_PORT_INDEX);
933 r = RREG32(PCIE_PORT_DATA);
934 spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
935 return r;
936}
937
Baoyou Xied1936cc2016-10-22 16:48:26 +0800938static void si_pciep_wreg(struct amdgpu_device *adev, u32 reg, u32 v)
Huang Rui36b9a952016-08-31 13:23:25 +0800939{
940 unsigned long flags;
941
942 spin_lock_irqsave(&adev->pcie_idx_lock, flags);
943 WREG32(PCIE_PORT_INDEX, ((reg) & 0xff));
944 (void)RREG32(PCIE_PORT_INDEX);
945 WREG32(PCIE_PORT_DATA, (v));
946 (void)RREG32(PCIE_PORT_DATA);
947 spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
948}
949
Ken Wang62a37552016-01-19 14:08:49 +0800950static u32 si_smc_rreg(struct amdgpu_device *adev, u32 reg)
951{
952 unsigned long flags;
953 u32 r;
954
955 spin_lock_irqsave(&adev->smc_idx_lock, flags);
956 WREG32(SMC_IND_INDEX_0, (reg));
957 r = RREG32(SMC_IND_DATA_0);
958 spin_unlock_irqrestore(&adev->smc_idx_lock, flags);
959 return r;
960}
961
962static void si_smc_wreg(struct amdgpu_device *adev, u32 reg, u32 v)
963{
964 unsigned long flags;
965
966 spin_lock_irqsave(&adev->smc_idx_lock, flags);
967 WREG32(SMC_IND_INDEX_0, (reg));
968 WREG32(SMC_IND_DATA_0, (v));
969 spin_unlock_irqrestore(&adev->smc_idx_lock, flags);
970}
971
Ken Wang62a37552016-01-19 14:08:49 +0800972static struct amdgpu_allowed_register_entry si_allowed_read_registers[] = {
973 {GRBM_STATUS, false},
974 {GB_ADDR_CONFIG, false},
975 {MC_ARB_RAMCFG, false},
976 {GB_TILE_MODE0, false},
977 {GB_TILE_MODE1, false},
978 {GB_TILE_MODE2, false},
979 {GB_TILE_MODE3, false},
980 {GB_TILE_MODE4, false},
981 {GB_TILE_MODE5, false},
982 {GB_TILE_MODE6, false},
983 {GB_TILE_MODE7, false},
984 {GB_TILE_MODE8, false},
985 {GB_TILE_MODE9, false},
986 {GB_TILE_MODE10, false},
987 {GB_TILE_MODE11, false},
988 {GB_TILE_MODE12, false},
989 {GB_TILE_MODE13, false},
990 {GB_TILE_MODE14, false},
991 {GB_TILE_MODE15, false},
992 {GB_TILE_MODE16, false},
993 {GB_TILE_MODE17, false},
994 {GB_TILE_MODE18, false},
995 {GB_TILE_MODE19, false},
996 {GB_TILE_MODE20, false},
997 {GB_TILE_MODE21, false},
998 {GB_TILE_MODE22, false},
999 {GB_TILE_MODE23, false},
1000 {GB_TILE_MODE24, false},
1001 {GB_TILE_MODE25, false},
1002 {GB_TILE_MODE26, false},
1003 {GB_TILE_MODE27, false},
1004 {GB_TILE_MODE28, false},
1005 {GB_TILE_MODE29, false},
1006 {GB_TILE_MODE30, false},
1007 {GB_TILE_MODE31, false},
1008 {CC_RB_BACKEND_DISABLE, false, true},
1009 {GC_USER_RB_BACKEND_DISABLE, false, true},
1010 {PA_SC_RASTER_CONFIG, false, true},
1011};
1012
1013static uint32_t si_read_indexed_register(struct amdgpu_device *adev,
1014 u32 se_num, u32 sh_num,
1015 u32 reg_offset)
1016{
1017 uint32_t val;
1018
1019 mutex_lock(&adev->grbm_idx_mutex);
1020 if (se_num != 0xffffffff || sh_num != 0xffffffff)
1021 amdgpu_gfx_select_se_sh(adev, se_num, sh_num, 0xffffffff);
1022
1023 val = RREG32(reg_offset);
1024
1025 if (se_num != 0xffffffff || sh_num != 0xffffffff)
1026 amdgpu_gfx_select_se_sh(adev, 0xffffffff, 0xffffffff, 0xffffffff);
1027 mutex_unlock(&adev->grbm_idx_mutex);
1028 return val;
1029}
1030
1031static int si_read_register(struct amdgpu_device *adev, u32 se_num,
1032 u32 sh_num, u32 reg_offset, u32 *value)
1033{
1034 uint32_t i;
1035
1036 *value = 0;
1037 for (i = 0; i < ARRAY_SIZE(si_allowed_read_registers); i++) {
1038 if (reg_offset != si_allowed_read_registers[i].reg_offset)
1039 continue;
1040
1041 if (!si_allowed_read_registers[i].untouched)
1042 *value = si_allowed_read_registers[i].grbm_indexed ?
1043 si_read_indexed_register(adev, se_num,
1044 sh_num, reg_offset) :
1045 RREG32(reg_offset);
1046 return 0;
1047 }
1048 return -EINVAL;
1049}
1050
1051static bool si_read_disabled_bios(struct amdgpu_device *adev)
1052{
1053 u32 bus_cntl;
1054 u32 d1vga_control = 0;
1055 u32 d2vga_control = 0;
1056 u32 vga_render_control = 0;
1057 u32 rom_cntl;
1058 bool r;
1059
1060 bus_cntl = RREG32(R600_BUS_CNTL);
1061 if (adev->mode_info.num_crtc) {
1062 d1vga_control = RREG32(AVIVO_D1VGA_CONTROL);
1063 d2vga_control = RREG32(AVIVO_D2VGA_CONTROL);
1064 vga_render_control = RREG32(VGA_RENDER_CONTROL);
1065 }
1066 rom_cntl = RREG32(R600_ROM_CNTL);
1067
1068 /* enable the rom */
1069 WREG32(R600_BUS_CNTL, (bus_cntl & ~R600_BIOS_ROM_DIS));
1070 if (adev->mode_info.num_crtc) {
1071 /* Disable VGA mode */
1072 WREG32(AVIVO_D1VGA_CONTROL,
1073 (d1vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE |
1074 AVIVO_DVGA_CONTROL_TIMING_SELECT)));
1075 WREG32(AVIVO_D2VGA_CONTROL,
1076 (d2vga_control & ~(AVIVO_DVGA_CONTROL_MODE_ENABLE |
1077 AVIVO_DVGA_CONTROL_TIMING_SELECT)));
1078 WREG32(VGA_RENDER_CONTROL,
1079 (vga_render_control & C_000300_VGA_VSTATUS_CNTL));
1080 }
1081 WREG32(R600_ROM_CNTL, rom_cntl | R600_SCK_OVERWRITE);
1082
1083 r = amdgpu_read_bios(adev);
1084
1085 /* restore regs */
1086 WREG32(R600_BUS_CNTL, bus_cntl);
1087 if (adev->mode_info.num_crtc) {
1088 WREG32(AVIVO_D1VGA_CONTROL, d1vga_control);
1089 WREG32(AVIVO_D2VGA_CONTROL, d2vga_control);
1090 WREG32(VGA_RENDER_CONTROL, vga_render_control);
1091 }
1092 WREG32(R600_ROM_CNTL, rom_cntl);
1093 return r;
1094}
1095
1096//xxx: not implemented
1097static int si_asic_reset(struct amdgpu_device *adev)
1098{
1099 return 0;
1100}
1101
1102static void si_vga_set_state(struct amdgpu_device *adev, bool state)
1103{
1104 uint32_t temp;
1105
1106 temp = RREG32(CONFIG_CNTL);
1107 if (state == false) {
1108 temp &= ~(1<<0);
1109 temp |= (1<<1);
1110 } else {
1111 temp &= ~(1<<1);
1112 }
1113 WREG32(CONFIG_CNTL, temp);
1114}
1115
1116static u32 si_get_xclk(struct amdgpu_device *adev)
1117{
1118 u32 reference_clock = adev->clock.spll.reference_freq;
1119 u32 tmp;
1120
1121 tmp = RREG32(CG_CLKPIN_CNTL_2);
1122 if (tmp & MUX_TCLK_TO_XCLK)
1123 return TCLK;
1124
1125 tmp = RREG32(CG_CLKPIN_CNTL);
1126 if (tmp & XTALIN_DIVIDE)
1127 return reference_clock / 4;
1128
1129 return reference_clock;
1130}
Maruthi Srinivas Bayyavarapu19196962016-04-26 20:35:36 +05301131
Ken Wang62a37552016-01-19 14:08:49 +08001132//xxx:not implemented
1133static int si_set_uvd_clocks(struct amdgpu_device *adev, u32 vclk, u32 dclk)
1134{
1135 return 0;
1136}
1137
Monk Liu4e99a442016-03-31 13:26:59 +08001138static void si_detect_hw_virtualization(struct amdgpu_device *adev)
1139{
1140 if (is_virtual_machine()) /* passthrough mode */
1141 adev->virtualization.virtual_caps |= AMDGPU_PASSTHROUGH_MODE;
1142}
1143
Ken Wang62a37552016-01-19 14:08:49 +08001144static const struct amdgpu_asic_funcs si_asic_funcs =
1145{
1146 .read_disabled_bios = &si_read_disabled_bios,
Monk Liu4e99a442016-03-31 13:26:59 +08001147 .detect_hw_virtualization = si_detect_hw_virtualization,
Ken Wang62a37552016-01-19 14:08:49 +08001148 .read_register = &si_read_register,
1149 .reset = &si_asic_reset,
1150 .set_vga_state = &si_vga_set_state,
1151 .get_xclk = &si_get_xclk,
1152 .set_uvd_clocks = &si_set_uvd_clocks,
1153 .set_vce_clocks = NULL,
Ken Wang62a37552016-01-19 14:08:49 +08001154};
1155
1156static uint32_t si_get_rev_id(struct amdgpu_device *adev)
1157{
1158 return (RREG32(CC_DRM_ID_STRAPS) & CC_DRM_ID_STRAPS__ATI_REV_ID_MASK)
1159 >> CC_DRM_ID_STRAPS__ATI_REV_ID__SHIFT;
1160}
1161
1162static int si_common_early_init(void *handle)
1163{
1164 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
1165
1166 adev->smc_rreg = &si_smc_rreg;
1167 adev->smc_wreg = &si_smc_wreg;
1168 adev->pcie_rreg = &si_pcie_rreg;
1169 adev->pcie_wreg = &si_pcie_wreg;
Huang Rui36b9a952016-08-31 13:23:25 +08001170 adev->pciep_rreg = &si_pciep_rreg;
1171 adev->pciep_wreg = &si_pciep_wreg;
Ken Wang62a37552016-01-19 14:08:49 +08001172 adev->uvd_ctx_rreg = NULL;
1173 adev->uvd_ctx_wreg = NULL;
1174 adev->didt_rreg = NULL;
1175 adev->didt_wreg = NULL;
1176
1177 adev->asic_funcs = &si_asic_funcs;
1178
1179 adev->rev_id = si_get_rev_id(adev);
1180 adev->external_rev_id = 0xFF;
1181 switch (adev->asic_type) {
1182 case CHIP_TAHITI:
1183 adev->cg_flags =
1184 AMD_CG_SUPPORT_GFX_MGCG |
1185 AMD_CG_SUPPORT_GFX_MGLS |
1186 /*AMD_CG_SUPPORT_GFX_CGCG |*/
1187 AMD_CG_SUPPORT_GFX_CGLS |
1188 AMD_CG_SUPPORT_GFX_CGTS |
1189 AMD_CG_SUPPORT_GFX_CP_LS |
1190 AMD_CG_SUPPORT_MC_MGCG |
1191 AMD_CG_SUPPORT_SDMA_MGCG |
1192 AMD_CG_SUPPORT_BIF_LS |
1193 AMD_CG_SUPPORT_VCE_MGCG |
1194 AMD_CG_SUPPORT_UVD_MGCG |
1195 AMD_CG_SUPPORT_HDP_LS |
1196 AMD_CG_SUPPORT_HDP_MGCG;
1197 adev->pg_flags = 0;
Flora Cui7c0a7052016-12-14 14:35:49 +08001198 adev->external_rev_id = (adev->rev_id == 0) ? 1 :
1199 (adev->rev_id == 1) ? 5 : 6;
Ken Wang62a37552016-01-19 14:08:49 +08001200 break;
1201 case CHIP_PITCAIRN:
1202 adev->cg_flags =
1203 AMD_CG_SUPPORT_GFX_MGCG |
1204 AMD_CG_SUPPORT_GFX_MGLS |
1205 /*AMD_CG_SUPPORT_GFX_CGCG |*/
1206 AMD_CG_SUPPORT_GFX_CGLS |
1207 AMD_CG_SUPPORT_GFX_CGTS |
1208 AMD_CG_SUPPORT_GFX_CP_LS |
1209 AMD_CG_SUPPORT_GFX_RLC_LS |
1210 AMD_CG_SUPPORT_MC_LS |
1211 AMD_CG_SUPPORT_MC_MGCG |
1212 AMD_CG_SUPPORT_SDMA_MGCG |
1213 AMD_CG_SUPPORT_BIF_LS |
1214 AMD_CG_SUPPORT_VCE_MGCG |
1215 AMD_CG_SUPPORT_UVD_MGCG |
1216 AMD_CG_SUPPORT_HDP_LS |
1217 AMD_CG_SUPPORT_HDP_MGCG;
1218 adev->pg_flags = 0;
Flora Cuie285a9a2016-12-15 15:29:54 +08001219 adev->external_rev_id = adev->rev_id + 20;
Ken Wang62a37552016-01-19 14:08:49 +08001220 break;
1221
1222 case CHIP_VERDE:
1223 adev->cg_flags =
1224 AMD_CG_SUPPORT_GFX_MGCG |
1225 AMD_CG_SUPPORT_GFX_MGLS |
1226 AMD_CG_SUPPORT_GFX_CGLS |
1227 AMD_CG_SUPPORT_GFX_CGTS |
1228 AMD_CG_SUPPORT_GFX_CGTS_LS |
1229 AMD_CG_SUPPORT_GFX_CP_LS |
1230 AMD_CG_SUPPORT_MC_LS |
1231 AMD_CG_SUPPORT_MC_MGCG |
1232 AMD_CG_SUPPORT_SDMA_MGCG |
1233 AMD_CG_SUPPORT_SDMA_LS |
1234 AMD_CG_SUPPORT_BIF_LS |
1235 AMD_CG_SUPPORT_VCE_MGCG |
1236 AMD_CG_SUPPORT_UVD_MGCG |
1237 AMD_CG_SUPPORT_HDP_LS |
1238 AMD_CG_SUPPORT_HDP_MGCG;
1239 adev->pg_flags = 0;
1240 //???
Flora Cuif815b292016-12-15 15:27:51 +08001241 adev->external_rev_id = adev->rev_id + 40;
Ken Wang62a37552016-01-19 14:08:49 +08001242 break;
1243 case CHIP_OLAND:
1244 adev->cg_flags =
1245 AMD_CG_SUPPORT_GFX_MGCG |
1246 AMD_CG_SUPPORT_GFX_MGLS |
1247 /*AMD_CG_SUPPORT_GFX_CGCG |*/
1248 AMD_CG_SUPPORT_GFX_CGLS |
1249 AMD_CG_SUPPORT_GFX_CGTS |
1250 AMD_CG_SUPPORT_GFX_CP_LS |
1251 AMD_CG_SUPPORT_GFX_RLC_LS |
1252 AMD_CG_SUPPORT_MC_LS |
1253 AMD_CG_SUPPORT_MC_MGCG |
1254 AMD_CG_SUPPORT_SDMA_MGCG |
1255 AMD_CG_SUPPORT_BIF_LS |
1256 AMD_CG_SUPPORT_UVD_MGCG |
1257 AMD_CG_SUPPORT_HDP_LS |
1258 AMD_CG_SUPPORT_HDP_MGCG;
1259 adev->pg_flags = 0;
Flora Cui8fd74cb2016-12-15 15:04:39 +08001260 adev->external_rev_id = 60;
Ken Wang62a37552016-01-19 14:08:49 +08001261 break;
1262 case CHIP_HAINAN:
1263 adev->cg_flags =
1264 AMD_CG_SUPPORT_GFX_MGCG |
1265 AMD_CG_SUPPORT_GFX_MGLS |
1266 /*AMD_CG_SUPPORT_GFX_CGCG |*/
1267 AMD_CG_SUPPORT_GFX_CGLS |
1268 AMD_CG_SUPPORT_GFX_CGTS |
1269 AMD_CG_SUPPORT_GFX_CP_LS |
1270 AMD_CG_SUPPORT_GFX_RLC_LS |
1271 AMD_CG_SUPPORT_MC_LS |
1272 AMD_CG_SUPPORT_MC_MGCG |
1273 AMD_CG_SUPPORT_SDMA_MGCG |
1274 AMD_CG_SUPPORT_BIF_LS |
1275 AMD_CG_SUPPORT_HDP_LS |
1276 AMD_CG_SUPPORT_HDP_MGCG;
1277 adev->pg_flags = 0;
Flora Cui05319472016-12-15 14:58:28 +08001278 adev->external_rev_id = 70;
Ken Wang62a37552016-01-19 14:08:49 +08001279 break;
1280
1281 default:
1282 return -EINVAL;
1283 }
1284
1285 return 0;
1286}
1287
1288static int si_common_sw_init(void *handle)
1289{
1290 return 0;
1291}
1292
1293static int si_common_sw_fini(void *handle)
1294{
1295 return 0;
1296}
1297
1298
1299static void si_init_golden_registers(struct amdgpu_device *adev)
1300{
1301 switch (adev->asic_type) {
1302 case CHIP_TAHITI:
1303 amdgpu_program_register_sequence(adev,
1304 tahiti_golden_registers,
1305 (const u32)ARRAY_SIZE(tahiti_golden_registers));
1306 amdgpu_program_register_sequence(adev,
1307 tahiti_golden_rlc_registers,
1308 (const u32)ARRAY_SIZE(tahiti_golden_rlc_registers));
1309 amdgpu_program_register_sequence(adev,
1310 tahiti_mgcg_cgcg_init,
1311 (const u32)ARRAY_SIZE(tahiti_mgcg_cgcg_init));
1312 amdgpu_program_register_sequence(adev,
1313 tahiti_golden_registers2,
1314 (const u32)ARRAY_SIZE(tahiti_golden_registers2));
1315 break;
1316 case CHIP_PITCAIRN:
1317 amdgpu_program_register_sequence(adev,
1318 pitcairn_golden_registers,
1319 (const u32)ARRAY_SIZE(pitcairn_golden_registers));
1320 amdgpu_program_register_sequence(adev,
1321 pitcairn_golden_rlc_registers,
1322 (const u32)ARRAY_SIZE(pitcairn_golden_rlc_registers));
1323 amdgpu_program_register_sequence(adev,
1324 pitcairn_mgcg_cgcg_init,
1325 (const u32)ARRAY_SIZE(pitcairn_mgcg_cgcg_init));
1326 case CHIP_VERDE:
1327 amdgpu_program_register_sequence(adev,
1328 verde_golden_registers,
1329 (const u32)ARRAY_SIZE(verde_golden_registers));
1330 amdgpu_program_register_sequence(adev,
1331 verde_golden_rlc_registers,
1332 (const u32)ARRAY_SIZE(verde_golden_rlc_registers));
1333 amdgpu_program_register_sequence(adev,
1334 verde_mgcg_cgcg_init,
1335 (const u32)ARRAY_SIZE(verde_mgcg_cgcg_init));
1336 amdgpu_program_register_sequence(adev,
1337 verde_pg_init,
1338 (const u32)ARRAY_SIZE(verde_pg_init));
1339 break;
1340 case CHIP_OLAND:
1341 amdgpu_program_register_sequence(adev,
1342 oland_golden_registers,
1343 (const u32)ARRAY_SIZE(oland_golden_registers));
1344 amdgpu_program_register_sequence(adev,
1345 oland_golden_rlc_registers,
1346 (const u32)ARRAY_SIZE(oland_golden_rlc_registers));
1347 amdgpu_program_register_sequence(adev,
1348 oland_mgcg_cgcg_init,
1349 (const u32)ARRAY_SIZE(oland_mgcg_cgcg_init));
1350 case CHIP_HAINAN:
1351 amdgpu_program_register_sequence(adev,
1352 hainan_golden_registers,
1353 (const u32)ARRAY_SIZE(hainan_golden_registers));
1354 amdgpu_program_register_sequence(adev,
1355 hainan_golden_registers2,
1356 (const u32)ARRAY_SIZE(hainan_golden_registers2));
1357 amdgpu_program_register_sequence(adev,
1358 hainan_mgcg_cgcg_init,
1359 (const u32)ARRAY_SIZE(hainan_mgcg_cgcg_init));
1360 break;
1361
1362
1363 default:
1364 BUG();
1365 }
1366}
1367
Ken Wang62a37552016-01-19 14:08:49 +08001368static void si_pcie_gen3_enable(struct amdgpu_device *adev)
1369{
1370 struct pci_dev *root = adev->pdev->bus->self;
1371 int bridge_pos, gpu_pos;
1372 u32 speed_cntl, mask, current_data_rate;
1373 int ret, i;
1374 u16 tmp16;
1375
1376 if (pci_is_root_bus(adev->pdev->bus))
1377 return;
1378
1379 if (amdgpu_pcie_gen2 == 0)
1380 return;
1381
1382 if (adev->flags & AMD_IS_APU)
1383 return;
1384
1385 ret = drm_pcie_get_speed_cap_mask(adev->ddev, &mask);
1386 if (ret != 0)
1387 return;
1388
1389 if (!(mask & (DRM_PCIE_SPEED_50 | DRM_PCIE_SPEED_80)))
1390 return;
1391
Huang Rui36b9a952016-08-31 13:23:25 +08001392 speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
Ken Wang62a37552016-01-19 14:08:49 +08001393 current_data_rate = (speed_cntl & LC_CURRENT_DATA_RATE_MASK) >>
1394 LC_CURRENT_DATA_RATE_SHIFT;
1395 if (mask & DRM_PCIE_SPEED_80) {
1396 if (current_data_rate == 2) {
1397 DRM_INFO("PCIE gen 3 link speeds already enabled\n");
1398 return;
1399 }
1400 DRM_INFO("enabling PCIE gen 3 link speeds, disable with amdgpu.pcie_gen2=0\n");
1401 } else if (mask & DRM_PCIE_SPEED_50) {
1402 if (current_data_rate == 1) {
1403 DRM_INFO("PCIE gen 2 link speeds already enabled\n");
1404 return;
1405 }
1406 DRM_INFO("enabling PCIE gen 2 link speeds, disable with amdgpu.pcie_gen2=0\n");
1407 }
1408
1409 bridge_pos = pci_pcie_cap(root);
1410 if (!bridge_pos)
1411 return;
1412
1413 gpu_pos = pci_pcie_cap(adev->pdev);
1414 if (!gpu_pos)
1415 return;
1416
1417 if (mask & DRM_PCIE_SPEED_80) {
1418 if (current_data_rate != 2) {
1419 u16 bridge_cfg, gpu_cfg;
1420 u16 bridge_cfg2, gpu_cfg2;
1421 u32 max_lw, current_lw, tmp;
1422
1423 pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg);
1424 pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg);
1425
1426 tmp16 = bridge_cfg | PCI_EXP_LNKCTL_HAWD;
1427 pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16);
1428
1429 tmp16 = gpu_cfg | PCI_EXP_LNKCTL_HAWD;
1430 pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16);
1431
1432 tmp = RREG32_PCIE(PCIE_LC_STATUS1);
1433 max_lw = (tmp & LC_DETECTED_LINK_WIDTH_MASK) >> LC_DETECTED_LINK_WIDTH_SHIFT;
1434 current_lw = (tmp & LC_OPERATING_LINK_WIDTH_MASK) >> LC_OPERATING_LINK_WIDTH_SHIFT;
1435
1436 if (current_lw < max_lw) {
Huang Rui36b9a952016-08-31 13:23:25 +08001437 tmp = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL);
Ken Wang62a37552016-01-19 14:08:49 +08001438 if (tmp & LC_RENEGOTIATION_SUPPORT) {
1439 tmp &= ~(LC_LINK_WIDTH_MASK | LC_UPCONFIGURE_DIS);
1440 tmp |= (max_lw << LC_LINK_WIDTH_SHIFT);
1441 tmp |= LC_UPCONFIGURE_SUPPORT | LC_RENEGOTIATE_EN | LC_RECONFIG_NOW;
Huang Rui36b9a952016-08-31 13:23:25 +08001442 WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, tmp);
Ken Wang62a37552016-01-19 14:08:49 +08001443 }
1444 }
1445
1446 for (i = 0; i < 10; i++) {
1447 pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_DEVSTA, &tmp16);
1448 if (tmp16 & PCI_EXP_DEVSTA_TRPND)
1449 break;
1450
1451 pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &bridge_cfg);
1452 pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &gpu_cfg);
1453
1454 pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &bridge_cfg2);
1455 pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &gpu_cfg2);
1456
Huang Rui36b9a952016-08-31 13:23:25 +08001457 tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4);
Ken Wang62a37552016-01-19 14:08:49 +08001458 tmp |= LC_SET_QUIESCE;
Huang Rui36b9a952016-08-31 13:23:25 +08001459 WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp);
Ken Wang62a37552016-01-19 14:08:49 +08001460
Huang Rui36b9a952016-08-31 13:23:25 +08001461 tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4);
Ken Wang62a37552016-01-19 14:08:49 +08001462 tmp |= LC_REDO_EQ;
Huang Rui36b9a952016-08-31 13:23:25 +08001463 WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp);
Ken Wang62a37552016-01-19 14:08:49 +08001464
1465 mdelay(100);
1466
1467 pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL, &tmp16);
1468 tmp16 &= ~PCI_EXP_LNKCTL_HAWD;
1469 tmp16 |= (bridge_cfg & PCI_EXP_LNKCTL_HAWD);
1470 pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL, tmp16);
1471
1472 pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, &tmp16);
1473 tmp16 &= ~PCI_EXP_LNKCTL_HAWD;
1474 tmp16 |= (gpu_cfg & PCI_EXP_LNKCTL_HAWD);
1475 pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL, tmp16);
1476
1477 pci_read_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, &tmp16);
1478 tmp16 &= ~((1 << 4) | (7 << 9));
1479 tmp16 |= (bridge_cfg2 & ((1 << 4) | (7 << 9)));
1480 pci_write_config_word(root, bridge_pos + PCI_EXP_LNKCTL2, tmp16);
1481
1482 pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16);
1483 tmp16 &= ~((1 << 4) | (7 << 9));
1484 tmp16 |= (gpu_cfg2 & ((1 << 4) | (7 << 9)));
1485 pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16);
1486
Huang Rui36b9a952016-08-31 13:23:25 +08001487 tmp = RREG32_PCIE_PORT(PCIE_LC_CNTL4);
Ken Wang62a37552016-01-19 14:08:49 +08001488 tmp &= ~LC_SET_QUIESCE;
Huang Rui36b9a952016-08-31 13:23:25 +08001489 WREG32_PCIE_PORT(PCIE_LC_CNTL4, tmp);
Ken Wang62a37552016-01-19 14:08:49 +08001490 }
1491 }
1492 }
1493
1494 speed_cntl |= LC_FORCE_EN_SW_SPEED_CHANGE | LC_FORCE_DIS_HW_SPEED_CHANGE;
1495 speed_cntl &= ~LC_FORCE_DIS_SW_SPEED_CHANGE;
Huang Rui36b9a952016-08-31 13:23:25 +08001496 WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl);
Ken Wang62a37552016-01-19 14:08:49 +08001497
1498 pci_read_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, &tmp16);
1499 tmp16 &= ~0xf;
1500 if (mask & DRM_PCIE_SPEED_80)
1501 tmp16 |= 3;
1502 else if (mask & DRM_PCIE_SPEED_50)
1503 tmp16 |= 2;
1504 else
1505 tmp16 |= 1;
1506 pci_write_config_word(adev->pdev, gpu_pos + PCI_EXP_LNKCTL2, tmp16);
1507
Huang Rui36b9a952016-08-31 13:23:25 +08001508 speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
Ken Wang62a37552016-01-19 14:08:49 +08001509 speed_cntl |= LC_INITIATE_LINK_SPEED_CHANGE;
Huang Rui36b9a952016-08-31 13:23:25 +08001510 WREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL, speed_cntl);
Ken Wang62a37552016-01-19 14:08:49 +08001511
1512 for (i = 0; i < adev->usec_timeout; i++) {
Huang Rui36b9a952016-08-31 13:23:25 +08001513 speed_cntl = RREG32_PCIE_PORT(PCIE_LC_SPEED_CNTL);
Ken Wang62a37552016-01-19 14:08:49 +08001514 if ((speed_cntl & LC_INITIATE_LINK_SPEED_CHANGE) == 0)
1515 break;
1516 udelay(1);
1517 }
1518}
1519
1520static inline u32 si_pif_phy0_rreg(struct amdgpu_device *adev, u32 reg)
1521{
1522 unsigned long flags;
1523 u32 r;
1524
1525 spin_lock_irqsave(&adev->pcie_idx_lock, flags);
1526 WREG32(EVERGREEN_PIF_PHY0_INDEX, ((reg) & 0xffff));
1527 r = RREG32(EVERGREEN_PIF_PHY0_DATA);
1528 spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
1529 return r;
1530}
1531
1532static inline void si_pif_phy0_wreg(struct amdgpu_device *adev, u32 reg, u32 v)
1533{
1534 unsigned long flags;
1535
1536 spin_lock_irqsave(&adev->pcie_idx_lock, flags);
1537 WREG32(EVERGREEN_PIF_PHY0_INDEX, ((reg) & 0xffff));
1538 WREG32(EVERGREEN_PIF_PHY0_DATA, (v));
1539 spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
1540}
1541
1542static inline u32 si_pif_phy1_rreg(struct amdgpu_device *adev, u32 reg)
1543{
1544 unsigned long flags;
1545 u32 r;
1546
1547 spin_lock_irqsave(&adev->pcie_idx_lock, flags);
1548 WREG32(EVERGREEN_PIF_PHY1_INDEX, ((reg) & 0xffff));
1549 r = RREG32(EVERGREEN_PIF_PHY1_DATA);
1550 spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
1551 return r;
1552}
1553
1554static inline void si_pif_phy1_wreg(struct amdgpu_device *adev, u32 reg, u32 v)
1555{
1556 unsigned long flags;
1557
1558 spin_lock_irqsave(&adev->pcie_idx_lock, flags);
1559 WREG32(EVERGREEN_PIF_PHY1_INDEX, ((reg) & 0xffff));
1560 WREG32(EVERGREEN_PIF_PHY1_DATA, (v));
1561 spin_unlock_irqrestore(&adev->pcie_idx_lock, flags);
1562}
1563static void si_program_aspm(struct amdgpu_device *adev)
1564{
1565 u32 data, orig;
1566 bool disable_l0s = false, disable_l1 = false, disable_plloff_in_l1 = false;
1567 bool disable_clkreq = false;
1568
1569 if (amdgpu_aspm == 0)
1570 return;
1571
1572 if (adev->flags & AMD_IS_APU)
1573 return;
Huang Rui36b9a952016-08-31 13:23:25 +08001574 orig = data = RREG32_PCIE_PORT(PCIE_LC_N_FTS_CNTL);
Ken Wang62a37552016-01-19 14:08:49 +08001575 data &= ~LC_XMIT_N_FTS_MASK;
1576 data |= LC_XMIT_N_FTS(0x24) | LC_XMIT_N_FTS_OVERRIDE_EN;
1577 if (orig != data)
Huang Rui36b9a952016-08-31 13:23:25 +08001578 WREG32_PCIE_PORT(PCIE_LC_N_FTS_CNTL, data);
Ken Wang62a37552016-01-19 14:08:49 +08001579
Huang Rui36b9a952016-08-31 13:23:25 +08001580 orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL3);
Ken Wang62a37552016-01-19 14:08:49 +08001581 data |= LC_GO_TO_RECOVERY;
1582 if (orig != data)
Huang Rui36b9a952016-08-31 13:23:25 +08001583 WREG32_PCIE_PORT(PCIE_LC_CNTL3, data);
Ken Wang62a37552016-01-19 14:08:49 +08001584
1585 orig = data = RREG32_PCIE(PCIE_P_CNTL);
1586 data |= P_IGNORE_EDB_ERR;
1587 if (orig != data)
1588 WREG32_PCIE(PCIE_P_CNTL, data);
1589
Huang Rui36b9a952016-08-31 13:23:25 +08001590 orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL);
Ken Wang62a37552016-01-19 14:08:49 +08001591 data &= ~(LC_L0S_INACTIVITY_MASK | LC_L1_INACTIVITY_MASK);
1592 data |= LC_PMI_TO_L1_DIS;
1593 if (!disable_l0s)
1594 data |= LC_L0S_INACTIVITY(7);
1595
1596 if (!disable_l1) {
1597 data |= LC_L1_INACTIVITY(7);
1598 data &= ~LC_PMI_TO_L1_DIS;
1599 if (orig != data)
Huang Rui36b9a952016-08-31 13:23:25 +08001600 WREG32_PCIE_PORT(PCIE_LC_CNTL, data);
Ken Wang62a37552016-01-19 14:08:49 +08001601
1602 if (!disable_plloff_in_l1) {
1603 bool clk_req_support;
1604
1605 orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_0);
1606 data &= ~(PLL_POWER_STATE_IN_OFF_0_MASK | PLL_POWER_STATE_IN_TXS2_0_MASK);
1607 data |= PLL_POWER_STATE_IN_OFF_0(7) | PLL_POWER_STATE_IN_TXS2_0(7);
1608 if (orig != data)
1609 si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_0, data);
1610
1611 orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_1);
1612 data &= ~(PLL_POWER_STATE_IN_OFF_1_MASK | PLL_POWER_STATE_IN_TXS2_1_MASK);
1613 data |= PLL_POWER_STATE_IN_OFF_1(7) | PLL_POWER_STATE_IN_TXS2_1(7);
1614 if (orig != data)
1615 si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_1, data);
1616
1617 orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_0);
1618 data &= ~(PLL_POWER_STATE_IN_OFF_0_MASK | PLL_POWER_STATE_IN_TXS2_0_MASK);
1619 data |= PLL_POWER_STATE_IN_OFF_0(7) | PLL_POWER_STATE_IN_TXS2_0(7);
1620 if (orig != data)
1621 si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_0, data);
1622
1623 orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_1);
1624 data &= ~(PLL_POWER_STATE_IN_OFF_1_MASK | PLL_POWER_STATE_IN_TXS2_1_MASK);
1625 data |= PLL_POWER_STATE_IN_OFF_1(7) | PLL_POWER_STATE_IN_TXS2_1(7);
1626 if (orig != data)
1627 si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_1, data);
1628
1629 if ((adev->family != CHIP_OLAND) && (adev->family != CHIP_HAINAN)) {
1630 orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_0);
1631 data &= ~PLL_RAMP_UP_TIME_0_MASK;
1632 if (orig != data)
1633 si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_0, data);
1634
1635 orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_1);
1636 data &= ~PLL_RAMP_UP_TIME_1_MASK;
1637 if (orig != data)
1638 si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_1, data);
1639
1640 orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_2);
1641 data &= ~PLL_RAMP_UP_TIME_2_MASK;
1642 if (orig != data)
1643 si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_2, data);
1644
1645 orig = data = si_pif_phy0_rreg(adev,PB0_PIF_PWRDOWN_3);
1646 data &= ~PLL_RAMP_UP_TIME_3_MASK;
1647 if (orig != data)
1648 si_pif_phy0_wreg(adev,PB0_PIF_PWRDOWN_3, data);
1649
1650 orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_0);
1651 data &= ~PLL_RAMP_UP_TIME_0_MASK;
1652 if (orig != data)
1653 si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_0, data);
1654
1655 orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_1);
1656 data &= ~PLL_RAMP_UP_TIME_1_MASK;
1657 if (orig != data)
1658 si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_1, data);
1659
1660 orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_2);
1661 data &= ~PLL_RAMP_UP_TIME_2_MASK;
1662 if (orig != data)
1663 si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_2, data);
1664
1665 orig = data = si_pif_phy1_rreg(adev,PB1_PIF_PWRDOWN_3);
1666 data &= ~PLL_RAMP_UP_TIME_3_MASK;
1667 if (orig != data)
1668 si_pif_phy1_wreg(adev,PB1_PIF_PWRDOWN_3, data);
1669 }
Huang Rui36b9a952016-08-31 13:23:25 +08001670 orig = data = RREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL);
Ken Wang62a37552016-01-19 14:08:49 +08001671 data &= ~LC_DYN_LANES_PWR_STATE_MASK;
1672 data |= LC_DYN_LANES_PWR_STATE(3);
1673 if (orig != data)
Huang Rui36b9a952016-08-31 13:23:25 +08001674 WREG32_PCIE_PORT(PCIE_LC_LINK_WIDTH_CNTL, data);
Ken Wang62a37552016-01-19 14:08:49 +08001675
1676 orig = data = si_pif_phy0_rreg(adev,PB0_PIF_CNTL);
1677 data &= ~LS2_EXIT_TIME_MASK;
1678 if ((adev->family == CHIP_OLAND) || (adev->family == CHIP_HAINAN))
1679 data |= LS2_EXIT_TIME(5);
1680 if (orig != data)
1681 si_pif_phy0_wreg(adev,PB0_PIF_CNTL, data);
1682
1683 orig = data = si_pif_phy1_rreg(adev,PB1_PIF_CNTL);
1684 data &= ~LS2_EXIT_TIME_MASK;
1685 if ((adev->family == CHIP_OLAND) || (adev->family == CHIP_HAINAN))
1686 data |= LS2_EXIT_TIME(5);
1687 if (orig != data)
1688 si_pif_phy1_wreg(adev,PB1_PIF_CNTL, data);
1689
1690 if (!disable_clkreq &&
1691 !pci_is_root_bus(adev->pdev->bus)) {
1692 struct pci_dev *root = adev->pdev->bus->self;
1693 u32 lnkcap;
1694
1695 clk_req_support = false;
1696 pcie_capability_read_dword(root, PCI_EXP_LNKCAP, &lnkcap);
1697 if (lnkcap & PCI_EXP_LNKCAP_CLKPM)
1698 clk_req_support = true;
1699 } else {
1700 clk_req_support = false;
1701 }
1702
1703 if (clk_req_support) {
Huang Rui36b9a952016-08-31 13:23:25 +08001704 orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL2);
Ken Wang62a37552016-01-19 14:08:49 +08001705 data |= LC_ALLOW_PDWN_IN_L1 | LC_ALLOW_PDWN_IN_L23;
1706 if (orig != data)
Huang Rui36b9a952016-08-31 13:23:25 +08001707 WREG32_PCIE_PORT(PCIE_LC_CNTL2, data);
Ken Wang62a37552016-01-19 14:08:49 +08001708
1709 orig = data = RREG32(THM_CLK_CNTL);
1710 data &= ~(CMON_CLK_SEL_MASK | TMON_CLK_SEL_MASK);
1711 data |= CMON_CLK_SEL(1) | TMON_CLK_SEL(1);
1712 if (orig != data)
1713 WREG32(THM_CLK_CNTL, data);
1714
1715 orig = data = RREG32(MISC_CLK_CNTL);
1716 data &= ~(DEEP_SLEEP_CLK_SEL_MASK | ZCLK_SEL_MASK);
1717 data |= DEEP_SLEEP_CLK_SEL(1) | ZCLK_SEL(1);
1718 if (orig != data)
1719 WREG32(MISC_CLK_CNTL, data);
1720
1721 orig = data = RREG32(CG_CLKPIN_CNTL);
1722 data &= ~BCLK_AS_XCLK;
1723 if (orig != data)
1724 WREG32(CG_CLKPIN_CNTL, data);
1725
1726 orig = data = RREG32(CG_CLKPIN_CNTL_2);
1727 data &= ~FORCE_BIF_REFCLK_EN;
1728 if (orig != data)
1729 WREG32(CG_CLKPIN_CNTL_2, data);
1730
1731 orig = data = RREG32(MPLL_BYPASSCLK_SEL);
1732 data &= ~MPLL_CLKOUT_SEL_MASK;
1733 data |= MPLL_CLKOUT_SEL(4);
1734 if (orig != data)
1735 WREG32(MPLL_BYPASSCLK_SEL, data);
1736
1737 orig = data = RREG32(SPLL_CNTL_MODE);
1738 data &= ~SPLL_REFCLK_SEL_MASK;
1739 if (orig != data)
1740 WREG32(SPLL_CNTL_MODE, data);
1741 }
1742 }
1743 } else {
1744 if (orig != data)
Huang Rui36b9a952016-08-31 13:23:25 +08001745 WREG32_PCIE_PORT(PCIE_LC_CNTL, data);
Ken Wang62a37552016-01-19 14:08:49 +08001746 }
1747
1748 orig = data = RREG32_PCIE(PCIE_CNTL2);
1749 data |= SLV_MEM_LS_EN | MST_MEM_LS_EN | REPLAY_MEM_LS_EN;
1750 if (orig != data)
1751 WREG32_PCIE(PCIE_CNTL2, data);
1752
1753 if (!disable_l0s) {
Huang Rui36b9a952016-08-31 13:23:25 +08001754 data = RREG32_PCIE_PORT(PCIE_LC_N_FTS_CNTL);
Ken Wang62a37552016-01-19 14:08:49 +08001755 if((data & LC_N_FTS_MASK) == LC_N_FTS_MASK) {
1756 data = RREG32_PCIE(PCIE_LC_STATUS1);
1757 if ((data & LC_REVERSE_XMIT) && (data & LC_REVERSE_RCVR)) {
Huang Rui36b9a952016-08-31 13:23:25 +08001758 orig = data = RREG32_PCIE_PORT(PCIE_LC_CNTL);
Ken Wang62a37552016-01-19 14:08:49 +08001759 data &= ~LC_L0S_INACTIVITY_MASK;
1760 if (orig != data)
Huang Rui36b9a952016-08-31 13:23:25 +08001761 WREG32_PCIE_PORT(PCIE_LC_CNTL, data);
Ken Wang62a37552016-01-19 14:08:49 +08001762 }
1763 }
1764 }
1765}
1766
1767static void si_fix_pci_max_read_req_size(struct amdgpu_device *adev)
1768{
1769 int readrq;
1770 u16 v;
1771
1772 readrq = pcie_get_readrq(adev->pdev);
1773 v = ffs(readrq) - 8;
1774 if ((v == 0) || (v == 6) || (v == 7))
1775 pcie_set_readrq(adev->pdev, 512);
1776}
1777
1778static int si_common_hw_init(void *handle)
1779{
1780 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
1781
1782 si_fix_pci_max_read_req_size(adev);
1783 si_init_golden_registers(adev);
1784 si_pcie_gen3_enable(adev);
1785 si_program_aspm(adev);
1786
1787 return 0;
1788}
1789
1790static int si_common_hw_fini(void *handle)
1791{
1792 return 0;
1793}
1794
1795static int si_common_suspend(void *handle)
1796{
1797 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
1798
1799 return si_common_hw_fini(adev);
1800}
1801
1802static int si_common_resume(void *handle)
1803{
1804 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
1805
1806 return si_common_hw_init(adev);
1807}
1808
1809static bool si_common_is_idle(void *handle)
1810{
1811 return true;
1812}
1813
1814static int si_common_wait_for_idle(void *handle)
1815{
1816 return 0;
1817}
1818
1819static int si_common_soft_reset(void *handle)
1820{
1821 return 0;
1822}
1823
1824static int si_common_set_clockgating_state(void *handle,
1825 enum amd_clockgating_state state)
1826{
1827 return 0;
1828}
1829
1830static int si_common_set_powergating_state(void *handle,
1831 enum amd_powergating_state state)
1832{
1833 return 0;
1834}
1835
Alex Deuchera1255102016-10-13 17:41:13 -04001836static const struct amd_ip_funcs si_common_ip_funcs = {
Ken Wang62a37552016-01-19 14:08:49 +08001837 .name = "si_common",
1838 .early_init = si_common_early_init,
1839 .late_init = NULL,
1840 .sw_init = si_common_sw_init,
1841 .sw_fini = si_common_sw_fini,
1842 .hw_init = si_common_hw_init,
1843 .hw_fini = si_common_hw_fini,
1844 .suspend = si_common_suspend,
1845 .resume = si_common_resume,
1846 .is_idle = si_common_is_idle,
1847 .wait_for_idle = si_common_wait_for_idle,
1848 .soft_reset = si_common_soft_reset,
1849 .set_clockgating_state = si_common_set_clockgating_state,
1850 .set_powergating_state = si_common_set_powergating_state,
1851};
1852
Alex Deuchera1255102016-10-13 17:41:13 -04001853static const struct amdgpu_ip_block_version si_common_ip_block =
Ken Wang62a37552016-01-19 14:08:49 +08001854{
Alex Deuchera1255102016-10-13 17:41:13 -04001855 .type = AMD_IP_BLOCK_TYPE_COMMON,
1856 .major = 1,
1857 .minor = 0,
1858 .rev = 0,
1859 .funcs = &si_common_ip_funcs,
Alex Deucher2120df42016-10-13 16:01:18 -04001860};
1861
Ken Wang62a37552016-01-19 14:08:49 +08001862int si_set_ip_blocks(struct amdgpu_device *adev)
1863{
1864 switch (adev->asic_type) {
1865 case CHIP_VERDE:
1866 case CHIP_TAHITI:
1867 case CHIP_PITCAIRN:
Alex Deuchera1255102016-10-13 17:41:13 -04001868 amdgpu_ip_block_add(adev, &si_common_ip_block);
1869 amdgpu_ip_block_add(adev, &gmc_v6_0_ip_block);
1870 amdgpu_ip_block_add(adev, &si_ih_ip_block);
1871 amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block);
1872 if (adev->enable_virtual_display)
1873 amdgpu_ip_block_add(adev, &dce_virtual_ip_block);
1874 else
1875 amdgpu_ip_block_add(adev, &dce_v6_0_ip_block);
1876 amdgpu_ip_block_add(adev, &gfx_v6_0_ip_block);
1877 amdgpu_ip_block_add(adev, &si_dma_ip_block);
1878 /* amdgpu_ip_block_add(adev, &uvd_v3_1_ip_block); */
1879 /* amdgpu_ip_block_add(adev, &vce_v1_0_ip_block); */
1880 break;
Ken Wang62a37552016-01-19 14:08:49 +08001881 case CHIP_OLAND:
Alex Deuchera1255102016-10-13 17:41:13 -04001882 amdgpu_ip_block_add(adev, &si_common_ip_block);
1883 amdgpu_ip_block_add(adev, &gmc_v6_0_ip_block);
1884 amdgpu_ip_block_add(adev, &si_ih_ip_block);
1885 amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block);
1886 if (adev->enable_virtual_display)
1887 amdgpu_ip_block_add(adev, &dce_virtual_ip_block);
1888 else
1889 amdgpu_ip_block_add(adev, &dce_v6_4_ip_block);
1890 amdgpu_ip_block_add(adev, &gfx_v6_0_ip_block);
1891 amdgpu_ip_block_add(adev, &si_dma_ip_block);
1892 /* amdgpu_ip_block_add(adev, &uvd_v3_1_ip_block); */
1893 /* amdgpu_ip_block_add(adev, &vce_v1_0_ip_block); */
Ken Wang62a37552016-01-19 14:08:49 +08001894 break;
1895 case CHIP_HAINAN:
Alex Deuchera1255102016-10-13 17:41:13 -04001896 amdgpu_ip_block_add(adev, &si_common_ip_block);
1897 amdgpu_ip_block_add(adev, &gmc_v6_0_ip_block);
1898 amdgpu_ip_block_add(adev, &si_ih_ip_block);
1899 amdgpu_ip_block_add(adev, &amdgpu_pp_ip_block);
1900 if (adev->enable_virtual_display)
1901 amdgpu_ip_block_add(adev, &dce_virtual_ip_block);
1902 amdgpu_ip_block_add(adev, &gfx_v6_0_ip_block);
1903 amdgpu_ip_block_add(adev, &si_dma_ip_block);
Ken Wang62a37552016-01-19 14:08:49 +08001904 break;
1905 default:
1906 BUG();
1907 }
1908 return 0;
1909}
1910