1
2
3
4
5
6
7
8
9
10
11#include <linux/module.h>
12#include <linux/kernel.h>
13#include <linux/init.h>
14#include <linux/io.h>
15
16#include <asm/tlb.h>
17#include <asm/mach/map.h>
18#include <plat/mux.h>
19#include <plat/tc.h>
20
21#include "clock.h"
22
23extern void omap_check_revision(void);
24
25
26
27
28
29static struct map_desc omap_io_desc[] __initdata = {
30 {
31 .virtual = OMAP1_IO_VIRT,
32 .pfn = __phys_to_pfn(OMAP1_IO_PHYS),
33 .length = OMAP1_IO_SIZE,
34 .type = MT_DEVICE
35 }
36};
37
38#if defined (CONFIG_ARCH_OMAP730) || defined (CONFIG_ARCH_OMAP850)
39static struct map_desc omap7xx_io_desc[] __initdata = {
40 {
41 .virtual = OMAP7XX_DSP_BASE,
42 .pfn = __phys_to_pfn(OMAP7XX_DSP_START),
43 .length = OMAP7XX_DSP_SIZE,
44 .type = MT_DEVICE
45 }, {
46 .virtual = OMAP7XX_DSPREG_BASE,
47 .pfn = __phys_to_pfn(OMAP7XX_DSPREG_START),
48 .length = OMAP7XX_DSPREG_SIZE,
49 .type = MT_DEVICE
50 }
51};
52#endif
53
54#ifdef CONFIG_ARCH_OMAP15XX
55static struct map_desc omap1510_io_desc[] __initdata = {
56 {
57 .virtual = OMAP1510_DSP_BASE,
58 .pfn = __phys_to_pfn(OMAP1510_DSP_START),
59 .length = OMAP1510_DSP_SIZE,
60 .type = MT_DEVICE
61 }, {
62 .virtual = OMAP1510_DSPREG_BASE,
63 .pfn = __phys_to_pfn(OMAP1510_DSPREG_START),
64 .length = OMAP1510_DSPREG_SIZE,
65 .type = MT_DEVICE
66 }
67};
68#endif
69
70#if defined(CONFIG_ARCH_OMAP16XX)
71static struct map_desc omap16xx_io_desc[] __initdata = {
72 {
73 .virtual = OMAP16XX_DSP_BASE,
74 .pfn = __phys_to_pfn(OMAP16XX_DSP_START),
75 .length = OMAP16XX_DSP_SIZE,
76 .type = MT_DEVICE
77 }, {
78 .virtual = OMAP16XX_DSPREG_BASE,
79 .pfn = __phys_to_pfn(OMAP16XX_DSPREG_START),
80 .length = OMAP16XX_DSPREG_SIZE,
81 .type = MT_DEVICE
82 }
83};
84#endif
85
86
87
88
89static void __init omap1_map_common_io(void)
90{
91 iotable_init(omap_io_desc, ARRAY_SIZE(omap_io_desc));
92}
93
94#if defined (CONFIG_ARCH_OMAP730) || defined (CONFIG_ARCH_OMAP850)
95void __init omap7xx_map_io(void)
96{
97 omap1_map_common_io();
98 iotable_init(omap7xx_io_desc, ARRAY_SIZE(omap7xx_io_desc));
99}
100#endif
101
102#ifdef CONFIG_ARCH_OMAP15XX
103void __init omap15xx_map_io(void)
104{
105 omap1_map_common_io();
106 iotable_init(omap1510_io_desc, ARRAY_SIZE(omap1510_io_desc));
107}
108#endif
109
110#if defined(CONFIG_ARCH_OMAP16XX)
111void __init omap16xx_map_io(void)
112{
113 omap1_map_common_io();
114 iotable_init(omap16xx_io_desc, ARRAY_SIZE(omap16xx_io_desc));
115}
116#endif
117
118
119
120
121void omap1_init_early(void)
122{
123 omap_check_revision();
124 omap_ioremap_init();
125
126
127
128
129 omap_writew(0x0, MPU_PUBLIC_TIPB_CNTL);
130 omap_writew(0x0, MPU_PRIVATE_TIPB_CNTL);
131
132
133
134 omap1_clk_init();
135 omap1_mux_init();
136 omap_init_consistent_dma_size();
137}
138
139
140
141
142
143u8 omap_readb(u32 pa)
144{
145 return __raw_readb(OMAP1_IO_ADDRESS(pa));
146}
147EXPORT_SYMBOL(omap_readb);
148
149u16 omap_readw(u32 pa)
150{
151 return __raw_readw(OMAP1_IO_ADDRESS(pa));
152}
153EXPORT_SYMBOL(omap_readw);
154
155u32 omap_readl(u32 pa)
156{
157 return __raw_readl(OMAP1_IO_ADDRESS(pa));
158}
159EXPORT_SYMBOL(omap_readl);
160
161void omap_writeb(u8 v, u32 pa)
162{
163 __raw_writeb(v, OMAP1_IO_ADDRESS(pa));
164}
165EXPORT_SYMBOL(omap_writeb);
166
167void omap_writew(u16 v, u32 pa)
168{
169 __raw_writew(v, OMAP1_IO_ADDRESS(pa));
170}
171EXPORT_SYMBOL(omap_writew);
172
173void omap_writel(u32 v, u32 pa)
174{
175 __raw_writel(v, OMAP1_IO_ADDRESS(pa));
176}
177EXPORT_SYMBOL(omap_writel);
178