dptf: Introduce new paradigm for configuring DPTF parameters
Currently, configuring and reviewing DPTF parameters is difficult because DPTF tables and methods are defined in static ASL files, and are littered with #ifdefs which both define parameters and influence behavior (e.g., whether a method is included or not). This patch train is an effort to bring DPTF support to our ACPI DSDT/SSDT generation framework. This first patch is very minimal, and includes only creation of the DPTF device (in the DSDT). BUG=b:143539650 TEST=compiles (later tests get more comprehensive). Change-Id: I14df9f422c911677aeea25552ac1822a9462c58a Signed-off-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/41883 Reviewed-by: Duncan Laurie <dlaurie@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
f3668fc1de
commit
103bd5e4bb
|
@ -0,0 +1,7 @@
|
|||
config DRIVERS_INTEL_DPTF
|
||||
bool "Support runtime generation of Intel DPTF ACPI tables"
|
||||
depends on HAVE_ACPI_TABLES
|
||||
default n
|
||||
help
|
||||
When enabled, entries in the devicetree are used to generate
|
||||
Intel DPTF Tables at runtime in the SSDT.
|
|
@ -0,0 +1 @@
|
|||
ramstage-$(CONFIG_DRIVERS_INTEL_DPTF) += dptf.c
|
|
@ -0,0 +1,9 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#ifndef _DRIVERS_INTEL_DPTF_CHIP_H_
|
||||
#define _DRIVERS_INTEL_DPTF_CHIP_H_
|
||||
|
||||
struct drivers_intel_dptf_config {
|
||||
};
|
||||
|
||||
#endif /* _DRIVERS_INTEL_DPTF_CHIP_H_ */
|
|
@ -0,0 +1,56 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#include <acpi/acpigen.h>
|
||||
#include <console/console.h>
|
||||
#include <device/device.h>
|
||||
#include "chip.h"
|
||||
|
||||
static const char *dptf_acpi_name(const struct device *dev)
|
||||
{
|
||||
return "DPTF";
|
||||
}
|
||||
|
||||
/* Add custom tables and methods to SSDT */
|
||||
static void dptf_fill_ssdt(const struct device *dev)
|
||||
{
|
||||
struct drivers_intel_dptf_config *config = dev->chip_info;
|
||||
|
||||
printk(BIOS_INFO, "\\_SB.DPTF: %s at %s\n", dev->chip_ops->name, dev_path(dev));
|
||||
}
|
||||
|
||||
/* Add static definitions of DPTF devices into the DSDT */
|
||||
static void dptf_inject_dsdt(const struct device *dev)
|
||||
{
|
||||
const struct drivers_intel_dptf_config *config;
|
||||
|
||||
config = dev->chip_info;
|
||||
acpigen_write_scope("\\_SB");
|
||||
|
||||
/* Toplevel DPTF device */
|
||||
acpigen_write_device(acpi_device_name(dev));
|
||||
acpigen_write_name("_HID");
|
||||
acpigen_emit_eisaid("INT3400");
|
||||
acpigen_write_name_integer("_UID", 0);
|
||||
dptf_write_STA();
|
||||
|
||||
acpigen_pop_len(); /* DPTF Device */
|
||||
acpigen_pop_len(); /* Scope */
|
||||
}
|
||||
|
||||
static struct device_operations dptf_ops = {
|
||||
.read_resources = noop_read_resources,
|
||||
.set_resources = noop_set_resources,
|
||||
.acpi_name = dptf_acpi_name,
|
||||
.acpi_fill_ssdt = dptf_fill_ssdt,
|
||||
.acpi_inject_dsdt = dptf_inject_dsdt,
|
||||
};
|
||||
|
||||
static void dptf_enable_dev(struct device *dev)
|
||||
{
|
||||
dev->ops = &dptf_ops;
|
||||
}
|
||||
|
||||
struct chip_operations drivers_intel_dptf_ops = {
|
||||
CHIP_NAME("Intel DPTF")
|
||||
.enable_dev = dptf_enable_dev,
|
||||
};
|
Loading…
Reference in New Issue