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 202b43e4e5STony Lindgren #include <plat/hardware.h> 21aa218dafSPaul Walmsley #include <plat/board.h> 22aa218dafSPaul Walmsley #include <plat/mux.h> 23aa218dafSPaul Walmsley #include <plat/clock.h> 24aa218dafSPaul Walmsley 25ee0839c2STony Lindgren #include "iomap.h" 26ee0839c2STony Lindgren #include "common.h" 27aa218dafSPaul Walmsley #include "sdrc.h" 284814ced5SPaul Walmsley #include "control.h" 29aa218dafSPaul Walmsley 30aa218dafSPaul Walmsley /* Global address base setup code */ 31aa218dafSPaul Walmsley 32aa218dafSPaul Walmsley static void __init __omap2_set_globals(struct omap_globals *omap2_globals) 33aa218dafSPaul Walmsley { 34aa218dafSPaul Walmsley omap2_set_globals_tap(omap2_globals); 35aa218dafSPaul Walmsley omap2_set_globals_sdrc(omap2_globals); 36aa218dafSPaul Walmsley omap2_set_globals_control(omap2_globals); 37aa218dafSPaul Walmsley omap2_set_globals_prcm(omap2_globals); 38aa218dafSPaul Walmsley } 39aa218dafSPaul Walmsley 4059b479e0STony Lindgren #if defined(CONFIG_SOC_OMAP2420) 41aa218dafSPaul Walmsley 42aa218dafSPaul Walmsley static struct omap_globals omap242x_globals = { 43aa218dafSPaul Walmsley .class = OMAP242X_CLASS, 44aa218dafSPaul Walmsley .tap = OMAP2_L4_IO_ADDRESS(0x48014000), 454c3cf901STony Lindgren .sdrc = OMAP2_L3_IO_ADDRESS(OMAP2420_SDRC_BASE), 464c3cf901STony Lindgren .sms = OMAP2_L3_IO_ADDRESS(OMAP2420_SMS_BASE), 474c3cf901STony Lindgren .ctrl = OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE), 484c3cf901STony Lindgren .prm = OMAP2_L4_IO_ADDRESS(OMAP2420_PRM_BASE), 494c3cf901STony Lindgren .cm = OMAP2_L4_IO_ADDRESS(OMAP2420_CM_BASE), 50aa218dafSPaul Walmsley }; 51aa218dafSPaul Walmsley 52aa218dafSPaul Walmsley void __init omap2_set_globals_242x(void) 53aa218dafSPaul Walmsley { 54aa218dafSPaul Walmsley __omap2_set_globals(&omap242x_globals); 55aa218dafSPaul Walmsley } 5635549ec3SBenoit Cousson 5735549ec3SBenoit Cousson void __init omap242x_map_io(void) 5835549ec3SBenoit Cousson { 5935549ec3SBenoit Cousson omap242x_map_common_io(); 6035549ec3SBenoit Cousson } 61aa218dafSPaul Walmsley #endif 62aa218dafSPaul Walmsley 6359b479e0STony Lindgren #if defined(CONFIG_SOC_OMAP2430) 64aa218dafSPaul Walmsley 65aa218dafSPaul Walmsley static struct omap_globals omap243x_globals = { 66aa218dafSPaul Walmsley .class = OMAP243X_CLASS, 67aa218dafSPaul Walmsley .tap = OMAP2_L4_IO_ADDRESS(0x4900a000), 684c3cf901STony Lindgren .sdrc = OMAP2_L3_IO_ADDRESS(OMAP243X_SDRC_BASE), 694c3cf901STony Lindgren .sms = OMAP2_L3_IO_ADDRESS(OMAP243X_SMS_BASE), 704c3cf901STony Lindgren .ctrl = OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE), 714c3cf901STony Lindgren .prm = OMAP2_L4_IO_ADDRESS(OMAP2430_PRM_BASE), 724c3cf901STony Lindgren .cm = OMAP2_L4_IO_ADDRESS(OMAP2430_CM_BASE), 73aa218dafSPaul Walmsley }; 74aa218dafSPaul Walmsley 75aa218dafSPaul Walmsley void __init omap2_set_globals_243x(void) 76aa218dafSPaul Walmsley { 77aa218dafSPaul Walmsley __omap2_set_globals(&omap243x_globals); 78aa218dafSPaul Walmsley } 7935549ec3SBenoit Cousson 8035549ec3SBenoit Cousson void __init omap243x_map_io(void) 8135549ec3SBenoit Cousson { 8235549ec3SBenoit Cousson omap243x_map_common_io(); 8335549ec3SBenoit Cousson } 84aa218dafSPaul Walmsley #endif 85aa218dafSPaul Walmsley 86aa218dafSPaul Walmsley #if defined(CONFIG_ARCH_OMAP3) 87aa218dafSPaul Walmsley 88aa218dafSPaul Walmsley static struct omap_globals omap3_globals = { 89aa218dafSPaul Walmsley .class = OMAP343X_CLASS, 90aa218dafSPaul Walmsley .tap = OMAP2_L4_IO_ADDRESS(0x4830A000), 914c3cf901STony Lindgren .sdrc = OMAP2_L3_IO_ADDRESS(OMAP343X_SDRC_BASE), 924c3cf901STony Lindgren .sms = OMAP2_L3_IO_ADDRESS(OMAP343X_SMS_BASE), 934c3cf901STony Lindgren .ctrl = OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE), 944c3cf901STony Lindgren .prm = OMAP2_L4_IO_ADDRESS(OMAP3430_PRM_BASE), 954c3cf901STony Lindgren .cm = OMAP2_L4_IO_ADDRESS(OMAP3430_CM_BASE), 96aa218dafSPaul Walmsley }; 97aa218dafSPaul Walmsley 98aa218dafSPaul Walmsley void __init omap2_set_globals_3xxx(void) 99aa218dafSPaul Walmsley { 100aa218dafSPaul Walmsley __omap2_set_globals(&omap3_globals); 101aa218dafSPaul Walmsley } 102aa218dafSPaul Walmsley 103aa218dafSPaul Walmsley void __init omap3_map_io(void) 104aa218dafSPaul Walmsley { 105aa218dafSPaul Walmsley omap34xx_map_common_io(); 106aa218dafSPaul Walmsley } 10701001712SHemant Pedanekar 10801001712SHemant Pedanekar /* 10901001712SHemant Pedanekar * Adjust TAP register base such that omap3_check_revision accesses the correct 110a920360fSHemant Pedanekar * TI81XX register for checking device ID (it adds 0x204 to tap base while 111a920360fSHemant Pedanekar * TI81XX DEVICE ID register is at offset 0x600 from control base). 11201001712SHemant Pedanekar */ 113a920360fSHemant Pedanekar #define TI81XX_TAP_BASE (TI81XX_CTRL_BASE + \ 114a920360fSHemant Pedanekar TI81XX_CONTROL_DEVICE_ID - 0x204) 11501001712SHemant Pedanekar 116a920360fSHemant Pedanekar static struct omap_globals ti81xx_globals = { 11701001712SHemant Pedanekar .class = OMAP343X_CLASS, 118a920360fSHemant Pedanekar .tap = OMAP2_L4_IO_ADDRESS(TI81XX_TAP_BASE), 119a920360fSHemant Pedanekar .ctrl = OMAP2_L4_IO_ADDRESS(TI81XX_CTRL_BASE), 120a920360fSHemant Pedanekar .prm = OMAP2_L4_IO_ADDRESS(TI81XX_PRCM_BASE), 121a920360fSHemant Pedanekar .cm = OMAP2_L4_IO_ADDRESS(TI81XX_PRCM_BASE), 12201001712SHemant Pedanekar }; 12301001712SHemant Pedanekar 124a920360fSHemant Pedanekar void __init omap2_set_globals_ti81xx(void) 12501001712SHemant Pedanekar { 126a920360fSHemant Pedanekar __omap2_set_globals(&ti81xx_globals); 127a920360fSHemant Pedanekar } 128a920360fSHemant Pedanekar 129a920360fSHemant Pedanekar void __init ti81xx_map_io(void) 130a920360fSHemant Pedanekar { 131a920360fSHemant Pedanekar omapti81xx_map_common_io(); 13201001712SHemant Pedanekar } 1331c213ba1SVaibhav Hiremath #endif 1341e6cb146SAfzal Mohammed 1351c213ba1SVaibhav Hiremath #if defined(CONFIG_SOC_AM33XX) 1361e6cb146SAfzal Mohammed #define AM33XX_TAP_BASE (AM33XX_CTRL_BASE + \ 137a920360fSHemant Pedanekar TI81XX_CONTROL_DEVICE_ID - 0x204) 1381e6cb146SAfzal Mohammed 1391e6cb146SAfzal Mohammed static struct omap_globals am33xx_globals = { 1401e6cb146SAfzal Mohammed .class = AM335X_CLASS, 1411e6cb146SAfzal Mohammed .tap = AM33XX_L4_WK_IO_ADDRESS(AM33XX_TAP_BASE), 1421e6cb146SAfzal Mohammed .ctrl = AM33XX_L4_WK_IO_ADDRESS(AM33XX_CTRL_BASE), 1431e6cb146SAfzal Mohammed .prm = AM33XX_L4_WK_IO_ADDRESS(AM33XX_PRCM_BASE), 1441e6cb146SAfzal Mohammed .cm = AM33XX_L4_WK_IO_ADDRESS(AM33XX_PRCM_BASE), 1451e6cb146SAfzal Mohammed }; 1461e6cb146SAfzal Mohammed 1471e6cb146SAfzal Mohammed void __init omap2_set_globals_am33xx(void) 1481e6cb146SAfzal Mohammed { 1491e6cb146SAfzal Mohammed __omap2_set_globals(&am33xx_globals); 1501e6cb146SAfzal Mohammed } 1511e6cb146SAfzal Mohammed 1521e6cb146SAfzal Mohammed void __init am33xx_map_io(void) 1531e6cb146SAfzal Mohammed { 1541e6cb146SAfzal Mohammed omapam33xx_map_common_io(); 1551e6cb146SAfzal Mohammed } 156aa218dafSPaul Walmsley #endif 157aa218dafSPaul Walmsley 158aa218dafSPaul Walmsley #if defined(CONFIG_ARCH_OMAP4) 159aa218dafSPaul Walmsley static struct omap_globals omap4_globals = { 160aa218dafSPaul Walmsley .class = OMAP443X_CLASS, 161aa218dafSPaul Walmsley .tap = OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE), 1624c3cf901STony Lindgren .ctrl = OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE), 1634c3cf901STony Lindgren .ctrl_pad = OMAP2_L4_IO_ADDRESS(OMAP443X_CTRL_BASE), 1644c3cf901STony Lindgren .prm = OMAP2_L4_IO_ADDRESS(OMAP4430_PRM_BASE), 1654c3cf901STony Lindgren .cm = OMAP2_L4_IO_ADDRESS(OMAP4430_CM_BASE), 1664c3cf901STony Lindgren .cm2 = OMAP2_L4_IO_ADDRESS(OMAP4430_CM2_BASE), 167610eb8c2SR Sricharan .prcm_mpu = OMAP2_L4_IO_ADDRESS(OMAP4430_PRCM_MPU_BASE), 168aa218dafSPaul Walmsley }; 169aa218dafSPaul Walmsley 170aa218dafSPaul Walmsley void __init omap2_set_globals_443x(void) 171aa218dafSPaul Walmsley { 172ecc46cfdSVaibhav Hiremath __omap2_set_globals(&omap4_globals); 173aa218dafSPaul Walmsley } 17435549ec3SBenoit Cousson 17535549ec3SBenoit Cousson void __init omap4_map_io(void) 17635549ec3SBenoit Cousson { 17735549ec3SBenoit Cousson omap44xx_map_common_io(); 17835549ec3SBenoit Cousson } 179aa218dafSPaul Walmsley #endif 180aa218dafSPaul Walmsley 18105e152c7SR Sricharan #if defined(CONFIG_SOC_OMAP5) 18205e152c7SR Sricharan static struct omap_globals omap5_globals = { 18305e152c7SR Sricharan .class = OMAP54XX_CLASS, 18405e152c7SR Sricharan .tap = OMAP2_L4_IO_ADDRESS(OMAP54XX_SCM_BASE), 18505e152c7SR Sricharan .ctrl = OMAP2_L4_IO_ADDRESS(OMAP54XX_SCM_BASE), 18605e152c7SR Sricharan .ctrl_pad = OMAP2_L4_IO_ADDRESS(OMAP54XX_CTRL_BASE), 18705e152c7SR Sricharan .prm = OMAP2_L4_IO_ADDRESS(OMAP54XX_PRM_BASE), 18805e152c7SR Sricharan .cm = OMAP2_L4_IO_ADDRESS(OMAP54XX_CM_CORE_AON_BASE), 18905e152c7SR Sricharan .cm2 = OMAP2_L4_IO_ADDRESS(OMAP54XX_CM_CORE_BASE), 19005e152c7SR Sricharan .prcm_mpu = OMAP2_L4_IO_ADDRESS(OMAP54XX_PRCM_MPU_BASE), 19105e152c7SR Sricharan }; 19205e152c7SR Sricharan 19305e152c7SR Sricharan void __init omap2_set_globals_5xxx(void) 19405e152c7SR Sricharan { 19505e152c7SR Sricharan omap2_set_globals_tap(&omap5_globals); 19605e152c7SR Sricharan omap2_set_globals_control(&omap5_globals); 19705e152c7SR Sricharan omap2_set_globals_prcm(&omap5_globals); 19805e152c7SR Sricharan } 19905e152c7SR Sricharan 20005e152c7SR Sricharan void __init omap5_map_io(void) 20105e152c7SR Sricharan { 20205e152c7SR Sricharan omap5_map_common_io(); 20305e152c7SR Sricharan } 20405e152c7SR Sricharan #endif 205