diff options
Diffstat (limited to 'src/soc')
-rw-r--r-- | src/soc/intel/common/block/dtt/dtt.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/soc/intel/common/block/dtt/dtt.c b/src/soc/intel/common/block/dtt/dtt.c index a1a03ec289..1d70335491 100644 --- a/src/soc/intel/common/block/dtt/dtt.c +++ b/src/soc/intel/common/block/dtt/dtt.c @@ -1,8 +1,11 @@ /* SPDX-License-Identifier: GPL-2.0-or-later */ +#include <acpi/acpigen.h> +#include <acpi/acpigen_pci.h> #include <device/device.h> #include <device/pci.h> #include <device/pci_ids.h> +#include <intelblocks/acpi.h> static const unsigned short pci_device_ids[] = { PCI_DID_INTEL_RPL_DTT, @@ -14,12 +17,34 @@ static const unsigned short pci_device_ids[] = { 0 }; +static void dtt_acpi_fill_ssdt(const struct device *dev) +{ + /* Skip if DPTF driver in use since TCPU device will already exist */ + if (CONFIG(DRIVERS_INTEL_DPTF)) + return; + + const char *scope = acpi_device_scope(dev); + + if (!scope) + return; + + acpigen_write_scope(scope); + acpigen_write_device(soc_acpi_name(dev)); + acpigen_write_ADR_pci_device(dev); + acpigen_write_STA(acpi_device_status(dev)); + acpigen_pop_len(); /* Device */ + acpigen_pop_len(); /* Scope */ +} + static struct device_operations dptf_dev_ops = { .read_resources = pci_dev_read_resources, .set_resources = pci_dev_set_resources, .enable_resources = pci_dev_enable_resources, .scan_bus = scan_generic_bus, .ops_pci = &pci_dev_ops_pci, +#if CONFIG(HAVE_ACPI_TABLES) + .acpi_fill_ssdt = dtt_acpi_fill_ssdt, +#endif }; static const struct pci_driver pch_dptf __pci_driver = { |