|  | 
 | 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. Additionally, | 
 | some family members contain a TMS320C64x+ DSP and/or an Imagination SGX 2D/3D | 
 | graphics processor and various other standard peripherals. | 
 |  | 
 | Currently the following boards are supported: | 
 |  | 
 | * OMAP3530 BeagleBoard [2] | 
 |  | 
 | * Gumstix Overo [3] | 
 |  | 
 | * TI EVM [4] | 
 |  | 
 | * OpenPandora Ltd. Pandora [5] | 
 |  | 
 | * TI/Logic PD Zoom MDK [6] | 
 |  | 
 | * TI/Logic PD Zoom 2 [7] | 
 |  | 
 | * CompuLab Ltd. CM-T35 [8] | 
 |  | 
 | 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 | 
 | ===== | 
 |  | 
 | * BeagleBoard: | 
 |  | 
 | make omap3_beagle_config | 
 | make | 
 |  | 
 | * Gumstix Overo: | 
 |  | 
 | make omap3_overo_config | 
 | make | 
 |  | 
 | * TI EVM: | 
 |  | 
 | make omap3_evm_config | 
 | make | 
 |  | 
 | * Pandora: | 
 |  | 
 | make omap3_pandora_config | 
 | make | 
 |  | 
 | * Zoom MDK: | 
 |  | 
 | make omap3_zoom1_config | 
 | make | 
 |  | 
 | * Zoom 2: | 
 |  | 
 | make omap3_zoom2_config | 
 | make | 
 |  | 
 | * CM-T35: | 
 |  | 
 | make cm_t35_config | 
 | make | 
 |  | 
 | * BlueLYNX-X: | 
 |  | 
 | make omap3_mvblx_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 | 
 |  | 
 | Interfaces | 
 | ========== | 
 |  | 
 | gpio | 
 | ---- | 
 |  | 
 | To set a bit : | 
 |  | 
 | 	if (!gpio_request(N, "")) { | 
 | 		gpio_direction_output(N, 0); | 
 | 		gpio_set_value(N, 1); | 
 | 	} | 
 |  | 
 | To clear a bit : | 
 |  | 
 | 	if (!gpio_request(N, "")) { | 
 | 		gpio_direction_output(N, 0); | 
 | 		gpio_set_value(N, 0); | 
 | 	} | 
 |  | 
 | To read a bit : | 
 |  | 
 | 	if (!gpio_request(N, "")) { | 
 | 		gpio_direction_input(N); | 
 | 		val = gpio_get_value(N); | 
 | 		gpio_free(N); | 
 | 	} | 
 | 	if (val) | 
 | 		printf("GPIO N is set\n"); | 
 | 	else | 
 | 		printf("GPIO N is clear\n"); | 
 |  | 
 | dma | 
 | --- | 
 | void omap3_dma_init(void) | 
 | 	Init the DMA module | 
 | int omap3_dma_get_conf_chan(uint32_t chan, struct dma4_chan *config); | 
 | 	Read config of the channel | 
 | int omap3_dma_conf_chan(uint32_t chan, struct dma4_chan *config); | 
 | 	Write config to the channel | 
 | int omap3_dma_conf_transfer(uint32_t chan, uint32_t *src, uint32_t *dst, | 
 | 		uint32_t sze) | 
 | 	Config source, destination and size of a transfer | 
 | int omap3_dma_wait_for_transfer(uint32_t chan) | 
 | 	Wait for a transfer to end - this hast to be called before a channel | 
 | 	or the data the channel transferd are used. | 
 | int omap3_dma_get_revision(uint32_t *minor, uint32_t *major) | 
 | 	Read silicon Revision of the DMA module | 
 |  | 
 | NAND | 
 | ==== | 
 |  | 
 | There are some OMAP3 devices out there with NAND attached. Due to the fact that | 
 | OMAP3 ROM code can only handle 1-bit hamming ECC for accessing first page | 
 | (place where SPL lives) we require this setup for u-boot at least when reading | 
 | the second progam within SPL.  A lot of newer NAND chips however require more | 
 | than 1-bit ECC for the pages, some can live with 1-bit for the first page. To | 
 | handle this we can switch to another ECC algorithm after reading the payload | 
 | within SPL. | 
 |  | 
 | BCH8 | 
 | ---- | 
 |  | 
 | To enable hardware assisted BCH8 (8-bit BCH [Bose, Chaudhuri, Hocquenghem]) on | 
 | OMAP3 devices we can use the BCH library in lib/bch.c. To do so add CONFIG_BCH | 
 | to enable the library and CONFIG_NAND_OMAP_BCH8 to to enable hardware assisted | 
 | syndrom generation to your board config. | 
 | The NAND OOB layout is the same as in linux kernel, if the linux kernel BCH8 | 
 | implementation for OMAP3 works for you so the u-boot version should also. | 
 | When you require the SPL to read with BCH8 there are two more configs to | 
 | change: | 
 |  | 
 |  * CONFIG_SYS_NAND_ECCPOS (must be the same as .eccpos in | 
 |    GPMC_NAND_HW_BCH8_ECC_LAYOUT defined in | 
 |    arch/arm/include/asm/arch-omap3/omap_gpmc.h) | 
 |  * CONFIG_SYS_NAND_ECCSIZE must be 512 | 
 |  * CONFIG_SYS_NAND_ECCBYTES must be 13 for this BCH8 setup | 
 |  | 
 | Acknowledgements | 
 | ================ | 
 |  | 
 | OMAP3 U-Boot is based on U-Boot tar ball [9] for BeagleBoard and EVM done by | 
 | several TI employees. | 
 |  | 
 | Links | 
 | ===== | 
 |  | 
 | [1] OMAP3: | 
 |  | 
 | http://www.ti.com/omap3 (high volume) and | 
 | http://www.ti.com/omap35x (broad market) | 
 |  | 
 | [2] OMAP3530 BeagleBoard: | 
 |  | 
 | http://beagleboard.org/ | 
 |  | 
 | [3] Gumstix Overo: | 
 |  | 
 | http://www.gumstix.net/Overo/ | 
 |  | 
 | [4] TI EVM: | 
 |  | 
 | http://focus.ti.com/docs/toolsw/folders/print/tmdxevm3503.html | 
 |  | 
 | [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/Logic PD Zoom 2 | 
 |  | 
 | http://www.logicpd.com/sites/default/files/1012659A_Zoom_OMAP34x-II_MDP_Brief.pdf | 
 |  | 
 | [8] CompuLab Ltd. CM-T35: | 
 |  | 
 | http://www.compulab.co.il/t3530/html/t3530-cm-datasheet.htm | 
 |  | 
 | [9] TI OMAP3 U-Boot: | 
 |  | 
 | http://beagleboard.googlecode.com/files/u-boot_beagle_revb.tar.gz |