Re: [PATCH v3 3/3] PCI: epf-mhi: Implement mhi_cntrl->flush_async() to flush DMA read/write
Frank Li <[email protected]> Wed, 22 Jul 2026 10:39:15 -0500
| Newsgroups | dev.linux.lists.mhi,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pci |
|---|---|
| Message-ID | <amDkIyFGifjM15tY@SMW015318> |
On Wed, Jul 22, 2026 at 07:54:46AM +0200, Manivannan Sadhasivam via B4 Relay wrote: > > From: Manivannan Sadhasivam <[email protected]> > > The MHI core needs to make sure that all the current DMA transactions are > completed before removing the channels. So implement the > mhi_cntrl->flush_async() callback by first making sure all the in-flight > DMA operations are completed and then flushing the DMA workqueue. > > Signed-off-by: Manivannan Sadhasivam <[email protected]> > --- Reviewed-by: Frank Li <[email protected]> > drivers/pci/endpoint/functions/pci-epf-mhi.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/drivers/pci/endpoint/functions/pci-epf-mhi.c b/drivers/pci/endpoint/functions/pci-epf-mhi.c > index 7f5326925ed5..8d2d9d01cfd2 100644 > --- a/drivers/pci/endpoint/functions/pci-epf-mhi.c > +++ b/drivers/pci/endpoint/functions/pci-epf-mhi.c > @@ -644,6 +644,15 @@ static int pci_epf_mhi_edma_write_async(struct mhi_ep_cntrl *mhi_cntrl, > return ret; > } > > +static void pci_epf_mhi_edma_flush_async(struct mhi_ep_cntrl *mhi_cntrl) > +{ > + struct pci_epf_mhi *epf_mhi = to_epf_mhi(mhi_cntrl); > + > + dmaengine_synchronize(epf_mhi->dma_chan_rx); > + dmaengine_synchronize(epf_mhi->dma_chan_tx); > + flush_workqueue(epf_mhi->dma_wq); > +} > + > struct epf_dma_filter { > struct device *dev; > u32 dma_mask; > @@ -812,6 +821,7 @@ static int pci_epf_mhi_link_up(struct pci_epf *epf) > mhi_cntrl->write_sync = pci_epf_mhi_edma_write; > mhi_cntrl->read_async = pci_epf_mhi_edma_read_async; > mhi_cntrl->write_async = pci_epf_mhi_edma_write_async; > + mhi_cntrl->flush_async = pci_epf_mhi_edma_flush_async; > } > > /* Register the MHI EP controller */ > > -- > 2.43.0 > >