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