Re: [PATCH v6 2/6] PCI: endpoint: Add DMA auxiliary resource metadata
Frank Li <[email protected]> Tue, 4 Aug 2026 10:26:33 -0500
| Newsgroups | org.kernel.vger.linux-pci,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <anIEqUqEni_CDVFi@SMW015318> |
On Tue, Aug 04, 2026 at 12:38:51PM +0900, Koichiro Den wrote: > Extend EPC auxiliary resource metadata so endpoint functions can > discover controller-owned DMA registers, logical DMA channels, and > descriptor memory. > > The DMA metadata is intentionally generic at the EPC layer. A backend > reports the register layout, channel counts, logical channel resources, > and descriptor memory resources. Logical channels carry hardware channel > numbers and refer to descriptor memory by ID; reserving or delegating > those channels is handled by separate EPC operations so resource metadata > stays independent of any backend-specific DMA provider. Descriptor memory > is identified separately so one memory resource can be shared by multiple > channels. > > For DesignWare controllers, reg_layout_data carries the eDMA/HDMA map > format so a consumer can distinguish legacy, unroll, HDMA compatible, > and HDMA native register layouts without making the EPC API itself > DesignWare-specific. > > Signed-off-by: Koichiro Den <[email protected]> > --- Reviewed-by: Frank Li <[email protected]> > Changes in v6: > - No changes. > > include/linux/pci-epc.h | 46 +++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 46 insertions(+) > > diff --git a/include/linux/pci-epc.h b/include/linux/pci-epc.h > index f247cf9bcf1a..8c89cb6d6733 100644 > --- a/include/linux/pci-epc.h > +++ b/include/linux/pci-epc.h > @@ -65,6 +65,9 @@ struct pci_epc_map { > * enum pci_epc_aux_resource_type - auxiliary resource type identifiers > * @PCI_EPC_AUX_DOORBELL_MMIO: Doorbell MMIO, that might be outside the DMA > * controller register window > + * @PCI_EPC_AUX_DMA_CTRL_MMIO: DMA controller MMIO register window > + * @PCI_EPC_AUX_DMA_CHAN: Logical DMA channel > + * @PCI_EPC_AUX_DMA_DESC_MEM: DMA descriptor memory > * > * EPC backends may expose auxiliary blocks (e.g. DMA engines) by mapping their > * register windows and descriptor memories into BAR space. This enum > @@ -72,6 +75,29 @@ struct pci_epc_map { > */ > enum pci_epc_aux_resource_type { > PCI_EPC_AUX_DOORBELL_MMIO, > + PCI_EPC_AUX_DMA_CTRL_MMIO, > + PCI_EPC_AUX_DMA_CHAN, > + PCI_EPC_AUX_DMA_DESC_MEM, > +}; > + > +/** > + * enum pci_epc_aux_dma_reg_layout - DMA controller register layout > + * @PCI_EPC_AUX_DMA_REG_LAYOUT_UNKNOWN: unknown or uninitialized layout > + * @PCI_EPC_AUX_DMA_REG_LAYOUT_DW_EDMA: Synopsys DesignWare eDMA/HDMA layout > + */ > +enum pci_epc_aux_dma_reg_layout { > + PCI_EPC_AUX_DMA_REG_LAYOUT_UNKNOWN = 0, > + PCI_EPC_AUX_DMA_REG_LAYOUT_DW_EDMA, > +}; > + > +/** > + * enum pci_epc_aux_dma_dir - DMA channel direction relative to the endpoint > + * @PCI_EPC_AUX_DMA_EP_TO_RC: channel moves data from endpoint to root complex > + * @PCI_EPC_AUX_DMA_RC_TO_EP: channel moves data from root complex to endpoint > + */ > +enum pci_epc_aux_dma_dir { > + PCI_EPC_AUX_DMA_EP_TO_RC, > + PCI_EPC_AUX_DMA_RC_TO_EP, > }; > > /** > @@ -99,6 +125,26 @@ struct pci_epc_aux_resource { > int irq; /* IRQ number for the doorbell handler */ > u32 data; /* write value to ring the doorbell */ > } db_mmio; > + > + /* PCI_EPC_AUX_DMA_CTRL_MMIO */ > + struct { > + enum pci_epc_aux_dma_reg_layout reg_layout; > + u32 reg_layout_data; > + u16 ep_to_rc_ch_cnt; > + u16 rc_to_ep_ch_cnt; > + } dma_ctrl; > + > + /* PCI_EPC_AUX_DMA_CHAN */ > + struct { > + enum pci_epc_aux_dma_dir dir; > + u16 hw_ch; > + u16 desc_mem_id; > + } dma_chan; > + > + /* PCI_EPC_AUX_DMA_DESC_MEM */ > + struct { > + u16 id; > + } dma_desc; > } u; > }; > > -- > 2.51.0 >