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>
			
			
This commit is contained in:
		
				
					committed by
					
						 Patrick Georgi
						Patrick Georgi
					
				
			
			
				
	
			
			
			
						parent
						
							2736c82956
						
					
				
				
					commit
					6017abbc2c
				
			| @@ -161,21 +161,10 @@ static void emit_sar_acpi_structures(const struct device *dev) | |||||||
| 	acpigen_pop_len(); | 	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 */ | 	/* Device */ | ||||||
| 	acpigen_write_scope(path); | 	acpigen_write_device(path); | ||||||
| 	acpigen_write_device(acpi_device_name(dev)); |  | ||||||
| 	acpi_device_write_uid(dev); | 	acpi_device_write_uid(dev); | ||||||
|  |  | ||||||
| 	if (dev->chip_ops) | 	if (dev->chip_ops) | ||||||
| @@ -184,6 +173,16 @@ void wifi_generic_fill_ssdt(const struct device *dev) | |||||||
| 	/* Address */ | 	/* Address */ | ||||||
| 	acpigen_write_ADR_pci_device(dev); | 	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 */ | 	/* Wake capabilities */ | ||||||
| 	if (config) | 	if (config) | ||||||
| 		acpigen_write_PRW(config->wake, ACPI_S3); | 		acpigen_write_PRW(config->wake, ACPI_S3); | ||||||
| @@ -213,11 +212,25 @@ void wifi_generic_fill_ssdt(const struct device *dev) | |||||||
| 	if (CONFIG(USE_SAR)) | 	if (CONFIG(USE_SAR)) | ||||||
| 		emit_sar_acpi_structures(dev); | 		emit_sar_acpi_structures(dev); | ||||||
|  |  | ||||||
| 	acpigen_pop_len(); /* Device */ |  | ||||||
| 	acpigen_pop_len(); /* Scope */ | 	acpigen_pop_len(); /* Scope */ | ||||||
|  |  | ||||||
| 	printk(BIOS_INFO, "%s.%s: %s %s\n", path, acpi_device_name(dev), | 	printk(BIOS_INFO, "%s: %s %s\n", scope, dev->chip_ops ? dev->chip_ops->name : "", | ||||||
| 	       dev->chip_ops ? dev->chip_ops->name : "", dev_path(dev)); | 	       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) | const char *wifi_generic_acpi_name(const struct device *dev) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user