xref: /openbmc/linux/arch/arm/mach-omap1/io.c (revision 3179a019)
1f577ffd7STony Lindgren /*
2f577ffd7STony Lindgren  * linux/arch/arm/mach-omap1/io.c
3f577ffd7STony Lindgren  *
4f577ffd7STony Lindgren  * OMAP1 I/O mapping code
5f577ffd7STony Lindgren  *
6f577ffd7STony Lindgren  * This program is free software; you can redistribute it and/or modify
7f577ffd7STony Lindgren  * it under the terms of the GNU General Public License version 2 as
8f577ffd7STony Lindgren  * published by the Free Software Foundation.
9f577ffd7STony Lindgren  */
10f577ffd7STony Lindgren 
11f577ffd7STony Lindgren #include <linux/config.h>
12f577ffd7STony Lindgren #include <linux/module.h>
13f577ffd7STony Lindgren #include <linux/kernel.h>
14f577ffd7STony Lindgren #include <linux/init.h>
15f577ffd7STony Lindgren 
16f577ffd7STony Lindgren #include <asm/mach/map.h>
17f577ffd7STony Lindgren #include <asm/io.h>
183179a019STony Lindgren #include <asm/arch/mux.h>
19f577ffd7STony Lindgren #include <asm/arch/tc.h>
20f577ffd7STony Lindgren 
213179a019STony Lindgren extern int omap1_clk_init(void);
22f577ffd7STony Lindgren extern void omap_check_revision(void);
237c38cf02STony Lindgren extern void omap_sram_init(void);
24f577ffd7STony Lindgren 
25f577ffd7STony Lindgren /*
26f577ffd7STony Lindgren  * The machine specific code may provide the extra mapping besides the
27f577ffd7STony Lindgren  * default mapping provided here.
28f577ffd7STony Lindgren  */
29f577ffd7STony Lindgren static struct map_desc omap_io_desc[] __initdata = {
309fe133b1SDeepak Saxena 	{
319fe133b1SDeepak Saxena 		.virtual	= IO_VIRT,
329fe133b1SDeepak Saxena 		.pfn		= __phys_to_pfn(IO_PHYS),
339fe133b1SDeepak Saxena 		.length		= IO_SIZE,
349fe133b1SDeepak Saxena 		.type		= MT_DEVICE
359fe133b1SDeepak Saxena 	}
36f577ffd7STony Lindgren };
37f577ffd7STony Lindgren 
38f577ffd7STony Lindgren #ifdef CONFIG_ARCH_OMAP730
39f577ffd7STony Lindgren static struct map_desc omap730_io_desc[] __initdata = {
409fe133b1SDeepak Saxena 	{
419fe133b1SDeepak Saxena 		.virtual	= OMAP730_DSP_BASE,
429fe133b1SDeepak Saxena 		.pfn		= __phys_to_pfn(OMAP730_DSP_START),
439fe133b1SDeepak Saxena 		.length		= OMAP730_DSP_SIZE,
449fe133b1SDeepak Saxena 		.type		= MT_DEVICE
459fe133b1SDeepak Saxena 	}, {
469fe133b1SDeepak Saxena 		.virtual	= OMAP730_DSPREG_BASE,
479fe133b1SDeepak Saxena 		.pfn		= __phys_to_pfn(OMAP730_DSPREG_START),
489fe133b1SDeepak Saxena 		.length		= OMAP730_DSPREG_SIZE,
499fe133b1SDeepak Saxena 		.type		= MT_DEVICE
509fe133b1SDeepak Saxena 	}
51f577ffd7STony Lindgren };
52f577ffd7STony Lindgren #endif
53f577ffd7STony Lindgren 
543179a019STony Lindgren #ifdef CONFIG_ARCH_OMAP15XX
55f577ffd7STony Lindgren static struct map_desc omap1510_io_desc[] __initdata = {
569fe133b1SDeepak Saxena 	{
579fe133b1SDeepak Saxena 		.virtual	= OMAP1510_DSP_BASE,
589fe133b1SDeepak Saxena 		.pfn		= __phys_to_pfn(OMAP1510_DSP_START),
599fe133b1SDeepak Saxena 		.length		= OMAP1510_DSP_SIZE,
609fe133b1SDeepak Saxena 		.type		= MT_DEVICE
619fe133b1SDeepak Saxena 	}, {
629fe133b1SDeepak Saxena 		.virtual	= OMAP1510_DSPREG_BASE,
639fe133b1SDeepak Saxena 		.pfn		= __phys_to_pfn(OMAP1510_DSPREG_START),
649fe133b1SDeepak Saxena 		.length		= OMAP1510_DSPREG_SIZE,
659fe133b1SDeepak Saxena 		.type		= MT_DEVICE
669fe133b1SDeepak Saxena 	}
67f577ffd7STony Lindgren };
68f577ffd7STony Lindgren #endif
69f577ffd7STony Lindgren 
70f577ffd7STony Lindgren #if defined(CONFIG_ARCH_OMAP16XX)
717c38cf02STony Lindgren static struct map_desc omap16xx_io_desc[] __initdata = {
729fe133b1SDeepak Saxena 	{
739fe133b1SDeepak Saxena 		.virtual	= OMAP16XX_DSP_BASE,
749fe133b1SDeepak Saxena 		.pfn		= __phys_to_pfn(OMAP16XX_DSP_START),
759fe133b1SDeepak Saxena 		.length		= OMAP16XX_DSP_SIZE,
769fe133b1SDeepak Saxena 		.type		= MT_DEVICE
779fe133b1SDeepak Saxena 	}, {
789fe133b1SDeepak Saxena 		.virtual	= OMAP16XX_DSPREG_BASE,
799fe133b1SDeepak Saxena 		.pfn		= __phys_to_pfn(OMAP16XX_DSPREG_START),
809fe133b1SDeepak Saxena 		.length		= OMAP16XX_DSPREG_SIZE,
819fe133b1SDeepak Saxena 		.type		= MT_DEVICE
829fe133b1SDeepak Saxena 	}
83f577ffd7STony Lindgren };
84f577ffd7STony Lindgren #endif
85f577ffd7STony Lindgren 
86f577ffd7STony Lindgren static int initialized = 0;
87f577ffd7STony Lindgren 
88f577ffd7STony Lindgren static void __init _omap_map_io(void)
89f577ffd7STony Lindgren {
90f577ffd7STony Lindgren 	initialized = 1;
91f577ffd7STony Lindgren 
92f577ffd7STony Lindgren 	/* We have to initialize the IO space mapping before we can run
93f577ffd7STony Lindgren 	 * cpu_is_omapxxx() macros. */
94f577ffd7STony Lindgren 	iotable_init(omap_io_desc, ARRAY_SIZE(omap_io_desc));
95f577ffd7STony Lindgren 	omap_check_revision();
96f577ffd7STony Lindgren 
97f577ffd7STony Lindgren #ifdef CONFIG_ARCH_OMAP730
98f577ffd7STony Lindgren 	if (cpu_is_omap730()) {
99f577ffd7STony Lindgren 		iotable_init(omap730_io_desc, ARRAY_SIZE(omap730_io_desc));
100f577ffd7STony Lindgren 	}
101f577ffd7STony Lindgren #endif
1023179a019STony Lindgren #ifdef CONFIG_ARCH_OMAP15XX
103f577ffd7STony Lindgren 	if (cpu_is_omap1510()) {
104f577ffd7STony Lindgren 		iotable_init(omap1510_io_desc, ARRAY_SIZE(omap1510_io_desc));
105f577ffd7STony Lindgren 	}
106f577ffd7STony Lindgren #endif
107f577ffd7STony Lindgren #if defined(CONFIG_ARCH_OMAP16XX)
1087c38cf02STony Lindgren 	if (cpu_is_omap16xx()) {
1097c38cf02STony Lindgren 		iotable_init(omap16xx_io_desc, ARRAY_SIZE(omap16xx_io_desc));
110f577ffd7STony Lindgren 	}
111f577ffd7STony Lindgren #endif
112f577ffd7STony Lindgren 
1137c38cf02STony Lindgren 	omap_sram_init();
1147c38cf02STony Lindgren 
115f577ffd7STony Lindgren 	/* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort
116f577ffd7STony Lindgren 	 * on a Posted Write in the TIPB Bridge".
117f577ffd7STony Lindgren 	 */
118f577ffd7STony Lindgren 	omap_writew(0x0, MPU_PUBLIC_TIPB_CNTL);
119f577ffd7STony Lindgren 	omap_writew(0x0, MPU_PRIVATE_TIPB_CNTL);
120f577ffd7STony Lindgren 
121f577ffd7STony Lindgren 	/* Must init clocks early to assure that timer interrupt works
122f577ffd7STony Lindgren 	 */
1233179a019STony Lindgren 	omap1_clk_init();
124f577ffd7STony Lindgren }
125f577ffd7STony Lindgren 
126f577ffd7STony Lindgren /*
127f577ffd7STony Lindgren  * This should only get called from board specific init
128f577ffd7STony Lindgren  */
1297c38cf02STony Lindgren void __init omap_map_common_io(void)
130f577ffd7STony Lindgren {
1313179a019STony Lindgren 	if (!initialized) {
132f577ffd7STony Lindgren 		_omap_map_io();
1333179a019STony Lindgren 		omap1_mux_init();
1343179a019STony Lindgren 	}
135f577ffd7STony Lindgren }
1367c38cf02STony Lindgren 
137