[RFC PATCH v4 00/20] RISC-V: ACPI: Add external interrupt controller support

Rafael J. Wysocki rafael at kernel.org
Mon Apr 22 12:28:24 PDT 2024


On Mon, Apr 15, 2024 at 7:01 PM Sunil V L <sunilvl at ventanamicro.com> wrote:
>
> This series adds support for the below ECR approved by ASWG.
> 1) MADT - https://drive.google.com/file/d/1oMGPyOD58JaPgMl1pKasT-VKsIKia7zR/view?usp=sharing
>
> The series primarily enables irqchip drivers for RISC-V ACPI based
> platforms.
>
> The series can be broadly categorized like below.
>
> 1) PCI ACPI related functions are migrated from arm64 to common file so
> that we don't need to duplicate them for RISC-V.
>
> 2) Added support for re-ordering the probe of interrupt controllers when
> IRQCHIP_ACPI_DECLARE is used.
>
> 3) To ensure probe order between interrupt controllers and devices,
> implicit dependency is created similar to when _DEP is present.
>
> 4) When PNP devices like Generic 16550A UART, have the dependency on the
> interrupt controller, they will not be added to PNP data structures. So,
> added second phase of pnpacpi_init to handle this.
>
> 5) ACPI support added in RISC-V interrupt controller drivers.
>
> This series is still kept as RFC to seek feedback on above design
> changes. Looking forward for the feedback!

I've looked at the patches and I don't see anything deeply concerning
in them from the ACPI core code perspective.

The changes look reasonably straightforward to me.

Thanks!

