xref: /OK3568_Linux_fs/kernel/arch/arm/mach-omap2/io.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-only
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * linux/arch/arm/mach-omap2/io.c
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * OMAP2 I/O mapping code
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * Copyright (C) 2005 Nokia Corporation
8*4882a593Smuzhiyun  * Copyright (C) 2007-2009 Texas Instruments
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  * Author:
11*4882a593Smuzhiyun  *	Juha Yrjola <juha.yrjola@nokia.com>
12*4882a593Smuzhiyun  *	Syed Khasim <x0khasim@ti.com>
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com>
15*4882a593Smuzhiyun  */
16*4882a593Smuzhiyun #include <linux/module.h>
17*4882a593Smuzhiyun #include <linux/kernel.h>
18*4882a593Smuzhiyun #include <linux/init.h>
19*4882a593Smuzhiyun #include <linux/io.h>
20*4882a593Smuzhiyun #include <linux/clk.h>
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #include <asm/tlb.h>
23*4882a593Smuzhiyun #include <asm/mach/map.h>
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun #include <linux/omap-dma.h>
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun #include "omap_hwmod.h"
28*4882a593Smuzhiyun #include "soc.h"
29*4882a593Smuzhiyun #include "iomap.h"
30*4882a593Smuzhiyun #include "voltage.h"
31*4882a593Smuzhiyun #include "powerdomain.h"
32*4882a593Smuzhiyun #include "clockdomain.h"
33*4882a593Smuzhiyun #include "common.h"
34*4882a593Smuzhiyun #include "clock.h"
35*4882a593Smuzhiyun #include "clock2xxx.h"
36*4882a593Smuzhiyun #include "clock3xxx.h"
37*4882a593Smuzhiyun #include "sdrc.h"
38*4882a593Smuzhiyun #include "control.h"
39*4882a593Smuzhiyun #include "serial.h"
40*4882a593Smuzhiyun #include "sram.h"
41*4882a593Smuzhiyun #include "cm2xxx.h"
42*4882a593Smuzhiyun #include "cm3xxx.h"
43*4882a593Smuzhiyun #include "cm33xx.h"
44*4882a593Smuzhiyun #include "cm44xx.h"
45*4882a593Smuzhiyun #include "prm.h"
46*4882a593Smuzhiyun #include "cm.h"
47*4882a593Smuzhiyun #include "prcm_mpu44xx.h"
48*4882a593Smuzhiyun #include "prminst44xx.h"
49*4882a593Smuzhiyun #include "prm2xxx.h"
50*4882a593Smuzhiyun #include "prm3xxx.h"
51*4882a593Smuzhiyun #include "prm33xx.h"
52*4882a593Smuzhiyun #include "prm44xx.h"
53*4882a593Smuzhiyun #include "opp2xxx.h"
54*4882a593Smuzhiyun #include "omap-secure.h"
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun /*
57*4882a593Smuzhiyun  * omap_clk_soc_init: points to a function that does the SoC-specific
58*4882a593Smuzhiyun  * clock initializations
59*4882a593Smuzhiyun  */
60*4882a593Smuzhiyun static int (*omap_clk_soc_init)(void);
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun /*
63*4882a593Smuzhiyun  * The machine specific code may provide the extra mapping besides the
64*4882a593Smuzhiyun  * default mapping provided here.
65*4882a593Smuzhiyun  */
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun #if defined(CONFIG_SOC_OMAP2420) || defined(CONFIG_SOC_OMAP2430)
68*4882a593Smuzhiyun static struct map_desc omap24xx_io_desc[] __initdata = {
69*4882a593Smuzhiyun 	{
70*4882a593Smuzhiyun 		.virtual	= L3_24XX_VIRT,
71*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L3_24XX_PHYS),
72*4882a593Smuzhiyun 		.length		= L3_24XX_SIZE,
73*4882a593Smuzhiyun 		.type		= MT_DEVICE
74*4882a593Smuzhiyun 	},
75*4882a593Smuzhiyun 	{
76*4882a593Smuzhiyun 		.virtual	= L4_24XX_VIRT,
77*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_24XX_PHYS),
78*4882a593Smuzhiyun 		.length		= L4_24XX_SIZE,
79*4882a593Smuzhiyun 		.type		= MT_DEVICE
80*4882a593Smuzhiyun 	},
81*4882a593Smuzhiyun };
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun #ifdef CONFIG_SOC_OMAP2420
84*4882a593Smuzhiyun static struct map_desc omap242x_io_desc[] __initdata = {
85*4882a593Smuzhiyun 	{
86*4882a593Smuzhiyun 		.virtual	= DSP_MEM_2420_VIRT,
87*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(DSP_MEM_2420_PHYS),
88*4882a593Smuzhiyun 		.length		= DSP_MEM_2420_SIZE,
89*4882a593Smuzhiyun 		.type		= MT_DEVICE
90*4882a593Smuzhiyun 	},
91*4882a593Smuzhiyun 	{
92*4882a593Smuzhiyun 		.virtual	= DSP_IPI_2420_VIRT,
93*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(DSP_IPI_2420_PHYS),
94*4882a593Smuzhiyun 		.length		= DSP_IPI_2420_SIZE,
95*4882a593Smuzhiyun 		.type		= MT_DEVICE
96*4882a593Smuzhiyun 	},
97*4882a593Smuzhiyun 	{
98*4882a593Smuzhiyun 		.virtual	= DSP_MMU_2420_VIRT,
99*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(DSP_MMU_2420_PHYS),
100*4882a593Smuzhiyun 		.length		= DSP_MMU_2420_SIZE,
101*4882a593Smuzhiyun 		.type		= MT_DEVICE
102*4882a593Smuzhiyun 	},
103*4882a593Smuzhiyun };
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun #endif
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun #ifdef CONFIG_SOC_OMAP2430
108*4882a593Smuzhiyun static struct map_desc omap243x_io_desc[] __initdata = {
109*4882a593Smuzhiyun 	{
110*4882a593Smuzhiyun 		.virtual	= L4_WK_243X_VIRT,
111*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_WK_243X_PHYS),
112*4882a593Smuzhiyun 		.length		= L4_WK_243X_SIZE,
113*4882a593Smuzhiyun 		.type		= MT_DEVICE
114*4882a593Smuzhiyun 	},
115*4882a593Smuzhiyun 	{
116*4882a593Smuzhiyun 		.virtual	= OMAP243X_GPMC_VIRT,
117*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(OMAP243X_GPMC_PHYS),
118*4882a593Smuzhiyun 		.length		= OMAP243X_GPMC_SIZE,
119*4882a593Smuzhiyun 		.type		= MT_DEVICE
120*4882a593Smuzhiyun 	},
121*4882a593Smuzhiyun 	{
122*4882a593Smuzhiyun 		.virtual	= OMAP243X_SDRC_VIRT,
123*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(OMAP243X_SDRC_PHYS),
124*4882a593Smuzhiyun 		.length		= OMAP243X_SDRC_SIZE,
125*4882a593Smuzhiyun 		.type		= MT_DEVICE
126*4882a593Smuzhiyun 	},
127*4882a593Smuzhiyun 	{
128*4882a593Smuzhiyun 		.virtual	= OMAP243X_SMS_VIRT,
129*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(OMAP243X_SMS_PHYS),
130*4882a593Smuzhiyun 		.length		= OMAP243X_SMS_SIZE,
131*4882a593Smuzhiyun 		.type		= MT_DEVICE
132*4882a593Smuzhiyun 	},
133*4882a593Smuzhiyun };
134*4882a593Smuzhiyun #endif
135*4882a593Smuzhiyun #endif
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun #ifdef	CONFIG_ARCH_OMAP3
138*4882a593Smuzhiyun static struct map_desc omap34xx_io_desc[] __initdata = {
139*4882a593Smuzhiyun 	{
140*4882a593Smuzhiyun 		.virtual	= L3_34XX_VIRT,
141*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L3_34XX_PHYS),
142*4882a593Smuzhiyun 		.length		= L3_34XX_SIZE,
143*4882a593Smuzhiyun 		.type		= MT_DEVICE
144*4882a593Smuzhiyun 	},
145*4882a593Smuzhiyun 	{
146*4882a593Smuzhiyun 		.virtual	= L4_34XX_VIRT,
147*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_34XX_PHYS),
148*4882a593Smuzhiyun 		.length		= L4_34XX_SIZE,
149*4882a593Smuzhiyun 		.type		= MT_DEVICE
150*4882a593Smuzhiyun 	},
151*4882a593Smuzhiyun 	{
152*4882a593Smuzhiyun 		.virtual	= OMAP34XX_GPMC_VIRT,
153*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(OMAP34XX_GPMC_PHYS),
154*4882a593Smuzhiyun 		.length		= OMAP34XX_GPMC_SIZE,
155*4882a593Smuzhiyun 		.type		= MT_DEVICE
156*4882a593Smuzhiyun 	},
157*4882a593Smuzhiyun 	{
158*4882a593Smuzhiyun 		.virtual	= OMAP343X_SMS_VIRT,
159*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(OMAP343X_SMS_PHYS),
160*4882a593Smuzhiyun 		.length		= OMAP343X_SMS_SIZE,
161*4882a593Smuzhiyun 		.type		= MT_DEVICE
162*4882a593Smuzhiyun 	},
163*4882a593Smuzhiyun 	{
164*4882a593Smuzhiyun 		.virtual	= OMAP343X_SDRC_VIRT,
165*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(OMAP343X_SDRC_PHYS),
166*4882a593Smuzhiyun 		.length		= OMAP343X_SDRC_SIZE,
167*4882a593Smuzhiyun 		.type		= MT_DEVICE
168*4882a593Smuzhiyun 	},
169*4882a593Smuzhiyun 	{
170*4882a593Smuzhiyun 		.virtual	= L4_PER_34XX_VIRT,
171*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_PER_34XX_PHYS),
172*4882a593Smuzhiyun 		.length		= L4_PER_34XX_SIZE,
173*4882a593Smuzhiyun 		.type		= MT_DEVICE
174*4882a593Smuzhiyun 	},
175*4882a593Smuzhiyun 	{
176*4882a593Smuzhiyun 		.virtual	= L4_EMU_34XX_VIRT,
177*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_EMU_34XX_PHYS),
178*4882a593Smuzhiyun 		.length		= L4_EMU_34XX_SIZE,
179*4882a593Smuzhiyun 		.type		= MT_DEVICE
180*4882a593Smuzhiyun 	},
181*4882a593Smuzhiyun };
182*4882a593Smuzhiyun #endif
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun #ifdef CONFIG_SOC_TI81XX
185*4882a593Smuzhiyun static struct map_desc omapti81xx_io_desc[] __initdata = {
186*4882a593Smuzhiyun 	{
187*4882a593Smuzhiyun 		.virtual	= L4_34XX_VIRT,
188*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_34XX_PHYS),
189*4882a593Smuzhiyun 		.length		= L4_34XX_SIZE,
190*4882a593Smuzhiyun 		.type		= MT_DEVICE
191*4882a593Smuzhiyun 	}
192*4882a593Smuzhiyun };
193*4882a593Smuzhiyun #endif
194*4882a593Smuzhiyun 
195*4882a593Smuzhiyun #if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_AM43XX)
196*4882a593Smuzhiyun static struct map_desc omapam33xx_io_desc[] __initdata = {
197*4882a593Smuzhiyun 	{
198*4882a593Smuzhiyun 		.virtual	= L4_34XX_VIRT,
199*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_34XX_PHYS),
200*4882a593Smuzhiyun 		.length		= L4_34XX_SIZE,
201*4882a593Smuzhiyun 		.type		= MT_DEVICE
202*4882a593Smuzhiyun 	},
203*4882a593Smuzhiyun 	{
204*4882a593Smuzhiyun 		.virtual	= L4_WK_AM33XX_VIRT,
205*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_WK_AM33XX_PHYS),
206*4882a593Smuzhiyun 		.length		= L4_WK_AM33XX_SIZE,
207*4882a593Smuzhiyun 		.type		= MT_DEVICE
208*4882a593Smuzhiyun 	}
209*4882a593Smuzhiyun };
210*4882a593Smuzhiyun #endif
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun #ifdef	CONFIG_ARCH_OMAP4
213*4882a593Smuzhiyun static struct map_desc omap44xx_io_desc[] __initdata = {
214*4882a593Smuzhiyun 	{
215*4882a593Smuzhiyun 		.virtual	= L3_44XX_VIRT,
216*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L3_44XX_PHYS),
217*4882a593Smuzhiyun 		.length		= L3_44XX_SIZE,
218*4882a593Smuzhiyun 		.type		= MT_DEVICE,
219*4882a593Smuzhiyun 	},
220*4882a593Smuzhiyun 	{
221*4882a593Smuzhiyun 		.virtual	= L4_44XX_VIRT,
222*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_44XX_PHYS),
223*4882a593Smuzhiyun 		.length		= L4_44XX_SIZE,
224*4882a593Smuzhiyun 		.type		= MT_DEVICE,
225*4882a593Smuzhiyun 	},
226*4882a593Smuzhiyun 	{
227*4882a593Smuzhiyun 		.virtual	= L4_PER_44XX_VIRT,
228*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_PER_44XX_PHYS),
229*4882a593Smuzhiyun 		.length		= L4_PER_44XX_SIZE,
230*4882a593Smuzhiyun 		.type		= MT_DEVICE,
231*4882a593Smuzhiyun 	},
232*4882a593Smuzhiyun };
233*4882a593Smuzhiyun #endif
234*4882a593Smuzhiyun 
235*4882a593Smuzhiyun #ifdef CONFIG_SOC_OMAP5
236*4882a593Smuzhiyun static struct map_desc omap54xx_io_desc[] __initdata = {
237*4882a593Smuzhiyun 	{
238*4882a593Smuzhiyun 		.virtual	= L3_54XX_VIRT,
239*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L3_54XX_PHYS),
240*4882a593Smuzhiyun 		.length		= L3_54XX_SIZE,
241*4882a593Smuzhiyun 		.type		= MT_DEVICE,
242*4882a593Smuzhiyun 	},
243*4882a593Smuzhiyun 	{
244*4882a593Smuzhiyun 		.virtual	= L4_54XX_VIRT,
245*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_54XX_PHYS),
246*4882a593Smuzhiyun 		.length		= L4_54XX_SIZE,
247*4882a593Smuzhiyun 		.type		= MT_DEVICE,
248*4882a593Smuzhiyun 	},
249*4882a593Smuzhiyun 	{
250*4882a593Smuzhiyun 		.virtual	= L4_WK_54XX_VIRT,
251*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_WK_54XX_PHYS),
252*4882a593Smuzhiyun 		.length		= L4_WK_54XX_SIZE,
253*4882a593Smuzhiyun 		.type		= MT_DEVICE,
254*4882a593Smuzhiyun 	},
255*4882a593Smuzhiyun 	{
256*4882a593Smuzhiyun 		.virtual	= L4_PER_54XX_VIRT,
257*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_PER_54XX_PHYS),
258*4882a593Smuzhiyun 		.length		= L4_PER_54XX_SIZE,
259*4882a593Smuzhiyun 		.type		= MT_DEVICE,
260*4882a593Smuzhiyun 	},
261*4882a593Smuzhiyun };
262*4882a593Smuzhiyun #endif
263*4882a593Smuzhiyun 
264*4882a593Smuzhiyun #ifdef CONFIG_SOC_DRA7XX
265*4882a593Smuzhiyun static struct map_desc dra7xx_io_desc[] __initdata = {
266*4882a593Smuzhiyun 	{
267*4882a593Smuzhiyun 		.virtual	= L4_CFG_MPU_DRA7XX_VIRT,
268*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_CFG_MPU_DRA7XX_PHYS),
269*4882a593Smuzhiyun 		.length		= L4_CFG_MPU_DRA7XX_SIZE,
270*4882a593Smuzhiyun 		.type		= MT_DEVICE,
271*4882a593Smuzhiyun 	},
272*4882a593Smuzhiyun 	{
273*4882a593Smuzhiyun 		.virtual	= L3_MAIN_SN_DRA7XX_VIRT,
274*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L3_MAIN_SN_DRA7XX_PHYS),
275*4882a593Smuzhiyun 		.length		= L3_MAIN_SN_DRA7XX_SIZE,
276*4882a593Smuzhiyun 		.type		= MT_DEVICE,
277*4882a593Smuzhiyun 	},
278*4882a593Smuzhiyun 	{
279*4882a593Smuzhiyun 		.virtual	= L4_PER1_DRA7XX_VIRT,
280*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_PER1_DRA7XX_PHYS),
281*4882a593Smuzhiyun 		.length		= L4_PER1_DRA7XX_SIZE,
282*4882a593Smuzhiyun 		.type		= MT_DEVICE,
283*4882a593Smuzhiyun 	},
284*4882a593Smuzhiyun 	{
285*4882a593Smuzhiyun 		.virtual	= L4_PER2_DRA7XX_VIRT,
286*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_PER2_DRA7XX_PHYS),
287*4882a593Smuzhiyun 		.length		= L4_PER2_DRA7XX_SIZE,
288*4882a593Smuzhiyun 		.type		= MT_DEVICE,
289*4882a593Smuzhiyun 	},
290*4882a593Smuzhiyun 	{
291*4882a593Smuzhiyun 		.virtual	= L4_PER3_DRA7XX_VIRT,
292*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_PER3_DRA7XX_PHYS),
293*4882a593Smuzhiyun 		.length		= L4_PER3_DRA7XX_SIZE,
294*4882a593Smuzhiyun 		.type		= MT_DEVICE,
295*4882a593Smuzhiyun 	},
296*4882a593Smuzhiyun 	{
297*4882a593Smuzhiyun 		.virtual	= L4_CFG_DRA7XX_VIRT,
298*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_CFG_DRA7XX_PHYS),
299*4882a593Smuzhiyun 		.length		= L4_CFG_DRA7XX_SIZE,
300*4882a593Smuzhiyun 		.type		= MT_DEVICE,
301*4882a593Smuzhiyun 	},
302*4882a593Smuzhiyun 	{
303*4882a593Smuzhiyun 		.virtual	= L4_WKUP_DRA7XX_VIRT,
304*4882a593Smuzhiyun 		.pfn		= __phys_to_pfn(L4_WKUP_DRA7XX_PHYS),
305*4882a593Smuzhiyun 		.length		= L4_WKUP_DRA7XX_SIZE,
306*4882a593Smuzhiyun 		.type		= MT_DEVICE,
307*4882a593Smuzhiyun 	},
308*4882a593Smuzhiyun };
309*4882a593Smuzhiyun #endif
310*4882a593Smuzhiyun 
311*4882a593Smuzhiyun #ifdef CONFIG_SOC_OMAP2420
omap242x_map_io(void)312*4882a593Smuzhiyun void __init omap242x_map_io(void)
313*4882a593Smuzhiyun {
314*4882a593Smuzhiyun 	iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc));
315*4882a593Smuzhiyun 	iotable_init(omap242x_io_desc, ARRAY_SIZE(omap242x_io_desc));
316*4882a593Smuzhiyun }
317*4882a593Smuzhiyun #endif
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun #ifdef CONFIG_SOC_OMAP2430
omap243x_map_io(void)320*4882a593Smuzhiyun void __init omap243x_map_io(void)
321*4882a593Smuzhiyun {
322*4882a593Smuzhiyun 	iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc));
323*4882a593Smuzhiyun 	iotable_init(omap243x_io_desc, ARRAY_SIZE(omap243x_io_desc));
324*4882a593Smuzhiyun }
325*4882a593Smuzhiyun #endif
326*4882a593Smuzhiyun 
327*4882a593Smuzhiyun #ifdef CONFIG_ARCH_OMAP3
omap3_map_io(void)328*4882a593Smuzhiyun void __init omap3_map_io(void)
329*4882a593Smuzhiyun {
330*4882a593Smuzhiyun 	iotable_init(omap34xx_io_desc, ARRAY_SIZE(omap34xx_io_desc));
331*4882a593Smuzhiyun }
332*4882a593Smuzhiyun #endif
333*4882a593Smuzhiyun 
334*4882a593Smuzhiyun #ifdef CONFIG_SOC_TI81XX
ti81xx_map_io(void)335*4882a593Smuzhiyun void __init ti81xx_map_io(void)
336*4882a593Smuzhiyun {
337*4882a593Smuzhiyun 	iotable_init(omapti81xx_io_desc, ARRAY_SIZE(omapti81xx_io_desc));
338*4882a593Smuzhiyun }
339*4882a593Smuzhiyun #endif
340*4882a593Smuzhiyun 
341*4882a593Smuzhiyun #if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_AM43XX)
am33xx_map_io(void)342*4882a593Smuzhiyun void __init am33xx_map_io(void)
343*4882a593Smuzhiyun {
344*4882a593Smuzhiyun 	iotable_init(omapam33xx_io_desc, ARRAY_SIZE(omapam33xx_io_desc));
345*4882a593Smuzhiyun }
346*4882a593Smuzhiyun #endif
347*4882a593Smuzhiyun 
348*4882a593Smuzhiyun #ifdef CONFIG_ARCH_OMAP4
omap4_map_io(void)349*4882a593Smuzhiyun void __init omap4_map_io(void)
350*4882a593Smuzhiyun {
351*4882a593Smuzhiyun 	iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc));
352*4882a593Smuzhiyun 	omap_barriers_init();
353*4882a593Smuzhiyun }
354*4882a593Smuzhiyun #endif
355*4882a593Smuzhiyun 
356*4882a593Smuzhiyun #ifdef CONFIG_SOC_OMAP5
omap5_map_io(void)357*4882a593Smuzhiyun void __init omap5_map_io(void)
358*4882a593Smuzhiyun {
359*4882a593Smuzhiyun 	iotable_init(omap54xx_io_desc, ARRAY_SIZE(omap54xx_io_desc));
360*4882a593Smuzhiyun 	omap_barriers_init();
361*4882a593Smuzhiyun }
362*4882a593Smuzhiyun #endif
363*4882a593Smuzhiyun 
364*4882a593Smuzhiyun #ifdef CONFIG_SOC_DRA7XX
dra7xx_map_io(void)365*4882a593Smuzhiyun void __init dra7xx_map_io(void)
366*4882a593Smuzhiyun {
367*4882a593Smuzhiyun 	iotable_init(dra7xx_io_desc, ARRAY_SIZE(dra7xx_io_desc));
368*4882a593Smuzhiyun 	omap_barriers_init();
369*4882a593Smuzhiyun }
370*4882a593Smuzhiyun #endif
371*4882a593Smuzhiyun /*
372*4882a593Smuzhiyun  * omap2_init_reprogram_sdrc - reprogram SDRC timing parameters
373*4882a593Smuzhiyun  *
374*4882a593Smuzhiyun  * Sets the CORE DPLL3 M2 divider to the same value that it's at
375*4882a593Smuzhiyun  * currently.  This has the effect of setting the SDRC SDRAM AC timing
376*4882a593Smuzhiyun  * registers to the values currently defined by the kernel.  Currently
377*4882a593Smuzhiyun  * only defined for OMAP3; will return 0 if called on OMAP2.  Returns
378*4882a593Smuzhiyun  * -EINVAL if the dpll3_m2_ck cannot be found, 0 if called on OMAP2,
379*4882a593Smuzhiyun  * or passes along the return value of clk_set_rate().
380*4882a593Smuzhiyun  */
_omap2_init_reprogram_sdrc(void)381*4882a593Smuzhiyun static int __init _omap2_init_reprogram_sdrc(void)
382*4882a593Smuzhiyun {
383*4882a593Smuzhiyun 	struct clk *dpll3_m2_ck;
384*4882a593Smuzhiyun 	int v = -EINVAL;
385*4882a593Smuzhiyun 	long rate;
386*4882a593Smuzhiyun 
387*4882a593Smuzhiyun 	if (!cpu_is_omap34xx())
388*4882a593Smuzhiyun 		return 0;
389*4882a593Smuzhiyun 
390*4882a593Smuzhiyun 	dpll3_m2_ck = clk_get(NULL, "dpll3_m2_ck");
391*4882a593Smuzhiyun 	if (IS_ERR(dpll3_m2_ck))
392*4882a593Smuzhiyun 		return -EINVAL;
393*4882a593Smuzhiyun 
394*4882a593Smuzhiyun 	rate = clk_get_rate(dpll3_m2_ck);
395*4882a593Smuzhiyun 	pr_info("Reprogramming SDRC clock to %ld Hz\n", rate);
396*4882a593Smuzhiyun 	v = clk_set_rate(dpll3_m2_ck, rate);
397*4882a593Smuzhiyun 	if (v)
398*4882a593Smuzhiyun 		pr_err("dpll3_m2_clk rate change failed: %d\n", v);
399*4882a593Smuzhiyun 
400*4882a593Smuzhiyun 	clk_put(dpll3_m2_ck);
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun 	return v;
403*4882a593Smuzhiyun }
404*4882a593Smuzhiyun 
_set_hwmod_postsetup_state(struct omap_hwmod * oh,void * data)405*4882a593Smuzhiyun static int _set_hwmod_postsetup_state(struct omap_hwmod *oh, void *data)
406*4882a593Smuzhiyun {
407*4882a593Smuzhiyun 	return omap_hwmod_set_postsetup_state(oh, *(u8 *)data);
408*4882a593Smuzhiyun }
409*4882a593Smuzhiyun 
omap_hwmod_init_postsetup(void)410*4882a593Smuzhiyun static void __init __maybe_unused omap_hwmod_init_postsetup(void)
411*4882a593Smuzhiyun {
412*4882a593Smuzhiyun 	u8 postsetup_state = _HWMOD_STATE_DEFAULT;
413*4882a593Smuzhiyun 
414*4882a593Smuzhiyun 	/* Set the default postsetup state for all hwmods */
415*4882a593Smuzhiyun 	omap_hwmod_for_each(_set_hwmod_postsetup_state, &postsetup_state);
416*4882a593Smuzhiyun }
417*4882a593Smuzhiyun 
418*4882a593Smuzhiyun #ifdef CONFIG_SOC_OMAP2420
omap2420_init_early(void)419*4882a593Smuzhiyun void __init omap2420_init_early(void)
420*4882a593Smuzhiyun {
421*4882a593Smuzhiyun 	omap2_set_globals_tap(OMAP242X_CLASS, OMAP2_L4_IO_ADDRESS(0x48014000));
422*4882a593Smuzhiyun 	omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP2420_SDRC_BASE),
423*4882a593Smuzhiyun 			       OMAP2_L3_IO_ADDRESS(OMAP2420_SMS_BASE));
424*4882a593Smuzhiyun 	omap2_control_base_init();
425*4882a593Smuzhiyun 	omap2xxx_check_revision();
426*4882a593Smuzhiyun 	omap2_prcm_base_init();
427*4882a593Smuzhiyun 	omap2xxx_voltagedomains_init();
428*4882a593Smuzhiyun 	omap242x_powerdomains_init();
429*4882a593Smuzhiyun 	omap242x_clockdomains_init();
430*4882a593Smuzhiyun 	omap2420_hwmod_init();
431*4882a593Smuzhiyun 	omap_hwmod_init_postsetup();
432*4882a593Smuzhiyun 	omap_clk_soc_init = omap2420_dt_clk_init;
433*4882a593Smuzhiyun 	rate_table = omap2420_rate_table;
434*4882a593Smuzhiyun }
435*4882a593Smuzhiyun 
omap2420_init_late(void)436*4882a593Smuzhiyun void __init omap2420_init_late(void)
437*4882a593Smuzhiyun {
438*4882a593Smuzhiyun 	omap_pm_soc_init = omap2_pm_init;
439*4882a593Smuzhiyun }
440*4882a593Smuzhiyun #endif
441*4882a593Smuzhiyun 
442*4882a593Smuzhiyun #ifdef CONFIG_SOC_OMAP2430
omap2430_init_early(void)443*4882a593Smuzhiyun void __init omap2430_init_early(void)
444*4882a593Smuzhiyun {
445*4882a593Smuzhiyun 	omap2_set_globals_tap(OMAP243X_CLASS, OMAP2_L4_IO_ADDRESS(0x4900a000));
446*4882a593Smuzhiyun 	omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP243X_SDRC_BASE),
447*4882a593Smuzhiyun 			       OMAP2_L3_IO_ADDRESS(OMAP243X_SMS_BASE));
448*4882a593Smuzhiyun 	omap2_control_base_init();
449*4882a593Smuzhiyun 	omap2xxx_check_revision();
450*4882a593Smuzhiyun 	omap2_prcm_base_init();
451*4882a593Smuzhiyun 	omap2xxx_voltagedomains_init();
452*4882a593Smuzhiyun 	omap243x_powerdomains_init();
453*4882a593Smuzhiyun 	omap243x_clockdomains_init();
454*4882a593Smuzhiyun 	omap2430_hwmod_init();
455*4882a593Smuzhiyun 	omap_hwmod_init_postsetup();
456*4882a593Smuzhiyun 	omap_clk_soc_init = omap2430_dt_clk_init;
457*4882a593Smuzhiyun 	rate_table = omap2430_rate_table;
458*4882a593Smuzhiyun }
459*4882a593Smuzhiyun 
omap2430_init_late(void)460*4882a593Smuzhiyun void __init omap2430_init_late(void)
461*4882a593Smuzhiyun {
462*4882a593Smuzhiyun 	omap_pm_soc_init = omap2_pm_init;
463*4882a593Smuzhiyun }
464*4882a593Smuzhiyun #endif
465*4882a593Smuzhiyun 
466*4882a593Smuzhiyun /*
467*4882a593Smuzhiyun  * Currently only board-omap3beagle.c should call this because of the
468*4882a593Smuzhiyun  * same machine_id for 34xx and 36xx beagle.. Will get fixed with DT.
469*4882a593Smuzhiyun  */
470*4882a593Smuzhiyun #ifdef CONFIG_ARCH_OMAP3
omap3_init_early(void)471*4882a593Smuzhiyun void __init omap3_init_early(void)
472*4882a593Smuzhiyun {
473*4882a593Smuzhiyun 	omap2_set_globals_tap(OMAP343X_CLASS, OMAP2_L4_IO_ADDRESS(0x4830A000));
474*4882a593Smuzhiyun 	omap2_set_globals_sdrc(OMAP2_L3_IO_ADDRESS(OMAP343X_SDRC_BASE),
475*4882a593Smuzhiyun 			       OMAP2_L3_IO_ADDRESS(OMAP343X_SMS_BASE));
476*4882a593Smuzhiyun 	omap2_control_base_init();
477*4882a593Smuzhiyun 	omap3xxx_check_revision();
478*4882a593Smuzhiyun 	omap3xxx_check_features();
479*4882a593Smuzhiyun 	omap2_prcm_base_init();
480*4882a593Smuzhiyun 	omap3xxx_voltagedomains_init();
481*4882a593Smuzhiyun 	omap3xxx_powerdomains_init();
482*4882a593Smuzhiyun 	omap3xxx_clockdomains_init();
483*4882a593Smuzhiyun 	omap3xxx_hwmod_init();
484*4882a593Smuzhiyun 	omap_hwmod_init_postsetup();
485*4882a593Smuzhiyun 	omap_secure_init();
486*4882a593Smuzhiyun }
487*4882a593Smuzhiyun 
omap3430_init_early(void)488*4882a593Smuzhiyun void __init omap3430_init_early(void)
489*4882a593Smuzhiyun {
490*4882a593Smuzhiyun 	omap3_init_early();
491*4882a593Smuzhiyun 	omap_clk_soc_init = omap3430_dt_clk_init;
492*4882a593Smuzhiyun }
493*4882a593Smuzhiyun 
omap35xx_init_early(void)494*4882a593Smuzhiyun void __init omap35xx_init_early(void)
495*4882a593Smuzhiyun {
496*4882a593Smuzhiyun 	omap3_init_early();
497*4882a593Smuzhiyun 	omap_clk_soc_init = omap3430_dt_clk_init;
498*4882a593Smuzhiyun }
499*4882a593Smuzhiyun 
omap3630_init_early(void)500*4882a593Smuzhiyun void __init omap3630_init_early(void)
501*4882a593Smuzhiyun {
502*4882a593Smuzhiyun 	omap3_init_early();
503*4882a593Smuzhiyun 	omap_clk_soc_init = omap3630_dt_clk_init;
504*4882a593Smuzhiyun }
505*4882a593Smuzhiyun 
am35xx_init_early(void)506*4882a593Smuzhiyun void __init am35xx_init_early(void)
507*4882a593Smuzhiyun {
508*4882a593Smuzhiyun 	omap3_init_early();
509*4882a593Smuzhiyun 	omap_clk_soc_init = am35xx_dt_clk_init;
510*4882a593Smuzhiyun }
511*4882a593Smuzhiyun 
omap3_init_late(void)512*4882a593Smuzhiyun void __init omap3_init_late(void)
513*4882a593Smuzhiyun {
514*4882a593Smuzhiyun 	omap_pm_soc_init = omap3_pm_init;
515*4882a593Smuzhiyun }
516*4882a593Smuzhiyun 
ti81xx_init_late(void)517*4882a593Smuzhiyun void __init ti81xx_init_late(void)
518*4882a593Smuzhiyun {
519*4882a593Smuzhiyun 	omap_pm_soc_init = omap_pm_nop_init;
520*4882a593Smuzhiyun }
521*4882a593Smuzhiyun #endif
522*4882a593Smuzhiyun 
523*4882a593Smuzhiyun #ifdef CONFIG_SOC_TI81XX
ti814x_init_early(void)524*4882a593Smuzhiyun void __init ti814x_init_early(void)
525*4882a593Smuzhiyun {
526*4882a593Smuzhiyun 	omap2_set_globals_tap(TI814X_CLASS,
527*4882a593Smuzhiyun 			      OMAP2_L4_IO_ADDRESS(TI81XX_TAP_BASE));
528*4882a593Smuzhiyun 	omap2_control_base_init();
529*4882a593Smuzhiyun 	omap3xxx_check_revision();
530*4882a593Smuzhiyun 	ti81xx_check_features();
531*4882a593Smuzhiyun 	omap2_prcm_base_init();
532*4882a593Smuzhiyun 	omap3xxx_voltagedomains_init();
533*4882a593Smuzhiyun 	omap3xxx_powerdomains_init();
534*4882a593Smuzhiyun 	ti814x_clockdomains_init();
535*4882a593Smuzhiyun 	dm814x_hwmod_init();
536*4882a593Smuzhiyun 	omap_hwmod_init_postsetup();
537*4882a593Smuzhiyun 	omap_clk_soc_init = dm814x_dt_clk_init;
538*4882a593Smuzhiyun 	omap_secure_init();
539*4882a593Smuzhiyun }
540*4882a593Smuzhiyun 
ti816x_init_early(void)541*4882a593Smuzhiyun void __init ti816x_init_early(void)
542*4882a593Smuzhiyun {
543*4882a593Smuzhiyun 	omap2_set_globals_tap(TI816X_CLASS,
544*4882a593Smuzhiyun 			      OMAP2_L4_IO_ADDRESS(TI81XX_TAP_BASE));
545*4882a593Smuzhiyun 	omap2_control_base_init();
546*4882a593Smuzhiyun 	omap3xxx_check_revision();
547*4882a593Smuzhiyun 	ti81xx_check_features();
548*4882a593Smuzhiyun 	omap2_prcm_base_init();
549*4882a593Smuzhiyun 	omap3xxx_voltagedomains_init();
550*4882a593Smuzhiyun 	omap3xxx_powerdomains_init();
551*4882a593Smuzhiyun 	ti816x_clockdomains_init();
552*4882a593Smuzhiyun 	dm816x_hwmod_init();
553*4882a593Smuzhiyun 	omap_hwmod_init_postsetup();
554*4882a593Smuzhiyun 	omap_clk_soc_init = dm816x_dt_clk_init;
555*4882a593Smuzhiyun 	omap_secure_init();
556*4882a593Smuzhiyun }
557*4882a593Smuzhiyun #endif
558*4882a593Smuzhiyun 
559*4882a593Smuzhiyun #ifdef CONFIG_SOC_AM33XX
am33xx_init_early(void)560*4882a593Smuzhiyun void __init am33xx_init_early(void)
561*4882a593Smuzhiyun {
562*4882a593Smuzhiyun 	omap2_set_globals_tap(AM335X_CLASS,
563*4882a593Smuzhiyun 			      AM33XX_L4_WK_IO_ADDRESS(AM33XX_TAP_BASE));
564*4882a593Smuzhiyun 	omap2_control_base_init();
565*4882a593Smuzhiyun 	omap3xxx_check_revision();
566*4882a593Smuzhiyun 	am33xx_check_features();
567*4882a593Smuzhiyun 	omap2_prcm_base_init();
568*4882a593Smuzhiyun 	am33xx_powerdomains_init();
569*4882a593Smuzhiyun 	am33xx_clockdomains_init();
570*4882a593Smuzhiyun 	am33xx_hwmod_init();
571*4882a593Smuzhiyun 	omap_hwmod_init_postsetup();
572*4882a593Smuzhiyun 	omap_clk_soc_init = am33xx_dt_clk_init;
573*4882a593Smuzhiyun 	omap_secure_init();
574*4882a593Smuzhiyun }
575*4882a593Smuzhiyun 
am33xx_init_late(void)576*4882a593Smuzhiyun void __init am33xx_init_late(void)
577*4882a593Smuzhiyun {
578*4882a593Smuzhiyun 	omap_pm_soc_init = amx3_common_pm_init;
579*4882a593Smuzhiyun }
580*4882a593Smuzhiyun #endif
581*4882a593Smuzhiyun 
582*4882a593Smuzhiyun #ifdef CONFIG_SOC_AM43XX
am43xx_init_early(void)583*4882a593Smuzhiyun void __init am43xx_init_early(void)
584*4882a593Smuzhiyun {
585*4882a593Smuzhiyun 	omap2_set_globals_tap(AM335X_CLASS,
586*4882a593Smuzhiyun 			      AM33XX_L4_WK_IO_ADDRESS(AM33XX_TAP_BASE));
587*4882a593Smuzhiyun 	omap2_control_base_init();
588*4882a593Smuzhiyun 	omap3xxx_check_revision();
589*4882a593Smuzhiyun 	am33xx_check_features();
590*4882a593Smuzhiyun 	omap2_prcm_base_init();
591*4882a593Smuzhiyun 	am43xx_powerdomains_init();
592*4882a593Smuzhiyun 	am43xx_clockdomains_init();
593*4882a593Smuzhiyun 	am43xx_hwmod_init();
594*4882a593Smuzhiyun 	omap_hwmod_init_postsetup();
595*4882a593Smuzhiyun 	omap_l2_cache_init();
596*4882a593Smuzhiyun 	omap_clk_soc_init = am43xx_dt_clk_init;
597*4882a593Smuzhiyun 	omap_secure_init();
598*4882a593Smuzhiyun }
599*4882a593Smuzhiyun 
am43xx_init_late(void)600*4882a593Smuzhiyun void __init am43xx_init_late(void)
601*4882a593Smuzhiyun {
602*4882a593Smuzhiyun 	omap_pm_soc_init = amx3_common_pm_init;
603*4882a593Smuzhiyun }
604*4882a593Smuzhiyun #endif
605*4882a593Smuzhiyun 
606*4882a593Smuzhiyun #ifdef CONFIG_ARCH_OMAP4
omap4430_init_early(void)607*4882a593Smuzhiyun void __init omap4430_init_early(void)
608*4882a593Smuzhiyun {
609*4882a593Smuzhiyun 	omap2_set_globals_tap(OMAP443X_CLASS,
610*4882a593Smuzhiyun 			      OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE));
611*4882a593Smuzhiyun 	omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP4430_PRCM_MPU_BASE));
612*4882a593Smuzhiyun 	omap2_control_base_init();
613*4882a593Smuzhiyun 	omap4xxx_check_revision();
614*4882a593Smuzhiyun 	omap4xxx_check_features();
615*4882a593Smuzhiyun 	omap2_prcm_base_init();
616*4882a593Smuzhiyun 	omap4_sar_ram_init();
617*4882a593Smuzhiyun 	omap4_mpuss_early_init();
618*4882a593Smuzhiyun 	omap4_pm_init_early();
619*4882a593Smuzhiyun 	omap44xx_voltagedomains_init();
620*4882a593Smuzhiyun 	omap44xx_powerdomains_init();
621*4882a593Smuzhiyun 	omap44xx_clockdomains_init();
622*4882a593Smuzhiyun 	omap44xx_hwmod_init();
623*4882a593Smuzhiyun 	omap_hwmod_init_postsetup();
624*4882a593Smuzhiyun 	omap_l2_cache_init();
625*4882a593Smuzhiyun 	omap_clk_soc_init = omap4xxx_dt_clk_init;
626*4882a593Smuzhiyun 	omap_secure_init();
627*4882a593Smuzhiyun }
628*4882a593Smuzhiyun 
omap4430_init_late(void)629*4882a593Smuzhiyun void __init omap4430_init_late(void)
630*4882a593Smuzhiyun {
631*4882a593Smuzhiyun 	omap_pm_soc_init = omap4_pm_init;
632*4882a593Smuzhiyun }
633*4882a593Smuzhiyun #endif
634*4882a593Smuzhiyun 
635*4882a593Smuzhiyun #ifdef CONFIG_SOC_OMAP5
omap5_init_early(void)636*4882a593Smuzhiyun void __init omap5_init_early(void)
637*4882a593Smuzhiyun {
638*4882a593Smuzhiyun 	omap2_set_globals_tap(OMAP54XX_CLASS,
639*4882a593Smuzhiyun 			      OMAP2_L4_IO_ADDRESS(OMAP54XX_SCM_BASE));
640*4882a593Smuzhiyun 	omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE));
641*4882a593Smuzhiyun 	omap2_control_base_init();
642*4882a593Smuzhiyun 	omap2_prcm_base_init();
643*4882a593Smuzhiyun 	omap5xxx_check_revision();
644*4882a593Smuzhiyun 	omap4_sar_ram_init();
645*4882a593Smuzhiyun 	omap4_mpuss_early_init();
646*4882a593Smuzhiyun 	omap4_pm_init_early();
647*4882a593Smuzhiyun 	omap54xx_voltagedomains_init();
648*4882a593Smuzhiyun 	omap54xx_powerdomains_init();
649*4882a593Smuzhiyun 	omap54xx_clockdomains_init();
650*4882a593Smuzhiyun 	omap54xx_hwmod_init();
651*4882a593Smuzhiyun 	omap_hwmod_init_postsetup();
652*4882a593Smuzhiyun 	omap_clk_soc_init = omap5xxx_dt_clk_init;
653*4882a593Smuzhiyun 	omap_secure_init();
654*4882a593Smuzhiyun }
655*4882a593Smuzhiyun 
omap5_init_late(void)656*4882a593Smuzhiyun void __init omap5_init_late(void)
657*4882a593Smuzhiyun {
658*4882a593Smuzhiyun 	omap_pm_soc_init = omap4_pm_init;
659*4882a593Smuzhiyun }
660*4882a593Smuzhiyun #endif
661*4882a593Smuzhiyun 
662*4882a593Smuzhiyun #ifdef CONFIG_SOC_DRA7XX
dra7xx_init_early(void)663*4882a593Smuzhiyun void __init dra7xx_init_early(void)
664*4882a593Smuzhiyun {
665*4882a593Smuzhiyun 	omap2_set_globals_tap(DRA7XX_CLASS,
666*4882a593Smuzhiyun 			      OMAP2_L4_IO_ADDRESS(DRA7XX_TAP_BASE));
667*4882a593Smuzhiyun 	omap2_set_globals_prcm_mpu(OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE));
668*4882a593Smuzhiyun 	omap2_control_base_init();
669*4882a593Smuzhiyun 	omap4_pm_init_early();
670*4882a593Smuzhiyun 	omap2_prcm_base_init();
671*4882a593Smuzhiyun 	dra7xxx_check_revision();
672*4882a593Smuzhiyun 	dra7xx_powerdomains_init();
673*4882a593Smuzhiyun 	dra7xx_clockdomains_init();
674*4882a593Smuzhiyun 	dra7xx_hwmod_init();
675*4882a593Smuzhiyun 	omap_hwmod_init_postsetup();
676*4882a593Smuzhiyun 	omap_clk_soc_init = dra7xx_dt_clk_init;
677*4882a593Smuzhiyun 	omap_secure_init();
678*4882a593Smuzhiyun }
679*4882a593Smuzhiyun 
dra7xx_init_late(void)680*4882a593Smuzhiyun void __init dra7xx_init_late(void)
681*4882a593Smuzhiyun {
682*4882a593Smuzhiyun 	omap_pm_soc_init = omap4_pm_init;
683*4882a593Smuzhiyun }
684*4882a593Smuzhiyun #endif
685*4882a593Smuzhiyun 
686*4882a593Smuzhiyun 
omap_sdrc_init(struct omap_sdrc_params * sdrc_cs0,struct omap_sdrc_params * sdrc_cs1)687*4882a593Smuzhiyun void __init omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0,
688*4882a593Smuzhiyun 				      struct omap_sdrc_params *sdrc_cs1)
689*4882a593Smuzhiyun {
690*4882a593Smuzhiyun 	omap_sram_init();
691*4882a593Smuzhiyun 
692*4882a593Smuzhiyun 	if (cpu_is_omap24xx() || omap3_has_sdrc()) {
693*4882a593Smuzhiyun 		omap2_sdrc_init(sdrc_cs0, sdrc_cs1);
694*4882a593Smuzhiyun 		_omap2_init_reprogram_sdrc();
695*4882a593Smuzhiyun 	}
696*4882a593Smuzhiyun }
697*4882a593Smuzhiyun 
omap_clk_init(void)698*4882a593Smuzhiyun int __init omap_clk_init(void)
699*4882a593Smuzhiyun {
700*4882a593Smuzhiyun 	int ret = 0;
701*4882a593Smuzhiyun 
702*4882a593Smuzhiyun 	if (!omap_clk_soc_init)
703*4882a593Smuzhiyun 		return 0;
704*4882a593Smuzhiyun 
705*4882a593Smuzhiyun 	ti_clk_init_features();
706*4882a593Smuzhiyun 
707*4882a593Smuzhiyun 	omap2_clk_setup_ll_ops();
708*4882a593Smuzhiyun 
709*4882a593Smuzhiyun 	ret = omap_control_init();
710*4882a593Smuzhiyun 	if (ret)
711*4882a593Smuzhiyun 		return ret;
712*4882a593Smuzhiyun 
713*4882a593Smuzhiyun 	ret = omap_prcm_init();
714*4882a593Smuzhiyun 	if (ret)
715*4882a593Smuzhiyun 		return ret;
716*4882a593Smuzhiyun 
717*4882a593Smuzhiyun 	of_clk_init(NULL);
718*4882a593Smuzhiyun 
719*4882a593Smuzhiyun 	ti_dt_clk_init_retry_clks();
720*4882a593Smuzhiyun 
721*4882a593Smuzhiyun 	ti_dt_clockdomains_setup();
722*4882a593Smuzhiyun 
723*4882a593Smuzhiyun 	ret = omap_clk_soc_init();
724*4882a593Smuzhiyun 
725*4882a593Smuzhiyun 	return ret;
726*4882a593Smuzhiyun }
727