ffc6cc98aa024b613bb73b4fbb7bf493ee5e806c
[oweals/u-boot.git] / drivers / mtd / nand / raw / Kconfig
1
2 menuconfig NAND
3         bool "Raw NAND Device Support"
4 if NAND
5
6 config SYS_NAND_SELF_INIT
7         bool
8         help
9           This option, if enabled, provides more flexible and linux-like
10           NAND initialization process.
11
12 config SYS_NAND_DRIVER_ECC_LAYOUT
13         bool
14         help
15           Omit standard ECC layouts to safe space. Select this if your driver
16           is known to provide its own ECC layout.
17
18 config NAND_ATMEL
19         bool "Support Atmel NAND controller"
20         imply SYS_NAND_USE_FLASH_BBT
21         help
22           Enable this driver for NAND flash platforms using an Atmel NAND
23           controller.
24
25 config NAND_DAVINCI
26         bool "Support TI Davinci NAND controller"
27         help
28           Enable this driver for NAND flash controllers available in TI Davinci
29           and Keystone2 platforms
30
31 config NAND_DENALI
32         bool
33         select SYS_NAND_SELF_INIT
34         imply CMD_NAND
35
36 config NAND_DENALI_DT
37         bool "Support Denali NAND controller as a DT device"
38         select NAND_DENALI
39         depends on OF_CONTROL && DM
40         help
41           Enable the driver for NAND flash on platforms using a Denali NAND
42           controller as a DT device.
43
44 config NAND_DENALI_SPARE_AREA_SKIP_BYTES
45         int "Number of bytes skipped in OOB area"
46         depends on NAND_DENALI
47         range 0 63
48         help
49           This option specifies the number of bytes to skip from the beginning
50           of OOB area before last ECC sector data starts.  This is potentially
51           used to preserve the bad block marker in the OOB area.
52
53 config NAND_LPC32XX_SLC
54         bool "Support LPC32XX_SLC controller"
55         help
56           Enable the LPC32XX SLC NAND controller.
57
58 config NAND_OMAP_GPMC
59         bool "Support OMAP GPMC NAND controller"
60         depends on ARCH_OMAP2PLUS
61         help
62           Enables omap_gpmc.c driver for OMAPx and AMxxxx platforms.
63           GPMC controller is used for parallel NAND flash devices, and can
64           do ECC calculation (not ECC error detection) for HAM1, BCH4, BCH8
65           and BCH16 ECC algorithms.
66
67 config NAND_OMAP_GPMC_PREFETCH
68         bool "Enable GPMC Prefetch"
69         depends on NAND_OMAP_GPMC
70         default y
71         help
72           On OMAP platforms that use the GPMC controller
73           (CONFIG_NAND_OMAP_GPMC_PREFETCH), this options enables the code that
74           uses the prefetch mode to speed up read operations.
75
76 config NAND_OMAP_ELM
77         bool "Enable ELM driver for OMAPxx and AMxx platforms."
78         depends on NAND_OMAP_GPMC && !OMAP34XX
79         help
80           ELM controller is used for ECC error detection (not ECC calculation)
81           of BCH4, BCH8 and BCH16 ECC algorithms.
82           Some legacy platforms like OMAP3xx do not have in-built ELM h/w engine,
83           thus such SoC platforms need to depend on software library for ECC error
84           detection. However ECC calculation on such plaforms would still be
85           done by GPMC controller.
86
87 config NAND_VF610_NFC
88         bool "Support for Freescale NFC for VF610"
89         select SYS_NAND_SELF_INIT
90         select SYS_NAND_DRIVER_ECC_LAYOUT
91         imply CMD_NAND
92         help
93           Enables support for NAND Flash Controller on some Freescale
94           processors like the VF610, MCF54418 or Kinetis K70.
95           The driver supports a maximum 2k page size. The driver
96           currently does not support hardware ECC.
97
98 if NAND_VF610_NFC
99
100 config NAND_VF610_NFC_DT
101         bool "Support Vybrid's vf610 NAND controller as a DT device"
102         depends on OF_CONTROL && MTD
103         help
104           Enable the driver for Vybrid's vf610 NAND flash on platforms
105           using device tree.
106
107 choice
108         prompt "Hardware ECC strength"
109         depends on NAND_VF610_NFC
110         default SYS_NAND_VF610_NFC_45_ECC_BYTES
111         help
112           Select the ECC strength used in the hardware BCH ECC block.
113
114 config SYS_NAND_VF610_NFC_45_ECC_BYTES
115         bool "24-error correction (45 ECC bytes)"
116
117 config SYS_NAND_VF610_NFC_60_ECC_BYTES
118         bool "32-error correction (60 ECC bytes)"
119
120 endchoice
121
122 endif
123
124 config NAND_PXA3XX
125         bool "Support for NAND on PXA3xx and Armada 370/XP/38x"
126         select SYS_NAND_SELF_INIT
127         imply CMD_NAND
128         help
129           This enables the driver for the NAND flash device found on
130           PXA3xx processors (NFCv1) and also on Armada 370/XP (NFCv2).
131
132 config NAND_SUNXI
133         bool "Support for NAND on Allwinner SoCs"
134         default ARCH_SUNXI
135         depends on MACH_SUN4I || MACH_SUN5I || MACH_SUN7I || MACH_SUN8I
136         select SYS_NAND_SELF_INIT
137         select SYS_NAND_U_BOOT_LOCATIONS
138         select SPL_NAND_SUPPORT
139         imply CMD_NAND
140         ---help---
141         Enable support for NAND. This option enables the standard and
142         SPL drivers.
143         The SPL driver only supports reading from the NAND using DMA
144         transfers.
145
146 if NAND_SUNXI
147
148 config NAND_SUNXI_SPL_ECC_STRENGTH
149         int "Allwinner NAND SPL ECC Strength"
150         default 64
151
152 config NAND_SUNXI_SPL_ECC_SIZE
153         int "Allwinner NAND SPL ECC Step Size"
154         default 1024
155
156 config NAND_SUNXI_SPL_USABLE_PAGE_SIZE
157         int "Allwinner NAND SPL Usable Page Size"
158         default 1024
159
160 endif
161
162 config NAND_ARASAN
163         bool "Configure Arasan Nand"
164         select SYS_NAND_SELF_INIT
165         imply CMD_NAND
166         help
167           This enables Nand driver support for Arasan nand flash
168           controller. This uses the hardware ECC for read and
169           write operations.
170
171 config NAND_MXC
172         bool "MXC NAND support"
173         depends on CPU_ARM926EJS || CPU_ARM1136 || MX5
174         imply CMD_NAND
175         help
176           This enables the NAND driver for the NAND flash controller on the
177           i.MX27 / i.MX31 / i.MX5 rocessors.
178
179 config NAND_MXS
180         bool "MXS NAND support"
181         depends on MX23 || MX28 || MX6 || MX7
182         select SYS_NAND_SELF_INIT
183         imply CMD_NAND
184         select APBH_DMA
185         select APBH_DMA_BURST if ARCH_MX6 || ARCH_MX7
186         select APBH_DMA_BURST8 if ARCH_MX6 || ARCH_MX7
187         help
188           This enables NAND driver for the NAND flash controller on the
189           MXS processors.
190
191 if NAND_MXS
192
193 config NAND_MXS_DT
194         bool "Support MXS NAND controller as a DT device"
195         depends on OF_CONTROL && MTD
196         help
197           Enable the driver for MXS NAND flash on platforms using
198           device tree.
199
200 config NAND_MXS_USE_MINIMUM_ECC
201         bool "Use minimum ECC strength supported by the controller"
202         default false
203
204 endif
205
206 config NAND_ZYNQ
207         bool "Support for Zynq Nand controller"
208         select SYS_NAND_SELF_INIT
209         imply CMD_NAND
210         help
211           This enables Nand driver support for Nand flash controller
212           found on Zynq SoC.
213
214 config NAND_ZYNQ_USE_BOOTLOADER1_TIMINGS
215         bool "Enable use of 1st stage bootloader timing for NAND"
216         depends on NAND_ZYNQ
217         help
218           This flag prevent U-boot reconfigure NAND flash controller and reuse
219           the NAND timing from 1st stage bootloader.
220
221 comment "Generic NAND options"
222
223 config SYS_NAND_BLOCK_SIZE
224         hex "NAND chip eraseblock size"
225         depends on ARCH_SUNXI
226         help
227           Number of data bytes in one eraseblock for the NAND chip on the
228           board. This is the multiple of NAND_PAGE_SIZE and the number of
229           pages.
230
231 config SYS_NAND_PAGE_SIZE
232         hex "NAND chip page size"
233         depends on ARCH_SUNXI
234         help
235           Number of data bytes in one page for the NAND chip on the
236           board, not including the OOB area.
237
238 config SYS_NAND_OOBSIZE
239         hex "NAND chip OOB size"
240         depends on ARCH_SUNXI
241         help
242           Number of bytes in the Out-Of-Band area for the NAND chip on
243           the board.
244
245 # Enhance depends when converting drivers to Kconfig which use this config
246 # option (mxc_nand, ndfc, omap_gpmc).
247 config SYS_NAND_BUSWIDTH_16BIT
248         bool "Use 16-bit NAND interface"
249         depends on NAND_VF610_NFC || NAND_OMAP_GPMC || NAND_MXC || ARCH_DAVINCI
250         help
251           Indicates that NAND device has 16-bit wide data-bus. In absence of this
252           config, bus-width of NAND device is assumed to be either 8-bit and later
253           determined by reading ONFI params.
254           Above config is useful when NAND device's bus-width information cannot
255           be determined from on-chip ONFI params, like in following scenarios:
256           - SPL boot does not support reading of ONFI parameters. This is done to
257             keep SPL code foot-print small.
258           - In current U-Boot flow using nand_init(), driver initialization
259             happens in board_nand_init() which is called before any device probe
260             (nand_scan_ident + nand_scan_tail), thus device's ONFI parameters are
261             not available while configuring controller. So a static CONFIG_NAND_xx
262             is needed to know the device's bus-width in advance.
263
264 if SPL
265
266 config SYS_NAND_U_BOOT_LOCATIONS
267         bool "Define U-boot binaries locations in NAND"
268         help
269         Enable CONFIG_SYS_NAND_U_BOOT_OFFS though Kconfig.
270         This option should not be enabled when compiling U-boot for boards
271         defining CONFIG_SYS_NAND_U_BOOT_OFFS in their include/configs/<board>.h
272         file.
273
274 config SYS_NAND_U_BOOT_OFFS
275         hex "Location in NAND to read U-Boot from"
276         default 0x800000 if NAND_SUNXI
277         depends on SYS_NAND_U_BOOT_LOCATIONS
278         help
279         Set the offset from the start of the nand where u-boot should be
280         loaded from.
281
282 config SYS_NAND_U_BOOT_OFFS_REDUND
283         hex "Location in NAND to read U-Boot from"
284         default SYS_NAND_U_BOOT_OFFS
285         depends on SYS_NAND_U_BOOT_LOCATIONS
286         help
287         Set the offset from the start of the nand where the redundant u-boot
288         should be loaded from.
289
290 config SPL_NAND_AM33XX_BCH
291         bool "Enables SPL-NAND driver which supports ELM based"
292         depends on NAND_OMAP_GPMC && !OMAP34XX
293         default y
294         help
295           Hardware ECC correction. This is useful for platforms which have ELM
296           hardware engine and use NAND boot mode.
297           Some legacy platforms like OMAP3xx do not have in-built ELM h/w engine,
298           so those platforms should use CONFIG_SPL_NAND_SIMPLE for enabling
299           SPL-NAND driver with software ECC correction support.
300
301 config SPL_NAND_DENALI
302         bool "Support Denali NAND controller for SPL"
303         help
304           This is a small implementation of the Denali NAND controller
305           for use on SPL.
306
307 config SPL_NAND_SIMPLE
308         bool "Use simple SPL NAND driver"
309         depends on !SPL_NAND_AM33XX_BCH
310         help
311           Support for NAND boot using simple NAND drivers that
312           expose the cmd_ctrl() interface.
313 endif
314
315 endif   # if NAND