1aa218dafSPaul Walmsley /* 2aa218dafSPaul Walmsley * linux/arch/arm/mach-omap2/common.c 3aa218dafSPaul Walmsley * 4aa218dafSPaul Walmsley * Code common to all OMAP2+ machines. 5aa218dafSPaul Walmsley * 6aa218dafSPaul Walmsley * Copyright (C) 2009 Texas Instruments 7aa218dafSPaul Walmsley * Copyright (C) 2010 Nokia Corporation 8aa218dafSPaul Walmsley * Tony Lindgren <tony@atomide.com> 9aa218dafSPaul Walmsley * Added OMAP4 support - Santosh Shilimkar <santosh.shilimkar@ti.com> 10aa218dafSPaul Walmsley * 11aa218dafSPaul Walmsley * This program is free software; you can redistribute it and/or modify 12aa218dafSPaul Walmsley * it under the terms of the GNU General Public License version 2 as 13aa218dafSPaul Walmsley * published by the Free Software Foundation. 14aa218dafSPaul Walmsley */ 15aa218dafSPaul Walmsley #include <linux/kernel.h> 16aa218dafSPaul Walmsley #include <linux/init.h> 17aa218dafSPaul Walmsley #include <linux/clk.h> 18aa218dafSPaul Walmsley #include <linux/io.h> 19aa218dafSPaul Walmsley 20aa218dafSPaul Walmsley #include <plat/common.h> 21aa218dafSPaul Walmsley #include <plat/board.h> 22aa218dafSPaul Walmsley #include <plat/mux.h> 23aa218dafSPaul Walmsley 24aa218dafSPaul Walmsley #include <plat/clock.h> 25aa218dafSPaul Walmsley 26aa218dafSPaul Walmsley #include "sdrc.h" 274814ced5SPaul Walmsley #include "control.h" 28aa218dafSPaul Walmsley 29aa218dafSPaul Walmsley /* Global address base setup code */ 30aa218dafSPaul Walmsley 31aa218dafSPaul Walmsley #if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3) 32aa218dafSPaul Walmsley 33aa218dafSPaul Walmsley static void __init __omap2_set_globals(struct omap_globals *omap2_globals) 34aa218dafSPaul Walmsley { 35aa218dafSPaul Walmsley omap2_set_globals_tap(omap2_globals); 36aa218dafSPaul Walmsley omap2_set_globals_sdrc(omap2_globals); 37aa218dafSPaul Walmsley omap2_set_globals_control(omap2_globals); 38aa218dafSPaul Walmsley omap2_set_globals_prcm(omap2_globals); 39aa218dafSPaul Walmsley } 40aa218dafSPaul Walmsley 41aa218dafSPaul Walmsley #endif 42aa218dafSPaul Walmsley 43aa218dafSPaul Walmsley #if defined(CONFIG_ARCH_OMAP2420) 44aa218dafSPaul Walmsley 45aa218dafSPaul Walmsley static struct omap_globals omap242x_globals = { 46aa218dafSPaul Walmsley .class = OMAP242X_CLASS, 47aa218dafSPaul Walmsley .tap = OMAP2_L4_IO_ADDRESS(0x48014000), 48aa218dafSPaul Walmsley .sdrc = OMAP2420_SDRC_BASE, 49aa218dafSPaul Walmsley .sms = OMAP2420_SMS_BASE, 50aa218dafSPaul Walmsley .ctrl = OMAP242X_CTRL_BASE, 51aa218dafSPaul Walmsley .prm = OMAP2420_PRM_BASE, 52aa218dafSPaul Walmsley .cm = OMAP2420_CM_BASE, 53aa218dafSPaul Walmsley .uart1_phys = OMAP2_UART1_BASE, 54aa218dafSPaul Walmsley .uart2_phys = OMAP2_UART2_BASE, 55aa218dafSPaul Walmsley .uart3_phys = OMAP2_UART3_BASE, 56aa218dafSPaul Walmsley }; 57aa218dafSPaul Walmsley 58aa218dafSPaul Walmsley void __init omap2_set_globals_242x(void) 59aa218dafSPaul Walmsley { 60aa218dafSPaul Walmsley __omap2_set_globals(&omap242x_globals); 61aa218dafSPaul Walmsley } 62aa218dafSPaul Walmsley #endif 63aa218dafSPaul Walmsley 64aa218dafSPaul Walmsley #if defined(CONFIG_ARCH_OMAP2430) 65aa218dafSPaul Walmsley 66aa218dafSPaul Walmsley static struct omap_globals omap243x_globals = { 67aa218dafSPaul Walmsley .class = OMAP243X_CLASS, 68aa218dafSPaul Walmsley .tap = OMAP2_L4_IO_ADDRESS(0x4900a000), 69aa218dafSPaul Walmsley .sdrc = OMAP243X_SDRC_BASE, 70aa218dafSPaul Walmsley .sms = OMAP243X_SMS_BASE, 71aa218dafSPaul Walmsley .ctrl = OMAP243X_CTRL_BASE, 72aa218dafSPaul Walmsley .prm = OMAP2430_PRM_BASE, 73aa218dafSPaul Walmsley .cm = OMAP2430_CM_BASE, 74aa218dafSPaul Walmsley .uart1_phys = OMAP2_UART1_BASE, 75aa218dafSPaul Walmsley .uart2_phys = OMAP2_UART2_BASE, 76aa218dafSPaul Walmsley .uart3_phys = OMAP2_UART3_BASE, 77aa218dafSPaul Walmsley }; 78aa218dafSPaul Walmsley 79aa218dafSPaul Walmsley void __init omap2_set_globals_243x(void) 80aa218dafSPaul Walmsley { 81aa218dafSPaul Walmsley __omap2_set_globals(&omap243x_globals); 82aa218dafSPaul Walmsley } 83aa218dafSPaul Walmsley #endif 84aa218dafSPaul Walmsley 85aa218dafSPaul Walmsley #if defined(CONFIG_ARCH_OMAP3) 86aa218dafSPaul Walmsley 87aa218dafSPaul Walmsley static struct omap_globals omap3_globals = { 88aa218dafSPaul Walmsley .class = OMAP343X_CLASS, 89aa218dafSPaul Walmsley .tap = OMAP2_L4_IO_ADDRESS(0x4830A000), 90aa218dafSPaul Walmsley .sdrc = OMAP343X_SDRC_BASE, 91aa218dafSPaul Walmsley .sms = OMAP343X_SMS_BASE, 92aa218dafSPaul Walmsley .ctrl = OMAP343X_CTRL_BASE, 93aa218dafSPaul Walmsley .prm = OMAP3430_PRM_BASE, 94aa218dafSPaul Walmsley .cm = OMAP3430_CM_BASE, 95aa218dafSPaul Walmsley .uart1_phys = OMAP3_UART1_BASE, 96aa218dafSPaul Walmsley .uart2_phys = OMAP3_UART2_BASE, 97aa218dafSPaul Walmsley .uart3_phys = OMAP3_UART3_BASE, 98aa218dafSPaul Walmsley .uart4_phys = OMAP3_UART4_BASE, /* Only on 3630 */ 99aa218dafSPaul Walmsley }; 100aa218dafSPaul Walmsley 101aa218dafSPaul Walmsley void __init omap2_set_globals_3xxx(void) 102aa218dafSPaul Walmsley { 103aa218dafSPaul Walmsley __omap2_set_globals(&omap3_globals); 104aa218dafSPaul Walmsley } 105aa218dafSPaul Walmsley 106aa218dafSPaul Walmsley void __init omap3_map_io(void) 107aa218dafSPaul Walmsley { 108aa218dafSPaul Walmsley omap2_set_globals_3xxx(); 109aa218dafSPaul Walmsley omap34xx_map_common_io(); 110aa218dafSPaul Walmsley } 11101001712SHemant Pedanekar 11201001712SHemant Pedanekar /* 11301001712SHemant Pedanekar * Adjust TAP register base such that omap3_check_revision accesses the correct 11401001712SHemant Pedanekar * TI816X register for checking device ID (it adds 0x204 to tap base while 11501001712SHemant Pedanekar * TI816X DEVICE ID register is at offset 0x600 from control base). 11601001712SHemant Pedanekar */ 11701001712SHemant Pedanekar #define TI816X_TAP_BASE (TI816X_CTRL_BASE + \ 11801001712SHemant Pedanekar TI816X_CONTROL_DEVICE_ID - 0x204) 11901001712SHemant Pedanekar 12001001712SHemant Pedanekar static struct omap_globals ti816x_globals = { 12101001712SHemant Pedanekar .class = OMAP343X_CLASS, 12201001712SHemant Pedanekar .tap = OMAP2_L4_IO_ADDRESS(TI816X_TAP_BASE), 12301001712SHemant Pedanekar .ctrl = TI816X_CTRL_BASE, 12401001712SHemant Pedanekar .prm = TI816X_PRCM_BASE, 12501001712SHemant Pedanekar .cm = TI816X_PRCM_BASE, 12601001712SHemant Pedanekar }; 12701001712SHemant Pedanekar 12801001712SHemant Pedanekar void __init omap2_set_globals_ti816x(void) 12901001712SHemant Pedanekar { 13001001712SHemant Pedanekar __omap2_set_globals(&ti816x_globals); 13101001712SHemant Pedanekar } 132aa218dafSPaul Walmsley #endif 133aa218dafSPaul Walmsley 134aa218dafSPaul Walmsley #if defined(CONFIG_ARCH_OMAP4) 135aa218dafSPaul Walmsley static struct omap_globals omap4_globals = { 136aa218dafSPaul Walmsley .class = OMAP443X_CLASS, 137aa218dafSPaul Walmsley .tap = OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE), 138aa218dafSPaul Walmsley .ctrl = OMAP443X_SCM_BASE, 139aa218dafSPaul Walmsley .ctrl_pad = OMAP443X_CTRL_BASE, 140aa218dafSPaul Walmsley .prm = OMAP4430_PRM_BASE, 141aa218dafSPaul Walmsley .cm = OMAP4430_CM_BASE, 142aa218dafSPaul Walmsley .cm2 = OMAP4430_CM2_BASE, 143aa218dafSPaul Walmsley .uart1_phys = OMAP4_UART1_BASE, 144aa218dafSPaul Walmsley .uart2_phys = OMAP4_UART2_BASE, 145aa218dafSPaul Walmsley .uart3_phys = OMAP4_UART3_BASE, 146aa218dafSPaul Walmsley .uart4_phys = OMAP4_UART4_BASE, 147aa218dafSPaul Walmsley }; 148aa218dafSPaul Walmsley 149aa218dafSPaul Walmsley void __init omap2_set_globals_443x(void) 150aa218dafSPaul Walmsley { 151aa218dafSPaul Walmsley omap2_set_globals_tap(&omap4_globals); 152aa218dafSPaul Walmsley omap2_set_globals_control(&omap4_globals); 153aa218dafSPaul Walmsley omap2_set_globals_prcm(&omap4_globals); 154aa218dafSPaul Walmsley } 155aa218dafSPaul Walmsley #endif 156aa218dafSPaul Walmsley 157