[PATCH v3 00/57] dm: Add programatic generation of ACPI tables (part D)

Simon Glass
2020-09-06T21:43:08Z

Note: This is part D of this effort. With this, Coral includes all
required ACPI tables.

At present on x86 U-Boot supports creating ACPI (Advanced Configuration
and Power Interface) tables using the Intel ACPI Source Language (ASL)
compiler.

This is good enough for basic operation but some devices need to add
their information dynamically at runtime. An example is a device that
needs to report its enable GPIO. This is described in the device tree,
so we want to add code in the driver to convert that device-tree
description into an ACPI description for use on Linux.

This series adds support for generation of ACPI tables and fragments by
devices. The core support is built into driver model.

Several files are brought over from coreboot to do the actual generation.

As an example of using this new feature, chromebook_coral is updated to
write out a wide array of ACPI tables including DSDT and SSDT.

This initial version of the series lays out the general approach. More
work is needed to figure out the difference between CONFIG_ACPIGEN and
CONFIG_GENERATE_ACPI_TABLE with respect to what is built.

Changes in v3:
- Rebase to master

Changes in v2:
- Add new patch to allow more space for U-Boot on link
- Add new patch to move include of bitops out of ACPI region
- Fix incorrect space in enable-off-delay-ms
- Rebase to master
- add new patch to fix polarity type in acpi_dp_add_gpio()

Changes in v1:
- Add NHLT audio support
- Add NHLT information
- Add comments
- Add more comments and rename cpu_get_bus_clock to cpu_get_bus_clock_khz()
- Add new patch with coral audio descriptor files
- Add support for NHLT table
- Adjust implementation to match new ACPI GPIO generation
- Capitalise ACPI_OPS_PTR
- Don't build for SPL
- Drop unnecessary callbacks
- Fix i2c PCI addresses
- Handle table generation without callbacks
- Move ASL_REVISION define into this patch
- Move acpi_create_dbg2() into generic code
- Move the acpi.h header file to this commit
- Move this code into an x86-specific file
- Put this code in an x86-specific place and update commit message
- Rename acpi-probed to linux,probed
- Rename cpi,hid-desc-reg-offset to hid-desc-addr
- Split PCT and PTC tables into a separate patch
- Support hid-over-i2c separately as well
- UIse hid-over-i2 compatible string
- Update ACPI ordering to include multiple CPUs
- Update commit message
- Update commit message with a comma
- Update for acpi_device_write_i2c_dev() return-value change
- Use OEM_TABLE_ID instead of ACPI_TABLE_CREATOR
- Use SHIFT and MASK for defines
- Use acpi,ddn instead of acpi,desc
- Use this file in APL
- Use updated acpi_device_write_dsm_i2c_hid() function

Simon Glass (57):
x86: acpi: Add cros_ec tables
x86: acpi: Add base asl files for common x86 devices
x86: acpi: apl: Add asl files for Apollo Lake
x86: acpi: Add DPTF asl files
x86: apl: Correct PCIE_ECAM_BASE
x86: Add a config for the systemagent PCIEX regions size
x86: Add a common global NVS structure
x86: acpi: Support external GNVS tables
x86: acpi: Expand the GNVS
x86: coral: Add ACPI tables for coral
acpi: Add support for writing a _PRW
acpi: Add support for conditions and return values
acpi: Support generating a multi-function _DSM for devices
dm: acpi: Use correct GPIO polarity type in acpi_dp_add_gpio()
x86: link: Allow more space for U-Boot
i2c: Add a generic driver to generate ACPI info
x86: Add wake sources for the acpi_gpe driver
x86: apl: Support writing the IntelGraphicsMem table
x86: acpi: Add a common routine to write WiFi info
x86: Add some definitions for SMM
x86: apl: Add power-management definitions
x86: apl: Update iomap for ACPI
x86: Add a few common Intel CPU functions
x86: acpi: Support generation of the HPET table
x86: acpi: Support generation of the DBG2 table
acpi: Add support for generating processor tables
x86: acpi: Add PCT and PTC tables
acpi: Add more support for generating processor tables
x86: acpi: Add common Intel ACPI tables
x86: Support Atom SoCs using SWSMISCI rather than the SWSCI
x86: acpi: Add support for additional Intel tables
x86: apl: Allow reading hostbridge base addresses
p2sb: Add some definitions used for ACPI
x86: apl: Generate required ACPI tables
x86: apl: Add support for hostbridge ACPI generation
x86: apl: Generate CPU tables
x86: apl: Generate ACPI table for LPC
x86: apl: Drop unnecessary code in PMC driver
tpm: cr50: Add ACPI support
x86: fsp: Update the FSP API with the end-firmware method
x86: cpu: Report address width from cpu_get_info()
x86: Sort the MTRR table
x86: Notify the FSP of the 'end firmware' event
x86: Correct the assembly guard in e820.h
x86: Add a header guard to asm/acpi_table.h
x86: Correct handling of MADT table CPUs
acpi: tpm: Add a TPM2 table
acpi: tpm: Add a TPM1 table
x86: acpi: Set the log category for x86 table generation
x86: coral: Add audio descriptor files
x86: apl: Check low-level init in FSP-S pre-init
x86: fsp: Add more debugging for silicon init
x86: fsp: Show FSP-S or FSP-M address in fsp_get_header()
acpi: Use defines for field lengths
x86: Add a way to add to the e820 memory table
x86: Move include of bitops out of ACPI region
x86: coral: Update config and device tree for ACPI

