[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200508114330.GL185537@smile.fi.intel.com>
Date: Fri, 8 May 2020 14:43:30 +0300
From: Andy Shevchenko <andriy.shevchenko@...ux.intel.com>
To: Serge Semin <Sergey.Semin@...kalelectronics.ru>
Cc: Vinod Koul <vkoul@...nel.org>, Viresh Kumar <vireshk@...nel.org>,
Dan Williams <dan.j.williams@...el.com>,
Serge Semin <fancer.lancer@...il.com>,
Alexey Malahov <Alexey.Malahov@...kalelectronics.ru>,
Thomas Bogendoerfer <tsbogend@...ha.franken.de>,
Paul Burton <paulburton@...nel.org>,
Ralf Baechle <ralf@...ux-mips.org>,
Arnd Bergmann <arnd@...db.de>,
Rob Herring <robh+dt@...nel.org>, linux-mips@...r.kernel.org,
devicetree@...r.kernel.org, dmaengine@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2 6/6] dmaengine: dw: Take HC_LLP flag into account for
noLLP auto-config
On Fri, May 08, 2020 at 01:53:04PM +0300, Serge Semin wrote:
> Full multi-block transfers functionality is enabled in DW DMA
> controller only if CHx_MULTI_BLK_EN is set. But LLP-based transfers
> can be executed only if hardcode channel x LLP register feature isn't
> enabled, which can be switched on at the IP core synthesis for
> optimization. If it's enabled then the LLP register is hardcoded to
> zero, so the blocks chaining based on the LLPs is unsupported.
>
This one is good.
Reviewed-by: Andy Shevchenko <andriy.shevchenko@...ux.intel.com>
Feel free to reassemble the series, so, Vinod can apply it independently.
> Signed-off-by: Serge Semin <Sergey.Semin@...kalelectronics.ru>
> Cc: Alexey Malahov <Alexey.Malahov@...kalelectronics.ru>
> Cc: Thomas Bogendoerfer <tsbogend@...ha.franken.de>
> Cc: Paul Burton <paulburton@...nel.org>
> Cc: Ralf Baechle <ralf@...ux-mips.org>
> Cc: Arnd Bergmann <arnd@...db.de>
> Cc: Andy Shevchenko <andriy.shevchenko@...ux.intel.com>
> Cc: Dan Williams <dan.j.williams@...el.com>
> Cc: Rob Herring <robh+dt@...nel.org>
> Cc: linux-mips@...r.kernel.org
> Cc: devicetree@...r.kernel.org
>
> ---
>
> Changelog v2:
> - Rearrange SoBs.
> - Add comment about why hardware accelerated LLP list support depends
> on both MBLK_EN and HC_LLP configs setting.
> - Use explicit bits state comparison operator.
> ---
> drivers/dma/dw/core.c | 11 ++++++++++-
> drivers/dma/dw/regs.h | 1 +
> 2 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/dma/dw/core.c b/drivers/dma/dw/core.c
> index 5b76ccc857fd..3179d45df662 100644
> --- a/drivers/dma/dw/core.c
> +++ b/drivers/dma/dw/core.c
> @@ -1180,8 +1180,17 @@ int do_dma_probe(struct dw_dma_chip *chip)
> */
> dwc->block_size =
> (4 << ((pdata->block_size >> 4 * i) & 0xf)) - 1;
> +
> + /*
> + * According to the DW DMA databook the true scatter-
> + * gether LLPs aren't available if either multi-block
> + * config is disabled (CHx_MULTI_BLK_EN == 0) or the
> + * LLP register is hard-coded to zeros
> + * (CHx_HC_LLP == 1).
> + */
> dwc->nollp =
> - (dwc_params >> DWC_PARAMS_MBLK_EN & 0x1) == 0;
> + (dwc_params >> DWC_PARAMS_MBLK_EN & 0x1) == 0 ||
> + (dwc_params >> DWC_PARAMS_HC_LLP & 0x1) == 1;
> dwc->max_burst =
> (0x4 << (dwc_params >> DWC_PARAMS_MSIZE & 0x7));
> } else {
> diff --git a/drivers/dma/dw/regs.h b/drivers/dma/dw/regs.h
> index f581d4809b71..a8af19d0eabd 100644
> --- a/drivers/dma/dw/regs.h
> +++ b/drivers/dma/dw/regs.h
> @@ -126,6 +126,7 @@ struct dw_dma_regs {
>
> /* Bitfields in DWC_PARAMS */
> #define DWC_PARAMS_MSIZE 16 /* max group transaction size */
> +#define DWC_PARAMS_HC_LLP 13 /* set LLP register to zero */
> #define DWC_PARAMS_MBLK_EN 11 /* multi block transfer */
>
> /* bursts size */
> --
> 2.25.1
>
--
With Best Regards,
Andy Shevchenko
Powered by blists - more mailing lists