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)
downloadrockbox-e783d0c82a6673d036a71f3eab3e69f95d4b0b37.tar.gz
rockbox-e783d0c82a6673d036a71f3eab3e69f95d4b0b37.zip
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 @@
182 182
183/* ECC controller */ 183/* ECC controller */
184 184
185#define ECC_CTRL (*(volatile unsigned long *)0x80000900) 185#define ECC_CTRL (*(volatile unsigned long *)0x80000900)
186 #define ECC_DMA_REQ (1<<28) 186 #define ECC_DMA_REQ (1<<28)
187 #define ECC_ENC (1<<27) /* MLC ECC3/4 */ 187 #define ECC_ENC (1<<27) /* MLC ECC3/4 */
188 #define ECC_FLG (1<<26) 188 #define ECC_READY (1<<26)
189 #define ECC_IEN (1<<25) 189 #define ECC_IEN (1<<25)
190 #define ECC_MANUAL (1<<22) 190 #define ECC_MANUAL (1<<22)
191 #define ECC_WCNT (1<<12) /* [21:12] */ 191 #define ECC_WCNT (1<<12) /* [21:12] */
192 #define ECC_HOLD (1<<7) 192 #define ECC_HOLD (1<<7)
193 #define ECC_M4EN (1<<6) 193 #define ECC_M4EN (1<<6)
194 #define ECC_ZERO (1<<5) 194 #define ECC_ZERO (1<<5)
195 #define ECC_M3EN (1<<4) 195 #define ECC_M3EN (1<<4)
196 #define ECC_CNT_MASK (7<<1) 196 #define ECC_CNT_MASK (7<<1)
197 #define ECC_CNT (1<<1) 197 #define ECC_CNT (1<<1)
198 #define ECC_SLC (1<<0) 198 #define ECC_SLC (1<<0)
199 199
200#define ECC_BASE (*(volatile unsigned long *)0x80000904) 200#define ECC_BASE (*(volatile unsigned long *)0x80000904)
201#define ECC_MASK (*(volatile unsigned long *)0x80000908) 201#define ECC_MASK (*(volatile unsigned long *)0x80000908)
202#define ECC_CLR (*(volatile unsigned long *)0x8000090c) 202#define ECC_CLR (*(volatile unsigned long *)0x8000090c)
203#define SLC_ECC0 (*(volatile unsigned long *)0x80000910) 203#define SLC_ECC0 (*(volatile unsigned long *)0x80000910)
204#define SLC_ECC1 (*(volatile unsigned long *)0x80000914) 204#define SLC_ECC1 (*(volatile unsigned long *)0x80000914)
205#define SLC_ECC2 (*(volatile unsigned long *)0x80000918) 205#define SLC_ECC2 (*(volatile unsigned long *)0x80000918)
206#define SLC_ECC3 (*(volatile unsigned long *)0x8000091c) 206#define SLC_ECC3 (*(volatile unsigned long *)0x8000091c)
207#define SLC_ECC4 (*(volatile unsigned long *)0x80000920) 207#define SLC_ECC4 (*(volatile unsigned long *)0x80000920)
208#define SLC_ECC5 (*(volatile unsigned long *)0x80000924) 208#define SLC_ECC5 (*(volatile unsigned long *)0x80000924)
209#define SLC_ECC6 (*(volatile unsigned long *)0x80000928) 209#define SLC_ECC6 (*(volatile unsigned long *)0x80000928)
210#define SLC_ECC7 (*(volatile unsigned long *)0x8000092c) 210#define SLC_ECC7 (*(volatile unsigned long *)0x8000092c)
211#define MLC_ECC0W (*(volatile unsigned long *)0x80000930) 211#define MLC_ECC0W (*(volatile unsigned long *)0x80000930)
212#define MLC_ECC1W (*(volatile unsigned long *)0x80000934) 212#define MLC_ECC1W (*(volatile unsigned long *)0x80000934)
213#define MLC_ECC2W (*(volatile unsigned long *)0x80000938) 213#define MLC_ECC2W (*(volatile unsigned long *)0x80000938)
214#define MLC_ECC0R (*(volatile unsigned long *)0x80000940) 214#define MLC_ECC0R (*(volatile unsigned long *)0x80000940)
215#define MLC_ECC1R (*(volatile unsigned long *)0x80000944) 215#define MLC_ECC1R (*(volatile unsigned long *)0x80000944)
216#define MLC_ECC2R (*(volatile unsigned long *)0x80000948) 216#define MLC_ECC2R (*(volatile unsigned long *)0x80000948)
217#define ECC_CORR_START (*(volatile unsigned long *)0x8000094c) 217#define ECC_CORR_START (*(volatile unsigned long *)0x8000094c)
218#define ECC_ERRADDR1 (*(volatile unsigned long *)0x80000950) 218#define ECC_ERRADDR(x) (*(volatile unsigned long *)(0x80000950+4*(x)))
219#define ECC_ERRADDR2 (*(volatile unsigned long *)0x80000954) 219#define ECC_ERRDATA(x) (*(volatile unsigned long *)(0x80000960+4*(x)))
220#define ECC_ERRADDR3 (*(volatile unsigned long *)0x80000958) 220#define ECC_ERR_NUM (*(volatile unsigned long *)0x80000970)
221#define ECC_ERRADDR4 (*(volatile unsigned long *)0x8000095c) 221
222#define ECC_ERRDATA1 (*(volatile unsigned long *)0x80000960)
223#define ECC_ERRDATA2 (*(volatile unsigned long *)0x80000964)
224#define ECC_ERRDATA3 (*(volatile unsigned long *)0x80000968)
225#define ECC_ERRDATA4 (*(volatile unsigned long *)0x8000096c)
226#define ECC_ERR_NUM (*(volatile unsigned long *)0x80000970)
227
228#define ECC_ERRDATA(x) (*(volatile unsigned long *)(0x80000960 + (x) * 4))
229#define ECC_ERRADDR(x) (*(volatile unsigned long *)(0x80000950 + (x) * 4))
230 222
231/* Digital Audio Interface */ 223/* Digital Audio Interface */
232#define DADI_L0 (*(volatile unsigned long *)0x80000000) 224#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 @@
232 232
233/* ECC Controller */ 233/* ECC Controller */
234 234
235#define ECC_CTRL (*(volatile unsigned long *)0xF005B000) 235#define ECC_CTRL (*(volatile unsigned long *)0xF005B000)
236 #define ECC_M4EN (1<<6) 236 #define ECC_ENC (1<<27)
237 #define ECC_ENC (1<<27) 237 #define ECC_READY (1<<26)
238 #define ECC_READY (1<<26) 238 #define ECC_M4EN (1<<6)
239#define ECC_BASE (*(volatile unsigned long *)0xF005B004) 239#define ECC_BASE (*(volatile unsigned long *)0xF005B004)
240#define ECC_CLR (*(volatile unsigned long *)0xF005B00C) 240#define ECC_CLR (*(volatile unsigned long *)0xF005B00C)
241#define ECC_MLC0W (*(volatile unsigned long *)0xF005B030) 241#define MLC_ECC0W (*(volatile unsigned long *)0xF005B030)
242#define ECC_MLC1W (*(volatile unsigned long *)0xF005B034) 242#define MLC_ECC1W (*(volatile unsigned long *)0xF005B034)
243#define ECC_MLC2W (*(volatile unsigned long *)0xF005B038) 243#define MLC_ECC2W (*(volatile unsigned long *)0xF005B038)
244#define ECC_ERRADDR (*(volatile unsigned long *)0xF005B050) 244#define ECC_ERRADDR(x) (*(volatile unsigned long *)(0xF005B050+4*(x)))
245#define ECC_ERRDATA (*(volatile unsigned long *)0xF005B060) 245#define ECC_ERRDATA(x) (*(volatile unsigned long *)(0xF005B060+4*(x)))
246#define ECC_ERR (*(volatile unsigned long *)0xF005B070) 246#define ECC_ERR_NUM (*(volatile unsigned long *)0xF005B070)
247 247
248/* SD/MMC Controller */ 248/* SD/MMC Controller */
249 249