xref: /openbmc/linux/arch/arm/mach-omap1/io.c (revision 9a99b142)
1d2912cb1SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
2f577ffd7STony Lindgren /*
3f577ffd7STony Lindgren  * linux/arch/arm/mach-omap1/io.c
4f577ffd7STony Lindgren  *
5f577ffd7STony Lindgren  * OMAP1 I/O mapping code
6f577ffd7STony Lindgren  */
7f577ffd7STony Lindgren 
8f577ffd7STony Lindgren #include <linux/module.h>
9f577ffd7STony Lindgren #include <linux/kernel.h>
10f577ffd7STony Lindgren #include <linux/init.h>
11fced80c7SRussell King #include <linux/io.h>
127e0a9e62SArnd Bergmann #include <linux/omap-dma.h>
13f577ffd7STony Lindgren 
1453d9cc73STony Lindgren #include <asm/tlb.h>
15f577ffd7STony Lindgren #include <asm/mach/map.h>
162e3ee9f4STony Lindgren 
177e0a9e62SArnd Bergmann #include "tc.h"
182e3ee9f4STony Lindgren #include "iomap.h"
192e3ee9f4STony Lindgren #include "common.h"
2052650505SPaul Walmsley 
21f577ffd7STony Lindgren /*
22f577ffd7STony Lindgren  * The machine specific code may provide the extra mapping besides the
23f577ffd7STony Lindgren  * default mapping provided here.
24f577ffd7STony Lindgren  */
25*9a99b142SArnd Bergmann static struct map_desc omap1_io_desc[] __initdata = {
269fe133b1SDeepak Saxena 	{
27980a637dSArnd Bergmann 		.virtual	= OMAP1_IO_VIRT,
28980a637dSArnd Bergmann 		.pfn		= __phys_to_pfn(OMAP1_IO_PHYS),
29980a637dSArnd Bergmann 		.length		= OMAP1_IO_SIZE,
30980a637dSArnd Bergmann 		.type		= MT_DEVICE
31*9a99b142SArnd Bergmann 	}, {
32*9a99b142SArnd Bergmann 		.virtual	= OMAP1_DSP_BASE,
33*9a99b142SArnd Bergmann 		.pfn		= __phys_to_pfn(OMAP1_DSP_START),
34*9a99b142SArnd Bergmann 		.length		= OMAP1_DSP_SIZE,
359fe133b1SDeepak Saxena 		.type		= MT_DEVICE
369fe133b1SDeepak Saxena 	}, {
37*9a99b142SArnd Bergmann 		.virtual	= OMAP1_DSPREG_BASE,
38*9a99b142SArnd Bergmann 		.pfn		= __phys_to_pfn(OMAP1_DSPREG_START),
39*9a99b142SArnd Bergmann 		.length		= OMAP1_DSPREG_SIZE,
409fe133b1SDeepak Saxena 		.type		= MT_DEVICE
419fe133b1SDeepak Saxena 	}
42f577ffd7STony Lindgren };
43f577ffd7STony Lindgren 
44*9a99b142SArnd Bergmann /*
45*9a99b142SArnd Bergmann  * Maps common IO regions for omap1
46*9a99b142SArnd Bergmann  */
omap1_map_io(void)47*9a99b142SArnd Bergmann void __init omap1_map_io(void)
489fe133b1SDeepak Saxena {
49*9a99b142SArnd Bergmann 	iotable_init(omap1_io_desc, ARRAY_SIZE(omap1_io_desc));
509fe133b1SDeepak Saxena }
51f577ffd7STony Lindgren 
5253d9cc73STony Lindgren /*
537b88e62fSTony Lindgren  * Common low-level hardware init for omap1.
5453d9cc73STony Lindgren  */
omap1_init_early(void)558eaa7bb0STony Lindgren void __init omap1_init_early(void)
5653d9cc73STony Lindgren {
577b88e62fSTony Lindgren 	omap_check_revision();
587b88e62fSTony Lindgren 
59f577ffd7STony Lindgren 	/* REVISIT: Refer to OMAP5910 Errata, Advisory SYS_1: "Timeout Abort
60f577ffd7STony Lindgren 	 * on a Posted Write in the TIPB Bridge".
61f577ffd7STony Lindgren 	 */
62f577ffd7STony Lindgren 	omap_writew(0x0, MPU_PUBLIC_TIPB_CNTL);
63f577ffd7STony Lindgren 	omap_writew(0x0, MPU_PRIVATE_TIPB_CNTL);
643179a019STony Lindgren }
657c38cf02STony Lindgren 
omap1_init_late(void)6682c3bd03SShawn Guo void __init omap1_init_late(void)
6782c3bd03SShawn Guo {
6882c3bd03SShawn Guo 	omap_serial_wakeup_init();
6982c3bd03SShawn Guo }
7082c3bd03SShawn Guo 
71df1e9d1cSTony Lindgren /*
72df1e9d1cSTony Lindgren  * NOTE: Please use ioremap + __raw_read/write where possible instead of these
73df1e9d1cSTony Lindgren  */
74df1e9d1cSTony Lindgren 
omap_readb(u32 pa)75df1e9d1cSTony Lindgren u8 omap_readb(u32 pa)
76df1e9d1cSTony Lindgren {
77df1e9d1cSTony Lindgren 	return __raw_readb(OMAP1_IO_ADDRESS(pa));
78df1e9d1cSTony Lindgren }
79df1e9d1cSTony Lindgren EXPORT_SYMBOL(omap_readb);
80df1e9d1cSTony Lindgren 
omap_readw(u32 pa)81df1e9d1cSTony Lindgren u16 omap_readw(u32 pa)
82df1e9d1cSTony Lindgren {
83df1e9d1cSTony Lindgren 	return __raw_readw(OMAP1_IO_ADDRESS(pa));
84df1e9d1cSTony Lindgren }
85df1e9d1cSTony Lindgren EXPORT_SYMBOL(omap_readw);
86df1e9d1cSTony Lindgren 
omap_readl(u32 pa)87df1e9d1cSTony Lindgren u32 omap_readl(u32 pa)
88df1e9d1cSTony Lindgren {
89df1e9d1cSTony Lindgren 	return __raw_readl(OMAP1_IO_ADDRESS(pa));
90df1e9d1cSTony Lindgren }
91df1e9d1cSTony Lindgren EXPORT_SYMBOL(omap_readl);
92df1e9d1cSTony Lindgren 
omap_writeb(u8 v,u32 pa)93df1e9d1cSTony Lindgren void omap_writeb(u8 v, u32 pa)
94df1e9d1cSTony Lindgren {
95df1e9d1cSTony Lindgren 	__raw_writeb(v, OMAP1_IO_ADDRESS(pa));
96df1e9d1cSTony Lindgren }
97df1e9d1cSTony Lindgren EXPORT_SYMBOL(omap_writeb);
98df1e9d1cSTony Lindgren 
omap_writew(u16 v,u32 pa)99df1e9d1cSTony Lindgren void omap_writew(u16 v, u32 pa)
100df1e9d1cSTony Lindgren {
101df1e9d1cSTony Lindgren 	__raw_writew(v, OMAP1_IO_ADDRESS(pa));
102df1e9d1cSTony Lindgren }
103df1e9d1cSTony Lindgren EXPORT_SYMBOL(omap_writew);
104df1e9d1cSTony Lindgren 
omap_writel(u32 v,u32 pa)105df1e9d1cSTony Lindgren void omap_writel(u32 v, u32 pa)
106df1e9d1cSTony Lindgren {
107df1e9d1cSTony Lindgren 	__raw_writel(v, OMAP1_IO_ADDRESS(pa));
108df1e9d1cSTony Lindgren }
109df1e9d1cSTony Lindgren EXPORT_SYMBOL(omap_writel);
110