aboutsummaryrefslogtreecommitdiffstats
path: root/package/boot/uboot-layerscape/patches/0071-driver-fsl_qspi-disable-AHB-buffer-prefetch.patch
blob: a7cb7b485ef78420f57f1c18a15661a08bb8bce8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
From e2a5bba97cd6e42b2b631bd17012aa26ffdb5f67 Mon Sep 17 00:00:00 2001
From: Yunhui Cui <yunhui.cui@nxp.com>
Date: Tue, 12 Jul 2016 10:30:08 +0800
Subject: [PATCH 71/93] driver: fsl_qspi: disable AHB buffer prefetch

Errata: A-009282: QuadSPI data pre-fetch can result in incorrect data
When we enable the CONFIG_SYS_FSL_QSPI_AHB, we need this errata workaround.

Signed-off-by: Yunhui Cui <yunhui.cui@nxp.com>
---
 drivers/spi/fsl_qspi.c           |   12 +++++++++++-
 include/configs/ls1012a_common.h |    1 +
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/spi/fsl_qspi.c b/drivers/spi/fsl_qspi.c
index 09759fa..f1c87f5 100644
--- a/drivers/spi/fsl_qspi.c
+++ b/drivers/spi/fsl_qspi.c
@@ -441,13 +441,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, &regs->buf0cr, QSPI_BUFXCR_INVALID_MSTRID);
 	qspi_write32(priv->flags, &regs->buf1cr, QSPI_BUFXCR_INVALID_MSTRID);
 	qspi_write32(priv->flags, &regs->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, &regs->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, &regs->buf0ind, 0);
diff --git a/include/configs/ls1012a_common.h b/include/configs/ls1012a_common.h
index 47b8ec3..f0ae355 100644
--- a/include/configs/ls1012a_common.h
+++ b/include/configs/ls1012a_common.h
@@ -68,6 +68,7 @@
 #define FSL_QSPI_FLASH_SIZE		(1 << 26)
 #define FSL_QSPI_FLASH_NUM		2
 #define CONFIG_SYS_FSL_QSPI_AHB
+#define CONFIG_SYS_FSL_ERRATUM_A009282
 
 /*
  * Environment
-- 
1.7.9.5