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