Prepare v2023.10
[platform/kernel/u-boot.git] / common / spl / Kconfig
1 config SUPPORT_SPL
2         bool
3
4 config SUPPORT_TPL
5         bool
6
7 config SUPPORT_VPL
8         bool
9
10 config SPL_DFU_NO_RESET
11         bool
12
13 config SPL
14         bool "Enable SPL"
15         depends on SUPPORT_SPL
16         help
17           If you want to build SPL as well as the normal image, say Y.
18
19 menu "SPL configuration options"
20         depends on SPL
21
22 config SPL_FRAMEWORK
23         bool "Support SPL based upon the common SPL framework"
24         default y
25         help
26           Enable the SPL framework under common/spl/.  This framework
27           supports MMC, NAND and YMODEM and other methods loading of U-Boot
28           and the Linux Kernel.  If unsure, say Y.
29
30 config SPL_FRAMEWORK_BOARD_INIT_F
31         bool "Define a generic function board_init_f"
32         depends on SPL_FRAMEWORK
33         help
34           Define a generic function board_init_f that:
35           - initialize the spl (spl_early_init)
36           - initialize the serial (preloader_console_init)
37           Unless you want to provide your own board_init_f, you should say Y.
38
39 config SPL_SIZE_LIMIT
40         hex "Maximum size of SPL image"
41         default 0x11000 if ARCH_MX6 && !MX6_OCRAM_256KB
42         default 0x31000 if ARCH_MX6 && MX6_OCRAM_256KB
43         default 0x30000 if ARCH_MVEBU && ARMADA_32BIT
44         default 0x0
45         help
46           Specifies the maximum length of the U-Boot SPL image.
47           If this value is zero, it is ignored.
48
49 config SPL_SIZE_LIMIT_SUBTRACT_GD
50         bool "SPL image size check: provide space for global data"
51         depends on SPL_SIZE_LIMIT > 0
52         help
53           If enabled, aligned size of global data is reserved in
54           SPL_SIZE_LIMIT check to ensure such an image does not overflow SRAM
55           if SPL_SIZE_LIMIT describes the size of SRAM available for SPL when
56           pre-reloc global data is put into this SRAM, too.
57
58 config SPL_SIZE_LIMIT_SUBTRACT_MALLOC
59         bool "SPL image size check: provide space for malloc() pool before relocation"
60         depends on SPL_SIZE_LIMIT > 0
61         help
62           If enabled, SPL_SYS_MALLOC_F_LEN is reserved in SPL_SIZE_LIMIT check
63           to ensure such an image does not overflow SRAM if SPL_SIZE_LIMIT
64           describes the size of SRAM available for SPL when pre-reloc malloc
65           pool is put into this SRAM, too.
66
67 config SPL_SIZE_LIMIT_PROVIDE_STACK
68         hex "SPL image size check: provide stack space before relocation"
69         depends on SPL_SIZE_LIMIT > 0
70         default 0
71         help
72           If set, this size is reserved in SPL_SIZE_LIMIT check to ensure such
73           an image does not overflow SRAM if SPL_SIZE_LIMIT describes the size
74           of SRAM available for SPL when the stack required before reolcation
75           uses this SRAM, too.
76
77 config SPL_MAX_SIZE
78         hex "Maximum size of the SPL image, excluding BSS"
79         default 0x30000 if ARCH_MX6 && MX6_OCRAM_256KB
80         default 0x1b000 if AM33XX && !TI_SECURE_DEVICE
81         default 0x10000 if ARCH_MX6 && !MX6_OCRAM_256KB
82         default 0x7fa0 if SUNXI_SRAM_ADDRESS = 0x10000
83         default 0x7fa0 if SUNXI_SRAM_ADDRESS = 0x20000 && !MACH_SUN50I_H616
84         default 0xbfa0 if MACH_SUN50I_H616
85         default 0x7000 if RCAR_GEN3
86         default 0x5fa0 if SUNXI_SRAM_ADDRESS = 0x0
87         default 0x10000 if ASPEED_AST2600
88         default 0x27000 if IMX8MM && SPL_TEXT_BASE = 0x7E1000
89         default 0x0
90         help
91           Maximum size of the SPL image (text, data, rodata, and linker lists
92           sections), BSS excluded.  When defined, the linker checks that the
93           actual size does not exceed it.
94
95 config SPL_PAD_TO
96         hex "Offset to which the SPL should be padded before appending the SPL payload"
97         default 0x31000 if ARCH_MX6 && MX6_OCRAM_256KB
98         default 0x11000 if ARCH_MX7 || (ARCH_MX6 && !MX6_OCRAM_256KB)
99         default 0x10000 if ARCH_KEYSTONE
100         default 0x8000 if ARCH_SUNXI && !MACH_SUN50I_H616
101         default 0x0 if ARCH_MTMIPS
102         default TPL_MAX_SIZE if TPL_MAX_SIZE > SPL_MAX_SIZE
103         default SPL_MAX_SIZE
104         help
105           Image offset to which the SPL should be padded before appending the
106           SPL payload. By default, this is defined as CONFIG_SPL_MAX_SIZE, or 0 if
107           CONFIG_SPL_MAX_SIZE is undefined.  CONFIG_SPL_PAD_TO must be either
108           0, meaning to append the SPL payload without any padding, or >=
109           CONFIG_SPL_MAX_SIZE.
110
111 config SPL_HAS_BSS_LINKER_SECTION
112         depends on SPL_FRAMEWORK
113         bool "Use a specific address for the BSS via the linker script"
114         default y if ARCH_SUNXI || ARCH_MX6 || ARCH_OMAP2PLUS || MIPS || RISCV || ARCH_ZYNQMP
115
116 config SPL_BSS_START_ADDR
117         hex "Link address for the BSS within the SPL binary"
118         depends on SPL_HAS_BSS_LINKER_SECTION
119         default 0x88200000 if (ARCH_MX6 && (MX6SX || MX6SL || MX6UL || MX6ULL)) || ARCH_MX7
120         default 0x18200000 if ARCH_MX6 && !(MX6SX || MX6SL || MX6UL || MX6ULL)
121         default 0x80a00000 if ARCH_OMAP2PLUS
122         default 0x81f80000 if ARCH_SUNXI && MACH_SUNIV
123         default 0x4ff80000 if ARCH_SUNXI && !(MACH_SUN9I || MACH_SUNIV)
124         default 0x2ff80000 if ARCH_SUNXI && MACH_SUN9I
125         default 0x1000 if ARCH_ZYNQMP
126
127 choice
128         prompt "Enforce SPL BSS limit"
129         depends on !PPC
130         default SPL_BSS_LIMIT
131         help
132           In some platforms we only want to enforce a limit on the size of the
133           BSS in memory.  On other platforms we need to enforce a limit on the
134           whole of the memory allocation as we're strictly limited to a small
135           typically non-DRAM location.  Finally, other platforms do not enforce
136           a memory limit within SPL.
137
138 config SPL_NO_BSS_LIMIT
139         bool "Do not enforce a build time limit on the size of the BSS"
140
141 config SPL_BSS_LIMIT
142         bool "Enforce a limit on the size of the BSS only"
143
144 config SPL_FOOTPRINT_LIMIT
145         bool "Enforce a limit on the whole of memory allocated to SPL, BSS included"
146
147 endchoice
148
149 config SPL_BSS_MAX_SIZE
150         hex "Maximum size in memory allocated to the SPL BSS"
151         depends on SPL_BSS_LIMIT
152         default 0x100000 if ARCH_MX6 || RISCV
153         default 0x80000 if ARCH_OMAP2PLUS || ARCH_SUNXI
154         help
155           When non-zero, the linker checks that the actual memory used by SPL
156           from __bss_start to __bss_end does not exceed it.
157
158 config SPL_MAX_FOOTPRINT
159         hex "Maximum size in memory allocated to the SPL, BSS included"
160         depends on SPL_FOOTPRINT_LIMIT
161         help
162           When non-zero, the linker checks that the actual memory used by SPL
163           from _start to __bss_end does not exceed it.
164
165 config SPL_SYS_STACK_F_CHECK_BYTE
166         hex
167         default 0xaa
168         help
169           Constant used to check the stack
170
171 config SPL_SYS_REPORT_STACK_F_USAGE
172         depends on SPL_SIZE_LIMIT_PROVIDE_STACK != 0
173         bool "Check and report stack usage in SPL before relocation"
174         help
175           If this option is enabled, the initial SPL stack is filled with 0xaa
176           very early, up to the size configured with
177           SPL_SIZE_LIMIT_PROVIDE_STACK.
178           Later when SPL is done using this initial stack and switches to a
179           stack in DRAM, the actually used size of this initial stack is
180           reported by examining the memory and searching for the lowest
181           occurrence of non 0xaa bytes.
182           This default implementation works for stacks growing down only.
183
184 config SPL_SHOW_ERRORS
185         bool "Show more information when something goes wrong"
186         help
187           This enabled more verbose error messages and checking when something
188           goes wrong in SPL. For example, it shows the error code when U-Boot
189           cannot be located. This can help to diagnose the problem and figure
190           out a fix, particularly during development.
191
192           This adds a small amount to SPL code size, perhaps 100 bytes.
193
194 config SPL_BINMAN_SYMBOLS
195         bool "Declare binman symbols in SPL"
196         depends on SPL_FRAMEWORK && BINMAN
197         default y
198         help
199           This enables use of symbols in SPL which refer to other entries in
200           the same binman image as the SPL. These can be declared with the
201           binman_sym_declare(type, entry, prop) macro and accessed by the
202           binman_sym(type, entry, prop) macro defined in binman_sym.h.
203
204           See tools/binman/binman.rst for a detailed explanation.
205
206 config SPL_BINMAN_UBOOT_SYMBOLS
207         bool "Declare binman symbols for U-Boot phases in SPL"
208         depends on SPL_BINMAN_SYMBOLS
209         default n if ARCH_IMX8M
210         default y
211         help
212           This enables use of symbols in SPL which refer to U-Boot phases,
213           enabling SPL to obtain the location and size of its next phase simply
214           by calling spl_get_image_pos() and spl_get_image_size().
215
216           For this to work, you must have all U-Boot phases in the same binman
217           image, so binman can update SPL with the locations of everything.
218
219 source "common/spl/Kconfig.nxp"
220
221 config HANDOFF
222         bool "Pass hand-off information from SPL to U-Boot proper"
223         depends on BLOBLIST
224         help
225           It is useful to be able to pass information from SPL to U-Boot
226           proper to preserve state that is known in SPL and is needed in U-Boot.
227           Enable this to locate the handoff information in U-Boot proper, early
228           in boot. It is available in gd->handoff. The state state is set up
229           in SPL (or TPL if that is being used).
230
231 config SPL_HANDOFF
232         bool "Pass hand-off information from SPL to U-Boot proper"
233         depends on HANDOFF && SPL_BLOBLIST
234         default y
235         help
236           This option enables SPL to write handoff information. This can be
237           used to pass information like the size of SDRAM from SPL to U-Boot
238           proper. Also SPL can receive information from TPL in the same place
239           if that is enabled.
240
241 config SPL_LDSCRIPT
242         string "Linker script for the SPL stage"
243         default "arch/arm/cpu/arm926ejs/sunxi/u-boot-spl.lds" if MACH_SUNIV
244         default "arch/arm/cpu/armv7/sunxi/u-boot-spl.lds" if ARCH_SUNXI && !MACH_SUNIV && !ARM64
245         default "arch/arm/cpu/arm926ejs/mxs/u-boot-spl.lds" if (ARCH_MX23 || ARCH_MX28) && !SPL_FRAMEWORK
246         default "arch/arm/cpu/arm1136/u-boot-spl.lds" if CPU_ARM1136
247         default "arch/arm/cpu/armv8/u-boot-spl.lds" if ARCH_LS1043A || ARCH_LS1046A || ARCH_LS2080A
248         default "arch/arm/cpu/armv8/u-boot-spl.lds" if ARM64
249         default "arch/arm/mach-at91/arm926ejs/u-boot-spl.lds" if ARCH_AT91 && CPU_ARM926EJS
250         default "arch/arm/mach-at91/armv7/u-boot-spl.lds" if ARCH_AT91 && CPU_V7A
251         default "arch/arm/mach-omap2/u-boot-spl.lds" if ARCH_MX6 || ARCH_OMAP2PLUS || (ARCH_K3 && !ARM64)
252         default "arch/arm/mach-zynq/u-boot-spl.lds" if ARCH_ZYNQ
253         default "board/samsung/common/exynos-uboot-spl.lds" if ARCH_EXYNOS5 || ARCH_EXYNOS4
254         default "board/davinci/da8xxevm/u-boot-spl-da850evm.lds" if ARCH_DAVINCI
255         default "arch/\$(ARCH)/cpu/u-boot-spl.lds"
256         help
257           The SPL stage will usually require a different linker-script
258           (as it runs from a different memory region) than the regular
259           U-Boot stage.  Set this to the path of the linker-script to
260           be used for SPL.
261
262 config SPL_TEXT_BASE
263         hex "SPL Text Base"
264         default 0x402F4000 if AM43XX
265         default 0x402F0400 if AM33XX
266         default 0x40301350 if OMAP54XX
267         default 0x10060 if MACH_SUN50I || MACH_SUN50I_H5 || MACH_SUN9I
268         default 0x20060 if SUN50I_GEN_H6
269         default 0x00060 if ARCH_SUNXI
270         default 0xfffc0000 if ARCH_ZYNQMP
271         default 0x0
272         help
273           The address in memory that SPL will be running from.
274
275 config SPL_BOARD_INIT
276         bool "Call board-specific initialization in SPL"
277         help
278           If this option is enabled, U-Boot will call the function
279           spl_board_init() from board_init_r(). This function should be
280           provided by the board.
281
282 config SPL_BOOTROM_SUPPORT
283         bool "Support returning to the BOOTROM"
284         help
285           Some platforms (e.g. the Rockchip RK3368) provide support in their
286           ROM for loading the next boot-stage after performing basic setup
287           from the SPL stage.
288
289           Enable this option, to return to the BOOTROM through the
290           BOOT_DEVICE_BOOTROM (or fall-through to the next boot device in the
291           boot device list, if not implemented for a given board)
292
293 config SPL_BOOTCOUNT_LIMIT
294         bool "Support bootcount in SPL"
295         depends on SPL_ENV_SUPPORT && !TPL_BOOTCOUNT_LIMIT
296         help
297           On some boards, which use 'falcon' mode, it is necessary to check
298           and increment the number of boot attempts. Such boards do not
299           use proper U-Boot for normal boot flow and hence needs those
300           adjustments to be done in the SPL.
301
302 config SPL_RAW_IMAGE_SUPPORT
303         bool "Support SPL loading and booting of RAW images"
304         default n if ARCH_MVEBU
305         default n if (ARCH_MX6 && (SPL_MMC || SPL_SATA))
306         default y
307         depends on !TI_SECURE_DEVICE
308         help
309           SPL will support loading and booting a RAW image when this option
310           is y. If this is not set, SPL will move on to other available
311           boot media to find a suitable image.
312
313 config SPL_LEGACY_IMAGE_FORMAT
314         bool "Support SPL loading and booting of Legacy images"
315         default n if ARCH_MVEBU
316         default y if !SPL_LOAD_FIT
317         depends on !TI_SECURE_DEVICE
318         help
319           SPL will support loading and booting Legacy images when this option
320           is y. If this is not set, SPL will move on to other available
321           boot media to find a suitable image.
322
323 config SPL_LEGACY_IMAGE_CRC_CHECK
324         bool "Check CRC of Legacy images"
325         depends on SPL_LEGACY_IMAGE_FORMAT
326         select SPL_CRC32
327         help
328           Enable this to check the CRC of Legacy images. While this increases
329           reliability, it affects both code size and boot duration.
330           If disabled, Legacy images are booted if the image magic and size
331           are correct, without further integrity checks.
332
333 config SPL_SYS_MALLOC_SIMPLE
334         bool "Only use malloc_simple functions in the SPL"
335         help
336           Say Y here to only use the *_simple malloc functions from
337           malloc_simple.c, rather then using the versions from dlmalloc.c;
338           this will make the SPL binary smaller at the cost of more heap
339           usage as the *_simple malloc functions do not re-use free-ed mem.
340
341 config SPL_SHARES_INIT_SP_ADDR
342         bool "SPL and U-Boot use the same initial stack pointer location"
343         depends on (ARM || ARCH_JZ47XX || MICROBLAZE || RISCV) && SPL_FRAMEWORK
344         default n if ARCH_SUNXI || ARCH_MX6 || ARCH_MX7
345         default y
346         help
347           In many cases, we can use the same initial stack pointer address for
348           both SPL and U-Boot itself.  If you need to specify a different address
349           however, say N here and then set a different value in CONFIG_SPL_STACK.
350
351 config SPL_STACK
352         hex "Initial stack pointer location"
353         depends on (ARM || ARCH_JZ47XX || MICROBLAZE || RISCV) && SPL_FRAMEWORK
354         depends on !SPL_SHARES_INIT_SP_ADDR
355         default 0x946bb8 if ARCH_MX7
356         default 0x93ffb8 if ARCH_MX6 && MX6_OCRAM_256KB
357         default 0x91ffb8 if ARCH_MX6 && !MX6_OCRAM_256KB
358         default 0x118000 if MACH_SUN50I_H6
359         default 0x58000 if MACH_SUN50I_H616
360         default 0x54000 if MACH_SUN50I || MACH_SUN50I_H5
361         default 0x18000 if MACH_SUN9I
362         default 0x8000 if ARCH_SUNXI
363         help
364           Address of the start of the stack SPL will use before SDRAM is
365           initialized.
366
367 config SPL_STACK_R
368         bool "Enable SDRAM location for SPL stack"
369         help
370           SPL starts off execution in SRAM and thus typically has only a small
371           stack available. Since SPL sets up DRAM while in its board_init_f()
372           function, it is possible for the stack to move there before
373           board_init_r() is reached. This option enables a special SDRAM
374           location for the SPL stack. U-Boot SPL switches to this after
375           board_init_f() completes, and before board_init_r() starts.
376
377 config SPL_STACK_R_ADDR
378         depends on SPL_STACK_R
379         hex "SDRAM location for SPL stack"
380         default 0x82000000 if ARCH_OMAP2PLUS
381         help
382           Specify the address in SDRAM for the SPL stack. This will be set up
383           before board_init_r() is called.
384
385 config SPL_STACK_R_MALLOC_SIMPLE_LEN
386         depends on SPL_STACK_R && SPL_SYS_MALLOC_SIMPLE
387         hex "Size of malloc_simple heap after switching to DRAM SPL stack"
388         default 0x400000 if ARCH_K3 && ARM64
389         default 0x100000
390         help
391           Specify the amount of the stack to use as memory pool for
392           malloc_simple after switching the stack to DRAM. This may be set
393           to give board_init_r() a larger heap then the initial heap in
394           SRAM which is limited to SYS_MALLOC_F_LEN bytes.
395
396 config SPL_SEPARATE_BSS
397         bool "BSS section is in a different memory region from text"
398         help
399           Some platforms need a large BSS region in SPL and can provide this
400           because RAM is already set up. In this case BSS can be moved to RAM.
401           This option should then be enabled so that the correct device tree
402           location is used. Normally we put the device tree at the end of BSS
403           but with this option enabled, it goes at _image_binary_end.
404
405 config SYS_SPL_MALLOC
406         bool "Enable malloc pool in SPL"
407         depends on SPL_FRAMEWORK
408
409 config HAS_CUSTOM_SPL_MALLOC_START
410         bool "For the SPL malloc pool, define a custom starting address"
411         depends on SYS_SPL_MALLOC
412
413 config CUSTOM_SYS_SPL_MALLOC_ADDR
414         hex "SPL malloc addr"
415         depends on HAS_CUSTOM_SPL_MALLOC_START
416
417 config SYS_SPL_MALLOC_SIZE
418         hex "Size of the SPL malloc pool"
419         depends on SYS_SPL_MALLOC
420         default 0x100000
421
422 config SPL_READ_ONLY
423         bool
424         depends on SPL_OF_PLATDATA
425         # Bind cannot be supported because the udevice structs are in read-only
426         # memory so we cannot update the linked lists.
427         select SPL_OF_PLATDATA_NO_BIND
428         select SPL_OF_PLATDATA_RT
429         help
430           Some platforms (e.g. x86 Apollo Lake) load SPL into a read-only
431           section of memory. This means that of-platdata must make a copy (in
432           writeable memory) of anything it wants to modify, such as
433           device-private data.
434
435 config SPL_BANNER_PRINT
436         bool "Enable output of the SPL banner 'U-Boot SPL ...'"
437         default y
438         help
439           If this option is enabled, SPL will print the banner with version
440           info. Disabling this option could be useful to reduce SPL boot time
441           (e.g. approx. 6 ms faster, when output on i.MX6 with 115200 baud).
442
443 config SPL_EARLY_BSS
444         depends on ARM && !ARM64
445         bool "Allows initializing BSS early before entering board_init_f"
446         help
447           On some platform we have sufficient memory available early on to
448           allow setting up and using a basic BSS prior to entering
449           board_init_f. Activating this option will also de-activate the
450           clearing of BSS during the SPL relocation process, thus allowing
451           to carry state from board_init_f to board_init_r by way of BSS.
452
453 config SPL_DISPLAY_PRINT
454         bool "Display a board-specific message in SPL"
455         help
456           If this option is enabled, U-Boot will call the function
457           spl_display_print() immediately after displaying the SPL console
458           banner ("U-Boot SPL ..."). This function should be provided by
459           the board.
460
461 config SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
462         bool "MMC raw mode: by sector"
463         default y if ARCH_SUNXI || ARCH_DAVINCI || ARCH_UNIPHIER || \
464                      ARCH_MX6 || ARCH_MX7 || \
465                      ARCH_ROCKCHIP || ARCH_MVEBU ||  ARCH_SOCFPGA || \
466                      ARCH_AT91 || ARCH_ZYNQ || ARCH_KEYSTONE || OMAP34XX || \
467                      OMAP44XX || OMAP54XX || AM33XX || AM43XX || \
468                      TARGET_SIFIVE_UNLEASHED || TARGET_SIFIVE_UNMATCHED
469         help
470           Use sector number for specifying U-Boot location on MMC/SD in
471           raw mode.
472
473 config SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
474         hex "Address on the MMC to load U-Boot from"
475         depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
476         default 0x40 if ARCH_SUNXI
477         default 0x75 if ARCH_DAVINCI
478         default 0x8a if ARCH_MX6 || ARCH_MX7
479         default 0x100 if ARCH_UNIPHIER
480         default 0x0 if ARCH_MVEBU
481         default 0x200 if ARCH_SOCFPGA || ARCH_AT91
482         default 0x300 if ARCH_ZYNQ || ARCH_KEYSTONE || OMAP34XX || OMAP44XX || \
483                          OMAP54XX || AM33XX || AM43XX || ARCH_K3
484         default 0x4000 if ARCH_ROCKCHIP
485         default 0x822 if TARGET_SIFIVE_UNLEASHED || TARGET_SIFIVE_UNMATCHED
486         help
487           Address on the MMC to load U-Boot from, when the MMC is being used
488           in raw mode. Units: MMC sectors (1 sector = 512 bytes).
489
490 config SYS_MMCSD_RAW_MODE_U_BOOT_DATA_PART_OFFSET
491         hex "U-Boot main hardware partition image offset"
492         depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
493         default 0x10 if ARCH_SUNXI
494         default 0x0
495         help
496           On some platforms SPL location depends on hardware partition. The ROM
497           code skips the MBR sector when loading SPL from main hardware data
498           partition. This adds offset to the main U-Boot image. Set this symbol
499           to the number of skipped sectors.
500
501           If unsure, leave the default.
502
503 config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
504         bool "MMC Raw mode: by partition"
505         help
506           Use a partition for loading U-Boot when using MMC/SD in raw mode.
507
508 config SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION
509         hex "Partition to use to load U-Boot from"
510         depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
511         default 1
512         help
513           Partition on the MMC to load U-Boot from when the MMC is being
514           used in raw mode
515
516 config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE
517         bool "MMC raw mode: by partition type"
518         depends on DOS_PARTITION && SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
519         help
520           Use partition type for specifying U-Boot partition on MMC/SD in
521           raw mode. U-Boot will be loaded from the first partition of this
522           type to be found.
523
524 config SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_TYPE
525         hex "Partition Type on the MMC to load U-Boot from"
526         depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE
527         help
528           Partition Type on the MMC to load U-Boot from, when the MMC is being
529           used in raw mode.
530
531 config SUPPORT_EMMC_BOOT_OVERRIDE_PART_CONFIG
532         bool "Override eMMC EXT_CSC_PART_CONFIG by user defined partition"
533         depends on SUPPORT_EMMC_BOOT
534         help
535           eMMC boot partition is normally configured by the bits of the EXT_CSD
536           register (EXT_CSC_PART_CONFIG), BOOT_PARTITION_ENABLE field. In some
537           cases it might be required in SPL to load the image from different
538           partition than the partition selected by EXT_CSC_PART_CONFIG register.
539           Enable this option if you intend to use an eMMC boot partition other
540           then selected via EXT_CSC_PART_CONFIG register and specify the custom
541           partition number by the CONFIG_SYS_MMCSD_RAW_MODE_EMMC_BOOT_PARTITION
542           option.
543
544 config SYS_MMCSD_RAW_MODE_EMMC_BOOT_PARTITION
545         int "Number of the eMMC boot partition to use"
546         depends on SUPPORT_EMMC_BOOT_OVERRIDE_PART_CONFIG
547         default 1
548         help
549           eMMC boot partition number to use when the eMMC in raw mode and
550           the eMMC EXT_CSC_PART_CONFIG selection should be overridden in SPL
551           by user defined partition number.
552
553 config SPL_FIT_IMAGE_TINY
554         bool "Remove functionality from SPL FIT loading to reduce size"
555         depends on SPL_FIT
556         default y if MACH_SUN50I || MACH_SUN50I_H5 || SUN50I_GEN_H6
557         default y if ARCH_IMX8M || ARCH_IMX9
558         help
559           Enable this to reduce the size of the FIT image loading code
560           in SPL, if space for the SPL binary is very tight.
561
562           This skips the recording of each loaded payload
563           (i.e. loadable) into the FDT (modifying the loaded FDT to
564           ensure this information is available to the next image
565           invoked).
566
567 config SPL_CACHE
568         bool "Support CACHE drivers"
569         help
570           Enable CACHE drivers in SPL. These drivers can keep data so that
571           future requests for that data can be served faster. Enable this option
572           to build the drivers in drivers/cache as part of an SPL build.
573
574 config SPL_CPU
575         bool "Support CPU drivers"
576         help
577           Enable this to support CPU drivers in SPL. These drivers can set
578           up CPUs and provide information about them such as the model and
579           name. This can be useful in SPL since setting up the CPUs earlier
580           may improve boot performance. Enable this option to build the
581           drivers in drivers/cpu as part of an SPL build.
582
583 config SPL_CRYPTO
584         bool "Support crypto drivers"
585         help
586           Enable crypto drivers in SPL. These drivers can be used to
587           accelerate secure boot processing in secure applications. Enable
588           this option to build the drivers in drivers/crypto as part of an
589           SPL build.
590
591 config SPL_DMA
592         bool "Support DMA drivers"
593         help
594           Enable DMA (direct-memory-access) drivers in SPL. These drivers
595           can be used to handle memory-to-peripheral data transfer without
596           the CPU moving the data. Enable this option to build the drivers
597           in drivers/dma as part of an SPL build.
598
599 config SPL_DRIVERS_MISC
600         bool "Support misc drivers"
601         help
602           Enable miscellaneous drivers in SPL. These drivers perform various
603           tasks that don't fall nicely into other categories, Enable this
604           option to build the drivers in drivers/misc as part of an SPL
605           build, for those that support building in SPL (not all drivers do).
606
607 config SPL_ENV_SUPPORT
608         bool "Support an environment"
609         help
610           Enable environment support in SPL. The U-Boot environment provides
611           a number of settings (essentially name/value pairs) which can
612           control many aspects of U-Boot's operation. Normally this is not
613           needed in SPL as it has a much simpler task with less
614           configuration. But some boards use this to support 'Falcon' boot
615           on EXT2 and FAT, where SPL boots directly into Linux without
616           starting U-Boot first. Enabling this option will make env_get()
617           and env_set() available in SPL.
618
619 config SPL_SAVEENV
620         bool "Support save environment"
621         depends on SPL_ENV_SUPPORT
622         select SPL_MMC_WRITE if ENV_IS_IN_MMC
623         help
624           Enable save environment support in SPL after setenv. By default
625           the saveenv option is not provided in SPL, but some boards need
626           this support in 'Falcon' boot, where SPL need to boot from
627           different images based on environment variable set by OS. For
628           example OS may set "reboot_image" environment variable to
629           "recovery" inorder to boot recovery image by SPL. The SPL read
630           "reboot_image" and act accordingly and change the reboot_image
631           to default mode using setenv and save the environment.
632
633 config SPL_ETH
634         bool "Support Ethernet"
635         depends on SPL_ENV_SUPPORT
636         depends on SPL_NET
637         help
638           Enable access to the network subsystem and associated Ethernet
639           drivers in SPL. This permits SPL to load U-Boot over an Ethernet
640           link rather than from an on-board peripheral. Environment support
641           is required since the network stack uses a number of environment
642           variables. See also SPL_NET.
643
644 config SPL_FS_EXT4
645         bool "Support EXT filesystems"
646         help
647           Enable support for EXT2/3/4 filesystems with SPL. This permits
648           U-Boot (or Linux in Falcon mode) to be loaded from an EXT
649           filesystem from within SPL. Support for the underlying block
650           device (e.g. MMC or USB) must be enabled separately.
651
652 config SPL_FS_SQUASHFS
653         bool "Support SquashFS filesystems"
654         select FS_SQUASHFS
655         help
656           Enable support for SquashFS filesystems with SPL. This permits
657           U-Boot (or Linux in Falcon mode) to be loaded from a SquashFS
658           filesystem from within SPL. Support for the underlying block
659           device (e.g. MMC or USB) must be enabled separately.
660
661 config SPL_FS_FAT
662         bool "Support FAT filesystems"
663         select FS_FAT
664         help
665           Enable support for FAT and VFAT filesystems with SPL. This
666           permits U-Boot (or Linux in Falcon mode) to be loaded from a FAT
667           filesystem from within SPL. Support for the underlying block
668           device (e.g. MMC or USB) must be enabled separately.
669
670 config SPL_FS_LOAD_PAYLOAD_NAME
671         string "File to load for U-Boot from the filesystem"
672         depends on SPL_FS_EXT4 || SPL_FS_FAT || SPL_FS_SQUASHFS || SPL_SEMIHOSTING
673         default "tispl.bin" if SYS_K3_SPL_ATF
674         default "u-boot.itb" if SPL_LOAD_FIT
675         default "u-boot.img"
676         help
677           Filename to read to load U-Boot when reading from filesystem.
678
679 config SPL_FS_LOAD_KERNEL_NAME
680         string "File to load for the OS kernel from the filesystem"
681         depends on (SPL_FS_EXT4 || SPL_FS_FAT || SPL_FS_SQUASHFS) && SPL_OS_BOOT
682         default "uImage"
683         help
684           Filename to read to load for the OS kernel when reading from the
685           filesystem.
686
687 config SPL_FS_LOAD_ARGS_NAME
688         string "File to load for the OS kernel argument parameters from the filesystem"
689         depends on (SPL_FS_EXT4 || SPL_FS_FAT || SPL_FS_SQUASHFS) && SPL_OS_BOOT
690         default "args"
691         help
692           Filename to read to load for the OS kernel argument parameters from
693           the filesystem.
694
695 config SPL_FAT_WRITE
696         bool "Support write for FAT filesystems"
697         help
698           Enable write support for FAT and VFAT filesystems with SPL.
699           Support for the underlying block device (e.g. MMC or USB) must be
700           enabled separately.
701
702 config SPL_FPGA
703         bool "Support FPGAs"
704         help
705           Enable support for FPGAs in SPL. Field-programmable Gate Arrays
706           provide software-configurable hardware which is typically used to
707           implement peripherals (such as UARTs, LCD displays, MMC) or
708           accelerate custom processing functions, such as image processing
709           or machine learning. Sometimes it is useful to program the FPGA
710           as early as possible during boot, and this option can enable that
711           within SPL.
712
713 config SPL_GPIO
714         bool "Support GPIO in SPL"
715         help
716           Enable support for GPIOs (General-purpose Input/Output) in SPL.
717           GPIOs allow U-Boot to read the state of an input line (high or
718           low) and set the state of an output line. This can be used to
719           drive LEDs, control power to various system parts and read user
720           input. GPIOs can be useful in SPL to enable a 'sign-of-life' LED,
721           for example. Enable this option to build the drivers in
722           drivers/gpio as part of an SPL build.
723
724 config SPL_I2C
725         bool "Support I2C"
726         help
727           Enable support for the I2C (Inter-Integrated Circuit) bus in SPL.
728           I2C works with a clock and data line which can be driven by a
729           one or more masters or slaves. It is a fairly complex bus but is
730           widely used as it only needs two lines for communication. Speeds of
731           400kbps are typical but up to 3.4Mbps is supported by some
732           hardware. I2C can be useful in SPL to configure power management
733           ICs (PMICs) before raising the CPU clock speed, for example.
734           Enable this option to build the drivers in drivers/i2c as part of
735           an SPL build.
736
737 config SPL_LIBCOMMON_SUPPORT
738         bool "Support common libraries"
739         help
740           Enable support for common U-Boot libraries within SPL. These
741           libraries include common code to deal with U-Boot images,
742           environment and USB, for example. This option is enabled on many
743           boards. Enable this option to build the code in common/ as part of
744           an SPL build.
745
746 config SPL_LIBDISK_SUPPORT
747         bool "Support disk partitions"
748         select PARTITIONS
749         help
750           Enable support for disk partitions within SPL. 'Disk' is something
751           of a misnomer as it includes non-spinning media such as flash (as
752           used in MMC and USB sticks). Partitions provide a way for a disk
753           to be split up into separate regions, with a partition table placed
754           at the start or end which describes the location and size of each
755           'partition'. These partitions are typically uses as individual block
756           devices, typically with an EXT2 or FAT filesystem in each. This
757           option enables whatever partition support has been enabled in
758           U-Boot to also be used in SPL. It brings in the code in disk/.
759
760 config SPL_LIBGENERIC_SUPPORT
761         bool "Support generic libraries"
762         help
763           Enable support for generic U-Boot libraries within SPL. These
764           libraries include generic code to deal with device tree, hashing,
765           printf(), compression and the like. This option is enabled on many
766           boards. Enable this option to build the code in lib/ as part of an
767           SPL build.
768
769 config SPL_DM_MAILBOX
770         bool "Support Mailbox"
771         depends on SPL_DM
772         help
773           Enable support for Mailbox within SPL. This enable the inter
774           processor communication protocols tobe used within SPL. Enable
775           this option to build the drivers in drivers/mailbox as part of
776           SPL build.
777
778 config SPL_MEMORY
779         bool "Support Memory controller drivers"
780         help
781           Enable support for Memory Controller drivers within SPL.
782           These devices provide Memory bus interface to various devices like
783           SRAM, Ethernet adapters, FPGAs, etc.
784
785 config SPL_MMC
786         bool "Support MMC"
787         depends on MMC
788         help
789           Enable support for MMC (Multimedia Card) within SPL. This enables
790           the MMC protocol implementation and allows any enabled drivers to
791           be used within SPL. MMC can be used with or without disk partition
792           support depending on the application (SPL_LIBDISK_SUPPORT). Enable
793           this option to build the drivers in drivers/mmc as part of an SPL
794           build.
795
796 config SYS_MMCSD_FS_BOOT
797         bool "MMC FS Boot mode"
798         depends on SPL_MMC
799         default y if !ARCH_MVEBU
800         help
801           Enable MMC FS Boot mode. Partition is selected by option
802           SYS_MMCSD_FS_BOOT_PARTITION.
803
804 config SYS_MMCSD_FS_BOOT_PARTITION
805         int "MMC Boot Partition"
806         depends on SYS_MMCSD_FS_BOOT
807         default 1
808         help
809           Partition on the MMC to load U-Boot from when the MMC is being
810           used in fs mode.
811           Use -1 as a special value to use the first bootable partition.
812
813 config SPL_MMC_TINY
814         bool "Tiny MMC framework in SPL"
815         depends on SPL_MMC
816         help
817           Enable MMC framework tinification support. This option is useful if
818           if your SPL is extremely size constrained. Heed the warning, enable
819           this option if and only if you know exactly what you are doing, if
820           you are reading this help text, you most likely have no idea :-)
821
822           The MMC framework is reduced to bare minimum to be useful. No malloc
823           support is needed for the MMC framework operation with this option
824           enabled. The framework supports exactly one MMC device and exactly
825           one MMC driver. The MMC driver can be adjusted to avoid any malloc
826           operations too, which can remove the need for malloc support in SPL
827           and thus further reduce footprint.
828
829 config SPL_MMC_WRITE
830         bool "MMC/SD/SDIO card support for write operations in SPL"
831         depends on SPL_MMC
832         help
833           Enable write access to MMC and SD Cards in SPL
834
835
836 config SPL_MPC8XXX_INIT_DDR
837         bool "Support MPC8XXX DDR init"
838         help
839           Enable support for DDR-SDRAM (double-data-rate synchronous dynamic
840           random-access memory) on the MPC8XXX family within SPL. This
841           allows DRAM to be set up before loading U-Boot into that DRAM,
842           where it can run.
843
844 config SPL_MTD_SUPPORT
845         bool "Support MTD drivers"
846         help
847           Enable support for MTD (Memory Technology Device) within SPL. MTD
848           provides a block interface over raw NAND and can also be used with
849           SPI flash. This allows SPL to load U-Boot from supported MTD
850           devices. See SPL_NAND_SUPPORT and SPL_ONENAND_SUPPORT for how
851           to enable specific MTD drivers.
852
853 config SPL_MUSB_NEW
854         bool "Support new Mentor Graphics USB"
855         help
856           Enable support for Mentor Graphics USB in SPL. This is a new
857           driver used by some boards. Enable this option to build
858           the drivers in drivers/usb/musb-new as part of an SPL build. The
859           old drivers are in drivers/usb/musb.
860
861 config SPL_NAND_SUPPORT
862         bool "Support NAND flash"
863         help
864           Enable support for NAND (Negative AND) flash in SPL. NAND flash
865           can be used to allow SPL to load U-Boot from supported devices.
866           This enables the drivers in drivers/mtd/nand/raw as part of an SPL
867           build.
868
869 config SPL_NAND_RAW_ONLY
870         bool "Support to boot only raw u-boot.bin images"
871         depends on SPL_NAND_SUPPORT
872         help
873           Use this only if you need to save space.
874
875 config SPL_NAND_DRIVERS
876         bool "Use standard NAND driver"
877         help
878           SPL uses normal NAND drivers, not minimal drivers.
879
880 config SPL_NAND_ECC
881         bool "Include standard ECC in SPL"
882
883 config SPL_NAND_SOFTECC
884         bool "Use software ECC in SPL"
885         depends on SPL_NAND_ECC
886
887 config SPL_NAND_SIMPLE
888         bool "Support simple NAND drivers in SPL"
889         help
890           Support for NAND boot using simple NAND drivers that
891           expose the cmd_ctrl() interface.
892
893 config SPL_NAND_BASE
894         depends on SPL_NAND_SUPPORT
895         bool "Use Base NAND Driver"
896         help
897           Include nand_base.c in the SPL.
898
899 config SPL_NAND_IDENT
900         depends on SPL_NAND_BASE
901         bool "Use chip ID to identify NAND flash"
902         help
903           SPL uses the chip ID list to identify the NAND flash.
904
905 config SPL_UBI
906         bool "Support UBI"
907         help
908           Enable support for loading payloads from UBI. See
909           README.ubispl for more info.
910
911 menu "UBI configuration for SPL"
912         depends on SPL_UBI
913
914 config SPL_UBI_LOAD_BY_VOLNAME
915         bool "Support loading volumes by name"
916         help
917           This enables support for loading UBI volumes by name. When this
918           is set, CONFIG_SPL_UBI_LOAD_MONITOR_VOLNAME can be used to
919           configure the volume name from which to load U-Boot.
920
921 config SPL_UBI_MAX_VOL_LEBS
922         int "Maximum number of LEBs per volume"
923         help
924           The maximum number of logical eraseblocks which a static volume
925           to load can contain. Used for sizing the scan data structure.
926
927 config SPL_UBI_MAX_PEB_SIZE
928         int "Maximum PEB size"
929         help
930           The maximum physical erase block size.
931
932 config SPL_UBI_MAX_PEBS
933         int "Maximum number of PEBs"
934         help
935           The maximum physical erase block size. If not overridden by
936           board code, this value will be used as the actual number of PEBs.
937
938 config SPL_UBI_PEB_OFFSET
939         int "Offset to first UBI PEB"
940         help
941           The offset in number of PEBs from the start of flash to the first
942           PEB part of the UBI image.
943
944 config SPL_UBI_VID_OFFSET
945         int "Offset to VID header"
946
947 config SPL_UBI_LEB_START
948         int "Offset to LEB in PEB"
949         help
950           The offset in bytes to the LEB within a PEB.
951
952 config SPL_UBI_INFO_ADDR
953         hex "Address to place UBI scan info"
954         help
955           Address for ubispl to place the scan info. Read README.ubispl to
956           determine the required size
957
958 config SPL_UBI_VOL_IDS
959         int "Maximum volume id"
960         help
961           The maximum volume id which can be loaded. Used for sizing the
962           scan data structure.
963
964 config SPL_UBI_LOAD_MONITOR_ID
965         int "id of U-Boot volume"
966         help
967           The UBI volume id from which to load U-Boot
968
969 config SPL_UBI_LOAD_MONITOR_VOLNAME
970         string "volume name of U-Boot volume"
971         depends on SPL_UBI_LOAD_BY_VOLNAME
972         help
973           The UBI volume name from which to load U-Boot
974
975 config SPL_UBI_LOAD_KERNEL_ID
976         int "id of kernel volume"
977         depends on SPL_OS_BOOT
978         help
979           The UBI volume id from which to load the kernel
980
981 config SPL_UBI_LOAD_ARGS_ID
982         int "id of kernel args volume"
983         depends on SPL_OS_BOOT
984         help
985           The UBI volume id from which to load the device tree
986
987 config UBI_SPL_SILENCE_MSG
988         bool "silence UBI SPL messages"
989         help
990           Disable messages from UBI SPL. This leaves warnings
991           and errors enabled.
992
993 endmenu
994
995 config SPL_DM_SPI
996         bool "Support SPI DM drivers in SPL"
997         depends on SPL_DM
998         help
999           Enable support for SPI DM drivers in SPL.
1000
1001 config SPL_DM_SPI_FLASH
1002         bool "Support SPI DM FLASH drivers in SPL"
1003         depends on SPL_DM
1004         help
1005           Enable support for SPI DM flash drivers in SPL.
1006
1007 config SPL_NET
1008         bool "Support networking"
1009         help
1010           Enable support for network devices (such as Ethernet) in SPL.
1011           This permits SPL to load U-Boot over a network link rather than
1012           from an on-board peripheral. Environment support is required since
1013           the network stack uses a number of environment variables. See also
1014           SPL_ETH.
1015
1016 config SPL_NET_VCI_STRING
1017         string "BOOTP Vendor Class Identifier string sent by SPL"
1018         depends on SPL_NET
1019         help
1020           As defined by RFC 2132 the vendor class identifier field can be
1021           sent by the client to identify the vendor type and configuration
1022           of a client.  This is often used in practice to allow for the DHCP
1023           server to specify different files to load depending on if the ROM,
1024           SPL or U-Boot itself makes the request
1025
1026 config SPL_NO_CPU_SUPPORT
1027         def_bool y
1028         depends on (ARCH_MX23 || ARCH_MX28) && !SPL_FRAMEWORK
1029         help
1030           This is specific to the ARM926EJ-S CPU. It disables the standard
1031           start.S start-up code, presumably so that a replacement can be
1032           used on that CPU. You should not enable it unless you know what
1033           you are doing.
1034
1035 config SPL_NOR_SUPPORT
1036         bool "Support NOR flash"
1037         help
1038           Enable support for loading U-Boot from memory-mapped NOR (Negative
1039           OR) flash in SPL. NOR flash is slow to write but fast to read, and
1040           a memory-mapped device makes it very easy to access. Loading from
1041           NOR is typically achieved with just a memcpy().
1042
1043 config SPL_XIP_SUPPORT
1044         bool "Support XIP"
1045         help
1046           Enable support for execute in place of U-Boot or kernel image. There
1047           is no need to copy image from flash to ram if flash supports execute
1048           in place. Its very useful in systems having enough flash but not
1049           enough ram to load the image.
1050
1051 config SPL_ONENAND_SUPPORT
1052         bool "Support OneNAND flash"
1053         help
1054           Enable support for OneNAND (Negative AND) flash in SPL. OneNAND is
1055           a type of NAND flash and therefore can be used to allow SPL to
1056           load U-Boot from supported devices. This enables the drivers in
1057           drivers/mtd/onenand as part of an SPL build.
1058
1059 config SPL_OS_BOOT
1060         bool "Activate Falcon Mode"
1061         depends on !TI_SECURE_DEVICE
1062         help
1063           Enable booting directly to an OS from SPL.
1064           for more info read doc/README.falcon
1065
1066 config SYS_SPL_ARGS_ADDR
1067         hex "Address in memory to load 'args' file for Falcon Mode to"
1068         depends on SPL_OS_BOOT
1069         default 0x88000000 if ARCH_OMAP2PLUS
1070         help
1071           Address in memory where the 'args' file, typically a device tree
1072           will be loaded in to memory.
1073
1074 config SYS_NAND_SPL_KERNEL_OFFS
1075         hex "Address in memory to load the OS file for Falcon mode to"
1076         depends on SPL_OS_BOOT && SPL_NAND_SUPPORT
1077
1078 config SYS_OS_BASE
1079         hex "addr, where OS is found"
1080         depends on SPL_OS_BOOT && SPL_NOR_SUPPORT
1081         help
1082           Specify the address, where the OS image is found, which
1083           gets booted.
1084
1085 config SPL_FALCON_BOOT_MMCSD
1086         bool "Enable Falcon boot from MMC or SD media"
1087         depends on SPL_OS_BOOT && SPL_MMC
1088         help
1089           Select this if the Falcon mode OS image mode is on MMC or SD media.
1090
1091 config SYS_MMCSD_RAW_MODE_KERNEL_SECTOR
1092         hex "Falcon mode: Sector to load kernel uImage from MMC"
1093         depends on SPL_FALCON_BOOT_MMCSD
1094         help
1095           When Falcon mode is used with an MMC or SD media, SPL needs to know
1096           where to look for the kernel uImage. The image is expected to begin
1097           at the raw MMC specified in this config.
1098           Note that the Falcon mode image can also be a FIT, if FIT support is
1099           enabled.
1100
1101 config SYS_MMCSD_RAW_MODE_ARGS_SECTOR
1102         hex "Falcon mode: Sector to load 'args' from MMC"
1103         depends on SPL_FALCON_BOOT_MMCSD
1104         help
1105           When Falcon mode is used with an MMC or SD media, SPL needs to know
1106           where to look for the OS 'args', typically a device tree. The
1107           contents are expected to begin at the raw MMC specified in this config.
1108           Note that if using a FIT image, this and the next option can be set to
1109           0x0.
1110
1111 config SYS_MMCSD_RAW_MODE_ARGS_SECTORS
1112         hex "Falcon mode: Number of sectors to load for 'args' from MMC"
1113         depends on SPL_FALCON_BOOT_MMCSD && SYS_MMCSD_RAW_MODE_ARGS_SECTOR != 0x0
1114
1115 config SPL_PAYLOAD
1116         string "SPL payload"
1117         default "tpl/u-boot-with-tpl.bin" if TPL
1118         default "u-boot.bin"
1119         help
1120           Payload for SPL boot. For backward compatibility, default to
1121           u-boot.bin, i.e. RAW image without any header. In case of
1122           TPL, tpl/u-boot-with-tpl.bin. For new boards, suggest to
1123           use u-boot.img.
1124
1125 config SPL_PCI
1126         bool "Support PCI drivers"
1127         help
1128           Enable support for PCI in SPL. For platforms that need PCI to boot,
1129           or must perform some init using PCI in SPL, this provides the
1130           necessary driver support. This enables the drivers in drivers/pci
1131           as part of an SPL build.
1132
1133 config SPL_PCH
1134         bool "Support PCH drivers"
1135         help
1136           Enable support for PCH (Platform Controller Hub) devices in SPL.
1137           These are used to set up GPIOs and the SPI peripheral early in
1138           boot. This enables the drivers in drivers/pch as part of an SPL
1139           build.
1140
1141 config SPL_POST_MEM_SUPPORT
1142         bool "Support POST drivers"
1143         help
1144           Enable support for POST (Power-on Self Test) in SPL. POST is a
1145           procedure that checks that the hardware (CPU or board) appears to
1146           be functionally correctly. It is a sanity check that can be
1147           performed before booting. This enables the drivers in post/drivers
1148           as part of an SPL build.
1149
1150 config SPL_DM_RESET
1151         bool "Support reset drivers"
1152         depends on SPL_DM
1153         help
1154           Enable support for reset control in SPL.
1155           That can be useful in SPL to handle IP reset in driver, as in U-Boot,
1156           by using the generic reset API provided by driver model.
1157           This enables the drivers in drivers/reset as part of an SPL build.
1158
1159 config SPL_POWER
1160         bool "Support power drivers"
1161         help
1162           Enable support for power control in SPL. This includes support
1163           for PMICs (Power-management Integrated Circuits) and some of the
1164           features provided by PMICs. In particular, voltage regulators can
1165           be used to enable/disable power and vary its voltage. That can be
1166           useful in SPL to turn on boot peripherals and adjust CPU voltage
1167           so that the clock speed can be increased. This enables the drivers
1168           in drivers/power, drivers/power/pmic and drivers/power/regulator
1169           as part of an SPL build.
1170
1171 config SPL_POWER_DOMAIN
1172         bool "Support power domain drivers"
1173         select SPL_POWER
1174         help
1175           Enable support for power domain control in SPL. Many SoCs allow
1176           power to be applied to or removed from portions of the SoC (power
1177           domains). This may be used to save power. This API provides the
1178           means to control such power management hardware. This enables
1179           the drivers in drivers/power/domain as part of a SPL build.
1180
1181 config SPL_RAM_SUPPORT
1182         bool "Support booting from RAM"
1183         default y if MICROBLAZE || ARCH_SOCFPGA || ARCH_TEGRA || ARCH_ZYNQ
1184         help
1185           Enable booting of an image in RAM. The image can be preloaded or
1186           it can be loaded by SPL directly into RAM (e.g. using USB).
1187
1188 config SPL_RAM_DEVICE
1189         bool "Support booting from preloaded image in RAM"
1190         depends on SPL_RAM_SUPPORT
1191         default y if MICROBLAZE || ARCH_SOCFPGA || ARCH_TEGRA || ARCH_ZYNQ
1192         help
1193           Enable booting of an image already loaded in RAM. The image has to
1194           be already in memory when SPL takes over, e.g. loaded by the boot
1195           ROM.
1196
1197 config SPL_REMOTEPROC
1198         bool "Support REMOTEPROCS"
1199         help
1200           Enable support for REMOTEPROCs in SPL. This permits to load
1201           a remote processor firmware in SPL.
1202
1203 config SPL_RTC
1204         bool "Support RTC drivers"
1205         help
1206           Enable RTC (Real-time Clock) support in SPL. This includes support
1207           for reading and setting the time. Some RTC devices also have some
1208           non-volatile (battery-backed) memory which is accessible if
1209           needed. This enables the drivers in drivers/rtc as part of an SPL
1210           build.
1211
1212 config SPL_SATA
1213         bool "Support loading from SATA"
1214         help
1215           Enable support for SATA (Serial AT attachment) in SPL. This allows
1216           use of SATA devices such as hard drives and flash drivers for
1217           loading U-Boot. SATA is used in higher-end embedded systems and
1218           can provide higher performance than MMC , at somewhat higher
1219           expense and power consumption. This enables loading from SATA
1220           using a configured device.
1221
1222 config SYS_SATA_FAT_BOOT_PARTITION
1223         int "Partition on the SATA disk to load U-Boot from"
1224         depends on SPL_SATA && SPL_FS_FAT
1225         default 1
1226
1227 config SPL_SATA_RAW_U_BOOT_USE_SECTOR
1228         bool "SATA raw mode: by sector"
1229         depends on SPL_SATA
1230         default y if ARCH_MVEBU
1231         help
1232           Use sector number for specifying U-Boot location on SATA disk in
1233           raw mode.
1234
1235 config SPL_SATA_RAW_U_BOOT_SECTOR
1236         hex "Sector on the SATA disk to load U-Boot from"
1237         depends on SPL_SATA_RAW_U_BOOT_USE_SECTOR
1238         default 0x1 if ARCH_MVEBU
1239         help
1240           Sector on the SATA disk to load U-Boot from, when the SATA disk is being
1241           used in raw mode. Units: SATA disk sectors (1 sector = 512 bytes).
1242
1243 config SPL_NVME
1244         bool "NVM Express device support"
1245         depends on BLK
1246         select HAVE_BLOCK_DEVICE
1247         select FS_LOADER
1248         select SPL_BLK_FS
1249         help
1250           This option enables support for NVM Express devices.
1251           It supports basic functions of NVMe (read/write).
1252
1253 config SPL_NVME_PCI
1254         bool "NVM Express PCI device support for SPL"
1255         depends on SPL_PCI && SPL_NVME
1256         help
1257           This option enables support for NVM Express PCI devices.
1258           This allows use of NVMe devices for loading u-boot.
1259
1260 config SPL_NVME_BOOT_DEVICE
1261         hex "NVMe boot device number"
1262         depends on SPL_NVME
1263         default 0x0
1264
1265 config SYS_NVME_BOOT_PARTITION
1266         hex "NVMe boot partition number"
1267         depends on SPL_NVME
1268         default 0x1
1269
1270 config SPL_SERIAL
1271         bool "Support serial"
1272         select SPL_PRINTF
1273         select SPL_STRTO
1274         help
1275           Enable support for serial in SPL. This allows use of a serial UART
1276           for displaying messages while SPL is running. It also brings in
1277           printf() and panic() functions. This should normally be enabled
1278           unless there are space reasons not to. Even then, consider
1279           enabling SPL_USE_TINY_PRINTF which is a small printf() version.
1280
1281 config SPL_SPI
1282         bool "Support SPI drivers"
1283         help
1284           Enable support for using SPI in SPL. This is used for connecting
1285           to SPI flash for loading U-Boot. See SPL_SPI_FLASH_SUPPORT for
1286           more details on that. The SPI driver provides the transport for
1287           data between the SPI flash and the CPU. This option can be used to
1288           enable SPI drivers that are needed for other purposes also, such
1289           as a SPI PMIC.
1290
1291 config SPL_SPI_FLASH_SUPPORT
1292         bool "Support SPI flash drivers"
1293         depends on SPL_SPI
1294         help
1295           Enable support for using SPI flash in SPL, and loading U-Boot from
1296           SPI flash. SPI flash (Serial Peripheral Bus flash) is named after
1297           the SPI bus that is used to connect it to a system. It is a simple
1298           but fast bidirectional 4-wire bus (clock, chip select and two data
1299           lines). This enables the drivers in drivers/mtd/spi as part of an
1300           SPL build. This normally requires SPL_SPI.
1301
1302 if SPL_SPI_FLASH_SUPPORT
1303
1304 config SPL_SPI_FLASH_TINY
1305         bool "Enable low footprint SPL SPI Flash support"
1306         depends on !SPI_FLASH_BAR
1307         default y if SPI_FLASH
1308         help
1309          Enable lightweight SPL SPI Flash support that supports just reading
1310          data/images from flash. No support to write/erase flash. Enable
1311          this if you have SPL size limitations and don't need full
1312          fledged SPI flash support.
1313
1314 config SPL_SPI_FLASH_SFDP_SUPPORT
1315         bool "SFDP table parsing support for SPI NOR flashes"
1316         depends on !SPI_FLASH_BAR && !SPL_SPI_FLASH_TINY
1317         help
1318          Enable support for parsing and auto discovery of parameters for
1319          SPI NOR flashes using Serial Flash Discoverable Parameters (SFDP)
1320          tables as per JESD216 standard in SPL.
1321
1322 config SPL_SPI_FLASH_MTD
1323         bool "Support for SPI flash MTD drivers in SPL"
1324         help
1325           Enable support for SPI flash MTD drivers in SPL.
1326
1327 config SPL_SPI_LOAD
1328         bool "Support loading from SPI flash"
1329         help
1330           Enable support for loading next stage, U-Boot or otherwise, from
1331           SPI NOR in U-Boot SPL.
1332
1333 endif # SPL_SPI_FLASH_SUPPORT
1334
1335 config SYS_SPI_U_BOOT_OFFS
1336         hex "address of u-boot payload in SPI flash"
1337         default 0x8000 if ARCH_SUNXI
1338         default 0x0
1339         depends on SPL_SPI_LOAD || SPL_SPI_SUNXI
1340         help
1341          Address within SPI-Flash from where the u-boot payload is fetched
1342          from.
1343
1344 config SPL_THERMAL
1345         bool "Driver support for thermal devices"
1346         help
1347           Enable support for temperature-sensing devices. Some SoCs have on-chip
1348           temperature sensors to permit warnings, speed throttling or even
1349           automatic power-off when the temperature gets too high or low. Other
1350           devices may be discrete but connected on a suitable bus.
1351
1352 config SPL_WATCHDOG
1353         bool "Support watchdog drivers"
1354         imply SPL_WDT if !HW_WATCHDOG
1355         help
1356           Enable support for watchdog drivers in SPL. A watchdog is
1357           typically a hardware peripheral which can reset the system when it
1358           detects no activity for a while (such as a software crash). This
1359           enables the drivers in drivers/watchdog as part of an SPL build.
1360
1361 config SPL_YMODEM_SUPPORT
1362         bool "Support loading using Ymodem"
1363         depends on SPL_SERIAL
1364         help
1365           While loading from serial is slow it can be a useful backup when
1366           there is no other option. The Ymodem protocol provides a reliable
1367           means of transmitting U-Boot over a serial line for using in SPL,
1368           with a checksum to ensure correctness.
1369
1370 config SPL_ATF
1371         bool "Support ARM Trusted Firmware"
1372         depends on ARM64
1373         depends on SPL_LOAD_FIT && !SPL_FIT_IMAGE_TINY
1374         help
1375           ATF(ARM Trusted Firmware) is a component for ARM AArch64 which
1376           is loaded by SPL (which is considered as BL2 in ATF terminology).
1377           More detail at: https://github.com/ARM-software/arm-trusted-firmware
1378
1379 config SPL_ATF_LOAD_IMAGE_V2
1380         bool "Use the new LOAD_IMAGE_V2 parameter passing"
1381         depends on SPL_ATF
1382         help
1383           Some platforms use the newer LOAD_IMAGE_V2 parameter passing.
1384
1385           If you want to load a bl31 image from the SPL and need the new
1386           method, say Y.
1387
1388 config SPL_ATF_NO_PLATFORM_PARAM
1389         bool "Pass no platform parameter"
1390         depends on SPL_ATF
1391         help
1392           While we expect to call a pointer to a valid FDT (or NULL)
1393           as the platform parameter to an ATF, some ATF versions are
1394           not U-Boot aware and have an insufficiently robust parameter
1395           validation to gracefully reject a FDT being passed.
1396
1397           If this option is enabled, the spl_atf os-type handler will
1398           always pass NULL for the platform parameter.
1399
1400           If your ATF is affected, say Y.
1401
1402 config SPL_AM33XX_ENABLE_RTC32K_OSC
1403         bool "Enable the RTC32K OSC on AM33xx based platforms"
1404         depends on AM33XX
1405         default y if AM33XX
1406         help
1407           Enable access to the AM33xx RTC and select the external 32kHz clock
1408           source.
1409
1410 config SPL_OPTEE_IMAGE
1411         bool "Support OP-TEE Trusted OS image in SPL"
1412         depends on ARM
1413         depends on SPL_LOAD_FIT || SPL_LOAD_FIT_FULL
1414         help
1415           OP-TEE is an open source Trusted OS which is loaded by SPL.
1416           More detail at: https://github.com/OP-TEE/optee_os
1417
1418 config SPL_OPENSBI
1419         bool "Support RISC-V OpenSBI"
1420         depends on RISCV && SPL_RISCV_MMODE && RISCV_SMODE
1421         depends on SPL_LOAD_FIT && !SPL_FIT_IMAGE_TINY
1422         help
1423           OpenSBI is an open-source implementation of the RISC-V Supervisor Binary
1424           Interface (SBI) specification. U-Boot supports the OpenSBI FW_DYNAMIC
1425           firmware. It is loaded and started by U-Boot SPL.
1426
1427           More details are available at https://github.com/riscv/opensbi and
1428           https://github.com/riscv/riscv-sbi-doc
1429
1430 config SPL_OPENSBI_LOAD_ADDR
1431         hex "OpenSBI load address"
1432         depends on SPL_OPENSBI
1433         help
1434           Load address of the OpenSBI binary.
1435
1436 config SPL_OPENSBI_SCRATCH_OPTIONS
1437         hex "Scratch options passed to OpenSBI"
1438         default 0x1
1439         depends on SPL_OPENSBI
1440         help
1441           This bitmap of options is passed from U-Boot SPL to OpenSBI.
1442           As of OpenSBI 1.3 the following bits are defined:
1443           - SBI_SCRATCH_NO_BOOT_PRINTS = 0x1 (Disable prints during boot)
1444           - SBI_SCRATCH_DEBUG_PRINTS   = 0x2 (Enable runtime debug prints)
1445
1446 config SPL_TARGET
1447         string "Addtional build targets for 'make'"
1448         default "spl/u-boot-spl.srec" if RCAR_GEN2
1449         default "spl/u-boot-spl.scif" if RCAR_GEN3
1450         default ""
1451         help
1452           On some platforms we need to have 'make' run additional build target
1453           rules. If required on your platform, enter it here, otherwise leave blank.
1454
1455
1456 config SPL_AT91_MCK_BYPASS
1457         bool "Use external clock signal as a source of main clock for AT91 platforms"
1458         depends on ARCH_AT91
1459         help
1460           Use external 8 to 24 Mhz clock signal as source of main clock instead
1461           of an external crystal oscillator.
1462           This option disables the internal driving on the XOUT pin.
1463           The external source has to provide a stable clock on the XIN pin.
1464           If this option is disabled, the SoC expects a crystal oscillator
1465           that needs driving on both XIN and XOUT lines.
1466 endmenu
1467
1468 config TPL
1469         depends on SUPPORT_TPL
1470         bool "Enable TPL"
1471         help
1472           If you want to build TPL as well as the normal image and SPL, say Y.
1473
1474 source "common/spl/Kconfig.tpl"
1475
1476 config VPL
1477         depends on SUPPORT_SPL
1478         bool "Enable VPL"
1479         help
1480           If you want to build VPL as well as the normal image, TPL and SPL,
1481           say Y.
1482
1483 source "common/spl/Kconfig.vpl"