usb: Rename SPL_USB_SUPPORT to SPL_USB_STORAGE
[oweals/u-boot.git] / arch / arm / mach-omap2 / omap5 / hw_data.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  *
4  * HW data initialization for OMAP5
5  *
6  * (C) Copyright 2013
7  * Texas Instruments, <www.ti.com>
8  *
9  * Sricharan R <r.sricharan@ti.com>
10  */
11 #include <common.h>
12 #include <palmas.h>
13 #include <asm/arch/omap.h>
14 #include <asm/arch/sys_proto.h>
15 #include <asm/omap_common.h>
16 #include <asm/arch/clock.h>
17 #include <asm/omap_gpio.h>
18 #include <asm/io.h>
19 #include <asm/emif.h>
20
21 struct prcm_regs const **prcm =
22                         (struct prcm_regs const **) OMAP_SRAM_SCRATCH_PRCM_PTR;
23 struct dplls const **dplls_data =
24                         (struct dplls const **) OMAP_SRAM_SCRATCH_DPLLS_PTR;
25 struct vcores_data const **omap_vcores =
26                 (struct vcores_data const **) OMAP_SRAM_SCRATCH_VCORES_PTR;
27 struct omap_sys_ctrl_regs const **ctrl =
28         (struct omap_sys_ctrl_regs const **)OMAP_SRAM_SCRATCH_SYS_CTRL;
29
30 /* OPP NOM FREQUENCY for ES1.0 */
31 static const struct dpll_params mpu_dpll_params_800mhz[NUM_SYS_CLKS] = {
32         {200, 2, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1},        /* 12 MHz   */
33         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
34         {1000, 20, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1},      /* 16.8 MHz */
35         {375, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1},        /* 19.2 MHz */
36         {400, 12, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 26 MHz   */
37         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
38         {375, 17, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1}        /* 38.4 MHz */
39 };
40
41 /* OPP NOM FREQUENCY for OMAP5 ES2.0, and DRA7 ES1.0 */
42 static const struct dpll_params mpu_dpll_params_1ghz[NUM_SYS_CLKS] = {
43         {250, 2, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},         /* 12 MHz   */
44         {500, 9, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},         /* 20 MHz   */
45         {119, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},         /* 16.8 MHz */
46         {625, 11, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},        /* 19.2 MHz */
47         {500, 12, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},        /* 26 MHz   */
48         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
49         {625, 23, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},        /* 38.4 MHz */
50 };
51
52 static const struct dpll_params
53                         core_dpll_params_2128mhz_ddr532[NUM_SYS_CLKS] = {
54         {266, 2, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1},              /* 12 MHz   */
55         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
56         {443, 6, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1},              /* 16.8 MHz */
57         {277, 4, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1},              /* 19.2 MHz */
58         {368, 8, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1},              /* 26 MHz   */
59         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
60         {277, 9, 2, 5, 8, 4, 62, 5, -1, 5, 7, -1}               /* 38.4 MHz */
61 };
62
63 static const struct dpll_params
64                         core_dpll_params_2128mhz_ddr532_es2[NUM_SYS_CLKS] = {
65         {266, 2, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6},               /* 12 MHz   */
66         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
67         {443, 6, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6},               /* 16.8 MHz */
68         {277, 4, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6},               /* 19.2 MHz */
69         {368, 8, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6},               /* 26 MHz   */
70         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
71         {277, 9, 2, 5, 8, 4, 62, 63, 6, 5, 7, 6}                /* 38.4 MHz */
72 };
73
74 static const struct dpll_params
75                 core_dpll_params_2128mhz_dra7xx[NUM_SYS_CLKS] = {
76         {266, 2, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6},              /* 12 MHz   */
77         {266, 4, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6},              /* 20 MHz   */
78         {443, 6, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6},              /* 16.8 MHz */
79         {277, 4, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6},              /* 19.2 MHz */
80         {368, 8, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6},              /* 26 MHz   */
81         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
82         {277, 9, 2, 1, -1, 4, 62, 5, -1, 5, 4, 6},              /* 38.4 MHz */
83 };
84
85 static const struct dpll_params per_dpll_params_768mhz[NUM_SYS_CLKS] = {
86         {32, 0, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1},             /* 12 MHz   */
87         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
88         {160, 6, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1},            /* 16.8 MHz */
89         {20, 0, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1},             /* 19.2 MHz */
90         {192, 12, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1},           /* 26 MHz   */
91         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
92         {10, 0, 4, 3, 6, 4, -1, 2, -1, -1, -1, -1}              /* 38.4 MHz */
93 };
94
95 static const struct dpll_params per_dpll_params_768mhz_es2[NUM_SYS_CLKS] = {
96         {32, 0, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1},             /* 12 MHz   */
97         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
98         {160, 6, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1},            /* 16.8 MHz */
99         {20, 0, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1},             /* 19.2 MHz */
100         {192, 12, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1},           /* 26 MHz   */
101         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
102         {10, 0, 4, 3, 3, 4, -1, 2, -1, -1, -1, -1}              /* 38.4 MHz */
103 };
104
105 static const struct dpll_params per_dpll_params_768mhz_dra7xx[NUM_SYS_CLKS] = {
106         {32, 0, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1},              /* 12 MHz   */
107         {96, 4, 4, 1, 3, 4, 10, 2, -1, -1, -1, -1},             /* 20 MHz   */
108         {160, 6, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1},             /* 16.8 MHz */
109         {20, 0, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1},              /* 19.2 MHz */
110         {192, 12, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1},            /* 26 MHz   */
111         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
112         {10, 0, 4, 1, 3, 4, 4, 2, -1, -1, -1, -1},              /* 38.4 MHz */
113 };
114
115 static const struct dpll_params per_dpll_params_768mhz_dra76x[NUM_SYS_CLKS] = {
116         {32, 0, 4, 1, 3, 4, 8, 2, -1, -1, -1, -1},              /* 12 MHz   */
117         {96, 4, 4, 1, 3, 4, 8, 2, -1, -1, -1, -1},              /* 20 MHz   */
118         {160, 6, 4, 1, 3, 4, 8, 2, -1, -1, -1, -1},             /* 16.8 MHz */
119         {20, 0, 4, 1, 3, 4, 8, 2, -1, -1, -1, -1},              /* 19.2 MHz */
120         {192, 12, 4, 1, 3, 4, 8, 2, -1, -1, -1, -1},            /* 26 MHz   */
121         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
122         {10, 0, 4, 1, 3, 4, 8, 2, -1, -1, -1, -1},              /* 38.4 MHz */
123 };
124
125 static const struct dpll_params iva_dpll_params_2330mhz[NUM_SYS_CLKS] = {
126         {1165, 11, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1},       /* 12 MHz   */
127         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
128         {208, 2, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1},         /* 16.8 MHz */
129         {182, 2, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1},         /* 19.2 MHz */
130         {224, 4, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1},         /* 26 MHz   */
131         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
132         {91, 2, -1, -1, 5, 6, -1, -1, -1, -1, -1, -1}           /* 38.4 MHz */
133 };
134
135 static const struct dpll_params iva_dpll_params_2330mhz_dra7xx[NUM_SYS_CLKS] = {
136         {1165, 11, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 12 MHz   */
137         {233, 3, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1},         /* 20 MHz */
138         {208, 2, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1},         /* 16.8 MHz */
139         {182, 2, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1},         /* 19.2 MHz */
140         {224, 4, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1},         /* 26 MHz   */
141         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
142         {91, 2, 3, 1, -1, -1, -1, -1, -1, -1, -1, -1},          /* 38.4 MHz */
143 };
144
145 /* ABE M & N values with sys_clk as source */
146 #ifdef CONFIG_SYS_OMAP_ABE_SYSCK
147 static const struct dpll_params
148                 abe_dpll_params_sysclk_196608khz[NUM_SYS_CLKS] = {
149         {49, 5, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1},         /* 12 MHz   */
150         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 13 MHz   */
151         {35, 5, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},          /* 16.8 MHz */
152         {46, 8, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},          /* 19.2 MHz */
153         {34, 8, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},          /* 26 MHz   */
154         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
155         {64, 24, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1}          /* 38.4 MHz */
156 };
157 #endif
158
159 /* ABE M & N values with 32K clock as source */
160 #ifndef CONFIG_SYS_OMAP_ABE_SYSCK
161 static const struct dpll_params abe_dpll_params_32k_196608khz = {
162         750, 0, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1
163 };
164 #endif
165
166 /* ABE M & N values with sysclk2(22.5792 MHz) as input */
167 static const struct dpll_params
168                 abe_dpll_params_sysclk2_361267khz[NUM_SYS_CLKS] = {
169         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 12 MHz   */
170         {16, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1},          /* 20 MHz   */
171         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 16.8 MHz */
172         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 19.2 MHz */
173         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 26 MHz   */
174         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
175         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 38.4 MHz */
176 };
177
178 static const struct dpll_params usb_dpll_params_1920mhz[NUM_SYS_CLKS] = {
179         {400, 4, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1},        /* 12 MHz   */
180         {480, 9, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1},        /* 20 MHz   */
181         {400, 6, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1},        /* 16.8 MHz */
182         {400, 7, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1},        /* 19.2 MHz */
183         {480, 12, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 26 MHz   */
184         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
185         {400, 15, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 38.4 MHz */
186 };
187
188 static const struct dpll_params ddr_dpll_params_2664mhz[NUM_SYS_CLKS] = {
189         {111, 0, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},          /* 12 MHz   */
190         {333, 4, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},          /* 20 MHz   */
191         {555, 6, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},          /* 16.8 MHz */
192         {555, 7, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},          /* 19.2 MHz */
193         {666, 12, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},         /* 26 MHz   */
194         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
195         {555, 15, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},         /* 38.4 MHz */
196 };
197
198 static const struct dpll_params ddr_dpll_params_2128mhz[NUM_SYS_CLKS] = {
199         {266, 2, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},          /* 12 MHz   */
200         {266, 4, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},          /* 20 MHz   */
201         {190, 2, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},          /* 16.8 MHz */
202         {665, 11, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},         /* 19.2 MHz */
203         {532, 12, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},         /* 26 MHz   */
204         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
205         {665, 23, 2, 1, 8, -1, -1, -1, -1, -1, -1, -1},         /* 38.4 MHz */
206 };
207
208 static const struct dpll_params gmac_dpll_params_2000mhz[NUM_SYS_CLKS] = {
209         {250, 2, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1},         /* 12 MHz   */
210         {250, 4, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1},         /* 20 MHz   */
211         {119, 1, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1},         /* 16.8 MHz */
212         {625, 11, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1},        /* 19.2 MHz */
213         {500, 12, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1},        /* 26 MHz   */
214         {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},       /* 27 MHz   */
215         {625, 23, 4, 10, 40, 8, 10, -1, -1, -1, -1, -1},        /* 38.4 MHz */
216 };
217
218 struct dplls omap5_dplls_es1 = {
219         .mpu = mpu_dpll_params_800mhz,
220         .core = core_dpll_params_2128mhz_ddr532,
221         .per = per_dpll_params_768mhz,
222         .iva = iva_dpll_params_2330mhz,
223 #ifdef CONFIG_SYS_OMAP_ABE_SYSCK
224         .abe = abe_dpll_params_sysclk_196608khz,
225 #else
226         .abe = &abe_dpll_params_32k_196608khz,
227 #endif
228         .usb = usb_dpll_params_1920mhz,
229         .ddr = NULL
230 };
231
232 struct dplls omap5_dplls_es2 = {
233         .mpu = mpu_dpll_params_1ghz,
234         .core = core_dpll_params_2128mhz_ddr532_es2,
235         .per = per_dpll_params_768mhz_es2,
236         .iva = iva_dpll_params_2330mhz,
237 #ifdef CONFIG_SYS_OMAP_ABE_SYSCK
238         .abe = abe_dpll_params_sysclk_196608khz,
239 #else
240         .abe = &abe_dpll_params_32k_196608khz,
241 #endif
242         .usb = usb_dpll_params_1920mhz,
243         .ddr = NULL
244 };
245
246 struct dplls dra76x_dplls = {
247         .mpu = mpu_dpll_params_1ghz,
248         .core = core_dpll_params_2128mhz_dra7xx,
249         .per = per_dpll_params_768mhz_dra76x,
250         .abe = abe_dpll_params_sysclk2_361267khz,
251         .iva = iva_dpll_params_2330mhz_dra7xx,
252         .usb = usb_dpll_params_1920mhz,
253         .ddr =  ddr_dpll_params_2664mhz,
254         .gmac = gmac_dpll_params_2000mhz,
255 };
256
257 struct dplls dra7xx_dplls = {
258         .mpu = mpu_dpll_params_1ghz,
259         .core = core_dpll_params_2128mhz_dra7xx,
260         .per = per_dpll_params_768mhz_dra7xx,
261         .abe = abe_dpll_params_sysclk2_361267khz,
262         .iva = iva_dpll_params_2330mhz_dra7xx,
263         .usb = usb_dpll_params_1920mhz,
264         .ddr = ddr_dpll_params_2128mhz,
265         .gmac = gmac_dpll_params_2000mhz,
266 };
267
268 struct dplls dra72x_dplls = {
269         .mpu = mpu_dpll_params_1ghz,
270         .core = core_dpll_params_2128mhz_dra7xx,
271         .per = per_dpll_params_768mhz_dra7xx,
272         .abe = abe_dpll_params_sysclk2_361267khz,
273         .iva = iva_dpll_params_2330mhz_dra7xx,
274         .usb = usb_dpll_params_1920mhz,
275         .ddr =  ddr_dpll_params_2664mhz,
276         .gmac = gmac_dpll_params_2000mhz,
277 };
278
279 struct pmic_data palmas = {
280         .base_offset = PALMAS_SMPS_BASE_VOLT_UV,
281         .step = 10000, /* 10 mV represented in uV */
282         /*
283          * Offset codes 1-6 all give the base voltage in Palmas
284          * Offset code 0 switches OFF the SMPS
285          */
286         .start_code = 6,
287         .i2c_slave_addr = SMPS_I2C_SLAVE_ADDR,
288         .pmic_bus_init  = sri2c_init,
289         .pmic_write     = omap_vc_bypass_send_value,
290         .gpio_en = 0,
291 };
292
293 /* The TPS659038 and TPS65917 are software-compatible, use common struct */
294 struct pmic_data tps659038 = {
295         .base_offset = PALMAS_SMPS_BASE_VOLT_UV,
296         .step = 10000, /* 10 mV represented in uV */
297         /*
298          * Offset codes 1-6 all give the base voltage in Palmas
299          * Offset code 0 switches OFF the SMPS
300          */
301         .start_code = 6,
302         .i2c_slave_addr = TPS659038_I2C_SLAVE_ADDR,
303         .pmic_bus_init  = gpi2c_init,
304         .pmic_write     = palmas_i2c_write_u8,
305         .gpio_en = 0,
306 };
307
308 /* The LP87565*/
309 struct pmic_data lp87565 = {
310         .base_offset = LP873X_BUCK_BASE_VOLT_UV,
311         .step = 5000, /* 5 mV represented in uV */
312         /*
313          * Offset codes 0 - 0x13 Invalid.
314          * Offset codes 0x14 0x17 give 10mV steps
315          * Offset codes 0x17 through 0x9D give 5mV steps
316          * So let us start with our operating range from .73V
317          */
318         .start_code = 0x17,
319         .i2c_slave_addr = 0x60,
320         .pmic_bus_init  = gpi2c_init,
321         .pmic_write     = palmas_i2c_write_u8,
322 };
323
324 /* The LP8732 and LP8733 are software-compatible, use common struct */
325 struct pmic_data lp8733 = {
326         .base_offset = LP873X_BUCK_BASE_VOLT_UV,
327         .step = 5000, /* 5 mV represented in uV */
328         /*
329          * Offset codes 0 - 0x13 Invalid.
330          * Offset codes 0x14 0x17 give 10mV steps
331          * Offset codes 0x17 through 0x9D give 5mV steps
332          * So let us start with our operating range from .73V
333          */
334         .start_code = 0x17,
335         .i2c_slave_addr = 0x60,
336         .pmic_bus_init  = gpi2c_init,
337         .pmic_write     = palmas_i2c_write_u8,
338 };
339
340 struct vcores_data omap5430_volts = {
341         .mpu.value[OPP_NOM] = VDD_MPU,
342         .mpu.addr = SMPS_REG_ADDR_12_MPU,
343         .mpu.pmic = &palmas,
344
345         .core.value[OPP_NOM] = VDD_CORE,
346         .core.addr = SMPS_REG_ADDR_8_CORE,
347         .core.pmic = &palmas,
348
349         .mm.value[OPP_NOM] = VDD_MM,
350         .mm.addr = SMPS_REG_ADDR_45_IVA,
351         .mm.pmic = &palmas,
352 };
353
354 struct vcores_data omap5430_volts_es2 = {
355         .mpu.value[OPP_NOM] = VDD_MPU_ES2,
356         .mpu.addr = SMPS_REG_ADDR_12_MPU,
357         .mpu.pmic = &palmas,
358         .mpu.abb_tx_done_mask = OMAP_ABB_MPU_TXDONE_MASK,
359
360         .core.value[OPP_NOM] = VDD_CORE_ES2,
361         .core.addr = SMPS_REG_ADDR_8_CORE,
362         .core.pmic = &palmas,
363
364         .mm.value[OPP_NOM] = VDD_MM_ES2,
365         .mm.addr = SMPS_REG_ADDR_45_IVA,
366         .mm.pmic = &palmas,
367         .mm.abb_tx_done_mask = OMAP_ABB_MM_TXDONE_MASK,
368
369         .mpu.efuse.reg[OPP_NOM] = OMAP5_ES2_PROD_MPU_OPNO_VMIN,
370         .mpu.efuse.reg_bits     = OMAP5_ES2_PROD_REGBITS,
371
372         .core.efuse.reg[OPP_NOM] = OMAP5_ES2_PROD_CORE_OPNO_VMIN,
373         .core.efuse.reg_bits    = OMAP5_ES2_PROD_REGBITS,
374
375         .mm.efuse.reg[OPP_NOM]  = OMAP5_ES2_PROD_MM_OPNO_VMIN,
376         .mm.efuse.reg_bits      = OMAP5_ES2_PROD_REGBITS,
377 };
378
379 /*
380  * Enable essential clock domains, modules and
381  * do some additional special settings needed
382  */
383 void enable_basic_clocks(void)
384 {
385         u32 const clk_domains_essential[] = {
386                 (*prcm)->cm_l4per_clkstctrl,
387                 (*prcm)->cm_l3init_clkstctrl,
388                 (*prcm)->cm_memif_clkstctrl,
389                 (*prcm)->cm_l4cfg_clkstctrl,
390 #ifdef CONFIG_DRIVER_TI_CPSW
391                 (*prcm)->cm_gmac_clkstctrl,
392 #endif
393                 0
394         };
395
396         u32 const clk_modules_hw_auto_essential[] = {
397                 (*prcm)->cm_l3_gpmc_clkctrl,
398                 (*prcm)->cm_memif_emif_1_clkctrl,
399                 (*prcm)->cm_memif_emif_2_clkctrl,
400                 (*prcm)->cm_l4cfg_l4_cfg_clkctrl,
401                 (*prcm)->cm_wkup_gpio1_clkctrl,
402                 (*prcm)->cm_l4per_gpio2_clkctrl,
403                 (*prcm)->cm_l4per_gpio3_clkctrl,
404                 (*prcm)->cm_l4per_gpio4_clkctrl,
405                 (*prcm)->cm_l4per_gpio5_clkctrl,
406                 (*prcm)->cm_l4per_gpio6_clkctrl,
407                 (*prcm)->cm_l4per_gpio7_clkctrl,
408                 (*prcm)->cm_l4per_gpio8_clkctrl,
409 #ifdef CONFIG_SCSI_AHCI_PLAT
410                 (*prcm)->cm_l3init_ocp2scp3_clkctrl,
411 #endif
412                 0
413         };
414
415         u32 const clk_modules_explicit_en_essential[] = {
416                 (*prcm)->cm_wkup_gptimer1_clkctrl,
417                 (*prcm)->cm_l3init_hsmmc1_clkctrl,
418                 (*prcm)->cm_l3init_hsmmc2_clkctrl,
419                 (*prcm)->cm_l4per_gptimer2_clkctrl,
420                 (*prcm)->cm_wkup_wdtimer2_clkctrl,
421                 (*prcm)->cm_l4per_uart3_clkctrl,
422                 (*prcm)->cm_l4per_i2c1_clkctrl,
423 #ifdef CONFIG_DRIVER_TI_CPSW
424                 (*prcm)->cm_gmac_gmac_clkctrl,
425 #endif
426
427 #ifdef CONFIG_TI_QSPI
428                 (*prcm)->cm_l4per_qspi_clkctrl,
429 #endif
430 #ifdef CONFIG_SCSI_AHCI_PLAT
431                 (*prcm)->cm_l3init_sata_clkctrl,
432 #endif
433                 0
434         };
435
436         /* Enable optional additional functional clock for GPIO4 */
437         setbits_le32((*prcm)->cm_l4per_gpio4_clkctrl,
438                         GPIO4_CLKCTRL_OPTFCLKEN_MASK);
439
440         /* Enable 192 MHz clock for MMC1 & MMC2 */
441         setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl,
442                         HSMMC_CLKCTRL_CLKSEL_MASK);
443         setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl,
444                         HSMMC_CLKCTRL_CLKSEL_MASK);
445
446         /* Set the correct clock dividers for mmc */
447         clrbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl,
448                      HSMMC_CLKCTRL_CLKSEL_DIV_MASK);
449         clrbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl,
450                      HSMMC_CLKCTRL_CLKSEL_DIV_MASK);
451
452         /* Select 32KHz clock as the source of GPTIMER1 */
453         setbits_le32((*prcm)->cm_wkup_gptimer1_clkctrl,
454                         GPTIMER1_CLKCTRL_CLKSEL_MASK);
455
456         do_enable_clocks(clk_domains_essential,
457                          clk_modules_hw_auto_essential,
458                          clk_modules_explicit_en_essential,
459                          1);
460
461 #ifdef CONFIG_TI_QSPI
462         setbits_le32((*prcm)->cm_l4per_qspi_clkctrl, (1<<24));
463 #endif
464
465 #ifdef CONFIG_SCSI_AHCI_PLAT
466         /* Enable optional functional clock for SATA */
467         setbits_le32((*prcm)->cm_l3init_sata_clkctrl,
468                      SATA_CLKCTRL_OPTFCLKEN_MASK);
469 #endif
470
471         /* Enable SCRM OPT clocks for PER and CORE dpll */
472         setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl,
473                         OPTFCLKEN_SCRM_PER_MASK);
474         setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl,
475                         OPTFCLKEN_SCRM_CORE_MASK);
476 }
477
478 void enable_basic_uboot_clocks(void)
479 {
480         u32 const clk_domains_essential[] = {
481 #if defined(CONFIG_DRA7XX)
482                 (*prcm)->cm_ipu_clkstctrl,
483 #endif
484                 0
485         };
486
487         u32 const clk_modules_hw_auto_essential[] = {
488                 (*prcm)->cm_l3init_hsusbtll_clkctrl,
489                 0
490         };
491
492         u32 const clk_modules_explicit_en_essential[] = {
493                 (*prcm)->cm_l4per_mcspi1_clkctrl,
494                 (*prcm)->cm_l4per_i2c2_clkctrl,
495                 (*prcm)->cm_l4per_i2c3_clkctrl,
496                 (*prcm)->cm_l4per_i2c4_clkctrl,
497 #if defined(CONFIG_DRA7XX)
498                 (*prcm)->cm_ipu_i2c5_clkctrl,
499 #else
500                 (*prcm)->cm_l4per_i2c5_clkctrl,
501 #endif
502                 (*prcm)->cm_l3init_hsusbhost_clkctrl,
503                 (*prcm)->cm_l3init_fsusb_clkctrl,
504                 0
505         };
506         do_enable_clocks(clk_domains_essential,
507                          clk_modules_hw_auto_essential,
508                          clk_modules_explicit_en_essential,
509                          1);
510 }
511
512 #ifdef CONFIG_TI_EDMA3
513 void enable_edma3_clocks(void)
514 {
515         u32 const clk_domains_edma3[] = {
516                 0
517         };
518
519         u32 const clk_modules_hw_auto_edma3[] = {
520                 (*prcm)->cm_l3main1_tptc1_clkctrl,
521                 (*prcm)->cm_l3main1_tptc2_clkctrl,
522                 0
523         };
524
525         u32 const clk_modules_explicit_en_edma3[] = {
526                 0
527         };
528
529         do_enable_clocks(clk_domains_edma3,
530                          clk_modules_hw_auto_edma3,
531                          clk_modules_explicit_en_edma3,
532                          1);
533 }
534
535 void disable_edma3_clocks(void)
536 {
537         u32 const clk_domains_edma3[] = {
538                 0
539         };
540
541         u32 const clk_modules_disable_edma3[] = {
542                 (*prcm)->cm_l3main1_tptc1_clkctrl,
543                 (*prcm)->cm_l3main1_tptc2_clkctrl,
544                 0
545         };
546
547         do_disable_clocks(clk_domains_edma3,
548                           clk_modules_disable_edma3,
549                           1);
550 }
551 #endif
552
553 #if defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_XHCI_OMAP)
554 void enable_usb_clocks(int index)
555 {
556         u32 cm_l3init_usb_otg_ss_clkctrl = 0;
557
558         if (index == 0) {
559                 cm_l3init_usb_otg_ss_clkctrl =
560                         (*prcm)->cm_l3init_usb_otg_ss1_clkctrl;
561                 /* Enable 960 MHz clock for dwc3 */
562                 setbits_le32((*prcm)->cm_l3init_usb_otg_ss1_clkctrl,
563                              OPTFCLKEN_REFCLK960M);
564
565                 /* Enable 32 KHz clock for USB_PHY1 */
566                 setbits_le32((*prcm)->cm_coreaon_usb_phy1_core_clkctrl,
567                              USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K);
568
569                 /* Enable 32 KHz clock for USB_PHY3 */
570                 if (is_dra7xx())
571                         setbits_le32((*prcm)->cm_coreaon_usb_phy3_core_clkctrl,
572                                      USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K);
573         } else if (index == 1) {
574                 cm_l3init_usb_otg_ss_clkctrl =
575                         (*prcm)->cm_l3init_usb_otg_ss2_clkctrl;
576                 /* Enable 960 MHz clock for dwc3 */
577                 setbits_le32((*prcm)->cm_l3init_usb_otg_ss2_clkctrl,
578                              OPTFCLKEN_REFCLK960M);
579
580                 /* Enable 32 KHz clock for dwc3 */
581                 setbits_le32((*prcm)->cm_coreaon_usb_phy2_core_clkctrl,
582                              USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K);
583
584                 /* Enable 60 MHz clock for USB2PHY2 */
585                 setbits_le32((*prcm)->cm_coreaon_l3init_60m_gfclk_clkctrl,
586                              L3INIT_CLKCTRL_OPTFCLKEN_60M_GFCLK);
587         }
588
589         u32 const clk_domains_usb[] = {
590                 0
591         };
592
593         u32 const clk_modules_hw_auto_usb[] = {
594                 (*prcm)->cm_l3init_ocp2scp1_clkctrl,
595                 cm_l3init_usb_otg_ss_clkctrl,
596                 0
597         };
598
599         u32 const clk_modules_explicit_en_usb[] = {
600                 0
601         };
602
603         do_enable_clocks(clk_domains_usb,
604                          clk_modules_hw_auto_usb,
605                          clk_modules_explicit_en_usb,
606                          1);
607 }
608
609 void disable_usb_clocks(int index)
610 {
611         u32 cm_l3init_usb_otg_ss_clkctrl = 0;
612
613         if (index == 0) {
614                 cm_l3init_usb_otg_ss_clkctrl =
615                         (*prcm)->cm_l3init_usb_otg_ss1_clkctrl;
616                 /* Disable 960 MHz clock for dwc3 */
617                 clrbits_le32((*prcm)->cm_l3init_usb_otg_ss1_clkctrl,
618                              OPTFCLKEN_REFCLK960M);
619
620                 /* Disable 32 KHz clock for USB_PHY1 */
621                 clrbits_le32((*prcm)->cm_coreaon_usb_phy1_core_clkctrl,
622                              USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K);
623
624                 /* Disable 32 KHz clock for USB_PHY3 */
625                 if (is_dra7xx())
626                         clrbits_le32((*prcm)->cm_coreaon_usb_phy3_core_clkctrl,
627                                      USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K);
628         } else if (index == 1) {
629                 cm_l3init_usb_otg_ss_clkctrl =
630                         (*prcm)->cm_l3init_usb_otg_ss2_clkctrl;
631                 /* Disable 960 MHz clock for dwc3 */
632                 clrbits_le32((*prcm)->cm_l3init_usb_otg_ss2_clkctrl,
633                              OPTFCLKEN_REFCLK960M);
634
635                 /* Disable 32 KHz clock for dwc3 */
636                 clrbits_le32((*prcm)->cm_coreaon_usb_phy2_core_clkctrl,
637                              USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K);
638
639                 /* Disable 60 MHz clock for USB2PHY2 */
640                 clrbits_le32((*prcm)->cm_coreaon_l3init_60m_gfclk_clkctrl,
641                              L3INIT_CLKCTRL_OPTFCLKEN_60M_GFCLK);
642         }
643
644         u32 const clk_domains_usb[] = {
645                 0
646         };
647
648         u32 const clk_modules_disable[] = {
649                 (*prcm)->cm_l3init_ocp2scp1_clkctrl,
650                 cm_l3init_usb_otg_ss_clkctrl,
651                 0
652         };
653
654         do_disable_clocks(clk_domains_usb,
655                           clk_modules_disable,
656                           1);
657 }
658 #endif
659
660 const struct ctrl_ioregs ioregs_omap5430 = {
661         .ctrl_ddrch = DDR_IO_I_34OHM_SR_FASTEST_WD_DQ_NO_PULL_DQS_PULL_DOWN,
662         .ctrl_lpddr2ch = DDR_IO_I_34OHM_SR_FASTEST_WD_CK_CKE_NCS_CA_PULL_DOWN,
663         .ctrl_ddrio_0 = DDR_IO_0_DDR2_DQ_INT_EN_ALL_DDR3_CA_DIS_ALL,
664         .ctrl_ddrio_1 = DDR_IO_1_DQ_OUT_EN_ALL_DQ_INT_EN_ALL,
665         .ctrl_ddrio_2 = DDR_IO_2_CA_OUT_EN_ALL_CA_INT_EN_ALL,
666 };
667
668 const struct ctrl_ioregs ioregs_omap5432_es1 = {
669         .ctrl_ddrch = DDR_IO_I_40OHM_SR_FAST_WD_DQ_NO_PULL_DQS_NO_PULL,
670         .ctrl_lpddr2ch = 0x0,
671         .ctrl_ddr3ch = DDR_IO_I_40OHM_SR_SLOWEST_WD_DQ_NO_PULL_DQS_NO_PULL,
672         .ctrl_ddrio_0 = DDR_IO_0_VREF_CELLS_DDR3_VALUE,
673         .ctrl_ddrio_1 = DDR_IO_1_VREF_CELLS_DDR3_VALUE,
674         .ctrl_ddrio_2 = DDR_IO_2_VREF_CELLS_DDR3_VALUE,
675         .ctrl_emif_sdram_config_ext = SDRAM_CONFIG_EXT_RD_LVL_11_SAMPLES,
676         .ctrl_emif_sdram_config_ext_final = SDRAM_CONFIG_EXT_RD_LVL_4_SAMPLES,
677 };
678
679 const struct ctrl_ioregs ioregs_omap5432_es2 = {
680         .ctrl_ddrch = DDR_IO_I_40OHM_SR_FAST_WD_DQ_NO_PULL_DQS_NO_PULL_ES2,
681         .ctrl_lpddr2ch = 0x0,
682         .ctrl_ddr3ch = DDR_IO_I_40OHM_SR_SLOWEST_WD_DQ_NO_PULL_DQS_NO_PULL_ES2,
683         .ctrl_ddrio_0 = DDR_IO_0_VREF_CELLS_DDR3_VALUE_ES2,
684         .ctrl_ddrio_1 = DDR_IO_1_VREF_CELLS_DDR3_VALUE_ES2,
685         .ctrl_ddrio_2 = DDR_IO_2_VREF_CELLS_DDR3_VALUE_ES2,
686         .ctrl_emif_sdram_config_ext = SDRAM_CONFIG_EXT_RD_LVL_11_SAMPLES,
687         .ctrl_emif_sdram_config_ext_final = SDRAM_CONFIG_EXT_RD_LVL_4_SAMPLES,
688 };
689
690 const struct ctrl_ioregs ioregs_dra7xx_es1 = {
691         .ctrl_ddrch = 0x40404040,
692         .ctrl_lpddr2ch = 0x40404040,
693         .ctrl_ddr3ch = 0x80808080,
694         .ctrl_ddrio_0 = 0x00094A40,
695         .ctrl_ddrio_1 = 0x04A52000,
696         .ctrl_ddrio_2 = 0x84210000,
697         .ctrl_emif_sdram_config_ext = 0x0001C1A7,
698         .ctrl_emif_sdram_config_ext_final = 0x0001C1A7,
699         .ctrl_ddr_ctrl_ext_0 = 0xA2000000,
700 };
701
702 const struct ctrl_ioregs ioregs_dra72x_es1 = {
703         .ctrl_ddrch = 0x40404040,
704         .ctrl_lpddr2ch = 0x40404040,
705         .ctrl_ddr3ch = 0x60606080,
706         .ctrl_ddrio_0 = 0x00094A40,
707         .ctrl_ddrio_1 = 0x04A52000,
708         .ctrl_ddrio_2 = 0x84210000,
709         .ctrl_emif_sdram_config_ext = 0x0001C1A7,
710         .ctrl_emif_sdram_config_ext_final = 0x0001C1A7,
711         .ctrl_ddr_ctrl_ext_0 = 0xA2000000,
712 };
713
714 const struct ctrl_ioregs ioregs_dra72x_es2 = {
715         .ctrl_ddrch = 0x40404040,
716         .ctrl_lpddr2ch = 0x40404040,
717         .ctrl_ddr3ch = 0x60606060,
718         .ctrl_ddrio_0 = 0x00094A40,
719         .ctrl_ddrio_1 = 0x00000000,
720         .ctrl_ddrio_2 = 0x00000000,
721         .ctrl_emif_sdram_config_ext = 0x0001C1A7,
722         .ctrl_emif_sdram_config_ext_final = 0x0001C1A7,
723         .ctrl_ddr_ctrl_ext_0 = 0xA2000000,
724 };
725
726 void __weak hw_data_init(void)
727 {
728         u32 omap_rev = omap_revision();
729
730         switch (omap_rev) {
731
732         case OMAP5430_ES1_0:
733         case OMAP5432_ES1_0:
734         *prcm = &omap5_es1_prcm;
735         *dplls_data = &omap5_dplls_es1;
736         *omap_vcores = &omap5430_volts;
737         *ctrl = &omap5_ctrl;
738         break;
739
740         case OMAP5430_ES2_0:
741         case OMAP5432_ES2_0:
742         *prcm = &omap5_es2_prcm;
743         *dplls_data = &omap5_dplls_es2;
744         *omap_vcores = &omap5430_volts_es2;
745         *ctrl = &omap5_ctrl;
746         break;
747
748         case DRA762_ABZ_ES1_0:
749         case DRA762_ACD_ES1_0:
750         case DRA762_ES1_0:
751         *prcm = &dra7xx_prcm;
752         *dplls_data = &dra76x_dplls;
753         *ctrl = &dra7xx_ctrl;
754         break;
755
756         case DRA752_ES1_0:
757         case DRA752_ES1_1:
758         case DRA752_ES2_0:
759         *prcm = &dra7xx_prcm;
760         *dplls_data = &dra7xx_dplls;
761         *ctrl = &dra7xx_ctrl;
762         break;
763
764         case DRA722_ES1_0:
765         case DRA722_ES2_0:
766         case DRA722_ES2_1:
767         *prcm = &dra7xx_prcm;
768         *dplls_data = &dra72x_dplls;
769         *ctrl = &dra7xx_ctrl;
770         break;
771
772         default:
773                 printf("\n INVALID OMAP REVISION ");
774         }
775 }
776
777 void get_ioregs(const struct ctrl_ioregs **regs)
778 {
779         u32 omap_rev = omap_revision();
780
781         switch (omap_rev) {
782         case OMAP5430_ES1_0:
783         case OMAP5430_ES2_0:
784                 *regs = &ioregs_omap5430;
785                 break;
786         case OMAP5432_ES1_0:
787                 *regs = &ioregs_omap5432_es1;
788                 break;
789         case OMAP5432_ES2_0:
790                 *regs = &ioregs_omap5432_es2;
791                 break;
792         case DRA752_ES1_0:
793         case DRA752_ES1_1:
794         case DRA752_ES2_0:
795         case DRA762_ES1_0:
796         case DRA762_ACD_ES1_0:
797         case DRA762_ABZ_ES1_0:
798                 *regs = &ioregs_dra7xx_es1;
799                 break;
800         case DRA722_ES1_0:
801                 *regs = &ioregs_dra72x_es1;
802                 break;
803         case DRA722_ES2_0:
804         case DRA722_ES2_1:
805                 *regs = &ioregs_dra72x_es2;
806                 break;
807
808         default:
809                 printf("\n INVALID OMAP REVISION ");
810         }
811 }