diff options
| -rw-r--r-- | CHANGELOG | 12 | ||||
| -rw-r--r-- | include/ns16550.h | 20 | 
2 files changed, 22 insertions, 10 deletions
| @@ -2,6 +2,18 @@  Changes since U-Boot 1.1.4:  ====================================================================== +* Word alignment fixes for word aligned NS16550 UART +  Patch by Jean-Paul Saman, 01 Mar 2005 + +  Fixes bug with UART that only supports word aligned access: removed +  "__attribute__ ((packed));" for "(CFG_NS16550_REG_SIZE == 4)" some +  (broken!) versions of GCC generate byte accesses when encountering +  the packed attribute regardless if the struct is already correctly +  aligned for a platform. Peripherals that can only handle word +  aligned access won't work properly when accessed with byte access. +  The struct NS16550 is already word aligned for REG_SIZE = 4, so +  there is no need to packed the struct in that case. +  * Fix behaviour if gatewayip is not set    Patch by Robin Gilks, 23 Dec 2004 diff --git a/include/ns16550.h b/include/ns16550.h index e17a11edc..d987a8b7e 100644 --- a/include/ns16550.h +++ b/include/ns16550.h @@ -45,15 +45,15 @@ struct NS16550 {  } __attribute__ ((packed));  #elif (CFG_NS16550_REG_SIZE == 4)  struct NS16550 { -	unsigned long rbr;		/* 0 */ -	unsigned long ier;		/* 1 */ -	unsigned long fcr;		/* 2 */ -	unsigned long lcr;		/* 3 */ -	unsigned long mcr;		/* 4 */ -	unsigned long lsr;		/* 5 */ -	unsigned long msr;		/* 6 */ -	unsigned long scr;		/* 7 */ -} __attribute__ ((packed)); +	unsigned long rbr;		/* 0 r  */ +	unsigned long ier;		/* 1 rw */ +	unsigned long fcr;		/* 2 w  */ +	unsigned long lcr;		/* 3 rw */ +	unsigned long mcr;		/* 4 rw */ +	unsigned long lsr;		/* 5 r  */ +	unsigned long msr;		/* 6 r  */ +	unsigned long scr;		/* 7 rw */ +}; /* No need to pack an already aligned struct */  #elif (CFG_NS16550_REG_SIZE == -4)  struct NS16550 {  	unsigned char rbr;		/* 0 */ @@ -102,7 +102,7 @@ typedef volatile struct NS16550 *NS16550_t;  #define MCR_DMA_EN      0x04  #define MCR_TX_DFR      0x08 -#define LCR_WLS_MSK	0x03		/* character length slect mask */ +#define LCR_WLS_MSK	0x03		/* character length select mask */  #define LCR_WLS_5	0x00		/* 5 bit character length */  #define LCR_WLS_6	0x01		/* 6 bit character length */  #define LCR_WLS_7	0x02		/* 7 bit character length */ |