[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