2 * Freescale GPMI NFC NAND Flash Driver
4 * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 * Template revision: 26195
24 #ifndef __GPMI_NFC_BCH_REGS_H
25 #define __GPMI_NFC_BCH_REGS_H
27 #define HW_BCH_CTRL 0x000
28 #define HW_BCH_CTRL_SET 0x004
29 #define HW_BCH_CTRL_CLR 0x008
30 #define HW_BCH_CTRL_TOG 0x00c
32 #define BM_BCH_CTRL_SFTRST (1 << 31)
33 #define BM_BCH_CTRL_CLKGATE (1 << 30)
34 #define BM_BCH_CTRL_DEBUGSYNDROME (1 << 22)
35 #define BP_BCH_CTRL_M2M_LAYOUT 18
36 #define BM_BCH_CTRL_M2M_LAYOUT (1 << BP_BCH_CTRL_M2M_LAYOUT)
37 #define BF_BCH_CTRL_M2M_LAYOUT(v) (((v) << BP_BCH_CTRL_M2M_LAYOUT) & BM_BCH_CTRL_M2M_LAYOUT)
38 #define BM_BCH_CTRL_M2M_ENCODE (1 << 17)
39 #define BM_BCH_CTRL_M2M_ENABLE (1 << 16)
40 #define BM_BCH_CTRL_DEBUG_STALL_IRQ_EN (1 << 10)
41 #define BM_BCH_CTRL_COMPLETE_IRQ_EN (1 << 8)
42 #define BM_BCH_CTRL_BM_ERROR_IRQ (1 << 3)
43 #define BM_BCH_CTRL_DEBUG_STALL_IRQ (1 << 2)
44 #define BM_BCH_CTRL_COMPLETE_IRQ (1 << 0)
46 #define HW_BCH_STATUS0 0x010
48 #define BP_BCH_STATUS0_HANDLE 20
49 #define BM_BCH_STATUS0_HANDLE (0xFFF << BP_BCH_STATUS0_HANDLE)
50 #define BF_BCH_STATUS0_HANDLE(v) (((v) << BP_BCH_STATUS0_HANDLE) & BM_BCH_STATUS0_HANDLE)
51 #define BP_BCH_STATUS0_COMPLETED_CE 16
52 #define BM_BCH_STATUS0_COMPLETED_CE (0x000F << BP_BCH_STATUS0_COMPLETED_CE)
53 #define BF_BCH_STATUS0_COMPLETED_CE(v) (((v) << BP_BCH_STATUS0_COMPLETED_CE) & BM_BCH_STATUS0_COMPLETED_CE)
54 #define BP_BCH_STATUS0_STATUS_BLK0 8
55 #define BM_BCH_STATUS0_STATUS_BLK0 (0xFF << BP_BCH_STATUS0_STATUS_BLK0)
56 #define BF_BCH_STATUS0_STATUS_BLK0(v) (((v) << BP_BCH_STATUS0_STATUS_BLK0) & BM_BCH_STATUS0_STATUS_BLK0)
57 #define BV_BCH_STATUS0_STATUS_BLK0__ZERO 0x00
58 #define BV_BCH_STATUS0_STATUS_BLK0__ERROR1 0x01
59 #define BV_BCH_STATUS0_STATUS_BLK0__ERROR2 0x02
60 #define BV_BCH_STATUS0_STATUS_BLK0__ERROR3 0x03
61 #define BV_BCH_STATUS0_STATUS_BLK0__ERROR4 0x04
62 #define BV_BCH_STATUS0_STATUS_BLK0__UNCORRECTABLE 0xFE
63 #define BV_BCH_STATUS0_STATUS_BLK0__ERASED 0xFF
64 #define BM_BCH_STATUS0_ALLONES (1 << 4)
65 #define BM_BCH_STATUS0_CORRECTED (1 << 3)
66 #define BM_BCH_STATUS0_UNCORRECTABLE (1 << 2)
68 #define HW_BCH_MODE 0x020
70 #define BP_BCH_MODE_ERASE_THRESHOLD 0
71 #define BM_BCH_MODE_ERASE_THRESHOLD (0xFF << BP_BCH_MODE_ERASE_THRESHOLD)
72 #define BF_BCH_MODE_ERASE_THRESHOLD(v) (((v) << 0) & BM_BCH_MODE_ERASE_THRESHOLD)
74 #define HW_BCH_ENCODEPTR 0x030
76 #define BP_BCH_ENCODEPTR_ADDR 0
77 #define BM_BCH_ENCODEPTR_ADDR 0xFFFFFFFF
78 #define BF_BCH_ENCODEPTR_ADDR(v) (v)
80 #define HW_BCH_DATAPTR 0x040
82 #define BP_BCH_DATAPTR_ADDR 0
83 #define BM_BCH_DATAPTR_ADDR 0xFFFFFFFF
84 #define BF_BCH_DATAPTR_ADDR(v) (v)
86 #define HW_BCH_METAPTR 0x050
88 #define BP_BCH_METAPTR_ADDR 0
89 #define BM_BCH_METAPTR_ADDR 0xFFFFFFFF
90 #define BF_BCH_METAPTR_ADDR(v) (v)
92 #define HW_BCH_LAYOUTSELECT 0x070
94 #define BP_BCH_LAYOUTSELECT_CS15_SELECT 30
95 #define BM_BCH_LAYOUTSELECT_CS15_SELECT (0x3 << BP_BCH_LAYOUTSELECT_CS15_SELECT)
96 #define BF_BCH_LAYOUTSELECT_CS15_SELECT(v) (((v) << BP_BCH_LAYOUTSELECT_CS15_SELECT) & \
97 BM_BCH_LAYOUTSELECT_CS15_SELECT)
98 #define BP_BCH_LAYOUTSELECT_CS14_SELECT 28
99 #define BM_BCH_LAYOUTSELECT_CS14_SELECT (0x3 << BP_BCH_LAYOUTSELECT_CS14_SELECT)
100 #define BF_BCH_LAYOUTSELECT_CS14_SELECT(v) (((v) << BP_BCH_LAYOUTSELECT_CS14_SELECT) & \
101 BM_BCH_LAYOUTSELECT_CS14_SELECT)
102 #define BP_BCH_LAYOUTSELECT_CS13_SELECT 26
103 #define BM_BCH_LAYOUTSELECT_CS13_SELECT (0x3 << BP_BCH_LAYOUTSELECT_CS13_SELECT)
104 #define BF_BCH_LAYOUTSELECT_CS13_SELECT(v) (((v) << BP_BCH_LAYOUTSELECT_CS13_SELECT) & \
105 BM_BCH_LAYOUTSELECT_CS13_SELECT)
106 #define BP_BCH_LAYOUTSELECT_CS12_SELECT 24
107 #define BM_BCH_LAYOUTSELECT_CS12_SELECT (0x3 << BP_BCH_LAYOUTSELECT_CS12_SELECT)
108 #define BF_BCH_LAYOUTSELECT_CS12_SELECT(v) (((v) << BP_BCH_LAYOUTSELECT_CS12_SELECT) & \
109 BM_BCH_LAYOUTSELECT_CS12_SELECT)
110 #define BP_BCH_LAYOUTSELECT_CS11_SELECT 22
111 #define BM_BCH_LAYOUTSELECT_CS11_SELECT (0x3 << BP_BCH_LAYOUTSELECT_CS11_SELECT)
112 #define BF_BCH_LAYOUTSELECT_CS11_SELECT(v) (((v) << BP_BCH_LAYOUTSELECT_CS11_SELECT) & \
113 BM_BCH_LAYOUTSELECT_CS11_SELECT)
114 #define BP_BCH_LAYOUTSELECT_CS10_SELECT 20
115 #define BM_BCH_LAYOUTSELECT_CS10_SELECT (0x3 << BP_BCH_LAYOUTSELECT_CS10_SELECT)
116 #define BF_BCH_LAYOUTSELECT_CS10_SELECT(v) (((v) << BP_BCH_LAYOUTSELECT_CS10_SELECT) & \
117 BM_BCH_LAYOUTSELECT_CS10_SELECT)
118 #define BP_BCH_LAYOUTSELECT_CS9_SELECT 18
119 #define BM_BCH_LAYOUTSELECT_CS9_SELECT 0x000C0000
120 #define BF_BCH_LAYOUTSELECT_CS9_SELECT(v) (((v) << 18) & \
121 BM_BCH_LAYOUTSELECT_CS9_SELECT)
122 #define BP_BCH_LAYOUTSELECT_CS8_SELECT 16
123 #define BM_BCH_LAYOUTSELECT_CS8_SELECT 0x00030000
124 #define BF_BCH_LAYOUTSELECT_CS8_SELECT(v) (((v) << 16) & \
125 BM_BCH_LAYOUTSELECT_CS8_SELECT)
126 #define BP_BCH_LAYOUTSELECT_CS7_SELECT 14
127 #define BM_BCH_LAYOUTSELECT_CS7_SELECT 0x0000C000
128 #define BF_BCH_LAYOUTSELECT_CS7_SELECT(v) (((v) << 14) & \
129 BM_BCH_LAYOUTSELECT_CS7_SELECT)
130 #define BP_BCH_LAYOUTSELECT_CS6_SELECT 12
131 #define BM_BCH_LAYOUTSELECT_CS6_SELECT 0x00003000
132 #define BF_BCH_LAYOUTSELECT_CS6_SELECT(v) (((v) << 12) & \
133 BM_BCH_LAYOUTSELECT_CS6_SELECT)
134 #define BP_BCH_LAYOUTSELECT_CS5_SELECT 10
135 #define BM_BCH_LAYOUTSELECT_CS5_SELECT 0x00000C00
136 #define BF_BCH_LAYOUTSELECT_CS5_SELECT(v) (((v) << 10) & \
137 BM_BCH_LAYOUTSELECT_CS5_SELECT)
138 #define BP_BCH_LAYOUTSELECT_CS4_SELECT 8
139 #define BM_BCH_LAYOUTSELECT_CS4_SELECT 0x00000300
140 #define BF_BCH_LAYOUTSELECT_CS4_SELECT(v) (((v) << 8) & \
141 BM_BCH_LAYOUTSELECT_CS4_SELECT)
142 #define BP_BCH_LAYOUTSELECT_CS3_SELECT 6
143 #define BM_BCH_LAYOUTSELECT_CS3_SELECT 0x000000C0
144 #define BF_BCH_LAYOUTSELECT_CS3_SELECT(v) (((v) << 6) & \
145 BM_BCH_LAYOUTSELECT_CS3_SELECT)
146 #define BP_BCH_LAYOUTSELECT_CS2_SELECT 4
147 #define BM_BCH_LAYOUTSELECT_CS2_SELECT 0x00000030
148 #define BF_BCH_LAYOUTSELECT_CS2_SELECT(v) (((v) << 4) & \
149 BM_BCH_LAYOUTSELECT_CS2_SELECT)
150 #define BP_BCH_LAYOUTSELECT_CS1_SELECT 2
151 #define BM_BCH_LAYOUTSELECT_CS1_SELECT 0x0000000C
152 #define BF_BCH_LAYOUTSELECT_CS1_SELECT(v) (((v) << 2) & \
153 BM_BCH_LAYOUTSELECT_CS1_SELECT)
154 #define BP_BCH_LAYOUTSELECT_CS0_SELECT 0
155 #define BM_BCH_LAYOUTSELECT_CS0_SELECT 0x00000003
156 #define BF_BCH_LAYOUTSELECT_CS0_SELECT(v) (((v) << 0) & \
157 BM_BCH_LAYOUTSELECT_CS0_SELECT)
159 #define HW_BCH_FLASH0LAYOUT0 0x080
161 #define BP_BCH_FLASH0LAYOUT0_NBLOCKS 24
162 #define BM_BCH_FLASH0LAYOUT0_NBLOCKS (0xFF << BP_BCH_FLASH0LAYOUT0_NBLOCKS)
163 #define BF_BCH_FLASH0LAYOUT0_NBLOCKS(v) (((v) << BP_BCH_FLASH0LAYOUT0_NBLOCKS) & \
164 BM_BCH_FLASH0LAYOUT0_NBLOCKS)
165 #define BP_BCH_FLASH0LAYOUT0_META_SIZE 16
166 #define BM_BCH_FLASH0LAYOUT0_META_SIZE (0xFF << BP_BCH_FLASH0LAYOUT0_META_SIZE)
167 #define BF_BCH_FLASH0LAYOUT0_META_SIZE(v) (((v) << BP_BCH_FLASH0LAYOUT0_META_SIZE) & \
168 BM_BCH_FLASH0LAYOUT0_META_SIZE)
169 #define BP_BCH_FLASH0LAYOUT0_ECC0 12
170 #define BM_BCH_FLASH0LAYOUT0_ECC0 (0xF << BP_BCH_FLASH0LAYOUT0_ECC0)
171 #define BF_BCH_FLASH0LAYOUT0_ECC0(v) (((v) << BP_BCH_FLASH0LAYOUT0_ECC0) & \
172 BM_BCH_FLASH0LAYOUT0_ECC0)
173 #define BV_BCH_FLASH0LAYOUT0_ECC0__NONE 0x0
174 #define BV_BCH_FLASH0LAYOUT0_ECC0__ECC2 0x1
175 #define BV_BCH_FLASH0LAYOUT0_ECC0__ECC4 0x2
176 #define BV_BCH_FLASH0LAYOUT0_ECC0__ECC6 0x3
177 #define BV_BCH_FLASH0LAYOUT0_ECC0__ECC8 0x4
178 #define BV_BCH_FLASH0LAYOUT0_ECC0__ECC10 0x5
179 #define BV_BCH_FLASH0LAYOUT0_ECC0__ECC12 0x6
180 #define BV_BCH_FLASH0LAYOUT0_ECC0__ECC14 0x7
181 #define BV_BCH_FLASH0LAYOUT0_ECC0__ECC16 0x8
182 #define BV_BCH_FLASH0LAYOUT0_ECC0__ECC18 0x9
183 #define BV_BCH_FLASH0LAYOUT0_ECC0__ECC20 0xA
184 #define BP_BCH_FLASH0LAYOUT0_DATA0_SIZE 0
185 #define BM_BCH_FLASH0LAYOUT0_DATA0_SIZE (0xFFF << BP_BCH_FLASH0LAYOUT0_DATA0_SIZE)
186 #define BF_BCH_FLASH0LAYOUT0_DATA0_SIZE(v) (((v) << BP_BCH_FLASH0LAYOUT0_DATA0_SIZE) & \
187 BM_BCH_FLASH0LAYOUT0_DATA0_SIZE)
189 #define HW_BCH_FLASH0LAYOUT1 0x090
191 #define BP_BCH_FLASH0LAYOUT1_PAGE_SIZE 16
192 #define BM_BCH_FLASH0LAYOUT1_PAGE_SIZE (0xFFFF << BP_BCH_FLASH0LAYOUT1_PAGE_SIZE)
193 #define BF_BCH_FLASH0LAYOUT1_PAGE_SIZE(v) (((v) << BP_BCH_FLASH0LAYOUT1_PAGE_SIZE) & \
194 BM_BCH_FLASH0LAYOUT1_PAGE_SIZE)
195 #define BP_BCH_FLASH0LAYOUT1_ECCN 12
196 #define BM_BCH_FLASH0LAYOUT1_ECCN (0xF << BP_BCH_FLASH0LAYOUT1_ECCN)
197 #define BF_BCH_FLASH0LAYOUT1_ECCN(v) (((v) << BP_BCH_FLASH0LAYOUT1_ECCN) & \
198 BM_BCH_FLASH0LAYOUT1_ECCN)
199 #define BV_BCH_FLASH0LAYOUT1_ECCN__NONE 0x0
200 #define BV_BCH_FLASH0LAYOUT1_ECCN__ECC2 0x1
201 #define BV_BCH_FLASH0LAYOUT1_ECCN__ECC4 0x2
202 #define BV_BCH_FLASH0LAYOUT1_ECCN__ECC6 0x3
203 #define BV_BCH_FLASH0LAYOUT1_ECCN__ECC8 0x4
204 #define BV_BCH_FLASH0LAYOUT1_ECCN__ECC10 0x5
205 #define BV_BCH_FLASH0LAYOUT1_ECCN__ECC12 0x6
206 #define BV_BCH_FLASH0LAYOUT1_ECCN__ECC14 0x7
207 #define BV_BCH_FLASH0LAYOUT1_ECCN__ECC16 0x8
208 #define BV_BCH_FLASH0LAYOUT1_ECCN__ECC18 0x9
209 #define BV_BCH_FLASH0LAYOUT1_ECCN__ECC20 0xA
210 #define BP_BCH_FLASH0LAYOUT1_DATAN_SIZE 0
211 #define BM_BCH_FLASH0LAYOUT1_DATAN_SIZE (0xFFF << BP_BCH_FLASH0LAYOUT1_DATAN_SIZE)
212 #define BF_BCH_FLASH0LAYOUT1_DATAN_SIZE(v) (((v) << BP_BCH_FLASH0LAYOUT1_DATAN_SIZE) & \
213 BM_BCH_FLASH0LAYOUT1_DATAN_SIZE)
215 #define HW_BCH_FLASH1LAYOUT0 0x0a0
217 #define HW_BCH_FLASH1LAYOUT1 0x0b0
219 #define HW_BCH_FLASH2LAYOUT0 0x0c0
221 #define HW_BCH_FLASH2LAYOUT1 0x0d0
223 #define HW_BCH_FLASH3LAYOUT0 0x0e0
225 #define HW_BCH_FLASH3LAYOUT1 0x0f0
228 #define HW_BCH_DEBUG0 0x100
229 #define HW_BCH_DEBUG0_SET 0x104
230 #define HW_BCH_DEBUG0_CLR 0x108
231 #define HW_BCH_DEBUG0_TOG 0x10c
233 #define BM_BCH_DEBUG0_ROM_BIST_ENABLE (1 << 26)
234 #define BM_BCH_DEBUG0_ROM_BIST_COMPLETE (1 << 25)
235 #define BP_BCH_DEBUG0_KES_DEBUG_SYNDROME_SYMBOL 16
236 #define BM_BCH_DEBUG0_KES_DEBUG_SYNDROME_SYMBOL (0x1FF << BP_BCH_DEBUG0_KES_DEBUG_SYNDROME_SYMBOL)
237 #define BF_BCH_DEBUG0_KES_DEBUG_SYNDROME_SYMBOL(v) (((v) << BP_BCH_DEBUG0_KES_DEBUG_SYNDROME_SYMBOL) & \
238 BM_BCH_DEBUG0_KES_DEBUG_SYNDROME_SYMBOL)
239 #define BV_BCH_DEBUG0_KES_DEBUG_SYNDROME_SYMBOL__NORMAL 0x0
240 #define BV_BCH_DEBUG0_KES_DEBUG_SYNDROME_SYMBOL__TEST_MODE 0x1
241 #define BM_BCH_DEBUG0_KES_DEBUG_SHIFT_SYND (1 << 15)
242 #define BM_BCH_DEBUG0_KES_DEBUG_PAYLOAD_FLAG (1 << 14)
243 #define BV_BCH_DEBUG0_KES_DEBUG_PAYLOAD_FLAG__DATA 0x1
244 #define BV_BCH_DEBUG0_KES_DEBUG_PAYLOAD_FLAG__AUX 0x1
245 #define BM_BCH_DEBUG0_KES_DEBUG_MODE4K (1 << 13)
246 #define BV_BCH_DEBUG0_KES_DEBUG_MODE4K__4k 0x1
247 #define BV_BCH_DEBUG0_KES_DEBUG_MODE4K__2k 0x1
248 #define BM_BCH_DEBUG0_KES_DEBUG_KICK 0x00001000
249 #define BM_BCH_DEBUG0_KES_STANDALONE 0x00000800
250 #define BV_BCH_DEBUG0_KES_STANDALONE__NORMAL 0x0
251 #define BV_BCH_DEBUG0_KES_STANDALONE__TEST_MODE 0x1
252 #define BM_BCH_DEBUG0_KES_DEBUG_STEP 0x00000400
253 #define BM_BCH_DEBUG0_KES_DEBUG_STALL 0x00000200
254 #define BV_BCH_DEBUG0_KES_DEBUG_STALL__NORMAL 0x0
255 #define BV_BCH_DEBUG0_KES_DEBUG_STALL__WAIT 0x1
256 #define BM_BCH_DEBUG0_BM_KES_TEST_BYPASS 0x00000100
257 #define BV_BCH_DEBUG0_BM_KES_TEST_BYPASS__NORMAL 0x0
258 #define BV_BCH_DEBUG0_BM_KES_TEST_BYPASS__TEST_MODE 0x1
259 #define BP_BCH_DEBUG0_DEBUG_REG_SELECT 0
260 #define BM_BCH_DEBUG0_DEBUG_REG_SELECT 0x0000003F
261 #define BF_BCH_DEBUG0_DEBUG_REG_SELECT(v) (((v) << BP_BCH_DEBUG0_DEBUG_REG_SELECT) & \
262 BM_BCH_DEBUG0_DEBUG_REG_SELECT)
264 #define HW_BCH_DBGKESREAD 0x110
266 #define BP_BCH_DBGKESREAD_VALUES 0
267 #define BM_BCH_DBGKESREAD_VALUES 0xFFFFFFFF
268 #define BF_BCH_DBGKESREAD_VALUES(v) (v)
270 #define HW_BCH_DBGCSFEREAD 0x120
272 #define BP_BCH_DBGCSFEREAD_VALUES 0
273 #define BM_BCH_DBGCSFEREAD_VALUES 0xFFFFFFFF
274 #define BF_BCH_DBGCSFEREAD_VALUES(v) (v)
276 #define HW_BCH_DBGSYNDGENREAD 0x130
278 #define BP_BCH_DBGSYNDGENREAD_VALUES 0
279 #define BM_BCH_DBGSYNDGENREAD_VALUES 0xFFFFFFFF
280 #define BF_BCH_DBGSYNDGENREAD_VALUES(v) (v)
282 #define HW_BCH_DBGAHBMREAD 0x140
284 #define BP_BCH_DBGAHBMREAD_VALUES 0
285 #define BM_BCH_DBGAHBMREAD_VALUES 0xFFFFFFFF
286 #define BF_BCH_DBGAHBMREAD_VALUES(v) (v)
288 #define HW_BCH_BLOCKNAME 0x150
290 #define BP_BCH_BLOCKNAME_NAME 0
291 #define BM_BCH_BLOCKNAME_NAME 0xFFFFFFFF
292 #define BF_BCH_BLOCKNAME_NAME(v) (v)
295 #define HW_BCH_VERSION 0x160
297 #define BP_BCH_VERSION_MAJOR 24
298 #define BM_BCH_VERSION_MAJOR (0xFF << BP_BCH_VERSION_MAJOR)
299 #define BF_BCH_VERSION_MAJOR(v) (((v) << BP_BCH_VERSION_MAJOR) & \
300 BM_BCH_VERSION_MAJOR)
301 #define BP_BCH_VERSION_MINOR 16
302 #define BM_BCH_VERSION_MINOR (0xFF << BP_BCH_VERSION_MINOR)
303 #define BF_BCH_VERSION_MINOR(v) (((v) << BP_BCH_VERSION_MINOR) & \
304 BM_BCH_VERSION_MINOR)
305 #define BP_BCH_VERSION_STEP 0
306 #define BM_BCH_VERSION_STEP (0xFFFF << BP_BCH_VERSION_STEP)
307 #define BF_BCH_VERSION_STEP(v) (((v) << BP_BCH_VERSION_STEP) & \