arch/x86/acpi_device: Add a helper function to write PCI device
This change adds a helper function to write a PCI device with _ADR and _STA defined for it. BUG=b:153858769 Signed-off-by: Furquan Shaikh <furquan@google.com> Change-Id: I932af917d91198876fe8e90af9bb7a2531bd8960 Reviewed-on: https://review.coreboot.org/c/coreboot/+/40674 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
ef0cb90ae3
commit
d1130af40e
|
@ -1,6 +1,7 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
/* This file is part of the coreboot project. */
|
/* This file is part of the coreboot project. */
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <arch/acpi.h>
|
#include <arch/acpi.h>
|
||||||
#include <arch/acpi_device.h>
|
#include <arch/acpi_device.h>
|
||||||
|
@ -927,3 +928,34 @@ struct acpi_dp *acpi_dp_add_gpio(struct acpi_dp *dp, const char *name,
|
||||||
|
|
||||||
return gpio;
|
return gpio;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function writes a PCI device with _ADR object:
|
||||||
|
* Example:
|
||||||
|
* Scope (\_SB.PCI0)
|
||||||
|
* {
|
||||||
|
* Device (IGFX)
|
||||||
|
* {
|
||||||
|
* Name (_ADR, 0x0000000000000000)
|
||||||
|
* Method (_STA, 0, NotSerialized) { Return (status) }
|
||||||
|
* }
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
void acpi_device_write_pci_dev(struct device *dev)
|
||||||
|
{
|
||||||
|
const char *scope = acpi_device_scope(dev);
|
||||||
|
const char *name = acpi_device_name(dev);
|
||||||
|
|
||||||
|
assert(dev->path.type == DEVICE_PATH_PCI);
|
||||||
|
assert(name);
|
||||||
|
assert(scope);
|
||||||
|
|
||||||
|
acpigen_write_scope(scope);
|
||||||
|
acpigen_write_device(name);
|
||||||
|
|
||||||
|
acpigen_write_ADR_pci_device(dev);
|
||||||
|
acpigen_write_STA(acpi_device_status(dev));
|
||||||
|
|
||||||
|
acpigen_pop_len(); /* Device */
|
||||||
|
acpigen_pop_len(); /* Scope */
|
||||||
|
}
|
||||||
|
|
|
@ -501,4 +501,13 @@ size_t acpi_dp_add_property_list(struct acpi_dp *dp,
|
||||||
/* Write Device Property hierarchy and clean up resources */
|
/* Write Device Property hierarchy and clean up resources */
|
||||||
void acpi_dp_write(struct acpi_dp *table);
|
void acpi_dp_write(struct acpi_dp *table);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Helper function to write a PCI device with _ADR object defined.
|
||||||
|
*
|
||||||
|
* IMPORTANT: Scope of a device created in SSDT cannot be used to add ACPI nodes under that
|
||||||
|
* scope in DSDT. So, if there are any references to this PCI device scope required from static
|
||||||
|
* asl files, do not use this function and instead add the device to DSDT as well.
|
||||||
|
*/
|
||||||
|
void acpi_device_write_pci_dev(struct device *dev);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue