ti: common: board_detect: commodify ethaddr environment setting code
Keystone and OMAP platforms will need this to set ethernet MAC addresses from board EEPROM. Signed-off-by: Roger Quadros <rogerq@ti.com> Reviewed-by: Lokesh Vutla <lokeshvutla@ti.com> Reviewed-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
parent
a4562d0640
commit
38f719ea5e
@ -314,3 +314,65 @@ void __maybe_unused set_board_info_env(char *name)
|
||||
else
|
||||
setenv("board_serial", unknown);
|
||||
}
|
||||
|
||||
static u64 mac_to_u64(u8 mac[6])
|
||||
{
|
||||
int i;
|
||||
u64 addr = 0;
|
||||
|
||||
for (i = 0; i < 6; i++) {
|
||||
addr <<= 8;
|
||||
addr |= mac[i];
|
||||
}
|
||||
|
||||
return addr;
|
||||
}
|
||||
|
||||
static void u64_to_mac(u64 addr, u8 mac[6])
|
||||
{
|
||||
mac[5] = addr;
|
||||
mac[4] = addr >> 8;
|
||||
mac[3] = addr >> 16;
|
||||
mac[2] = addr >> 24;
|
||||
mac[1] = addr >> 32;
|
||||
mac[0] = addr >> 40;
|
||||
}
|
||||
|
||||
void board_ti_set_ethaddr(int index)
|
||||
{
|
||||
uint8_t mac_addr[6];
|
||||
int i;
|
||||
u64 mac1, mac2;
|
||||
u8 mac_addr1[6], mac_addr2[6];
|
||||
int num_macs;
|
||||
/*
|
||||
* Export any Ethernet MAC addresses from EEPROM.
|
||||
* The 2 MAC addresses in EEPROM define the address range.
|
||||
*/
|
||||
board_ti_get_eth_mac_addr(0, mac_addr1);
|
||||
board_ti_get_eth_mac_addr(1, mac_addr2);
|
||||
|
||||
if (is_valid_ethaddr(mac_addr1) && is_valid_ethaddr(mac_addr2)) {
|
||||
mac1 = mac_to_u64(mac_addr1);
|
||||
mac2 = mac_to_u64(mac_addr2);
|
||||
|
||||
/* must contain an address range */
|
||||
num_macs = mac2 - mac1 + 1;
|
||||
if (num_macs <= 0)
|
||||
return;
|
||||
|
||||
if (num_macs > 50) {
|
||||
printf("%s: Too many MAC addresses: %d. Limiting to 50\n",
|
||||
__func__, num_macs);
|
||||
num_macs = 50;
|
||||
}
|
||||
|
||||
for (i = 0; i < num_macs; i++) {
|
||||
u64_to_mac(mac1 + i, mac_addr);
|
||||
if (is_valid_ethaddr(mac_addr)) {
|
||||
eth_setenv_enetaddr_by_index("eth", i + index,
|
||||
mac_addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -193,4 +193,16 @@ u64 board_ti_get_emif2_size(void);
|
||||
*/
|
||||
void set_board_info_env(char *name);
|
||||
|
||||
/**
|
||||
* board_ti_set_ethaddr- Sets the ethaddr environment from EEPROM
|
||||
* @index: The first eth<index>addr environment variable to set
|
||||
*
|
||||
* EEPROM should be already read before calling this function.
|
||||
* The EEPROM contains 2 MAC addresses which define the MAC address
|
||||
* range (i.e. first and last MAC address).
|
||||
* This function sets the ethaddr environment variable for all
|
||||
* the available MAC addresses starting from eth<index>addr.
|
||||
*/
|
||||
void board_ti_set_ethaddr(int index);
|
||||
|
||||
#endif /* __BOARD_DETECT_H */
|
||||
|
Loading…
Reference in New Issue
Block a user