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