Re: [PATCH v10 7/7] PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback

From: Koichiro Den

Date: Mon Mar 23 2026 - 21:45:12 EST


On Mon, Mar 23, 2026 at 02:48:10PM -0400, Frank Li wrote:
> On Mon, Mar 02, 2026 at 04:14:27PM +0900, Koichiro Den wrote:
> > Some endpoint platforms cannot use platform MSI / GIC ITS to implement
> > EP-side doorbells. In those cases, EPF drivers cannot provide an
> > interrupt-driven doorbell and often fall back to polling.
> >
> > Add an "embedded" doorbell backend that uses a controller-integrated
> > doorbell target (e.g. DesignWare integrated eDMA interrupt-emulation
> > doorbell).
> >
> > The backend locates the doorbell register and a corresponding Linux IRQ
> > via the EPC aux-resource API. If the doorbell register is already
> > exposed via a fixed BAR mapping, provide BAR+offset. Otherwise provide
> > the DMA address returned by dma_map_resource() (which may be an IOVA
> > when an IOMMU is enabled) so EPF drivers can map it into BAR space.
> >
> > When MSI doorbell allocation fails with -ENODEV,
> > pci_epf_alloc_doorbell() falls back to this embedded backend.
> >
> > Signed-off-by: Koichiro Den <den@xxxxxxxxxxxxx>
> > ---
> ...
> > + */
> > + if (doorbell->bar == NO_BAR) {
> > + phys_base = addr & PAGE_MASK;
> > + off = addr - phys_base;
> > + map_size = PAGE_ALIGN(off + sizeof(u32));
> > +
> > + iova_base = dma_map_resource(epc->dev.parent, phys_base,
> > + map_size, DMA_FROM_DEVICE, 0);
>
> DB should write. Is it DMA_TO_DEVICE?

Thanks for reviewing.

The write is initiated by the peer (RC) and lands in this EP-side doorbell
target, so from the EP side this is a DMA_FROM_DEVICE mapping.

Best regards,
Koichiro

>
> Frank
> >
> > /**
> > --
> > 2.51.0
> >