OMAP3: Add support for some of TIs ARM-Cortex A8 OMAP3 boards
Subsystems (6)
v6 cover OMAP3: Add support for some of TIs ARM-Cortex A8 OMAP3 boards
This patch series adds U-Boot v1 support for some of TI's ARM-Cortex A8 based OMAP3 boards. These are BeagleBoard [1][2], EVM [3], Overo [4], Pandora [5] and Zoom1 [6].
The patch series is based on U-Boot tar ball [7] for BeagleBoard and EVM done by several TI employees.
To be able to easily add new boards, most of the code is common for all boards. After the header files (patches 1 - 2) and the common code for ARM Cortex A8 (patch 3) and OMAP3 SoC (patches 4 & 5), support and drivers for NAND, MMC and I2C are added (patches 6 - 8). Patches 9 - 13 introduce the individual board support for Beagle, EVM, Overo, Pandora and Zoom1. The last two patches 14 & 15 add the config files for these boards and enable them by adding main Makefile, Maintainers, MAKEALL and README.
As discussed earlier on this list, we compile for armv5 to be compatible with existing toolchains.
This patch adds ~300k of new code.
Thanks to
Steve Sakoman <[email protected]>
Pillai, Manikandan <[email protected]>
Syed Mohammed, Khasim <[email protected]>
Nishanth Menon <[email protected]>
Grazvydas Ignotas <[email protected]>
Jason Kridner <[email protected]>
and all others who helped with this.
Dirk
This patch series is against U-Boot mainline, commit 89d56f5503eed351efe5ab0b4dd0f1e888fd2336
"Merge branch 'master' of git://git.denx.de/u-boot-ppc4xx"
This OMAP3 v6 patch series makes all older OMAP3 patches obsolete.
Changes in version v6:
- Clean up coding style and whitespace
- Replace hardcoded values by macros
- Convert readx/writex register access to register struct style
- Add L1 NEON HW workaround
- Fix issues in NAND HW/SW ECC switch
- Add Pandora board
- Add Zoom1 board
- Clean up config files and add/enable 'hush' scripting
- Add check for MMC card
- Remove BITx magic
- In MAKEALL, move OMAP3 from ARM9 to Cortex A8 section
- Update EVM maintainer
- Update ARM's if then else logic in examples Makefile
- Introduce CONFIG_OMAP3_MMC
- Move common power initialization code to common board directory
- Fix GPL headers
[2] http://elinux.org/BeagleBoard
[3] http://focus.ti.com/docs/toolsw/folders/print/tmdxevm3503.html
[4] http://www.gumstix.net/Overo/
[6] http://www.logicpd.com/products/devkit/ti/zoom_mobile_development_kit
[7] http://beagleboard.googlecode.com/files/u-boot_beagle_revb.tar.gz
PATCH v6 1/15 OMAP3: Add pin mux, clock and cpu headers
Add pin mux, clock and cpu header files for OMAP3.
--- include/asm-arm/arch-omap3/clocks_omap3.h | 285 ++++++++++++++++++++ include/asm-arm/arch-omap3/cpu.h | 402 +++++++++++++++++++++++++++++ include/asm-arm/arch-omap3/mux.h | 412 ++++++++++++++++++++++++++++++ 3 files changed, 1099 insertions(+)
include/asm-arm/arch-omap3/clocks_omap3.h new file +285 -0
@@ -0,0 +1,285 @@ +/* +* (C) Copyright 2006-2008 +* Texas Instruments, <www.ti.com> +* Richard Woodruff <[email protected]> +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR /PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, +* MA 02111-1307 USA +*/ +#ifndef _CLOCKS_OMAP3_H_ +#define _CLOCKS_OMAP3_H_ + +#define PLL_STOP 1/* PER & IVA */ +#define PLL_LOW_POWER_BYPASS 5/* MPU, IVA & CORE */ +#define PLL_FAST_RELOCK_BYPASS 6/* CORE */ +#define PLL_LOCK 7/* MPU, IVA, CORE & PER */ + +/* +* The following configurations are OPP and SysClk value independant +* and hence are defined here. All the other DPLL related values are +* tabulated in lowlevel_init.S. +*/ + +/* CORE DPLL */ +#define CORE_M3X2 2/* 332MHz : CM_CLKSEL1_EMU */ +#define CORE_SSI_DIV 3/* 221MHz : CM_CLKSEL_CORE */ +#define CORE_FUSB_DIV 2/* 41.5MHz: */ +#define CORE_L4_DIV 2/* 83MHz : L4 */ +#define CORE_L3_DIV 2/* 166MHz : L3 {DDR} */ +#define GFX_DIV 2/* 83MHz : CM_CLKSEL_GFX */ +#define WKUP_RSM 2/* 41.5MHz: CM_CLKSEL_WKUP */ + +/* PER DPLL */ +#define PER_M6X2 3/* 288MHz: CM_CLKSEL1_EMU */ +#define PER_M5X2 4/* 216MHz: CM_CLKSEL_CAM */ +#define PER_M4X2 2/* 432MHz: CM_CLKSEL_DSS-dss1 */ +#define PER_M3X2 16/* 54MHz : CM_CLKSEL_DSS-tv */ + +#define CLSEL1_EMU_VAL ((CORE_M3X2 << 16) | (PER_M6X2 << 24) | (0x0A50)) + +/* MPU DPLL */ + +#define MPU_M_12_ES1 0x0FE +#define MPU_N_12_ES1 0x07 +#define MPU_FSEL_12_ES1 0x05 +#define MPU_M2_12_ES1 0x01 + +#define MPU_M_12_ES2 0x0FA +#define MPU_N_12_ES2 0x05 +#define MPU_FSEL_12_ES2 0x07 +#define MPU_M2_ES2 0x01 + +#define MPU_M_12 0x085 +#define MPU_N_12 0x05 +#define MPU_FSEL_12 0x07 +#define MPU_M2_12 0x01 + +#define MPU_M_13_ES1 0x17D +#define MPU_N_13_ES1 0x0C +#define MPU_FSEL_13_ES1 0x03 +#define MPU_M2_13_ES1 0x01 + +#define MPU_M_13_ES2 0x1F4 +#define MPU_N_13_ES2 0x0C +#define MPU_FSEL_13_ES2 0x03 +#define MPU_M2_13_ES2 0x01 + +#define MPU_M_13 0x10A +#define MPU_N_13 0x0C +#define MPU_FSEL_13 0x03 +#define MPU_M2_13 0x01 + +#define MPU_M_19P2_ES1 0x179 +#define MPU_N_19P2_ES1 0x12 +#define MPU_FSEL_19P2_ES1 0x04 +#define MPU_M2_19P2_ES1 0x01 + +#define MPU_M_19P2_ES2 0x271 +#define MPU_N_19P2_ES2 0x17 +#define MPU_FSEL_19P2_ES2 0x03 +#define MPU_M2_19P2_ES2 0x01 + +#define MPU_M_19P2 0x14C +#define MPU_N_19P2 0x17 +#define MPU_FSEL_19P2 0x03 +#define MPU_M2_19P2 0x01 + +#define MPU_M_26_ES1 0x17D +#define MPU_N_26_ES1 0x19 +#define MPU_FSEL_26_ES1 0x03 +#define MPU_M2_26_ES1 0x01 + +#define MPU_M_26_ES2 0x0FA +#define MPU_N_26_ES2 0x0C +#define MPU_FSEL_26_ES2 0x07 +#define MPU_M2_26_ES2 0x01 + +#define MPU_M_26 0x085 +#define MPU_N_26 0x0C +#define MPU_FSEL_26 0x07 +#define MPU_M2_26 0x01 + +#define MPU_M_38P4_ES1 0x1FA +#define MPU_N_38P4_ES1 0x32 +#define MPU_FSEL_38P4_ES1 0x03 +#define MPU_M2_38P4_ES1 0x01 + +#define MPU_M_38P4_ES2 0x271 +#define MPU_N_38P4_ES2 0x2F +#define MPU_FSEL_38P4_ES2 0x03 +#define MPU_M2_38P4_ES2 0x01 + +#define MPU_M_38P4 0x14C +#define MPU_N_38P4 0x2F +#define MPU_FSEL_38P4 0x03 +#define MPU_M2_38P4 0x01 + +/* IVA DPLL */ + +#define IVA_M_12_ES1 0x07D +#define IVA_N_12_ES1 0x05 +#define IVA_FSEL_12_ES1 0x07 +#define IVA_M2_12_ES1 0x01 + +#define IVA_M_12_ES2 0x0B4 +#define IVA_N_12_ES2 0x05 +#define IVA_FSEL_12_ES2 0x07 +#define IVA_M2_12_ES2 0x01 + +#define IVA_M_12 0x085 +#define IVA_N_12 0x05 +#define IVA_FSEL_12 0x07 +#define IVA_M2_12 0x01 + +#define IVA_M_13_ES1 0x0FA +#define IVA_N_13_ES1 0x0C +#define IVA_FSEL_13_ES1 0x03 +#define IVA_M2_13_ES1 0x01 + +#define IVA_M_13_ES2 0x168 +#define IVA_N_13_ES2 0x0C +#define IVA_FSEL_13_ES2 0x03 +#define IVA_M2_13_ES2 0x01 + +#define IVA_M_13 0x10A +#define IVA_N_13 0x0C +#define IVA_FSEL_13 0x03 +#define IVA_M2_13 0x01 + +#define IVA_M_19P2_ES1 0x082 +#define IVA_N_19P2_ES1 0x09 +#define IVA_FSEL_19P2_ES1 0x07 +#define IVA_M2_19P2_ES1 0x01 + +#define IVA_M_19P2_ES2 0x0E1 +#define IVA_N_19P2_ES2 0x0B +#define IVA_FSEL_19P2_ES2 0x06 +#define IVA_M2_19P2_ES2 0x01 + +#define IVA_M_19P2 0x14C +#define IVA_N_19P2 0x17 +#define IVA_FSEL_19P2 0x03 +#define IVA_M2_19P2 0x01 + +#define IVA_M_26_ES1 0x07D +#define IVA_N_26_ES1 0x0C +#define IVA_FSEL_26_ES1 0x07 +#define IVA_M2_26_ES1 0x01 + +#define IVA_M_26_ES2 0x0B4 +#define IVA_N_26_ES2 0x0C +#define IVA_FSEL_26_ES2 0x07 +#define IVA_M2_26_ES2 0x01 + +#define IVA_M_26 0x085 +#define IVA_N_26 0x0C +#define IVA_FSEL_26 0x07 +#define IVA_M2_26 0x01 + +#define IVA_M_38P4_ES1 0x13F +#define IVA_N_38P4_ES1 0x30 +#define IVA_FSEL_38P4_ES1 0x03 +#define IVA_M2_38P4_ES1 0x01 + +#define IVA_M_38P4_ES2 0x0E1 +#define IVA_N_38P4_ES2 0x17 +#define IVA_FSEL_38P4_ES2 0x06 +#define IVA_M2_38P4_ES2 0x01 + +#define IVA_M_38P4 0x14C +#define IVA_N_38P4 0x2F +#define IVA_FSEL_38P4 0x03 +#define IVA_M2_38P4 0x01 + +/* CORE DPLL */ + +#define CORE_M_12 0xA6 +#define CORE_N_12 0x05 +#define CORE_FSEL_12 0x07 +#define CORE_M2_12 0x01/* M3 of 2 */ + +#define CORE_M_12_ES1 0x19F +#define CORE_N_12_ES1 0x0E +#define CORE_FSL_12_ES1 0x03 +#define CORE_M2_12_ES1 0x1/* M3 of 2 */ + +#define CORE_M_13 0x14C +#define CORE_N_13 0x0C +#define CORE_FSEL_13 0x03 +#define CORE_M2_13 0x01/* M3 of 2 */ + +#define CORE_M_13_ES1 0x1B2 +#define CORE_N_13_ES1 0x10 +#define CORE_FSL_13_ES1 0x03 +#define CORE_M2_13_ES1 0x01/* M3 of 2 */ + +#define CORE_M_19P2 0x19F +#define CORE_N_19P2 0x17 +#define CORE_FSEL_19P2 0x03 +#define CORE_M2_19P2 0x01/* M3 of 2 */ + +#define CORE_M_19P2_ES1 0x19F +#define CORE_N_19P2_ES1 0x17 +#define CORE_FSL_19P2_ES1 0x03 +#define CORE_M2_19P2_ES1 0x01/* M3 of 2 */ + +#define CORE_M_26 0xA6 +#define CORE_N_26 0x0C +#define CORE_FSEL_26 0x07 +#define CORE_M2_26 0x01/* M3 of 2 */ + +#define CORE_M_26_ES1 0x1B2 +#define CORE_N_26_ES1 0x21 +#define CORE_FSL_26_ES1 0x03 +#define CORE_M2_26_ES1 0x01/* M3 of 2 */ + +#define CORE_M_38P4 0x19F +#define CORE_N_38P4 0x2F +#define CORE_FSEL_38P4 0x03 +#define CORE_M2_38P4 0x01/* M3 of 2 */ + +#define CORE_M_38P4_ES1 0x19F +#define CORE_N_38P4_ES1 0x2F +#define CORE_FSL_38P4_ES1 0x03 +#define CORE_M2_38P4_ES1 0x01/* M3 of 2 */ + +/* PER DPLL */ + +#define PER_M_12 0xD8 +#define PER_N_12 0x05 +#define PER_FSEL_12 0x07 +#define PER_M2_12 0x09 + +#define PER_M_13 0x1B0 +#define PER_N_13 0x0C +#define PER_FSEL_13 0x03 +#define PER_M2_13 0x09 + +#define PER_M_19P2 0xE1 +#define PER_N_19P2 0x09 +#define PER_FSEL_19P2 0x07 +#define PER_M2_19P2 0x09 + +#define PER_M_26 0xD8 +#define PER_N_26 0x0C +#define PER_FSEL_26 0x07 +#define PER_M2_26 0x09 + +#define PER_M_38P4 0xE1 +#define PER_N_38P4 0x13 +#define PER_FSEL_38P4 0x07 +#define PER_M2_38P4 0x09 + +#endif /* endif _CLOCKS_OMAP3_H_ */
include/asm-arm/arch-omap3/cpu.h new file +402 -0
402 lines not on this page · raw message
include/asm-arm/arch-omap3/mux.h new file +412 -0
412 lines not on this page · raw message
PATCH v6 2/15 OMAP3: Add OMAP3, memory and function prototype headers
Add OMAP3, memory and function prototype header files for OMAP3.
--- include/asm-arm/arch-omap3/clocks.h | 62 +++++++++ include/asm-arm/arch-omap3/mem.h | 227 +++++++++++++++++++++++++++++++++ include/asm-arm/arch-omap3/omap3.h | 218 +++++++++++++++++++++++++++++++ include/asm-arm/arch-omap3/omap_gpmc.h | 84 ++++++++++++ include/asm-arm/arch-omap3/sys_proto.h | 71 ++++++++++ 5 files changed, 662 insertions(+)
include/asm-arm/arch-omap3/mem.h new file +227 -0
@@ -0,0 +1,227 @@ +/* +* (C) Copyright 2006-2008 +* Texas Instruments, <www.ti.com> +* Richard Woodruff <[email protected]> +* +* See file CREDITS for list of people who contributed to this +* project. +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, +* MA 02111-1307 USA +*/ + +#ifndef _MEM_H_ +#define _MEM_H_ + +#define CS0 0x0 +#define CS1 0x1/* mirror CS1 regs appear offset 0x30 from CS0 */ + +#ifndef __ASSEMBLY__ +typedef enum { +STACKED =0 , +IP_DDR =1 , +COMBO_DDR =2 , +IP_SDR =3 , +}mem_t ; +#endif /* __ASSEMBLY__ */ + +#define EARLY_INIT 1 + +/* Slower full frequency range default timings for x32 operation*/ +#define SDP_SDRC_SHARING 0x00000100 +#define SDP_SDRC_MR_0_SDR 0x00000031 + +/* optimized timings good for current shipping parts */ +#define SDP_3430_SDRC_RFR_CTRL_165MHz 0x0004e201/* 7.8us/6ns - 50=0x4e2 */ + +#define DLL_OFFSET 0 +#define DLL_WRITEDDRCLKX2DIS 1 +#define DLL_ENADLL 1 +#define DLL_LOCKDLL 0 +#define DLL_DLLPHASE_72 0 +#define DLL_DLLPHASE_90 1 + +/* rkw - need to find of 90/72 degree recommendation for speed like before */ +#define SDP_SDRC_DLLAB_CTRL ((DLL_ENADLL << 3) | \ + (DLL_LOCKDLL << 2) | (DLL_DLLPHASE_90 << 1)) + +/* Infineon part of 3430SDP (165MHz optimized) 6.06ns +* ACTIMA +* TDAL = Twr/Tck + Trp/tck = 15/6 + 18/6 = 2.5 + 3 = 5.5 -> 6 +* TDPL (Twr) = 15/6 = 2.5 -> 3 +* TRRD = 12/6 = 2 +* TRCD = 18/6 = 3 +* TRP = 18/6 = 3 +* TRAS = 42/6 = 7 +* TRC = 60/6 = 10 +* TRFC = 72/6 = 12 +* ACTIMB +* TCKE = 2 +* XSR = 120/6 = 20 +*/ +#define TDAL_165 6 +#define TDPL_165 3 +#define TRRD_165 2 +#define TRCD_165 3 +#define TRP_165 3 +#define TRAS_165 7 +#define TRC_165 10 +#define TRFC_165 21 +#define V_ACTIMA_165 ((TRFC_165 << 27) | (TRC_165 << 22) | \ + (TRAS_165 << 18) | (TRP_165 << 15) | \ + (TRCD_165 << 12) | (TRRD_165 << 9) | \ + (TDPL_165 << 6) | (TDAL_165)) + +#define TWTR_165 1 +#define TCKE_165 1 +#define TXP_165 5 +#define XSR_165 23 +#define V_ACTIMB_165 (((TCKE_165 << 12) | (XSR_165 << 0)) | \ + (TXP_165 << 8) | (TWTR_165 << 16)) + +#define SDP_SDRC_ACTIM_CTRLA_0 V_ACTIMA_165 +#define SDP_SDRC_ACTIM_CTRLB_0 V_ACTIMB_165 +#define SDP_SDRC_RFR_CTRL SDP_3430_SDRC_RFR_CTRL_165MHz + +/* +* GPMC settings - +* Definitions is as per the following format +* #define <PART>_GPMC_CONFIG<x> <value> +* Where: +* PART is the part name e.g. STNOR - Intel Strata Flash +* x is GPMC config registers from 1 to 6 (there will be 6 macros) +* Value is corresponding value +* +* For every valid PRCM configuration there should be only one definition of +* the same. if values are independent of the board, this definition will be +* present in this file if values are dependent on the board, then this should +* go into corresponding mem-boardName.h file +* +* Currently valid part Names are (PART): +* STNOR - Intel Strata Flash +* SMNAND - Samsung NAND +* MPDB - H4 MPDB board +* SBNOR - Sibley NOR +* MNAND - Micron Large page x16 NAND +* ONNAND - Samsung One NAND +* +* include/configs/file.h contains the defn - for all CS we are interested +* #define OMAP34XX_GPMC_CSx PART +* #define OMAP34XX_GPMC_CSx_SIZE Size +* #define OMAP34XX_GPMC_CSx_MAP Map +* Where: +* x - CS number +* PART - Part Name as defined above +* SIZE - how big is the mapping to be +* GPMC_SIZE_128M - 0x8 +* GPMC_SIZE_64M - 0xC +* GPMC_SIZE_32M - 0xE +* GPMC_SIZE_16M - 0xF +* MAP - Map this CS to which address(GPMC address space)- Absolute address +* >>24 before being used. +*/ +#define GPMC_SIZE_128M 0x8 +#define GPMC_SIZE_64M 0xC +#define GPMC_SIZE_32M 0xE +#define GPMC_SIZE_16M 0xF + +#define SMNAND_GPMC_CONFIG1 0x00000800 +#define SMNAND_GPMC_CONFIG2 0x00141400 +#define SMNAND_GPMC_CONFIG3 0x00141400 +#define SMNAND_GPMC_CONFIG4 0x0F010F01 +#define SMNAND_GPMC_CONFIG5 0x010C1414 +#define SMNAND_GPMC_CONFIG6 0x1F0F0A80 +#define SMNAND_GPMC_CONFIG7 0x00000C44 + +#define M_NAND_GPMC_CONFIG1 0x00001800 +#define M_NAND_GPMC_CONFIG2 0x00141400 +#define M_NAND_GPMC_CONFIG3 0x00141400 +#define M_NAND_GPMC_CONFIG4 0x0F010F01 +#define M_NAND_GPMC_CONFIG5 0x010C1414 +#define M_NAND_GPMC_CONFIG6 0x1f0f0A80 +#define M_NAND_GPMC_CONFIG7 0x00000C44 + +#define STNOR_GPMC_CONFIG1 0x3 +#define STNOR_GPMC_CONFIG2 0x00151501 +#define STNOR_GPMC_CONFIG3 0x00060602 +#define STNOR_GPMC_CONFIG4 0x11091109 +#define STNOR_GPMC_CONFIG5 0x01141F1F +#define STNOR_GPMC_CONFIG6 0x000004c4 + +#define SIBNOR_GPMC_CONFIG1 0x1200 +#define SIBNOR_GPMC_CONFIG2 0x001f1f00 +#define SIBNOR_GPMC_CONFIG3 0x00080802 +#define SIBNOR_GPMC_CONFIG4 0x1C091C09 +#define SIBNOR_GPMC_CONFIG5 0x01131F1F +#define SIBNOR_GPMC_CONFIG6 0x1F0F03C2 + +#define SDPV2_MPDB_GPMC_CONFIG1 0x00611200 +#define SDPV2_MPDB_GPMC_CONFIG2 0x001F1F01 +#define SDPV2_MPDB_GPMC_CONFIG3 0x00080803 +#define SDPV2_MPDB_GPMC_CONFIG4 0x1D091D09 +#define SDPV2_MPDB_GPMC_CONFIG5 0x041D1F1F +#define SDPV2_MPDB_GPMC_CONFIG6 0x1D0904C4 + +#define MPDB_GPMC_CONFIG1 0x00011000 +#define MPDB_GPMC_CONFIG2 0x001f1f01 +#define MPDB_GPMC_CONFIG3 0x00080803 +#define MPDB_GPMC_CONFIG4 0x1c0b1c0a +#define MPDB_GPMC_CONFIG5 0x041f1F1F +#define MPDB_GPMC_CONFIG6 0x1F0F04C4 + +#define P2_GPMC_CONFIG1 0x0 +#define P2_GPMC_CONFIG2 0x0 +#define P2_GPMC_CONFIG3 0x0 +#define P2_GPMC_CONFIG4 0x0 +#define P2_GPMC_CONFIG5 0x0 +#define P2_GPMC_CONFIG6 0x0 + +#define ONENAND_GPMC_CONFIG1 0x00001200 +#define ONENAND_GPMC_CONFIG2 0x000F0F01 +#define ONENAND_GPMC_CONFIG3 0x00030301 +#define ONENAND_GPMC_CONFIG4 0x0F040F04 +#define ONENAND_GPMC_CONFIG5 0x010F1010 +#define ONENAND_GPMC_CONFIG6 0x1F060000 + +#define NET_GPMC_CONFIG1 0x00001000 +#define NET_GPMC_CONFIG2 0x001e1e01 +#define NET_GPMC_CONFIG3 0x00080300 +#define NET_GPMC_CONFIG4 0x1c091c09 +#define NET_GPMC_CONFIG5 0x04181f1f +#define NET_GPMC_CONFIG6 0x00000FCF +#define NET_GPMC_CONFIG7 0x00000f6c + +/* max number of GPMC Chip Selects */ +#define GPMC_MAX_CS 8 +/* max number of GPMC regs */ +#define GPMC_MAX_REG 7 + +#define PISMO1_NOR 1 +#define PISMO1_NAND 2 +#define PISMO2_CS0 3 +#define PISMO2_CS1 4 +#define PISMO1_ONENAND 5 +#define DBG_MPDB 6 +#define PISMO2_NAND_CS0 7 +#define PISMO2_NAND_CS1 8 + +/* make it readable for the gpmc_init */ +#define PISMO1_NOR_BASE FLASH_BASE +#define PISMO1_NAND_BASE NAND_BASE +#define PISMO2_CS0_BASE PISMO2_MAP1 +#define PISMO1_ONEN_BASE ONENAND_MAP +#define DBG_MPDB_BASE DEBUG_BASE + +#endif /* endif _MEM_H_ */
include/asm-arm/arch-omap3/clocks.h new file +62 -0
62 lines not on this page · raw message
include/asm-arm/arch-omap3/omap3.h new file +218 -0
218 lines not on this page · raw message
include/asm-arm/arch-omap3/omap_gpmc.h new file +84 -0
84 lines not on this page · raw message
include/asm-arm/arch-omap3/sys_proto.h new file +71 -0
71 lines not on this page · raw message
PATCH v6 3/15 OMAP3: Add common cpu and start code
Add common cpu and start code.
--- cpu/arm_cortexa8/Makefile | 47 +++ cpu/arm_cortexa8/config.mk | 36 ++ cpu/arm_cortexa8/cpu.c | 241 ++++++++++++++++++ cpu/arm_cortexa8/omap3/Makefile | 46 +++ cpu/arm_cortexa8/omap3/config.mk | 36 ++ cpu/arm_cortexa8/start.S | 516 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 922 insertions(+)
cpu/arm_cortexa8/config.mk new file +36 -0
@@ -0,0 +1,36 @@ +# +# (C) Copyright 2002 +# Gary Jennejohn, DENX Software Engineering, <[email protected]> +# +# See file CREDITS for list of people who contributed to this +# project. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 \ + -msoft-float + +# Make ARMv5 to allow more compilers to work, even though its v7a. +PLATFORM_CPPFLAGS += -march=armv5 +# ========================================================================= +# +# Supply options according to compiler version +# +# ========================================================================= +PLATFORM_CPPFLAGS +=$(call cc-option) +PLATFORM_CPPFLAGS +=$(call cc-option,-mno-thumb-interwork,) +PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,\ + $(call cc-option,-malignment-traps,))
cpu/arm_cortexa8/cpu.c new file +241 -0
241 lines not on this page · raw message
cpu/arm_cortexa8/Makefile new file +47 -0
48 lines not on this page · raw message
cpu/arm_cortexa8/start.S new file +516 -0
516 lines not on this page · raw message
cpu/arm_cortexa8/omap3/Makefile new file +46 -0
46 lines not on this page · raw message
cpu/arm_cortexa8/omap3/config.mk new file +36 -0
@@ -0,0 +1,36 @@ +# +# (C) Copyright 2002 +# Gary Jennejohn, DENX Software Engineering, <[email protected]> +# +# See file CREDITS for list of people who contributed to this +# project. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 \ + -msoft-float + +# Make ARMv5 to allow more compilers to work, even though its v7a. +PLATFORM_CPPFLAGS += -march=armv5 +# ========================================================================= +# +# Supply options according to compiler version +# +# ========================================================================= +PLATFORM_CPPFLAGS +=$(call cc-option) +PLATFORM_CPPFLAGS +=$(call cc-option,-mno-thumb-interwork,) +PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,\ + $(call cc-option,-malignment-traps,))
PATCH v6 4/15 OMAP3: Add common clock, memory and low level code
Add common clock, memory and low level code
--- cpu/arm_cortexa8/omap3/clock.c | 381 +++++++++++++++++++++++++++++++++ cpu/arm_cortexa8/omap3/lowlevel_init.S | 361 +++++++++++++++++++++++++++++++ cpu/arm_cortexa8/omap3/mem.c | 284 ++++++++++++++++++++++++ cpu/arm_cortexa8/omap3/syslib.c | 72 ++++++ 4 files changed, 1098 insertions(+)
cpu/arm_cortexa8/omap3/clock.c new file +381 -0
@@ -0,0 +1,381 @@ +/* +* (C) Copyright 2008 +* Texas Instruments, <www.ti.com> +* +* Author : +* Manikandan Pillai <[email protected]> +* +* Derived from Beagle Board and OMAP3 SDP code by +* Richard Woodruff <[email protected]> +* Syed Mohammed Khasim <[email protected]> +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, +* MA 02111-1307 USA +*/ + +#include <common.h> +#include <asm/io.h> +#include <asm/arch/clocks.h> +#include <asm/arch/clocks_omap3.h> +#include <asm/arch/mem.h> +#include <asm/arch/sys_proto.h> +#include <environment.h> +#include <command.h> + +/****************************************************************************** +* get_sys_clk_speed() - determine reference oscillator speed +* based on known 32kHz clock and gptimer. +*****************************************************************************/ +u32 get_osc_clk_speed (void ) +{ +u32 start, cstart, cend, cdiff, val; +prcm_t *prcm_base = (prcm_t *)PRCM_BASE ; +prm_t *prm_base = (prm_t *)PRM_BASE ; +gptimer_t *gpt1_base = (gptimer_t *)OMAP34XX_GPT1 ; +s32ktimer_t *s32k_base = (s32ktimer_t *)SYNC_32KTIMER_BASE ; + + val =readl (&prm_base->clksrc_ctrl); + +/* If SYS_CLK is being divided by 2, remove for now */ + val = (val & (~SYSCLKDIV_2 )) |SYSCLKDIV_1 ; +writel (val, &prm_base->clksrc_ctrl); + +/* enable timer2 */ + val =readl (&prcm_base->clksel_wkup) |CLKSEL_GPT1 ; + +/* select sys_clk for GPT1 */ +writel (val, &prcm_base->clksel_wkup); + +/* Enable I and F Clocks for GPT1 */ + val =readl (&prcm_base->iclken_wkup) |EN_GPT1 |EN_32KSYNC ; +writel (val, &prcm_base->iclken_wkup); + val =readl (&prcm_base->fclken_wkup) |EN_GPT1 ; +writel (val, &prcm_base->fclken_wkup); + +writel (0 , &gpt1_base->tldr);/* start counting at 0 */ +writel (GPT_EN , &gpt1_base->tclr);/* enable clock */ + +/* enable 32kHz source, determine sys_clk via gauging */ + +/* start time in 20 cycles */ + start =20 +readl (&s32k_base->s32k_cr); + +/* dead loop till start time */ +while (readl (&s32k_base->s32k_cr) < start); + +/* get start sys_clk count */ + cstart =readl (&gpt1_base->tcrr); + +/* wait for 40 cycles */ +while (readl (&s32k_base->s32k_cr) < (start +20 )) ; + cend =readl (&gpt1_base->tcrr);/* get end sys_clk count */ + cdiff = cend - cstart;/* get elapsed ticks */ + +/* based on number of ticks assign speed */ +if (cdiff >19000 ) +return S38_4M ; +else if (cdiff >15200 ) +return S26M ; +else if (cdiff >13000 ) +return S24M ; +else if (cdiff >9000 ) +return S19_2M ; +else if (cdiff >7600 ) +return S13M ; +else +return S12M ; +} + +/****************************************************************************** +* get_sys_clkin_sel() - returns the sys_clkin_sel field value based on +* input oscillator clock frequency. +*****************************************************************************/ +void get_sys_clkin_sel (u32 osc_clk,u32 *sys_clkin_sel) +{ +switch (osc_clk) { +case S38_4M : + *sys_clkin_sel =4 ; +break ; +case S26M : + *sys_clkin_sel =3 ; +break ; +case S19_2M : + *sys_clkin_sel =2 ; +break ; +case S13M : + *sys_clkin_sel =1 ; +break ; +case S12M : +default : + *sys_clkin_sel =0 ; + } +} + +/****************************************************************************** +* prcm_init() - inits clocks for PRCM as defined in clocks.h +* called from SRAM, or Flash (using temp SRAM stack). +*****************************************************************************/ +void prcm_init (void ) +{ +void (*f_lock_pll) (u32 ,u32 ,u32 ,u32 ); +int xip_safe, p0, p1, p2, p3; +u32 osc_clk =0 , sys_clkin_sel; +u32 clk_index, sil_index; +prm_t *prm_base = (prm_t *)PRM_BASE ; +prcm_t *prcm_base = (prcm_t *)PRCM_BASE ; +dpll_param *dpll_param_p; + + f_lock_pll = (void *) ((u32 ) &_end_vect - (u32 ) &_start + +SRAM_VECT_CODE ); + + xip_safe =is_running_in_sram (); + +/* +* Gauge the input clock speed and find out the sys_clkin_sel +* value corresponding to the input clock. +*/ + osc_clk =get_osc_clk_speed (); +get_sys_clkin_sel (osc_clk, &sys_clkin_sel); + +/* set input crystal speed */ +sr32 (&prm_base->clksel,0 ,3 , sys_clkin_sel); + +/* If the input clock is greater than 19.2M always divide/2 */ +if (sys_clkin_sel >2 ) { +/* input clock divider */ +sr32 (&prm_base->clksrc_ctrl,6 ,2 ,2 ); + clk_index = sys_clkin_sel /2 ; + }else { +/* input clock divider */ +sr32 (&prm_base->clksrc_ctrl,6 ,2 ,1 ); + clk_index = sys_clkin_sel; + } + +/* +* The DPLL tables are defined according to sysclk value and +* silicon revision. The clk_index value will be used to get +* the values for that input sysclk from the DPLL param table +* and sil_index will get the values for that SysClk for the +* appropriate silicon rev. +*/ + sil_index =get_cpu_rev () -1 ; + +/* Unlock MPU DPLL (slows things down, and needed later) */ +sr32 (&prcm_base->clken_pll_mpu,0 ,3 ,PLL_LOW_POWER_BYPASS ); +wait_on_value (ST_MPU_CLK ,0 , &prcm_base->idlest_pll_mpu,LDELAY ); + +/* Getting the base address of Core DPLL param table */ + dpll_param_p = (dpll_param *)get_core_dpll_param (); + +/* Moving it to the right sysclk and ES rev base */ + dpll_param_p = dpll_param_p +3 * clk_index + sil_index; +if (xip_safe) { +/* +* CORE DPLL +* sr32(CM_CLKSEL2_EMU) set override to work when asleep +*/ +sr32 (&prcm_base->clken_pll,0 ,3 ,PLL_FAST_RELOCK_BYPASS ); +wait_on_value (ST_CORE_CLK ,0 , &prcm_base->idlest_ckgen, +LDELAY ); + +/* +* For OMAP3 ES1.0 Errata 1.50, default value directly doesn't +* work. write another value and then default value. +*/ + +/* m3x2 */ +sr32 (&prcm_base->clksel1_emu,16 ,5 ,CORE_M3X2 +1 ); +/* m3x2 */ +sr32 (&prcm_base->clksel1_emu,16 ,5 ,CORE_M3X2 ); +/* Set M2 */ +sr32 (&prcm_base->clksel1_pll,27 ,2 , dpll_param_p->m2); +/* Set M */ +sr32 (&prcm_base->clksel1_pll,16 ,11 , dpll_param_p->m); +/* Set N */ +sr32 (&prcm_base->clksel1_pll,8 ,7 , dpll_param_p->n); +/* 96M Src */ +sr32 (&prcm_base->clksel1_pll,6 ,1 ,0 ); +/* ssi */ +sr32 (&prcm_base->clksel_core,8 ,4 ,CORE_SSI_DIV ); +/* fsusb */ +sr32 (&prcm_base->clksel_core,4 ,2 ,CORE_FUSB_DIV ); +/* l4 */ +sr32 (&prcm_base->clksel_core,2 ,2 ,CORE_L4_DIV ); +/* l3 */ +sr32 (&prcm_base->clksel_core,0 ,2 ,CORE_L3_DIV ); +/* gfx */ +sr32 (&prcm_base->clksel_gfx,0 ,3 ,GFX_DIV ); +/* reset mgr */ +sr32 (&prcm_base->clksel_wkup,1 ,2 ,WKUP_RSM ); +/* FREQSEL */ +sr32 (&prcm_base->clken_pll,4 ,4 , dpll_param_p->fsel); +/* lock mode */ +sr32 (&prcm_base->clken_pll,0 ,3 ,PLL_LOCK ); + +wait_on_value (ST_CORE_CLK ,1 , &prcm_base->idlest_ckgen, +LDELAY ); + }else if (is_running_in_flash ()) { +/* +* if running from flash, jump to small relocated code +* area in SRAM. +*/ + p0 =readl (&prcm_base->clken_pll); +sr32 (&p0,0 ,3 ,PLL_FAST_RELOCK_BYPASS ); +sr32 (&p0,4 ,4 , dpll_param_p->fsel);/* FREQSEL */ + + p1 =readl (&prcm_base->clksel1_pll); +sr32 (&p1,27 ,2 , dpll_param_p->m2);/* Set M2 */ +sr32 (&p1,16 ,11 , dpll_param_p->m);/* Set M */ +sr32 (&p1,8 ,7 , dpll_param_p->n);/* Set N */ +sr32 (&p1,6 ,1 ,0 );/* set source for 96M */ + + p2 =readl (&prcm_base->clksel_core); +sr32 (&p2,8 ,4 ,CORE_SSI_DIV );/* ssi */ +sr32 (&p2,4 ,2 ,CORE_FUSB_DIV );/* fsusb */ +sr32 (&p2,2 ,2 ,CORE_L4_DIV );/* l4 */ +sr32 (&p2,0 ,2 ,CORE_L3_DIV );/* l3 */ + + p3 = (u32)&prcm_base->idlest_ckgen; + + (*f_lock_pll) (p0, p1, p2, p3); + } + +/* PER DPLL */ +sr32 (&prcm_base->clken_pll,16 ,3 ,PLL_STOP ); +wait_on_value (ST_PERIPH_CLK ,0 , &prcm_base->idlest_ckgen,LDELAY ); + +/* Getting the base address to PER DPLL param table */ + +/* Set N */ + dpll_param_p = (dpll_param *)get_per_dpll_param (); + +/* Moving it to the right sysclk base */ + dpll_param_p = dpll_param_p + clk_index; + +/* +* Errata 1.50 Workaround for OMAP3 ES1.0 only +* If using default divisors, write default divisor + 1 +* and then the actual divisor value +*/ +sr32 (&prcm_base->clksel1_emu,24 ,5 ,PER_M6X2 +1 );/* set M6 */ +sr32 (&prcm_base->clksel1_emu,24 ,5 ,PER_M6X2 );/* set M6 */ +sr32 (&prcm_base->clksel_cam,0 ,5 ,PER_M5X2 +1 );/* set M5 */ +sr32 (&prcm_base->clksel_cam,0 ,5 ,PER_M5X2 );/* set M5 */ +sr32 (&prcm_base->clksel_dss,0 ,5 ,PER_M4X2 +1 );/* set M4 */ +sr32 (&prcm_base->clksel_dss,0 ,5 ,PER_M4X2 );/* set M4 */ +sr32 (&prcm_base->clksel_dss,8 ,5 ,PER_M3X2 +1 );/* set M3 */ +sr32 (&prcm_base->clksel_dss,8 ,5 ,PER_M3X2 );/* set M3 */ +sr32 (&prcm_base->clksel3_pll,0 ,5 , dpll_param_p->m2 +1 );/* set M2 */ +sr32 (&prcm_base->clksel3_pll,0 ,5 , dpll_param_p->m2);/* set M2 */ +/* Workaround end */ + +sr32 (&prcm_base->clksel2_pll,8 ,11 , dpll_param_p->m);/* set m */ +sr32 (&prcm_base->clksel2_pll,0 ,7 , dpll_param_p->n);/* set n */ +sr32 (&prcm_base->clken_pll,20 ,4 , dpll_param_p->fsel);/* FREQSEL */ +sr32 (&prcm_base->clken_pll,16 ,3 ,PLL_LOCK );/* lock mode */ +wait_on_value (ST_PERIPH_CLK ,2 , &prcm_base->idlest_ckgen,LDELAY ); + +/* Getting the base address to MPU DPLL param table */ + dpll_param_p = (dpll_param *)get_mpu_dpll_param (); + +/* Moving it to the right sysclk and ES rev base */ + dpll_param_p = dpll_param_p +3 * clk_index + sil_index; + +/* MPU DPLL (unlocked already) */ + +/* Set M2 */ +sr32 (&prcm_base->clksel2_pll_mpu,0 ,5 , dpll_param_p->m2); +/* Set M */ +sr32 (&prcm_base->clksel1_pll_mpu,8 ,11 , dpll_param_p->m); +/* Set N */ +sr32 (&prcm_base->clksel1_pll_mpu,0 ,7 , dpll_param_p->n); +/* FREQSEL */ +sr32 (&prcm_base->clken_pll_mpu,4 ,4 , dpll_param_p->fsel); +/* lock mode */ +sr32 (&prcm_base->clken_pll_mpu,0 ,3 ,PLL_LOCK ); +wait_on_value (ST_MPU_CLK ,1 , &prcm_base->idlest_pll_mpu,LDELAY ); + +/* Getting the base address to IVA DPLL param table */ + dpll_param_p = (dpll_param *)get_iva_dpll_param (); + +/* Moving it to the right sysclk and ES rev base */ + dpll_param_p = dpll_param_p +3 * clk_index + sil_index; + +/* IVA DPLL (set to 12*20=240MHz) */ +sr32 (&prcm_base->clken_pll_iva2,0 ,3 ,PLL_STOP ); +wait_on_value (ST_IVA2_CLK ,0 , &prcm_base->idlest_pll_iva2,LDELAY ); +/* set M2 */ +sr32 (&prcm_base->clksel2_pll_iva2,0 ,5 , dpll_param_p->m2); +/* set M */ +sr32 (&prcm_base->clksel1_pll_iva2,8 ,11 , dpll_param_p->m); +/* set N */ +sr32 (&prcm_base->clksel1_pll_iva2,0 ,7 , dpll_param_p->n); +/* FREQSEL */ +sr32 (&prcm_base->clken_pll_iva2,4 ,4 , dpll_param_p->fsel); +/* lock mode */ +sr32 (&prcm_base->clken_pll_iva2,0 ,3 ,PLL_LOCK ); +wait_on_value (ST_IVA2_CLK ,1 , &prcm_base->idlest_pll_iva2,LDELAY ); + +/* Set up GPTimers to sys_clk source only */ +sr32 (&prcm_base->clksel_per,0 ,8 ,0xff ); +sr32 (&prcm_base->clksel_wkup,0 ,1 ,1 ); + +sdelay (5000 ); +} + +/****************************************************************************** +* peripheral_enable() - Enable the clks & power for perifs (GPT2, UART1,...) +*****************************************************************************/ +void per_clocks_enable (void ) +{ +prcm_t *prcm_base = (prcm_t *)PRCM_BASE ; + +/* Enable GP2 timer. */ +sr32 (&prcm_base->clksel_per,0 ,1 ,0x1 );/* GPT2 = sys clk */ +sr32 (&prcm_base->iclken_per,3 ,1 ,0x1 );/* ICKen GPT2 */ +sr32 (&prcm_base->fclken_per,3 ,1 ,0x1 );/* FCKen GPT2 */ + +#ifdef CONFIG_SYS_NS16550 +/* Enable UART1 clocks */ +sr32 (&prcm_base->fclken1_core,13 ,1 ,0x1 ); +sr32 (&prcm_base->iclken1_core,13 ,1 ,0x1 ); + +/* UART 3 Clocks */ +sr32 (&prcm_base->fclken_per,11 ,1 ,0x1 ); +sr32 (&prcm_base->iclken_per,11 ,1 ,0x1 ); +#endif +#ifdef CONFIG_DRIVER_OMAP34XX_I2C +/* Turn on all 3 I2C clocks */ +sr32 (&prcm_base->fclken1_core,15 ,3 ,0x7 ); +sr32 (&prcm_base->iclken1_core,15 ,3 ,0x7 );/* I2C1,2,3 = on */ +#endif +/* Enable the ICLK for 32K Sync Timer as its used in udelay */ +sr32 (&prcm_base->iclken_wkup,2 ,1 ,0x1 ); + +sr32 (&prcm_base->fclken_iva2,0 ,32 ,FCK_IVA2_ON ); +sr32 (&prcm_base->fclken1_core,0 ,32 ,FCK_CORE1_ON ); +sr32 (&prcm_base->iclken1_core,0 ,32 ,ICK_CORE1_ON ); +sr32 (&prcm_base->iclken2_core,0 ,32 ,ICK_CORE2_ON ); +sr32 (&prcm_base->fclken_wkup,0 ,32 ,FCK_WKUP_ON ); +sr32 (&prcm_base->iclken_wkup,0 ,32 ,ICK_WKUP_ON ); +sr32 (&prcm_base->fclken_dss,0 ,32 ,FCK_DSS_ON ); +sr32 (&prcm_base->iclken_dss,0 ,32 ,ICK_DSS_ON ); +sr32 (&prcm_base->fclken_cam,0 ,32 ,FCK_CAM_ON ); +sr32 (&prcm_base->iclken_cam,0 ,32 ,ICK_CAM_ON ); +sr32 (&prcm_base->fclken_per,0 ,32 ,FCK_PER_ON ); +sr32 (&prcm_base->iclken_per,0 ,32 ,ICK_PER_ON ); + +sdelay (1000 ); +}
cpu/arm_cortexa8/omap3/mem.c new file +284 -0
284 lines not on this page · raw message
cpu/arm_cortexa8/omap3/syslib.c new file +72 -0
72 lines not on this page · raw message
cpu/arm_cortexa8/omap3/lowlevel_init.S new file +361 -0
361 lines not on this page · raw message
PATCH v6 5/15 OMAP3: Add common board, interrupt and system info
Add common board, interrupt and system info code.
--- cpu/arm_cortexa8/omap3/board.c | 344 ++++++++++++++++++++++++++++++++++++ cpu/arm_cortexa8/omap3/interrupts.c | 297 +++++++++++++++++++++++++++++++ cpu/arm_cortexa8/omap3/sys_info.c | 254 ++++++++++++++++++++++++++ examples/Makefile | 4 4 files changed, 899 insertions(+)
cpu/arm_cortexa8/omap3/sys_info.c new file +254 -0
@@ -0,0 +1,254 @@ +/* +* (C) Copyright 2008 +* Texas Instruments, <www.ti.com> +* +* Author : +* Manikandan Pillai <[email protected]> +* +* Derived from Beagle Board and 3430 SDP code by +* Richard Woodruff <[email protected]> +* Syed Mohammed Khasim <[email protected]> +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR /PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, +* MA 02111-1307 USA +*/ + +#include <common.h> +#include <asm/io.h> +#include <asm/arch/mem.h> /* get mem tables */ +#include <asm/arch/sys_proto.h> +#include <i2c.h> + +extern omap3_sysinfo sysinfo; +static gpmc_csx_t *gpmc_cs_base = (gpmc_csx_t *)GPMC_CONFIG_CS0_BASE ; +static sdrc_t *sdrc_base = (sdrc_t *)OMAP34XX_SDRC_BASE ; +static ctrl_t *ctrl_base = (ctrl_t *)OMAP34XX_CTRL_BASE ; + +/****************************************** +* get_cpu_rev(void) - extract version info +******************************************/ +u32 get_cpu_rev (void ) +{ +u32 cpuid =0 ; + +/* +* On ES1.0 the IDCODE register is not exposed on L4 +* so using CPU ID to differentiate +* between ES2.0 and ES1.0. +*/ + __asm__ __volatile__("mrc p15, 0, %0, c0, c0, 0" :"=r" (cpuid)); +if ((cpuid &0xf ) ==0x0 ) +return CPU_3430_ES1 ; +else +return CPU_3430_ES2 ; + +} + +/**************************************************** +* is_mem_sdr() - return 1 if mem type in use is SDR +****************************************************/ +u32 is_mem_sdr (void ) +{ +if (readl (&sdrc_base->cs[CS0 ].mr) ==SDP_SDRC_MR_0_SDR ) +return 1 ; +return 0 ; +} + +/*********************************************************************** +* get_cs0_size() - get size of chip select 0/1 +************************************************************************/ +u32 get_sdr_cs_size (u32 cs) +{ +u32 size; + +/* get ram size field */ + size =readl (&sdrc_base->cs[cs].mcfg) >>8 ; + size &=0x3FF ;/* remove unwanted bits */ + size *=SZ_2M ;/* find size in MB */ +return size; +} + +/*********************************************************************** +* get_sdr_cs_offset() - get offset of cs from cs0 start +************************************************************************/ +u32 get_sdr_cs_offset (u32 cs) +{ +u32 offset; + +if (!cs) +return 0 ; + + offset =readl (&sdrc_base->cs_cfg); + offset = (offset &15 ) <<27 | (offset &0x30 ) >>17 ; + +return offset; +} + +/*********************************************************************** +* get_board_type() - get board type based on current production stats. +* - NOTE-1-: 2 I2C EEPROMs will someday be populated with proper info. +* when they are available we can get info from there. This should +* be correct of all known boards up until today. +* - NOTE-2- EEPROMs are populated but they are updated very slowly. To +* avoid waiting on them we will use ES version of the chip to get info. +* A later version of the FPGA migth solve their speed issue. +************************************************************************/ +u32 get_board_type (void ) +{ +if (get_cpu_rev () ==CPU_3430_ES2 ) +return sysinfo.board_type_v2; +else +return sysinfo.board_type_v1; +} + +/*************************************************************************** +* get_gpmc0_base() - Return current address hardware will be +* fetching from. The below effectively gives what is correct, its a bit +* mis-leading compared to the TRM. For the most general case the mask +* needs to be also taken into account this does work in practice. +* - for u-boot we currently map: +* -- 0 to nothing, +* -- 4 to flash +* -- 8 to enent +* -- c to wifi +****************************************************************************/ +u32 get_gpmc0_base (void ) +{ +u32 b; + + b =readl (&gpmc_cs_base->config7); + b &=0x1F ;/* keep base [5:0] */ + b = b <<24 ;/* ret 0x0b000000 */ +return b; +} + +/******************************************************************* +* get_gpmc0_width() - See if bus is in x8 or x16 (mainly for nand) +*******************************************************************/ +u32 get_gpmc0_width (void ) +{ +return WIDTH_16BIT ; +} + +/************************************************************************* +* get_board_rev() - setup to pass kernel board revision information +* returns:(bit[0-3] sub version, higher bit[7-4] is higher version) +*************************************************************************/ +u32 get_board_rev (void ) +{ +return 0x20 ; +} + +/********************************************************************* +* display_board_info() - print banner with board info. +*********************************************************************/ +void display_board_info (u32 btype) +{ +char *mem_s, *sec_s; + +if (is_mem_sdr ()) + mem_s ="mSDR" ; +else + mem_s ="LPDDR" ; + +switch (get_device_type ()) { +case TST_DEVICE : + sec_s ="TST" ; +break ; +case EMU_DEVICE : + sec_s ="EMU" ; +break ; +case HS_DEVICE : + sec_s ="HS" ; +break ; +case GP_DEVICE : + sec_s ="GP" ; +break ; +default : + sec_s ="?" ; + } + +printf ("OMAP%s-%s rev %d, CPU-OPP2 L3-165MHz\n" , sysinfo.cpu_string, + sec_s,get_cpu_rev ()); +printf ("%s + %s/%s\n" , sysinfo.board_string, + mem_s, sysinfo.nand_string); + +} + +/******************************************************** +* get_base(); get upper addr of current execution +*******************************************************/ +u32 get_base (void ) +{ +u32 val; + + __asm__ __volatile__("mov %0, pc \n" :"=r" (val)::"memory" ); + val &=0xF0000000 ; + val >>=28 ; +return val; +} + +/******************************************************** +* is_running_in_flash() - tell if currently running in +* FLASH. +*******************************************************/ +u32 is_running_in_flash (void ) +{ +if (get_base () <4 ) +return 1 ;/* in FLASH */ + +return 0 ;/* running in SRAM or SDRAM */ +} + +/******************************************************** +* is_running_in_sram() - tell if currently running in +* SRAM. +*******************************************************/ +u32 is_running_in_sram (void ) +{ +if (get_base () ==4 ) +return 1 ;/* in SRAM */ + +return 0 ;/* running in FLASH or SDRAM */ +} + +/******************************************************** +* is_running_in_sdram() - tell if currently running in +* SDRAM. +*******************************************************/ +u32 is_running_in_sdram (void ) +{ +if (get_base () >4 ) +return 1 ;/* in SDRAM */ + +return 0 ;/* running in SRAM or FLASH */ +} + +/*************************************************************** +* get_boot_type() - Is this an XIP type device or a stream one +* bits 4-0 specify type. Bit 5 says mem/perif +***************************************************************/ +u32 get_boot_type (void ) +{ +return (readl (&ctrl_base->status) &SYSBOOT_MASK ); +} + +/************************************************************* +* get_device_type(): tell if GP/HS/EMU/TST +*************************************************************/ +u32 get_device_type (void ) +{ +return ((readl (&ctrl_base->status) & (DEVICE_MASK )) >>8 ); +}
cpu/arm_cortexa8/omap3/interrupts.c new file +297 -0
297 lines not on this page · raw message
examples/Makefile +4 -0
@@ -33,9 +33,13 @@ ifeq ($(ARCH),arm) ifeq ($(BOARD),omap2420h4) LOAD_ADDR = 0x80300000 else +ifeq ($(CPU),omap3) +LOAD_ADDR = 0x80300000 +else LOAD_ADDR = 0xc100000 endif endif +endif ifeq ($(ARCH),mips) LOAD_ADDR = 0x80200000 -T mips.lds
cpu/arm_cortexa8/omap3/board.c new file +344 -0
344 lines not on this page · raw message
PATCH v6 6/15 OMAP3: Add NAND support
Add NAND support.
--- drivers/mtd/nand/Makefile | 1 drivers/mtd/nand/omap_gpmc.c | 353 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 354 insertions(+)
drivers/mtd/nand/Makefile +1 -0
@@ -38,6 +38,7 @@ endif COBJS-$(CONFIG_NAND_FSL_ELBC) += fsl_elbc_nand.o COBJS-$(CONFIG_NAND_FSL_UPM) += fsl_upm.o COBJS-$(CONFIG_NAND_S3C64XX) += s3c64xx.o +COBJS-$(CONFIG_NAND_OMAP_GPMC) += omap_gpmc.o endif COBJS := $(COBJS-y)
drivers/mtd/nand/omap_gpmc.c new file +353 -0
353 lines not on this page · raw message
PATCH v6 7/15 OMAP3: Add MMC support
Add MMC support.
--- drivers/mmc/Makefile | 1 drivers/mmc/omap3_mmc.c | 558 ++++++++++++++++++++++++++++++ include/asm-arm/arch-omap3/mmc.h | 235 ++++++++++++ include/asm-arm/arch-omap3/mmc_host_def.h | 166 ++++++++ 4 files changed, 960 insertions(+)
include/asm-arm/arch-omap3/mmc.h new file +235 -0
@@ -0,0 +1,235 @@ +/* +* (C) Copyright 2008 +* Texas Instruments, <www.ti.com> +* Syed Mohammed Khasim <[email protected]> +* +* See file CREDITS for list of people who contributed to this +* project. +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation's version 2 of +* the License. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, +* MA 02111-1307 USA +*/ + +#ifndef MMC_H +#define MMC_H + +#include "mmc_host_def.h" + +/* Responses */ +#define RSP_TYPE_NONE (RSP_TYPE_NORSP | CCCE_NOCHECK | CICE_NOCHECK) +#define RSP_TYPE_R1 (RSP_TYPE_LGHT48 | CCCE_CHECK | CICE_CHECK) +#define RSP_TYPE_R1B (RSP_TYPE_LGHT48B | CCCE_CHECK | CICE_CHECK) +#define RSP_TYPE_R2 (RSP_TYPE_LGHT136 | CCCE_CHECK | CICE_NOCHECK) +#define RSP_TYPE_R3 (RSP_TYPE_LGHT48 | CCCE_NOCHECK | CICE_NOCHECK) +#define RSP_TYPE_R4 (RSP_TYPE_LGHT48 | CCCE_NOCHECK | CICE_NOCHECK) +#define RSP_TYPE_R5 (RSP_TYPE_LGHT48 | CCCE_CHECK | CICE_CHECK) +#define RSP_TYPE_R6 (RSP_TYPE_LGHT48 | CCCE_CHECK | CICE_CHECK) +#define RSP_TYPE_R7 (RSP_TYPE_LGHT48 | CCCE_CHECK | CICE_CHECK) + +/* All supported commands */ +#define MMC_CMD0 (INDEX(0) | RSP_TYPE_NONE | DP_NO_DATA | DDIR_WRITE) +#define MMC_CMD1 (INDEX(1) | RSP_TYPE_R3 | DP_NO_DATA | DDIR_WRITE) +#define MMC_CMD2 (INDEX(2) | RSP_TYPE_R2 | DP_NO_DATA | DDIR_WRITE) +#define MMC_CMD3 (INDEX(3) | RSP_TYPE_R1 | DP_NO_DATA | DDIR_WRITE) +#define MMC_SDCMD3 (INDEX(3) | RSP_TYPE_R6 | DP_NO_DATA | DDIR_WRITE) +#define MMC_CMD4 (INDEX(4) | RSP_TYPE_NONE | DP_NO_DATA | DDIR_WRITE) +#define MMC_CMD6 (INDEX(6) | RSP_TYPE_R1B | DP_NO_DATA | DDIR_WRITE) +#define MMC_CMD7_SELECT (INDEX(7) | RSP_TYPE_R1B | DP_NO_DATA | DDIR_WRITE) +#define MMC_CMD7_DESELECT (INDEX(7)| RSP_TYPE_NONE | DP_NO_DATA | DDIR_WRITE) +#define MMC_CMD8 (INDEX(8) | RSP_TYPE_R1 | DP_DATA | DDIR_READ) +#define MMC_SDCMD8 (INDEX(8) | RSP_TYPE_R7 | DP_NO_DATA | DDIR_WRITE) +#define MMC_CMD9 (INDEX(9) | RSP_TYPE_R2 | DP_NO_DATA | DDIR_WRITE) +#define MMC_CMD12 (INDEX(12) | RSP_TYPE_R1B | DP_NO_DATA | DDIR_WRITE) +#define MMC_CMD13 (INDEX(13) | RSP_TYPE_R1 | DP_NO_DATA | DDIR_WRITE) +#define MMC_CMD15 (INDEX(15) | RSP_TYPE_NONE | DP_NO_DATA | DDIR_WRITE) +#define MMC_CMD16 (INDEX(16) | RSP_TYPE_R1 | DP_NO_DATA | DDIR_WRITE) +#define MMC_CMD17 (INDEX(17) | RSP_TYPE_R1 | DP_DATA | DDIR_READ) +#define MMC_CMD24 (INDEX(24) | RSP_TYPE_R1 | DP_DATA | DDIR_WRITE) +#define MMC_ACMD6 (INDEX(6) | RSP_TYPE_R1 | DP_NO_DATA | DDIR_WRITE) +#define MMC_ACMD41 (INDEX(41) | RSP_TYPE_R3 | DP_NO_DATA | DDIR_WRITE) +#define MMC_ACMD51 (INDEX(51) | RSP_TYPE_R1 | DP_DATA | DDIR_READ) +#define MMC_CMD55 (INDEX(55) | RSP_TYPE_R1 | DP_NO_DATA | DDIR_WRITE) + +#define MMC_AC_CMD_RCA_MASK (unsigned int)(0xFFFF << 16) +#define MMC_BC_CMD_DSR_MASK (unsigned int)(0xFFFF << 16) +#define MMC_DSR_DEFAULT 0x0404 +#define SD_CMD8_CHECK_PATTERN 0xAA +#define SD_CMD8_2_7_3_6_V_RANGE (0x01 << 8) + +/* Clock Configurations and Macros */ + +#define MMC_CLOCK_REFERENCE 96 +#define MMC_RELATIVE_CARD_ADDRESS 0x1234 +#define MMC_INIT_SEQ_CLK (MMC_CLOCK_REFERENCE * 1000 / 80) +#define MMC_400kHz_CLK (MMC_CLOCK_REFERENCE * 1000 / 400) +#define CLKDR (r, f, u) ((((r)*100) / ((f)*(u))) + 1) +#define CLKD (f, u) (CLKDR(MMC_CLOCK_REFERENCE, f, u)) + +#define MMC_OCR_REG_ACCESS_MODE_MASK (0x3 << 29) +#define MMC_OCR_REG_ACCESS_MODE_BYTE (0x0 << 29) +#define MMC_OCR_REG_ACCESS_MODE_SECTOR (0x2 << 29) + +#define MMC_OCR_REG_HOST_CAPACITY_SUPPORT_MASK (0x1 << 30) +#define MMC_OCR_REG_HOST_CAPACITY_SUPPORT_BYTE (0x0 << 30) +#define MMC_OCR_REG_HOST_CAPACITY_SUPPORT_SECTOR (0x1 << 30) + +#define MMC_SD2_CSD_C_SIZE_LSB_MASK 0xFFFF +#define MMC_SD2_CSD_C_SIZE_MSB_MASK 0x003F +#define MMC_SD2_CSD_C_SIZE_MSB_OFFSET 16 +#define MMC_CSD_C_SIZE_LSB_MASK 0x0003 +#define MMC_CSD_C_SIZE_MSB_MASK 0x03FF +#define MMC_CSD_C_SIZE_MSB_OFFSET 2 + +#define MMC_CSD_TRAN_SPEED_UNIT_MASK (0x07 << 0) +#define MMC_CSD_TRAN_SPEED_FACTOR_MASK (0x0F << 3) +#define MMC_CSD_TRAN_SPEED_UNIT_100MHZ (0x3 << 0) +#define MMC_CSD_TRAN_SPEED_FACTOR_1_0 (0x01 << 3) +#define MMC_CSD_TRAN_SPEED_FACTOR_8_0 (0x0F << 3) + +typedef struct { +unsigned not_used:1 ; +unsigned crc:7 ; +unsigned ecc:2 ; +unsigned file_format:2 ; +unsigned tmp_write_protect:1 ; +unsigned perm_write_protect:1 ; +unsigned copy:1 ; +unsigned file_format_grp:1 ; +unsigned content_prot_app:1 ; +unsigned reserved_1:4 ; +unsigned write_bl_partial:1 ; +unsigned write_bl_len:4 ; +unsigned r2w_factor:3 ; +unsigned default_ecc:2 ; +unsigned wp_grp_enable:1 ; +unsigned wp_grp_size:5 ; +unsigned erase_grp_mult:5 ; +unsigned erase_grp_size:5 ; +unsigned c_size_mult:3 ; +unsigned vdd_w_curr_max:3 ; +unsigned vdd_w_curr_min:3 ; +unsigned vdd_r_curr_max:3 ; +unsigned vdd_r_curr_min:3 ; +unsigned c_size_lsb:2 ; +unsigned c_size_msb:10 ; +unsigned reserved_2:2 ; +unsigned dsr_imp:1 ; +unsigned read_blk_misalign:1 ; +unsigned write_blk_misalign:1 ; +unsigned read_bl_partial:1 ; +unsigned read_bl_len:4 ; +unsigned ccc:12 ; +unsigned tran_speed:8 ; +unsigned nsac:8 ; +unsigned taac:8 ; +unsigned reserved_3:2 ; +unsigned spec_vers:4 ; +unsigned csd_structure:2 ; +}mmc_csd_reg_t ; + +/* csd for sd2.0 */ +typedef struct { +unsigned not_used:1 ; +unsigned crc:7 ; +unsigned reserved_1:2 ; +unsigned file_format:2 ; +unsigned tmp_write_protect:1 ; +unsigned perm_write_protect:1 ; +unsigned copy:1 ; +unsigned file_format_grp:1 ; +unsigned reserved_2:5 ; +unsigned write_bl_partial:1 ; +unsigned write_bl_len:4 ; +unsigned r2w_factor:3 ; +unsigned reserved_3:2 ; +unsigned wp_grp_enable:1 ; +unsigned wp_grp_size:7 ; +unsigned sector_size:7 ; +unsigned erase_blk_len:1 ; +unsigned reserved_4:1 ; +unsigned c_size_lsb:16 ; +unsigned c_size_msb:6 ; +unsigned reserved_5:6 ; +unsigned dsr_imp:1 ; +unsigned read_blk_misalign:1 ; +unsigned write_blk_misalign:1 ; +unsigned read_bl_partial:1 ; +unsigned read_bl_len:4 ; +unsigned ccc:12 ; +unsigned tran_speed:8 ; +unsigned nsac:8 ; +unsigned taac:8 ; +unsigned reserved_6:6 ; +unsigned csd_structure:2 ; +}mmc_sd2_csd_reg_t ; + +/* extended csd - 512 bytes long */ +typedef struct { +unsigned char reserved_1[181 ]; +unsigned char erasedmemorycontent; +unsigned char reserved_2; +unsigned char buswidthmode; +unsigned char reserved_3; +unsigned char highspeedinterfacetiming; +unsigned char reserved_4; +unsigned char powerclass; +unsigned char reserved_5; +unsigned char commandsetrevision; +unsigned char reserved_6; +unsigned char commandset; +unsigned char extendedcsdrevision; +unsigned char reserved_7; +unsigned char csdstructureversion; +unsigned char reserved_8; +unsigned char cardtype; +unsigned char reserved_9[3 ]; +unsigned char powerclass_52mhz_1_95v; +unsigned char powerclass_26mhz_1_95v; +unsigned char powerclass_52mhz_3_6v; +unsigned char powerclass_26mhz_3_6v; +unsigned char reserved_10; +unsigned char minreadperf_4b_26mhz; +unsigned char minwriteperf_4b_26mhz; +unsigned char minreadperf_8b_26mhz_4b_52mhz; +unsigned char minwriteperf_8b_26mhz_4b_52mhz; +unsigned char minreadperf_8b_52mhz; +unsigned char minwriteperf_8b_52mhz; +unsigned char reserved_11; +unsigned int sectorcount; +unsigned char reserved_12[288 ]; +unsigned char supportedcommandsets; +unsigned char reserved_13[7 ]; +}mmc_extended_csd_reg_t ; + +/* mmc sd responce */ +typedef struct { +unsigned int ocr; +}mmc_resp_r3 ; + +typedef struct { +unsigned short cardstatus; +unsigned short newpublishedrca; +}mmc_resp_r6 ; + +extern mmc_card_data mmc_dev; + +unsigned char mmc_lowlevel_init (void ); +unsigned char mmc_send_command (unsigned int cmd,unsigned int arg, +unsigned int *response); +unsigned char mmc_setup_clock (unsigned int iclk,unsigned short clkd); +unsigned char mmc_set_opendrain (unsigned char state); +unsigned char mmc_read_data (unsigned int *output_buf); + +#endif /* MMC_H */
include/asm-arm/arch-omap3/mmc_host_def.h new file +166 -0
166 lines not on this page · raw message
drivers/mmc/Makefile +1 -0
@@ -26,6 +26,7 @@ include $(TOPDIR)/config.mk LIB := $(obj)libmmc.a COBJS-$(CONFIG_ATMEL_MCI) += atmel_mci.o +COBJS-$(CONFIG_OMAP3_MMC) += omap3_mmc.o COBJS := $(COBJS-y) SRCS := $(COBJS:.o=.c)
drivers/mmc/omap3_mmc.c new file +558 -0
558 lines not on this page · raw message
PATCH v6 8/15 OMAP3: Add I2C support
Add I2C support.
--- drivers/i2c/Makefile | 1 drivers/i2c/omap24xx_i2c.c | 23 +++++++ include/asm-arm/arch-omap3/i2c.h | 128 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 152 insertions(+)
drivers/i2c/Makefile +1 -0
@@ -29,6 +29,7 @@ COBJS-$(CONFIG_FSL_I2C) += fsl_i2c.o COBJS-$(CONFIG_I2C_MXC) += mxc_i2c.o COBJS-$(CONFIG_DRIVER_OMAP1510_I2C) += omap1510_i2c.o COBJS-$(CONFIG_DRIVER_OMAP24XX_I2C) += omap24xx_i2c.o +COBJS-$(CONFIG_DRIVER_OMAP34XX_I2C) += omap24xx_i2c.o COBJS-$(CONFIG_SOFT_I2C) += soft_i2c.o COBJS-$(CONFIG_TSI108_I2C) += tsi108_i2c.o
drivers/i2c/omap24xx_i2c.c +23 -0
@@ -109,7 +109,11 @@ static int i2c_read_byte (u8 devaddr, u8 status =wait_for_pin ();if (status &I2C_STAT_RRDY ) { +#if defined(CONFIG_OMAP243X ) || defined(CONFIG_OMAP34XX ) + *value =readb (I2C_DATA ); +#else *value =readw (I2C_DATA ); +#endif udelay (20000 ); }else { i2c_error =1 ;
@@ -150,8 +154,23 @@ static int i2c_write_byte (u8 devaddr, u status =wait_for_pin ();if (status &I2C_STAT_XRDY ) { +#if defined(CONFIG_OMAP243X ) || defined(CONFIG_OMAP34XX ) +/* send out 1 byte */ +writeb (regoffset,I2C_DATA ); +writew (I2C_STAT_XRDY ,I2C_STAT ); + + status =wait_for_pin (); +if ((status &I2C_STAT_XRDY )) { +/* send out next 1 byte */ +writeb (value,I2C_DATA ); +writew (I2C_STAT_XRDY ,I2C_STAT ); + }else { + i2c_error =1 ; + } +#else /* send out two bytes */ writew ((value <<8 ) + regoffset,I2C_DATA ); +#endif /* must have enough delay to allow BB bit to go low */ udelay (50000 );if (readw (I2C_STAT ) &I2C_STAT_NACK ) {
@@ -188,7 +207,11 @@ static void flush_fifo(void)while (1 ){ stat =readw (I2C_STAT );if (stat ==I2C_STAT_RRDY ){ +#if defined(CONFIG_OMAP243X ) || defined(CONFIG_OMAP34XX ) +readb (I2C_DATA ); +#else readw (I2C_DATA ); +#endif writew (I2C_STAT_RRDY ,I2C_STAT );udelay (1000 ); }else
include/asm-arm/arch-omap3/i2c.h new file +128 -0
128 lines not on this page · raw message
PATCH v6 9/15 OMAP3: Add Beagle board and common power code
Add Beagle board support and common power code.
--- board/omap3/beagle/Makefile | 49 +++++ board/omap3/beagle/beagle.c | 89 +++++++++ board/omap3/beagle/beagle.h | 381 ++++++++++++++++++++++++++++++++++++++++++ board/omap3/beagle/config.mk | 35 +++ board/omap3/beagle/u-boot.lds | 63 ++++++ board/omap3/common/Makefile | 52 +++++ board/omap3/common/power.c | 74 ++++++++ 7 files changed, 743 insertions(+)
board/omap3/beagle/beagle.c new file +89 -0
@@ -0,0 +1,89 @@ +/* +* (C) Copyright 2004-2008 +* Texas Instruments, <www.ti.com> +* +* Author : +* Sunil Kumar <[email protected]> +* Shashi Ranjan <[email protected]> +* +* Derived from Beagle Board and 3430 SDP code by +* Richard Woodruff <[email protected]> +* Syed Mohammed Khasim <[email protected]> +* +* +* See file CREDITS for list of people who contributed to this +* project. +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, +* MA 02111-1307 USA +*/ +#include <common.h> +#include <asm/io.h> +#include <asm/arch/mux.h> +#include <asm/arch/sys_proto.h> +#include <asm/mach-types.h> +#include "beagle.h" + +/****************************************************************************** +* Routine: board_init +* Description: Early hardware init. +*****************************************************************************/ +int board_init (void ) +{ +DECLARE_GLOBAL_DATA_PTR ; + +gpmc_init ();/* in SRAM or SDRAM, finish GPMC */ +/* board id for Linux */ + gd->bd->bi_arch_number =MACH_TYPE_OMAP3_BEAGLE ; +/* boot param addr */ + gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 +0x100 ); + +return 0 ; +} + +/****************************************************************************** +* Routine: misc_init_r +* Description: Configure board specific parts +*****************************************************************************/ +int misc_init_r (void ) +{ +gpio_t *gpio5_base = (gpio_t *)OMAP34XX_GPIO5_BASE ; +gpio_t *gpio6_base = (gpio_t *)OMAP34XX_GPIO6_BASE ; + +power_init_r (); + +/* Configure GPIOs to output */ +writel (~((GPIO10 ) |GPIO9 |GPIO3 |GPIO2 ), &gpio6_base->oe); +writel (~(GPIO31 |GPIO30 |GPIO29 |GPIO28 |GPIO22 |GPIO21 | +GPIO15 |GPIO14 |GPIO13 |GPIO12 ), &gpio5_base->oe); + +/* Set GPIOs */ +writel (GPIO10 |GPIO9 |GPIO3 |GPIO2 , &gpio6_base->setdataout); +writel (GPIO31 |GPIO30 |GPIO29 |GPIO28 |GPIO22 |GPIO21 | +GPIO15 |GPIO14 |GPIO13 |GPIO12 , &gpio5_base->setdataout); + +return 0 ; +} + +/****************************************************************************** +* Routine: set_muxconf_regs +* Description: Setting up the configuration Mux registers specific to the +* hardware. Many pins need to be moved from protect to primary +* mode. +*****************************************************************************/ +void set_muxconf_regs (void ) +{ +MUX_BEAGLE (); +}
board/omap3/beagle/beagle.h new file +381 -0
381 lines not on this page · raw message
board/omap3/beagle/config.mk new file +35 -0
@@ -0,0 +1,35 @@ +# +# (C) Copyright 2006 +# Texas Instruments, <www.ti.com> +# +# Beagle Board uses OMAP3 (ARM-CortexA8) cpu +# see http://www.ti.com/ for more information on Texas Instruments +# +# See file CREDITS for list of people who contributed to this +# project. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# Physical Address: +# 8000'0000 (bank0) +# A000/0000 (bank1) +# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000 +# (mem base + reserved) + +# For use with external or internal boots. +TEXT_BASE = 0x80e80000 + +
board/omap3/beagle/Makefile new file +49 -0
50 lines not on this page · raw message
board/omap3/beagle/u-boot.lds new file +63 -0
63 lines not on this page · raw message
board/omap3/common/Makefile new file +52 -0
52 lines not on this page · raw message
board/omap3/common/power.c new file +74 -0
74 lines not on this page · raw message
PATCH v6 10/15 OMAP3: Add Overo board
Add Overo board support.
--- board/omap3/overo/Makefile | 49 +++++ board/omap3/overo/config.mk | 31 +++ board/omap3/overo/overo.c | 89 ++++++++++ board/omap3/overo/overo.h | 381 +++++++++++++++++++++++++++++++++++++++++++ board/omap3/overo/u-boot.lds | 63 +++++++ 5 files changed, 613 insertions(+)
board/omap3/overo/config.mk new file +31 -0
@@ -0,0 +1,31 @@ +# +# Overo uses OMAP3 (ARM-CortexA8) cpu +# +# See file CREDITS for list of people who contributed to this +# project. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# Physical Address: +# 8000'0000 (bank0) +# A000/0000 (bank1) +# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000 +# (mem base + reserved) + +# For use with external or internal boots. +TEXT_BASE = 0x80e80000 + +
board/omap3/overo/Makefile new file +49 -0
50 lines not on this page · raw message
board/omap3/overo/overo.c new file +89 -0
89 lines not on this page · raw message
board/omap3/overo/overo.h new file +381 -0
381 lines not on this page · raw message
board/omap3/overo/u-boot.lds new file +63 -0
63 lines not on this page · raw message
PATCH v6 11/15 OMAP3: Add Pandora support
Add Pandora support.
--- board/omap3/pandora/Makefile | 49 ++++ board/omap3/pandora/config.mk | 33 +++ board/omap3/pandora/pandora.c | 92 ++++++++ board/omap3/pandora/pandora.h | 420 +++++++++++++++++++++++++++++++++++++++++ board/omap3/pandora/u-boot.lds | 63 ++++++ 5 files changed, 657 insertions(+)
board/omap3/pandora/config.mk new file +33 -0
@@ -0,0 +1,33 @@ +# +# (C) Copyright 2006 +# Texas Instruments, <www.ti.com> +# +# Pandora uses OMAP3 (ARM-CortexA8) cpu +# see http://www.ti.com/ for more information on Texas Instruments +# +# See file CREDITS for list of people who contributed to this +# project. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# Physical Address: +# 8000'0000 (bank0) +# A000/0000 (bank1) +# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000 +# (mem base + reserved) + +# For use with external or internal boots. +TEXT_BASE = 0x80e80000
board/omap3/pandora/Makefile new file +49 -0
49 lines not on this page · raw message
board/omap3/pandora/pandora.c new file +92 -0
92 lines not on this page · raw message
board/omap3/pandora/pandora.h new file +420 -0
420 lines not on this page · raw message
board/omap3/pandora/u-boot.lds new file +63 -0
63 lines not on this page · raw message
PATCH v6 12/15 OMAP3: Add EVM board
Add EVM board support.
--- board/omap3/evm/Makefile | 49 +++++ board/omap3/evm/config.mk | 35 +++ board/omap3/evm/evm.c | 123 +++++++++++++ board/omap3/evm/evm.h | 396 +++++++++++++++++++++++++++++++++++++++++++++ board/omap3/evm/u-boot.lds | 63 +++++++ 5 files changed, 666 insertions(+)
board/omap3/evm/config.mk new file +35 -0
@@ -0,0 +1,35 @@ +# +# (C) Copyright 2006 - 2008 +# Texas Instruments, <www.ti.com> +# +# EVM uses OMAP3 (ARM-CortexA8) cpu +# see http://www.ti.com/ for more information on Texas Instruments +# +# See file CREDITS for list of people who contributed to this +# project. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# Physical Address: +# 8000'0000 (bank0) +# A000/0000 (bank1) +# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000 +# (mem base + reserved) + +# For use with external or internal boots. +TEXT_BASE = 0x80e80000 + +
board/omap3/evm/evm.c new file +123 -0
123 lines not on this page · raw message
board/omap3/evm/evm.h new file +396 -0
396 lines not on this page · raw message
board/omap3/evm/Makefile new file +49 -0
50 lines not on this page · raw message
board/omap3/evm/u-boot.lds new file +63 -0
63 lines not on this page · raw message
PATCH v6 13/15 OMAP3: Add Zoom1 board support
Support for Zoom MDK with OMAP3430. Details of Zoom MDK available here:
http://www.logicpd.com/products/devkit/ti/zoom_mobile_development_kit
--- board/omap3/common/Makefile | 1 board/omap3/zoom1/Makefile | 49 ++++++ board/omap3/zoom1/config.mk | 33 ++++ board/omap3/zoom1/u-boot.lds | 63 ++++++++ board/omap3/zoom1/zoom1.c | 77 +++++++++ board/omap3/zoom1/zoom1.h | 135 +++++++++++++++++ include/configs/omap3_zoom1.h | 326 ++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 684 insertions(+) create mode 100644 board/omap3/zoom/Makefile create mode 100644 board/omap3/zoom/config.mk create mode 100644 board/omap3/zoom/u-boot.lds create mode 100644 board/omap3/zoom/zoom.c create mode 100644 board/omap3/zoom/zoom.h create mode 100644 include/configs/omap3_zoom1.h
board/omap3/common/Makefile +1 -0
@@ -32,6 +32,7 @@ LIB = $(obj)lib$(VENDOR).a COBJS-$(CONFIG_OMAP3_BEAGLE) += power.o COBJS-$(CONFIG_OMAP3_OVERO) += power.o COBJS-$(CONFIG_OMAP3_PANDORA) += power.o +COBJS-$(CONFIG_OMAP3_ZOOM1) += power.o COBJS := $(COBJS-y) SRCS := $(COBJS:.o=.c)
board/omap3/zoom1/Makefile new file +49 -0
49 lines not on this page · raw message
board/omap3/zoom1/config.mk new file +33 -0
@@ -0,0 +1,33 @@ +# +# (C) Copyright 2006-2008 +# Texas Instruments, <www.ti.com> +# +# Zoom MDK uses OMAP3 (ARM-CortexA8) cpu +# see http://www.ti.com/ for more information on Texas Instruments +# +# See file CREDITS for list of people who contributed to this +# project. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# +# Physical Address: +# 8000'0000 (bank0) +# A000/0000 (bank1) +# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000 +# (mem base + reserved) + +# For use with external or internal boots. +TEXT_BASE = 0x80e80000
board/omap3/zoom1/u-boot.lds new file +63 -0
63 lines not on this page · raw message
board/omap3/zoom1/zoom1.c new file +77 -0
77 lines not on this page · raw message
board/omap3/zoom1/zoom1.h new file +135 -0
135 lines not on this page · raw message
include/configs/omap3_zoom1.h new file +326 -0
326 lines not on this page · raw message
PATCH v6 14/15 OMAP3: Add Beagle, EVM and Overo configuration
Add Beagle, EVM and Overo configuration.
--- include/configs/omap3_beagle.h | 325 ++++++++++++++++++++++++++++++++++++++ include/configs/omap3_evm.h | 345 +++++++++++++++++++++++++++++++++++++++++ include/configs/omap3_overo.h | 318 +++++++++++++++++++++++++++++++++++++ 3 files changed, 988 insertions(+)
include/configs/omap3_beagle.h new file +325 -0
@@ -0,0 +1,325 @@ +/* +* (C) Copyright 2006-2008 +* Texas Instruments. +* Richard Woodruff <[email protected]> +* Syed Mohammed Khasim <[email protected]> +* +* Configuration settings for the TI OMAP3530 Beagle board. +* +* See file CREDITS for list of people who contributed to this +* project. +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, +* MA 02111-1307 USA +*/ + +#ifndef __CONFIG_H +#define __CONFIG_H +#include <asm/sizes.h> + +/* +* High Level Configuration Options +*/ +#define CONFIG_ARMCORTEXA8 1/* This is an ARM V7 CPU core */ +#define CONFIG_OMAP 1/* in a TI OMAP core */ +#define CONFIG_OMAP34XX 1/* which is a 34XX */ +#define CONFIG_OMAP3430 1/* which is in a 3430 */ +#define CONFIG_OMAP3_BEAGLE 1/* working with BEAGLE */ + +#include <asm/arch/cpu.h> /* get chip and board defs */ +#include <asm/arch/omap3.h> + +/* Clock Defines */ +#define V_OSCK 26000000/* Clock output from T2 */ +#define V_SCLK (V_OSCK >> 1) + +#undef CONFIG_USE_IRQ/* no support for IRQs */ +#define CONFIG_MISC_INIT_R + +#define CONFIG_CMDLINE_TAG 1/* enable passing of ATAGs */ +#define CONFIG_SETUP_MEMORY_TAGS 1 +#define CONFIG_INITRD_TAG 1 +#define CONFIG_REVISION_TAG 1 + +/* +* Size of malloc() pool +*/ +#define CONFIG_ENV_SIZE SZ_128K/* Total Size Environment */ +/* Sector */ +#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + SZ_128K) +#define CONFIG_SYS_GBL_DATA_SIZE 128/* bytes reserved for */ +/* initial data */ + +/* +* Hardware drivers +*/ + +/* +* NS16550 Configuration +*/ +#define V_NS16550_CLK 48000000/* 48MHz (APLL96/2) */ + +#define CONFIG_SYS_NS16550 +#define CONFIG_SYS_NS16550_SERIAL +#define CONFIG_SYS_NS16550_REG_SIZE (-4) +#define CONFIG_SYS_NS16550_CLK V_NS16550_CLK + +/* +* select serial console configuration +*/ +#define CONFIG_CONS_INDEX 3 +#define CONFIG_SYS_NS16550_COM3 OMAP34XX_UART3 +#define CONFIG_SERIAL3 3/* UART3 on Beagle Rev 2 */ + +/* allow to overwrite serial and ethaddr */ +#define CONFIG_ENV_OVERWRITE +#define CONFIG_BAUDRATE 115200 +#define CONFIG_SYS_BAUDRATE_TABLE {4800, 9600, 19200, 38400, 57600,\ + 115200} +#define CONFIG_MMC 1 +#define CONFIG_OMAP3_MMC 1 +#define CONFIG_DOS_PARTITION 1 + +/* commands to include */ +#include <config_cmd_default.h> + +#define CONFIG_CMD_EXT2 /* EXT2 Support */ +#define CONFIG_CMD_FAT /* FAT support */ +#define CONFIG_CMD_JFFS2 /* JFFS2 Support */ + +#define CONFIG_CMD_I2C /* I2C serial bus support */ +#define CONFIG_CMD_MMC /* MMC support */ +#define CONFIG_CMD_NAND /* NAND support */ + +#undef CONFIG_CMD_FLASH/* flinfo, erase, protect */ +#undef CONFIG_CMD_FPGA/* FPGA configuration Support */ +#undef CONFIG_CMD_IMI/* iminfo */ +#undef CONFIG_CMD_IMLS/* List all found images */ +#undef CONFIG_CMD_NET/* bootp, tftpboot, rarpboot */ +#undef CONFIG_CMD_NFS/* NFS support */ + +#define CONFIG_SYS_NO_FLASH +#define CONFIG_SYS_I2C_SPEED 100000 +#define CONFIG_SYS_I2C_SLAVE 1 +#define CONFIG_SYS_I2C_BUS 0 +#define CONFIG_SYS_I2C_BUS_SELECT 1 +#define CONFIG_DRIVER_OMAP34XX_I2C 1 + +/* +* Board NAND Info. +*/ +#define CONFIG_NAND_OMAP_GPMC +#define CONFIG_SYS_NAND_ADDR NAND_BASE/* physical address */ +/* to access nand */ +#define CONFIG_SYS_NAND_BASE NAND_BASE/* physical address */ +/* to access nand at */ +/* CS0 */ +#define GPMC_NAND_ECC_LP_x16_LAYOUT 1 + +#define CONFIG_SYS_MAX_NAND_DEVICE 1/* Max number of NAND */ +/* devices */ +#define SECTORSIZE 512 + +#define NAND_ALLOW_ERASE_ALL +#define ADDR_COLUMN 1 +#define ADDR_PAGE 2 +#define ADDR_COLUMN_PAGE 3 + +#define NAND_ChipID_UNKNOWN 0x00 +#define NAND_MAX_FLOORS 1 +#define NAND_MAX_CHIPS 1 +#define NAND_NO_RB 1 +#define CONFIG_SYS_NAND_WP + +#define CONFIG_JFFS2_NAND +/* nand device jffs2 lives on */ +#define CONFIG_JFFS2_DEV "nand0" +/* start of jffs2 partition */ +#define CONFIG_JFFS2_PART_OFFSET 0x680000 +#define CONFIG_JFFS2_PART_SIZE 0xf980000/* size of jffs2 */ +/* partition */ + +/* Environment information */ +#define CONFIG_BOOTDELAY 10 + +#define CONFIG_EXTRA_ENV_SETTINGS \ + "loadaddr=0x82000000\0" \ + "console=ttyS2,115200n8\0" \ + "videomode=1024x768 at 60,vxres=1024,vyres=768\0" \ + "videospec=omapfb:vram:2M,vram:4M\0" \ + "mmcargs=setenv bootargs console=${console} " \ + "video=${videospec},mode:${videomode} " \ + "root=/dev/mmcblk0p2 rw " \ + "rootfstype=ext3 rootwait\0" \ + "nandargs=setenv bootargs console=${console} " \ + "video=${videospec},mode:${videomode} " \ + "root=/dev/mtdblock4 rw " \ + "rootfstype=jffs2\0" \ + "loadbootscript=fatload mmc 0 ${loadaddr} boot.scr\0" \ + "bootscript=echo Running bootscript from mmc ...; " \ + "autoscr ${loadaddr}\0" \ + "loaduimage=fatload mmc 0 ${loadaddr} uImage\0" \ + "mmcboot=echo Booting from mmc ...; " \ + "run mmcargs; " \ + "bootm ${loadaddr}\0" \ + "nandboot=echo Booting from nand ...; " \ + "run nandargs; " \ + "nand read ${loadaddr} 280000 400000; " \ + "bootm ${loadaddr}\0" \ + +#define CONFIG_BOOTCOMMAND \ + "if mmcinit; then " \ + "if run loadbootscript; then " \ + "run bootscript; " \ + "else " \ + "if run loaduimage; then " \ + "run mmcboot; " \ + "else run nandboot; " \ + "fi; " \ + "fi; " \ + "else run nandboot; fi" + +#define CONFIG_AUTO_COMPLETE 1 +/* +* Miscellaneous configurable options +*/ +#define V_PROMPT "OMAP3 beagleboard.org # " + +#define CONFIG_SYS_LONGHELP /* undef to save memory */ +#define CONFIG_SYS_HUSH_PARSER /* use "hush" command parser */ +#define CONFIG_SYS_PROMPT_HUSH_PS2 "> " +#define CONFIG_SYS_PROMPT V_PROMPT +#define CONFIG_SYS_CBSIZE 256/* Console I/O Buffer Size */ +/* Print Buffer Size */ +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \ + sizeof(CONFIG_SYS_PROMPT) + 16) +#define CONFIG_SYS_MAXARGS 16/* max number of command args */ +/* Boot Argument Buffer Size */ +#define CONFIG_SYS_BARGSIZE (CONFIG_SYS_CBSIZE) + +#define CONFIG_SYS_MEMTEST_START (OMAP34XX_SDRC_CS0)/* memtest */ +/* works on */ +#define CONFIG_SYS_MEMTEST_END (OMAP34XX_SDRC_CS0 + \ + 0x01F00000)/* 31MB */ + +#undef CONFIG_SYS_CLKS_IN_HZ/* everything, incl board info, in Hz */ + +#define CONFIG_SYS_LOAD_ADDR (OMAP34XX_SDRC_CS0)/* default */ +/* load address */ + +/* +* 2430 has 12 GP timers, they can be driven by the SysClk (12/13/19.2) or by +* 32KHz clk, or from external sig. This rate is divided by a local divisor. +*/ +#define V_PVT 7 + +#define CONFIG_SYS_TIMERBASE (OMAP34XX_GPT2) +#define CONFIG_SYS_PVT V_PVT/* 2^(pvt+1) */ +#define CONFIG_SYS_HZ ((V_SCLK) / (2 << CONFIG_SYS_PVT)) + +/*----------------------------------------------------------------------- +* Stack sizes +* +* The stack sizes are set up in start.S using the settings below +*/ +#define CONFIG_STACKSIZE SZ_128K/* regular stack */ +#ifdef CONFIG_USE_IRQ +#define CONFIG_STACKSIZE_IRQ SZ_4K/* IRQ stack */ +#define CONFIG_STACKSIZE_FIQ SZ_4K/* FIQ stack */ +#endif + +/*----------------------------------------------------------------------- +* Physical Memory Map +*/ +#define CONFIG_NR_DRAM_BANKS 2/* CS1 may or may not be populated */ +#define PHYS_SDRAM_1 OMAP34XX_SDRC_CS0 +#define PHYS_SDRAM_1_SIZE SZ_32M/* at least 32 meg */ +#define PHYS_SDRAM_2 OMAP34XX_SDRC_CS1 + +/* SDRAM Bank Allocation method */ +#define SDRC_R_B_C 1 + +/*----------------------------------------------------------------------- +* FLASH and environment organization +*/ + +/* **** PISMO SUPPORT *** */ + +/* Configure the PISMO */ +#define PISMO1_NAND_SIZE GPMC_SIZE_128M +#define PISMO1_ONEN_SIZE GPMC_SIZE_128M + +#define CONFIG_SYS_MAX_FLASH_SECT 520/* max number of sectors on */ +/* one chip */ +#define CONFIG_SYS_MAX_FLASH_BANKS 2/* max number of flash banks */ +#define CONFIG_SYS_MONITOR_LEN SZ_256K/* Reserve 2 sectors */ + +#define CONFIG_SYS_FLASH_BASE boot_flash_base + +/* Monitor@start of flash */ +#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE +#define CONFIG_SYS_ONENAND_BASE ONENAND_MAP + +#define CONFIG_ENV_IS_IN_NAND 1 +#define ONENAND_ENV_OFFSET 0x260000/* environment starts here */ +#define SMNAND_ENV_OFFSET 0x260000/* environment starts here */ + +#define CONFIG_SYS_ENV_SECT_SIZE boot_flash_sec +#define CONFIG_ENV_OFFSET boot_flash_off +#define CONFIG_ENV_ADDR SMNAND_ENV_OFFSET + +/*----------------------------------------------------------------------- +* CFI FLASH driver setup +*/ +/* timeout values are in ticks */ +#define CONFIG_SYS_FLASH_ERASE_TOUT (100 * CONFIG_SYS_HZ) +#define CONFIG_SYS_FLASH_WRITE_TOUT (100 * CONFIG_SYS_HZ) + +/* Flash banks JFFS2 should use */ +#define CONFIG_SYS_MAX_MTD_BANKS (CONFIG_SYS_MAX_FLASH_BANKS + \ + CONFIG_SYS_MAX_NAND_DEVICE) +#define CONFIG_SYS_JFFS2_MEM_NAND +/* use flash_info[2] */ +#define CONFIG_SYS_JFFS2_FIRST_BANK CONFIG_SYS_MAX_FLASH_BANKS +#define CONFIG_SYS_JFFS2_NUM_BANKS 1 + +#ifndef __ASSEMBLY__ +extern gpmc_csx_t *nand_cs_base; +extern gpmc_t *gpmc_cfg_base; +extern unsigned int boot_flash_base; +extern volatile unsigned int boot_flash_env_addr; +extern unsigned int boot_flash_off; +extern unsigned int boot_flash_sec; +extern unsigned int boot_flash_type; +#endif + + +#define WRITE_NAND_COMMAND (d, adr)\ + writel(d, &nand_cs_base->nand_cmd) +#define WRITE_NAND_ADDRESS (d, adr)\ + writel(d, &nand_cs_base->nand_adr) +#define WRITE_NAND (d, adr) writew(d, &nand_cs_base->nand_dat) +#define READ_NAND (adr) readl(&nand_cs_base->nand_dat) + +/* Other NAND Access APIs */ +#define NAND_WP_OFF () do {readl(&gpmc_cfg_base->config) |= GPMC_CONFIG_WP; } \ + while (0) +#define NAND_WP_ON () do {readl(&gpmc_cfg_base->config) &= ~GPMC_CONFIG_WP; } \ + while (0) +#define NAND_DISABLE_CE (nand) +#define NAND_ENABLE_CE (nand) +#define NAND_WAIT_READY (nand) udelay(10) + +#endif /* __CONFIG_H */
include/configs/omap3_evm.h new file +345 -0
345 lines not on this page · raw message
include/configs/omap3_overo.h new file +318 -0
318 lines not on this page · raw message
PATCH v6 15/15 OMAP3: Add Pandora config, main Makefile, README, MAKEALL and MAINTAINERS
Add Pandora config, main Makefile, README, MAKEALL and MAINTAINERS
--- MAINTAINERS | 20 ++ MAKEALL | 30 ++- Makefile | 19 ++ doc/README.omap3 | 116 ++++++++++++++ include/configs/omap3_pandora.h | 320 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 496 insertions(+), 9 deletions(-)
doc/README.omap3 new file +116 -0
@@ -0,0 +1,116 @@ + +Summary +======= + +This README is about U-Boot support for TI's ARM Cortex-A8 based OMAP3 [1] +family of SoCs. TI's OMAP3 SoC family contains an ARM Cortex-A8 core running +at ~600MHz. Additionally some family members contain a TMS320C64x+ DSP ~430MHz +and/or an Imagination SGX 2D/3D graphics processor and various other standard +peripherals. + +Currently the following boards are supported: + +* TI EVM [2] + +* Gumstix Overo [3] + +* TI/DigiKey BeagleBoard [4] + +* OpenPandora Ltd. Pandora [5] + +* TI/Logic PD Zoom MDK [6] + +Toolchain +========= + +While ARM Cortex-A8 support ARM v7 instruction set (-march=armv7a) we compile +with -march=armv5 to allow more compilers to work. For U-Boot code this has +no performance impact. + +Build +===== + +* TI EVM: + +make omap3_evm_config +make + +* Gumstix Overo: + +make omap3_overo_config +make + +* BeagleBoard: + +make omap3_beagle_config +make + +* Pandora: + +make omap3_pandora_config +make + +* Zoom MDK: + +make omap3_zoom1_config +make + +Custom commands +=============== + +To make U-Boot for OMAP3 support NAND device SW or HW ECC calculation, U-Boot +for OMAP3 supports custom user command + +nandecc hw/sw + +To be compatible with NAND drivers using SW ECC (e.g. kernel code) + +nandecc sw + +enables SW ECC calculation. HW ECC enabled with + +nandecc hw + +is typically used to write 2nd stage bootloader (known as 'x-loader') which is +executed by OMAP3's boot rom and therefore has to be written with HW ECC. + +For all other commands see + +help + +Acknowledgements +================ + +OMAP3 U-Boot is based on U-Boot tar ball [7] for BeagleBoard and EVM done by +several TI employees. + +Links +===== + +[1] OMAP3: + +http://focus.ti.com/general/docs/gencontent.tsp?contentId=36915 + +[2] TI EVM: + +http://focus.ti.com/docs/toolsw/folders/print/tmdxevm3503.html + +[3] Gumstix Overo: + +http://www.gumstix.net/Overo/ + +[4] TI/DigiKey BeagleBoard: + +http://beagleboard.org/ + +[5] OpenPandora Ltd. Pandora: + +http://openpandora.org/ + +[6] TI/Logic PD Zoom MDK: + +http://www.logicpd.com/products/devkit/ti/zoom_mobile_development_kit + +[7] TI OMAP3 U-Boot: + +http://beagleboard.googlecode.com/files/u-boot_beagle_revb.tar.gz
include/configs/omap3_pandora.h new file +320 -0
320 lines not on this page · raw message
MAINTAINERS +20 -0
@@ -477,6 +477,10 @@ Rowel Atienza <[email protected]> armadillo ARM720T +Dirk Behme <[email protected]> + + omap3_beagle ARM CORTEX-A8 (OMAP3xx SoC) + Rishi Bhattacharya <[email protected]> omap5912osk ARM926EJS
@@ -517,6 +521,10 @@ Sascha Hauer <[email protected]> imx31_litekit i.MX31 imx31_phycore i.MX31 +Grazvydas Ignotas <[email protected]> + + omap3_pandora ARM CORTEX-A8 (OMAP3xx SoC) + Gary Jennejohn <[email protected]> smdk2400 ARM920T
@@ -544,6 +552,10 @@ Guennadi Liakhovetski <g.liakhovetski at gm mx31ads i.MX31 SMDK6400 S3C6400 +Nishanth Menon <[email protected]> + + omap3_zoom1 ARM CORTEX-A8 (OMAP3xx SoC) + David M?ller <[email protected]> smdk2410 ARM920T
@@ -567,6 +579,10 @@ Dave Peverley <[email protected]> omap730p2 ARM926EJS +Manikandan Pillai <[email protected]> + + omap3_evm ARM CORTEX-A8 (OMAP3xx SoC) + Stelian Pop <[email protected]> at91cap9adk ARM926EJS (AT91CAP9 SoC)
@@ -581,6 +597,10 @@ Stefan Roese <[email protected]> pdnb3 xscale scpu xscale +Steve Sakoman <[email protected]> + + omap3_overo ARM CORTEX-A8 (OMAP3xx SoC) + Robert Schwebel <[email protected]> csb226 xscale
MAKEALL +21 -9
@@ -539,6 +539,17 @@ LIST_ARM11=" \ " ######################################################################### +## ARM Cortex-A8 Systems +######################################################################### +LIST_ARM_CORTEX_A8=" \ + omap3_beagle \ + omap3_evm \ + omap3_overo \ + omap3_pandora \ + omap3_zoom1 \ +" + +######################################################################### ## AT91 Systems #########################################################################
@@ -592,15 +603,16 @@ LIST_ixp=" \ ## ARM groups ######################################################################### -LIST_arm=" \ - ${LIST_SA} \ - ${LIST_ARM7} \ - ${LIST_ARM9} \ - ${LIST_ARM10} \ - ${LIST_ARM11} \ - ${LIST_at91} \ - ${LIST_pxa} \ - ${LIST_ixp} \ +LIST_arm=" \ + ${LIST_SA} \ + ${LIST_ARM7} \ + ${LIST_ARM9} \ + ${LIST_ARM10} \ + ${LIST_ARM11} \ + ${LIST_ARM_CORTEX_A8} \ + ${LIST_at91} \ + ${LIST_pxa} \ + ${LIST_ixp} \ " #########################################################################
Makefile +19 -0
@@ -2839,6 +2839,25 @@ SMN42_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm720t SMN42 siemens lpc2292 ######################################################################### +## ARM CORTEX Systems +######################################################################### + +omap3_beagle_config : unconfig + @$(MKCONFIG) $(@:_config=) arm arm_cortexa8 beagle omap3 omap3 + +omap3_evm_config : unconfig + @$(MKCONFIG) $(@:_config=) arm arm_cortexa8 evm omap3 omap3 + +omap3_overo_config : unconfig + @$(MKCONFIG) $(@:_config=) arm arm_cortexa8 overo omap3 omap3 + +omap3_pandora_config : unconfig + @$(MKCONFIG) $(@:_config=) arm arm_cortexa8 pandora omap3 omap3 + +omap3_zoom1_config : unconfig + @$(MKCONFIG) $(@:_config=) arm arm_cortexa8 zoom1 omap3 omap3 + +######################################################################### ## XScale Systems #########################################################################
PATCH v6 15/15 OMAP3: Add Pandora config, main Makefile, README, MAKEALL and MAINTAINERS
Quoted 4 lines · Dirk Behme
Add Pandora config, main
Makefile, README, MAKEALL andMAINTAINERSSigned-off-by Dirk Behme <[email protected]>
Quoted 8 lines
--- MAINTAINERS | 20 ++ MAKEALL | 30 ++- Makefile | 19 ++ doc/README.omap3 | 116 ++++++++++++++ include/configs/omap3_pandora.h | 320 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 496 insertions(+), 9 deletions(-)
please add board configs when you add the boards it will the same for the MAKEALL, Makefile entries
I will simplify bisect and tracking
Best Regards,
J.
PATCH v6 15/15 OMAP3: Add Pandora config, main Makefile, README, MAKEALL and MAINTAINERS
Quoted 13 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 4 lines · Dirk Behme
Add Pandora config, main
Makefile, README, MAKEALL andMAINTAINERSSigned-off-by Dirk Behme <[email protected]>Quoted 8 lines
--- MAINTAINERS | 20 ++ MAKEALL | 30 ++- Makefile | 19 ++ doc/README.omap3 | 116 ++++++++++++++ include/configs/omap3_pandora.h | 320 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 496 insertions(+), 9 deletions(-)
Quoted 4 lines
please add board configs when you add the boards it will the same for the MAKEALL,
MakefileentriesI will simplify bisect and tracking
Any other comments? If we make v7 series with those changes, will they finally be accepted?
PATCH v6 15/15 OMAP3: Add Pandora config, main Makefile, README, MAKEALL and MAINTAINERS
Quoted 15 lines · Grazvydas Ignotas
Quoted 13 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 12 lines · Dirk Behme
Add Pandora config, main
Makefile, README, MAKEALL andMAINTAINERSSigned-off-by Dirk Behme <[email protected]>--- MAINTAINERS | 20 ++ MAKEALL | 30 ++- Makefile | 19 ++ doc/README.omap3 | 116 ++++++++++++++ include/configs/omap3_pandora.h | 320 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 496 insertions(+), 9 deletions(-)
Quoted 7 lines
Quoted 4 lines
please add board configs when you add the boards it will the same for the MAKEALL,
MakefileentriesI will simplify bisect and tracking
Any other comments? If we make v7 series with those changes, will they finally be accepted?
I'll ake one on the MMC
that's all
Best Regards,
J.
PATCH v6 14/15 OMAP3: Add Beagle, EVM and Overo configuration
In reply to Dirk BehmeQuoted 9 lines · Dirk Behme
Add Beagle, EVM and Overo configuration.
Signed-off-by Dirk Behme <[email protected]>--- include/configs/omap3_beagle.h | 325 ++++++++++++++++++++++++++++++++++++++ include/configs/omap3_evm.h | 345 +++++++++++++++++++++++++++++++++++++++++ include/configs/omap3_overo.h | 318 +++++++++++++++++++++++++++++++++++++ 3 files changed, 988 insertions(+)
please add board configs when you add the boards it will the same for the MAKEALL, Makefile entries
I will simplify bisect and tracking
Best Regards,
J.
PATCH v6 9/15 OMAP3: Add Beagle board and common power code
In reply to Dirk Behme+
board/omap3/common/Makefile line 34
Quoted 5 lines
board/omap3/common/Makefile new file +5
-0+LIB = $(obj)lib$(VENDOR).a + +COBJS-$(CONFIG_OMAP3_BEAGLE) += power.o +COBJS-$(CONFIG_OMAP3_OVERO) += power.o +COBJS-$(CONFIG_OMAP3_PANDORA) += power.o
please add board when you really add it
if all boards use the same driver a proper config will be better instead of 10 000 CONFIG_BOARDx
Best Regards,
J.
PATCH v6 6/15 OMAP3: Add NAND support
In reply to Dirk BehmeQuoted 7 lines · Dirk Behme
Add NAND support.
Signed-off-by Nishanth Menon <[email protected]>Signed-off-by Syed Mohammed Khasim <[email protected]>Signed-off-by Dirk Behme <[email protected]>---
ACK
-Scott
v6 cover OMAP3: Add support for some of TIs ARM-Cortex A8 OMAP3 boards
In reply to Dirk BehmeQuoted 5 lines · Dirk Behme
This patch series adds U-Boot v1 support for some of TI's ARM-Cortex A8 based OMAP3 boards. These are BeagleBoard [1][2], EVM [3], Overo [4], Pandora [5] and Zoom1 [6].
...
Just in case somebody likes to pull this OMAP3 patch series from git:
http://www.sakoman.net/cgi-bin/gitweb.cgi?p=u-boot-omap3.git;a=shortlog;h=refs/heads/omap3-dev
Thanks to Steve for this!
Dirk