xref: /rk3399_rockchip-uboot/arch/arm/include/asm/arch-rockchip/sdram_rv1126.h (revision d079c1a5ed50ce9f1e3b37be5ce4e13edec90bd0)
1 /* SPDX-License-Identifier:     GPL-2.0+ */
2 /*
3  * Copyright (C) 2020 Rockchip Electronics Co., Ltd
4  */
5 
6 #ifndef _ASM_ARCH_SDRAM_RK1126_H
7 #define _ASM_ARCH_SDRAM_RK1126_H
8 
9 #include <asm/arch/dram_spec_timing.h>
10 #include <asm/arch/sdram.h>
11 #include <asm/arch/sdram_common.h>
12 #include <asm/arch/sdram_msch.h>
13 #include <asm/arch/sdram_pctl_px30.h>
14 #include <asm/arch/sdram_phy_rv1126.h>
15 
16 #define AGINGX0_VAL			(4)
17 #define AGING_CPU_VAL			(0xff)
18 #define AGING_NPU_VAL			(0xff)
19 #define AGING_OTHER_VAL			(0x33)
20 
21 #define PATTERN				(0x5aa5f00f)
22 #define PHY_PER_DE_SKEW_DELAY		(20)
23 #define PHY_RX_DQS_INNER_DELAY		(5)
24 
25 #define PHY_DDR3_RON_DISABLE		(0)
26 #define PHY_DDR3_RON_506ohm		(1)
27 #define PHY_DDR3_RON_253ohm		(2)
28 #define PHY_DDR3_RON_169hm		(3)
29 #define PHY_DDR3_RON_127ohm		(4)
30 #define PHY_DDR3_RON_101ohm		(5)
31 #define PHY_DDR3_RON_84ohm		(6)
32 #define PHY_DDR3_RON_72ohm		(7)
33 #define PHY_DDR3_RON_63ohm		(16)
34 #define PHY_DDR3_RON_56ohm		(17)
35 #define PHY_DDR3_RON_51ohm		(18)
36 #define PHY_DDR3_RON_46ohm		(19)
37 #define PHY_DDR3_RON_42ohm		(20)
38 #define PHY_DDR3_RON_39ohm		(21)
39 #define PHY_DDR3_RON_36ohm		(22)
40 #define PHY_DDR3_RON_34ohm		(23)
41 #define PHY_DDR3_RON_32ohm		(24)
42 #define PHY_DDR3_RON_30ohm		(25)
43 #define PHY_DDR3_RON_28ohm		(26)
44 #define PHY_DDR3_RON_27ohm		(27)
45 #define PHY_DDR3_RON_25ohm		(28)
46 #define PHY_DDR3_RON_24ohm		(29)
47 #define PHY_DDR3_RON_23ohm		(30)
48 #define PHY_DDR3_RON_22ohm		(31)
49 
50 #define PHY_DDR3_RTT_DISABLE		(0)
51 #define PHY_DDR3_RTT_953ohm		(1)
52 #define PHY_DDR3_RTT_483ohm		(2)
53 #define PHY_DDR3_RTT_320ohm		(3)
54 #define PHY_DDR3_RTT_241ohm		(4)
55 #define PHY_DDR3_RTT_193ohm		(5)
56 #define PHY_DDR3_RTT_161ohm		(6)
57 #define PHY_DDR3_RTT_138ohm		(7)
58 #define PHY_DDR3_RTT_121ohm		(16)
59 #define PHY_DDR3_RTT_107ohm		(17)
60 #define PHY_DDR3_RTT_97ohm		(18)
61 #define PHY_DDR3_RTT_88ohm		(19)
62 #define PHY_DDR3_RTT_80ohm		(20)
63 #define PHY_DDR3_RTT_74ohm		(21)
64 #define PHY_DDR3_RTT_69ohm		(22)
65 #define PHY_DDR3_RTT_64ohm		(23)
66 #define PHY_DDR3_RTT_60ohm		(24)
67 #define PHY_DDR3_RTT_57ohm		(25)
68 #define PHY_DDR3_RTT_54ohm		(26)
69 #define PHY_DDR3_RTT_51ohm		(27)
70 #define PHY_DDR3_RTT_48ohm		(28)
71 #define PHY_DDR3_RTT_46ohm		(29)
72 #define PHY_DDR3_RTT_44ohm		(30)
73 #define PHY_DDR3_RTT_42ohm		(31)
74 
75 #define PHY_DDR4_LPDDR3_RON_DISABLE	(0)
76 #define PHY_DDR4_LPDDR3_RON_570ohm	(1)
77 #define PHY_DDR4_LPDDR3_RON_285ohm	(2)
78 #define PHY_DDR4_LPDDR3_RON_190ohm	(3)
79 #define PHY_DDR4_LPDDR3_RON_142ohm	(4)
80 #define PHY_DDR4_LPDDR3_RON_114ohm	(5)
81 #define PHY_DDR4_LPDDR3_RON_95ohm	(6)
82 #define PHY_DDR4_LPDDR3_RON_81ohm	(7)
83 #define PHY_DDR4_LPDDR3_RON_71ohm	(16)
84 #define PHY_DDR4_LPDDR3_RON_63ohm	(17)
85 #define PHY_DDR4_LPDDR3_RON_57ohm	(18)
86 #define PHY_DDR4_LPDDR3_RON_52ohm	(19)
87 #define PHY_DDR4_LPDDR3_RON_47ohm	(20)
88 #define PHY_DDR4_LPDDR3_RON_44ohm	(21)
89 #define PHY_DDR4_LPDDR3_RON_41ohm	(22)
90 #define PHY_DDR4_LPDDR3_RON_38ohm	(23)
91 #define PHY_DDR4_LPDDR3_RON_36ohm	(24)
92 #define PHY_DDR4_LPDDR3_RON_34ohm	(25)
93 #define PHY_DDR4_LPDDR3_RON_32ohm	(26)
94 #define PHY_DDR4_LPDDR3_RON_30ohm	(27)
95 #define PHY_DDR4_LPDDR3_RON_28ohm	(28)
96 #define PHY_DDR4_LPDDR3_RON_27ohm	(29)
97 #define PHY_DDR4_LPDDR3_RON_26ohm	(30)
98 #define PHY_DDR4_LPDDR3_RON_25ohm	(31)
99 
100 #define PHY_DDR4_LPDDR3_RTT_DISABLE	(0)
101 #define PHY_DDR4_LPDDR3_RTT_973ohm	(1)
102 #define PHY_DDR4_LPDDR3_RTT_493ohm	(2)
103 #define PHY_DDR4_LPDDR3_RTT_327ohm	(3)
104 #define PHY_DDR4_LPDDR3_RTT_247ohm	(4)
105 #define PHY_DDR4_LPDDR3_RTT_197ohm	(5)
106 #define PHY_DDR4_LPDDR3_RTT_164ohm	(6)
107 #define PHY_DDR4_LPDDR3_RTT_141ohm	(7)
108 #define PHY_DDR4_LPDDR3_RTT_123ohm	(16)
109 #define PHY_DDR4_LPDDR3_RTT_109ohm	(17)
110 #define PHY_DDR4_LPDDR3_RTT_99ohm	(18)
111 #define PHY_DDR4_LPDDR3_RTT_90ohm	(19)
112 #define PHY_DDR4_LPDDR3_RTT_82ohm	(20)
113 #define PHY_DDR4_LPDDR3_RTT_76ohm	(21)
114 #define PHY_DDR4_LPDDR3_RTT_70ohm	(22)
115 #define PHY_DDR4_LPDDR3_RTT_66ohm	(23)
116 #define PHY_DDR4_LPDDR3_RTT_62ohm	(24)
117 #define PHY_DDR4_LPDDR3_RTT_58ohm	(25)
118 #define PHY_DDR4_LPDDR3_RTT_55ohm	(26)
119 #define PHY_DDR4_LPDDR3_RTT_52ohm	(27)
120 #define PHY_DDR4_LPDDR3_RTT_49ohm	(28)
121 #define PHY_DDR4_LPDDR3_RTT_47ohm	(29)
122 #define PHY_DDR4_LPDDR3_RTT_45ohm	(30)
123 #define PHY_DDR4_LPDDR3_RTT_43ohm	(31)
124 
125 #define PHY_LPDDR4_RON_DISABLE		(0)
126 #define PHY_LPDDR4_RON_606ohm		(1)
127 #define PHY_LPDDR4_RON_303ohm		(2)
128 #define PHY_LPDDR4_RON_202ohm		(3)
129 #define PHY_LPDDR4_RON_152ohm		(4)
130 #define PHY_LPDDR4_RON_121ohm		(5)
131 #define PHY_LPDDR4_RON_101ohm		(6)
132 #define PHY_LPDDR4_RON_87ohm		(7)
133 #define PHY_LPDDR4_RON_76ohm		(16)
134 #define PHY_LPDDR4_RON_67ohm		(17)
135 #define PHY_LPDDR4_RON_61ohm		(18)
136 #define PHY_LPDDR4_RON_55ohm		(19)
137 #define PHY_LPDDR4_RON_51ohm		(20)
138 #define PHY_LPDDR4_RON_47ohm		(21)
139 #define PHY_LPDDR4_RON_43ohm		(22)
140 #define PHY_LPDDR4_RON_40ohm		(23)
141 #define PHY_LPDDR4_RON_38ohm		(24)
142 #define PHY_LPDDR4_RON_36ohm		(25)
143 #define PHY_LPDDR4_RON_34ohm		(26)
144 #define PHY_LPDDR4_RON_32ohm		(27)
145 #define PHY_LPDDR4_RON_30ohm		(28)
146 #define PHY_LPDDR4_RON_29ohm		(29)
147 #define PHY_LPDDR4_RON_28ohm		(30)
148 #define PHY_LPDDR4_RON_26ohm		(31)
149 
150 #define PHY_LPDDR4_RTT_DISABLE		(0)
151 #define PHY_LPDDR4_RTT_998ohm		(1)
152 #define PHY_LPDDR4_RTT_506ohm		(2)
153 #define PHY_LPDDR4_RTT_336ohm		(3)
154 #define PHY_LPDDR4_RTT_253ohm		(4)
155 #define PHY_LPDDR4_RTT_202ohm		(5)
156 #define PHY_LPDDR4_RTT_169ohm		(6)
157 #define PHY_LPDDR4_RTT_144ohm		(7)
158 #define PHY_LPDDR4_RTT_127ohm		(16)
159 #define PHY_LPDDR4_RTT_112ohm		(17)
160 #define PHY_LPDDR4_RTT_101ohm		(18)
161 #define PHY_LPDDR4_RTT_92ohm		(19)
162 #define PHY_LPDDR4_RTT_84ohm		(20)
163 #define PHY_LPDDR4_RTT_78ohm		(21)
164 #define PHY_LPDDR4_RTT_72ohm		(22)
165 #define PHY_LPDDR4_RTT_67ohm		(23)
166 #define PHY_LPDDR4_RTT_63ohm		(24)
167 #define PHY_LPDDR4_RTT_60ohm		(25)
168 #define PHY_LPDDR4_RTT_56ohm		(26)
169 #define PHY_LPDDR4_RTT_53ohm		(27)
170 #define PHY_LPDDR4_RTT_51ohm		(28)
171 #define PHY_LPDDR4_RTT_48ohm		(29)
172 #define PHY_LPDDR4_RTT_46ohm		(30)
173 #define PHY_LPDDR4_RTT_44ohm		(31)
174 
175 #define ADD_CMD_CA			(0x150)
176 #define ADD_GROUP_CS0_A			(0x170)
177 #define ADD_GROUP_CS0_B			(0x1d0)
178 #define ADD_GROUP_CS1_A			(0x1a0)
179 #define ADD_GROUP_CS1_B			(0x200)
180 
181 /* PMUGRF */
182 #define PMUGRF_OS_REG0			(0x200)
183 #define PMUGRF_OS_REG(n)		(PMUGRF_OS_REG0 + (n) * 4)
184 #define PMUGRF_CON_DDRPHY_BUFFEREN_MASK		(0x3 << (12 + 16))
185 #define PMUGRF_CON_DDRPHY_BUFFEREN_EN		(0x1 << 12)
186 #define PMUGRF_CON_DDRPHY_BUFFEREN_DIS	(0x2 << 12)
187 
188 /* DDR GRF */
189 #define DDR_GRF_CON(n)			(0 + (n) * 4)
190 #define DDR_GRF_STATUS_BASE		(0X100)
191 #define DDR_GRF_STATUS(n)		(DDR_GRF_STATUS_BASE + (n) * 4)
192 #define DDR_GRF_LP_CON			(0x20)
193 
194 #define SPLIT_MODE_32_L16_VALID		(0)
195 #define SPLIT_MODE_32_H16_VALID		(1)
196 #define SPLIT_MODE_16_L8_VALID		(2)
197 #define SPLIT_MODE_16_H8_VALID		(3)
198 
199 #define DDR_GRF_SPLIT_CON		(0x10)
200 #define SPLIT_MODE_MASK			(0x3)
201 #define SPLIT_MODE_OFFSET		(9)
202 #define SPLIT_BYPASS_MASK		(1)
203 #define SPLIT_BYPASS_OFFSET		(8)
204 #define SPLIT_SIZE_MASK			(0xff)
205 #define SPLIT_SIZE_OFFSET		(0)
206 
207 /* SGRF SOC_CON13 */
208 #define UPCTL2_ASRSTN_REQ(n)		(((0x1 << 0) << 16) | ((n) << 0))
209 #define UPCTL2_PSRSTN_REQ(n)		(((0x1 << 1) << 16) | ((n) << 1))
210 #define UPCTL2_SRSTN_REQ(n)		(((0x1 << 2) << 16) | ((n) << 2))
211 
212 /* CRU define */
213 /* CRU_PLL_CON0 */
214 #define PB(n)				((0x1 << (15 + 16)) | ((n) << 15))
215 #define POSTDIV1(n)			((0x7 << (12 + 16)) | ((n) << 12))
216 #define FBDIV(n)			((0xFFF << 16) | (n))
217 
218 /* CRU_PLL_CON1 */
219 #define RSTMODE(n)			((0x1 << (15 + 16)) | ((n) << 15))
220 #define RST(n)				((0x1 << (14 + 16)) | ((n) << 14))
221 #define PD(n)				((0x1 << (13 + 16)) | ((n) << 13))
222 #define DSMPD(n)			((0x1 << (12 + 16)) | ((n) << 12))
223 #define LOCK(n)				(((n) >> 10) & 0x1)
224 #define POSTDIV2(n)			((0x7 << (6 + 16)) | ((n) << 6))
225 #define REFDIV(n)			((0x3F << 16) | (n))
226 
227 /* CRU_MODE */
228 #define CLOCK_FROM_XIN_OSC		(0)
229 #define CLOCK_FROM_PLL			(1)
230 #define CLOCK_FROM_RTC_32K		(2)
231 #define DPLL_MODE(n)			((0x3 << (2 + 16)) | ((n) << 2))
232 
233 /* CRU_SOFTRESET_CON1 */
234 #define DDRPHY_PSRSTN_REQ(n)		(((0x1 << 14) << 16) | ((n) << 14))
235 #define DDRPHY_SRSTN_REQ(n)		(((0x1 << 15) << 16) | ((n) << 15))
236 /* CRU_CLKGATE_CON2 */
237 #define DDR_MSCH_EN_MASK		((0x1 << 10) << 16)
238 #define DDR_MSCH_EN_SHIFT		(10)
239 
240 /* CRU register */
241 #define CRU_PLL_CON(pll_id, n)		((pll_id)  * 0x20 + (n) * 4)
242 #define CRU_MODE			(0xa0)
243 #define CRU_GLB_CNT_TH			(0xb0)
244 #define CRU_CLKSEL_CON_BASE		0x100
245 #define CRU_CLKSELS_CON(i)		(CRU_CLKSEL_CON_BASE + ((i) * 4))
246 #define CRU_CLKGATE_CON_BASE		0x230
247 #define CRU_CLKGATE_CON(i)		(CRU_CLKGATE_CON_BASE + ((i) * 4))
248 #define CRU_CLKSFTRST_CON_BASE		0x300
249 #define CRU_CLKSFTRST_CON(i)		(CRU_CLKSFTRST_CON_BASE + ((i) * 4))
250 
251 /* SGRF_SOC_CON12 */
252 #define CLK_DDR_UPCTL_EN_MASK		((0x1 << 2) << 16)
253 #define CLK_DDR_UPCTL_EN_SHIFT		(2)
254 #define ACLK_DDR_UPCTL_EN_MASK		((0x1 << 0) << 16)
255 #define ACLK_DDR_UPCTL_EN_SHIFT		(0)
256 
257 /* DDRGRF DDR CON2 */
258 #define DFI_FREQ_CHANGE_ACK		BIT(10)
259 /* DDRGRF status8 */
260 #define DFI_FREQ_CHANGE_REQ		BIT(19)
261 
262 struct rv1126_ddrgrf {
263 	u32 ddr_grf_con[4];
264 	u32 grf_ddrsplit_con;
265 	u32 reserved1[(0x20 - 0x10) / 4 - 1];
266 	u32 ddr_grf_lp_con;
267 	u32 reserved2[(0x40 - 0x20) / 4 - 1];
268 	u32 grf_ddrphy_con[6];
269 	u32 reserved3[(0x100 - 0x54) / 4 - 1];
270 	u32 ddr_grf_status[18];
271 	u32 reserved4[(0x150 - 0x144) / 4 - 1];
272 	u32 grf_ddrhold_status;
273 	u32 reserved5[(0x160 - 0x150) / 4 - 1];
274 	u32 grf_ddrphy_status[2];
275 };
276 
277 struct rv1126_ddr_phy_regs {
278 	u32 phy[8][2];
279 };
280 
281 struct msch_regs {
282 	u32 coreid;
283 	u32 revisionid;
284 	u32 deviceconf;
285 	u32 devicesize;
286 	u32 ddrtiminga0;
287 	u32 ddrtimingb0;
288 	u32 ddrtimingc0;
289 	u32 devtodev0;
290 	u32 reserved1[(0x110 - 0x20) / 4];
291 	u32 ddrmode;
292 	u32 ddr4timing;
293 	u32 reserved2[(0x1000 - 0x118) / 4];
294 	u32 agingx0;
295 	u32 reserved3[(0x1040 - 0x1004) / 4];
296 	u32 aging0;
297 	u32 aging1;
298 	u32 aging2;
299 	u32 aging3;
300 };
301 
302 struct sdram_msch_timings {
303 	union noc_ddrtiminga0 ddrtiminga0;
304 	union noc_ddrtimingb0 ddrtimingb0;
305 	union noc_ddrtimingc0 ddrtimingc0;
306 	union noc_devtodev0 devtodev0;
307 	union noc_ddrmode ddrmode;
308 	union noc_ddr4timing ddr4timing;
309 	u32 agingx0;
310 	u32 aging0;
311 	u32 aging1;
312 	u32 aging2;
313 	u32 aging3;
314 };
315 
316 struct rv1126_sdram_channel {
317 	struct sdram_cap_info cap_info;
318 	struct sdram_msch_timings noc_timings;
319 };
320 
321 struct rv1126_sdram_params {
322 	struct rv1126_sdram_channel ch;
323 	struct sdram_base_params base;
324 	struct ddr_pctl_regs pctl_regs;
325 	struct rv1126_ddr_phy_regs phy_regs;
326 };
327 
328 struct rv1126_fsp_param {
329 	u32 flag;
330 	u32 freq_mhz;
331 
332 	/* dram size */
333 	u32 dq_odt;
334 	u32 ca_odt;
335 	u32 ds_pdds;
336 	u32 vref_ca[2];
337 	u32 vref_dq[2];
338 
339 	/* phy side */
340 	u32 wr_dq_drv;
341 	u32 wr_ca_drv;
342 	u32 wr_ckcs_drv;
343 	u32 rd_odt;
344 	u32 rd_odt_up_en;
345 	u32 rd_odt_down_en;
346 	u32 vref_inner;
347 	u32 vref_out;
348 	u32 lp4_drv_pd_en;
349 
350 	struct sdram_msch_timings noc_timings;
351 };
352 
353 #define MAX_IDX			(4)
354 #define FSP_FLAG		(0xfead0001)
355 #define SHARE_MEM_BASE		(0x100000)
356 /*
357  * Borrow share memory space to temporarily store FSP parame.
358  * In the stage of DDR init write FSP parame to this space.
359  * In the stage of trust init move FSP parame to SRAM space
360  * from share memory space.
361  */
362 #define FSP_PARAM_STORE_ADDR	(SHARE_MEM_BASE)
363 
364 #endif /* _ASM_ARCH_SDRAM_RK1126_H */
365