[U-Boot] Zoom2 respin II
Tom
Tom.Rix at windriver.com
Tue Apr 14 16:39:05 CEST 2009
Soon I will be posting a rebase of omap3 zoom2 board with fixes and
enhancements per comments.
Tom
Big changes.
GPIO Interface
Ported from gpio code from linux. Used in zoom2 debug_board and led code.
Add documenation to doc/README.omap3
LED Interface
Use existing status_led interface. Add blue led to color led's.
Add documentation to doc/README.LED
OMAP u-boot.lds
Move this from board to cpu.
Comments
Dirk on 4/4
...
> +static void zoom2_debug_board_detect (void)
> +{
> + unsigned int val;
> + /*
> + * GPIO to query for debug board
> + * 158 db board query, bank 5, index 30
> + */
> + gpio_t *gpio5_base = (gpio_t *) OMAP34XX_GPIO5_BASE;
> +
> + val = __raw_readl (&gpio5_base->datain);
Is there any special reason why you use __raw_readl() instead of just
readl() here? Looking at ARM's io.h, they seem to map to the same macro?
Tom: New gpio interface is used, so this is hidden. BUT looking closely at
interface and __raw_readl is still being used. This was kept because I
wanted the keep code as close to kernel as possible.
------------------------------------------------------------------------
Dirk 4/4
I'm not sure if I overlooked it in one of the other patches, but if not:
Do you like to update
doc/README.omap3
Tom: Zoom2 information added to README.omap3 similar to other targets.
------------------------------------------------------------------------
Jean-Christophe Serial 4/2
> COBJS := zoom2.o \
> > - debug_board.o
> > + debug_board.o \
> > + zoom2_serial.o
it could be nice to disactivate it
A : Suprising hard to do. Logic added to do this for LED.
COBJS-${CONFIG_STATUS_LED} += led.o
Doing something similar leaves the serial_* functions undefined.
Defining a set of functions to be weak aliases for these functions
does not
work cleanly.
> +#include "zoom2_serial.h"
> > +
> > +int zoom2_debug_board_connected (void);
please move to a header
A : Moved to zoom2_serial.h
> + if (zoom2_debug_board_connected ()) {
> > + NS16550_t com_port = (NS16550_t) base;
> > + int baud_divisor = CONFIG_SYS_NS16550_CLK / 16 /
> > + CONFIG_BAUDRATE;
aligning it with CONFIG_SYS_NS16550_CLK could be nice
please add an empty line
A : Done
> + com_port->mcr = (MCR_DTR | MCR_RTS);
> > + com_port->fcr = (FCR_FIFO_EN | FCR_RXSR | FCR_TXSR);
> > + com_port->lcr = LCR_BKSE | LCR_8N1;
> > + com_port->dll = baud_divisor & 0xff;
> > + com_port->dlm = (baud_divisor >> 8) & 0xff;
> > + com_port->lcr = LCR_8N1;
clould you explain a fe more what you do here?
A : Added a comment that this was generic setup code.
> + if (zoom2_debug_board_connected ()) {
> > + NS16550_t port = (NS16550_t) base;
> > +
> > + if (c == '\n')
> > + quad_putc_dev (base, '\r');
> > +
> > + NS16550_putc (port, c);
why not
NS16550_putc ((NS16550_t) base, c);
A : Done in all the port vs. base functions.
> void quad_setbrg_dev (unsigned long base)
> > +{
> > + if (zoom2_debug_board_connected ()) {
> > + NS16550_t port = (NS16550_t) base;
> > +
> > + int clock_divisor = CONFIG_SYS_NS16550_CLK / 16 /
> > + CONFIG_BAUDRATE;
> > +
> > + NS16550_reinit (port, clock_divisor);
why don't you use the same in in the imit?
Tom: No good reason. I was using drivers/serial/serial.c as a guide and
this is
how it does it, with the clock_divisor function inlined.
> +
> > +#define QUAD_BASE_0 SERIAL_TL16CP754C_BASE
> > +#define QUAD_BASE_1 (SERIAL_TL16CP754C_BASE + 0x100)
> > +#define QUAD_BASE_2 (SERIAL_TL16CP754C_BASE + 0x200)
> > +#define QUAD_BASE_3 (SERIAL_TL16CP754C_BASE + 0x300)
why not
#define QUAD_BASE(x) (SERIAL_TL16CP754C_BASE + (x << 8))
Tom: That would work too. I would prefer to keep it as is becuase the
register
base is less obscured.
> +#define QUAD_INIT(n) \
^^^^^^^^^^^^^^^^^^^^^^^^^^^
white space please fix
> > +int quad_init_##n(void)
Tom: Done, converted
> + enable_gpmc_config(gpmc_config,
> > + serial_cs_base,
> > + SERIAL_TL16CP754C_BASE,
> > + GPMC_SIZE_16M);
> > +#endif
it's board specific please move to board
Tom: Done.
> -#ifdef CONFIG_OMAP
> > +#if defined(CONFIG_OMAP) && !defined(CONFIG_OMAP3_ZOOM2)
a config could be better
Tom: I do not use this code, the ifdef is because other omap's do.
> #define ONENAND_MAP 0x20000000 /* OneNand addr */
> > /* (actual size small port) */
> > +#define SERIAL_TL16CP754C_BASE 0x10000000 /* Zoom2 Serial
chip address */
it's not cpu specfic please move this to the serial driver
Tom: Done, moved to zoom2_serial.h
> -#define CONFIG_CONS_INDEX 3
> > -#define CONFIG_SYS_NS16550_COM3 OMAP34XX_UART3
> > -#define CONFIG_SERIAL3 3 /* UART3 */
is the removed serial will work on the zoom2?
Tom: This, and the other UARTS, are internally connected and should not
be used.
------------------------------------------------------------------------
Jean-Christophe Zoom2 base 4/2
From
> > + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
> > + __exidx_start = .;
> > + .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
> > + __exidx_end = .;
no need please remove
> > +
> > + . = ALIGN(4);
> > + .data : { *(.data) }
> > +
all the omap3 share the same lds it wil be nice to regroup it as done
for the
at91
Tom: Done. See OMAP-Consolidate-common-u-boot.lds-to-cpu-layer.patch
> +#define CONFIG_CMD_EXT2 /* EXT2 Support */
^^^^^^^^^^^^^^^^^
white space please fix it
> > +#define CONFIG_CMD_FAT /* FAT support */
ditto and the followiing configs too
> > +#define CONFIG_CMD_JFFS2 /* JFFS2 Support */
Tom: Done, tab-ified.
> +#define CONFIG_JFFS2_PART_OFFSET 0x680000
> > +#define CONFIG_JFFS2_PART_SIZE 0xf980000 /* size of jffs2 */
you do not active the MTD_PARTS it could be usefull
Tom: NAND related changes to follow this patch set.
> +
> > +#define CONFIG_EXTRA_ENV_SETTINGS \
> > + "loadaddr=0x82000000\0" \
load_addr?
Tom: This whole section was removed. It came from Zoom1 which came from
beagle
and does not really apply to zoom2.
> + */
> > +#define V_PROMPT "OMAP3 Zoom2# "
why? why not only define CONFIG_SYS_PROMPT?
Tom: Yes. Good point. Done.
> +/*
> > + * 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
as said precedently us the 12Mhz as imput with a PVT at 1 will give us a
better timer
Tom: OK. This code is no longer in the config file.
------------------------------------------------------------------------
Jean-Christophe debug board 4/2
> +COBJS := zoom2.o \
> > + debug_board.o
you do not plan to activate it via a CONFIG only?
Tom: No. The debug board is ment to be determined at run time. The
board is
easily detatched and single binary is needed.
> +
> > +static int debug_board_connected = DEBUG_BOARD_CONNECTED;
why not set it as -1; and then avoid the first_time int?
Tom: No. I looked at this and the tradeoff would be more code, I would
prefer
to leave it as it but will change it if you really want this.
-------------------------------------------------------------------------
Scott Wood Zoom2 base
> +#define NAND_NO_RB 1
> > +#define CONFIG_SYS_NAND_WP
More legacy NAND stuff. You should probably go through the config and
clean out anything that isn't verifiably necessary.
Tom: I Cleaned out a lot more of the config file.
More information about the U-Boot
mailing list