Re: pcib msix allocation in arm64

From: Andrew Turner <andrew_at_fubar.geek.nz>
Date: Wed, 02 Nov 2022 13:24:01 UTC
> On 2 Nov 2022, at 12:56, Souradeep Chakrabarti <schakrabarti@microsoft.com> wrote:
> 
> Hi,
> I can see in x86 nexus.c has implemented pcib_alloc_msix using nexus_alloc_msix().
> Which calls msix_alloc() for msix allocation.
> 
> But in case of arm64 I don't find similar pcib_alloc_msix implementation in nexus.c .
> So, on arm64 what is correct way to get allocate msix ?

For an arm64 system with ACPI it is most likely handled in generic_pcie_acpi_release_msix. For FDT it can depend on which PCI driver is used.

In either case it will call into intr_release_msix that then calls into the MSI controller to allocate the vectors. For a GICv3 driver it will either be gicv3_its_alloc_msix if you have an ITS device, or gic_v3_alloc_msix if using MBI ranges.

On ACPI we don’t currently support MBI ranges, although it looks like this could be handled by the existing gicv2m driver. This driver should already work as a child of the GICv3, however it appears to be FDT only, so will need some work to add ACPI support.

Andrew