|
@@ -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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|