xref: /OK3568_Linux_fs/u-boot/arch/arm/mach-omap2/omap5/hw_data.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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