[PATCH 00/40] RFC: rpi: Enable ACPI booting on ARM with Raspberry Pi 4
Simon Glass
sjg at chromium.org
Wed Dec 1 17:02:34 CET 2021
At present in U-Boot ACPI tables are only generated for x86 devices. It is
possible to build them for ARM as well. That is the subject of this
series.
The goal is to allow a rpi4 boot into Linux on ARM using ACPI rather than
devicetree. This is not due to any feeling that ACPI offers advantages to
the boot flow, merely because it can be done.
This goal is not yet achieved. Mostly all that is achieved is some
refactoring of the ACPI code, but that is enough to get things at least
building on ARM. The rpi-4 the tables are installed and the board boots
to grub, where it is then unable to find the OS on the USB stick that is
inserted. Further work is needed to complete things, but the ACPI changes
can be applied as is.
In terms of review, please ignore the RFC/WIP patches as they need to be
reworked. I am sending this series in this state to avoid sitting on
patches for too long and risking duplicate effort.
The following tables are emitted with this series:
- GTDT - Generic Timer Description Table
- APIC - Multiple Advanced Programmable Interrupt Controller
Description Table (some new records for ARM)
- DSDT - Differentiated System Description Table
- DBG2 - Debug Port Table 2
- FACP - Firmware ACPI Control Structure
- CSRT - Core System Resource Table
- PPTT - Processor Properties Topology Table
Missing still are:
- SSDR - Secondary System Description Table
- BGRT - Boot Graphics Resource Table
Future work is needed to:
- Finish the remaining two tables
- Get things booting nicely on rpi4
- Find a nice way to select between ACPI and devicetree at runtime
- Obtain the ACPI information from the devicetree instead of #defines
- Use the U-Boot bcm headers instead of importing new ones
- Drop the unused files
- Add some documentation
To test it, boot U-Boot on a rpi_4 with a suitable distribution.
This series is available at u-boot-dm/acpi-working
Simon Glass (40):
Makefile: Allow LTO to be disabled for a build
x86: Allow any arch to generate ACPI tables
x86: Move the acpi table to generic global_data
arm: Allow supporting ACPI-table generation
x86: Tidy up use of CONFIG_ACPIGEN
sandbox: Allow building with GENERATE_ACPI_TABLE
efi: Correct call to write_acpi_tables()
efi: Correct address handling with ACPI tables
acpi: Use finer-grained control of ACPI-table generation
acpi: Allow include files within the board directory
acpi: Move acpi_fill_header() to the generic header
acpi: Add a table start
acpi: Add a linker list for ACPI tables
x86: acpi: Split out context creation from base tables
x86: Use the ACPI table writer
x86: Move base tables to a writer function
x86: Move FACS table to a writer function
x86: Move DSDT table to a writer function
x86: Move GNVS table to a writer function
x86: Move FADT table to a writer function
x86: Move FACP table into separate functions
x86: Move SSDT table to a writer function
x86: Move TPM2 table to a writer function
x86: Move MADT table to a writer function
x86: Move TCPA table to a writer function
x86: Move CSRT table to a writer function
x86: acpi: Update acpi_fill_csrt() to use acpi_ctx
x86: Move device-specific ACPI tables to a writer function
x86: Move acpi_get_rsdp_addr() ACPI tables to the writer
acpi: Collect tables in the acpi_item list
acpi: Tidy up the item list
acpi: Tidy up the table list
doc: Add usage information for the acpi command
acpi: Add some tables needed by ARM devices
acpi: Add myself as maintainer
WIP: Add debugging for ACPI emission
RFC: Allow passing ACPI tables to bootefi
WIP: Add ASL files from tianocore
WIP: Bring in some header files from tianocore
RFC: rpi: Enable booting with ACPI tables
MAINTAINERS | 6 +
Makefile | 18 +-
arch/Kconfig | 6 +-
arch/arm/config.mk | 4 +-
arch/arm/include/asm/acpi_table.h | 15 +
arch/arm/include/asm/global_data.h | 2 +-
.../mach-bcm283x/include/mach/acpi/bcm2711.h | 93 +++
.../mach-bcm283x/include/mach/acpi/bcm2836.h | 124 +++
.../include/mach/acpi/bcm2836_gpio.h | 85 ++
.../include/mach/acpi/bcm2836_gpu.h | 48 ++
.../include/mach/acpi/bcm2836_pwm.h | 34 +
.../include/mach/acpi/bcm2836_sdhost.h | 90 ++
.../include/mach/acpi/bcm2836_sdio.h | 203 +++++
arch/sandbox/include/asm/acpi_table.h | 2 +
arch/sandbox/include/asm/global_data.h | 1 -
arch/sandbox/include/asm/tables.h | 0
arch/x86/Kconfig | 9 -
arch/x86/cpu/apollolake/acpi.c | 17 +-
arch/x86/cpu/baytrail/acpi.c | 27 +-
arch/x86/cpu/quark/acpi.c | 27 +-
arch/x86/cpu/tangier/acpi.c | 34 +-
arch/x86/include/asm/acpi_table.h | 4 -
arch/x86/include/asm/global_data.h | 1 -
arch/x86/lib/Makefile | 2 +-
arch/x86/lib/acpi_table.c | 374 +++------
board/raspberrypi/rpi/Makefile | 2 +
board/raspberrypi/rpi/acpitables.h | 189 +++++
board/raspberrypi/rpi/acpitables.inf | 79 ++
board/raspberrypi/rpi/csrt.aslc | 330 ++++++++
board/raspberrypi/rpi/dbg2miniuart.aslc | 81 ++
board/raspberrypi/rpi/dbg2pl011.aslc | 81 ++
board/raspberrypi/rpi/dsdt.asl | 285 +++++++
board/raspberrypi/rpi/emmc.asl | 166 ++++
board/raspberrypi/rpi/fadt.aslc | 96 +++
board/raspberrypi/rpi/gpudevs.asl | 397 +++++++++
board/raspberrypi/rpi/gtdt.aslc | 55 ++
board/raspberrypi/rpi/iort.aslc | 100 +++
board/raspberrypi/rpi/madt.aslc | 78 ++
board/raspberrypi/rpi/pci.asl | 168 ++++
board/raspberrypi/rpi/pep.asl | 90 ++
board/raspberrypi/rpi/pep.c | 79 ++
board/raspberrypi/rpi/pep.h | 121 +++
board/raspberrypi/rpi/pptt.aslc | 191 +++++
board/raspberrypi/rpi/rhpx.asl | 195 +++++
board/raspberrypi/rpi/rpi.c | 460 +++++++++-
board/raspberrypi/rpi/rpi4.dsc | 790 ++++++++++++++++++
board/raspberrypi/rpi/sdhc.asl | 119 +++
board/raspberrypi/rpi/spcrminiuart.aslc | 91 ++
board/raspberrypi/rpi/spcrpl011.aslc | 91 ++
board/raspberrypi/rpi/ssdtthermal.asl | 77 ++
board/raspberrypi/rpi/uart.asl | 202 +++++
board/raspberrypi/rpi/xhci.asl | 165 ++++
cmd/acpi.c | 13 +-
cmd/bootefi.c | 44 +-
configs/cherryhill_defconfig | 1 +
configs/chromebook_link64_defconfig | 1 +
configs/chromebook_link_defconfig | 1 +
configs/chromebook_samus_tpl_defconfig | 1 +
configs/coreboot64_defconfig | 1 +
configs/coreboot_defconfig | 1 +
configs/crownbay_defconfig | 1 +
configs/efi-x86_payload32_defconfig | 1 +
configs/efi-x86_payload64_defconfig | 1 +
configs/rpi_4_defconfig | 2 +
configs/slimbootloader_defconfig | 1 +
configs/tools-only_defconfig | 1 +
doc/build/gcc.rst | 17 +
doc/usage/acpi.rst | 235 ++++++
doc/usage/index.rst | 1 +
drivers/core/acpi.c | 70 +-
drivers/misc/qfw.c | 3 +-
include/acpi/acpi_table.h | 235 +++++-
include/asm-generic/global_data.h | 8 +
include/dm/acpi.h | 110 +++
lib/Kconfig | 18 +
lib/Makefile | 2 +-
lib/acpi/Makefile | 23 +-
lib/acpi/acpi_table.c | 82 --
lib/acpi/acpi_writer.c | 132 +++
lib/acpi/base.c | 94 +++
lib/acpi/csrt.c | 49 ++
lib/acpi/dsdt.c | 55 ++
lib/acpi/facs.c | 35 +
lib/acpi/ssdt.c | 49 ++
lib/efi_loader/Makefile | 2 -
lib/efi_loader/efi_acpi.c | 5 +-
scripts/Makefile.lib | 3 +-
test/dm/acpi.c | 79 +-
88 files changed, 6875 insertions(+), 506 deletions(-)
create mode 100644 arch/arm/mach-bcm283x/include/mach/acpi/bcm2711.h
create mode 100644 arch/arm/mach-bcm283x/include/mach/acpi/bcm2836.h
create mode 100644 arch/arm/mach-bcm283x/include/mach/acpi/bcm2836_gpio.h
create mode 100644 arch/arm/mach-bcm283x/include/mach/acpi/bcm2836_gpu.h
create mode 100644 arch/arm/mach-bcm283x/include/mach/acpi/bcm2836_pwm.h
create mode 100644 arch/arm/mach-bcm283x/include/mach/acpi/bcm2836_sdhost.h
create mode 100644 arch/arm/mach-bcm283x/include/mach/acpi/bcm2836_sdio.h
create mode 100644 arch/sandbox/include/asm/tables.h
create mode 100644 board/raspberrypi/rpi/acpitables.h
create mode 100644 board/raspberrypi/rpi/acpitables.inf
create mode 100644 board/raspberrypi/rpi/csrt.aslc
create mode 100644 board/raspberrypi/rpi/dbg2miniuart.aslc
create mode 100644 board/raspberrypi/rpi/dbg2pl011.aslc
create mode 100644 board/raspberrypi/rpi/dsdt.asl
create mode 100644 board/raspberrypi/rpi/emmc.asl
create mode 100644 board/raspberrypi/rpi/fadt.aslc
create mode 100644 board/raspberrypi/rpi/gpudevs.asl
create mode 100644 board/raspberrypi/rpi/gtdt.aslc
create mode 100644 board/raspberrypi/rpi/iort.aslc
create mode 100644 board/raspberrypi/rpi/madt.aslc
create mode 100644 board/raspberrypi/rpi/pci.asl
create mode 100644 board/raspberrypi/rpi/pep.asl
create mode 100644 board/raspberrypi/rpi/pep.c
create mode 100644 board/raspberrypi/rpi/pep.h
create mode 100644 board/raspberrypi/rpi/pptt.aslc
create mode 100644 board/raspberrypi/rpi/rhpx.asl
create mode 100644 board/raspberrypi/rpi/rpi4.dsc
create mode 100644 board/raspberrypi/rpi/sdhc.asl
create mode 100644 board/raspberrypi/rpi/spcrminiuart.aslc
create mode 100644 board/raspberrypi/rpi/spcrpl011.aslc
create mode 100644 board/raspberrypi/rpi/ssdtthermal.asl
create mode 100644 board/raspberrypi/rpi/uart.asl
create mode 100644 board/raspberrypi/rpi/xhci.asl
create mode 100644 doc/usage/acpi.rst
create mode 100644 lib/acpi/acpi_writer.c
create mode 100644 lib/acpi/base.c
create mode 100644 lib/acpi/csrt.c
create mode 100644 lib/acpi/dsdt.c
create mode 100644 lib/acpi/facs.c
create mode 100644 lib/acpi/ssdt.c
--
2.34.0.rc2.393.gf8c9666880-goog
More information about the U-Boot
mailing list