blob: 5b35da45f5846d70b7d4831fe7c226c22a9bca51 [file] [log] [blame]
Miquel Raynal1f1ae152018-08-16 17:30:07 +02001
Miquel Raynald0935362019-10-03 19:50:03 +02002menuconfig MTD_RAW_NAND
Miquel Raynal8115c452018-08-16 17:30:08 +02003 bool "Raw NAND Device Support"
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
52 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.
58
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
Álvaro Fernández Rojasd9f9bfc2019-08-28 19:12:15 +0200123config NAND_BRCMNAND_6368
124 bool "Support Broadcom NAND controller on bcm6368"
125 depends on NAND_BRCMNAND && ARCH_BMIPS
126 help
127 Enable support for broadcom nand driver on bcm6368.
128
Philippe Reynese175c322022-02-11 19:18:36 +0100129config NAND_BRCMNAND_6753
130 bool "Support Broadcom NAND controller on bcm6753"
William Zhang38921822022-08-22 11:49:08 -0700131 depends on NAND_BRCMNAND && BCM6855
Philippe Reynese175c322022-02-11 19:18:36 +0100132 help
133 Enable support for broadcom nand driver on bcm6753.
134
Philippe Reynes74ead742020-01-07 20:14:13 +0100135config NAND_BRCMNAND_68360
136 bool "Support Broadcom NAND controller on bcm68360"
William Zhangdf0b5bb2022-08-22 11:31:43 -0700137 depends on NAND_BRCMNAND && BCM6856
Philippe Reynes74ead742020-01-07 20:14:13 +0100138 help
139 Enable support for broadcom nand driver on bcm68360.
140
Philippe Reynes5aa6cfb2019-03-15 15:14:36 +0100141config NAND_BRCMNAND_6838
142 bool "Support Broadcom NAND controller on bcm6838"
143 depends on NAND_BRCMNAND && ARCH_BMIPS && SOC_BMIPS_BCM6838
144 help
145 Enable support for broadcom nand driver on bcm6838.
146
147config NAND_BRCMNAND_6858
148 bool "Support Broadcom NAND controller on bcm6858"
William Zhang6b45fa62022-08-22 11:39:45 -0700149 depends on NAND_BRCMNAND && BCM6858
Philippe Reynes5aa6cfb2019-03-15 15:14:36 +0100150 help
151 Enable support for broadcom nand driver on bcm6858.
152
153config NAND_BRCMNAND_63158
154 bool "Support Broadcom NAND controller on bcm63158"
William Zhang35a3ec1b2022-08-22 11:19:46 -0700155 depends on NAND_BRCMNAND && BCM63158
Philippe Reynes5aa6cfb2019-03-15 15:14:36 +0100156 help
157 Enable support for broadcom nand driver on bcm63158.
158
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200159config NAND_DAVINCI
160 bool "Support TI Davinci NAND controller"
Tom Rini98372452021-12-12 22:12:36 -0500161 select SYS_NAND_SELF_INIT if TARGET_DA850EVM
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200162 help
163 Enable this driver for NAND flash controllers available in TI Davinci
164 and Keystone2 platforms
165
Tom Rinid1286e12022-11-12 17:36:45 -0500166choice
167 prompt "Type of ECC used on NAND"
168 default SYS_NAND_4BIT_HW_ECC_OOBFIRST
169 depends on NAND_DAVINCI
170
171config SYS_NAND_HW_ECC
172 bool "Use 1-bit HW ECC"
173
Tom Rini7f750f82022-10-28 20:27:11 -0400174config SYS_NAND_4BIT_HW_ECC_OOBFIRST
175 bool "Use 4-bit HW ECC with OOB at the front"
Tom Rinid1286e12022-11-12 17:36:45 -0500176
177config SYS_NAND_SOFT_ECC
178 bool "Use software ECC"
179
180endchoice
Tom Rini7f750f82022-10-28 20:27:11 -0400181
Tom Rini33adefd2022-11-12 17:36:49 -0500182choice
183 prompt "NAND page size"
184 depends on NAND_DAVINCI
185 default SYS_NAND_PAGE_2K
186
187config SYS_NAND_PAGE_2K
188 bool "Page size is 2K"
189
190config SYS_NAND_PAGE_4K
191 bool "Page size is 4K"
192
193endchoice
194
Tom Rinidada0e32021-09-12 20:32:24 -0400195config KEYSTONE_RBL_NAND
196 depends on ARCH_KEYSTONE
197 def_bool y
198
Tom Rinifae1dab2021-09-22 14:50:29 -0400199config SPL_NAND_LOAD
200 def_bool y
201 depends on NAND_DAVINCI && ARCH_DAVINCI && SPL_NAND_SUPPORT
202
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200203config NAND_DENALI
204 bool
205 select SYS_NAND_SELF_INIT
206 imply CMD_NAND
207
208config NAND_DENALI_DT
209 bool "Support Denali NAND controller as a DT device"
210 select NAND_DENALI
Lokanathan, Raaj791edf72022-12-11 23:37:42 +0800211 select SPL_SYS_NAND_SELF_INIT
Masahiro Yamada8fc53822020-01-30 22:07:59 +0900212 depends on OF_CONTROL && DM_MTD
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200213 help
214 Enable the driver for NAND flash on platforms using a Denali NAND
215 controller as a DT device.
216
Tom Rinia73788c2021-09-22 14:50:37 -0400217config NAND_FSL_ELBC
218 bool "Support Freescale Enhanced Local Bus Controller FCM NAND driver"
Tom Rini98372452021-12-12 22:12:36 -0500219 select TPL_SYS_NAND_SELF_INIT if TPL_NAND_SUPPORT
220 select SPL_SYS_NAND_SELF_INIT
221 select SYS_NAND_SELF_INIT
Tom Rinia73788c2021-09-22 14:50:37 -0400222 depends on FSL_ELBC
223 help
224 Enable the Freescale Enhanced Local Bus Controller FCM NAND driver.
225
Pali Rohárbb834db2022-04-04 18:17:19 +0200226config NAND_FSL_ELBC_DT
227 bool "Support Freescale Enhanced Local Bus Controller FCM NAND driver (DT mode)"
228 depends on NAND_FSL_ELBC
229
Tom Rinia73788c2021-09-22 14:50:37 -0400230config NAND_FSL_IFC
231 bool "Support Freescale Integrated Flash Controller NAND driver"
Tom Rini98372452021-12-12 22:12:36 -0500232 select TPL_SYS_NAND_SELF_INIT if TPL_NAND_SUPPORT
Tom Rini1a9f23d2022-05-26 14:31:57 -0400233 select TPL_NAND_INIT if TPL && !TPL_FRAMEWORK
Tom Rini98372452021-12-12 22:12:36 -0500234 select SPL_SYS_NAND_SELF_INIT
235 select SYS_NAND_SELF_INIT
Tom Rini05b419e2021-12-11 14:55:49 -0500236 select FSL_IFC
Tom Rinia73788c2021-09-22 14:50:37 -0400237 help
238 Enable the Freescale Integrated Flash Controller NAND driver.
239
Tom Rinib91baf62022-11-19 18:45:29 -0500240config NAND_KIRKWOOD
241 bool "Support for Kirkwood NAND controller"
242 depends on ARCH_KIRKWOOD
243 default y
244
245config NAND_ECC_BCH
246 bool
247
248config NAND_KMETER1
249 bool "Support KMETER1 NAND controller"
250 depends on VENDOR_KM
251 select NAND_ECC_BCH
252
Tom Rini08204272021-09-22 14:50:28 -0400253config NAND_LPC32XX_MLC
254 bool "Support LPC32XX_MLC controller"
Tom Rini98372452021-12-12 22:12:36 -0500255 select SYS_NAND_SELF_INIT
Tom Rini08204272021-09-22 14:50:28 -0400256 help
257 Enable the LPC32XX MLC NAND controller.
258
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200259config NAND_LPC32XX_SLC
260 bool "Support LPC32XX_SLC controller"
261 help
262 Enable the LPC32XX SLC NAND controller.
263
264config NAND_OMAP_GPMC
265 bool "Support OMAP GPMC NAND controller"
Roger Quadros0bde4972022-10-11 14:50:00 +0300266 depends on ARCH_OMAP2PLUS || ARCH_KEYSTONE || ARCH_K3
Roger Quadros80cf6372022-12-20 12:21:59 +0200267 select SYS_NAND_SELF_INIT if ARCH_K3
Roger Quadros685c4282022-12-20 12:22:00 +0200268 select SPL_NAND_INIT if ARCH_K3
269 select SPL_SYS_NAND_SELF_INIT if ARCH_K3
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200270 help
271 Enables omap_gpmc.c driver for OMAPx and AMxxxx platforms.
272 GPMC controller is used for parallel NAND flash devices, and can
273 do ECC calculation (not ECC error detection) for HAM1, BCH4, BCH8
274 and BCH16 ECC algorithms.
275
Tom Rinif6d26d82021-09-22 14:50:39 -0400276if NAND_OMAP_GPMC
277
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200278config NAND_OMAP_GPMC_PREFETCH
279 bool "Enable GPMC Prefetch"
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200280 default y
281 help
282 On OMAP platforms that use the GPMC controller
283 (CONFIG_NAND_OMAP_GPMC_PREFETCH), this options enables the code that
284 uses the prefetch mode to speed up read operations.
285
286config NAND_OMAP_ELM
287 bool "Enable ELM driver for OMAPxx and AMxx platforms."
Tom Rinif6d26d82021-09-22 14:50:39 -0400288 depends on !OMAP34XX
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200289 help
290 ELM controller is used for ECC error detection (not ECC calculation)
291 of BCH4, BCH8 and BCH16 ECC algorithms.
292 Some legacy platforms like OMAP3xx do not have in-built ELM h/w engine,
293 thus such SoC platforms need to depend on software library for ECC error
294 detection. However ECC calculation on such plaforms would still be
295 done by GPMC controller.
296
Tom Rinif6d26d82021-09-22 14:50:39 -0400297choice
298 prompt "ECC scheme"
299 default NAND_OMAP_ECCSCHEME_BCH8_CODE_HW
300 help
301 On OMAP platforms, this CONFIG specifies NAND ECC scheme.
302 It can take following values:
303 OMAP_ECC_HAM1_CODE_SW
304 1-bit Hamming code using software lib.
305 (for legacy devices only)
306 OMAP_ECC_HAM1_CODE_HW
307 1-bit Hamming code using GPMC hardware.
308 (for legacy devices only)
309 OMAP_ECC_BCH4_CODE_HW_DETECTION_SW
310 4-bit BCH code (unsupported)
311 OMAP_ECC_BCH4_CODE_HW
312 4-bit BCH code (unsupported)
313 OMAP_ECC_BCH8_CODE_HW_DETECTION_SW
314 8-bit BCH code with
315 - ecc calculation using GPMC hardware engine,
316 - error detection using software library.
317 - requires CONFIG_BCH to enable software BCH library
318 (For legacy device which do not have ELM h/w engine)
319 OMAP_ECC_BCH8_CODE_HW
320 8-bit BCH code with
321 - ecc calculation using GPMC hardware engine,
322 - error detection using ELM hardware engine.
323 OMAP_ECC_BCH16_CODE_HW
324 16-bit BCH code with
325 - ecc calculation using GPMC hardware engine,
326 - error detection using ELM hardware engine.
327
328 How to select ECC scheme on OMAP and AMxx platforms ?
329 -----------------------------------------------------
330 Though higher ECC schemes have more capability to detect and correct
331 bit-flips, but still selection of ECC scheme is dependent on following
332 - hardware engines present in SoC.
333 Some legacy OMAP SoC do not have ELM h/w engine thus such
334 SoC cannot support BCHx_HW ECC schemes.
335 - size of OOB/Spare region
336 With higher ECC schemes, more OOB/Spare area is required to
337 store ECC. So choice of ECC scheme is limited by NAND oobsize.
338
339 In general following expression can help:
340 NAND_OOBSIZE >= 2 + (NAND_PAGESIZE / 512) * ECC_BYTES
341 where
342 NAND_OOBSIZE = number of bytes available in
343 OOB/spare area per NAND page.
344 NAND_PAGESIZE = bytes in main-area of NAND page.
345 ECC_BYTES = number of ECC bytes generated to
346 protect 512 bytes of data, which is:
347 3 for HAM1_xx ecc schemes
348 7 for BCH4_xx ecc schemes
349 14 for BCH8_xx ecc schemes
350 26 for BCH16_xx ecc schemes
351
352 example to check for BCH16 on 2K page NAND
353 NAND_PAGESIZE = 2048
354 NAND_OOBSIZE = 64
355 2 + (2048 / 512) * 26 = 106 > NAND_OOBSIZE
356 Thus BCH16 cannot be supported on 2K page NAND.
357
358 However, for 4K pagesize NAND
359 NAND_PAGESIZE = 4096
360 NAND_OOBSIZE = 224
361 ECC_BYTES = 26
362 2 + (4096 / 512) * 26 = 210 < NAND_OOBSIZE
363 Thus BCH16 can be supported on 4K page NAND.
364
365config NAND_OMAP_ECCSCHEME_HAM1_CODE_SW
366 bool "1-bit Hamming code using software lib"
367
368config NAND_OMAP_ECCSCHEME_HAM1_CODE_HW
369 bool "1-bit Hamming code using GPMC hardware"
370
371config NAND_OMAP_ECCSCHEME_BCH8_CODE_HW_DETECTION_SW
372 bool "8-bit BCH code with HW calculation SW error detection"
373
374config NAND_OMAP_ECCSCHEME_BCH8_CODE_HW
375 bool "8-bit BCH code with HW calculation and error detection"
376
377config NAND_OMAP_ECCSCHEME_BCH16_CODE_HW
378 bool "16-bit BCH code with HW calculation and error detection"
379
380endchoice
381
382config NAND_OMAP_ECCSCHEME
383 int
384 default 1 if NAND_OMAP_ECCSCHEME_HAM1_CODE_SW
385 default 2 if NAND_OMAP_ECCSCHEME_HAM1_CODE_HW
386 default 5 if NAND_OMAP_ECCSCHEME_BCH8_CODE_HW_DETECTION_SW
387 default 6 if NAND_OMAP_ECCSCHEME_BCH8_CODE_HW
388 default 7 if NAND_OMAP_ECCSCHEME_BCH16_CODE_HW
389 help
390 This must be kept in sync with the enum in
391 include/linux/mtd/omap_gpmc.h
392
393endif
394
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200395config NAND_VF610_NFC
396 bool "Support for Freescale NFC for VF610"
397 select SYS_NAND_SELF_INIT
Stefan Agnerbd186142018-12-06 14:57:09 +0100398 select SYS_NAND_DRIVER_ECC_LAYOUT
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200399 imply CMD_NAND
400 help
401 Enables support for NAND Flash Controller on some Freescale
402 processors like the VF610, MCF54418 or Kinetis K70.
403 The driver supports a maximum 2k page size. The driver
404 currently does not support hardware ECC.
405
Lukasz Majewskif006cb32018-12-03 10:24:50 +0100406if NAND_VF610_NFC
407
408config NAND_VF610_NFC_DT
409 bool "Support Vybrid's vf610 NAND controller as a DT device"
Miquel Raynala903be42019-10-03 19:50:04 +0200410 depends on OF_CONTROL && DM_MTD
Lukasz Majewskif006cb32018-12-03 10:24:50 +0100411 help
412 Enable the driver for Vybrid's vf610 NAND flash on platforms
413 using device tree.
414
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200415choice
416 prompt "Hardware ECC strength"
417 depends on NAND_VF610_NFC
418 default SYS_NAND_VF610_NFC_45_ECC_BYTES
419 help
420 Select the ECC strength used in the hardware BCH ECC block.
421
422config SYS_NAND_VF610_NFC_45_ECC_BYTES
423 bool "24-error correction (45 ECC bytes)"
424
425config SYS_NAND_VF610_NFC_60_ECC_BYTES
426 bool "32-error correction (60 ECC bytes)"
427
428endchoice
429
Lukasz Majewskif006cb32018-12-03 10:24:50 +0100430endif
431
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200432config NAND_PXA3XX
433 bool "Support for NAND on PXA3xx and Armada 370/XP/38x"
434 select SYS_NAND_SELF_INIT
Shmuel Hazan759349e2020-10-29 08:52:18 +0200435 select DM_MTD
Shmuel Hazan58983222020-10-29 08:52:20 +0200436 select REGMAP
437 select SYSCON
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200438 imply CMD_NAND
439 help
440 This enables the driver for the NAND flash device found on
441 PXA3xx processors (NFCv1) and also on Armada 370/XP (NFCv2).
442
443config NAND_SUNXI
444 bool "Support for NAND on Allwinner SoCs"
445 default ARCH_SUNXI
446 depends on MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUN8I
447 select SYS_NAND_SELF_INIT
448 select SYS_NAND_U_BOOT_LOCATIONS
449 select SPL_NAND_SUPPORT
Tom Rini98372452021-12-12 22:12:36 -0500450 select SPL_SYS_NAND_SELF_INIT
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200451 imply CMD_NAND
452 ---help---
453 Enable support for NAND. This option enables the standard and
454 SPL drivers.
455 The SPL driver only supports reading from the NAND using DMA
456 transfers.
457
458if NAND_SUNXI
459
460config NAND_SUNXI_SPL_ECC_STRENGTH
461 int "Allwinner NAND SPL ECC Strength"
462 default 64
463
464config NAND_SUNXI_SPL_ECC_SIZE
465 int "Allwinner NAND SPL ECC Step Size"
466 default 1024
467
468config NAND_SUNXI_SPL_USABLE_PAGE_SIZE
469 int "Allwinner NAND SPL Usable Page Size"
470 default 1024
471
472endif
473
474config NAND_ARASAN
475 bool "Configure Arasan Nand"
476 select SYS_NAND_SELF_INIT
Michal Simekc5587832020-08-19 09:59:52 +0200477 depends on DM_MTD
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200478 imply CMD_NAND
479 help
480 This enables Nand driver support for Arasan nand flash
481 controller. This uses the hardware ECC for read and
482 write operations.
483
484config NAND_MXC
485 bool "MXC NAND support"
486 depends on CPU_ARM926EJS || CPU_ARM1136 || MX5
487 imply CMD_NAND
488 help
489 This enables the NAND driver for the NAND flash controller on the
Haolin Lie8df55b2021-07-18 10:13:39 +0800490 i.MX27 / i.MX31 / i.MX5 processors.
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200491
Tom Rini1ba2a002022-11-12 17:36:50 -0500492config SYS_NAND_SIZE
493 int "Size of NAND in kilobytes"
494 depends on NAND_MXC && SPL_NAND_SUPPORT
495 default 268435456
496
Tom Rini17e67002022-12-02 16:42:37 -0500497config MXC_NAND_HWECC
498 bool "Hardware ECC support in MXC NAND"
499 depends on NAND_MXC
500
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200501config NAND_MXS
502 bool "MXS NAND support"
Peng Fan128abf42020-05-04 22:09:00 +0800503 depends on MX23 || MX28 || MX6 || MX7 || IMX8 || IMX8M
Tom Rini98372452021-12-12 22:12:36 -0500504 select SPL_SYS_NAND_SELF_INIT
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200505 select SYS_NAND_SELF_INIT
506 imply CMD_NAND
507 select APBH_DMA
Peng Fan128abf42020-05-04 22:09:00 +0800508 select APBH_DMA_BURST if ARCH_MX6 || ARCH_MX7 || ARCH_IMX8 || ARCH_IMX8M
509 select APBH_DMA_BURST8 if ARCH_MX6 || ARCH_MX7 || ARCH_IMX8 || ARCH_IMX8M
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200510 help
511 This enables NAND driver for the NAND flash controller on the
512 MXS processors.
513
514if NAND_MXS
515
516config NAND_MXS_DT
517 bool "Support MXS NAND controller as a DT device"
Miquel Raynala903be42019-10-03 19:50:04 +0200518 depends on OF_CONTROL && DM_MTD
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200519 help
520 Enable the driver for MXS NAND flash on platforms using
521 device tree.
522
523config NAND_MXS_USE_MINIMUM_ECC
524 bool "Use minimum ECC strength supported by the controller"
525 default false
526
527endif
528
Zhengxun Li01551712021-09-14 13:43:51 +0800529config NAND_MXIC
530 bool "Macronix raw NAND controller"
531 select SYS_NAND_SELF_INIT
532 help
533 This selects the Macronix raw NAND controller driver.
534
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200535config NAND_ZYNQ
536 bool "Support for Zynq Nand controller"
Tom Rini98372452021-12-12 22:12:36 -0500537 select SPL_SYS_NAND_SELF_INIT
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200538 select SYS_NAND_SELF_INIT
Ashok Reddy Somabb8448a2019-12-27 04:47:12 -0700539 select DM_MTD
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200540 imply CMD_NAND
541 help
542 This enables Nand driver support for Nand flash controller
543 found on Zynq SoC.
544
545config NAND_ZYNQ_USE_BOOTLOADER1_TIMINGS
546 bool "Enable use of 1st stage bootloader timing for NAND"
547 depends on NAND_ZYNQ
548 help
549 This flag prevent U-boot reconfigure NAND flash controller and reuse
550 the NAND timing from 1st stage bootloader.
551
Suneel Garapati9de7d2b2020-08-26 14:37:22 +0200552config NAND_OCTEONTX
553 bool "Support for OcteonTX NAND controller"
554 select SYS_NAND_SELF_INIT
555 imply CMD_NAND
556 help
557 This enables Nand flash controller hardware found on the OcteonTX
558 processors.
559
560config NAND_OCTEONTX_HW_ECC
561 bool "Support Hardware ECC for OcteonTX NAND controller"
562 depends on NAND_OCTEONTX
563 default y
564 help
565 This enables Hardware BCH engine found on the OcteonTX processors to
566 support ECC for NAND flash controller.
567
Christophe Kerelloda141682019-04-05 11:41:50 +0200568config NAND_STM32_FMC2
569 bool "Support for NAND controller on STM32MP SoCs"
570 depends on ARCH_STM32MP
571 select SYS_NAND_SELF_INIT
572 imply CMD_NAND
573 help
574 Enables support for NAND Flash chips on SoCs containing the FMC2
575 NAND controller. This controller is found on STM32MP SoCs.
576 The controller supports a maximum 8k page size and supports
577 a maximum 8-bit correction error per sector of 512 bytes.
578
Kate Liu41ccd2e2020-12-11 13:46:12 -0800579config CORTINA_NAND
580 bool "Support for NAND controller on Cortina-Access SoCs"
581 depends on CORTINA_PLATFORM
582 select SYS_NAND_SELF_INIT
583 select DM_MTD
584 imply CMD_NAND
585 help
586 Enables support for NAND Flash chips on Coartina-Access SoCs platform
587 This controller is found on Presidio/Venus SoCs.
588 The controller supports a maximum 8k page size and supports
589 a maximum 40-bit error correction per sector of 1024 bytes.
590
Yifeng Zhao9e9021e2021-06-07 16:40:29 +0800591config ROCKCHIP_NAND
592 bool "Support for NAND controller on Rockchip SoCs"
593 depends on ARCH_ROCKCHIP
594 select SYS_NAND_SELF_INIT
595 select DM_MTD
596 imply CMD_NAND
597 help
598 Enables support for NAND Flash chips on Rockchip SoCs platform.
599 This controller is found on Rockchip SoCs.
600 There are four different versions of NAND FLASH Controllers,
601 including:
602 NFC v600: RK2928, RK3066, RK3188
603 NFC v622: RK3036, RK3128
604 NFC v800: RK3308, RV1108
605 NFC v900: PX30, RK3326
606
Tom Rini8f37ac42021-12-12 22:12:35 -0500607config TEGRA_NAND
608 bool "Support for NAND controller on Tegra SoCs"
609 depends on ARCH_TEGRA
610 select SYS_NAND_SELF_INIT
611 imply CMD_NAND
612 help
613 Enables support for NAND Flash chips on Tegra SoCs platforms.
614
developer10a61df2022-05-20 11:23:47 +0800615config NAND_MT7621
616 bool "Support for MediaTek MT7621 NAND flash controller"
617 depends on SOC_MT7621
618 select SYS_NAND_SELF_INIT
619 select SPL_SYS_NAND_SELF_INIT
620 imply CMD_NAND
621 help
622 This enables NAND driver for the NAND flash controller on MediaTek
623 MT7621 platform.
624 The controller supports 4~12 bits correction per 512 bytes with a
625 maximum 4KB page size.
626
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200627comment "Generic NAND options"
628
629config SYS_NAND_BLOCK_SIZE
630 hex "NAND chip eraseblock size"
Tom Rinifae1dab2021-09-22 14:50:29 -0400631 depends on ARCH_SUNXI || SPL_NAND_SUPPORT || TPL_NAND_SUPPORT
developer10a61df2022-05-20 11:23:47 +0800632 depends on !NAND_MXS && !NAND_DENALI_DT && !NAND_LPC32XX_MLC && \
633 !NAND_FSL_IFC && !NAND_MT7621
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200634 help
635 Number of data bytes in one eraseblock for the NAND chip on the
636 board. This is the multiple of NAND_PAGE_SIZE and the number of
637 pages.
638
Tom Rinifdae0072021-09-22 14:50:34 -0400639config SYS_NAND_ONFI_DETECTION
640 bool "Enable detection of ONFI compliant devices during probe"
641 help
642 Enables detection of ONFI compliant devices during probe.
643 And fetching device parameters flashed on device, by parsing
644 ONFI parameter page.
645
Tom Rini2510a812021-09-22 14:50:30 -0400646config SYS_NAND_PAGE_COUNT
647 hex "NAND chip page count"
648 depends on SPL_NAND_SUPPORT && (NAND_ATMEL || NAND_MXC || \
Roger Quadrosd93ea962022-12-20 12:22:01 +0200649 SPL_NAND_AM33XX_BCH || SPL_NAND_LOAD || SPL_NAND_SIMPLE || \
650 NAND_OMAP_GPMC)
Tom Rini2510a812021-09-22 14:50:30 -0400651 help
652 Number of pages in the NAND chip.
653
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200654config SYS_NAND_PAGE_SIZE
655 hex "NAND chip page size"
Tom Rinifae1dab2021-09-22 14:50:29 -0400656 depends on ARCH_SUNXI || NAND_OMAP_GPMC || NAND_LPC32XX_SLC || \
657 SPL_NAND_SIMPLE || (NAND_MXC && SPL_NAND_SUPPORT) || \
658 (NAND_ATMEL && SPL_NAND_SUPPORT) || SPL_GENERATE_ATMEL_PMECC_HEADER
developer10a61df2022-05-20 11:23:47 +0800659 depends on !NAND_MXS && !NAND_DENALI_DT && !NAND_LPC32XX_MLC && !NAND_MT7621
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200660 help
661 Number of data bytes in one page for the NAND chip on the
662 board, not including the OOB area.
663
664config SYS_NAND_OOBSIZE
665 hex "NAND chip OOB size"
Tom Rinifae1dab2021-09-22 14:50:29 -0400666 depends on ARCH_SUNXI || NAND_OMAP_GPMC || NAND_LPC32XX_SLC || \
667 SPL_NAND_SIMPLE || (NAND_MXC && SPL_NAND_SUPPORT) || \
668 (NAND_ATMEL && SPL_NAND_SUPPORT) || SPL_GENERATE_ATMEL_PMECC_HEADER
Tom Rinid24700f2021-10-30 23:03:56 -0400669 depends on !NAND_MXS && !NAND_DENALI_DT && !NAND_LPC32XX_MLC
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200670 help
671 Number of bytes in the Out-Of-Band area for the NAND chip on
672 the board.
673
674# Enhance depends when converting drivers to Kconfig which use this config
675# option (mxc_nand, ndfc, omap_gpmc).
676config SYS_NAND_BUSWIDTH_16BIT
677 bool "Use 16-bit NAND interface"
678 depends on NAND_VF610_NFC || NAND_OMAP_GPMC || NAND_MXC || ARCH_DAVINCI
679 help
680 Indicates that NAND device has 16-bit wide data-bus. In absence of this
681 config, bus-width of NAND device is assumed to be either 8-bit and later
682 determined by reading ONFI params.
683 Above config is useful when NAND device's bus-width information cannot
684 be determined from on-chip ONFI params, like in following scenarios:
685 - SPL boot does not support reading of ONFI parameters. This is done to
686 keep SPL code foot-print small.
687 - In current U-Boot flow using nand_init(), driver initialization
688 happens in board_nand_init() which is called before any device probe
689 (nand_scan_ident + nand_scan_tail), thus device's ONFI parameters are
690 not available while configuring controller. So a static CONFIG_NAND_xx
691 is needed to know the device's bus-width in advance.
692
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200693if SPL
694
Tom Rini8e6d9c72021-09-22 14:50:33 -0400695config SYS_NAND_5_ADDR_CYCLE
696 bool "Wait 5 address cycles during NAND commands"
697 depends on SPL_NAND_AM33XX_BCH || SPL_NAND_SIMPLE || \
698 (SPL_NAND_SUPPORT && NAND_ATMEL)
699 default y
700 help
701 Some controllers require waiting for 5 address cycles when issuing
702 some commands, on NAND chips larger than 128MiB.
703
Tom Rinia2fbd4a2021-09-22 14:50:32 -0400704choice
Tom Rinifdae0072021-09-22 14:50:34 -0400705 prompt "NAND bad block marker/indicator position in the OOB"
Tom Rinia2fbd4a2021-09-22 14:50:32 -0400706 depends on SPL_NAND_AM33XX_BCH || SPL_NAND_DENALI || SPL_NAND_SIMPLE || \
707 SPL_NAND_SUPPORT && (NAND_ATMEL || NAND_MXC)
708 default HAS_NAND_LARGE_BADBLOCK_POS
709 help
710 In the OOB, which position contains the badblock information.
711
712config HAS_NAND_LARGE_BADBLOCK_POS
713 bool "Set the bad block marker/indicator to the 'large' position"
714
715config HAS_NAND_SMALL_BADBLOCK_POS
716 bool "Set the bad block marker/indicator to the 'small' position"
717
718endchoice
719
720config SYS_NAND_BAD_BLOCK_POS
721 int
722 default 0 if HAS_NAND_LARGE_BADBLOCK_POS
723 default 5 if HAS_NAND_SMALL_BADBLOCK_POS
724
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200725config SYS_NAND_U_BOOT_LOCATIONS
726 bool "Define U-boot binaries locations in NAND"
727 help
728 Enable CONFIG_SYS_NAND_U_BOOT_OFFS though Kconfig.
729 This option should not be enabled when compiling U-boot for boards
730 defining CONFIG_SYS_NAND_U_BOOT_OFFS in their include/configs/<board>.h
731 file.
732
733config SYS_NAND_U_BOOT_OFFS
734 hex "Location in NAND to read U-Boot from"
735 default 0x800000 if NAND_SUNXI
736 depends on SYS_NAND_U_BOOT_LOCATIONS
737 help
738 Set the offset from the start of the nand where u-boot should be
739 loaded from.
740
741config SYS_NAND_U_BOOT_OFFS_REDUND
742 hex "Location in NAND to read U-Boot from"
743 default SYS_NAND_U_BOOT_OFFS
744 depends on SYS_NAND_U_BOOT_LOCATIONS
745 help
746 Set the offset from the start of the nand where the redundant u-boot
747 should be loaded from.
748
749config SPL_NAND_AM33XX_BCH
750 bool "Enables SPL-NAND driver which supports ELM based"
Tom Rini0a83cc22022-06-10 23:03:09 -0400751 depends on SPL_NAND_SUPPORT && NAND_OMAP_GPMC && !OMAP34XX
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200752 default y
753 help
754 Hardware ECC correction. This is useful for platforms which have ELM
755 hardware engine and use NAND boot mode.
756 Some legacy platforms like OMAP3xx do not have in-built ELM h/w engine,
757 so those platforms should use CONFIG_SPL_NAND_SIMPLE for enabling
758 SPL-NAND driver with software ECC correction support.
759
760config SPL_NAND_DENALI
761 bool "Support Denali NAND controller for SPL"
Tom Rini0a83cc22022-06-10 23:03:09 -0400762 depends on SPL_NAND_SUPPORT
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200763 help
764 This is a small implementation of the Denali NAND controller
765 for use on SPL.
766
Masahiro Yamada64648cb2020-04-17 16:51:42 +0900767config NAND_DENALI_SPARE_AREA_SKIP_BYTES
768 int "Number of bytes skipped in OOB area"
769 depends on SPL_NAND_DENALI
770 range 0 63
771 help
772 This option specifies the number of bytes to skip from the beginning
773 of OOB area before last ECC sector data starts. This is potentially
774 used to preserve the bad block marker in the OOB area.
775
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200776config SPL_NAND_SIMPLE
777 bool "Use simple SPL NAND driver"
Tom Rini0a83cc22022-06-10 23:03:09 -0400778 depends on !SPL_NAND_AM33XX_BCH && SPL_NAND_SUPPORT
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200779 help
780 Support for NAND boot using simple NAND drivers that
781 expose the cmd_ctrl() interface.
Tom Rini4251f7d2022-11-12 17:36:44 -0500782
783config SYS_NAND_HW_ECC_OOBFIRST
784 bool "In SPL, read the OOB first and then the data from NAND"
785 depends on SPL_NAND_SIMPLE
786
Miquel Raynal1f1ae152018-08-16 17:30:07 +0200787endif
788
789endif # if NAND