[PATCH V5 00/21] Add basic ACPI support for RISC-V
Sunil V L
sunilvl at ventanamicro.com
Mon May 8 04:52:16 PDT 2023
This patch series enables the basic ACPI infrastructure for RISC-V.
Supporting external interrupt controllers is in progress and hence it is
tested using poll based HVC SBI console and RAM disk.
The first patch in this series is one of the patch from Jisheng's
series [1] which is not merged yet. This patch is required to support
ACPI since efi_init() which gets called before sbi_init() can enable
static branches and hits a panic.
Below are two ECRs approved by ASWG.
RINTC - https://drive.google.com/file/d/1R6k4MshhN3WTT-hwqAquu5nX6xSEqK2l/view
RHCT - https://drive.google.com/file/d/1nP3nFiH4jkPMp6COOxP6123DCZKR-tia/view
Changes since V4:
1) Rebased with 6.4-rc1 which has ACPICA patches now.
2) Split cpufeature.c patch into two by adding patch 2/7 from Conor's series [2]
3) Updated caching RINTC logic to avoid global.
4) Added driver patches to enable allmodconfig build at the start of the series.
5) Updated tags
Changes since V3:
1) Added two more driver patches to workaround allmodconfig build failure.
2) Separated removal of riscv_of_processor_hartid() to a different patch.
3) Addressed Conor's feedback.
4) Rebased to v6.3-rc5 and added latest tags
Changes since V2:
1) Dropped ACPI_PROCESSOR patch.
2) Added new patch to print debug info of RISC-V INTC in MADT
3) Addressed other comments from Drew.
4) Rebased and updated tags
Changes since V1:
1) Dropped PCI changes and instead added dummy interfaces just to enable
building ACPI core when CONFIG_PCI is enabled. Actual PCI changes will
be added in future along with external interrupt controller support
in ACPI.
2) Squashed couple of patches so that new code added gets built in each
commit.
3) Fixed the missing wake_cpu code in timer refactor patch as pointed by
Conor
4) Fixed an issue with SMP disabled.
5) Addressed other comments from Conor.
6) Updated documentation patch as per feedback from Sanjaya.
7) Fixed W=1 and checkpatch --strict issues.
8) Added ACK/RB tags
[1] https://lore.kernel.org/all/20220821140918.3613-1-jszhang@kernel.org/
[2] http://lists.infradead.org/pipermail/linux-riscv/2023-May/031239.html
These changes are available at
https://github.com/vlsunil/linux/commits/acpi_b1_us_review_v5
Testing:
1) Build latest Qemu
2) Build EDK2 as per instructions in
https://github.com/vlsunil/riscv-uefi-edk2-docs/wiki/RISC-V-Qemu-Virt-support
3) Build Linux after enabling SBI HVC and SBI earlycon
CONFIG_RISCV_SBI_V01=y
CONFIG_SERIAL_EARLYCON_RISCV_SBI=y
CONFIG_HVC_RISCV_SBI=y
4) Build buildroot.
Run with below command.
qemu-system-riscv64 -nographic \
-drive file=Build/RiscVVirtQemu/RELEASE_GCC5/FV/RISCV_VIRT.fd,if=pflash,format=raw,unit=1 \
-machine virt -smp 16 -m 2G \
-kernel arch/riscv/boot/Image \
-initrd buildroot/output/images/rootfs.cpio \
-append "root=/dev/ram ro console=hvc0 earlycon=sbi"
Jisheng Zhang (1):
riscv: move sbi_init() earlier before jump_label_init()
Sunil V L (20):
platform/surface: Disable for RISC-V
crypto: hisilicon/qm: Fix to enable build with RISC-V clang
ACPI: tables: Print RINTC information when MADT is parsed
ACPI: OSL: Make should_use_kmap() 0 for RISC-V
RISC-V: Add support to build the ACPI core
ACPI: processor_core: RISC-V: Enable mapping processor to the hartid
RISC-V: ACPI: Cache and retrieve the RINTC structure
drivers/acpi: RISC-V: Add RHCT related code
RISC-V: smpboot: Create wrapper setup_smp()
RISC-V: smpboot: Add ACPI support in setup_smp()
RISC-V: only iterate over possible CPUs in ISA string parser
RISC-V: cpufeature: Add ACPI support in riscv_fill_hwcap()
RISC-V: cpu: Enable cpuinfo for ACPI systems
irqchip/riscv-intc: Add ACPI support
clocksource/timer-riscv: Refactor riscv_timer_init_dt()
clocksource/timer-riscv: Add ACPI support
RISC-V: time.c: Add ACPI support for time_init()
RISC-V: Add ACPI initialization in setup_arch()
RISC-V: Enable ACPI in defconfig
MAINTAINERS: Add entry for drivers/acpi/riscv
.../admin-guide/kernel-parameters.txt | 8 +-
MAINTAINERS | 8 +
arch/riscv/Kconfig | 5 +
arch/riscv/configs/defconfig | 1 +
arch/riscv/include/asm/acenv.h | 11 +
arch/riscv/include/asm/acpi.h | 84 ++++++
arch/riscv/include/asm/cpu.h | 8 +
arch/riscv/kernel/Makefile | 1 +
arch/riscv/kernel/acpi.c | 250 ++++++++++++++++++
arch/riscv/kernel/cpu.c | 30 ++-
arch/riscv/kernel/cpufeature.c | 42 ++-
arch/riscv/kernel/setup.c | 11 +-
arch/riscv/kernel/smpboot.c | 77 +++++-
arch/riscv/kernel/time.c | 25 +-
drivers/acpi/Makefile | 2 +
drivers/acpi/osl.c | 2 +-
drivers/acpi/processor_core.c | 29 ++
drivers/acpi/riscv/Makefile | 2 +
drivers/acpi/riscv/rhct.c | 83 ++++++
drivers/acpi/tables.c | 10 +
drivers/clocksource/timer-riscv.c | 92 ++++---
drivers/crypto/hisilicon/qm.c | 13 +-
drivers/irqchip/irq-riscv-intc.c | 70 +++--
drivers/platform/surface/aggregator/Kconfig | 2 +-
24 files changed, 774 insertions(+), 92 deletions(-)
create mode 100644 arch/riscv/include/asm/acenv.h
create mode 100644 arch/riscv/include/asm/acpi.h
create mode 100644 arch/riscv/include/asm/cpu.h
create mode 100644 arch/riscv/kernel/acpi.c
create mode 100644 drivers/acpi/riscv/Makefile
create mode 100644 drivers/acpi/riscv/rhct.c
--
2.34.1
More information about the linux-riscv
mailing list