mirror of
https://github.com/smaeul/u-boot.git
synced 2025-10-19 07:08:14 +01:00
DaVinci Ethernet cleanup
Chips without the EMAC controller won't need the utilities it uses to read an Ethernet address from EEPROM; so don't include them needlessly. Use is_valid_ether() to validate the address from EEPROM. All-zero addresses aren't the only invalid addresses. A fully erased EEPROM returns all-ones, also invalid... Switch those Ethernet utilities to use "%pM" for printing MAC addresses; and not say ROM when they mean EEPROM. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Acked-by: Ben Warren <biggerbadderben@gmail.com>
This commit is contained in:
parent
c790b04d23
commit
641e0925e4
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
#include <i2c.h>
|
#include <i2c.h>
|
||||||
|
#include <net.h>
|
||||||
#include <asm/arch/hardware.h>
|
#include <asm/arch/hardware.h>
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
@ -49,6 +50,8 @@ void dv_display_clk_infos(void)
|
|||||||
((REG(PLL2_DIV2) & 0x1f) + 1) / 2);
|
((REG(PLL2_DIV2) & 0x1f) + 1) / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_DRIVER_TI_EMAC
|
||||||
|
|
||||||
/* Read ethernet MAC address from EEPROM for DVEVM compatible boards.
|
/* Read ethernet MAC address from EEPROM for DVEVM compatible boards.
|
||||||
* Returns 1 if found, 0 otherwise.
|
* Returns 1 if found, 0 otherwise.
|
||||||
*/
|
*/
|
||||||
@ -60,8 +63,8 @@ int dvevm_read_mac_address(uint8_t *buf)
|
|||||||
(uint8_t *) &buf[0], 6))
|
(uint8_t *) &buf[0], 6))
|
||||||
goto i2cerr;
|
goto i2cerr;
|
||||||
|
|
||||||
/* Check that MAC address is not null. */
|
/* Check that MAC address is valid. */
|
||||||
if (memcmp(buf, "\0\0\0\0\0\0", 6) == 0)
|
if (!is_valid_ether_addr(buf))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
return 1; /* Found */
|
return 1; /* Found */
|
||||||
@ -75,11 +78,11 @@ err:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* If there is a MAC address in the environment, and if it is not identical to
|
/* If there is a MAC address in the environment, and if it is not identical to
|
||||||
* the MAC address in the ROM, then a warning is printed and the MAC address
|
* the MAC address in the EEPROM, then a warning is printed and the MAC address
|
||||||
* from the environment is used.
|
* from the environment is used.
|
||||||
*
|
*
|
||||||
* If there is no MAC address in the environment, then it will be initialized
|
* If there is no MAC address in the environment, then it will be initialized
|
||||||
* (silently) from the value in the ROM.
|
* (silently) from the value in the EEPROM.
|
||||||
*/
|
*/
|
||||||
void dv_configure_mac_address(uint8_t *rom_enetaddr)
|
void dv_configure_mac_address(uint8_t *rom_enetaddr)
|
||||||
{
|
{
|
||||||
@ -96,31 +99,24 @@ void dv_configure_mac_address(uint8_t *rom_enetaddr)
|
|||||||
tmp = (*end) ? end+1 : end;
|
tmp = (*end) ? end+1 : end;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if ROM and U-Boot environment MAC addresses match. */
|
/* Check if EEPROM and U-Boot environment MAC addresses match. */
|
||||||
if (memcmp(env_enetaddr, "\0\0\0\0\0\0", 6) != 0 &&
|
if (memcmp(env_enetaddr, "\0\0\0\0\0\0", 6) != 0 &&
|
||||||
memcmp(env_enetaddr, rom_enetaddr, 6) != 0) {
|
memcmp(env_enetaddr, rom_enetaddr, 6) != 0) {
|
||||||
printf("Warning: MAC addresses don't match:\n");
|
printf("Warning: MAC addresses don't match:\n");
|
||||||
printf(" ROM MAC address: %02X:%02X:%02X:%02X:%02X:%02X\n",
|
printf(" EEPROM MAC address: %pM\n", rom_enetaddr);
|
||||||
rom_enetaddr[0], rom_enetaddr[1],
|
printf(" \"ethaddr\" value: %pM\n", env_enetaddr) ;
|
||||||
rom_enetaddr[2], rom_enetaddr[3],
|
|
||||||
rom_enetaddr[4], rom_enetaddr[5]);
|
|
||||||
printf(" \"ethaddr\" value: %02X:%02X:%02X:%02X:%02X:%02X\n",
|
|
||||||
env_enetaddr[0], env_enetaddr[1],
|
|
||||||
env_enetaddr[2], env_enetaddr[3],
|
|
||||||
env_enetaddr[4], env_enetaddr[5]) ;
|
|
||||||
debug("### Using MAC address from environment\n");
|
debug("### Using MAC address from environment\n");
|
||||||
}
|
}
|
||||||
if (!tmp) {
|
if (!tmp) {
|
||||||
char ethaddr[20];
|
char ethaddr[20];
|
||||||
|
|
||||||
/* There is no MAC address in the environment, so we initialize
|
/* There is no MAC address in the environment, so we initialize
|
||||||
* it from the value in the ROM. */
|
* it from the value in the EEPROM. */
|
||||||
sprintf(ethaddr, "%02X:%02X:%02X:%02X:%02X:%02X",
|
sprintf(ethaddr, "%pM", rom_enetaddr) ;
|
||||||
rom_enetaddr[0], rom_enetaddr[1],
|
debug("### Setting environment from EEPROM MAC address = \"%s\"\n",
|
||||||
rom_enetaddr[2], rom_enetaddr[3],
|
|
||||||
rom_enetaddr[4], rom_enetaddr[5]) ;
|
|
||||||
debug("### Setting environment from ROM MAC address = \"%s\"\n",
|
|
||||||
ethaddr);
|
ethaddr);
|
||||||
setenv("ethaddr", ethaddr);
|
setenv("ethaddr", ethaddr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* DAVINCI_EMAC */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user