ti: common: am6: Add support for setting MAC addresses

The AM654x EVM based on the TI K3 family of SoCs has an updated board
detection EEPROM structure that contains a TLV record of dedicated MAC
addresses rather than a range of MAC addresses as it was used on earlier
platforms such as DRA7. Add a basic function that allows us setting up
Ethernet MAC addresses into the U-Boot environment based on the MAC
address record contained in the common TI EEPROM structure.

Signed-off-by: Andreas Dannenberg <dannenberg@ti.com>
Reviewed-by: Lokesh Vutla <lokeshvutla@ti.com>
This commit is contained in:
Andreas Dannenberg 2019-06-04 18:08:25 -05:00 committed by Tom Rini
parent 361a53308d
commit 183fa08ae5
2 changed files with 44 additions and 0 deletions

View File

@ -534,6 +534,25 @@ fail:
memset(mac_addr, 0, TI_EEPROM_HDR_ETH_ALEN);
}
void __maybe_unused
board_ti_am6_get_eth_mac_addr(int index,
u8 mac_addr[TI_EEPROM_HDR_ETH_ALEN])
{
struct ti_am6_eeprom *ep = TI_AM6_EEPROM_DATA;
if (ep->header == TI_DEAD_EEPROM_MAGIC)
goto fail;
if (index < 0 || index >= ep->mac_addr_cnt)
goto fail;
memcpy(mac_addr, ep->mac_addr[index], TI_EEPROM_HDR_ETH_ALEN);
return;
fail:
memset(mac_addr, 0, TI_EEPROM_HDR_ETH_ALEN);
}
u64 __maybe_unused board_ti_get_emif1_size(void)
{
struct ti_common_eeprom *ep = TI_EEPROM_DATA;
@ -667,6 +686,19 @@ void board_ti_set_ethaddr(int index)
}
}
void board_ti_am6_set_ethaddr(int index, int count)
{
u8 mac_addr[6];
int i;
for (i = 0; i < count; i++) {
board_ti_am6_get_eth_mac_addr(i, mac_addr);
if (is_valid_ethaddr(mac_addr))
eth_env_set_enetaddr_by_index("eth", i + index,
mac_addr);
}
}
bool __maybe_unused board_ti_was_eeprom_read(void)
{
struct ti_common_eeprom *ep = TI_EEPROM_DATA;

View File

@ -398,6 +398,18 @@ void set_board_info_env_am6(char *name);
*/
void board_ti_set_ethaddr(int index);
/**
* board_ti_am6_set_ethaddr- Sets the ethaddr environment from EEPROM
* @index: The first eth<index>addr environment variable to set
* @count: The number of MAC addresses to process
*
* EEPROM should be already read before calling this function. The EEPROM
* contains n dedicated MAC addresses. This function sets the ethaddr
* environment variable for all the available MAC addresses starting
* from eth<index>addr.
*/
void board_ti_am6_set_ethaddr(int index, int count);
/**
* board_ti_was_eeprom_read() - Check to see if the eeprom contents have been read
*