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 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot