xref: /rk3399_rockchip-uboot/board/compulab/cl-som-am57x/spl.c (revision 46650d583b8067c8aecf2ddea585e8a97f937d0c)
1*46650d58SDmitry Lifshitz /*
2*46650d58SDmitry Lifshitz  * SPL data and initialization for CompuLab CL-SOM-AM57x board
3*46650d58SDmitry Lifshitz  *
4*46650d58SDmitry Lifshitz  * (C) Copyright 2016 CompuLab, Ltd. http://compulab.co.il/
5*46650d58SDmitry Lifshitz  *
6*46650d58SDmitry Lifshitz  * Author: Uri Mashiach <uri.mashiach@compulab.co.il>
7*46650d58SDmitry Lifshitz  *
8*46650d58SDmitry Lifshitz  * SPDX-License-Identifier:	GPL-2.0+
9*46650d58SDmitry Lifshitz  */
10*46650d58SDmitry Lifshitz 
11*46650d58SDmitry Lifshitz #include <asm/emif.h>
12*46650d58SDmitry Lifshitz #include <asm/omap_common.h>
13*46650d58SDmitry Lifshitz #include <asm/arch/sys_proto.h>
14*46650d58SDmitry Lifshitz 
15*46650d58SDmitry Lifshitz static const struct dmm_lisa_map_regs cl_som_am57x_lisa_regs = {
16*46650d58SDmitry Lifshitz 	.dmm_lisa_map_3 = 0x80740300,
17*46650d58SDmitry Lifshitz 	.is_ma_present  = 0x1
18*46650d58SDmitry Lifshitz };
19*46650d58SDmitry Lifshitz 
20*46650d58SDmitry Lifshitz void emif_get_dmm_regs(const struct dmm_lisa_map_regs **dmm_lisa_regs)
21*46650d58SDmitry Lifshitz {
22*46650d58SDmitry Lifshitz 	*dmm_lisa_regs = &cl_som_am57x_lisa_regs;
23*46650d58SDmitry Lifshitz }
24*46650d58SDmitry Lifshitz 
25*46650d58SDmitry Lifshitz static const struct emif_regs cl_som_am57x_emif1_ddr3_532mhz_emif_regs = {
26*46650d58SDmitry Lifshitz 	.sdram_config_init	= 0x61852332,
27*46650d58SDmitry Lifshitz 	.sdram_config		= 0x61852332,
28*46650d58SDmitry Lifshitz 	.sdram_config2		= 0x00000000,
29*46650d58SDmitry Lifshitz 	.ref_ctrl		= 0x000040f1,
30*46650d58SDmitry Lifshitz 	.ref_ctrl_final		= 0x00001040,
31*46650d58SDmitry Lifshitz 	.sdram_tim1		= 0xeeef36f3,
32*46650d58SDmitry Lifshitz 	.sdram_tim2		= 0x348f7fda,
33*46650d58SDmitry Lifshitz 	.sdram_tim3		= 0x027f88a8,
34*46650d58SDmitry Lifshitz 	.read_idle_ctrl		= 0x00050000,
35*46650d58SDmitry Lifshitz 	.zq_config		= 0x1007190b,
36*46650d58SDmitry Lifshitz 	.temp_alert_config	= 0x00000000,
37*46650d58SDmitry Lifshitz 	.emif_ddr_phy_ctlr_1_init = 0x0034400b,
38*46650d58SDmitry Lifshitz 	.emif_ddr_phy_ctlr_1	= 0x0e34400b,
39*46650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_1 = 0x04040100,
40*46650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_2 = 0x00740074,
41*46650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_3 = 0x00780078,
42*46650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_4 = 0x007c007c,
43*46650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_5 = 0x007b007b,
44*46650d58SDmitry Lifshitz 	.emif_rd_wr_lvl_rmp_win	= 0x00000000,
45*46650d58SDmitry Lifshitz 	.emif_rd_wr_lvl_rmp_ctl	= 0x80000000,
46*46650d58SDmitry Lifshitz 	.emif_rd_wr_lvl_ctl	= 0x00000000,
47*46650d58SDmitry Lifshitz 	.emif_rd_wr_exec_thresh	= 0x00000305
48*46650d58SDmitry Lifshitz };
49*46650d58SDmitry Lifshitz 
50*46650d58SDmitry Lifshitz /* Ext phy ctrl regs 1-35 */
51*46650d58SDmitry Lifshitz static const u32 cl_som_am57x_emif1_ddr3_ext_phy_ctrl_regs[] = {
52*46650d58SDmitry Lifshitz 	0x10040100,
53*46650d58SDmitry Lifshitz 	0x00740074,
54*46650d58SDmitry Lifshitz 	0x00780078,
55*46650d58SDmitry Lifshitz 	0x007c007c,
56*46650d58SDmitry Lifshitz 	0x007b007b,
57*46650d58SDmitry Lifshitz 	0x00800080,
58*46650d58SDmitry Lifshitz 	0x00360036,
59*46650d58SDmitry Lifshitz 	0x00340034,
60*46650d58SDmitry Lifshitz 	0x00360036,
61*46650d58SDmitry Lifshitz 	0x00350035,
62*46650d58SDmitry Lifshitz 	0x00350035,
63*46650d58SDmitry Lifshitz 
64*46650d58SDmitry Lifshitz 	0x01ff01ff,
65*46650d58SDmitry Lifshitz 	0x01ff01ff,
66*46650d58SDmitry Lifshitz 	0x01ff01ff,
67*46650d58SDmitry Lifshitz 	0x01ff01ff,
68*46650d58SDmitry Lifshitz 	0x01ff01ff,
69*46650d58SDmitry Lifshitz 
70*46650d58SDmitry Lifshitz 	0x00430043,
71*46650d58SDmitry Lifshitz 	0x003e003e,
72*46650d58SDmitry Lifshitz 	0x004a004a,
73*46650d58SDmitry Lifshitz 	0x00470047,
74*46650d58SDmitry Lifshitz 	0x00400040,
75*46650d58SDmitry Lifshitz 
76*46650d58SDmitry Lifshitz 	0x00000000,
77*46650d58SDmitry Lifshitz 	0x00600020,
78*46650d58SDmitry Lifshitz 	0x40011080,
79*46650d58SDmitry Lifshitz 	0x08102040,
80*46650d58SDmitry Lifshitz 
81*46650d58SDmitry Lifshitz 	0x00400040,
82*46650d58SDmitry Lifshitz 	0x00400040,
83*46650d58SDmitry Lifshitz 	0x00400040,
84*46650d58SDmitry Lifshitz 	0x00400040,
85*46650d58SDmitry Lifshitz 	0x00400040,
86*46650d58SDmitry Lifshitz 	0x0,
87*46650d58SDmitry Lifshitz 	0x0,
88*46650d58SDmitry Lifshitz 	0x0,
89*46650d58SDmitry Lifshitz 	0x0,
90*46650d58SDmitry Lifshitz 	0x0
91*46650d58SDmitry Lifshitz };
92*46650d58SDmitry Lifshitz 
93*46650d58SDmitry Lifshitz static const struct emif_regs cl_som_am57x_emif2_ddr3_532mhz_emif_regs = {
94*46650d58SDmitry Lifshitz 	.sdram_config_init	= 0x61852332,
95*46650d58SDmitry Lifshitz 	.sdram_config		= 0x61852332,
96*46650d58SDmitry Lifshitz 	.sdram_config2		= 0x00000000,
97*46650d58SDmitry Lifshitz 	.ref_ctrl		= 0x000040f1,
98*46650d58SDmitry Lifshitz 	.ref_ctrl_final		= 0x00001040,
99*46650d58SDmitry Lifshitz 	.sdram_tim1		= 0xeeef36f3,
100*46650d58SDmitry Lifshitz 	.sdram_tim2		= 0x348f7fda,
101*46650d58SDmitry Lifshitz 	.sdram_tim3		= 0x027f88a8,
102*46650d58SDmitry Lifshitz 	.read_idle_ctrl		= 0x00050000,
103*46650d58SDmitry Lifshitz 	.zq_config		= 0x1007190b,
104*46650d58SDmitry Lifshitz 	.temp_alert_config	= 0x00000000,
105*46650d58SDmitry Lifshitz 	.emif_ddr_phy_ctlr_1_init = 0x0034400b,
106*46650d58SDmitry Lifshitz 	.emif_ddr_phy_ctlr_1	= 0x0e34400b,
107*46650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_1 = 0x04040100,
108*46650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_2 = 0x00740074,
109*46650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_3 = 0x00780078,
110*46650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_4 = 0x007c007c,
111*46650d58SDmitry Lifshitz 	.emif_ddr_ext_phy_ctrl_5 = 0x007b007b,
112*46650d58SDmitry Lifshitz 	.emif_rd_wr_lvl_rmp_win	= 0x00000000,
113*46650d58SDmitry Lifshitz 	.emif_rd_wr_lvl_rmp_ctl	= 0x80000000,
114*46650d58SDmitry Lifshitz 	.emif_rd_wr_lvl_ctl	= 0x00000000,
115*46650d58SDmitry Lifshitz 	.emif_rd_wr_exec_thresh	= 0x00000305
116*46650d58SDmitry Lifshitz };
117*46650d58SDmitry Lifshitz 
118*46650d58SDmitry Lifshitz static const u32 cl_som_am57x_emif2_ddr3_ext_phy_ctrl_regs[] = {
119*46650d58SDmitry Lifshitz 	0x10040100,
120*46650d58SDmitry Lifshitz 	0x00820082,
121*46650d58SDmitry Lifshitz 	0x008b008b,
122*46650d58SDmitry Lifshitz 	0x00800080,
123*46650d58SDmitry Lifshitz 	0x007e007e,
124*46650d58SDmitry Lifshitz 	0x00800080,
125*46650d58SDmitry Lifshitz 	0x00370037,
126*46650d58SDmitry Lifshitz 	0x00390039,
127*46650d58SDmitry Lifshitz 	0x00360036,
128*46650d58SDmitry Lifshitz 	0x00370037,
129*46650d58SDmitry Lifshitz 	0x00350035,
130*46650d58SDmitry Lifshitz 	0x01ff01ff,
131*46650d58SDmitry Lifshitz 	0x01ff01ff,
132*46650d58SDmitry Lifshitz 	0x01ff01ff,
133*46650d58SDmitry Lifshitz 	0x01ff01ff,
134*46650d58SDmitry Lifshitz 	0x01ff01ff,
135*46650d58SDmitry Lifshitz 	0x00540054,
136*46650d58SDmitry Lifshitz 	0x00540054,
137*46650d58SDmitry Lifshitz 	0x004e004e,
138*46650d58SDmitry Lifshitz 	0x004c004c,
139*46650d58SDmitry Lifshitz 	0x00400040,
140*46650d58SDmitry Lifshitz 
141*46650d58SDmitry Lifshitz 	0x00000000,
142*46650d58SDmitry Lifshitz 	0x00600020,
143*46650d58SDmitry Lifshitz 	0x40011080,
144*46650d58SDmitry Lifshitz 	0x08102040,
145*46650d58SDmitry Lifshitz 
146*46650d58SDmitry Lifshitz 	0x00400040,
147*46650d58SDmitry Lifshitz 	0x00400040,
148*46650d58SDmitry Lifshitz 	0x00400040,
149*46650d58SDmitry Lifshitz 	0x00400040,
150*46650d58SDmitry Lifshitz 	0x00400040,
151*46650d58SDmitry Lifshitz 	0x0,
152*46650d58SDmitry Lifshitz 	0x0,
153*46650d58SDmitry Lifshitz 	0x0,
154*46650d58SDmitry Lifshitz 	0x0,
155*46650d58SDmitry Lifshitz 	0x0
156*46650d58SDmitry Lifshitz };
157*46650d58SDmitry Lifshitz 
158*46650d58SDmitry Lifshitz static struct vcores_data cl_som_am57x_volts = {
159*46650d58SDmitry Lifshitz 	.mpu.value[OPP_NOM]	= VDD_MPU_DRA7_NOM,
160*46650d58SDmitry Lifshitz 	.mpu.efuse.reg[OPP_NOM]	= STD_FUSE_OPP_VMIN_MPU_NOM,
161*46650d58SDmitry Lifshitz 	.mpu.efuse.reg_bits     = DRA752_EFUSE_REGBITS,
162*46650d58SDmitry Lifshitz 	.mpu.addr		= TPS659038_REG_ADDR_SMPS12,
163*46650d58SDmitry Lifshitz 	.mpu.pmic		= &tps659038,
164*46650d58SDmitry Lifshitz 
165*46650d58SDmitry Lifshitz 	.eve.value[OPP_NOM]	= VDD_EVE_DRA7_NOM,
166*46650d58SDmitry Lifshitz 	.eve.value[OPP_OD]	= VDD_EVE_DRA7_OD,
167*46650d58SDmitry Lifshitz 	.eve.value[OPP_HIGH]	= VDD_EVE_DRA7_HIGH,
168*46650d58SDmitry Lifshitz 	.eve.efuse.reg[OPP_NOM]	= STD_FUSE_OPP_VMIN_DSPEVE_NOM,
169*46650d58SDmitry Lifshitz 	.eve.efuse.reg[OPP_OD]	= STD_FUSE_OPP_VMIN_DSPEVE_OD,
170*46650d58SDmitry Lifshitz 	.eve.efuse.reg[OPP_HIGH]	= STD_FUSE_OPP_VMIN_DSPEVE_HIGH,
171*46650d58SDmitry Lifshitz 	.eve.efuse.reg_bits	= DRA752_EFUSE_REGBITS,
172*46650d58SDmitry Lifshitz 	.eve.addr		= TPS659038_REG_ADDR_SMPS45,
173*46650d58SDmitry Lifshitz 	.eve.pmic		= &tps659038,
174*46650d58SDmitry Lifshitz 
175*46650d58SDmitry Lifshitz 	.gpu.value[OPP_NOM]	= VDD_GPU_DRA7_NOM,
176*46650d58SDmitry Lifshitz 	.gpu.value[OPP_OD]	= VDD_GPU_DRA7_OD,
177*46650d58SDmitry Lifshitz 	.gpu.value[OPP_HIGH]	= VDD_GPU_DRA7_HIGH,
178*46650d58SDmitry Lifshitz 	.gpu.efuse.reg[OPP_NOM]	= STD_FUSE_OPP_VMIN_GPU_NOM,
179*46650d58SDmitry Lifshitz 	.gpu.efuse.reg[OPP_OD]	= STD_FUSE_OPP_VMIN_GPU_OD,
180*46650d58SDmitry Lifshitz 	.gpu.efuse.reg[OPP_HIGH]	= STD_FUSE_OPP_VMIN_GPU_HIGH,
181*46650d58SDmitry Lifshitz 	.gpu.efuse.reg_bits	= DRA752_EFUSE_REGBITS,
182*46650d58SDmitry Lifshitz 	.gpu.addr		= TPS659038_REG_ADDR_SMPS6,
183*46650d58SDmitry Lifshitz 	.gpu.pmic		= &tps659038,
184*46650d58SDmitry Lifshitz 
185*46650d58SDmitry Lifshitz 	.core.value[OPP_NOM]	= VDD_CORE_DRA7_NOM,
186*46650d58SDmitry Lifshitz 	.core.efuse.reg[OPP_NOM]	= STD_FUSE_OPP_VMIN_CORE_NOM,
187*46650d58SDmitry Lifshitz 	.core.efuse.reg_bits	= DRA752_EFUSE_REGBITS,
188*46650d58SDmitry Lifshitz 	.core.addr		= TPS659038_REG_ADDR_SMPS7,
189*46650d58SDmitry Lifshitz 	.core.pmic		= &tps659038,
190*46650d58SDmitry Lifshitz 
191*46650d58SDmitry Lifshitz 	.iva.value[OPP_NOM]	= VDD_IVA_DRA7_NOM,
192*46650d58SDmitry Lifshitz 	.iva.value[OPP_OD]	= VDD_IVA_DRA7_OD,
193*46650d58SDmitry Lifshitz 	.iva.value[OPP_HIGH]	= VDD_IVA_DRA7_HIGH,
194*46650d58SDmitry Lifshitz 	.iva.efuse.reg[OPP_NOM]	= STD_FUSE_OPP_VMIN_IVA_NOM,
195*46650d58SDmitry Lifshitz 	.iva.efuse.reg[OPP_OD]	= STD_FUSE_OPP_VMIN_IVA_OD,
196*46650d58SDmitry Lifshitz 	.iva.efuse.reg[OPP_HIGH]	= STD_FUSE_OPP_VMIN_IVA_HIGH,
197*46650d58SDmitry Lifshitz 	.iva.efuse.reg_bits	= DRA752_EFUSE_REGBITS,
198*46650d58SDmitry Lifshitz 	.iva.addr		= TPS659038_REG_ADDR_SMPS8,
199*46650d58SDmitry Lifshitz 	.iva.pmic		= &tps659038,
200*46650d58SDmitry Lifshitz };
201*46650d58SDmitry Lifshitz 
202*46650d58SDmitry Lifshitz void hw_data_init(void)
203*46650d58SDmitry Lifshitz {
204*46650d58SDmitry Lifshitz 	*prcm = &dra7xx_prcm;
205*46650d58SDmitry Lifshitz 	*dplls_data = &dra7xx_dplls;
206*46650d58SDmitry Lifshitz 	*omap_vcores = &cl_som_am57x_volts;
207*46650d58SDmitry Lifshitz 	*ctrl = &dra7xx_ctrl;
208*46650d58SDmitry Lifshitz }
209*46650d58SDmitry Lifshitz 
210*46650d58SDmitry Lifshitz void emif_get_reg_dump(u32 emif_nr, const struct emif_regs **regs)
211*46650d58SDmitry Lifshitz {
212*46650d58SDmitry Lifshitz 	switch (emif_nr) {
213*46650d58SDmitry Lifshitz 	case 1:
214*46650d58SDmitry Lifshitz 		*regs = &cl_som_am57x_emif1_ddr3_532mhz_emif_regs;
215*46650d58SDmitry Lifshitz 		break;
216*46650d58SDmitry Lifshitz 	case 2:
217*46650d58SDmitry Lifshitz 		*regs = &cl_som_am57x_emif2_ddr3_532mhz_emif_regs;
218*46650d58SDmitry Lifshitz 		break;
219*46650d58SDmitry Lifshitz 	}
220*46650d58SDmitry Lifshitz }
221*46650d58SDmitry Lifshitz 
222*46650d58SDmitry Lifshitz void emif_get_ext_phy_ctrl_const_regs(u32 emif_nr, const u32 **regs, u32 *size)
223*46650d58SDmitry Lifshitz {
224*46650d58SDmitry Lifshitz 	switch (emif_nr) {
225*46650d58SDmitry Lifshitz 	case 1:
226*46650d58SDmitry Lifshitz 		*regs = cl_som_am57x_emif1_ddr3_ext_phy_ctrl_regs;
227*46650d58SDmitry Lifshitz 		*size = ARRAY_SIZE(cl_som_am57x_emif1_ddr3_ext_phy_ctrl_regs);
228*46650d58SDmitry Lifshitz 		break;
229*46650d58SDmitry Lifshitz 	case 2:
230*46650d58SDmitry Lifshitz 		*regs = cl_som_am57x_emif2_ddr3_ext_phy_ctrl_regs;
231*46650d58SDmitry Lifshitz 		*size = ARRAY_SIZE(cl_som_am57x_emif2_ddr3_ext_phy_ctrl_regs);
232*46650d58SDmitry Lifshitz 		break;
233*46650d58SDmitry Lifshitz 	}
234*46650d58SDmitry Lifshitz }
235