[U-Boot] [PATCH 1/2] microblaze: Fix strict-aliasign rules for in_be32

readl should work with unsigned int instead of unsigned long.
Signed-off-by: Michal Simek monstr@monstr.eu --- arch/microblaze/include/asm/io.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/microblaze/include/asm/io.h b/arch/microblaze/include/asm/io.h index 7e190d1..187ae73 100644 --- a/arch/microblaze/include/asm/io.h +++ b/arch/microblaze/include/asm/io.h @@ -25,7 +25,7 @@ #define readw(addr) \ ({ unsigned short __v = (*(volatile unsigned short *) (addr)); __v; }) #define readl(addr) \ - ({ unsigned long __v = (*(volatile unsigned long *) (addr)); __v; }) + ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; })
#define writeb(b, addr) \ (void)((*(volatile unsigned char *) (addr)) = (b))

Do not setup userial_ports array as const because in uartlite_serial_putc is out_be32 which can't write to tx_fifo if is const.
Warning log: serial_xuartlite.c: In function 'uartlite_serial_putc': serial_xuartlite.c:60: warning: initialization discards qualifiers from pointer target type serial_xuartlite.c: In function 'uartlite_serial_getc': serial_xuartlite.c:78: warning: initialization discards qualifiers from pointer target type serial_xuartlite.c: In function 'uartlite_serial_tstc': serial_xuartlite.c:87: warning: initialization discards qualifiers from pointer target type
Signed-off-by: Michal Simek monstr@monstr.eu
--- There are several approach how to solve it in uartlite_serial_putc. 1. add retype to out_be32 function 2. retype in assignment 3. do not define userial_ports as const - used solution --- drivers/serial/serial_xuartlite.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/serial/serial_xuartlite.c b/drivers/serial/serial_xuartlite.c index 2dc6bd1..3a38f9e 100644 --- a/drivers/serial/serial_xuartlite.c +++ b/drivers/serial/serial_xuartlite.c @@ -40,7 +40,7 @@ struct uartlite { unsigned int status; };
-static const struct uartlite *userial_ports[4] = { +static struct uartlite *userial_ports[4] = { #ifdef XILINX_UARTLITE_BASEADDR [0] = (struct uartlite *)XILINX_UARTLITE_BASEADDR, #endif

Dear Michal Simek,
In message 1318933330-17883-2-git-send-email-monstr@monstr.eu you wrote:
Do not setup userial_ports array as const because in uartlite_serial_putc is out_be32 which can't write to tx_fifo if is const.
Warning log: serial_xuartlite.c: In function 'uartlite_serial_putc': serial_xuartlite.c:60: warning: initialization discards qualifiers from pointer target type serial_xuartlite.c: In function 'uartlite_serial_getc': serial_xuartlite.c:78: warning: initialization discards qualifiers from pointer target type serial_xuartlite.c: In function 'uartlite_serial_tstc': serial_xuartlite.c:87: warning: initialization discards qualifiers from pointer target type
Signed-off-by: Michal Simek monstr@monstr.eu
There are several approach how to solve it in uartlite_serial_putc.
- add retype to out_be32 function
- retype in assignment
- do not define userial_ports as const - used solution
Wouldn't 1. and 2. actually be wrong? If you need to write to the struct, you must not declare it as constant?
drivers/serial/serial_xuartlite.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
Applied, thanks.
Best regards,
Wolfgang Denk

Michal Simek wrote:
readl should work with unsigned int instead of unsigned long.
Signed-off-by: Michal Simek monstr@monstr.eu
arch/microblaze/include/asm/io.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
Reject - coding style issue - I was too fast.
Thanks, Michal
participants (2)
-
Michal Simek
-
Wolfgang Denk