
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

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


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
