spi: davinci: move eventq parameter to platform data
Subsystems (4)
cover spi: davinci: move eventq parameter to platform data
For DMA operation, the davinci spi driver needs an eventq number. Currently, this number is passed as a IORESOURCE_DMA. This is not correct, as the eventq is not a DMA channel. Pass the eventq via the platform data structure instead as is done with davinci devices such as the McASP.
Two platforms (dm355 and dm365) are using the davinci spi driver with DMA's enabled, move the eventq parameter out of the resources and into the platform data.
I have tested this patch with an OMAP-L138 (patch submission for this platform is in progress). I do not have a dm355 or dm365, so these platforms have not been tested.
Michael Williamson (3):
davinci: spi: move event_q parameter to platform data
davinci: dm355: move spi0 eventq assignment from resources to
platform data
davinci: dm365: move spi0 eventq assignment from resources to
platform data
arch/arm/mach-davinci/dm355.c | 5 +---- arch/arm/mach-davinci/dm365.c | 5 +---- arch/arm/mach-davinci/include/mach/spi.h | 15 ++++++++++----- drivers/spi/davinci_spi.c | 11 +++-------- 4 files changed, 15 insertions(+), 21 deletions(-)
PATCH 1/3 davinci: spi: move event_q parameter to platform data
For DMA operation, the davinci spi driver needs an eventq number. Currently, this number is passed as a IORESOURCE_DMA. This is not correct, as the eventq is not a DMA channel. Pass the eventq via the platform data structure instead.
--- arch/arm/mach-davinci/include/mach/spi.h | 15 ++++++++++----- drivers/spi/davinci_spi.c | 11 +++-------- 2 files changed, 13 insertions(+), 13 deletions(-)
arch/arm/mach-davinci/include/mach/spi.h +10 -5
@@ -19,6 +19,8 @@#ifndef __ARCH_ARM_DAVINCI_SPI_H#define __ARCH_ARM_DAVINCI_SPI_H +#include <mach/edma.h> +#define SPI_INTERN_CS 0xFF enum {
@@ -39,13 +41,16 @@ enum {* to populate if all chip-selects are internal. * @cshold_bug: set this to true if the SPI controller on your chip requires * a write to CSHOLD bit in between transfers (like in DM355). +* @dma_event_q: DMA event_q to use if SPI_IO_TYPE_DMA is used for any device +* on the bus. */ struct davinci_spi_platform_data { -u8 version; -u8 num_chipselect; -u8 intr_line; -u8 *chip_sel; -bool cshold_bug; +u8 version; +u8 num_chipselect; +u8 intr_line; +u8 *chip_sel; +bool cshold_bug; +enum dma_event_q dma_event_q; };/**
drivers/spi/davinci_spi.c +3 -8
@@ -790,7 +790,6 @@ static int davinci_spi_probe(struct platform_device *pdev)struct resource *r, *mem;resource_size_t dma_rx_chan =SPI_NO_RESOURCE ;resource_size_t dma_tx_chan =SPI_NO_RESOURCE ; -resource_size_t dma_eventq =SPI_NO_RESOURCE ;int i =0 , ret =0 ;u32 spipc0;
@@ -878,17 +877,13 @@ static int davinci_spi_probe(struct platform_device *pdev) r =platform_get_resource (pdev,IORESOURCE_DMA ,1 );if (r) dma_tx_chan = r->start; - r =platform_get_resource (pdev,IORESOURCE_DMA ,2 ); -if (r) - dma_eventq = r->start; dspi->bitbang.txrx_bufs = davinci_spi_bufs;if (dma_rx_chan !=SPI_NO_RESOURCE && - dma_tx_chan !=SPI_NO_RESOURCE && - dma_eventq !=SPI_NO_RESOURCE ) { + dma_tx_chan !=SPI_NO_RESOURCE ) { dspi->dma.rx_channel = dma_rx_chan; dspi->dma.tx_channel = dma_tx_chan; - dspi->dma.eventq = dma_eventq; + dspi->dma.eventq = pdata->dma_event_q; ret =davinci_spi_request_dma (dspi);if (ret)
@@ -897,7 +892,7 @@ static int davinci_spi_probe(struct platform_device *pdev)dev_info (&pdev->dev,"DMA: supported\n" );dev_info (&pdev->dev,"DMA: RX channel: %d, TX channel: %d, " "event queue: %d\n" , dma_rx_chan, dma_tx_chan, - dma_eventq); + pdata->dma_event_q); } dspi->get_rx = davinci_spi_rx_buf_u8;
Signature · 1 line
1.7.0.4
PATCH 1/3 davinci: spi: move event_q parameter to platform data
Hello.
Quoted 6 lines · Michael Williamson
For DMA operation, the davinci spi driver needs an eventq number. Currently, this number is passed as a
IORESOURCE_DMA. This is not correct, as the eventq is not a DMA channel. Pass the eventq via the platform data structure instead.Signed-off-by Michael Williamson<[email protected]>
[...]
Quoted 4 lines
arch/arm/mach-davinci/include/mach/spi.h +0
-0
[...]
arch/arm/mach-davinci/include/mach/spi.h enum { · line 44
Quoted 5 lines
arch/arm/mach-davinci/include/mach/spi.h +1
-0@@ -39,13 +41,16 @@ enum {* to populate if all chip-selects are internal. * @cshold_bug: set this to true if the SPI controller on your chip requires * a write to CSHOLD bit in between transfers (like in DM355). +* @dma_event_q: DMA event_q to use if SPI_IO_TYPE_DMA is used for any device
s/event_q/event queue/?
Quoted 21 lines
arch/arm/mach-davinci/include/mach/spi.h +7
-5+* on the bus. */ struct davinci_spi_platform_data { -u8 version; -u8 num_chipselect; -u8 intr_line; -u8 *chip_sel; -bool cshold_bug; +u8 version; +u8 num_chipselect; +u8 intr_line; +u8 *chip_sel; +bool cshold_bug; +enum dma_event_q dma_event_q; };/** drivers/spi/davinci_spi.c +0
-0
[...]
Quoted 7 lines
drivers/spi/davinci_spi.c +0
-3@@ -878,17 +877,13 @@ static int davinci_spi_probe(struct platform_device *pdev) r =platform_get_resource (pdev,IORESOURCE_DMA ,1 );if (r) dma_tx_chan = r->start; - r =platform_get_resource (pdev,IORESOURCE_DMA ,2 ); -if (r) - dma_eventq = r->start;
drivers/spi/davinci_spi.c static int davinci_spi_probe(struct platform_device *pdev) · line 886
Quoted 10 lines
drivers/spi/davinci_spi.c +2
-3dspi->bitbang.txrx_bufs = davinci_spi_bufs;if (dma_rx_chan !=SPI_NO_RESOURCE && - dma_tx_chan !=SPI_NO_RESOURCE && - dma_eventq !=SPI_NO_RESOURCE ) { + dma_tx_chan !=SPI_NO_RESOURCE ) { dspi->dma.rx_channel = dma_rx_chan; dspi->dma.tx_channel = dma_tx_chan; - dspi->dma.eventq = dma_eventq; + dspi->dma.eventq = pdata->dma_event_q;
It makes sense to merge this patch with the patches 2 and 3 as otherwise
the bisectability is prevented for DM3[56]5 -- their 'dma_event_q' field will be anonymously initialized to 0 after this patch but should be 1 and 3 instead correspondingly. Although, this doesn't seem to be a fatal defect, so the patches can be kept separate... Don't know what's better.
WBR, Sergei
PATCH 1/3 davinci: spi: move event_q parameter to platform data
Hi Sergei,
Quoted 55 lines · Sergei Shtylyov
Hello.
Quoted 6 lines · Michael Williamson
For DMA operation, the davinci spi driver needs an eventq number. Currently, this number is passed as a
IORESOURCE_DMA. This is not correct, as the eventq is not a DMA channel. Pass the eventq via the platform data structure instead.Signed-off-by Michael Williamson<[email protected]>[...]
Quoted 4 lines
arch/arm/mach-davinci/include/mach/spi.h +0
-0[...]
arch/arm/mach-davinci/include/mach/spi.h enum { · line 44
Quoted 5 lines
arch/arm/mach-davinci/include/mach/spi.h +1
-0@@ -39,13 +41,16 @@ enum {* to populate if all chip-selects are internal. * @cshold_bug: set this to true if the SPI controller on your chip requires * a write to CSHOLD bit in between transfers (like in DM355). +* @dma_event_q: DMA event_q to use if SPI_IO_TYPE_DMA is used for any device s/event_q/event queue/?
Quoted 21 lines
arch/arm/mach-davinci/include/mach/spi.h +7
-5+* on the bus. */ struct davinci_spi_platform_data { -u8 version; -u8 num_chipselect; -u8 intr_line; -u8 *chip_sel; -bool cshold_bug; +u8 version; +u8 num_chipselect; +u8 intr_line; +u8 *chip_sel; +bool cshold_bug; +enum dma_event_q dma_event_q; };/** drivers/spi/davinci_spi.c +0
-0[...]
Quoted 8 lines
drivers/spi/davinci_spi.c +0
-3@@ -878,17 +877,13 @@ static int davinci_spi_probe(struct platform_device *pdev) r =platform_get_resource (pdev,IORESOURCE_DMA ,1 );if (r) dma_tx_chan = r->start; - r =platform_get_resource (pdev,IORESOURCE_DMA ,2 ); -if (r) - dma_eventq = r->start;
Quoted 12 lines
drivers/spi/davinci_spi.c static int davinci_spi_probe(struct platform_device *pdev) · line 886
Quoted 9 lines
drivers/spi/davinci_spi.c +2
-3dspi->bitbang.txrx_bufs = davinci_spi_bufs;if (dma_rx_chan !=SPI_NO_RESOURCE && - dma_tx_chan !=SPI_NO_RESOURCE && - dma_eventq !=SPI_NO_RESOURCE ) { + dma_tx_chan !=SPI_NO_RESOURCE ) { dspi->dma.rx_channel = dma_rx_chan; dspi->dma.tx_channel = dma_tx_chan; - dspi->dma.eventq = dma_eventq; + dspi->dma.eventq = pdata->dma_event_q;It makes sense to merge this patch with the patches 2 and 3 as otherwise the bisectability is prevented for DM3[56]5 -- their '
dma_event_q' field will be anonymously initialized to 0 after this patch but should be 1 and 3 instead correspondingly. Although, this doesn't seem to be a fatal defect, so the patches can be kept separate... Don't know what's better.
Barring any other comments, I will collapse the patches and resend. I will correct the typo you mentioned above as well.
Thanks.
-Mike
Quoted 1 line
WBR, Sergei
PATCH 2/3 davinci: dm355: move spi0 eventq assignment from resources to platform data
In reply to Michael WilliamsonMove the eventq assignment for spi0 out of resources and into platform data.
--- arch/arm/mach-davinci/dm355.c | 5 +---- 1 files changed, 1 insertions(+), 4 deletions(-)
arch/arm/mach-davinci/dm355.c +1 -4
@@ -403,16 +403,13 @@ static struct resource dm355_spi0_resources[] = { .start = 16, .flags = IORESOURCE_DMA, }, - { - .start = EVENTQ_1, - .flags = IORESOURCE_DMA, - }, };static struct davinci_spi_platform_data dm355_spi0_pdata = { .version =SPI_VERSION_1 , .num_chipselect =2 , .cshold_bug = true, + .dma_event_q =EVENTQ_1 , };static struct platform_device dm355_spi0_device = { .name = "spi_davinci",
Signature · 1 line
1.7.0.4
PATCH 3/3 davinci: dm365: move spi0 eventq assignment from resources to platform data
In reply to Michael WilliamsonMove the spi0 eventq assignment out of resources array and into platform data.
--- arch/arm/mach-davinci/dm365.c | 5 +---- 1 files changed, 1 insertions(+), 4 deletions(-)
arch/arm/mach-davinci/dm365.c +1 -4
@@ -625,6 +625,7 @@ static u64 dm365_spi0_dma_mask = DMA_BIT_MASK(32);static struct davinci_spi_platform_data dm365_spi0_pdata = { .version =SPI_VERSION_1 , .num_chipselect =2 , + .dma_event_q =EVENTQ_3 , };static struct resource dm365_spi0_resources[] = {
@@ -645,10 +646,6 @@ static struct resource dm365_spi0_resources[] = { .start = 16, .flags = IORESOURCE_DMA, }, - { - .start = EVENTQ_3, - .flags = IORESOURCE_DMA, - }, }; static struct platform_device dm365_spi0_device = {
Signature · 1 line
1.7.0.4