On Fri, Jan 24, 2020 at 11:40:47AM +0530, Vinod Koul wrote: > On 23-01-20, 14:23, Laurent Pinchart wrote: > > > >>> @@ -701,6 +702,10 @@ struct dma_filter { > > > >>> * The function takes a buffer of size buf_len. The callback function will > > > >>> * be called after period_len bytes have been transferred. > > > >>> * @device_prep_interleaved_dma: Transfer expression in a generic way. > > > >>> + * @device_prep_interleaved_cyclic: prepares an interleaved cyclic transfer. > > > >>> + * This is similar to @device_prep_interleaved_dma, but the transfer is > > > >>> + * repeated until a new transfer is issued. This transfer type is meant > > > >>> + * for display. > > > >> > > > >> I think capture (camera) is another potential beneficiary of this. > > > > Possibly, although in the camera case I'd rather have the hardware stop > > if there's no more buffer. Requiring a buffer to always be present is > > annoying from a userspace point of view. For display it's different, if > > userspace doesn't submit a new frame, the same frame should keep being > > displayed on the screen. > > > > > >> So you don't need to terminate the running interleaved_cyclic and start > > > >> a new one, but prepare and issue a new one, which would > > > >> terminate/replace the currently running cyclic interleaved DMA? > > > > Correct. > > > > > > Why not explicitly terminate the transfer and start when a new one is > > > > issued. That can be common usage for audio and display.. > > > > > > Yes, this is what I'm asking. The cyclic transfer is running and in > > > order to start the new transfer, the previous should stop. But in cyclic > > > case it is not going to happen unless it is terminated. > > > > > > When one would want to have different interleaved transfer the display > > > (or capture )IP needs to be reconfigured as well. The the would need to > > > be terminated anyways to avoid interpreting data in a wrong way. > > > > The use case here is not to switch to a new configuration, but to switch > > to a new buffer. If the transfer had to be terminated manually first, > > the DMA engine would potentially miss a frame, which is not acceptable. > > We need an atomic way to switch to the next transfer. > > So in this case you have, let's say a cyclic descriptor with N buffers > and they are cyclically capturing data and providing to client/user.. For the display case it's cyclic over a single buffer that is repeatedly displayed over and over again until a new one replaces it, when userspace wants to change the content on the screen. Userspace only has to provide a new buffer when content changes, otherwise the display has to keep displaying the same one. For cameras I don't think cyclic makes too much sense, except when the DMA engine can't work in single-shot mode and always requires a buffer to write into. That shouldn't be the norm. > So why would you like to submit again...? Once whole capture has > completed you would terminate, right... > > Sorry not able to wrap my head around why new submission is required and > if that is the case why previous one cant be terminated :) -- Regards, Laurent Pinchart