[U-Boot] [PATCH] drivers/net/e1000.c: Fix GCC 4.6 build warnings

Anatolij Gustschin agust at denx.de
Tue Dec 20 18:26:28 CET 2011


On Tue, 20 Dec 2011 10:07:30 -0600
"Moffett, Kyle D" <Kyle.D.Moffett at boeing.com> wrote:

> On Dec 20, 2011, at 10:49, Anatolij Gustschin wrote:
> > Fix:
> > e1000.c: In function 'e1000_read_mac_addr':
> > e1000.c:1149:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
> > e1000.c:1149:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
> [...]
> > #ifdef CONFIG_E1000_FALLBACK_MAC
> > -	if ( *(u32*)(nic->enetaddr) == 0 || *(u32*)(nic->enetaddr) == ~0 ) {
> > +	if (get_unaligned_be32(nic->enetaddr) == 0 ||
> > +	    get_unaligned_be32(nic->enetaddr) == ~0) {
> > 		unsigned char fb_mac[NODE_ADDRESS_SIZE] = CONFIG_E1000_FALLBACK_MAC;
> > 
> > 		memcpy (nic->enetaddr, fb_mac, NODE_ADDRESS_SIZE);
> 
> No, if you are going to fix this code then make it use the right
> function for the job: is_valid_ether_addr()

You are right, I'll fix it using is_valid_ether_addr().

> Furthermore, while the E1000 chipset does not generally work very
> well without a proper SPI EEPROM image (if at all), I think it
> would be better for the driver to load successfully and use the
> "macaddr" from the U-Boot environment instead of some hardcoded
> compile-time constant.
> 
> IE: That whole code block should be ripped out and instead just
> tweak the "valid MAC address" check further down.

The config option is documented in README:
	CONFIG_E1000_FALLBACK_MAC
		default MAC for empty EEPROM after production.

I assume this block is only for a possibility to use the driver
until the eeprom is programmed with a valid mac address.

Thanks,
Anatolij


More information about the U-Boot mailing list