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