RE: [PATCH 2/2] spi: spi-rspi: Add need_dmar_clr to spi_ops

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi All,

I would like to drop this patch as I have sent wrong one.

Cheers,
Biju

> Subject: [PATCH 2/2] spi: spi-rspi: Add need_dmar_clr to spi_ops
> 
> RSPI IP on RZ/{A, G2L} SoC's has the same signal for both interrupt and DMA
> transfer request. Setting DMARS register for DMA transfer makes the signal
> to work as a DMA transfer request signal and subsequent interrupt requests
> to the interrupt controller are masked.
> 
> Currently, DMA to interrupt mode switching does not work because of this
> masking.
> 
> This patch adds need_dmar_clr device configuration flag to spi_ops and it
> makes the signal to work as an interrupt request by clearing DMARS after DMA
> callback.
> 
> Signed-off-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>
> ---
>  drivers/spi/spi-rspi.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c index
> 7a014eeec2d0..8637be53bb8d 100644
> --- a/drivers/spi/spi-rspi.c
> +++ b/drivers/spi/spi-rspi.c
> @@ -249,6 +249,7 @@ struct spi_ops {
>  	u16 flags;
>  	u16 fifo_size;
>  	u8 num_hw_ss;
> +	bool need_dmar_clr;
>  };
> 
>  static void rspi_set_rate(struct rspi_data *rspi) @@ -613,6 +614,12 @@
> static int rspi_dma_transfer(struct rspi_data *rspi, struct sg_table *tx,
>  					       rspi->dma_callbacked, HZ);
>  	if (ret > 0 && rspi->dma_callbacked) {
>  		ret = 0;
> +		if (need_dmar_clr) {
> +			if (tx)
> +				dmaengine_synchronize(rspi->ctlr->dma_tx);
> +			if (rx)
> +				dmaengine_synchronize(rspi->ctlr->dma_rx);
> +		}
>  	} else {
>  		if (!ret) {
>  			dev_err(&rspi->ctlr->dev, "DMA timeout\n"); @@ -1196,6
> +1203,7 @@ static const struct spi_ops rspi_rz_ops = {
>  	.flags =		SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX,
>  	.fifo_size =		8,	/* 8 for TX, 32 for RX */
>  	.num_hw_ss =		1,
> +	.need_dmar_clr =	true,
>  };
> 
>  static const struct spi_ops qspi_ops = {
> --
> 2.25.1





[Index of Archives]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux