[U-Boot] [PATCH] dm: ppc: Fixup cpu.c warning in mpc8xx

cpu.c: In function ‘check_CPU’: cpu.c:256:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
Signed-off-by: Marek Vasut marex@denx.de Cc: Wolfgang Denk wd@denx.de --- arch/powerpc/cpu/mpc8xx/cpu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/cpu/mpc8xx/cpu.c b/arch/powerpc/cpu/mpc8xx/cpu.c index 5cbf9a6..e453245 100644 --- a/arch/powerpc/cpu/mpc8xx/cpu.c +++ b/arch/powerpc/cpu/mpc8xx/cpu.c @@ -41,6 +41,7 @@ #include <netdev.h> #include <asm/cache.h> #include <linux/compiler.h> +#include <asm/io.h>
#if defined(CONFIG_OF_LIBFDT) #include <libfdt.h> @@ -253,7 +254,7 @@ static int check_CPU (long clock, uint pvr, uint immr) if ((pvr >> 16) != 0x0050) return -1;
- k = (immr << 16) | *((ushort *) & immap->im_cpm.cp_dparam[0xB0]); + k = (immr << 16) | readw(&immap->im_cpm.cp_dparam[0xB0]); m = 0;
switch (k) {

Dear Marek Vasut,
In message 1343419212-18716-1-git-send-email-marex@denx.de you wrote:
cpu.c: In function ‘check_CPU’: cpu.c:256:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
Signed-off-by: Marek Vasut marex@denx.de Cc: Wolfgang Denk wd@denx.de
arch/powerpc/cpu/mpc8xx/cpu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
...
- k = (immr << 16) | *((ushort *) & immap->im_cpm.cp_dparam[0xB0]);
- k = (immr << 16) | readw(&immap->im_cpm.cp_dparam[0xB0]);
I think this is wrong. readw() is a little endian I/O accessor, but PPC is all big-endian.
Guess this was untested?
Best regards,
Wolfgang Denk

Dear Wolfgang Denk,
Dear Marek Vasut,
In message 1343419212-18716-1-git-send-email-marex@denx.de you wrote:
cpu.c: In function ‘check_CPU’: cpu.c:256:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
Signed-off-by: Marek Vasut marex@denx.de Cc: Wolfgang Denk wd@denx.de
arch/powerpc/cpu/mpc8xx/cpu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
...
- k = (immr << 16) | *((ushort *) & immap->im_cpm.cp_dparam[0xB0]);
- k = (immr << 16) | readw(&immap->im_cpm.cp_dparam[0xB0]);
I think this is wrong. readw() is a little endian I/O accessor, but PPC is all big-endian.
So in_be32 it is, I guess?
Guess this was untested?
Of course it was not. Had trouble even sending this via the crappy cellular connection on a train ;-)
Thanks for catching it, glad you reviewed this.
Best regards,
Wolfgang Denk
Best regards, Marek Vasut

Dear Marek,
In message 201207272326.26896.marex@denx.de you wrote:
- k = (immr << 16) | *((ushort *) & immap->im_cpm.cp_dparam[0xB0]);
- k = (immr << 16) | readw(&immap->im_cpm.cp_dparam[0xB0]);
I think this is wrong. readw() is a little endian I/O accessor, but PPC is all big-endian.
So in_be32 it is, I guess?
Wrong again. Looks more like in_be16 to me...
Guess this was untested?
Of course it was not. Had trouble even sending this via the crappy cellular> connection on a train ;-)
You tested it? And it worked? I'm surprised. ... Really??
Best regards,
Wolfgang Denk

Dear Wolfgang Denk,
Dear Marek,
In message 201207272326.26896.marex@denx.de you wrote:
- k = (immr << 16) | *((ushort *) & immap-
im_cpm.cp_dparam[0xB0]);
- k = (immr << 16) | readw(&immap->im_cpm.cp_dparam[0xB0]);
I think this is wrong. readw() is a little endian I/O accessor, but PPC is all big-endian.
So in_be32 it is, I guess?
Wrong again. Looks more like in_be16 to me...
Ok, lemme try V2.
Guess this was untested?
Of course it was not. Had trouble even sending this via the crappy cellular> connection on a train ;-)
You tested it? And it worked? I'm surprised. ... Really??
No, I did not test it. The train control unit is MPC5200 too ... so I really had no hardware to test it on in close proximity ;-)
Best regards,
Wolfgang Denk
Best regards, Marek Vasut

cpu.c: In function ‘check_CPU’: cpu.c:256:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
Signed-off-by: Marek Vasut marex@denx.de Cc: Wolfgang Denk wd@denx.de --- arch/powerpc/cpu/mpc8xx/cpu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
NOTE: This patch is likely to break something, it is only compile tested. NOTE2: Something is seriously wrong with my damned locale again :-/
diff --git a/arch/powerpc/cpu/mpc8xx/cpu.c b/arch/powerpc/cpu/mpc8xx/cpu.c index 5cbf9a6..b3fcfe5 100644 --- a/arch/powerpc/cpu/mpc8xx/cpu.c +++ b/arch/powerpc/cpu/mpc8xx/cpu.c @@ -41,6 +41,7 @@ #include <netdev.h> #include <asm/cache.h> #include <linux/compiler.h> +#include <asm/io.h>
#if defined(CONFIG_OF_LIBFDT) #include <libfdt.h> @@ -253,7 +254,7 @@ static int check_CPU (long clock, uint pvr, uint immr) if ((pvr >> 16) != 0x0050) return -1;
- k = (immr << 16) | *((ushort *) & immap->im_cpm.cp_dparam[0xB0]); + k = (immr << 16) | in_be16((ushort *)&immap->im_cpm.cp_dparam[0xB0]); m = 0;
switch (k) {

Dear Marek Vasut,
In message 1343429832-24194-1-git-send-email-marex@denx.de you wrote:
cpu.c: In function ‘check_CPU’: cpu.c:256:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
Signed-off-by: Marek Vasut marex@denx.de Cc: Wolfgang Denk wd@denx.de
arch/powerpc/cpu/mpc8xx/cpu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
NOTE: This patch is likely to break something, it is only compile tested. NOTE2: Something is seriously wrong with my damned locale again :-/
Tested on TQM855MDCBAB7-T66.102 (MPC855T at 66 MHz) and TQM860LDB0A3-T50.202 (MPC860T at 50MHz).
Tested-by: Wolfgang Denk wd@denx.de Acked-by: Wolfgang Denk wd@denx.de
Best regards,
Wolfgang Denk

Dear Marek Vasut,
In message 1343429832-24194-1-git-send-email-marex@denx.de you wrote:
cpu.c: In function ‘check_CPU’: cpu.c:256:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
Signed-off-by: Marek Vasut marex@denx.de Cc: Wolfgang Denk wd@denx.de
arch/powerpc/cpu/mpc8xx/cpu.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
Applied to "next" branch, thanks.
Best regards,
Wolfgang Denk
participants (2)
-
Marek Vasut
-
Wolfgang Denk