> Changes since RFC v3:
>         1) Moved to _DEP method instead of fw_devlink.
>         2) PLIC/APLIC driver probe using namespace devices.
>         3) Handling PNP devices as part of clearing dependency.
>         4) Rebased to latest linux-next to get AIA DT drivers.
>
> Changes since RFC v2:
>         1) Introduced fw_devlink for ACPI nodes for IRQ dependency.
>         2) Dropped patches in drivers which are not required due to
>            fw_devlink support.
>         3) Dropped pci_set_msi() patch and added a patch in
>            pci_create_root_bus().
>         4) Updated pnp_irq() patch so that none of the actual PNP
>            drivers need to change.
>
> Changes since RFC v1:
>         1) Abandoned swnode approach as per Marc's feedback.
>         2) To cope up with AIA series changes which changed irqchip driver
>            probe from core_initcall() to platform_driver, added patches
>            to support deferred probing.
>         3) Rebased on top of Anup's AIA v11 and added tags.
>
> To test the series,
>
> 1) Qemu should be built using the riscv_acpi_namespace_v1 branch at
> https://github.com/vlsunil/qemu.git
>
> 2) EDK2 should be built using the instructions at:
> https://github.com/tianocore/edk2/blob/master/OvmfPkg/RiscVVirt/README.md
>
> 3) Build Linux using this series.
>
> Run Qemu:
> qemu-system-riscv64 \
>  -M virt,pflash0=pflash0,pflash1=pflash1,aia=aplic-imsic \
>  -m 2G -smp 8 \
>  -serial mon:stdio \
>  -device virtio-gpu-pci -full-screen \
>  -device qemu-xhci \
>  -device usb-kbd \
>  -blockdev node-name=pflash0,driver=file,read-only=on,filename=RISCV_VIRT_CODE.fd \
>  -blockdev node-name=pflash1,driver=file,filename=RISCV_VIRT_VARS.fd \
>  -netdev user,id=net0 -device virtio-net-pci,netdev=net0 \
>  -kernel arch/riscv/boot/Image \
>  -initrd rootfs.cpio \
>  -append "root=/dev/ram ro console=ttyS0 rootwait earlycon=uart8250,mmio,0x10000000"
>
> To boot with APLIC only, use aia=aplic.
> To boot with PLIC, remove aia= option.
>
> This series is also available in acpi_b2_v4_autodep_v1 branch at
> https://github.com/vlsunil/linux.git
>
> Based-on: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/tag/?h=next-20240415
>
> Sunil V L (20):
>   arm64: PCI: Migrate ACPI related functions to pci-acpi.c
>   RISC-V: ACPI: Implement PCI related functionality
>   PCI: Make pci_create_root_bus() declare its reliance on MSI domains
>   ACPI: scan.c: Add weak arch specific function to reorder the IRQCHIP
>     probe
>   ACPI: RISC-V: Implement arch function to reorder irqchip probe entries
>   ACPI: bus: Add acpi_riscv_init function
>   RISC-V: Kconfig: Select deferred GSI probe for ACPI systems
>   ACPI: scan: Refactor dependency creation
>   drivers/acpi/scan.c: Update _DEP honor list
>   RISC-V: ACPI: Initialize GSI mapping structures
>   ACPI: scan.c: Define weak function to populate dependencies
>   RISC-V: ACPI: Implement function to add implicit dependencies
>   ACPI/PNP: Initialize PNP devices skipped due to _DEP
>   irqchip: riscv-intc: Add ACPI support for AIA
>   irqchip: riscv-imsic: Add ACPI support
>   irqchip: riscv-aplic: Add ACPI support
>   irqchip: irq-sifive-plic: Add ACPI support
>   ACPI: bus: Add RINTC IRQ model for RISC-V
>   irqchip: riscv-intc: Set ACPI irqmodel
>   ACPI: pci_link: Clear the dependencies after probe
>
>  arch/arm64/kernel/pci.c                    | 191 ------------
>  arch/riscv/Kconfig                         |   3 +
>  arch/riscv/include/asm/irq.h               |  57 ++++
>  arch/riscv/kernel/acpi.c                   |  31 +-
>  drivers/acpi/Kconfig                       |   3 +
>  drivers/acpi/bus.c                         |   4 +
>  drivers/acpi/pci_link.c                    |   3 +
>  drivers/acpi/riscv/Makefile                |   2 +-
>  drivers/acpi/riscv/init.c                  |  14 +
>  drivers/acpi/riscv/init.h                  |   4 +
>  drivers/acpi/riscv/irq.c                   | 323 +++++++++++++++++++++
>  drivers/acpi/scan.c                        |  69 +++--
>  drivers/irqchip/irq-riscv-aplic-direct.c   |  20 +-
>  drivers/irqchip/irq-riscv-aplic-main.c     |  70 +++--
>  drivers/irqchip/irq-riscv-aplic-main.h     |   1 +
>  drivers/irqchip/irq-riscv-aplic-msi.c      |   9 +-
>  drivers/irqchip/irq-riscv-imsic-early.c    |  52 +++-
>  drivers/irqchip/irq-riscv-imsic-platform.c |  32 +-
>  drivers/irqchip/irq-riscv-imsic-state.c    | 115 ++++----
>  drivers/irqchip/irq-riscv-imsic-state.h    |   2 +-
>  drivers/irqchip/irq-riscv-intc.c           | 102 ++++++-
>  drivers/irqchip/irq-sifive-plic.c          |  89 ++++--
>  drivers/pci/pci-acpi.c                     | 182 ++++++++++++
>  drivers/pci/probe.c                        |   3 +
>  drivers/pnp/pnpacpi/core.c                 |  24 +-
>  drivers/pnp/pnpacpi/rsparser.c             |  63 ++--
>  include/acpi/acpi_bus.h                    |   2 +
>  include/linux/acpi.h                       |   9 +
>  include/linux/irqchip/riscv-imsic.h        |  10 +
>  include/linux/pnp.h                        |   7 +
>  30 files changed, 1108 insertions(+), 388 deletions(-)
>  create mode 100644 drivers/acpi/riscv/init.c
>  create mode 100644 drivers/acpi/riscv/init.h
>  create mode 100644 drivers/acpi/riscv/irq.c
>
> --
> 2.40.1
>
>



More information about the linux-riscv mailing list