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:
parent
d08bc5ad7a
commit
0e1380683f
|
@ -19,6 +19,14 @@ config RT8168_GET_MAC_FROM_VPD
|
||||||
default n
|
default n
|
||||||
select REALTEK_8168_RESET
|
select REALTEK_8168_RESET
|
||||||
|
|
||||||
|
config RT8168_SUPPORT_LEGACY_VPD_MAC
|
||||||
|
bool
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Previously VPD expected that device_indexes set to zero were
|
||||||
|
special cased. Selecting this Kconfig restores the legacy
|
||||||
|
VPD format and behaviour. If unsure, you likely do not need this!
|
||||||
|
|
||||||
config RT8168_SET_LED_MODE
|
config RT8168_SET_LED_MODE
|
||||||
bool
|
bool
|
||||||
default n
|
default n
|
||||||
|
|
|
@ -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 */
|
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
|
* Map each NIC on the DUT to "ethernet_macN", where N is [0-9].
|
||||||
* "ethernet_mac" with single NIC on DUT. When there are mulitple
|
* Translate index number from integer to ascii by adding '0' char.
|
||||||
* NICs on DUT, they are mapping to "ethernet_macN", where
|
|
||||||
* N is [0-9].
|
|
||||||
*/
|
*/
|
||||||
if (device_index == 0)
|
key[DEVICE_INDEX_BYTE] = device_index + '0';
|
||||||
key[DEVICE_INDEX_BYTE] = '\0';
|
|
||||||
else
|
|
||||||
/* Translate index number from integer to ascii */
|
|
||||||
key[DEVICE_INDEX_BYTE] = (device_index - 1) + '0';
|
|
||||||
|
|
||||||
return fetch_mac_vpd_key(macstrbuf, key);
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check "ethernet_mac" first when the device index is 1 */
|
if (fetch_mac_vpd_dev_idx(macstrbuf, config->device_index) == CB_SUCCESS)
|
||||||
if (config->device_index == 1 &&
|
|
||||||
fetch_mac_vpd_dev_idx(macstrbuf, 0) == CB_SUCCESS)
|
|
||||||
return;
|
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,"
|
printk(BIOS_ERR, "r8168: mac address not found in VPD,"
|
||||||
" using default 00:e0:4c:00:c0:b0\n");
|
" using default 00:e0:4c:00:c0:b0\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ config BOARD_GOOGLE_BASEBOARD_FIZZ
|
||||||
select MAINBOARD_HAS_TPM2
|
select MAINBOARD_HAS_TPM2
|
||||||
select GENERIC_SPD_BIN
|
select GENERIC_SPD_BIN
|
||||||
select RT8168_GET_MAC_FROM_VPD
|
select RT8168_GET_MAC_FROM_VPD
|
||||||
|
select RT8168_SUPPORT_LEGACY_VPD_MAC
|
||||||
select RT8168_SET_LED_MODE
|
select RT8168_SET_LED_MODE
|
||||||
select SPD_READ_BY_WORD
|
select SPD_READ_BY_WORD
|
||||||
|
|
||||||
|
|
|
@ -411,8 +411,8 @@ chip soc/intel/skylake
|
||||||
chip drivers/net
|
chip drivers/net
|
||||||
register "customized_leds" = "0x0fa5"
|
register "customized_leds" = "0x0fa5"
|
||||||
register "wake" = "GPE0_PCI_EXP"
|
register "wake" = "GPE0_PCI_EXP"
|
||||||
register "device_index" = "1"
|
|
||||||
device pci 00.0 on end
|
device pci 00.0 on end
|
||||||
|
register "device_index" = "0"
|
||||||
end
|
end
|
||||||
end # PCI Express Port 3
|
end # PCI Express Port 3
|
||||||
device pci 1c.3 on
|
device pci 1c.3 on
|
||||||
|
@ -428,7 +428,7 @@ chip soc/intel/skylake
|
||||||
device pci 1d.0 on # PCI Express Port 9 for 2nd LAN
|
device pci 1d.0 on # PCI Express Port 9 for 2nd LAN
|
||||||
chip drivers/net
|
chip drivers/net
|
||||||
register "customized_leds" = "0x0fa5"
|
register "customized_leds" = "0x0fa5"
|
||||||
register "device_index" = "2"
|
register "device_index" = "1"
|
||||||
device pci 00.0 on end
|
device pci 00.0 on end
|
||||||
end
|
end
|
||||||
end # PCI Express Port 9 for BtoB
|
end # PCI Express Port 9 for BtoB
|
||||||
|
|
|
@ -283,7 +283,7 @@ chip soc/intel/cannonlake
|
||||||
register "stop_delay_ms" = "12" # NIC needs time to quiesce
|
register "stop_delay_ms" = "12" # NIC needs time to quiesce
|
||||||
register "stop_off_delay_ms" = "1"
|
register "stop_off_delay_ms" = "1"
|
||||||
register "has_power_resource" = "1"
|
register "has_power_resource" = "1"
|
||||||
register "device_index" = "1"
|
register "device_index" = "0"
|
||||||
device pci 00.0 on end
|
device pci 00.0 on end
|
||||||
end
|
end
|
||||||
end # FSP requires func0 be enabled.
|
end # FSP requires func0 be enabled.
|
||||||
|
|
Loading…
Reference in New Issue