Patchwork [U-Boot,2/2,V3] PPC MPC83xx: Fix MPC8323ERDB build warning

login
register
mail settings
Submitter Wolfgang Denk
Date July 14, 2013, 5:42 p.m.
Message ID <1373823760-26965-1-git-send-email-wd@denx.de>
Download mbox | patch
Permalink /patch/258903/
State Accepted
Delegated to: Tom Rini
Headers show

Comments

Wolfgang Denk - July 14, 2013, 5:42 p.m.
Fix:

mpc8323erdb.c: In function 'mac_read_from_eeprom':
mpc8323erdb.c:198:3: warning: dereferencing type-punned pointer will
break strict-aliasing rules [-Wstrict-aliasing]

Signed-off-by: Wolfgang Denk <wd@denx.de>
cc: Timur Tabi <timur@tabi.org>
cc: Kim Phillips <kim.phillips@freescale.com>
---
V2: use uint32_t for crc_buf to make sure we always get exactly
    32 bit; thanks to Timur Tabi for pointing out.
V3: also use uint32_t for the size of the memcpy(), again thanks to
    Timur Tabi for pointing out.

 board/freescale/mpc8323erdb/mpc8323erdb.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
Timur Tabi - July 14, 2013, 10:24 p.m.
Wolfgang Denk wrote:
> mpc8323erdb.c: In function 'mac_read_from_eeprom':
> mpc8323erdb.c:198:3: warning: dereferencing type-punned pointer will
> break strict-aliasing rules [-Wstrict-aliasing]
>
> Signed-off-by: Wolfgang Denk<wd@denx.de>
> cc: Timur Tabi<timur@tabi.org>
> cc: Kim Phillips<kim.phillips@freescale.com>

Ack.
Tom Rini - July 16, 2013, 2:36 p.m.
On Sun, Jul 14, 2013 at 07:42:40PM +0200, Wolfgang Denk wrote:

> Fix:
> 
> mpc8323erdb.c: In function 'mac_read_from_eeprom':
> mpc8323erdb.c:198:3: warning: dereferencing type-punned pointer will
> break strict-aliasing rules [-Wstrict-aliasing]
> 
> Signed-off-by: Wolfgang Denk <wd@denx.de>
> cc: Timur Tabi <timur@tabi.org>
> cc: Kim Phillips <kim.phillips@freescale.com>

Applied to u-boot/master, thanks!

Patch

diff --git a/board/freescale/mpc8323erdb/mpc8323erdb.c b/board/freescale/mpc8323erdb/mpc8323erdb.c
index f29b2f4..533cb08 100644
--- a/board/freescale/mpc8323erdb/mpc8323erdb.c
+++ b/board/freescale/mpc8323erdb/mpc8323erdb.c
@@ -195,7 +195,11 @@  int mac_read_from_eeprom(void)
 		printf("\nEEPROM @ 0x%02x read FAILED!!!\n",
 		       CONFIG_SYS_I2C_EEPROM_ADDR);
 	} else {
-		if (crc32(crc, buf, 24) == *(unsigned int *)&buf[24]) {
+		uint32_t crc_buf;
+
+		memcpy(&crc_buf, &buf[24], sizeof(uint32_t));
+
+		if (crc32(crc, buf, 24) == crc_buf) {
 			printf("Reading MAC from EEPROM\n");
 			for (i = 0; i < 4; i++) {
 				if (memcmp(&buf[i * 6], "\0\0\0\0\0\0", 6)) {