[PATCH 00/40] RFC: rpi: Enable ACPI booting on ARM with Raspberry Pi 4

Simon Glass sjg at chromium.org
Wed Dec 15 04:28:20 CET 2021


Hi Bin,

On Wed, 1 Dec 2021 at 09:04, Simon Glass <sjg at chromium.org> wrote:
>
> 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
>

Any thoughts on this series? It affects x86 quite a bit, so I would
appreciate any testing you can do. I have tried on coral, which uses
ACPI a lot.

Regards,
Simon


More information about the U-Boot mailing list