From: Sascha Hauer <s.hauer@pengutronix.de>
To: Robin Gong <yibin.gong@nxp.com>
Cc: vkoul@kernel.org, shawnguo@kernel.org,
u.kleine-koenig@pengutronix.de, broonie@kernel.org,
robh+dt@kernel.org, festevam@gmail.com, dan.j.williams@intel.com,
mark.rutland@arm.com, catalin.marinas@arm.com,
will.deacon@arm.com, l.stach@pengutronix.de,
martin.fuzzey@flowbird.group, kernel@pengutronix.de,
linux-spi@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-imx@nxp.com,
dmaengine@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [RESEND v6 06/13] spi: imx: fix ERR009165
Date: Tue, 10 Mar 2020 08:39:20 +0100 [thread overview]
Message-ID: <20200310073920.GR3335@pengutronix.de> (raw)
In-Reply-To: <1583839922-22699-7-git-send-email-yibin.gong@nxp.com>
On Tue, Mar 10, 2020 at 07:31:55PM +0800, Robin Gong wrote:
> Change to XCH mode even in dma mode, please refer to the below
> errata:
> https://www.nxp.com/docs/en/errata/IMX6DQCE.pdf
>
> Signed-off-by: Robin Gong <yibin.gong@nxp.com>
> Acked-by: Mark Brown <broonie@kernel.org>
> ---
> drivers/spi/spi-imx.c | 17 ++++++++++-------
> 1 file changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
> index f4f28a4..842a86e 100644
> --- a/drivers/spi/spi-imx.c
> +++ b/drivers/spi/spi-imx.c
> @@ -585,8 +585,9 @@ static int mx51_ecspi_prepare_transfer(struct spi_imx_data *spi_imx,
> ctrl |= mx51_ecspi_clkdiv(spi_imx, t->speed_hz, &clk);
> spi_imx->spi_bus_clk = clk;
>
> + /* ERR009165: work in XHC mode as PIO */
> if (spi_imx->usedma)
> - ctrl |= MX51_ECSPI_CTRL_SMC;
> + ctrl &= ~MX51_ECSPI_CTRL_SMC;
'ctrl' was read from the hardware. In the dma case it was set
explicitly, but it was never cleared for a PIO transfer. This looked
wrong before this patch. Now with this patch it looks even more wrong:
We clear a bit that has never been set and we only do this for DMA, when
for the PIO case it definitly must be cleared. Drop the if clause.
>
> writel(ctrl, spi_imx->base + MX51_ECSPI_CTRL);
>
> @@ -612,12 +613,14 @@ static int mx51_ecspi_prepare_transfer(struct spi_imx_data *spi_imx,
>
> static void mx51_setup_wml(struct spi_imx_data *spi_imx)
> {
> + u32 tx_wml = 0;
> +
> /*
> * Configure the DMA register: setup the watermark
> * and enable DMA request.
> */
> writel(MX51_ECSPI_DMA_RX_WML(spi_imx->wml - 1) |
> - MX51_ECSPI_DMA_TX_WML(spi_imx->wml) |
> + MX51_ECSPI_DMA_TX_WML(tx_wml) |
tx_wml is never assigned any other value than 0. Drop the variable.
> MX51_ECSPI_DMA_RXT_WML(spi_imx->wml) |
> MX51_ECSPI_DMA_TEDEN | MX51_ECSPI_DMA_RXDEN |
> MX51_ECSPI_DMA_RXTDEN, spi_imx->base + MX51_ECSPI_DMA);
> @@ -1171,7 +1174,11 @@ static int spi_imx_dma_configure(struct spi_master *master)
> tx.direction = DMA_MEM_TO_DEV;
> tx.dst_addr = spi_imx->base_phys + MXC_CSPITXDATA;
> tx.dst_addr_width = buswidth;
> - tx.dst_maxburst = spi_imx->wml;
> + /*
> + * For ERR009165 with tx_wml = 0 could enlarge burst size to fifo size
> + * to speed up fifo filling as possible.
> + */
> + tx.dst_maxburst = spi_imx->devtype_data->fifo_size;
> ret = dmaengine_slave_config(master->dma_tx, &tx);
> if (ret) {
> dev_err(spi_imx->dev, "TX dma configuration failed with %d\n", ret);
> @@ -1265,10 +1272,6 @@ static int spi_imx_sdma_init(struct device *dev, struct spi_imx_data *spi_imx,
> {
> int ret;
>
> - /* use pio mode for i.mx6dl chip TKT238285 */
> - if (of_machine_is_compatible("fsl,imx6dl"))
> - return 0;
So with this patch it becomes possible to do DMA on i.MX6dl, but it is
mentioned nowhere.
Sascha
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
WARNING: multiple messages have this Message-ID (diff)
From: Sascha Hauer <s.hauer-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
To: Robin Gong <yibin.gong-3arQi8VN3Tc@public.gmane.org>
Cc: vkoul-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
shawnguo-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
u.kleine-koenig-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org,
broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
festevam-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
dan.j.williams-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org,
mark.rutland-5wv7dgnIgG8@public.gmane.org,
catalin.marinas-5wv7dgnIgG8@public.gmane.org,
will.deacon-5wv7dgnIgG8@public.gmane.org,
l.stach-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org,
martin.fuzzey-X8SyT9posyX3d/wEbhiU/g@public.gmane.org,
kernel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org,
linux-spi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-imx-3arQi8VN3Tc@public.gmane.org,
dmaengine-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [RESEND v6 06/13] spi: imx: fix ERR009165
Date: Tue, 10 Mar 2020 08:39:20 +0100 [thread overview]
Message-ID: <20200310073920.GR3335@pengutronix.de> (raw)
In-Reply-To: <1583839922-22699-7-git-send-email-yibin.gong-3arQi8VN3Tc@public.gmane.org>
On Tue, Mar 10, 2020 at 07:31:55PM +0800, Robin Gong wrote:
> Change to XCH mode even in dma mode, please refer to the below
> errata:
> https://www.nxp.com/docs/en/errata/IMX6DQCE.pdf
>
> Signed-off-by: Robin Gong <yibin.gong-3arQi8VN3Tc@public.gmane.org>
> Acked-by: Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
> ---
> drivers/spi/spi-imx.c | 17 ++++++++++-------
> 1 file changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
> index f4f28a4..842a86e 100644
> --- a/drivers/spi/spi-imx.c
> +++ b/drivers/spi/spi-imx.c
> @@ -585,8 +585,9 @@ static int mx51_ecspi_prepare_transfer(struct spi_imx_data *spi_imx,
> ctrl |= mx51_ecspi_clkdiv(spi_imx, t->speed_hz, &clk);
> spi_imx->spi_bus_clk = clk;
>
> + /* ERR009165: work in XHC mode as PIO */
> if (spi_imx->usedma)
> - ctrl |= MX51_ECSPI_CTRL_SMC;
> + ctrl &= ~MX51_ECSPI_CTRL_SMC;
'ctrl' was read from the hardware. In the dma case it was set
explicitly, but it was never cleared for a PIO transfer. This looked
wrong before this patch. Now with this patch it looks even more wrong:
We clear a bit that has never been set and we only do this for DMA, when
for the PIO case it definitly must be cleared. Drop the if clause.
>
> writel(ctrl, spi_imx->base + MX51_ECSPI_CTRL);
>
> @@ -612,12 +613,14 @@ static int mx51_ecspi_prepare_transfer(struct spi_imx_data *spi_imx,
>
> static void mx51_setup_wml(struct spi_imx_data *spi_imx)
> {
> + u32 tx_wml = 0;
> +
> /*
> * Configure the DMA register: setup the watermark
> * and enable DMA request.
> */
> writel(MX51_ECSPI_DMA_RX_WML(spi_imx->wml - 1) |
> - MX51_ECSPI_DMA_TX_WML(spi_imx->wml) |
> + MX51_ECSPI_DMA_TX_WML(tx_wml) |
tx_wml is never assigned any other value than 0. Drop the variable.
> MX51_ECSPI_DMA_RXT_WML(spi_imx->wml) |
> MX51_ECSPI_DMA_TEDEN | MX51_ECSPI_DMA_RXDEN |
> MX51_ECSPI_DMA_RXTDEN, spi_imx->base + MX51_ECSPI_DMA);
> @@ -1171,7 +1174,11 @@ static int spi_imx_dma_configure(struct spi_master *master)
> tx.direction = DMA_MEM_TO_DEV;
> tx.dst_addr = spi_imx->base_phys + MXC_CSPITXDATA;
> tx.dst_addr_width = buswidth;
> - tx.dst_maxburst = spi_imx->wml;
> + /*
> + * For ERR009165 with tx_wml = 0 could enlarge burst size to fifo size
> + * to speed up fifo filling as possible.
> + */
> + tx.dst_maxburst = spi_imx->devtype_data->fifo_size;
> ret = dmaengine_slave_config(master->dma_tx, &tx);
> if (ret) {
> dev_err(spi_imx->dev, "TX dma configuration failed with %d\n", ret);
> @@ -1265,10 +1272,6 @@ static int spi_imx_sdma_init(struct device *dev, struct spi_imx_data *spi_imx,
> {
> int ret;
>
> - /* use pio mode for i.mx6dl chip TKT238285 */
> - if (of_machine_is_compatible("fsl,imx6dl"))
> - return 0;
So with this patch it becomes possible to do DMA on i.MX6dl, but it is
mentioned nowhere.
Sascha
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
WARNING: multiple messages have this Message-ID (diff)
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Robin Gong <yibin.gong@nxp.com>
Cc: mark.rutland@arm.com, devicetree@vger.kernel.org,
catalin.marinas@arm.com, kernel@pengutronix.de,
shawnguo@kernel.org, will.deacon@arm.com,
linux-kernel@vger.kernel.org, robh+dt@kernel.org,
linux-spi@vger.kernel.org, vkoul@kernel.org, broonie@kernel.org,
linux-imx@nxp.com, martin.fuzzey@flowbird.group,
u.kleine-koenig@pengutronix.de, dmaengine@vger.kernel.org,
dan.j.williams@intel.com, festevam@gmail.com,
linux-arm-kernel@lists.infradead.org, l.stach@pengutronix.de
Subject: Re: [RESEND v6 06/13] spi: imx: fix ERR009165
Date: Tue, 10 Mar 2020 08:39:20 +0100 [thread overview]
Message-ID: <20200310073920.GR3335@pengutronix.de> (raw)
In-Reply-To: <1583839922-22699-7-git-send-email-yibin.gong@nxp.com>
On Tue, Mar 10, 2020 at 07:31:55PM +0800, Robin Gong wrote:
> Change to XCH mode even in dma mode, please refer to the below
> errata:
> https://www.nxp.com/docs/en/errata/IMX6DQCE.pdf
>
> Signed-off-by: Robin Gong <yibin.gong@nxp.com>
> Acked-by: Mark Brown <broonie@kernel.org>
> ---
> drivers/spi/spi-imx.c | 17 ++++++++++-------
> 1 file changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
> index f4f28a4..842a86e 100644
> --- a/drivers/spi/spi-imx.c
> +++ b/drivers/spi/spi-imx.c
> @@ -585,8 +585,9 @@ static int mx51_ecspi_prepare_transfer(struct spi_imx_data *spi_imx,
> ctrl |= mx51_ecspi_clkdiv(spi_imx, t->speed_hz, &clk);
> spi_imx->spi_bus_clk = clk;
>
> + /* ERR009165: work in XHC mode as PIO */
> if (spi_imx->usedma)
> - ctrl |= MX51_ECSPI_CTRL_SMC;
> + ctrl &= ~MX51_ECSPI_CTRL_SMC;
'ctrl' was read from the hardware. In the dma case it was set
explicitly, but it was never cleared for a PIO transfer. This looked
wrong before this patch. Now with this patch it looks even more wrong:
We clear a bit that has never been set and we only do this for DMA, when
for the PIO case it definitly must be cleared. Drop the if clause.
>
> writel(ctrl, spi_imx->base + MX51_ECSPI_CTRL);
>
> @@ -612,12 +613,14 @@ static int mx51_ecspi_prepare_transfer(struct spi_imx_data *spi_imx,
>
> static void mx51_setup_wml(struct spi_imx_data *spi_imx)
> {
> + u32 tx_wml = 0;
> +
> /*
> * Configure the DMA register: setup the watermark
> * and enable DMA request.
> */
> writel(MX51_ECSPI_DMA_RX_WML(spi_imx->wml - 1) |
> - MX51_ECSPI_DMA_TX_WML(spi_imx->wml) |
> + MX51_ECSPI_DMA_TX_WML(tx_wml) |
tx_wml is never assigned any other value than 0. Drop the variable.
> MX51_ECSPI_DMA_RXT_WML(spi_imx->wml) |
> MX51_ECSPI_DMA_TEDEN | MX51_ECSPI_DMA_RXDEN |
> MX51_ECSPI_DMA_RXTDEN, spi_imx->base + MX51_ECSPI_DMA);
> @@ -1171,7 +1174,11 @@ static int spi_imx_dma_configure(struct spi_master *master)
> tx.direction = DMA_MEM_TO_DEV;
> tx.dst_addr = spi_imx->base_phys + MXC_CSPITXDATA;
> tx.dst_addr_width = buswidth;
> - tx.dst_maxburst = spi_imx->wml;
> + /*
> + * For ERR009165 with tx_wml = 0 could enlarge burst size to fifo size
> + * to speed up fifo filling as possible.
> + */
> + tx.dst_maxburst = spi_imx->devtype_data->fifo_size;
> ret = dmaengine_slave_config(master->dma_tx, &tx);
> if (ret) {
> dev_err(spi_imx->dev, "TX dma configuration failed with %d\n", ret);
> @@ -1265,10 +1272,6 @@ static int spi_imx_sdma_init(struct device *dev, struct spi_imx_data *spi_imx,
> {
> int ret;
>
> - /* use pio mode for i.mx6dl chip TKT238285 */
> - if (of_machine_is_compatible("fsl,imx6dl"))
> - return 0;
So with this patch it becomes possible to do DMA on i.MX6dl, but it is
mentioned nowhere.
Sascha
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-03-10 7:39 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-10 11:31 [RESEND v6 00/13] add ecspi ERR009165 for i.mx6/7 soc family Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 11:31 ` [RESEND v6 01/13] Revert "ARM: dts: imx6q: Use correct SDMA script for SPI5 core" Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 11:31 ` [RESEND v6 02/13] Revert "ARM: dts: imx6: Use correct SDMA script for SPI cores" Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 11:31 ` [RESEND v6 03/13] Revert "dmaengine: imx-sdma: refine to load context only once" Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 11:31 ` [RESEND v6 04/13] dmaengine: imx-sdma: remove dupilicated sdma_load_context Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 11:31 ` [RESEND v6 05/13] dmaengine: imx-sdma: add mcu_2_ecspi script Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 11:31 ` [RESEND v6 06/13] spi: imx: fix ERR009165 Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 7:39 ` Sascha Hauer [this message]
2020-03-10 7:39 ` Sascha Hauer
2020-03-10 7:39 ` Sascha Hauer
2020-03-10 8:27 ` Robin Gong
2020-03-10 8:27 ` Robin Gong
2020-03-10 8:27 ` Robin Gong
2020-03-10 8:37 ` Uwe Kleine-König
2020-03-10 8:37 ` Uwe Kleine-König
2020-03-10 8:37 ` Uwe Kleine-König
2020-03-10 9:02 ` Robin Gong
2020-03-10 9:02 ` Robin Gong
2020-03-10 9:02 ` Robin Gong
2020-03-10 11:31 ` [RESEND v6 07/13] spi: imx: remove ERR009165 workaround on i.mx6ul Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 8:02 ` Sascha Hauer
2020-03-10 8:02 ` Sascha Hauer
2020-03-10 8:02 ` Sascha Hauer
2020-03-10 8:43 ` Robin Gong
2020-03-10 8:43 ` Robin Gong
2020-03-10 8:43 ` Robin Gong
2020-03-10 9:25 ` Sascha Hauer
2020-03-10 9:25 ` Sascha Hauer
2020-03-10 9:25 ` Sascha Hauer
2020-03-10 9:31 ` Robin Gong
2020-03-10 9:31 ` Robin Gong
2020-03-10 9:31 ` Robin Gong
2020-03-10 11:31 ` [RESEND v6 08/13] spi: imx: add new i.mx6ul compatible name in binding doc Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 18:41 ` Rob Herring
2020-03-10 18:41 ` Rob Herring
2020-03-10 18:41 ` Rob Herring
2020-03-11 3:22 ` Robin Gong
2020-03-11 3:22 ` Robin Gong
2020-03-11 3:22 ` Robin Gong
2020-03-10 11:31 ` [RESEND v6 09/13] dmaengine: imx-sdma: remove ERR009165 on i.mx6ul Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 8:19 ` Sascha Hauer
2020-03-10 8:19 ` Sascha Hauer
2020-03-10 8:19 ` Sascha Hauer
2020-03-10 8:59 ` Robin Gong
2020-03-10 8:59 ` Robin Gong
2020-03-10 8:59 ` Robin Gong
2020-03-10 9:28 ` Sascha Hauer
2020-03-10 9:28 ` Sascha Hauer
2020-03-10 9:28 ` Sascha Hauer
2020-03-10 9:35 ` Robin Gong
2020-03-10 9:35 ` Robin Gong
2020-03-10 9:35 ` Robin Gong
2020-03-10 11:31 ` [RESEND v6 10/13] dma: imx-sdma: add i.mx6ul/6sx compatible name Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 11:31 ` Robin Gong
2020-03-10 11:32 ` [RESEND v6 11/13] dmaengine: imx-sdma: fix ecspi1 rx dma not work on i.mx8mm Robin Gong
2020-03-10 11:32 ` Robin Gong
2020-03-10 11:32 ` Robin Gong
2020-03-10 11:32 ` [RESEND v6 12/13] dmaengine: imx-sdma: add uart rom script Robin Gong
2020-03-10 11:32 ` Robin Gong
2020-03-10 11:32 ` Robin Gong
2020-03-10 11:32 ` [RESEND v6 13/13] Revert "dmaengine: imx-sdma: fix context cache" Robin Gong
2020-03-10 11:32 ` Robin Gong
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=20200310073920.GR3335@pengutronix.de \
--to=s.hauer@pengutronix.de \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=dan.j.williams@intel.com \
--cc=devicetree@vger.kernel.org \
--cc=dmaengine@vger.kernel.org \
--cc=festevam@gmail.com \
--cc=kernel@pengutronix.de \
--cc=l.stach@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-imx@nxp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-spi@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=martin.fuzzey@flowbird.group \
--cc=robh+dt@kernel.org \
--cc=shawnguo@kernel.org \
--cc=u.kleine-koenig@pengutronix.de \
--cc=vkoul@kernel.org \
--cc=will.deacon@arm.com \
--cc=yibin.gong@nxp.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.