[U-Boot] board/Marvell/DB64360
Tim Liu
tliu at evertz.com
Mon Jan 24 20:27:28 CET 2011
Hi,
I am new to the list, any info. Or help is appreciated!
I went through C code of Ethernet initialization of U-boot(version
u-boot-2010_09.tar.gz ) in the board of db64360 under the board name
Marvell and found that there maybe is an obvious coding error in the
function void mv64360_eth_initialize(bd_t *bis) located in mv_eth.c. The
line is underscored.
The line should be: port_private = calloc (sizeof (struct
mv64360_eth_priv), 1), because it make next line pointless:
ethernet_private->port_private = (void *)port_private;
ethernet_private->port_private should point to mv64360_eth_priv, but
actually point to (*ethernet_private)ETH_PORT_INFO in the code.
Thanks
Tim Liu
Code snippet from mv64360_eth_initialize:
ethernet_private = calloc (sizeof (*ethernet_private), 1);
dev->priv = (void *) ethernet_private;
if (!ethernet_private) {
printf ("%s: %s allocation failure, %s\n",
__FUNCTION__, dev->name,
"Private Device Structure");
free (dev);
return;
}
/* start with an zeroed ETH_PORT_INFO */
memset (ethernet_private, 0, sizeof (ETH_PORT_INFO));
memcpy (ethernet_private->port_mac_addr, dev->enetaddr, 6);
/* set pointer to memory for stats data structure etc... */
port_private = calloc (sizeof (*ethernet_private), 1);
//should be sizeof (struct mv64360_eth_priv)
ethernet_private->port_private = (void *)port_private;
if (!port_private) {
printf ("%s: %s allocation failure, %s\n",
__FUNCTION__, dev->name,
"Port Private Device Structure");
free (ethernet_private);
free (dev);
return;
}
port_private->stats =
calloc (sizeof (struct net_device_stats), 1);
if (!port_private->stats) {
printf ("%s: %s allocation failure, %s\n",
__FUNCTION__, dev->name,
"Net stat Structure");
free (port_private);
free (ethernet_private);
free (dev);
return;
}
memset (ethernet_private->port_private, 0,
sizeof (struct mv64360_eth_priv));
More information about the U-Boot
mailing list