[U-Boot] [PATCH] ARM AT91 new board EB+CPUx9K2

Jens Scharsig esw at bus-elektronik.de
Thu Oct 29 08:40:23 CET 2009


Dear Wolfgang Denk
>> writel(AT91C_PA23_TXD2, AT91C_PIOA_OER);
>>
>> is the most correct way. 
> 
> "most correct way" are big words. No, this is not "correct" at all.
> 
> The whole set of address / offset definitions in
> include/asm-arm/arch-at91rm9200/AT91RM9200.h should be turned into a C
> struct.
I've got you misunderstood, what real pointer variable means.

If I understand you correctly now? 
The train goes in the opposite direction.

in the AT91RM9200.h

a port is defined as

typedef struct _AT91S_PIO
{
	...
	AT91_REG	 PIO_OER;	/* Output Enable Register */
	...
} AT91S_PIO, *AT91PS_PIO;

and 

#define AT91C_BASE_PIOC	((AT91PS_PIO)	0xFFFFF800) 

So the access should be 

	AT91PS_PIO pioa = AT91C_BASE_PIOA;
	...
	writel(AT91C_PA23_TXD2, &pioa->PIO_OER);

or 

	writel(AT91C_PA23_TXD2, &AT91C_BASE_PIOA->PIO_OER);

instead of

	writel(AT91C_PA23_TXD2, ((AT91PS_PIO) AT91C_BASE_PIOA)->PIO_OER)

	or 
	
	writel(AT91C_PA23_TXD2, AT91C_PIOA_OER)


The result, if all the board are adjusted, it can be removed
individual register definitions like 
#define AT91C_PIOD_OWER ((AT91_REG *) 0xFFFFFAA0)

I'm right?

Best regards,

Jens Scharsig



More information about the U-Boot mailing list