On 17 Oct 2026, Peter Maydell wrote:
>
> Do you know what's missing for the MSI support to work?
I think it's the controller's built-in MSI receiver, which we don't
model.
>From the Linux driver (drivers/pci/controller/pcie-brcmstb.c): the guest
programs an MSI target address into PCIE_MISC_MSI_BAR_CONFIG_LO/HI
(0x4044/0x4048, bit 0 = enable) and the message data into
PCIE_MISC_MSI_DATA_CONFIG (0x404c). A device's MSI write then goes to
that target address (0xfffffffc, or 0xffffffffc if the inbound window
extends above 4GB) with data 0x6540 | vector. The controller is supposed
to catch that write, set bit <vector> in its MSI_INTR2 block at 0x4500
(STATUS 0x4500, CLR 0x4508, MASK_SET 0x4510, MASK_CLR 0x4514), and
assert the second interrupt of the pcie DT node ("msi") towards the GIC.
Right now none of that exists: the MSI_INTR2 registers are plain backing
bytes in regs[] with no status/clear/mask behaviour, nothing in the PCI
bus address space claims the target address so the device's write goes
nowhere, and the "msi" interrupt isn't wired to the GIC.
I think it needs a small doorbell MemoryRegion in the PCI address space
at the target address, the INTR2 register semantics, and one more SPI --
on the order of 100-150 lines. I left it out of this series since INTx
covers what I've needed, but I'm happy to do it as a follow-up if you'd
like.
thanks
-- Marcelo
On Sat, Oct 17, 2026 09:10 AM, Peter Maydell <[email protected]>
wrote:
> On Thu, 15 Oct 2026 at 19:11, Marcelo Manzo <[email protected]>
> wrote:
> >
> > raspi4b now has a working PCIe Root Complex and GENET Ethernet
> > controller (added in the preceding patches); move them out of the
> > "Missing devices" list and into "Implemented devices".
> >
> > Signed-off-by: Marcelo Manzo <[email protected]>
> > ---
> > docs/system/arm/raspi.rst | 6 ++++--
> > 1 file changed, 4 insertions(+), 2 deletions(-)
> >
> > diff --git a/docs/system/arm/raspi.rst b/docs/system/arm/raspi.rst
> > index 44eec3f1c3..a8fc37e920 100644
> > --- a/docs/system/arm/raspi.rst
> > +++ b/docs/system/arm/raspi.rst
> > @@ -36,10 +36,12 @@ Implemented devices
> > * VideoCore firmware (property)
> > * Peripheral SPI controller (SPI)
> > * Broadcom Serial Controller (I2C)
> > + * PCIe Root Complex (raspi4b)
> > + * GENET Ethernet Controller (raspi4b)
> >
> > Missing devices
> > ---------------
> >
> > * Pulse Width Modulation (PWM)
> > - * PCIE Root Port (raspi4b)
> > - * GENET Ethernet Controller (raspi4b)
> > + * PCIe MSI/MSI-X interrupt delivery (raspi4b) -- INTx works; a PCIe
> > + device that only signals via MSI/MSI-X needs ``msi=off,msix=off``
>
> Do you know what's missing for the MSI support to work?
>
> thanks
> -- PMM
>