| #ifndef _ECC_H |
| #define _ECC_H |
| |
| /* ECC Register Set */ |
| /********************/ |
| /* ECC Control Registers */ |
| #define ECC_SHIFT_EN_CFG (COMCERTO_AXI_EXP_ECC_BASE) |
| #define ECC_GEN_CFG (COMCERTO_AXI_EXP_ECC_BASE + 0x4) |
| #define ECC_TAG_CFG (COMCERTO_AXI_EXP_ECC_BASE + 0x8) |
| #define ECC_INIT_CFG (COMCERTO_AXI_EXP_ECC_BASE + 0xC) |
| #define ECC_PRTY_OUT_SEL_CFG (COMCERTO_AXI_EXP_ECC_BASE + 0x10) |
| #define ECC_POLY_START_CFG (COMCERTO_AXI_EXP_ECC_BASE + 0x14) |
| #define ECC_CS_SEL_CFG (COMCERTO_AXI_EXP_ECC_BASE + 0x18) |
| /* ECC Status Registers */ |
| #define ECC_IDLE_STAT (COMCERTO_AXI_EXP_ECC_BASE + 0x1C) |
| #define ECC_POLY_STAT (COMCERTO_AXI_EXP_ECC_BASE + 0x20) |
| #define ECC_CORR_STAT (COMCERTO_AXI_EXP_ECC_BASE + 0x24) |
| #define ECC_CORR_DONE_STAT (COMCERTO_AXI_EXP_ECC_BASE + 0x28) |
| #define ECC_CORR_DATA_STAT (COMCERTO_AXI_EXP_ECC_BASE + 0x2C) |
| |
| /* ECC general configuration register parameters */ |
| #define HAMM_MODE BIT_28_MSK |
| #define BCH_MODE (~ HAMM_MODE) |
| |
| #define PRTY_MODE_MASK BIT_24_MSK |
| #define PRTY_CALC PRTY_MODE_MASK |
| #define SYNDROME_CALC (~ PRTY_CALC) |
| |
| #define ECC_LVL_MASK 0x3F0000 |
| #define ECC_LVL_SHIFT 16 |
| |
| #define BLK_SIZE_MASK 0x7FF |
| |
| #define ECC_LVL_2 0x2 |
| #define ECC_LVL_4 0x4 |
| #define ECC_LVL_6 0x6 |
| #define ECC_LVL_8 0x8 |
| #define ECC_LVL_10 0xA |
| #define ECC_LVL_12 0xC |
| #define ECC_LVL_14 0xE |
| #define ECC_LVL_16 0x10 |
| #define ECC_LVL_18 0x12 |
| #define ECC_LVL_20 0x14 |
| #define ECC_LVL_22 0x16 |
| #define ECC_LVL_24 0x18 |
| #define ECC_LVL_26 0x1A |
| #define ECC_LVL_28 0x1C |
| #define ECC_LVL_30 0x1E |
| #define ECC_LVL_32 0x20 |
| |
| #if defined (CONFIG_NAND_COMCERTO_ECC_24_HW_BCH) |
| #define ECC_LVL_VAL ECC_LVL_24 /* ECC Level 24 is used */ |
| #elif defined (CONFIG_NAND_COMCERTO_ECC_8_HW_BCH) |
| #define ECC_LVL_VAL ECC_LVL_8 /* ECC Level 8 is used */ |
| #endif |
| |
| /* Block size used in Bytes*/ |
| #define ECC_BLOCK_SIZE_512 512 |
| #define ECC_BLOCK_SIZE_1024 1024 |
| |
| /* Maximum value of ECC Block size is 2k-(1+14*ECC_LVL/8) Bytes */ |
| #define ECC_BLOCK_SIZE ECC_BLOCK_SIZE_1024 |
| #define ECC_BLOCK_SIZE_SHIFT ECC_BLOCK_SIZE_1024_SHIFT |
| |
| #define ECC_CS4_SEL 0x10 |
| #define ECC_CS3_SEL 0x08 |
| #define ECC_CS2_SEL 0x04 |
| #define ECC_CS1_SEL 0x02 |
| #define ECC_CS0_SEL 0x01 |
| |
| #define ECC_INIT 0x1 |
| #define ECC_SHIFT_ENABLE 0x1 |
| #define ECC_SHIFT_DISABLE 0x0 |
| #define ECC_PARITY_OUT_EN 0x1 |
| #define ECC_PARITY_OUT_DISABLE 0x0 |
| |
| /* Polynomial Start Configuration (ECC_POLY_START_CFG) */ |
| #define ECC_POLY_START (1 << 0) |
| |
| /* Idle Status (ECC_IDLE_STAT) */ |
| #define ECC_IDLE (1 << 0) |
| |
| /* Polynomial Status (ECC_POLY_STAT) */ |
| #define ECC_CORR_REQ (1 << 0) |
| #define ECC_ERASED_PAGE (1 << 1) |
| #define ECC_UNCORR_ERR_HAMM (1 << 2) |
| |
| /* Correction Status (ECC_CORR_STAT) */ |
| #define ECC_TAG_MASK 0xFFFF |
| #define ECC_NUM_ERR_MASK 0x3F |
| #define ECC_NUM_ERR_SHIFT 16 |
| #define ECC_UNCORR (1 << 24) |
| |
| /* Correction Done Status (ECC_CORR_DONE_STAT) */ |
| #define ECC_DONE (1 << 0) |
| |
| /* Correction Data Status (ECC_CORR_DATA_STAT), BCH Mode */ |
| #define ECC_BCH_MASK 0xFFFF |
| #define ECC_BCH_INDEX_MASK 0x7FF |
| #define ECC_BCH_INDEX_SHIFT 16 |
| #define ECC_BCH_VALID (1 << 31) |
| |
| /* Correction Data Status (ECC_CORR_DATA_STAT), Hamming Mode */ |
| #define ECC_HAMM_MASK 0xF |
| #define ECC_HAMM_INDEX_MASK 0x1FF |
| #define ECC_HAMM_INDEX_SHIFT 16 |
| #define ECC_HAMM_VALID (1 << 31) |
| |
| #endif /*_ECC_H */ |