arch/x86/Kconfig | 47 ++
arch/x86/cpu/apollolake/Kconfig | 4 +
arch/x86/cpu/apollolake/Makefile | 1 +
arch/x86/cpu/apollolake/acpi.c | 211 ++++++
arch/x86/cpu/apollolake/cpu.c | 77 +++
arch/x86/cpu/apollolake/fsp_s.c | 2 +
arch/x86/cpu/apollolake/hostbridge.c | 244 ++++++-
arch/x86/cpu/apollolake/lpc.c | 18 +
arch/x86/cpu/apollolake/pmc.c | 8 +-
arch/x86/cpu/cpu.c | 15 +
arch/x86/cpu/i386/cpu.c | 23 +
arch/x86/cpu/intel_common/Makefile | 7 +
arch/x86/cpu/intel_common/acpi.c | 377 ++++++++++
arch/x86/cpu/intel_common/cpu.c | 79 +++
arch/x86/cpu/intel_common/generic_wifi.c | 120 ++++
arch/x86/cpu/intel_common/intel_opregion.c | 168 +++++
arch/x86/cpu/mtrr.c | 12 +
arch/x86/cpu/x86_64/cpu.c | 5 +
arch/x86/dts/chromebook_coral.dts | 224 +++++-
arch/x86/include/asm/acpi/chromeos.asl | 108 +++
arch/x86/include/asm/acpi/cpu.asl | 25 +
arch/x86/include/asm/acpi/cros_ec/ac.asl | 22 +
arch/x86/include/asm/acpi/cros_ec/als.asl | 56 ++
arch/x86/include/asm/acpi/cros_ec/battery.asl | 411 +++++++++++
arch/x86/include/asm/acpi/cros_ec/cros_ec.asl | 57 ++
arch/x86/include/asm/acpi/cros_ec/ec.asl | 557 +++++++++++++++
arch/x86/include/asm/acpi/cros_ec/emem.asl | 53 ++
.../asm/acpi/cros_ec/keyboard_backlight.asl | 52 ++
arch/x86/include/asm/acpi/cros_ec/pd.asl | 15 +
arch/x86/include/asm/acpi/cros_ec/superio.asl | 159 +++++
arch/x86/include/asm/acpi/cros_ec/tbmc.asl | 23 +
arch/x86/include/asm/acpi/cros_gnvs.asl | 29 +
arch/x86/include/asm/acpi/dptf/charger.asl | 65 ++
arch/x86/include/asm/acpi/dptf/cpu.asl | 186 +++++
arch/x86/include/asm/acpi/dptf/dptf.asl | 121 ++++
arch/x86/include/asm/acpi/dptf/fan.asl | 57 ++
arch/x86/include/asm/acpi/dptf/thermal.asl | 521 ++++++++++++++
arch/x86/include/asm/acpi/global_nvs.h | 5 +-
arch/x86/include/asm/acpi/lpc.asl | 141 ++++
arch/x86/include/asm/acpi/pci_osc.asl | 21 +
arch/x86/include/asm/acpi/pcr.asl | 80 +++
arch/x86/include/asm/acpi/ramoops.asl | 32 +
arch/x86/include/asm/acpi/sleepstates.asl | 12 +-
arch/x86/include/asm/acpi_table.h | 162 +++++
arch/x86/include/asm/acpigen.h | 35 +
arch/x86/include/asm/arch-apollolake/acpi.h | 18 +
.../include/asm/arch-apollolake/acpi/dptf.asl | 35 +
.../asm/arch-apollolake/acpi/globalnvs.asl | 41 ++
.../include/asm/arch-apollolake/acpi/gpio.asl | 191 ++++++
.../asm/arch-apollolake/acpi/gpiolib.asl | 109 +++
.../include/asm/arch-apollolake/acpi/lpss.asl | 105 +++
.../asm/arch-apollolake/acpi/northbridge.asl | 120 ++++
.../asm/arch-apollolake/acpi/pch_hda.asl | 77 +++
.../asm/arch-apollolake/acpi/pci_irqs.asl | 52 ++
.../include/asm/arch-apollolake/acpi/pcie.asl | 22 +
.../asm/arch-apollolake/acpi/pcie_port.asl | 113 +++
.../asm/arch-apollolake/acpi/platform.asl | 10 +
.../asm/arch-apollolake/acpi/pmc_ipc.asl | 49 ++
.../include/asm/arch-apollolake/acpi/scs.asl | 173 +++++
.../asm/arch-apollolake/acpi/soc_int.asl | 50 ++
.../asm/arch-apollolake/acpi/southbridge.asl | 34 +
.../include/asm/arch-apollolake/acpi/xhci.asl | 33 +
.../arch-apollolake/acpi/xhci_apl_ports.asl | 23 +
.../arch-apollolake/acpi/xhci_glk_ports.asl | 24 +
.../include/asm/arch-apollolake/global_nvs.h | 23 +-
arch/x86/include/asm/arch-apollolake/gpe.h | 135 ++++
arch/x86/include/asm/arch-apollolake/gpio.h | 3 +
arch/x86/include/asm/arch-apollolake/iomap.h | 16 +
arch/x86/include/asm/arch-apollolake/pm.h | 40 +-
.../include/asm/arch-apollolake/systemagent.h | 31 +
arch/x86/include/asm/cpu.h | 9 +
arch/x86/include/asm/cpu_common.h | 56 ++
arch/x86/include/asm/e820.h | 3 +-
arch/x86/include/asm/fsp/fsp_api.h | 15 +-
arch/x86/include/asm/intel_acpi.h | 52 ++
arch/x86/include/asm/intel_gnvs.h | 44 ++
arch/x86/include/asm/intel_opregion.h | 247 +++++++
arch/x86/include/asm/smm.h | 27 +
arch/x86/lib/Makefile | 1 +
arch/x86/lib/acpi_table.c | 390 ++++++++++-
arch/x86/lib/acpigen.c | 96 +++
arch/x86/lib/fsp/fsp_common.c | 16 +
arch/x86/lib/fsp/fsp_dram.c | 17 +
arch/x86/lib/fsp/fsp_graphics.c | 32 +
arch/x86/lib/fsp2/fsp_silicon_init.c | 4 +-
arch/x86/lib/fsp2/fsp_support.c | 22 +-
board/google/chromebook_coral/Kconfig | 2 +-
board/google/chromebook_coral/Makefile | 1 +
.../chromebook_coral/baseboard_dptf.asl | 71 ++
board/google/chromebook_coral/coral.c | 135 ++++
.../chromebook_coral/dialog-2ch-48khz-24b.dat | Bin 0 -> 100 bytes
.../chromebook_coral/dmic-1ch-48khz-16b.dat | Bin 0 -> 3048 bytes
.../chromebook_coral/dmic-2ch-48khz-16b.dat | Bin 0 -> 3048 bytes
.../chromebook_coral/dmic-4ch-48khz-16b.dat | Bin 0 -> 3048 bytes
board/google/chromebook_coral/dsdt.asl | 60 ++
.../max98357-render-2ch-48khz-24b.dat | Bin 0 -> 116 bytes
.../google/chromebook_coral/variant_dptf.asl | 6 +
board/google/chromebook_coral/variant_ec.h | 75 ++
board/google/chromebook_coral/variant_gpio.h | 63 ++
configs/chromebook_coral_defconfig | 13 +-
configs/chromebook_link_defconfig | 2 +-
doc/device-tree-bindings/chosen.txt | 18 +
doc/device-tree-bindings/device.txt | 3 +
doc/device-tree-bindings/i2c/generic-acpi.txt | 42 ++
drivers/core/Kconfig | 9 +
drivers/i2c/Makefile | 3 +
drivers/i2c/acpi_i2c.c | 226 ++++++
drivers/i2c/acpi_i2c.h | 15 +
drivers/i2c/i2c-uclass.c | 17 +
drivers/sound/max98357a.c | 2 +-
drivers/tpm/cr50_i2c.c | 55 ++
include/acpi/acpi_device.h | 69 ++
include/acpi/acpi_dp.h | 2 +-
include/acpi/acpi_s3.h | 4 +
include/acpi/acpi_table.h | 140 +++-
include/acpi/acpigen.h | 415 +++++++++++
include/bloblist.h | 8 +
include/i2c.h | 23 +
include/p2sb.h | 8 +
include/power/acpi_pmc.h | 4 +-
lib/acpi/acpi_device.c | 43 ++
lib/acpi/acpi_dp.c | 4 +-
lib/acpi/acpi_table.c | 64 ++
lib/acpi/acpigen.c | 354 ++++++++++
test/dm/acpi_dp.c | 4 +-
test/dm/acpigen.c | 647 ++++++++++++++++++
126 files changed, 9696 insertions(+), 116 deletions(-)
create mode 100644 arch/x86/cpu/apollolake/acpi.c
create mode 100644 arch/x86/cpu/intel_common/acpi.c
create mode 100644 arch/x86/cpu/intel_common/generic_wifi.c
create mode 100644 arch/x86/cpu/intel_common/intel_opregion.c
create mode 100644 arch/x86/include/asm/acpi/chromeos.asl
create mode 100644 arch/x86/include/asm/acpi/cpu.asl
create mode 100644 arch/x86/include/asm/acpi/cros_ec/ac.asl
create mode 100644 arch/x86/include/asm/acpi/cros_ec/als.asl
create mode 100644 arch/x86/include/asm/acpi/cros_ec/battery.asl
create mode 100644 arch/x86/include/asm/acpi/cros_ec/cros_ec.asl
create mode 100644 arch/x86/include/asm/acpi/cros_ec/ec.asl
create mode 100644 arch/x86/include/asm/acpi/cros_ec/emem.asl
create mode 100644 arch/x86/include/asm/acpi/cros_ec/keyboard_backlight.asl
create mode 100644 arch/x86/include/asm/acpi/cros_ec/pd.asl
create mode 100644 arch/x86/include/asm/acpi/cros_ec/superio.asl
create mode 100644 arch/x86/include/asm/acpi/cros_ec/tbmc.asl
create mode 100644 arch/x86/include/asm/acpi/cros_gnvs.asl
create mode 100644 arch/x86/include/asm/acpi/dptf/charger.asl
create mode 100644 arch/x86/include/asm/acpi/dptf/cpu.asl
create mode 100644 arch/x86/include/asm/acpi/dptf/dptf.asl
create mode 100644 arch/x86/include/asm/acpi/dptf/fan.asl
create mode 100644 arch/x86/include/asm/acpi/dptf/thermal.asl
create mode 100644 arch/x86/include/asm/acpi/lpc.asl
create mode 100644 arch/x86/include/asm/acpi/pci_osc.asl
create mode 100644 arch/x86/include/asm/acpi/pcr.asl
create mode 100644 arch/x86/include/asm/acpi/ramoops.asl
create mode 100644 arch/x86/include/asm/acpigen.h
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi.h
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/dptf.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/globalnvs.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/gpio.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/gpiolib.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/lpss.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/northbridge.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/pch_hda.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/pci_irqs.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/pcie.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/pcie_port.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/platform.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/pmc_ipc.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/scs.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/soc_int.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/southbridge.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/xhci.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/xhci_apl_ports.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/acpi/xhci_glk_ports.asl
create mode 100644 arch/x86/include/asm/arch-apollolake/gpe.h
create mode 100644 arch/x86/include/asm/intel_acpi.h
create mode 100644 arch/x86/include/asm/intel_gnvs.h
create mode 100644 arch/x86/include/asm/intel_opregion.h
create mode 100644 arch/x86/include/asm/smm.h
create mode 100644 arch/x86/lib/acpigen.c
create mode 100644 board/google/chromebook_coral/baseboard_dptf.asl
create mode 100644 board/google/chromebook_coral/dialog-2ch-48khz-24b.dat
create mode 100644 board/google/chromebook_coral/dmic-1ch-48khz-16b.dat
create mode 100644 board/google/chromebook_coral/dmic-2ch-48khz-16b.dat
create mode 100644 board/google/chromebook_coral/dmic-4ch-48khz-16b.dat
create mode 100644 board/google/chromebook_coral/dsdt.asl
create mode 100644 board/google/chromebook_coral/max98357-render-2ch-48khz-24b.dat
create mode 100644 board/google/chromebook_coral/variant_dptf.asl
create mode 100644 board/google/chromebook_coral/variant_ec.h
create mode 100644 board/google/chromebook_coral/variant_gpio.h
create mode 100644 doc/device-tree-bindings/i2c/generic-acpi.txt
create mode 100644 drivers/i2c/acpi_i2c.c
create mode 100644 drivers/i2c/acpi_i2c.h

--
2.28.0.526.ge36021eeef-goog