Message ID | 20200110141140.28527-2-stefan@olimex.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add support for sun4i HDMI audio | expand |
On Fri, Jan 10, 2020 at 04:11:39PM +0200, Stefan Mavrodiev wrote: > Currently the cyclic transfers can be used only with normal DMAs. They > can be used by pcm_dmaengine module, which is required for implementing > sound with sun4i-hdmi encoder. This is so because the controller can > accept audio only from a dedicated DMA. > > This patch enables them, following the existing style for the > scatter/gather type transfers. > > Signed-off-by: Stefan Mavrodiev <stefan@olimex.com> Acked-by: Maxime Ripard <mripard@kernel.org> Thanks! Maxime
On 10-01-20, 16:11, Stefan Mavrodiev wrote: > Currently the cyclic transfers can be used only with normal DMAs. They > can be used by pcm_dmaengine module, which is required for implementing > sound with sun4i-hdmi encoder. This is so because the controller can > accept audio only from a dedicated DMA. > > This patch enables them, following the existing style for the > scatter/gather type transfers. I presume you want this to go with drm tree (if not let me know) so: Acked-by: Vinod Koul <vkoul@kernel.org>
On Wed, Jan 15, 2020 at 06:01:37PM +0530, Vinod Koul wrote: > On 10-01-20, 16:11, Stefan Mavrodiev wrote: > > Currently the cyclic transfers can be used only with normal DMAs. They > > can be used by pcm_dmaengine module, which is required for implementing > > sound with sun4i-hdmi encoder. This is so because the controller can > > accept audio only from a dedicated DMA. > > > > This patch enables them, following the existing style for the > > scatter/gather type transfers. > > I presume you want this to go with drm tree (if not let me know) so: > > Acked-by: Vinod Koul <vkoul@kernel.org> There's no need for it to go through DRM, it can go through your tree :) Maxime
On 15-01-20, 18:07, Maxime Ripard wrote: > On Wed, Jan 15, 2020 at 06:01:37PM +0530, Vinod Koul wrote: > > On 10-01-20, 16:11, Stefan Mavrodiev wrote: > > > Currently the cyclic transfers can be used only with normal DMAs. They > > > can be used by pcm_dmaengine module, which is required for implementing > > > sound with sun4i-hdmi encoder. This is so because the controller can > > > accept audio only from a dedicated DMA. > > > > > > This patch enables them, following the existing style for the > > > scatter/gather type transfers. > > > > I presume you want this to go with drm tree (if not let me know) so: > > > > Acked-by: Vinod Koul <vkoul@kernel.org> > > There's no need for it to go through DRM, it can go through your tree :) okay in that case I have applied now :), thanks
On 1/21/20 10:35 AM, Vinod Koul wrote: > On 15-01-20, 18:07, Maxime Ripard wrote: >> On Wed, Jan 15, 2020 at 06:01:37PM +0530, Vinod Koul wrote: >>> On 10-01-20, 16:11, Stefan Mavrodiev wrote: >>>> Currently the cyclic transfers can be used only with normal DMAs. They >>>> can be used by pcm_dmaengine module, which is required for implementing >>>> sound with sun4i-hdmi encoder. This is so because the controller can >>>> accept audio only from a dedicated DMA. >>>> >>>> This patch enables them, following the existing style for the >>>> scatter/gather type transfers. >>> I presume you want this to go with drm tree (if not let me know) so: >>> >>> Acked-by: Vinod Koul <vkoul@kernel.org> >> There's no need for it to go through DRM, it can go through your tree :) > okay in that case I have applied now :), thanks > Hi, Should I keep this patch in the future series or drop it? Best regards, Stefan Mavrodiev
On 21-01-20, 13:37, Stefan Mavrodiev wrote: > > On 1/21/20 10:35 AM, Vinod Koul wrote: > > On 15-01-20, 18:07, Maxime Ripard wrote: > > > On Wed, Jan 15, 2020 at 06:01:37PM +0530, Vinod Koul wrote: > > > > On 10-01-20, 16:11, Stefan Mavrodiev wrote: > > > > > Currently the cyclic transfers can be used only with normal DMAs. They > > > > > can be used by pcm_dmaengine module, which is required for implementing > > > > > sound with sun4i-hdmi encoder. This is so because the controller can > > > > > accept audio only from a dedicated DMA. > > > > > > > > > > This patch enables them, following the existing style for the > > > > > scatter/gather type transfers. > > > > I presume you want this to go with drm tree (if not let me know) so: > > > > > > > > Acked-by: Vinod Koul <vkoul@kernel.org> > > > There's no need for it to go through DRM, it can go through your tree :) > > okay in that case I have applied now :), thanks > > > Hi, > > Should I keep this patch in the future series or drop it? Drop it :) It would be in linux-next tomorrow!
diff --git a/drivers/dma/sun4i-dma.c b/drivers/dma/sun4i-dma.c index e397a50058c8..7b41815d86fb 100644 --- a/drivers/dma/sun4i-dma.c +++ b/drivers/dma/sun4i-dma.c @@ -669,43 +669,41 @@ sun4i_dma_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t buf, size_t len, dma_addr_t src, dest; u32 endpoints; int nr_periods, offset, plength, i; + u8 ram_type, io_mode, linear_mode; if (!is_slave_direction(dir)) { dev_err(chan2dev(chan), "Invalid DMA direction\n"); return NULL; } - if (vchan->is_dedicated) { - /* - * As we are using this just for audio data, we need to use - * normal DMA. There is nothing stopping us from supporting - * dedicated DMA here as well, so if a client comes up and - * requires it, it will be simple to implement it. - */ - dev_err(chan2dev(chan), - "Cyclic transfers are only supported on Normal DMA\n"); - return NULL; - } - contract = generate_dma_contract(); if (!contract) return NULL; contract->is_cyclic = 1; - /* Figure out the endpoints and the address we need */ + if (vchan->is_dedicated) { + io_mode = SUN4I_DDMA_ADDR_MODE_IO; + linear_mode = SUN4I_DDMA_ADDR_MODE_LINEAR; + ram_type = SUN4I_DDMA_DRQ_TYPE_SDRAM; + } else { + io_mode = SUN4I_NDMA_ADDR_MODE_IO; + linear_mode = SUN4I_NDMA_ADDR_MODE_LINEAR; + ram_type = SUN4I_NDMA_DRQ_TYPE_SDRAM; + } + if (dir == DMA_MEM_TO_DEV) { src = buf; dest = sconfig->dst_addr; - endpoints = SUN4I_DMA_CFG_SRC_DRQ_TYPE(SUN4I_NDMA_DRQ_TYPE_SDRAM) | - SUN4I_DMA_CFG_DST_DRQ_TYPE(vchan->endpoint) | - SUN4I_DMA_CFG_DST_ADDR_MODE(SUN4I_NDMA_ADDR_MODE_IO); + endpoints = SUN4I_DMA_CFG_DST_DRQ_TYPE(vchan->endpoint) | + SUN4I_DMA_CFG_DST_ADDR_MODE(io_mode) | + SUN4I_DMA_CFG_SRC_DRQ_TYPE(ram_type); } else { src = sconfig->src_addr; dest = buf; - endpoints = SUN4I_DMA_CFG_SRC_DRQ_TYPE(vchan->endpoint) | - SUN4I_DMA_CFG_SRC_ADDR_MODE(SUN4I_NDMA_ADDR_MODE_IO) | - SUN4I_DMA_CFG_DST_DRQ_TYPE(SUN4I_NDMA_DRQ_TYPE_SDRAM); + endpoints = SUN4I_DMA_CFG_DST_DRQ_TYPE(ram_type) | + SUN4I_DMA_CFG_SRC_DRQ_TYPE(vchan->endpoint) | + SUN4I_DMA_CFG_SRC_ADDR_MODE(io_mode); } /* @@ -747,8 +745,13 @@ sun4i_dma_prep_dma_cyclic(struct dma_chan *chan, dma_addr_t buf, size_t len, dest = buf + offset; /* Make the promise */ - promise = generate_ndma_promise(chan, src, dest, - plength, sconfig, dir); + if (vchan->is_dedicated) + promise = generate_ddma_promise(chan, src, dest, + plength, sconfig); + else + promise = generate_ndma_promise(chan, src, dest, + plength, sconfig, dir); + if (!promise) { /* TODO: should we free everything? */ return NULL;
Currently the cyclic transfers can be used only with normal DMAs. They can be used by pcm_dmaengine module, which is required for implementing sound with sun4i-hdmi encoder. This is so because the controller can accept audio only from a dedicated DMA. This patch enables them, following the existing style for the scatter/gather type transfers. Signed-off-by: Stefan Mavrodiev <stefan@olimex.com> --- drivers/dma/sun4i-dma.c | 45 ++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 21 deletions(-)