1 #ifndef _SHARK_NAND_H_
\r
2 #define _SHARK_NAND_H_
\r
3 #include <mach/hardware.h>
\r
5 #define NFC_REG_BASE (SPRD_NFC_BASE)
\r
6 #define NFC_START_REG (NFC_REG_BASE)
\r
7 #define NFC_CFG0_REG (NFC_REG_BASE + 0x04)
\r
8 #define NFC_CFG1_REG (NFC_REG_BASE + 0x08)
\r
9 #define NFC_CFG2_REG (NFC_REG_BASE + 0x0C)
\r
10 #define NFC_INT_REG (NFC_REG_BASE + 0x10)
\r
11 #define NFC_TIMING_REG (NFC_REG_BASE + 0x14)
\r
12 #define NFC_TIMEOUT_REG (NFC_REG_BASE + 0x18)
\r
13 #define NFC_MAIN_ADDR_REG (NFC_REG_BASE + 0x20)
\r
14 #define NFC_SPAR_ADDR_REG (NFC_REG_BASE + 0x24)
\r
15 #define NFC_STAT_ADDR_REG (NFC_REG_BASE + 0x28)
\r
16 #define NFC_STAT_STSMCH_REG (NFC_REG_BASE + 0x30)
\r
17 #define NFC_STATUS0_REG (NFC_REG_BASE + 0x40)
\r
18 #define NFC_STATUS1_REG (NFC_REG_BASE + 0x44)
\r
19 #define NFC_STATUS2_REG (NFC_REG_BASE + 0x48)
\r
20 #define NFC_STATUS3_REG (NFC_REG_BASE + 0x4C)
\r
21 #define NFC_INST0_REG (NFC_REG_BASE + 0x60)
\r
22 #define NFC_INST1_REG (NFC_REG_BASE + 0x64)
\r
23 #define NFC_INST2_REG (NFC_REG_BASE + 0x68)
\r
24 #define NFC_INST3_REG (NFC_REG_BASE + 0x6C)
\r
25 #define NFC_INST4_REG (NFC_REG_BASE + 0x70)
\r
26 #define NFC_INST5_REG (NFC_REG_BASE + 0x74)
\r
27 #define NFC_INST6_REG (NFC_REG_BASE + 0x78)
\r
28 #define NFC_INST7_REG (NFC_REG_BASE + 0x7C)
\r
29 #define NFC_INST8_REG (NFC_REG_BASE + 0x80)
\r
30 #define NFC_INST9_REG (NFC_REG_BASE + 0x84)
\r
31 #define NFC_INST10_REG (NFC_REG_BASE + 0x88)
\r
32 #define NFC_INST11_REG (NFC_REG_BASE + 0x8C)
\r
34 //NFC_START bit define
\r
35 #define NFC_VALID (1 << 31)
\r
36 #define NFC_RBN (1 << 30)
\r
37 #define NFC_RBN_CNT_OFFSET (28)
\r
38 #define NFC_RBN_CNT_MASK (0x3 << NFC_RBN_CNT_OFFSET)
\r
39 #define NFC_CMD_CLR (1 << 1)
\r
40 #define NFC_START (1 << 0)
\r
42 //NFC_CFG0 bit define
\r
43 #define MAST_ENDIAN_OFFSET (30)
\r
44 #define MAST_ENDIAN_MASK (0x3 << MAST_ENDIAN_OFFSET)
\r
45 #define CS_SEL (1 << 0)
\r
46 #define SECTOR_NUM_OFFSET (24)
\r
47 #define SECTOR_NUM_MASK (0x1f << SECTOR_NUM_OFFSET)
\r
48 #define REPEAT_NUM_OFFSET (16)
\r
49 #define REPEAT_NUM_MASK (0xff << REPEAT_NUM_OFFSET)
\r
50 #define NFC_WPN (1 << 15)
\r
51 #define BUS_WIDTH (1 << 14)
\r
52 #define SPAR_DLEN_CFG (1 << 13)
\r
53 #define SECNUM_IN_INST (1 << 12)
\r
54 #define DETECT_ALL_FF (1 << 11)
\r
55 #define NFC_RW (1 << 8)
\r
56 #define MAIN_SPAR_APT (1 << 6)
\r
57 #define SPAR_USE (1 << 5)
\r
58 #define MAIN_USE (1 << 4)
\r
59 #define ECC_EN (1 << 2)
\r
60 #define NFC_MODE_MASK (0x3)
\r
61 #define NFC_AUTO_MODE (0x0)
\r
62 #define NFC_ONLY_MST_MODE (0x1)
\r
63 #define NFC_ONLY_NAND_MODE (0x2)
\r
64 #define NFC_ONLY_ECC_MODE (0x3)
\r
65 //NFC_CFG1 bit define
\r
66 #define SPAR_INFO_SIZE_OFFSET (24)
\r
67 #define SPAR_INFO_SIZE_MASK (0x3f << SPAR_INFO_SIZE_OFFSET)
\r
68 #define SPAR_SIZE_OFFSET (16)
\r
69 #define SPAR_SIZE_MASK (0x7F << SPAR_SIZE_OFFSET)
\r
70 #define MAIN_SIZE_MASK (0x3ff)
\r
71 //NFC_CFG2 bit define
\r
72 #define SPAR_SECTOR_NUM_OFFSET (24)
\r
73 #define SPAR_SECTOR_NUM_MASK (0x1f << SPAR_SECTOR_NUM_OFFSET)
\r
74 #define SPAR_INFO_POS_OFFSET (16)
\r
75 #define SPAR_INFO_POS_MASK (0x7f << SPAR_INFO_POS_OFFSET)
\r
76 #define ECC_MODE_OFFSET (13)
\r
77 #define ECC_MODE_MASK (0x7 << ECC_MODE_OFFSET)
\r
78 #define NFC_ECC_MODE_1BIT (0 << ECC_MODE_OFFSET)
\r
79 #define NFC_ECC_MODE_2BIT (1 << ECC_MODE_OFFSET)
\r
80 #define NFC_ECC_MODE_4BIT (2 << ECC_MODE_OFFSET)
\r
81 #define NFC_ECC_MODE_8BIT (3 << ECC_MODE_OFFSET)
\r
82 #define NFC_ECC_MODE_12BIT (4 << ECC_MODE_OFFSET)
\r
83 #define NFC_ECC_MODE_16BIT (5 << ECC_MODE_OFFSET)
\r
84 #define NFC_ECC_MODE_24BIT (6 << ECC_MODE_OFFSET)
\r
86 #define ECC_STR_SEC_IND_OFFSET (8)
\r
87 #define ECC_STR_SEC_IND_MASK (0x1f << ECC_STR_SEC_IND_OFFSET)
\r
88 #define ECC_POSITON_MASK (0x7f)
\r
89 //NFC_INT bit define
\r
90 #define INT_STSMCH_RAW (1 << 27)
\r
91 #define INT_WP_RAW (1 << 26)
\r
92 #define INT_TO_RAW (1 << 25)
\r
93 #define INT_DONE_RAW (1 << 24)
\r
94 #define INT_STSMCH_STS (1 << 19)
\r
95 #define INT_WP_STS (1 << 18)
\r
96 #define INT_TO_STS (1 << 17)
\r
97 #define INT_DONE_STS (1 << 16)
\r
99 #define INT_STSMCH_CLR (1 << 11)
\r
100 #define INT_WP_CLR (1 << 10)
\r
101 #define INT_TO_CLR (1 << 9)
\r
102 #define INT_DONE_CLR (1 << 8)
\r
104 #define INT_STSMCH_EN (1 << 3)
\r
105 #define INT_WP_EN (1 << 2)
\r
106 #define INT_TO_EN (1 << 1)
\r
107 #define INT_DONE_EN (1 << 0)
\r
111 #define NFC_ACS_OFFSET (27)
\r
112 #define NFC_ACS_MASK (0x1f << NFC_ACS_OFFSET)
\r
113 #define NFC_ACE_OFFSET (22)
\r
114 #define NFC_ACE_MASK (0x1f << NFC_ACE_OFFSET)
\r
115 #define NFC_RWS_OFFSET (16)
\r
116 #define NFC_RWS_MASK (0x3f << NFC_RWS_OFFSET)
\r
117 #define NFC_RWE_OFFSET (11)
\r
118 #define NFC_RWE_MASK (0x3f << NFC_RWS_OFFSET)
\r
119 #define NFC_RWH_OFFSET (6)
\r
120 #define NFC_RWH_MASK (0x1f << NFC_RWH_OFFSET)
\r
121 #define NFC_RWL_MASK (0x3f)
\r
122 //NFC_TIMEOUT bit define
\r
123 #define REPT_CLR_EN (1 << 31)
\r
124 #define TIMETOUT_MASK (0x7fffffff)
\r
126 //NFC_STAT_STSMCH bit define
\r
127 #define NFC_STSMCH_SEL (1 << 17)
\r
128 #define NFC_STSMCH_STOP_EN (1 << 16)
\r
129 #define NFC_STSMCH_MASK_OFFSET (8)
\r
130 #define NFC_STSMCH_VALUE_MASK (0xff)
\r
131 #define ERR_ERR_NUM0_MASK (0x1f)
\r
132 //NFC_STATUS0_REG bit define
\r
133 #define ECC_ERR_NUM_MASK (0x1f)
\r
134 #define ECC_ERR_STS_SHIFT (5)
\r
135 #define ECC_ERR_STS_MASK (0x3 << ECC_ERR_STS_SHIFT)
\r
136 #define ECC_ALL_FF (1 << 7)
\r
138 #define NFC_MC_ICMD_ID (0xCD)
\r
139 #define NFC_MC_ADDR_ID (0x0A)
\r
140 #define NFC_MC_WRB0_ID (0xB0)
\r
141 #define NFC_MC_WRB1_ID (0xB1)
\r
142 #define NFC_MC_MRDT_ID (0xD0)
\r
143 #define NFC_MC_MWDT_ID (0xD1)
\r
144 #define NFC_MC_SRDT_ID (0xD2)
\r
145 #define NFC_MC_SWDT_ID (0xD3)
\r
146 #define NFC_MC_IDST_ID (0xDD)
\r
147 #define NFC_MC_CSEN_ID (0xCE)
\r
148 #define NFC_MC_NOP_ID (0xF0)
\r
149 #define NFC_MC_DONE_ID (0xFF)
\r
150 #define NFC_MAX_CHIP 1
\r
151 #define NFC_TIMEOUT_VAL 0x10000000
\r
153 #define NAND_MC_CMD(x) (u16)(((x & 0xff) << 8) | NFC_MC_ICMD_ID)
\r
154 #define NAND_MC_ADDR(x) (u16)(((x & 0xff) << 8) | (NFC_MC_ADDR_ID << 4))
\r
155 #define NAND_MC_WRB0(x) (u16)(NFC_MC_WRB0_ID)
\r
156 #define NAND_MC_MRDT (u16)(NFC_MC_MRDT_ID)
\r
157 #define NAND_MC_MWDT (u16)(NFC_MC_MWDT_ID)
\r
158 #define NAND_MC_SRDT (u16)(NFC_MC_SRDT_ID)
\r
159 #define NAND_MC_SWDT (u16)(NFC_MC_SWDT_ID)
\r
160 #define NAND_MC_IDST(x) (u16)((NFC_MC_IDST_ID) | ((x -1) << 8))
\r
161 #define NAND_MC_NOP(x) (u16)(((x & 0xff) << 8) | NFC_MC_NOP_ID)
\r
163 #define NFC_DEFAULT_TIMING ((7) | (6 << NFC_RWH_OFFSET) | (7 << NFC_RWE_OFFSET) | (7 << NFC_RWS_OFFSET) | (7 << NFC_ACE_OFFSET) | (7 << NFC_ACS_OFFSET))
\r
164 /* TODO : use global interface */
\r
165 #define AHB_SOFT_NFC_RST (1 << 5)
\r