blob: c345fc1f1fba91c2e40c74e834fe4f8dccedd0dc [file] [log] [blame]
Miquel Raynald0935362019-10-03 19:50:03 +02001menuconfig MTD_RAW_NAND
Miquel Raynal8115c452018-08-16 17:30:08 +02002 bool "Raw NAND Device Support"
Alexander Dahl77374532024-03-20 10:02:11 +01003
Miquel Raynald0935362019-10-03 19:50:03 +02004if MTD_RAW_NAND
Miquel Raynal1f1ae152018-08-16 17:30:07 +02005
6config SYS_NAND_SELF_INIT
7 bool
8 help
9 This option, if enabled, provides more flexible and linux-like
10 NAND initialization process.
11
Tom Rini98372452021-12-12 22:12:36 -050012config SPL_SYS_NAND_SELF_INIT
13 bool
14 depends on !SPL_NAND_SIMPLE
15 help
16 This option, if enabled, provides more flexible and linux-like
17 NAND initialization process, in SPL.
18
19config TPL_SYS_NAND_SELF_INIT
20 bool
21 depends on TPL_NAND_SUPPORT
22 help
23 This option, if enabled, provides more flexible and linux-like
24 NAND initialization process, in SPL.
25
Tom Rini1a9f23d2022-05-26 14:31:57 -040026config TPL_NAND_INIT
27 bool
28
Roger Quadros685c4282022-12-20 12:22:00 +020029config SPL_NAND_INIT
30 bool
31
Tom Riniac164de2022-10-28 20:27:04 -040032config SYS_MAX_NAND_DEVICE
33 int "Maximum number of NAND devices to support"
34 default 1
35
Stefan Agnerbd186142018-12-06 14:57:09 +010036config SYS_NAND_DRIVER_ECC_LAYOUT
Tom Rinid03e14e2021-12-11 14:55:54 -050037 bool "Omit standard ECC layouts to save space"
Stefan Agnerbd186142018-12-06 14:57:09 +010038 help
Tom Rinid03e14e2021-12-11 14:55:54 -050039 Omit standard ECC layouts to save space. Select this if your driver
Stefan Agnerbd186142018-12-06 14:57:09 +010040 is known to provide its own ECC layout.
41
Stefan Roese23b37f92019-08-22 12:28:04 +020042config SYS_NAND_USE_FLASH_BBT
43 bool "Enable BBT (Bad Block Table) support"
44 help
45 Enable the BBT (Bad Block Table) usage.
46
Tom Rini2b2696a2022-11-12 17:36:48 -050047config SYS_NAND_NO_SUBPAGE_WRITE
48 bool "Disable subpage write support"
49 depends on NAND_ARASAN || NAND_DAVINCI || NAND_KIRKWOOD
50
Balamanikandan Gunasundarfe33c7d2022-10-25 16:21:01 +053051config DM_NAND_ATMEL
Alexander Dahl77374532024-03-20 10:02:11 +010052 bool "Support Atmel NAND controller with DM support"
53 select SYS_NAND_SELF_INIT
54 imply SYS_NAND_USE_FLASH_BBT
55 help
56 Enable this driver for NAND flash platforms using an Atmel NAND
57 controller.
Balamanikandan Gunasundarfe33c7d2022-10-25 16:21:01 +053058
Miquel Raynal1f1ae152018-08-16 17:30:07 +020059config NAND_ATMEL
60 bool "Support Atmel NAND controller"
Tom Rini98372452021-12-12 22:12:36 -050061 select SYS_NAND_SELF_INIT
Miquel Raynal1f1ae152018-08-16 17:30:07 +020062 imply SYS_NAND_USE_FLASH_BBT
63 help
64 Enable this driver for NAND flash platforms using an Atmel NAND
65 controller.
66
Derald D. Woods7830fc52018-12-15 01:36:46 -060067if NAND_ATMEL
68
69config ATMEL_NAND_HWECC
70 bool "Atmel Hardware ECC"
Derald D. Woods7830fc52018-12-15 01:36:46 -060071
72config ATMEL_NAND_HW_PMECC
73 bool "Atmel Programmable Multibit ECC (PMECC)"
74 select ATMEL_NAND_HWECC
Derald D. Woods7830fc52018-12-15 01:36:46 -060075 help
76 The Programmable Multibit ECC (PMECC) controller is a programmable
77 binary BCH(Bose, Chaudhuri and Hocquenghem) encoder and decoder.
78
79config PMECC_CAP
80 int "PMECC Correctable ECC Bits"
81 depends on ATMEL_NAND_HW_PMECC
82 default 2
83 help
84 Correctable ECC bits, can be 2, 4, 8, 12, and 24.
85
86config PMECC_SECTOR_SIZE
87 int "PMECC Sector Size"
88 depends on ATMEL_NAND_HW_PMECC
89 default 512
90 help
91 Sector size, in bytes, can be 512 or 1024.
92
93config SPL_GENERATE_ATMEL_PMECC_HEADER
94 bool "Atmel PMECC Header Generation"
Tom Rini0a83cc22022-06-10 23:03:09 -040095 depends on SPL
Derald D. Woods7830fc52018-12-15 01:36:46 -060096 select ATMEL_NAND_HWECC
97 select ATMEL_NAND_HW_PMECC
Derald D. Woods7830fc52018-12-15 01:36:46 -060098 help
99 Generate Programmable Multibit ECC (PMECC) header for SPL image.
100
Tom Rini70aa87d2022-11-12 17:36:42 -0500101choice
102 prompt "NAND bus width (bits)"
103 default SYS_NAND_DBW_8
104
105config SYS_NAND_DBW_8
106 bool "NAND bus width is 8 bits"
107
108config SYS_NAND_DBW_16
109 bool "NAND bus width is 16 bits"
110
111endchoice
112
Derald D. Woods7830fc52018-12-15 01:36:46 -0600113endif
114
Philippe Reynes5aa6cfb2019-03-15 15:14:36 +0100115config NAND_BRCMNAND
116 bool "Support Broadcom NAND controller"
Miquel Raynala903be42019-10-03 19:50:04 +0200117 depends on OF_CONTROL && DM && DM_MTD
Tom Rini98372452021-12-12 22:12:36 -0500118 select SYS_NAND_SELF_INIT
Philippe Reynes5aa6cfb2019-03-15 15:14:36 +0100119 help
120 Enable the driver for NAND flash on platforms using a Broadcom NAND
121 controller.
122
Linus Walleij84998f42024-10-11 16:49:54 +0200123config NAND_BRCMNAND_BCMBCA
124 bool "Support Broadcom NAND controller on BCMBCA platforms"
125 depends on NAND_BRCMNAND && ARCH_BCMBCA
126 help
127 Enable support for broadcom nand driver on BCA (broadband
128 access) platforms such as BCM6846.
129
Álvaro Fernández Rojasd9f9bfc2019-08-28 19:12:15 +0200130config NAND_BRCMNAND_6368
131 bool "Support Broadcom NAND controller on bcm6368"
132 depends on NAND_BRCMNAND && ARCH_BMIPS
133 help
134 Enable support for broadcom nand driver on bcm6368.
135
Philippe Reynese175c322022-02-11 19:18:36 +0100136config NAND_BRCMNAND_6753
137 bool "Support Broadcom NAND controller on bcm6753"
William Zhang38921822022-08-22 11:49:08 -0700138 depends on NAND_BRCMNAND && BCM6855
Philippe Reynese175c322022-02-11 19:18:36 +0100139 help
140 Enable support for broadcom nand driver on bcm6753.
141
Philippe Reynes74ead742020-01-07 20:14:13 +0100142config NAND_BRCMNAND_68360
Alexander Dahl77374532024-03-20 10:02:11 +0100143 bool "Support Broadcom NAND controller on bcm68360"
144 depends on NAND_BRCMNAND && BCM6856
145 help
146 Enable support for broadcom nand driver on bcm68360.
Philippe Reynes74ead742020-01-07 20:14:13 +0100147
Philippe Reynes5aa6cfb2019-03-15 15:14:36 +0100148config NAND_BRCMNAND_6838
Alexander Dahl77374532024-03-20 10:02:11 +0100149 bool "Support Broadcom NAND controller on bcm6838"
150 depends on NAND_BRCMNAND && ARCH_BMIPS && SOC_BMIPS_BCM6838
151 help
152 Enable support for broadcom nand driver on bcm6838.
Philippe Reynes5aa6cfb2019-03-15 15:14:36 +0100153
154config NAND_BRCMNAND_6858
Alexander Dahl77374532024-03-20 10:02:11 +0100155 bool "Support Broadcom NAND controller on bcm6858"
156 depends on NAND_BRCMNAND && BCM6858
157 help
158 Enable support for broadcom nand driver on bcm6858.
Philippe Reynes5aa6cfb2019-03-15 15:14:36 +0100159
160config NAND_BRCMNAND_63158
Alexander Dahl77374532024-03-20 10:02:11 +0100161 bool "Support Broadcom NAND controller on bcm63158"
162 depends on NAND_BRCMNAND && BCM63158
163 help
164 Enable support for broadcom nand driver on bcm63158.
Philippe Reynes5aa6cfb2019-03-15 15:14:36 +0100165
Linus Walleij2306c332023-03-08 22:42:31 +0100166config NAND_BRCMNAND_IPROC
Alexander Dahl77374532024-03-20 10:02:11 +0100167 bool "Support Broadcom NAND controller on the iproc family"
168 depends on NAND_BRCMNAND
169 help
170 Enable support for broadcom nand driver on the Broadcom
171 iproc family such as Northstar (BCM5301x, BCM4708...)
Linus Walleij2306c332023-03-08 22:42:31 +0100172
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200173config NAND_DAVINCI
174 bool "Support TI Davinci NAND controller"
Tom Rini98372452021-12-12 22:12:36 -0500175 select SYS_NAND_SELF_INIT if TARGET_DA850EVM
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200176 help
177 Enable this driver for NAND flash controllers available in TI Davinci
178 and Keystone2 platforms
179
Tom Rinid1286e12022-11-12 17:36:45 -0500180choice
181 prompt "Type of ECC used on NAND"
182 default SYS_NAND_4BIT_HW_ECC_OOBFIRST
183 depends on NAND_DAVINCI
184
185config SYS_NAND_HW_ECC
186 bool "Use 1-bit HW ECC"
187
Tom Rini7f750f82022-10-28 20:27:11 -0400188config SYS_NAND_4BIT_HW_ECC_OOBFIRST
189 bool "Use 4-bit HW ECC with OOB at the front"
Tom Rinid1286e12022-11-12 17:36:45 -0500190
191config SYS_NAND_SOFT_ECC
192 bool "Use software ECC"
193
194endchoice
Tom Rini7f750f82022-10-28 20:27:11 -0400195
Tom Rini33adefd2022-11-12 17:36:49 -0500196choice
197 prompt "NAND page size"
198 depends on NAND_DAVINCI
199 default SYS_NAND_PAGE_2K
200
201config SYS_NAND_PAGE_2K
202 bool "Page size is 2K"
203
204config SYS_NAND_PAGE_4K
205 bool "Page size is 4K"
206
207endchoice
208
Tom Rinidada0e32021-09-12 20:32:24 -0400209config KEYSTONE_RBL_NAND
210 depends on ARCH_KEYSTONE
211 def_bool y
212
Tom Rinifae1dab2021-09-22 14:50:29 -0400213config SPL_NAND_LOAD
214 def_bool y
215 depends on NAND_DAVINCI && ARCH_DAVINCI && SPL_NAND_SUPPORT
216
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200217config NAND_DENALI
218 bool
219 select SYS_NAND_SELF_INIT
220 imply CMD_NAND
221
222config NAND_DENALI_DT
223 bool "Support Denali NAND controller as a DT device"
224 select NAND_DENALI
Lokanathan, Raaj791edf72022-12-11 23:37:42 +0800225 select SPL_SYS_NAND_SELF_INIT
Masahiro Yamada8fc53822020-01-30 22:07:59 +0900226 depends on OF_CONTROL && DM_MTD
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200227 help
228 Enable the driver for NAND flash on platforms using a Denali NAND
229 controller as a DT device.
230
Tom Rinia73788c2021-09-22 14:50:37 -0400231config NAND_FSL_ELBC
232 bool "Support Freescale Enhanced Local Bus Controller FCM NAND driver"
Tom Rini98372452021-12-12 22:12:36 -0500233 select TPL_SYS_NAND_SELF_INIT if TPL_NAND_SUPPORT
234 select SPL_SYS_NAND_SELF_INIT
235 select SYS_NAND_SELF_INIT
Tom Rinia73788c2021-09-22 14:50:37 -0400236 depends on FSL_ELBC
237 help
238 Enable the Freescale Enhanced Local Bus Controller FCM NAND driver.
239
Pali Rohárbb834db2022-04-04 18:17:19 +0200240config NAND_FSL_ELBC_DT
241 bool "Support Freescale Enhanced Local Bus Controller FCM NAND driver (DT mode)"
242 depends on NAND_FSL_ELBC
243
Tom Rinia73788c2021-09-22 14:50:37 -0400244config NAND_FSL_IFC
245 bool "Support Freescale Integrated Flash Controller NAND driver"
Tom Rini98372452021-12-12 22:12:36 -0500246 select TPL_SYS_NAND_SELF_INIT if TPL_NAND_SUPPORT
Tom Rini1a9f23d2022-05-26 14:31:57 -0400247 select TPL_NAND_INIT if TPL && !TPL_FRAMEWORK
Tom Rini98372452021-12-12 22:12:36 -0500248 select SPL_SYS_NAND_SELF_INIT
249 select SYS_NAND_SELF_INIT
Tom Rini05b419e2021-12-11 14:55:49 -0500250 select FSL_IFC
Tom Rinia73788c2021-09-22 14:50:37 -0400251 help
252 Enable the Freescale Integrated Flash Controller NAND driver.
253
Tom Rinib91baf62022-11-19 18:45:29 -0500254config NAND_KIRKWOOD
255 bool "Support for Kirkwood NAND controller"
256 depends on ARCH_KIRKWOOD
257 default y
258
259config NAND_ECC_BCH
260 bool
261
262config NAND_KMETER1
263 bool "Support KMETER1 NAND controller"
264 depends on VENDOR_KM
265 select NAND_ECC_BCH
266
Tom Rini08204272021-09-22 14:50:28 -0400267config NAND_LPC32XX_MLC
268 bool "Support LPC32XX_MLC controller"
Tom Rini98372452021-12-12 22:12:36 -0500269 select SYS_NAND_SELF_INIT
Tom Rini08204272021-09-22 14:50:28 -0400270 help
271 Enable the LPC32XX MLC NAND controller.
272
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200273config NAND_LPC32XX_SLC
274 bool "Support LPC32XX_SLC controller"
275 help
276 Enable the LPC32XX SLC NAND controller.
277
278config NAND_OMAP_GPMC
279 bool "Support OMAP GPMC NAND controller"
Roger Quadros0bde4972022-10-11 14:50:00 +0300280 depends on ARCH_OMAP2PLUS || ARCH_KEYSTONE || ARCH_K3
Roger Quadros80cf6372022-12-20 12:21:59 +0200281 select SYS_NAND_SELF_INIT if ARCH_K3
Roger Quadros685c4282022-12-20 12:22:00 +0200282 select SPL_NAND_INIT if ARCH_K3
283 select SPL_SYS_NAND_SELF_INIT if ARCH_K3
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200284 help
285 Enables omap_gpmc.c driver for OMAPx and AMxxxx platforms.
286 GPMC controller is used for parallel NAND flash devices, and can
287 do ECC calculation (not ECC error detection) for HAM1, BCH4, BCH8
288 and BCH16 ECC algorithms.
289
Tom Rinif6d26d82021-09-22 14:50:39 -0400290if NAND_OMAP_GPMC
291
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200292config NAND_OMAP_GPMC_PREFETCH
293 bool "Enable GPMC Prefetch"
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200294 default y
295 help
296 On OMAP platforms that use the GPMC controller
297 (CONFIG_NAND_OMAP_GPMC_PREFETCH), this options enables the code that
298 uses the prefetch mode to speed up read operations.
299
300config NAND_OMAP_ELM
301 bool "Enable ELM driver for OMAPxx and AMxx platforms."
Tom Rinif6d26d82021-09-22 14:50:39 -0400302 depends on !OMAP34XX
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200303 help
304 ELM controller is used for ECC error detection (not ECC calculation)
305 of BCH4, BCH8 and BCH16 ECC algorithms.
306 Some legacy platforms like OMAP3xx do not have in-built ELM h/w engine,
307 thus such SoC platforms need to depend on software library for ECC error
308 detection. However ECC calculation on such plaforms would still be
309 done by GPMC controller.
310
Tom Rinif6d26d82021-09-22 14:50:39 -0400311choice
312 prompt "ECC scheme"
313 default NAND_OMAP_ECCSCHEME_BCH8_CODE_HW
314 help
315 On OMAP platforms, this CONFIG specifies NAND ECC scheme.
316 It can take following values:
317 OMAP_ECC_HAM1_CODE_SW
318 1-bit Hamming code using software lib.
319 (for legacy devices only)
320 OMAP_ECC_HAM1_CODE_HW
321 1-bit Hamming code using GPMC hardware.
322 (for legacy devices only)
323 OMAP_ECC_BCH4_CODE_HW_DETECTION_SW
324 4-bit BCH code (unsupported)
325 OMAP_ECC_BCH4_CODE_HW
326 4-bit BCH code (unsupported)
327 OMAP_ECC_BCH8_CODE_HW_DETECTION_SW
328 8-bit BCH code with
329 - ecc calculation using GPMC hardware engine,
330 - error detection using software library.
331 - requires CONFIG_BCH to enable software BCH library
332 (For legacy device which do not have ELM h/w engine)
333 OMAP_ECC_BCH8_CODE_HW
334 8-bit BCH code with
335 - ecc calculation using GPMC hardware engine,
336 - error detection using ELM hardware engine.
337 OMAP_ECC_BCH16_CODE_HW
338 16-bit BCH code with
339 - ecc calculation using GPMC hardware engine,
340 - error detection using ELM hardware engine.
341
342 How to select ECC scheme on OMAP and AMxx platforms ?
343 -----------------------------------------------------
344 Though higher ECC schemes have more capability to detect and correct
345 bit-flips, but still selection of ECC scheme is dependent on following
346 - hardware engines present in SoC.
347 Some legacy OMAP SoC do not have ELM h/w engine thus such
348 SoC cannot support BCHx_HW ECC schemes.
349 - size of OOB/Spare region
350 With higher ECC schemes, more OOB/Spare area is required to
351 store ECC. So choice of ECC scheme is limited by NAND oobsize.
352
353 In general following expression can help:
354 NAND_OOBSIZE >= 2 + (NAND_PAGESIZE / 512) * ECC_BYTES
355 where
356 NAND_OOBSIZE = number of bytes available in
357 OOB/spare area per NAND page.
358 NAND_PAGESIZE = bytes in main-area of NAND page.
359 ECC_BYTES = number of ECC bytes generated to
360 protect 512 bytes of data, which is:
361 3 for HAM1_xx ecc schemes
362 7 for BCH4_xx ecc schemes
363 14 for BCH8_xx ecc schemes
364 26 for BCH16_xx ecc schemes
365
366 example to check for BCH16 on 2K page NAND
367 NAND_PAGESIZE = 2048
368 NAND_OOBSIZE = 64
369 2 + (2048 / 512) * 26 = 106 > NAND_OOBSIZE
370 Thus BCH16 cannot be supported on 2K page NAND.
371
372 However, for 4K pagesize NAND
373 NAND_PAGESIZE = 4096
374 NAND_OOBSIZE = 224
375 ECC_BYTES = 26
376 2 + (4096 / 512) * 26 = 210 < NAND_OOBSIZE
377 Thus BCH16 can be supported on 4K page NAND.
378
379config NAND_OMAP_ECCSCHEME_HAM1_CODE_SW
380 bool "1-bit Hamming code using software lib"
381
382config NAND_OMAP_ECCSCHEME_HAM1_CODE_HW
383 bool "1-bit Hamming code using GPMC hardware"
384
385config NAND_OMAP_ECCSCHEME_BCH8_CODE_HW_DETECTION_SW
386 bool "8-bit BCH code with HW calculation SW error detection"
387
388config NAND_OMAP_ECCSCHEME_BCH8_CODE_HW
389 bool "8-bit BCH code with HW calculation and error detection"
390
391config NAND_OMAP_ECCSCHEME_BCH16_CODE_HW
392 bool "16-bit BCH code with HW calculation and error detection"
393
394endchoice
395
396config NAND_OMAP_ECCSCHEME
397 int
398 default 1 if NAND_OMAP_ECCSCHEME_HAM1_CODE_SW
399 default 2 if NAND_OMAP_ECCSCHEME_HAM1_CODE_HW
400 default 5 if NAND_OMAP_ECCSCHEME_BCH8_CODE_HW_DETECTION_SW
401 default 6 if NAND_OMAP_ECCSCHEME_BCH8_CODE_HW
402 default 7 if NAND_OMAP_ECCSCHEME_BCH16_CODE_HW
403 help
404 This must be kept in sync with the enum in
405 include/linux/mtd/omap_gpmc.h
406
407endif
408
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200409config NAND_VF610_NFC
410 bool "Support for Freescale NFC for VF610"
411 select SYS_NAND_SELF_INIT
Stefan Agnerbd186142018-12-06 14:57:09 +0100412 select SYS_NAND_DRIVER_ECC_LAYOUT
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200413 imply CMD_NAND
414 help
415 Enables support for NAND Flash Controller on some Freescale
416 processors like the VF610, MCF54418 or Kinetis K70.
417 The driver supports a maximum 2k page size. The driver
418 currently does not support hardware ECC.
419
Lukasz Majewskif006cb32018-12-03 10:24:50 +0100420if NAND_VF610_NFC
421
422config NAND_VF610_NFC_DT
Alexander Dahl77374532024-03-20 10:02:11 +0100423 bool "Support Vybrid's vf610 NAND controller as a DT device"
424 depends on OF_CONTROL && DM_MTD
425 help
426 Enable the driver for Vybrid's vf610 NAND flash on platforms
Lukasz Majewskif006cb32018-12-03 10:24:50 +0100427 using device tree.
428
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200429choice
430 prompt "Hardware ECC strength"
431 depends on NAND_VF610_NFC
432 default SYS_NAND_VF610_NFC_45_ECC_BYTES
433 help
434 Select the ECC strength used in the hardware BCH ECC block.
435
436config SYS_NAND_VF610_NFC_45_ECC_BYTES
437 bool "24-error correction (45 ECC bytes)"
438
439config SYS_NAND_VF610_NFC_60_ECC_BYTES
440 bool "32-error correction (60 ECC bytes)"
441
442endchoice
443
Lukasz Majewskif006cb32018-12-03 10:24:50 +0100444endif
445
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200446config NAND_PXA3XX
447 bool "Support for NAND on PXA3xx and Armada 370/XP/38x"
448 select SYS_NAND_SELF_INIT
Shmuel Hazan759349e2020-10-29 08:52:18 +0200449 select DM_MTD
Shmuel Hazan58983222020-10-29 08:52:20 +0200450 select REGMAP
451 select SYSCON
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200452 imply CMD_NAND
453 help
454 This enables the driver for the NAND flash device found on
455 PXA3xx processors (NFCv1) and also on Armada 370/XP (NFCv2).
456
Sean Anderson326422b2023-11-04 16:37:52 -0400457config NAND_SANDBOX
458 bool "Support for NAND in sandbox"
459 depends on SANDBOX
460 select SYS_NAND_SELF_INIT
Sean Anderson765dc6a2023-11-04 16:37:53 -0400461 select SPL_SYS_NAND_SELF_INIT
462 select SPL_NAND_INIT
Sean Anderson326422b2023-11-04 16:37:52 -0400463 select SYS_NAND_SOFT_ECC
464 select BCH
465 select NAND_ECC_BCH
466 imply CMD_NAND
467 help
468 Enable a dummy NAND driver for sandbox. It simulates any number of
469 arbitrary NAND chips with a RAM buffer. It will also inject errors to
470 test ECC. At the moment, only 8-bit busses and single-chip devices are
471 supported.
472
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200473config NAND_SUNXI
474 bool "Support for NAND on Allwinner SoCs"
475 default ARCH_SUNXI
476 depends on MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUN8I
477 select SYS_NAND_SELF_INIT
478 select SYS_NAND_U_BOOT_LOCATIONS
479 select SPL_NAND_SUPPORT
Tom Rini98372452021-12-12 22:12:36 -0500480 select SPL_SYS_NAND_SELF_INIT
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200481 imply CMD_NAND
Alexander Dahl77374532024-03-20 10:02:11 +0100482 help
483 Enable support for NAND. This option enables the standard and
484 SPL drivers.
485 The SPL driver only supports reading from the NAND using DMA
486 transfers.
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200487
488if NAND_SUNXI
489
490config NAND_SUNXI_SPL_ECC_STRENGTH
491 int "Allwinner NAND SPL ECC Strength"
492 default 64
493
494config NAND_SUNXI_SPL_ECC_SIZE
495 int "Allwinner NAND SPL ECC Step Size"
496 default 1024
497
498config NAND_SUNXI_SPL_USABLE_PAGE_SIZE
499 int "Allwinner NAND SPL Usable Page Size"
500 default 1024
501
502endif
503
504config NAND_ARASAN
505 bool "Configure Arasan Nand"
506 select SYS_NAND_SELF_INIT
Michal Simekc5587832020-08-19 09:59:52 +0200507 depends on DM_MTD
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200508 imply CMD_NAND
509 help
510 This enables Nand driver support for Arasan nand flash
511 controller. This uses the hardware ECC for read and
512 write operations.
513
Arseniy Krasnov55842b42024-02-11 01:39:27 +0300514config NAND_MESON
515 bool "Meson NAND support"
516 select SYS_NAND_SELF_INIT
517 depends on DM_MTD && ARCH_MESON
518 imply CMD_NAND
519 help
520 This enables Nand driver support for Meson raw NAND flash
521 controller.
522
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200523config NAND_MXC
524 bool "MXC NAND support"
525 depends on CPU_ARM926EJS || CPU_ARM1136 || MX5
526 imply CMD_NAND
527 help
528 This enables the NAND driver for the NAND flash controller on the
Haolin Lie8df55b2021-07-18 10:13:39 +0800529 i.MX27 / i.MX31 / i.MX5 processors.
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200530
Tom Rini1ba2a002022-11-12 17:36:50 -0500531config SYS_NAND_SIZE
532 int "Size of NAND in kilobytes"
533 depends on NAND_MXC && SPL_NAND_SUPPORT
534 default 268435456
535
Tom Rini17e67002022-12-02 16:42:37 -0500536config MXC_NAND_HWECC
537 bool "Hardware ECC support in MXC NAND"
538 depends on NAND_MXC
539
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200540config NAND_MXS
541 bool "MXS NAND support"
Peng Fan128abf42020-05-04 22:09:00 +0800542 depends on MX23 || MX28 || MX6 || MX7 || IMX8 || IMX8M
Tom Rini98372452021-12-12 22:12:36 -0500543 select SPL_SYS_NAND_SELF_INIT
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200544 select SYS_NAND_SELF_INIT
545 imply CMD_NAND
546 select APBH_DMA
Peng Fan128abf42020-05-04 22:09:00 +0800547 select APBH_DMA_BURST if ARCH_MX6 || ARCH_MX7 || ARCH_IMX8 || ARCH_IMX8M
548 select APBH_DMA_BURST8 if ARCH_MX6 || ARCH_MX7 || ARCH_IMX8 || ARCH_IMX8M
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200549 help
550 This enables NAND driver for the NAND flash controller on the
551 MXS processors.
552
553if NAND_MXS
554
555config NAND_MXS_DT
556 bool "Support MXS NAND controller as a DT device"
Miquel Raynala903be42019-10-03 19:50:04 +0200557 depends on OF_CONTROL && DM_MTD
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200558 help
559 Enable the driver for MXS NAND flash on platforms using
560 device tree.
561
562config NAND_MXS_USE_MINIMUM_ECC
563 bool "Use minimum ECC strength supported by the controller"
564 default false
565
566endif
567
Zhengxun Li01551712021-09-14 13:43:51 +0800568config NAND_MXIC
569 bool "Macronix raw NAND controller"
570 select SYS_NAND_SELF_INIT
571 help
572 This selects the Macronix raw NAND controller driver.
573
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200574config NAND_ZYNQ
575 bool "Support for Zynq Nand controller"
Tom Rini98372452021-12-12 22:12:36 -0500576 select SPL_SYS_NAND_SELF_INIT
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200577 select SYS_NAND_SELF_INIT
Ashok Reddy Somabb8448a2019-12-27 04:47:12 -0700578 select DM_MTD
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200579 imply CMD_NAND
580 help
581 This enables Nand driver support for Nand flash controller
582 found on Zynq SoC.
583
584config NAND_ZYNQ_USE_BOOTLOADER1_TIMINGS
585 bool "Enable use of 1st stage bootloader timing for NAND"
586 depends on NAND_ZYNQ
587 help
Michal Simek50fa1182023-05-17 09:17:16 +0200588 This flag prevent U-Boot reconfigure NAND flash controller and reuse
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200589 the NAND timing from 1st stage bootloader.
590
Suneel Garapati9de7d2b2020-08-26 14:37:22 +0200591config NAND_OCTEONTX
592 bool "Support for OcteonTX NAND controller"
593 select SYS_NAND_SELF_INIT
594 imply CMD_NAND
595 help
Alexander Dahl77374532024-03-20 10:02:11 +0100596 This enables Nand flash controller hardware found on the OcteonTX
597 processors.
Suneel Garapati9de7d2b2020-08-26 14:37:22 +0200598
599config NAND_OCTEONTX_HW_ECC
600 bool "Support Hardware ECC for OcteonTX NAND controller"
601 depends on NAND_OCTEONTX
602 default y
603 help
Alexander Dahl77374532024-03-20 10:02:11 +0100604 This enables Hardware BCH engine found on the OcteonTX processors to
605 support ECC for NAND flash controller.
Suneel Garapati9de7d2b2020-08-26 14:37:22 +0200606
Christophe Kerelloda141682019-04-05 11:41:50 +0200607config NAND_STM32_FMC2
608 bool "Support for NAND controller on STM32MP SoCs"
609 depends on ARCH_STM32MP
610 select SYS_NAND_SELF_INIT
611 imply CMD_NAND
612 help
613 Enables support for NAND Flash chips on SoCs containing the FMC2
614 NAND controller. This controller is found on STM32MP SoCs.
615 The controller supports a maximum 8k page size and supports
616 a maximum 8-bit correction error per sector of 512 bytes.
617
Kate Liu41ccd2e2020-12-11 13:46:12 -0800618config CORTINA_NAND
619 bool "Support for NAND controller on Cortina-Access SoCs"
620 depends on CORTINA_PLATFORM
621 select SYS_NAND_SELF_INIT
622 select DM_MTD
623 imply CMD_NAND
624 help
625 Enables support for NAND Flash chips on Coartina-Access SoCs platform
626 This controller is found on Presidio/Venus SoCs.
627 The controller supports a maximum 8k page size and supports
628 a maximum 40-bit error correction per sector of 1024 bytes.
629
Yifeng Zhao9e9021e2021-06-07 16:40:29 +0800630config ROCKCHIP_NAND
631 bool "Support for NAND controller on Rockchip SoCs"
632 depends on ARCH_ROCKCHIP
633 select SYS_NAND_SELF_INIT
634 select DM_MTD
635 imply CMD_NAND
636 help
637 Enables support for NAND Flash chips on Rockchip SoCs platform.
638 This controller is found on Rockchip SoCs.
639 There are four different versions of NAND FLASH Controllers,
640 including:
641 NFC v600: RK2928, RK3066, RK3188
642 NFC v622: RK3036, RK3128
643 NFC v800: RK3308, RV1108
644 NFC v900: PX30, RK3326
645
Johan Jonker904e0f02023-10-18 16:00:27 +0200646config ROCKCHIP_NAND_SKIP_BBTSCAN
647 bool "Skip the automatic BBT scan with Rockchip NAND controllers"
648 depends on ROCKCHIP_NAND
Johan Jonker904e0f02023-10-18 16:00:27 +0200649 help
650 Skip the automatic BBT scan with the NAND_SKIP_BBTSCAN
651 option when data content is not in MTD format or
652 must remain unchanged.
653
Tom Rini8f37ac42021-12-12 22:12:35 -0500654config TEGRA_NAND
655 bool "Support for NAND controller on Tegra SoCs"
656 depends on ARCH_TEGRA
657 select SYS_NAND_SELF_INIT
658 imply CMD_NAND
659 help
660 Enables support for NAND Flash chips on Tegra SoCs platforms.
661
developer10a61df2022-05-20 11:23:47 +0800662config NAND_MT7621
663 bool "Support for MediaTek MT7621 NAND flash controller"
664 depends on SOC_MT7621
665 select SYS_NAND_SELF_INIT
666 select SPL_SYS_NAND_SELF_INIT
667 imply CMD_NAND
668 help
669 This enables NAND driver for the NAND flash controller on MediaTek
670 MT7621 platform.
671 The controller supports 4~12 bits correction per 512 bytes with a
672 maximum 4KB page size.
673
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200674comment "Generic NAND options"
675
676config SYS_NAND_BLOCK_SIZE
677 hex "NAND chip eraseblock size"
Pali Rohár5c5cf602023-01-10 22:55:21 +0100678 depends on ARCH_SUNXI || SPL_NAND_SUPPORT || TPL_NAND_SUPPORT || \
679 MVEBU_SPL_BOOT_DEVICE_NAND
developer10a61df2022-05-20 11:23:47 +0800680 depends on !NAND_MXS && !NAND_DENALI_DT && !NAND_LPC32XX_MLC && \
681 !NAND_FSL_IFC && !NAND_MT7621
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200682 help
683 Number of data bytes in one eraseblock for the NAND chip on the
684 board. This is the multiple of NAND_PAGE_SIZE and the number of
685 pages.
686
Tom Rinifdae0072021-09-22 14:50:34 -0400687config SYS_NAND_ONFI_DETECTION
688 bool "Enable detection of ONFI compliant devices during probe"
689 help
690 Enables detection of ONFI compliant devices during probe.
691 And fetching device parameters flashed on device, by parsing
692 ONFI parameter page.
693
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200694config SYS_NAND_PAGE_SIZE
695 hex "NAND chip page size"
Tom Rinifae1dab2021-09-22 14:50:29 -0400696 depends on ARCH_SUNXI || NAND_OMAP_GPMC || NAND_LPC32XX_SLC || \
697 SPL_NAND_SIMPLE || (NAND_MXC && SPL_NAND_SUPPORT) || \
Pali Rohár5c5cf602023-01-10 22:55:21 +0100698 MVEBU_SPL_BOOT_DEVICE_NAND || \
Sean Anderson765dc6a2023-11-04 16:37:53 -0400699 (NAND_ATMEL && SPL_NAND_SUPPORT) || \
700 SPL_GENERATE_ATMEL_PMECC_HEADER || NAND_SANDBOX
developer10a61df2022-05-20 11:23:47 +0800701 depends on !NAND_MXS && !NAND_DENALI_DT && !NAND_LPC32XX_MLC && !NAND_MT7621
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200702 help
703 Number of data bytes in one page for the NAND chip on the
704 board, not including the OOB area.
705
706config SYS_NAND_OOBSIZE
707 hex "NAND chip OOB size"
Tom Rinifae1dab2021-09-22 14:50:29 -0400708 depends on ARCH_SUNXI || NAND_OMAP_GPMC || NAND_LPC32XX_SLC || \
709 SPL_NAND_SIMPLE || (NAND_MXC && SPL_NAND_SUPPORT) || \
710 (NAND_ATMEL && SPL_NAND_SUPPORT) || SPL_GENERATE_ATMEL_PMECC_HEADER
Tom Rinid24700f2021-10-30 23:03:56 -0400711 depends on !NAND_MXS && !NAND_DENALI_DT && !NAND_LPC32XX_MLC
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200712 help
713 Number of bytes in the Out-Of-Band area for the NAND chip on
714 the board.
715
716# Enhance depends when converting drivers to Kconfig which use this config
717# option (mxc_nand, ndfc, omap_gpmc).
718config SYS_NAND_BUSWIDTH_16BIT
719 bool "Use 16-bit NAND interface"
720 depends on NAND_VF610_NFC || NAND_OMAP_GPMC || NAND_MXC || ARCH_DAVINCI
721 help
722 Indicates that NAND device has 16-bit wide data-bus. In absence of this
723 config, bus-width of NAND device is assumed to be either 8-bit and later
724 determined by reading ONFI params.
725 Above config is useful when NAND device's bus-width information cannot
726 be determined from on-chip ONFI params, like in following scenarios:
727 - SPL boot does not support reading of ONFI parameters. This is done to
728 keep SPL code foot-print small.
729 - In current U-Boot flow using nand_init(), driver initialization
730 happens in board_nand_init() which is called before any device probe
731 (nand_scan_ident + nand_scan_tail), thus device's ONFI parameters are
732 not available while configuring controller. So a static CONFIG_NAND_xx
733 is needed to know the device's bus-width in advance.
734
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200735if SPL
736
Tom Rini8e6d9c72021-09-22 14:50:33 -0400737config SYS_NAND_5_ADDR_CYCLE
738 bool "Wait 5 address cycles during NAND commands"
739 depends on SPL_NAND_AM33XX_BCH || SPL_NAND_SIMPLE || \
740 (SPL_NAND_SUPPORT && NAND_ATMEL)
741 default y
742 help
743 Some controllers require waiting for 5 address cycles when issuing
744 some commands, on NAND chips larger than 128MiB.
745
Tom Rinia2fbd4a2021-09-22 14:50:32 -0400746choice
Tom Rinifdae0072021-09-22 14:50:34 -0400747 prompt "NAND bad block marker/indicator position in the OOB"
Tom Rinia2fbd4a2021-09-22 14:50:32 -0400748 depends on SPL_NAND_AM33XX_BCH || SPL_NAND_DENALI || SPL_NAND_SIMPLE || \
749 SPL_NAND_SUPPORT && (NAND_ATMEL || NAND_MXC)
750 default HAS_NAND_LARGE_BADBLOCK_POS
751 help
752 In the OOB, which position contains the badblock information.
753
754config HAS_NAND_LARGE_BADBLOCK_POS
755 bool "Set the bad block marker/indicator to the 'large' position"
756
757config HAS_NAND_SMALL_BADBLOCK_POS
758 bool "Set the bad block marker/indicator to the 'small' position"
759
760endchoice
761
762config SYS_NAND_BAD_BLOCK_POS
763 int
764 default 0 if HAS_NAND_LARGE_BADBLOCK_POS
765 default 5 if HAS_NAND_SMALL_BADBLOCK_POS
766
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200767config SYS_NAND_U_BOOT_LOCATIONS
Michal Simek50fa1182023-05-17 09:17:16 +0200768 bool "Define U-Boot binaries locations in NAND"
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200769 help
Alexander Dahl77374532024-03-20 10:02:11 +0100770 Enable CONFIG_SYS_NAND_U_BOOT_OFFS though Kconfig.
771 This option should not be enabled when compiling U-Boot for boards
772 defining CONFIG_SYS_NAND_U_BOOT_OFFS in their include/configs/<board>.h
773 file.
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200774
775config SYS_NAND_U_BOOT_OFFS
776 hex "Location in NAND to read U-Boot from"
777 default 0x800000 if NAND_SUNXI
778 depends on SYS_NAND_U_BOOT_LOCATIONS
779 help
Alexander Dahl77374532024-03-20 10:02:11 +0100780 Set the offset from the start of the nand where u-boot should be
781 loaded from.
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200782
783config SYS_NAND_U_BOOT_OFFS_REDUND
784 hex "Location in NAND to read U-Boot from"
785 default SYS_NAND_U_BOOT_OFFS
786 depends on SYS_NAND_U_BOOT_LOCATIONS
787 help
Alexander Dahl77374532024-03-20 10:02:11 +0100788 Set the offset from the start of the nand where the redundant u-boot
789 should be loaded from.
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200790
791config SPL_NAND_AM33XX_BCH
792 bool "Enables SPL-NAND driver which supports ELM based"
Tom Rini0a83cc22022-06-10 23:03:09 -0400793 depends on SPL_NAND_SUPPORT && NAND_OMAP_GPMC && !OMAP34XX
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200794 default y
Alexander Dahl77374532024-03-20 10:02:11 +0100795 help
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200796 Hardware ECC correction. This is useful for platforms which have ELM
797 hardware engine and use NAND boot mode.
798 Some legacy platforms like OMAP3xx do not have in-built ELM h/w engine,
799 so those platforms should use CONFIG_SPL_NAND_SIMPLE for enabling
Alexander Dahl77374532024-03-20 10:02:11 +0100800 SPL-NAND driver with software ECC correction support.
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200801
802config SPL_NAND_DENALI
803 bool "Support Denali NAND controller for SPL"
Tom Rini0a83cc22022-06-10 23:03:09 -0400804 depends on SPL_NAND_SUPPORT
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200805 help
806 This is a small implementation of the Denali NAND controller
807 for use on SPL.
808
Masahiro Yamada64648cb2020-04-17 16:51:42 +0900809config NAND_DENALI_SPARE_AREA_SKIP_BYTES
810 int "Number of bytes skipped in OOB area"
811 depends on SPL_NAND_DENALI
812 range 0 63
813 help
814 This option specifies the number of bytes to skip from the beginning
815 of OOB area before last ECC sector data starts. This is potentially
816 used to preserve the bad block marker in the OOB area.
817
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200818config SPL_NAND_SIMPLE
819 bool "Use simple SPL NAND driver"
Tom Rini0a83cc22022-06-10 23:03:09 -0400820 depends on !SPL_NAND_AM33XX_BCH && SPL_NAND_SUPPORT
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200821 help
822 Support for NAND boot using simple NAND drivers that
823 expose the cmd_ctrl() interface.
Tom Rini4251f7d2022-11-12 17:36:44 -0500824
825config SYS_NAND_HW_ECC_OOBFIRST
826 bool "In SPL, read the OOB first and then the data from NAND"
827 depends on SPL_NAND_SIMPLE
828
Alexander Dahl77374532024-03-20 10:02:11 +0100829endif # if SPL
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200830
Alexander Dahl77374532024-03-20 10:02:11 +0100831endif # if MTD_RAW_NAND