Message ID | 1473968506-4150-1-git-send-email-sam.van.den.berge@telenet.be (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
On 09/15/2016 09:41 PM, Sam Van Den Berge wrote: > @@ -445,10 +446,44 @@ static struct s3c24xx_dma_channel s3c2440_dma_channels[DMACH_MAX] = { > [DMACH_USB_EP4] = { S3C24XX_DMA_APB, true, S3C24XX_DMA_CHANREQ(4, 3), }, > }; > > +static const struct dma_slave_map s3c2440_dma_slave_map[] = { > + /* TODO: DMACH_XD0 */ > + /* TODO: DMACH_XD1 */ > + { "3c2440-sdi", "rx-tx", (void *)DMACH_SDI }, Thanks for the patch, still device name needs to be changed here to "s3c2440-sdi". -- Regards, Sylwester -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 09/15/2016 09:41 PM, Sam Van Den Berge wrote: > This patch updates the s3c24xx dma driver to be able to pass a > dma_slave_map array via the platform data. This is needed to > be able to use the new, simpler dmaengine API [1]. > I used the virtual DMA channels as a parameter for the dma_filter > function. By doing that, I could reuse the existing filter function in > drivers/dma/s3c24xx-dma.c. > > I have tested this on my mini2440 board with the audio driver. > (I first applied the audio fixes from Sylwester Nawrocki [2]) > According to my observations, dma_request_slave_channel in the > function dmaengine_pcm_new in the file > sound/soc/soc-generic-dmaengine-pcm.c now returns a valid DMA channel > whereas before no DMA channel was returned at that point. > > Entries for DMACH_XD0, DMACH_XD1 and DMACH_TIMER are missing because I > don't realy know which driver to use for these. > > [1] > http://lists.infradead.org/pipermail/linux-arm-kernel/2015-December/393635.html > [2] http://www.spinics.net/lists/arm-kernel/msg521918.html > > Signed-off-by: Sam Van Den Berge <sam.van.den.berge@telenet.be> > Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com> > Acked-by: Arnd Bergmann <arnd@arndb.de> > > --- > > Changes since v1: > - rename arm into dmaengine in title > - one channel for s3c2440-sdi named "rx-tx" > > arch/arm/mach-s3c24xx/common.c | 35 +++++++++++++++++++++++++++++++ > drivers/dma/s3c24xx-dma.c | 3 +++ > include/linux/platform_data/dma-s3c24xx.h | 6 ++++++ > 3 files changed, 44 insertions(+) Vinod, do you want to take it through your tree? Not much difference for me, so in such case: Acked-by: Krzysztof Kozlowski <krzk@kernel.org> Best regards, Krzysztof -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, Sep 16, 2016 at 01:00:12PM +0200, Sylwester Nawrocki wrote: > On 09/15/2016 09:41 PM, Sam Van Den Berge wrote: > > @@ -445,10 +446,44 @@ static struct s3c24xx_dma_channel s3c2440_dma_channels[DMACH_MAX] = { > > [DMACH_USB_EP4] = { S3C24XX_DMA_APB, true, S3C24XX_DMA_CHANREQ(4, 3), }, > > }; > > > > +static const struct dma_slave_map s3c2440_dma_slave_map[] = { > > + /* TODO: DMACH_XD0 */ > > + /* TODO: DMACH_XD1 */ > > + { "3c2440-sdi", "rx-tx", (void *)DMACH_SDI }, > > Thanks for the patch, still device name needs to be changed here > to "s3c2440-sdi". Thanks for spotting this! I guess I was too focused on the "rx-tx" part that I totally missed the missing leading "s". I will fix this in v3. Sam. -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, Sep 16, 2016 at 01:16:31PM +0200, Krzysztof Kozlowski wrote: > On 09/15/2016 09:41 PM, Sam Van Den Berge wrote: > > This patch updates the s3c24xx dma driver to be able to pass a > > dma_slave_map array via the platform data. This is needed to > > be able to use the new, simpler dmaengine API [1]. > > I used the virtual DMA channels as a parameter for the dma_filter > > function. By doing that, I could reuse the existing filter function in > > drivers/dma/s3c24xx-dma.c. > > > > I have tested this on my mini2440 board with the audio driver. > > (I first applied the audio fixes from Sylwester Nawrocki [2]) > > According to my observations, dma_request_slave_channel in the > > function dmaengine_pcm_new in the file > > sound/soc/soc-generic-dmaengine-pcm.c now returns a valid DMA channel > > whereas before no DMA channel was returned at that point. > > > > Entries for DMACH_XD0, DMACH_XD1 and DMACH_TIMER are missing because I > > don't realy know which driver to use for these. > > > > [1] > > http://lists.infradead.org/pipermail/linux-arm-kernel/2015-December/393635.html > > [2] http://www.spinics.net/lists/arm-kernel/msg521918.html > > > > Signed-off-by: Sam Van Den Berge <sam.van.den.berge@telenet.be> > > Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com> > > Acked-by: Arnd Bergmann <arnd@arndb.de> > > > > --- > > > > Changes since v1: > > - rename arm into dmaengine in title > > - one channel for s3c2440-sdi named "rx-tx" > > > > arch/arm/mach-s3c24xx/common.c | 35 +++++++++++++++++++++++++++++++ > > drivers/dma/s3c24xx-dma.c | 3 +++ > > include/linux/platform_data/dma-s3c24xx.h | 6 ++++++ > > 3 files changed, 44 insertions(+) > > Vinod, do you want to take it through your tree? Not much difference for > me, so in such case: > Acked-by: Krzysztof Kozlowski <krzk@kernel.org> I was kinda waiting for an answer on this question because I didn't know if I should add the acked-by or not but I'm going to assume that it's ok so I'll include it in the third version of this patch. > > Best regards, > Krzysztof > > -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/arm/mach-s3c24xx/common.c b/arch/arm/mach-s3c24xx/common.c index fe7485d..13785c9 100644 --- a/arch/arm/mach-s3c24xx/common.c +++ b/arch/arm/mach-s3c24xx/common.c @@ -33,6 +33,7 @@ #include <linux/delay.h> #include <linux/io.h> #include <linux/platform_data/dma-s3c24xx.h> +#include <linux/dmaengine.h> #include <mach/hardware.h> #include <mach/regs-clock.h> @@ -445,10 +446,44 @@ static struct s3c24xx_dma_channel s3c2440_dma_channels[DMACH_MAX] = { [DMACH_USB_EP4] = { S3C24XX_DMA_APB, true, S3C24XX_DMA_CHANREQ(4, 3), }, }; +static const struct dma_slave_map s3c2440_dma_slave_map[] = { + /* TODO: DMACH_XD0 */ + /* TODO: DMACH_XD1 */ + { "3c2440-sdi", "rx-tx", (void *)DMACH_SDI }, + { "s3c2410-spi.0", "rx", (void *)DMACH_SPI0 }, + { "s3c2410-spi.0", "tx", (void *)DMACH_SPI0 }, + { "s3c2410-spi.1", "rx", (void *)DMACH_SPI1 }, + { "s3c2410-spi.1", "tx", (void *)DMACH_SPI1 }, + { "s3c2440-uart.0", "rx", (void *)DMACH_UART0 }, + { "s3c2440-uart.0", "tx", (void *)DMACH_UART0 }, + { "s3c2440-uart.1", "rx", (void *)DMACH_UART1 }, + { "s3c2440-uart.1", "tx", (void *)DMACH_UART1 }, + { "s3c2440-uart.2", "rx", (void *)DMACH_UART2 }, + { "s3c2440-uart.2", "tx", (void *)DMACH_UART2 }, + { "s3c2440-uart.3", "rx", (void *)DMACH_UART3 }, + { "s3c2440-uart.3", "tx", (void *)DMACH_UART3 }, + /* TODO: DMACH_TIMER */ + { "s3c24xx-iis", "rx", (void *)DMACH_I2S_IN }, + { "s3c24xx-iis", "tx", (void *)DMACH_I2S_OUT }, + { "samsung-ac97", "rx", (void *)DMACH_PCM_IN }, + { "samsung-ac97", "tx", (void *)DMACH_PCM_OUT }, + { "samsung-ac97", "rx", (void *)DMACH_MIC_IN }, + { "s3c-hsudc", "rx0", (void *)DMACH_USB_EP1 }, + { "s3c-hsudc", "rx1", (void *)DMACH_USB_EP2 }, + { "s3c-hsudc", "rx2", (void *)DMACH_USB_EP3 }, + { "s3c-hsudc", "rx3", (void *)DMACH_USB_EP4 }, + { "s3c-hsudc", "tx0", (void *)DMACH_USB_EP1 }, + { "s3c-hsudc", "tx1", (void *)DMACH_USB_EP2 }, + { "s3c-hsudc", "tx2", (void *)DMACH_USB_EP3 }, + { "s3c-hsudc", "tx3", (void *)DMACH_USB_EP4 } +}; + static struct s3c24xx_dma_platdata s3c2440_dma_platdata = { .num_phy_channels = 4, .channels = s3c2440_dma_channels, .num_channels = DMACH_MAX, + .slave_map = s3c2440_dma_slave_map, + .slavecnt = ARRAY_SIZE(s3c2440_dma_slave_map), }; struct platform_device s3c2440_device_dma = { diff --git a/drivers/dma/s3c24xx-dma.c b/drivers/dma/s3c24xx-dma.c index ce67075..d5c85e7 100644 --- a/drivers/dma/s3c24xx-dma.c +++ b/drivers/dma/s3c24xx-dma.c @@ -1301,6 +1301,9 @@ static int s3c24xx_dma_probe(struct platform_device *pdev) s3cdma->slave.device_prep_dma_cyclic = s3c24xx_dma_prep_dma_cyclic; s3cdma->slave.device_config = s3c24xx_dma_set_runtime_config; s3cdma->slave.device_terminate_all = s3c24xx_dma_terminate_all; + s3cdma->slave.filter.map = pdata->slave_map; + s3cdma->slave.filter.mapcnt = pdata->slavecnt; + s3cdma->slave.filter.fn = s3c24xx_dma_filter; /* Register as many memcpy channels as there are physical channels */ ret = s3c24xx_dma_init_virtual_channels(s3cdma, &s3cdma->memcpy, diff --git a/include/linux/platform_data/dma-s3c24xx.h b/include/linux/platform_data/dma-s3c24xx.h index 89ba1b0..4f9aba4 100644 --- a/include/linux/platform_data/dma-s3c24xx.h +++ b/include/linux/platform_data/dma-s3c24xx.h @@ -30,16 +30,22 @@ struct s3c24xx_dma_channel { u16 chansel; }; +struct dma_slave_map; + /** * struct s3c24xx_dma_platdata - platform specific settings * @num_phy_channels: number of physical channels * @channels: array of virtual channel descriptions * @num_channels: number of virtual channels + * @slave_map: dma slave map matching table + * @slavecnt: number of elements in slave_map */ struct s3c24xx_dma_platdata { int num_phy_channels; struct s3c24xx_dma_channel *channels; int num_channels; + const struct dma_slave_map *slave_map; + int slavecnt; }; struct dma_chan;