diff options
author | Rob Purchase <shotofadds@rockbox.org> | 2009-08-12 19:26:04 +0000 |
---|---|---|
committer | Rob Purchase <shotofadds@rockbox.org> | 2009-08-12 19:26:04 +0000 |
commit | e783d0c82a6673d036a71f3eab3e69f95d4b0b37 (patch) | |
tree | 4e3966d266b4e8858bd4a016b5e828a73f364f24 /firmware/export | |
parent | 4c5ae4b06853a8aee9a4bda7d06e148a52d20285 (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.h | 78 | ||||
-rw-r--r-- | firmware/export/tcc780x.h | 24 |
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 */ |