summaryrefslogtreecommitdiff
path: root/firmware/export
diff options
context:
space:
mode:
authorRob Purchase <shotofadds@rockbox.org>2009-08-12 19:26:04 +0000
committerRob Purchase <shotofadds@rockbox.org>2009-08-12 19:26:04 +0000
commite783d0c82a6673d036a71f3eab3e69f95d4b0b37 (patch)
tree4e3966d266b4e8858bd4a016b5e828a73f364f24 /firmware/export
parent4c5ae4b06853a8aee9a4bda7d06e148a52d20285 (diff)
TCC: Implement ECC error correction for sectors read from NAND. Tested on D2 (78x, MLC) and M200 (77x, SLC).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22284 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/export')
-rw-r--r--firmware/export/tcc77x.h78
-rw-r--r--firmware/export/tcc780x.h24
2 files changed, 47 insertions, 55 deletions
diff --git a/firmware/export/tcc77x.h b/firmware/export/tcc77x.h
index ad1a8a17aa..db128b68f6 100644
--- a/firmware/export/tcc77x.h
+++ b/firmware/export/tcc77x.h
@@ -182,51 +182,43 @@
/* ECC controller */
-#define ECC_CTRL (*(volatile unsigned long *)0x80000900)
- #define ECC_DMA_REQ (1<<28)
- #define ECC_ENC (1<<27) /* MLC ECC3/4 */
- #define ECC_FLG (1<<26)
- #define ECC_IEN (1<<25)
- #define ECC_MANUAL (1<<22)
- #define ECC_WCNT (1<<12) /* [21:12] */
- #define ECC_HOLD (1<<7)
- #define ECC_M4EN (1<<6)
- #define ECC_ZERO (1<<5)
- #define ECC_M3EN (1<<4)
- #define ECC_CNT_MASK (7<<1)
- #define ECC_CNT (1<<1)
- #define ECC_SLC (1<<0)
+#define ECC_CTRL (*(volatile unsigned long *)0x80000900)
+ #define ECC_DMA_REQ (1<<28)
+ #define ECC_ENC (1<<27) /* MLC ECC3/4 */
+ #define ECC_READY (1<<26)
+ #define ECC_IEN (1<<25)
+ #define ECC_MANUAL (1<<22)
+ #define ECC_WCNT (1<<12) /* [21:12] */
+ #define ECC_HOLD (1<<7)
+ #define ECC_M4EN (1<<6)
+ #define ECC_ZERO (1<<5)
+ #define ECC_M3EN (1<<4)
+ #define ECC_CNT_MASK (7<<1)
+ #define ECC_CNT (1<<1)
+ #define ECC_SLC (1<<0)
-#define ECC_BASE (*(volatile unsigned long *)0x80000904)
-#define ECC_MASK (*(volatile unsigned long *)0x80000908)
-#define ECC_CLR (*(volatile unsigned long *)0x8000090c)
-#define SLC_ECC0 (*(volatile unsigned long *)0x80000910)
-#define SLC_ECC1 (*(volatile unsigned long *)0x80000914)
-#define SLC_ECC2 (*(volatile unsigned long *)0x80000918)
-#define SLC_ECC3 (*(volatile unsigned long *)0x8000091c)
-#define SLC_ECC4 (*(volatile unsigned long *)0x80000920)
-#define SLC_ECC5 (*(volatile unsigned long *)0x80000924)
-#define SLC_ECC6 (*(volatile unsigned long *)0x80000928)
-#define SLC_ECC7 (*(volatile unsigned long *)0x8000092c)
-#define MLC_ECC0W (*(volatile unsigned long *)0x80000930)
-#define MLC_ECC1W (*(volatile unsigned long *)0x80000934)
-#define MLC_ECC2W (*(volatile unsigned long *)0x80000938)
-#define MLC_ECC0R (*(volatile unsigned long *)0x80000940)
-#define MLC_ECC1R (*(volatile unsigned long *)0x80000944)
-#define MLC_ECC2R (*(volatile unsigned long *)0x80000948)
+#define ECC_BASE (*(volatile unsigned long *)0x80000904)
+#define ECC_MASK (*(volatile unsigned long *)0x80000908)
+#define ECC_CLR (*(volatile unsigned long *)0x8000090c)
+#define SLC_ECC0 (*(volatile unsigned long *)0x80000910)
+#define SLC_ECC1 (*(volatile unsigned long *)0x80000914)
+#define SLC_ECC2 (*(volatile unsigned long *)0x80000918)
+#define SLC_ECC3 (*(volatile unsigned long *)0x8000091c)
+#define SLC_ECC4 (*(volatile unsigned long *)0x80000920)
+#define SLC_ECC5 (*(volatile unsigned long *)0x80000924)
+#define SLC_ECC6 (*(volatile unsigned long *)0x80000928)
+#define SLC_ECC7 (*(volatile unsigned long *)0x8000092c)
+#define MLC_ECC0W (*(volatile unsigned long *)0x80000930)
+#define MLC_ECC1W (*(volatile unsigned long *)0x80000934)
+#define MLC_ECC2W (*(volatile unsigned long *)0x80000938)
+#define MLC_ECC0R (*(volatile unsigned long *)0x80000940)
+#define MLC_ECC1R (*(volatile unsigned long *)0x80000944)
+#define MLC_ECC2R (*(volatile unsigned long *)0x80000948)
#define ECC_CORR_START (*(volatile unsigned long *)0x8000094c)
-#define ECC_ERRADDR1 (*(volatile unsigned long *)0x80000950)
-#define ECC_ERRADDR2 (*(volatile unsigned long *)0x80000954)
-#define ECC_ERRADDR3 (*(volatile unsigned long *)0x80000958)
-#define ECC_ERRADDR4 (*(volatile unsigned long *)0x8000095c)
-#define ECC_ERRDATA1 (*(volatile unsigned long *)0x80000960)
-#define ECC_ERRDATA2 (*(volatile unsigned long *)0x80000964)
-#define ECC_ERRDATA3 (*(volatile unsigned long *)0x80000968)
-#define ECC_ERRDATA4 (*(volatile unsigned long *)0x8000096c)
-#define ECC_ERR_NUM (*(volatile unsigned long *)0x80000970)
-
-#define ECC_ERRDATA(x) (*(volatile unsigned long *)(0x80000960 + (x) * 4))
-#define ECC_ERRADDR(x) (*(volatile unsigned long *)(0x80000950 + (x) * 4))
+#define ECC_ERRADDR(x) (*(volatile unsigned long *)(0x80000950+4*(x)))
+#define ECC_ERRDATA(x) (*(volatile unsigned long *)(0x80000960+4*(x)))
+#define ECC_ERR_NUM (*(volatile unsigned long *)0x80000970)
+
/* Digital Audio Interface */
#define DADI_L0 (*(volatile unsigned long *)0x80000000)
diff --git a/firmware/export/tcc780x.h b/firmware/export/tcc780x.h
index 24a4415ef3..497f1514e0 100644
--- a/firmware/export/tcc780x.h
+++ b/firmware/export/tcc780x.h
@@ -232,18 +232,18 @@
/* ECC Controller */
-#define ECC_CTRL (*(volatile unsigned long *)0xF005B000)
- #define ECC_M4EN (1<<6)
- #define ECC_ENC (1<<27)
- #define ECC_READY (1<<26)
-#define ECC_BASE (*(volatile unsigned long *)0xF005B004)
-#define ECC_CLR (*(volatile unsigned long *)0xF005B00C)
-#define ECC_MLC0W (*(volatile unsigned long *)0xF005B030)
-#define ECC_MLC1W (*(volatile unsigned long *)0xF005B034)
-#define ECC_MLC2W (*(volatile unsigned long *)0xF005B038)
-#define ECC_ERRADDR (*(volatile unsigned long *)0xF005B050)
-#define ECC_ERRDATA (*(volatile unsigned long *)0xF005B060)
-#define ECC_ERR (*(volatile unsigned long *)0xF005B070)
+#define ECC_CTRL (*(volatile unsigned long *)0xF005B000)
+ #define ECC_ENC (1<<27)
+ #define ECC_READY (1<<26)
+ #define ECC_M4EN (1<<6)
+#define ECC_BASE (*(volatile unsigned long *)0xF005B004)
+#define ECC_CLR (*(volatile unsigned long *)0xF005B00C)
+#define MLC_ECC0W (*(volatile unsigned long *)0xF005B030)
+#define MLC_ECC1W (*(volatile unsigned long *)0xF005B034)
+#define MLC_ECC2W (*(volatile unsigned long *)0xF005B038)
+#define ECC_ERRADDR(x) (*(volatile unsigned long *)(0xF005B050+4*(x)))
+#define ECC_ERRDATA(x) (*(volatile unsigned long *)(0xF005B060+4*(x)))
+#define ECC_ERR_NUM (*(volatile unsigned long *)0xF005B070)
/* SD/MMC Controller */