
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]

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

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 (!omap_request_gpio(N)) {
		omap_set_gpio_direction(N, 0);
		omap_set_gpio_dataout(N, 1);
	}

To clear a bit :

	if (!omap_request_gpio(N)) {
		omap_set_gpio_direction(N, 0);
		omap_set_gpio_dataout(N, 0);
	}

To read a bit :

	if (!omap_request_gpio(N)) {
		omap_set_gpio_direction(N, 1);
		val = omap_get_gpio_datain(N);
		omap_free_gpio(N);
	}
	if (val)
		printf("GPIO N is set\n");
	else
		printf("GPIO N is clear\n");


Acknowledgements
================

OMAP3 U-Boot is based on U-Boot tar ball [8] 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] TI OMAP3 U-Boot:

http://beagleboard.googlecode.com/files/u-boot_beagle_revb.tar.gz
