mb/google/brya/crota: Enable MAC address passthru support
Enable the support for providing a MAC address for a dock to use based on the VPD values set in the platform. BUG=b:235045188 TEST=tested on Brya by setting VPD values and observing the string returned by the AMAC() method: > vpd -i RO_VPD -s "dock_mac"="BB:BB:BB:BB:BB:BB" > echo 1 > /sys/module/acpi/parameters/aml_debug_output [acpi.aml_debug_output=1] ACPI Debug: "Found VPD KEY dock_mac = BB:BB:BB:BB:BB:BB" ACPI Debug: "MAC address returned from VPD: BB:BB:BB:BB:BB:BB" ACPI Debug: "AMAC = _AUXMAC_#BBBBBBBBBBBB#" Signed-off-by: Franklin Lin <franklin_lin@wistron.corp-partner.google.com> Change-Id: I61b2a5e18bc17abeea0846f17e9be343e852c2b3 Reviewed-on: https://review.coreboot.org/c/coreboot/+/65603 Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
61f3f33311
commit
fd52e66e77
|
@ -206,6 +206,7 @@ config BOARD_GOOGLE_CROTA
|
|||
select CHROMEOS_WIFI_SAR if CHROMEOS
|
||||
select DRIVERS_GENESYSLOGIC_GL9750
|
||||
select DRIVERS_I2C_CS42L42
|
||||
select VPD
|
||||
|
||||
config BOARD_GOOGLE_MOLI
|
||||
bool "-> Moli"
|
||||
|
|
|
@ -4,12 +4,23 @@
|
|||
#include <chip.h>
|
||||
#include <fw_config.h>
|
||||
#include <baseboard/variants.h>
|
||||
#include <acpi/acpi.h>
|
||||
#include <acpi/acpigen.h>
|
||||
#include <drivers/vpd/vpd.h>
|
||||
#include <stdio.h>
|
||||
|
||||
const char *get_wifi_sar_cbfs_filename(void)
|
||||
{
|
||||
return "wifi_sar_0.hex";
|
||||
}
|
||||
|
||||
static const char *get_dock_mac_from_vpd(char *buf, int size)
|
||||
{
|
||||
/* Support MAC address pass-through */
|
||||
/* Read value of 'dock_mac' from RO VPD */
|
||||
return vpd_gets("dock_mac", buf, size, VPD_RO);
|
||||
}
|
||||
|
||||
void variant_update_soc_chip_config(struct soc_intel_alderlake_config *config)
|
||||
{
|
||||
if (fw_config_probe(FW_CONFIG(DB_LTE, LTE_USB))) {
|
||||
|
@ -26,3 +37,49 @@ void variant_update_soc_chip_config(struct soc_intel_alderlake_config *config)
|
|||
config->ext_fivr_settings.vnn_sx_voltage_mv = 1250;
|
||||
}
|
||||
}
|
||||
|
||||
void variant_fill_ssdt(const struct device *unused)
|
||||
{
|
||||
/* Write MAC address to SSDT for Linux kernel r8152 driver */
|
||||
/* enable pass-through support */
|
||||
/* and read ACPI object name: "\_SB.AMAC" */
|
||||
|
||||
/* ASL code like this */
|
||||
// Scope (\_SB)
|
||||
// {
|
||||
// Method (AMAC, 0, Serialized)
|
||||
// {
|
||||
// Return (ToBuffer (STRING))
|
||||
// }
|
||||
// }
|
||||
|
||||
char buf[32], acpi_buf[32];
|
||||
if (get_dock_mac_from_vpd(buf, sizeof(buf)) != NULL) {
|
||||
printk(BIOS_INFO, "RO_VPD, dock_mac=%s\n", buf);
|
||||
|
||||
/* remove ':' from mac address string */
|
||||
size_t len = strlen(buf);
|
||||
int i, j;
|
||||
for (i = 0; i < len; i++) {
|
||||
if (buf[i] == ':') {
|
||||
for (j = i; j < len; j++)
|
||||
buf[j] = buf[j+1];
|
||||
len--;
|
||||
i--;
|
||||
}
|
||||
}
|
||||
buf[len] = '\0';
|
||||
|
||||
/* Format expected by the Linux kernel r8152 driver */
|
||||
/* "_AUXMAC_#XXXXXXXXXXXX#" */
|
||||
int acpi_buf_len = snprintf(acpi_buf, sizeof(acpi_buf), "_AUXMAC_#%s#", buf);
|
||||
|
||||
acpigen_write_scope("\\_SB");
|
||||
acpigen_write_method_serialized("AMAC", 0);
|
||||
|
||||
acpigen_write_return_byte_buffer((uint8_t *)acpi_buf, acpi_buf_len);
|
||||
|
||||
acpigen_write_method_end();
|
||||
acpigen_write_scope_end();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue