[U-Boot] [PATCH 1/3] add support for arm926ejs-based pollux CPU

Wolfgang Denk wd at denx.de
Tue Jun 1 21:38:50 CEST 2010


Dear Brian Cavagnolo,

In message <1275417750-10020-1-git-send-email-brian at cozybit.com> you wrote:
> 
> 
> Signed-off-by: Brian Cavagnolo <brian at cozybit.com>
> Signed-off-by: Andrey Yurovsky <yurovsky at gmail.com>

Please be a bit more verbose - who is manufacturing this pollux
thingy, who will be maintaining the code, etc.

>  arch/arm/cpu/arm926ejs/pollux/Makefile    |   51 ++++++++
>  arch/arm/cpu/arm926ejs/pollux/reset.S     |   49 ++++++++
>  arch/arm/cpu/arm926ejs/pollux/timer.c     |  190 +++++++++++++++++++++++++++++

Why exactly do we need a new directory for it?


> --- /dev/null
> +++ b/arch/arm/cpu/arm926ejs/pollux/reset.S
> @@ -0,0 +1,49 @@
...
> +	.align	5
> +.globl reset_cpu
> +reset_cpu:
> +	ldr	r1, rstctl1	/* get clkm1 reset ctl */
> +	mov	r3, #0x0
> +	strh	r3, [r1]	/* clear it */
> +	mov	r3, #0x8
> +	strh	r3, [r1]	/* force dsp+arm reset */
> +_loop_forever:
> +	b	_loop_forever
> +
> +rstctl1:
> +	.word	0xfffece10

This seems identical to /arm/cpu/arm926ejs/omap/reset.S and
arch/arm/cpu/arm926ejs/versatile/reset.S to me.  Why do we need a 3rd
copy of the same code?

Please factor out common code.

> diff --git a/arch/arm/cpu/arm926ejs/pollux/timer.c b/arch/arm/cpu/arm926ejs/pollux/timer.c
> new file mode 100644
> index 0000000..fc6c699
> --- /dev/null
> +++ b/arch/arm/cpu/arm926ejs/pollux/timer.c
...
> +#ifndef CONFIG_SYS_TIMERBASE
> +#error "Please define CONFIG_SYS_TIMERBASE to a suitable TIMERx_BASE"
> +#endif
> +#define TIMERBASE CONFIG_SYS_TIMERBASE
> +
> +#define TIMER_LOAD_VAL 0xffffffff
> +
> +static ulong inline read_timer(void)
> +{
> +	REG32(TIMERBASE + TMRCONTROL) |= (1<<LDCNT);
> +	return REG32(TIMERBASE + TMRMATCH);
> +}

We don;t allow register accesses through base address + offset any
more. Please declare porper C structs and use proper I/O accessors.
Please fix globally.

> +	if (lastdec >= now) {		/* normal mode (non roll) */
> +		/* normal mode */
> +		timestamp += lastdec - now; /* move stamp fordward with absoulte diff ticks */

LIne too long. Please fix globally.

> +	} else {			/* we have overflow of the count down timer */
> +		/* nts = ts + ld + (TLV - now)
> +		 * ts=old stamp, ld=time that passed before passing through -1
> +		 * (TLV-now) amount of time after passing though -1
> +		 * nts = new "advancing time stamp"...it could also roll and cause problems.
> +		 */

Incorrect multiline comment style. Please fix globally.

> +/* Clock and Power Control Registers */
> +#define CLKPWR_BASE		0xC000F000
> +#define CLKMODEREG		(CLKPWR_BASE + 0x000)
> +#define PLLSETREG0		(CLKPWR_BASE + 0x004)
> +#define PLLSETREG1		(CLKPWR_BASE + 0x008)
> +#define GPIOWAKEUPENB		(CLKPWR_BASE + 0x040)
> +#define RTCWAKEUPENB		(CLKPWR_BASE + 0x044)
> +#define GPIOWAKEUPRISEENB	(CLKPWR_BASE + 0x048)
> +#define GPIOWAKEUPFALLENB	(CLKPWR_BASE + 0x04C)
> +#define GPIOPEND		(CLKPWR_BASE + 0x050)
> +#define INTPENDSPAD		(CLKPWR_BASE + 0x058)
> +#define PWRRSTSTATUS		(CLKPWR_BASE + 0x05C)
> +#define INTENB			(CLKPWR_BASE + 0x060)
> +#define PWRMODE			(CLKPWR_BASE + 0x07C)
> +#define PADSTRENGTHGPIOAL	(CLKPWR_BASE + 0x100)
> +#define PADSTRENGTHGPIOAH	(CLKPWR_BASE + 0x104)
> +#define PADSTRENGTHGPIOBL	(CLKPWR_BASE + 0x108)
> +#define PADSTRENGTHGPIOBH	(CLKPWR_BASE + 0x10C)
> +#define PADSTRENGTHGPIOCL	(CLKPWR_BASE + 0x110)
> +#define PADSTRENGTHGPIOCH	(CLKPWR_BASE + 0x114)
> +#define PADSTRENGTHBUS		(CLKPWR_BASE + 0x118)

NAK!  See above - please declare proper C structs instead.

> diff --git a/arch/arm/include/asm/arch-pollux/gpio.h b/arch/arm/include/asm/arch-pollux/gpio.h
> new file mode 100644
> index 0000000..f6ddd1b
> --- /dev/null
> +++ b/arch/arm/include/asm/arch-pollux/gpio.h
...
> +/* GPIO registers */
> +#define GPIO_BASE		0xC000A000
> +
> +#define GPIOAOUT		(GPIO_BASE + 0x00)
> +#define GPIOAOUTENB		(GPIO_BASE + 0x04)
> +#define GPIOADETMODE0		(GPIO_BASE + 0x08)
> +#define GPIOADETMODE1		(GPIO_BASE + 0x0C)
> +#define GPIOAINTENB		(GPIO_BASE + 0x10)
> +#define GPIOADET		(GPIO_BASE + 0x14)
> +#define GPIOAPAD		(GPIO_BASE + 0x18)
> +#define GPIOAPUENB		(GPIO_BASE + 0x1C)
> +#define GPIOAALTFN0		(GPIO_BASE + 0x20)
> +#define GPIOAALTFN1		(GPIO_BASE + 0x24)

NAK again.

> diff --git a/arch/arm/include/asm/arch-pollux/reg.h b/arch/arm/include/asm/arch-pollux/reg.h
> new file mode 100644
> index 0000000..fba6216
> --- /dev/null
> +++ b/arch/arm/include/asm/arch-pollux/reg.h
...
> +/* register access and manipulation helper macros */
> +#define REG8(addr)  (*((volatile unsigned char *)(addr)))
> +#define REG16(addr) (*((volatile unsigned short *)(addr)))
> +#define REG32(addr) (*((volatile unsigned long *)(addr)))

NAK again! Please use proper I/O accessors instead.

> +/* UART register offsets */
> +#define LCON			0x00
> +#define UCON			0x02
> +#define FCON			0x04
> +#define MCON			0x06
> +#define TRSTATUS		0x08
> +#define ESTATUS			0x0A
> +#define FSTATUS			0x0C
> +#define MSTATUS			0x0E
> +#define THB			0x10
> +#define RHB			0x12
> +#define BRD			0x14
> +#define TIMEOUTREG		0x16
> +#define INTSTATUSREG		0x18
> +#define UARTCLKENB		0x40
> +#define UARTCLKGEN		0x44

Is this really such a new UART that we need new code for it?

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
How much net work could a network work, if a network could net work?


More information about the U-Boot mailing list