summaryrefslogtreecommitdiff
path: root/firmware/target/mips/ingenic_x1000/nand-x1000.h
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/mips/ingenic_x1000/nand-x1000.h')
-rw-r--r--firmware/target/mips/ingenic_x1000/nand-x1000.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/firmware/target/mips/ingenic_x1000/nand-x1000.h b/firmware/target/mips/ingenic_x1000/nand-x1000.h
index 668b3e3f82..150361b739 100644
--- a/firmware/target/mips/ingenic_x1000/nand-x1000.h
+++ b/firmware/target/mips/ingenic_x1000/nand-x1000.h
@@ -42,6 +42,39 @@
42/* Chip requires QE bit set to enable quad I/O mode */ 42/* Chip requires QE bit set to enable quad I/O mode */
43#define NAND_CHIPFLAG_HAS_QE_BIT 0x0002 43#define NAND_CHIPFLAG_HAS_QE_BIT 0x0002
44 44
45/* cmd mode a d phase format has data */
46#define NANDCMD_RESET SFC_CMD(0xff, SFC_TMODE_1_1_1, 0, 0, SFC_PFMT_ADDR_FIRST, 0)
47#define NANDCMD_READID(x,y) SFC_CMD(0x9f, SFC_TMODE_1_1_1, x, y, SFC_PFMT_ADDR_FIRST, 1)
48#define NANDCMD_WR_EN SFC_CMD(0x06, SFC_TMODE_1_1_1, 0, 0, SFC_PFMT_ADDR_FIRST, 0)
49#define NANDCMD_GET_FEATURE SFC_CMD(0x0f, SFC_TMODE_1_1_1, 1, 0, SFC_PFMT_ADDR_FIRST, 1)
50#define NANDCMD_SET_FEATURE SFC_CMD(0x1f, SFC_TMODE_1_1_1, 1, 0, SFC_PFMT_ADDR_FIRST, 1)
51#define NANDCMD_PAGE_READ(x) SFC_CMD(0x13, SFC_TMODE_1_1_1, x, 0, SFC_PFMT_ADDR_FIRST, 0)
52#define NANDCMD_READ_CACHE(x) SFC_CMD(0x0b, SFC_TMODE_1_1_1, x, 8, SFC_PFMT_ADDR_FIRST, 1)
53#define NANDCMD_READ_CACHE_x4(x) SFC_CMD(0x6b, SFC_TMODE_1_1_4, x, 8, SFC_PFMT_ADDR_FIRST, 1)
54#define NANDCMD_PROGRAM_LOAD(x) SFC_CMD(0x02, SFC_TMODE_1_1_1, x, 0, SFC_PFMT_ADDR_FIRST, 1)
55#define NANDCMD_PROGRAM_LOAD_x4(x) SFC_CMD(0x32, SFC_TMODE_1_1_4, x, 0, SFC_PFMT_ADDR_FIRST, 1)
56#define NANDCMD_PROGRAM_EXECUTE(x) SFC_CMD(0x10, SFC_TMODE_1_1_1, x, 0, SFC_PFMT_ADDR_FIRST, 0)
57#define NANDCMD_BLOCK_ERASE(x) SFC_CMD(0xd8, SFC_TMODE_1_1_1, x, 0, SFC_PFMT_ADDR_FIRST, 0)
58
59/* Feature registers are found in linux/mtd/spinand.h,
60 * apparently these are pretty standardized */
61#define FREG_PROT 0xa0
62#define FREG_PROT_UNLOCK 0x00
63
64#define FREG_CFG 0xb0
65#define FREG_CFG_OTP_ENABLE (1 << 6)
66#define FREG_CFG_ECC_ENABLE (1 << 4)
67#define FREG_CFG_QUAD_ENABLE (1 << 0)
68
69#define FREG_STATUS 0xc0
70#define FREG_STATUS_BUSY (1 << 0)
71#define FREG_STATUS_EFAIL (1 << 2)
72#define FREG_STATUS_PFAIL (1 << 3)
73#define FREG_STATUS_ECC_MASK (3 << 4)
74#define FREG_STATUS_ECC_NO_FLIPS (0 << 4)
75#define FREG_STATUS_ECC_HAS_FLIPS (1 << 4)
76#define FREG_STATUS_ECC_UNCOR_ERR (2 << 4)
77
45/* Types to distinguish between block & page addresses in the API. 78/* Types to distinguish between block & page addresses in the API.
46 * 79 *
47 * BIT 31 log2_ppb bits 80 * BIT 31 log2_ppb bits