All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Serge Semin <Sergey.Semin@baikalelectronics.ru>
Cc: Mark Brown <broonie@kernel.org>,
	Serge Semin <fancer.lancer@gmail.com>,
	Alexey Malahov <Alexey.Malahov@baikalelectronics.ru>,
	Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
	Paul Burton <paulburton@kernel.org>,
	Ralf Baechle <ralf@linux-mips.org>, Arnd Bergmann <arnd@arndb.de>,
	Allison Randal <allison@lohutok.net>,
	Gareth Williams <gareth.williams.jx@renesas.com>,
	Rob Herring <robh+dt@kernel.org>,
	linux-mips@vger.kernel.org, devicetree@vger.kernel.org,
	Georgy Vlasov <Georgy.Vlasov@baikalelectronics.ru>,
	Ramil Zaripov <Ramil.Zaripov@baikalelectronics.ru>,
	Jarkko Nikula <jarkko.nikula@linux.intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Wan Ahmad Zainie <wan.ahmad.zainie.wan.mohamad@intel.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Clement Leger <cleger@kalray.eu>,
	linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 10/19] spi: dw: Use DMA max burst to set the request thresholds
Date: Fri, 15 May 2020 17:38:42 +0300	[thread overview]
Message-ID: <20200515143842.GG1634618@smile.fi.intel.com> (raw)
In-Reply-To: <20200515104758.6934-11-Sergey.Semin@baikalelectronics.ru>

On Fri, May 15, 2020 at 01:47:49PM +0300, Serge Semin wrote:
> Each channel of DMA controller may have a limited length of burst
> transaction (number of IO operations performed at ones in a single
> DMA client request). This parameter can be used to setup the most
> optimal DMA Tx/Rx data level values. In order to avoid the Tx buffer
> overrun we can set the DMA Tx level to be of FIFO depth minus the
> maximum burst transactions length. To prevent the Rx buffer underflow
> the DMA Rx level should be set to the maximum burst transactions length.
> This commit setups the DMA channels and the DW SPI DMA Tx/Rx levels
> in accordance with these rules.

It's good one, but see my comments.


I think this patch should go before previous one.
(and without changes regarding FIFO length)

