[U-Boot] [PATCH v3] driver: spi: fsl-qspi: disable AHB buffer prefetch

From: Yunhui Cui yunhui.cui@nxp.com
Errata: A-009282: QuadSPI data pre-fetch can result in incorrect data We need this errata workaround when CONFIG_SYS_FSL_QSPI_AHB is enabled.
Signed-off-by: Yunhui Cui yunhui.cui@nxp.com --- drivers/spi/fsl_qspi.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/drivers/spi/fsl_qspi.c b/drivers/spi/fsl_qspi.c index 75cbab2..0354e20 100644 --- a/drivers/spi/fsl_qspi.c +++ b/drivers/spi/fsl_qspi.c @@ -438,13 +438,23 @@ static void qspi_enable_ddr_mode(struct fsl_qspi_priv *priv) static void qspi_init_ahb_read(struct fsl_qspi_priv *priv) { struct fsl_qspi_regs *regs = priv->regs; + int rx_size = 0x80;
/* AHB configuration for access buffer 0/1/2 .*/ qspi_write32(priv->flags, ®s->buf0cr, QSPI_BUFXCR_INVALID_MSTRID); qspi_write32(priv->flags, ®s->buf1cr, QSPI_BUFXCR_INVALID_MSTRID); qspi_write32(priv->flags, ®s->buf2cr, QSPI_BUFXCR_INVALID_MSTRID); + +#ifdef CONFIG_SYS_FSL_ERRATUM_A009282 + /*A-009282: QuadSPI data pre-fetch can result in incorrect data + *Workaround: Keep the read data size to 64 bits (8 Bytes), which + *disables the prefetch on the AHB buffer,and prevents this issue + *from occurring. + */ + rx_size = 0x1; +#endif qspi_write32(priv->flags, ®s->buf3cr, QSPI_BUF3CR_ALLMST_MASK | - (0x80 << QSPI_BUF3CR_ADATSZ_SHIFT)); + (rx_size << QSPI_BUF3CR_ADATSZ_SHIFT));
/* We only use the buffer3 */ qspi_write32(priv->flags, ®s->buf0ind, 0);

-----Original Message----- From: U-Boot [mailto:u-boot-bounces@lists.denx.de] On Behalf Of Yunhui Cui Sent: Tuesday, July 12, 2016 8:20 AM To: york sun york.sun@nxp.com Cc: Yunhui Cui yunhui.cui@nxp.com; u-boot@lists.denx.de Subject: [U-Boot] [PATCH v3] driver: spi: fsl-qspi: disable AHB buffer prefetch
From: Yunhui Cui yunhui.cui@nxp.com
Errata: A-009282: QuadSPI data pre-fetch can result in incorrect data We need this errata workaround when CONFIG_SYS_FSL_QSPI_AHB is enabled.
Can we add slightly more details about workaround other than Just enabling CONFIG_SYS_FSL_QSPI_AHB. With this you can avoid details of workaround in code.
Please add CONFIG_SYS_FSL_QSPI_AHB in README file
Signed-off-by: Yunhui Cui yunhui.cui@nxp.com
Patch revision history missing.
--prabhakar

On Tuesday, July 12, 2016 11:06 AM Prabhakar Wrote
-----Original Message----- From: U-Boot [mailto:u-boot-bounces@lists.denx.de] On Behalf Of Yunhui Cui Sent: Tuesday, July 12, 2016 8:20 AM To: york sun york.sun@nxp.com Cc: Yunhui Cui yunhui.cui@nxp.com; u-boot@lists.denx.de Subject: [U-Boot] [PATCH v3] driver: spi: fsl-qspi: disable AHB buffer prefetch
From: Yunhui Cui yunhui.cui@nxp.com
Errata: A-009282: QuadSPI data pre-fetch can result in incorrect data We need this errata workaround when CONFIG_SYS_FSL_QSPI_AHB is enabled.
Can we add slightly more details about workaround other than Just enabling CONFIG_SYS_FSL_QSPI_AHB. With this you can avoid details of workaround in code.
[Yunhui] ok!
Please add CONFIG_SYS_FSL_QSPI_AHB in README file
[Yunhui] why should we add it and how to add it ?
Signed-off-by: Yunhui Cui yunhui.cui@nxp.com
Patch revision history missing.
--prabhakar

On 07/11/2016 08:00 PM, Yunhui Cui wrote:
From: Yunhui Cui yunhui.cui@nxp.com
Errata: A-009282: QuadSPI data pre-fetch can result in incorrect data We need this errata workaround when CONFIG_SYS_FSL_QSPI_AHB is enabled.
Signed-off-by: Yunhui Cui yunhui.cui@nxp.com
drivers/spi/fsl_qspi.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/drivers/spi/fsl_qspi.c b/drivers/spi/fsl_qspi.c index 75cbab2..0354e20 100644 --- a/drivers/spi/fsl_qspi.c +++ b/drivers/spi/fsl_qspi.c @@ -438,13 +438,23 @@ static void qspi_enable_ddr_mode(struct fsl_qspi_priv *priv) static void qspi_init_ahb_read(struct fsl_qspi_priv *priv) { struct fsl_qspi_regs *regs = priv->regs;
- int rx_size = 0x80;
Wrap this with ifdef, or you will have compiling warning when the macro is not defined.
York
/* AHB configuration for access buffer 0/1/2 .*/ qspi_write32(priv->flags, ®s->buf0cr, QSPI_BUFXCR_INVALID_MSTRID); qspi_write32(priv->flags, ®s->buf1cr, QSPI_BUFXCR_INVALID_MSTRID); qspi_write32(priv->flags, ®s->buf2cr, QSPI_BUFXCR_INVALID_MSTRID);
+#ifdef CONFIG_SYS_FSL_ERRATUM_A009282
- /*A-009282: QuadSPI data pre-fetch can result in incorrect data
*Workaround: Keep the read data size to 64 bits (8 Bytes), which
*disables the prefetch on the AHB buffer,and prevents this issue
*from occurring.
- */
- rx_size = 0x1;
+#endif qspi_write32(priv->flags, ®s->buf3cr, QSPI_BUF3CR_ALLMST_MASK |
(0x80 << QSPI_BUF3CR_ADATSZ_SHIFT));
(rx_size << QSPI_BUF3CR_ADATSZ_SHIFT));
/* We only use the buffer3 */ qspi_write32(priv->flags, ®s->buf0ind, 0);

