diff options
author | Furquan Shaikh <furquan@google.com> | 2020-10-27 17:41:09 -0700 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2020-11-02 06:13:54 +0000 |
commit | 6017abbc2c725aeff2b916fe2d67f868b36f6f9d (patch) | |
tree | d632d6a2ef6c315b02d1c52d68116af37fd6035f /src | |
parent | 2736c82956d4c4969fd896688b8be0d16f3ab272 (diff) |
drivers/wifi/generic: Split wifi_generic_fill_ssdt into two functions
This change splits `wifi_generic_fill_ssdt()` into following two
functions:
1. `wifi_ssdt_write_device()`: This function writes the device, its
address, _UID and _DDN.
2. `wifi_ssdt_write_properties()`: This function writes the properties
for WiFi device like _PRW, regulatory domain and SAR.
This split is done so that the device write can be skipped for
CNVi devices in follow-up CLs. It will allow the SoC controller
representation for CNVi PCI device to be consistent with other
internal PCI devices in the device tree i.e. not requiring a
chip driver for the PCI device.
Because of this change, _PRW and SAR will be seen in a separate
block in SSDT disassembly, but it does not result in any functional
change.
Observed difference:
Before:
Scope (\_SB.PCI0.PBR1)
{
Device (WF00)
{
Name (_UID, 0xAA6343DC)
Name (_DDN, "WIFI Device")
Name (_ADR, 0x0000000000000000)
Name (_PRW, Package() { 0x08, 0x03 })
}
}
After:
Device (\_SB.PCI0.PBR1.WF00)
{
Name (_UID, 0xAA6343DC)
Name (_DDN, "WIFI Device")
Name (_ADR, 0x0000000000000000)
}
Scope (\_SB.PCI0.PBR1.WF00)
{
Name (_PRW, Package() { 0x08, 0x03 })
}
Change-Id: I8ab5e4684492ea3b1cf749e5b9e2008e7ec8fa28
Signed-off-by: Furquan Shaikh <furquan@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/46861
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/drivers/wifi/generic/acpi.c | 45 |
1 files changed, 29 insertions, 16 deletions
diff --git a/src/drivers/wifi/generic/acpi.c b/src/drivers/wifi/generic/acpi.c index f83d04ccc1..2afd99e485 100644 --- a/src/drivers/wifi/generic/acpi.c +++ b/src/drivers/wifi/generic/acpi.c @@ -161,21 +161,10 @@ static void emit_sar_acpi_structures(const struct device *dev) acpigen_pop_len(); } -void wifi_generic_fill_ssdt(const struct device *dev) +static void wifi_ssdt_write_device(const struct device *dev, const char *path) { - const char *path; - const struct drivers_wifi_generic_config *config = dev->chip_info; - - if (!dev->enabled) - return; - - path = acpi_device_path(dev->bus->dev); - if (!path) - return; - /* Device */ - acpigen_write_scope(path); - acpigen_write_device(acpi_device_name(dev)); + acpigen_write_device(path); acpi_device_write_uid(dev); if (dev->chip_ops) @@ -184,6 +173,16 @@ void wifi_generic_fill_ssdt(const struct device *dev) /* Address */ acpigen_write_ADR_pci_device(dev); + acpigen_pop_len(); /* Device */ +} + +static void wifi_ssdt_write_properties(const struct device *dev, const char *scope) +{ + const struct drivers_wifi_generic_config *config = dev->chip_info; + + /* Scope */ + acpigen_write_scope(scope); + /* Wake capabilities */ if (config) acpigen_write_PRW(config->wake, ACPI_S3); @@ -213,11 +212,25 @@ void wifi_generic_fill_ssdt(const struct device *dev) if (CONFIG(USE_SAR)) emit_sar_acpi_structures(dev); - acpigen_pop_len(); /* Device */ acpigen_pop_len(); /* Scope */ - printk(BIOS_INFO, "%s.%s: %s %s\n", path, acpi_device_name(dev), - dev->chip_ops ? dev->chip_ops->name : "", dev_path(dev)); + printk(BIOS_INFO, "%s: %s %s\n", scope, dev->chip_ops ? dev->chip_ops->name : "", + dev_path(dev)); +} + +void wifi_generic_fill_ssdt(const struct device *dev) +{ + const char *path; + + if (!dev->enabled) + return; + + path = acpi_device_path(dev); + if (!path) + return; + + wifi_ssdt_write_device(dev, path); + wifi_ssdt_write_properties(dev, path); } const char *wifi_generic_acpi_name(const struct device *dev) |