> +static void mid_spi_maxburst_init(struct dw_spi *dws)
> +{
> +	struct dma_slave_caps caps;
> +	u32 max_burst, def_burst;
> +	int ret;
> +
> +	def_burst = dws->fifo_len / 2;
> +
> +	ret = dma_get_slave_caps(dws->rxchan, &caps);
> +	if (!ret && caps.max_burst)
> +		max_burst = caps.max_burst;
> +	else
> +		max_burst = RX_BURST_LEVEL;
> +

> +	dws->rxburst = (def_burst > max_burst) ? max_burst : def_burst;

min() ?

> +
> +	ret = dma_get_slave_caps(dws->txchan, &caps);
> +	if (!ret && caps.max_burst)
> +		max_burst = caps.max_burst;
> +	else
> +		max_burst = TX_BURST_LEVEL;
> +

> +	dws->txburst = (def_burst > max_burst) ? max_burst : def_burst;

Ditto.

> +}
> +
>  static int mid_spi_dma_init_mfld(struct device *dev, struct dw_spi *dws)
>  {
>  	struct dw_dma_slave slave = {0};
> @@ -67,6 +92,8 @@ static int mid_spi_dma_init_mfld(struct device *dev, struct dw_spi *dws)
>  	dws->master->dma_rx = dws->rxchan;
>  	dws->master->dma_tx = dws->txchan;
>  
> +	mid_spi_maxburst_init(dws);
> +
>  	return 0;
>  
>  free_rxchan:
> @@ -92,6 +119,8 @@ static int mid_spi_dma_init_generic(struct device *dev, struct dw_spi *dws)
>  	dws->master->dma_rx = dws->rxchan;
>  	dws->master->dma_tx = dws->txchan;
>  
> +	mid_spi_maxburst_init(dws);
> +
>  	return 0;
>  }
>  
> @@ -195,7 +224,7 @@ static struct dma_async_tx_descriptor *dw_spi_dma_prepare_tx(struct dw_spi *dws,
>  	memset(&txconf, 0, sizeof(txconf));
>  	txconf.direction = DMA_MEM_TO_DEV;
>  	txconf.dst_addr = dws->dma_addr;
> -	txconf.dst_maxburst = TX_BURST_LEVEL;
> +	txconf.dst_maxburst = dws->txburst;
>  	txconf.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
>  	txconf.dst_addr_width = convert_dma_width(dws->n_bytes);
>  	txconf.device_fc = false;
> @@ -268,7 +297,7 @@ static struct dma_async_tx_descriptor *dw_spi_dma_prepare_rx(struct dw_spi *dws,
>  	memset(&rxconf, 0, sizeof(rxconf));
>  	rxconf.direction = DMA_DEV_TO_MEM;
>  	rxconf.src_addr = dws->dma_addr;
> -	rxconf.src_maxburst = RX_BURST_LEVEL;
> +	rxconf.src_maxburst = dws->rxburst;
>  	rxconf.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
>  	rxconf.src_addr_width = convert_dma_width(dws->n_bytes);
>  	rxconf.device_fc = false;
> @@ -293,8 +322,8 @@ static int mid_spi_dma_setup(struct dw_spi *dws, struct spi_transfer *xfer)
>  {
>  	u16 imr = 0, dma_ctrl = 0;
>  
> -	dw_writel(dws, DW_SPI_DMARDLR, RX_BURST_LEVEL - 1);
> -	dw_writel(dws, DW_SPI_DMATDLR, dws->fifo_len - TX_BURST_LEVEL);
> +	dw_writel(dws, DW_SPI_DMARDLR, dws->rxburst - 1);
> +	dw_writel(dws, DW_SPI_DMATDLR, dws->fifo_len - dws->txburst);
>  
>  	if (xfer->tx_buf) {
>  		dma_ctrl |= SPI_DMA_TDMAE;

...

>  	/* DMA info */
>  	struct dma_chan		*txchan;
> +	u32			txburst;
>  	struct dma_chan		*rxchan;
> +	u32			rxburst;

Leave u32 together, it may be optimal on 64-bit architectures where ABIs require padding.

-- 
With Best Regards,
Andy Shevchenko



  reply	other threads:[~2020-05-15 14:38 UTC|newest]

Thread overview: 106+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-08 13:29 [PATCH 00/17] spi: dw: Add generic DW DMA controller support Serge Semin
2020-05-08 13:29 ` [PATCH 01/17] dt-bindings: spi: Convert DW SPI binding to DT schema Serge Semin
2020-05-08 19:39   ` Andy Shevchenko
2020-05-12 20:28     ` Serge Semin
2020-05-12 20:35       ` Andy Shevchenko
2020-05-08 13:29 ` [PATCH 02/17] dt-bindings: spi: dw: Add DMA properties bindings Serge Semin
2020-05-08 13:29 ` [PATCH 04/17] spi: dw: Cleanup generic DW DMA code namings Serge Semin
2020-05-08 19:43   ` Andy Shevchenko
2020-05-12 21:26     ` Serge Semin
2020-05-12 21:37       ` Andy Shevchenko
2020-05-08 13:29 ` [PATCH 06/17] spi: dw: Add DW SPI DMA/PCI/MMIO dependency on DW SPI core Serge Semin
2020-05-08 13:29 ` [PATCH 08/17] spi: dw: Clear DMAC register when done or stopped Serge Semin
2020-05-08 17:31   ` Mark Brown
2020-05-13 11:56     ` Serge Semin
2020-05-08 13:29 ` [PATCH 09/17] spi: dw: Enable interrupts in accordance with DMA xfer mode Serge Semin
2020-05-08 13:29 ` [PATCH 10/17] spi: dw: Parameterize the DMA Rx/Tx burst length Serge Semin
2020-05-08 13:29 ` [PATCH 12/17] spi: dw: Fix dma_slave_config used partly uninitialized Serge Semin
2020-05-08 19:20   ` Andy Shevchenko
2020-05-08 13:29 ` [PATCH 13/17] spi: dw: Initialize paddr in DW SPI MMIO private data Serge Semin
2020-05-08 19:21   ` Andy Shevchenko
2020-05-13 12:30     ` Serge Semin
2020-05-08 13:33 ` [PATCH 00/17] spi: dw: Add generic DW DMA controller support Mark Brown
2020-05-12 20:07   ` Serge Semin
2020-05-13 10:23     ` Mark Brown
2020-05-13 11:04       ` Serge Semin
2020-05-13 11:21         ` Mark Brown
2020-05-13 11:42           ` Serge Semin
     [not found] ` <20200508132943.9826-8-Sergey.Semin@baikalelectronics.ru>
2020-05-08 17:30   ` [PATCH 07/17] spi: dw: Add Tx/Rx finish wait methods to DMA Mark Brown
     [not found]     ` <20200513113555.mjivjk374giopnea@mobilestation>
2020-05-13 11:36       ` Mark Brown
2020-05-08 17:36 ` [PATCH 00/17] spi: dw: Add generic DW DMA controller support Mark Brown
2020-05-08 19:16   ` Andy Shevchenko
2020-05-12 20:34     ` Serge Semin
2020-05-12 20:30   ` Serge Semin
     [not found] ` <20200508132943.9826-15-Sergey.Semin@baikalelectronics.ru>
2020-05-08 19:23   ` [PATCH 14/17] spi: dw: Add DMA support to the DW SPI MMIO driver Andy Shevchenko
     [not found] ` <20200508132943.9826-17-Sergey.Semin@baikalelectronics.ru>
2020-05-08 19:27   ` [PATCH 16/17] spi: dw: Fix Rx-only DMA transfers Andy Shevchenko
     [not found] ` <20200508132943.9826-18-Sergey.Semin@baikalelectronics.ru>
2020-05-08 19:30   ` [PATCH 17/17] spi: dw: Use regset32 DebugFS method to create a registers file Andy Shevchenko
     [not found]     ` <20200513124422.z6ctlmvipwer45q4@mobilestation>
2020-05-13 14:41       ` Andy Shevchenko
2020-05-08 19:33 ` [PATCH 00/17] spi: dw: Add generic DW DMA controller support Andy Shevchenko
     [not found] ` <20200508132943.9826-12-Sergey.Semin@baikalelectronics.ru>
2020-05-08 19:39   ` [PATCH 11/17] spi: dw: Fix native CS being unset Linus Walleij
     [not found]     ` <20200513001347.dyt357erev7vzy3l@mobilestation>
2020-05-14  8:31       ` Linus Walleij
     [not found]         ` <20200514115558.e6cqnuxqyqkysfn7@mobilestation>
2020-05-14 12:22           ` Andy Shevchenko
2020-05-14 13:03             ` Mark Brown
2020-05-14 14:35           ` Mark Brown
     [not found] ` <20200508132943.9826-4-Sergey.Semin@baikalelectronics.ru>
2020-05-08 19:41   ` [PATCH 03/17] spi: dw: Split up the generic DMA code and Intel MID driver Andy Shevchenko
     [not found] ` <20200508132943.9826-6-Sergey.Semin@baikalelectronics.ru>
2020-05-08 19:44   ` [PATCH 05/17] spi: dw: Discard static DW DMA slave structures Andy Shevchenko
2020-05-15 10:47 ` [PATCH v2 00/19] spi: dw: Add generic DW DMA controller support Serge Semin
2020-05-15 10:47   ` [PATCH v2 01/19] dt-bindings: spi: dw: Add Tx/Rx DMA properties Serge Semin
2020-05-15 11:51     ` Andy Shevchenko
2020-05-15 12:27       ` Mark Brown
2020-05-15 15:43         ` Serge Semin
2020-05-15 10:47   ` [PATCH v2 03/19] spi: dw: Clear DMAC register when done or stopped Serge Semin
2020-05-15 12:01     ` Andy Shevchenko
2020-05-15 16:42     ` Mark Brown
2020-05-15 17:21       ` Serge Semin
2020-05-15 10:47   ` [PATCH v2 05/19] spi: dw: Enable interrupts in accordance with DMA xfer mode Serge Semin
2020-05-15 12:27     ` Andy Shevchenko
2020-05-16 14:06       ` Serge Semin
2020-05-15 10:47   ` [PATCH v2 09/19] spi: dw: Parameterize the DMA Rx/Tx burst length Serge Semin
2020-05-15 14:01     ` Andy Shevchenko
     [not found]       ` <20200516143353.hw6nny5hbwgiyxfw@mobilestation>
2020-05-18 11:01         ` Andy Shevchenko
2020-05-18 12:41           ` Serge Semin
2020-05-15 10:47   ` [PATCH v2 10/19] spi: dw: Use DMA max burst to set the request thresholds Serge Semin
2020-05-15 14:38     ` Andy Shevchenko [this message]
     [not found]       ` <20200516200133.wmaqnfjbr7234fzo@mobilestation>
2020-05-18 11:03         ` Andy Shevchenko
2020-05-18 12:43           ` Mark Brown
2020-05-18 12:52           ` Serge Semin
2020-05-18 13:25             ` Andy Shevchenko
2020-05-18 13:43               ` Serge Semin
2020-05-18 14:48                 ` Andy Shevchenko
2020-05-18 14:59                   ` Serge Semin
2020-05-15 10:47   ` [PATCH v2 11/19] spi: dw: Initialize paddr in DW SPI MMIO private data Serge Semin
2020-05-15 14:39     ` Andy Shevchenko
2020-05-15 10:47   ` [PATCH v2 14/19] spi: dw: Remove DW DMA code dependency from DW_DMAC_PCI Serge Semin
2020-05-15 15:02     ` Andy Shevchenko
2020-05-15 10:47   ` [PATCH v2 15/19] spi: dw: Add DW SPI DMA/PCI/MMIO dependency on the DW SPI core Serge Semin
2020-05-15 15:03     ` Andy Shevchenko
2020-05-15 10:47   ` [PATCH v2 17/19] spi: dw: Add DMA support to the DW SPI MMIO driver Serge Semin
2020-05-15 15:08     ` Andy Shevchenko
2020-05-15 10:47   ` [PATCH v2 19/19] dt-bindings: spi: Convert DW SPI binding to DT schema Serge Semin
2020-05-16 20:59     ` Serge Semin
2020-05-15 11:49   ` [PATCH v2 00/19] spi: dw: Add generic DW DMA controller support Andy Shevchenko
2020-05-15 15:30     ` Serge Semin
     [not found]   ` <20200515104758.6934-3-Sergey.Semin@baikalelectronics.ru>
2020-05-15 12:01     ` [PATCH v2 02/19] spi: dw: Add Tx/Rx finish wait methods to the MID DMA Andy Shevchenko
2020-05-15 12:18       ` Mark Brown
2020-05-15 12:37         ` Andy Shevchenko
2020-05-15 12:41           ` Mark Brown
     [not found]             ` <20200515200250.zjsv5uaftwqcnwud@mobilestation>
2020-05-18 10:51               ` Mark Brown
     [not found]                 ` <20200518110453.w3ko5a5yzwyr73ir@mobilestation>
2020-05-18 11:11                   ` Mark Brown
     [not found]       ` <20200515194058.pmpd4wa7lw2dle3g@mobilestation>
2020-05-18 10:55         ` Andy Shevchenko
     [not found]   ` <20200515104758.6934-5-Sergey.Semin@baikalelectronics.ru>
2020-05-15 12:05     ` [PATCH v2 04/19] spi: dw: Fix native CS being unset Andy Shevchenko
     [not found]   ` <20200515104758.6934-7-Sergey.Semin@baikalelectronics.ru>
2020-05-15 12:34     ` [PATCH v2 06/19] spi: dw: Discard static DW DMA slave structures Andy Shevchenko
     [not found]       ` <20200516142030.kburieaxjg4n7c42@mobilestation>
2020-05-18 11:00         ` Andy Shevchenko
2020-05-18 11:38           ` Andy Shevchenko
     [not found]             ` <20200518123242.xoosc4pcj7heo4he@mobilestation>
2020-05-18 13:22               ` Andy Shevchenko
     [not found]   ` <20200515104758.6934-8-Sergey.Semin@baikalelectronics.ru>
2020-05-15 12:38     ` [PATCH v2 07/19] spi: dw: Discard unused void priv pointer Andy Shevchenko
     [not found]   ` <20200515104758.6934-9-Sergey.Semin@baikalelectronics.ru>
2020-05-15 13:03     ` [PATCH v2 08/19] spi: dw: Discard dma_width member of the dw_spi structure Andy Shevchenko
     [not found]       ` <20200515130559.psq2zwfhovt6rzhl@mobilestation>
2020-05-15 13:49         ` Andy Shevchenko
     [not found]           ` <20200515141627.pqdaic6wksatusl6@mobilestation>
2020-05-15 15:00             ` Andy Shevchenko
     [not found]   ` <20200515104758.6934-13-Sergey.Semin@baikalelectronics.ru>
2020-05-15 14:40     ` [PATCH v2 12/19] spi: dw: Fix Rx-only DMA transfers Andy Shevchenko
2020-05-15 16:55       ` Mark Brown
     [not found]   ` <20200515104758.6934-14-Sergey.Semin@baikalelectronics.ru>
2020-05-15 14:51     ` [PATCH v2 13/19] spi: dw: Move Non-DMA code to the DW PCIe-SPI driver Andy Shevchenko
     [not found]       ` <20200516201724.7q5uhxmzpr6xjooj@mobilestation>
     [not found]         ` <20200518125850.jnhaqlr2ticu3ivs@mobilestation>
2020-05-18 13:00           ` Mark Brown
     [not found]   ` <20200515104758.6934-19-Sergey.Semin@baikalelectronics.ru>
2020-05-15 15:10     ` [PATCH v2 18/19] spi: dw: Use regset32 DebugFS method to create regdump file Andy Shevchenko
     [not found]       ` <20200516204634.td52orxfnh7iewg6@mobilestation>
2020-05-18 11:18         ` Andy Shevchenko
     [not found]           ` <20200518140825.jnkfpybxnwq7fx2m@mobilestation>
2020-05-18 15:06             ` Andy Shevchenko
2020-05-15 18:21   ` [PATCH v2 00/19] spi: dw: Add generic DW DMA controller support Mark Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200515143842.GG1634618@smile.fi.intel.com \
    --to=andriy.shevchenko@linux.intel.com \
    --cc=Alexey.Malahov@baikalelectronics.ru \
    --cc=Georgy.Vlasov@baikalelectronics.ru \
    --cc=Ramil.Zaripov@baikalelectronics.ru \
    --cc=Sergey.Semin@baikalelectronics.ru \
    --cc=allison@lohutok.net \
    --cc=arnd@arndb.de \
    --cc=broonie@kernel.org \
    --cc=cleger@kalray.eu \
    --cc=devicetree@vger.kernel.org \
    --cc=fancer.lancer@gmail.com \
    --cc=gareth.williams.jx@renesas.com \
    --cc=jarkko.nikula@linux.intel.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=linux-spi@vger.kernel.org \
    --cc=paulburton@kernel.org \
    --cc=ralf@linux-mips.org \
    --cc=robh+dt@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=tsbogend@alpha.franken.de \
    --cc=wan.ahmad.zainie.wan.mohamad@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.