On 07/12/2016 11:15 PM, York wrote:
On 07/11/2016 08:00 PM, Yunhui Cui wrote:
From: Yunhui Cui yunhui.cui@nxp.com
Errata: A-009282: QuadSPI data pre-fetch can result in incorrect data We need this errata workaround when CONFIG_SYS_FSL_QSPI_AHB is enabled.
Signed-off-by: Yunhui Cui yunhui.cui@nxp.com
drivers/spi/fsl_qspi.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/drivers/spi/fsl_qspi.c b/drivers/spi/fsl_qspi.c index 75cbab2..0354e20 100644 --- a/drivers/spi/fsl_qspi.c +++ b/drivers/spi/fsl_qspi.c @@ -438,13 +438,23 @@ static void qspi_enable_ddr_mode(struct
fsl_qspi_priv *priv)
static void qspi_init_ahb_read(struct fsl_qspi_priv *priv) { struct fsl_qspi_regs *regs = priv->regs;
- int rx_size = 0x80;
Wrap this with ifdef, or you will have compiling warning when the macro is not defined.
York
[Yunhui] Whether This macro defined or not, rx_size will be used, It seems that Wrap is not necessary and have no compiling warning.
thanks. Yunhui
/* AHB configuration for access buffer 0/1/2 .*/ qspi_write32(priv->flags, ®s->buf0cr,
QSPI_BUFXCR_INVALID_MSTRID);
qspi_write32(priv->flags, ®s->buf1cr,
QSPI_BUFXCR_INVALID_MSTRID);
qspi_write32(priv->flags, ®s->buf2cr, QSPI_BUFXCR_INVALID_MSTRID);
+#ifdef CONFIG_SYS_FSL_ERRATUM_A009282
- /*A-009282: QuadSPI data pre-fetch can result in incorrect data
*Workaround: Keep the read data size to 64 bits (8 Bytes), which
*disables the prefetch on the AHB buffer,and prevents this issue
*from occurring.
- */
- rx_size = 0x1;
+#endif qspi_write32(priv->flags, ®s->buf3cr, QSPI_BUF3CR_ALLMST_MASK |
(0x80 << QSPI_BUF3CR_ADATSZ_SHIFT));
(rx_size << QSPI_BUF3CR_ADATSZ_SHIFT));
/* We only use the buffer3 */ qspi_write32(priv->flags, ®s->buf0ind, 0);

