[roll] Roll fuchsia [kernel][gicv3] Support LPI and ITS MSI-X

On ARM64 platforms with a GICv3 Interrupt Translation Service (such as
GCE t2a-standard-4), PCI devices such as NVMe and Virtio use MSI-X
interrupts translated by the GICv3 ITS into Locality-specific
Peripheral Interrupts (LPIs, INTID >= 8192). Previously, Zircon's GICv3
driver returned ZX_ERR_NOT_SUPPORTED for all MSI operations and masked
ICC_IAR1_EL1 with 0x3ff, preventing MSI-X allocation and LPI dispatch.

Update the GICv3 driver to support Redistributor LPIs and ITS-backed
MSI/MSI-X interrupts:

1. Add GICR LPI (GICR_PROPBASER, GICR_PENDBASER, GICR_INVLPIR,
   GICR_INVALLR, GICR_SYNCR) and GICv3 ITS (GITS_*) register
   definitions in arm_gicv3_regs.h.
2. Read the ITS physical base address passed by the bootloader in
   zbi_dcfg_arm_gic_v3_driver_t::its_phys, with a fallback to
   mmio_phys + 0x80000 when gicr_offset >= 0xa0000.
3. Allocate and program the shared 64-KiB LPI configuration table and
   per-CPU 64-KiB LPI pending tables with Shareability WARL handling,
   and enable GICR_CTLR_ENABLE_LPIS on each CPU.
4. Probe and configure GITS_BASER device and collection tables (handling
   64K/16K/4K page size and Shareability WARL fields) and the 64-KiB
   GITS_CBASER command queue, enable GITS_CTLR, map Collection 0 to
   CPU 0 (MAPC), and map PCI bus 0 device IDs (MAPD) sized according to
   GITS_TYPER.ITT_entry_size.
5. Implement gic_msi_is_supported, gic_msi_supports_masking,
   gic_msi_mask_unmask, gic_msi_alloc_block, gic_msi_free_block, and
   gic_msi_register_handler targeting GITS_TRANSLATER and issuing
   batched MAPTI, INV, and SYNC commands.
6. Update gic_handle_irq to mask ICC_IAR1_EL1 with 0xffffff (24-bit
   INTID) and dispatch LPIs (INTID >= 8192).

Original-Original-Bug: None
Test: Booted minimal.arm64 on GCE (t2a-standard-4) and verified GICv3
Test: ITS initialization, virtio-rng and nvme MSI-X interrupts, and
Test: fxfs mount on NVMe.

Original-Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1882420
Original-Original-Revision: ffac7771dd435f0dbedbecbbe254167c962164ca
GitOrigin-RevId: a86d56a67a6d51c0aed5afc0f7903514c85907d1
Change-Id: I08be4b6706189d60af7c9261ebe4418087158d2f
Reviewed-on: https://fuchsia-review.googlesource.com/c/integration/+/1883219
Cr-Commit-Position: refs/heads/main@{#205381}
1 file changed
tree: 136cc43935d4726fc16c155ccb20f13f967777e1
  1. ctf/
  2. git-hooks/
  3. infra/
  4. third_party/
  5. cobalt
  6. flower
  7. jiri.lock
  8. MILESTONE
  9. minimal
  10. prebuilts
  11. README.md
  12. stem
  13. test_durations
README.md

Integration

This repository contains Fuchsia's Global Integration manifest files.

Making changes

All changes should be made to the internal version of this repository. Our infrastructure automatically updates this version when the internal one changes.

Currently all changes must be made by a Google employee. Non-Google employees wishing to make a change can ask for assistance in one of the communication channels documented at get involved.

Obtaining the source

First install Jiri.

Next run:

$ jiri init
$ jiri import minimal https://fuchsia.googlesource.com/integration
$ jiri update

Third party

Third party projects should have their own subdirectory in ./third_party.