drivers/net/r8168: Fix ethernet_mac[0-9] format for vpd

The format for VPD has changed s.t. the first NIC should
always have a zero concat to the end.

Adjust all the respective boards to shift back by one and
adjust drivers/net friends to remove the 'special casing'
of idx == 0.

Background:
https://chromeos.google.com/partner/dlm/docs/factory/vpd.html#field-ethernet_macn

V.2: Fixup a code comment typo while we are here.
V.3: Vary special casing semantics for idx==0 => default mac addr is set.
V.4: Rework to still support the legacy path.

BUG=b:152157720
BRANCH=none
TEST=none

Change-Id: Idf83cc621a9333186dabb668b22c4b78e211930a
Signed-off-by: Edward O'Callaghan <quasisec@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/39771
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
This commit is contained in:
Edward O'Callaghan
2020-03-23 13:06:42 +11:00
committed by Edward O'Callaghan
parent d08bc5ad7a
commit 0e1380683f
5 changed files with 23 additions and 16 deletions

View File

@@ -141,16 +141,10 @@ static enum cb_err fetch_mac_vpd_dev_idx(u8 *macstrbuf, u8 device_index)
char key[] = "ethernet_mac "; /* Leave a space at tail to stuff an index */
/*
* The device_index 0 is treated as an special case matching to
* "ethernet_mac" with single NIC on DUT. When there are mulitple
* NICs on DUT, they are mapping to "ethernet_macN", where
* N is [0-9].
* Map each NIC on the DUT to "ethernet_macN", where N is [0-9].
* Translate index number from integer to ascii by adding '0' char.
*/
if (device_index == 0)
key[DEVICE_INDEX_BYTE] = '\0';
else
/* Translate index number from integer to ascii */
key[DEVICE_INDEX_BYTE] = (device_index - 1) + '0';
key[DEVICE_INDEX_BYTE] = device_index + '0';
return fetch_mac_vpd_key(macstrbuf, key);
}
@@ -167,12 +161,16 @@ static void fetch_mac_string_vpd(struct drivers_net_config *config, u8 *macstrbu
return;
}
/* check "ethernet_mac" first when the device index is 1 */
if (config->device_index == 1 &&
fetch_mac_vpd_dev_idx(macstrbuf, 0) == CB_SUCCESS)
if (fetch_mac_vpd_dev_idx(macstrbuf, config->device_index) == CB_SUCCESS)
return;
if (fetch_mac_vpd_dev_idx(macstrbuf, config->device_index) != CB_SUCCESS)
if (!CONFIG(RT8168_SUPPORT_LEGACY_VPD_MAC)) {
printk(BIOS_ERR, "r8168: mac address not found in VPD,"
" using default 00:e0:4c:00:c0:b0\n");
return;
}
if (fetch_mac_vpd_key(macstrbuf, "ethernet_mac ") != CB_SUCCESS)
printk(BIOS_ERR, "r8168: mac address not found in VPD,"
" using default 00:e0:4c:00:c0:b0\n");
}