On 07/12/2016 07:24 PM, Yunhui Cui wrote:
On 07/12/2016 11:15 PM, York wrote:
On 07/11/2016 08:00 PM, Yunhui Cui wrote:
From: Yunhui Cui yunhui.cui@nxp.com
Errata: A-009282: QuadSPI data pre-fetch can result in incorrect data We need this errata workaround when CONFIG_SYS_FSL_QSPI_AHB is enabled.
Signed-off-by: Yunhui Cui yunhui.cui@nxp.com
drivers/spi/fsl_qspi.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/drivers/spi/fsl_qspi.c b/drivers/spi/fsl_qspi.c index 75cbab2..0354e20 100644 --- a/drivers/spi/fsl_qspi.c +++ b/drivers/spi/fsl_qspi.c @@ -438,13 +438,23 @@ static void qspi_enable_ddr_mode(struct
fsl_qspi_priv *priv)
static void qspi_init_ahb_read(struct fsl_qspi_priv *priv) { struct fsl_qspi_regs *regs = priv->regs;
- int rx_size = 0x80;
Wrap this with ifdef, or you will have compiling warning when the macro is not defined.
York
[Yunhui] Whether This macro defined or not, rx_size will be used, It seems that Wrap is not necessary and have no compiling warning.
OK. That's fine.
York

On 07/11/2016 08:00 PM, Yunhui Cui wrote:
From: Yunhui Cui yunhui.cui@nxp.com
Errata: A-009282: QuadSPI data pre-fetch can result in incorrect data We need this errata workaround when CONFIG_SYS_FSL_QSPI_AHB is enabled.
Signed-off-by: Yunhui Cui yunhui.cui@nxp.com
drivers/spi/fsl_qspi.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/drivers/spi/fsl_qspi.c b/drivers/spi/fsl_qspi.c index 75cbab2..0354e20 100644 --- a/drivers/spi/fsl_qspi.c +++ b/drivers/spi/fsl_qspi.c @@ -438,13 +438,23 @@ static void qspi_enable_ddr_mode(struct fsl_qspi_priv *priv) static void qspi_init_ahb_read(struct fsl_qspi_priv *priv) { struct fsl_qspi_regs *regs = priv->regs;
int rx_size = 0x80;
/* AHB configuration for access buffer 0/1/2 .*/ qspi_write32(priv->flags, ®s->buf0cr, QSPI_BUFXCR_INVALID_MSTRID); qspi_write32(priv->flags, ®s->buf1cr, QSPI_BUFXCR_INVALID_MSTRID); qspi_write32(priv->flags, ®s->buf2cr, QSPI_BUFXCR_INVALID_MSTRID);
+#ifdef CONFIG_SYS_FSL_ERRATUM_A009282
- /*A-009282: QuadSPI data pre-fetch can result in incorrect data
*Workaround: Keep the read data size to 64 bits (8 Bytes), which
*disables the prefetch on the AHB buffer,and prevents this issue
*from occurring.
- */
Please fix the multi-line comment style, and address Prabhakar's comment.
York
participants (4)
-
Prabhakar Kushwaha
-
york sun
-
Yunhui Cui
-
Yunhui Cui