xref: /openbmc/u-boot/common/spl/Kconfig (revision 0cd9465c)
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 HANDOFF
29	bool "Pass hand-off information from SPL to U-Boot proper"
30	depends on BLOBLIST
31	help
32	  It is useful to be able to pass information from SPL to U-Boot
33	  proper to preserve state that is known in SPL and is needed in U-Boot.
34	  Enable this to locate the handoff information in U-Boot proper, early
35	  in boot. It is available in gd->handoff. The state state is set up
36	  in SPL (or TPL if that is being used).
37
38if SPL
39
40config SPL_HANDOFF
41	bool "Pass hand-off information from SPL to U-Boot proper"
42	depends on HANDOFF
43	default y
44	help
45	  This option enables SPL to write handoff information. This can be
46	  used to pass information like the size of SDRAM from SPL to U-Boot
47	  proper. Also SPL can receive information from TPL in the same place
48	  if that is enabled.
49
50config SPL_LDSCRIPT
51	string "Linker script for the SPL stage"
52	default "arch/$(ARCH)/cpu/u-boot-spl.lds"
53	help
54	  The SPL stage will usually require a different linker-script
55	  (as it runs from a different memory region) than the regular
56	  U-Boot stage.	 Set this to the path of the linker-script to
57	  be used for SPL.
58
59config SPL_BOARD_INIT
60	bool "Call board-specific initialization in SPL"
61	help
62	  If this option is enabled, U-Boot will call the function
63	  spl_board_init() from board_init_r(). This function should be
64	  provided by the board.
65
66config SPL_BOOTROM_SUPPORT
67        bool "Support returning to the BOOTROM"
68	help
69	  Some platforms (e.g. the Rockchip RK3368) provide support in their
70	  ROM for loading the next boot-stage after performing basic setup
71	  from the SPL stage.
72
73	  Enable this option, to return to the BOOTROM through the
74	  BOOT_DEVICE_BOOTROM (or fall-through to the next boot device in the
75	  boot device list, if not implemented for a given board)
76
77config SPL_BOOTCOUNT_LIMIT
78	bool "Support bootcount in SPL"
79	depends on SPL_ENV_SUPPORT
80	help
81	  On some boards, which use 'falcon' mode, it is necessary to check
82	  and increment the number of boot attempts. Such boards do not
83	  use proper U-Boot for normal boot flow and hence needs those
84	  adjustments to be done in the SPL.
85
86config SPL_RAW_IMAGE_SUPPORT
87	bool "Support SPL loading and booting of RAW images"
88	default n if (ARCH_MX6 && (SPL_MMC_SUPPORT || SPL_SATA_SUPPORT))
89	default y if !TI_SECURE_DEVICE
90	help
91	  SPL will support loading and booting a RAW image when this option
92	  is y. If this is not set, SPL will move on to other available
93	  boot media to find a suitable image.
94
95config SPL_LEGACY_IMAGE_SUPPORT
96	bool "Support SPL loading and booting of Legacy images"
97	default y if !TI_SECURE_DEVICE
98	help
99	  SPL will support loading and booting Legacy images when this option
100	  is y. If this is not set, SPL will move on to other available
101	  boot media to find a suitable image.
102
103config SPL_LEGACY_IMAGE_CRC_CHECK
104	bool "Check CRC of Legacy images"
105	depends on SPL_LEGACY_IMAGE_SUPPORT
106	select SPL_CRC32_SUPPORT
107	help
108	  Enable this to check the CRC of Legacy images. While this increases
109	  reliability, it affects both code size and boot duration.
110	  If disabled, Legacy images are booted if the image magic and size
111	  are correct, without further integrity checks.
112
113config SPL_SYS_MALLOC_SIMPLE
114	bool
115	prompt "Only use malloc_simple functions in the SPL"
116	help
117	  Say Y here to only use the *_simple malloc functions from
118	  malloc_simple.c, rather then using the versions from dlmalloc.c;
119	  this will make the SPL binary smaller at the cost of more heap
120	  usage as the *_simple malloc functions do not re-use free-ed mem.
121
122config TPL_SYS_MALLOC_SIMPLE
123	bool
124	prompt "Only use malloc_simple functions in the TPL"
125	help
126	  Say Y here to only use the *_simple malloc functions from
127	  malloc_simple.c, rather then using the versions from dlmalloc.c;
128	  this will make the TPL binary smaller at the cost of more heap
129	  usage as the *_simple malloc functions do not re-use free-ed mem.
130
131config SPL_STACK_R
132	bool "Enable SDRAM location for SPL stack"
133	help
134	  SPL starts off execution in SRAM and thus typically has only a small
135	  stack available. Since SPL sets up DRAM while in its board_init_f()
136	  function, it is possible for the stack to move there before
137	  board_init_r() is reached. This option enables a special SDRAM
138	  location for the SPL stack. U-Boot SPL switches to this after
139	  board_init_f() completes, and before board_init_r() starts.
140
141config SPL_STACK_R_ADDR
142	depends on SPL_STACK_R
143	hex "SDRAM location for SPL stack"
144	default 0x82000000 if ARCH_OMAP2PLUS
145	help
146	  Specify the address in SDRAM for the SPL stack. This will be set up
147	  before board_init_r() is called.
148
149config SPL_STACK_R_MALLOC_SIMPLE_LEN
150	depends on SPL_STACK_R && SPL_SYS_MALLOC_SIMPLE
151	hex "Size of malloc_simple heap after switching to DRAM SPL stack"
152	default 0x100000
153	help
154	  Specify the amount of the stack to use as memory pool for
155	  malloc_simple after switching the stack to DRAM. This may be set
156	  to give board_init_r() a larger heap then the initial heap in
157	  SRAM which is limited to SYS_MALLOC_F_LEN bytes.
158
159config SPL_SEPARATE_BSS
160	bool "BSS section is in a different memory region from text"
161	help
162	  Some platforms need a large BSS region in SPL and can provide this
163	  because RAM is already set up. In this case BSS can be moved to RAM.
164	  This option should then be enabled so that the correct device tree
165	  location is used. Normally we put the device tree at the end of BSS
166	  but with this option enabled, it goes at _image_binary_end.
167
168config SPL_BANNER_PRINT
169	bool "Enable output of the SPL banner 'U-Boot SPL ...'"
170	default y
171	help
172	  If this option is enabled, SPL will print the banner with version
173	  info. Disabling this option could be useful to reduce TPL boot time
174	  (e.g. approx. 6 ms faster, when output on i.MX6 with 115200 baud).
175
176config TPL_BANNER_PRINT
177	bool "Enable output of the TPL banner 'U-Boot TPL ...'"
178	default y
179	help
180	  If this option is enabled, SPL will not print the banner with version
181	  info. Disabling this option could be useful to reduce SPL boot time
182	  (e.g. approx. 6 ms faster, when output on i.MX6 with 115200 baud).
183
184config SPL_DISPLAY_PRINT
185	bool "Display a board-specific message in SPL"
186	help
187	  If this option is enabled, U-Boot will call the function
188	  spl_display_print() immediately after displaying the SPL console
189	  banner ("U-Boot SPL ..."). This function should be provided by
190	  the board.
191
192config SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
193	bool "MMC raw mode: by sector"
194	default y if ARCH_SUNXI || ARCH_DAVINCI || ARCH_UNIPHIER || \
195		     ARCH_MX6 || ARCH_MX7 || \
196		     ARCH_ROCKCHIP || ARCH_MVEBU ||  ARCH_SOCFPGA || \
197		     ARCH_AT91 || ARCH_ZYNQ || ARCH_KEYSTONE || OMAP34XX || \
198		     OMAP44XX || OMAP54XX || AM33XX || AM43XX
199	help
200	  Use sector number for specifying U-Boot location on MMC/SD in
201	  raw mode.
202
203config SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR
204	hex "Address on the MMC to load U-Boot from"
205	depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
206	default 0x50 if ARCH_SUNXI
207	default 0x75 if ARCH_DAVINCI
208	default 0x8a if ARCH_MX6 || ARCH_MX7
209	default 0x100 if ARCH_UNIPHIER
210	default 0x140 if ARCH_MVEBU
211	default 0x200 if ARCH_SOCFPGA || ARCH_AT91
212	default 0x300 if ARCH_ZYNQ || ARCH_KEYSTONE || OMAP34XX || OMAP44XX || \
213		         OMAP54XX || AM33XX || AM43XX || ARCH_K3
214	default 0x4000 if ARCH_ROCKCHIP
215	help
216	  Address on the MMC to load U-Boot from, when the MMC is being used
217	  in raw mode. Units: MMC sectors (1 sector = 512 bytes).
218
219config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
220	bool "MMC Raw mode: by partition"
221	help
222	  Use a partition for loading U-Boot when using MMC/SD in raw mode.
223
224config SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION
225	hex "Partition to use to load U-Boot from"
226	depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
227	default 1
228	help
229	  Partition on the MMC to load U-Boot from when the MMC is being
230	  used in raw mode
231
232config SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE
233	bool "MMC raw mode: by partition type"
234	depends on DOS_PARTITION && SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
235	help
236	  Use partition type for specifying U-Boot partition on MMC/SD in
237	  raw mode. U-Boot will be loaded from the first partition of this
238	  type to be found.
239
240config SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_TYPE
241	hex "Partition Type on the MMC to load U-Boot from"
242	depends on SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION_TYPE
243	help
244	  Partition Type on the MMC to load U-Boot from, when the MMC is being
245	  used in raw mode.
246
247config SPL_CRC32_SUPPORT
248	bool "Support CRC32"
249	default y if SPL_LEGACY_IMAGE_SUPPORT
250	help
251	  Enable this to support CRC32 in uImages or FIT images within SPL.
252	  This is a 32-bit checksum value that can be used to verify images.
253	  For FIT images, this is the least secure type of checksum, suitable
254	  for detected accidental image corruption. For secure applications you
255	  should consider SHA1 or SHA256.
256
257config SPL_MD5_SUPPORT
258	bool "Support MD5"
259	depends on SPL_FIT
260	help
261	  Enable this to support MD5 in FIT images within SPL. An MD5
262	  checksum is a 128-bit hash value used to check that the image
263	  contents have not been corrupted. Note that MD5 is not considered
264	  secure as it is possible (with a brute-force attack) to adjust the
265	  image while still retaining the same MD5 hash value. For secure
266	  applications where images may be changed maliciously, you should
267	  consider SHA1 or SHA256.
268
269config SPL_SHA1_SUPPORT
270	bool "Support SHA1"
271	depends on SPL_FIT
272	select SHA1
273	help
274	  Enable this to support SHA1 in FIT images within SPL. A SHA1
275	  checksum is a 160-bit (20-byte) hash value used to check that the
276	  image contents have not been corrupted or maliciously altered.
277	  While SHA1 is fairly secure it is coming to the end of its life
278	  due to the expanding computing power avaiable to brute-force
279	  attacks. For more security, consider SHA256.
280
281config SPL_SHA256_SUPPORT
282	bool "Support SHA256"
283	depends on SPL_FIT
284	select SHA256
285	help
286	  Enable this to support SHA256 in FIT images within SPL. A SHA256
287	  checksum is a 256-bit (32-byte) hash value used to check that the
288	  image contents have not been corrupted. SHA256 is recommended for
289	  use in secure applications since (as at 2016) there is no known
290	  feasible attack that could produce a 'collision' with differing
291	  input data. Use this for the highest security. Note that only the
292	  SHA256 variant is supported: SHA512 and others are not currently
293	  supported in U-Boot.
294
295config SPL_FIT_IMAGE_TINY
296	bool "Remove functionality from SPL FIT loading to reduce size"
297	depends on SPL_FIT
298	default y if MACH_SUN50I || MACH_SUN50I_H5 || MACH_SUN50I_H6
299	default y if ARCH_IMX8M
300	help
301	  Enable this to reduce the size of the FIT image loading code
302	  in SPL, if space for the SPL binary is very tight.
303
304	  This removes the detection of image types (which forces the
305	  first image to be treated as having a U-Boot style calling
306	  convention) and skips the recording of each loaded payload
307	  (i.e. loadable) into the FDT (modifying the loaded FDT to
308	  ensure this information is available to the next image
309	  invoked).
310
311config SPL_CPU_SUPPORT
312	bool "Support CPU drivers"
313	help
314	  Enable this to support CPU drivers in SPL. These drivers can set
315	  up CPUs and provide information about them such as the model and
316	  name. This can be useful in SPL since setting up the CPUs earlier
317	  may improve boot performance. Enable this option to build the
318	  drivers in drivers/cpu as part of an SPL build.
319
320config SPL_CRYPTO_SUPPORT
321	bool "Support crypto drivers"
322	help
323	  Enable crypto drivers in SPL. These drivers can be used to
324	  accelerate secure boot processing in secure applications. Enable
325	  this option to build the drivers in drivers/crypto as part of an
326	  SPL build.
327
328config SPL_HASH_SUPPORT
329	bool "Support hashing drivers"
330	select SHA1
331	select SHA256
332	help
333	  Enable hashing drivers in SPL. These drivers can be used to
334	  accelerate secure boot processing in secure applications. Enable
335	  this option to build system-specific drivers for hash acceleration
336	  as part of an SPL build.
337
338config TPL_HASH_SUPPORT
339	bool "Support hashing drivers in TPL"
340	select SHA1
341	select SHA256
342	help
343	  Enable hashing drivers in SPL. These drivers can be used to
344	  accelerate secure boot processing in secure applications. Enable
345	  this option to build system-specific drivers for hash acceleration
346	  as part of an SPL build.
347
348config SPL_DMA_SUPPORT
349	bool "Support DMA drivers"
350	help
351	  Enable DMA (direct-memory-access) drivers in SPL. These drivers
352	  can be used to handle memory-to-peripheral data transfer without
353	  the CPU moving the data. Enable this option to build the drivers
354	  in drivers/dma as part of an SPL build.
355
356config SPL_DRIVERS_MISC_SUPPORT
357	bool "Support misc drivers"
358	help
359	  Enable miscellaneous drivers in SPL. These drivers perform various
360	  tasks that don't fall nicely into other categories, Enable this
361	  option to build the drivers in drivers/misc as part of an SPL
362	  build, for those that support building in SPL (not all drivers do).
363
364config SPL_ENV_SUPPORT
365	bool "Support an environment"
366	help
367	  Enable environment support in SPL. The U-Boot environment provides
368	  a number of settings (essentially name/value pairs) which can
369	  control many aspects of U-Boot's operation. Normally this is not
370	  needed in SPL as it has a much simpler task with less
371	  configuration. But some boards use this to support 'Falcon' boot
372	  on EXT2 and FAT, where SPL boots directly into Linux without
373	  starting U-Boot first. Enabling this option will make env_get()
374	  and env_set() available in SPL.
375
376config SPL_SAVEENV
377	bool "Support save environment"
378	depends on SPL_ENV_SUPPORT
379	select SPL_MMC_WRITE if ENV_IS_IN_MMC
380	help
381	  Enable save environment support in SPL after setenv. By default
382	  the saveenv option is not provided in SPL, but some boards need
383	  this support in 'Falcon' boot, where SPL need to boot from
384	  different images based on environment variable set by OS. For
385	  example OS may set "reboot_image" environment variable to
386	  "recovery" inorder to boot recovery image by SPL. The SPL read
387	  "reboot_image" and act accordingly and change the reboot_image
388	  to default mode using setenv and save the environment.
389
390config SPL_ETH_SUPPORT
391	bool "Support Ethernet"
392	depends on SPL_ENV_SUPPORT
393	help
394	  Enable access to the network subsystem and associated Ethernet
395	  drivers in SPL. This permits SPL to load U-Boot over an Ethernet
396	  link rather than from an on-board peripheral. Environment support
397	  is required since the network stack uses a number of environment
398	  variables. See also SPL_NET_SUPPORT.
399
400config SPL_FS_EXT4
401	bool "Support EXT filesystems"
402	help
403	  Enable support for EXT2/3/4 filesystems with SPL. This permits
404	  U-Boot (or Linux in Falcon mode) to be loaded from an EXT
405	  filesystem from within SPL. Support for the underlying block
406	  device (e.g. MMC or USB) must be enabled separately.
407
408config SPL_FS_FAT
409	bool "Support FAT filesystems"
410	select FS_FAT
411	help
412	  Enable support for FAT and VFAT filesystems with SPL. This
413	  permits U-Boot (or Linux in Falcon mode) to be loaded from a FAT
414	  filesystem from within SPL. Support for the underlying block
415	  device (e.g. MMC or USB) must be enabled separately.
416
417config SPL_FAT_WRITE
418	bool "Support write for FAT filesystems"
419	help
420	  Enable write support for FAT and VFAT filesystems with SPL.
421	  Support for the underlying block device (e.g. MMC or USB) must be
422	  enabled separately.
423
424config SPL_FPGA_SUPPORT
425	bool "Support FPGAs"
426	help
427	  Enable support for FPGAs in SPL. Field-programmable Gate Arrays
428	  provide software-configurable hardware which is typically used to
429	  implement peripherals (such as UARTs, LCD displays, MMC) or
430	  accelerate custom processing functions, such as image processing
431	  or machine learning. Sometimes it is useful to program the FPGA
432	  as early as possible during boot, and this option can enable that
433	  within SPL.
434
435config SPL_GPIO_SUPPORT
436	bool "Support GPIO in SPL"
437	help
438	  Enable support for GPIOs (General-purpose Input/Output) in SPL.
439	  GPIOs allow U-Boot to read the state of an input line (high or
440	  low) and set the state of an output line. This can be used to
441	  drive LEDs, control power to various system parts and read user
442	  input. GPIOs can be useful in SPL to enable a 'sign-of-life' LED,
443	  for example. Enable this option to build the drivers in
444	  drivers/gpio as part of an SPL build.
445
446config SPL_I2C_SUPPORT
447	bool "Support I2C"
448	help
449	  Enable support for the I2C (Inter-Integrated Circuit) bus in SPL.
450	  I2C works with a clock and data line which can be driven by a
451	  one or more masters or slaves. It is a fairly complex bus but is
452	  widely used as it only needs two lines for communication. Speeds of
453	  400kbps are typical but up to 3.4Mbps is supported by some
454	  hardware. I2C can be useful in SPL to configure power management
455	  ICs (PMICs) before raising the CPU clock speed, for example.
456	  Enable this option to build the drivers in drivers/i2c as part of
457	  an SPL build.
458
459config SPL_LIBCOMMON_SUPPORT
460	bool "Support common libraries"
461	help
462	  Enable support for common U-Boot libraries within SPL. These
463	  libraries include common code to deal with U-Boot images,
464	  environment and USB, for example. This option is enabled on many
465	  boards. Enable this option to build the code in common/ as part of
466	  an SPL build.
467
468config SPL_LIBDISK_SUPPORT
469	bool "Support disk partitions"
470	select PARTITIONS
471	help
472	  Enable support for disk partitions within SPL. 'Disk' is something
473	  of a misnomer as it includes non-spinning media such as flash (as
474	  used in MMC and USB sticks). Partitions provide a way for a disk
475	  to be split up into separate regions, with a partition table placed
476	  at the start or end which describes the location and size of each
477	  'partition'. These partitions are typically uses as individual block
478	  devices, typically with an EXT2 or FAT filesystem in each. This
479	  option enables whatever partition support has been enabled in
480	  U-Boot to also be used in SPL. It brings in the code in disk/.
481
482config SPL_LIBGENERIC_SUPPORT
483	bool "Support generic libraries"
484	help
485	  Enable support for generic U-Boot libraries within SPL. These
486	  libraries include generic code to deal with device tree, hashing,
487	  printf(), compression and the like. This option is enabled on many
488	  boards. Enable this option to build the code in lib/ as part of an
489	  SPL build.
490
491config SPL_DM_MAILBOX
492	bool "Support Mailbox"
493	help
494	  Enable support for Mailbox within SPL. This enable the inter
495	  processor communication protocols tobe used within SPL. Enable
496	  this option to build the drivers in drivers/mailbox as part of
497	  SPL build.
498
499config SPL_MMC_SUPPORT
500	bool "Support MMC"
501	depends on MMC
502	select HAVE_BLOCK_DEVICE
503	help
504	  Enable support for MMC (Multimedia Card) within SPL. This enables
505	  the MMC protocol implementation and allows any enabled drivers to
506	  be used within SPL. MMC can be used with or without disk partition
507	  support depending on the application (SPL_LIBDISK_SUPPORT). Enable
508	  this option to build the drivers in drivers/mmc as part of an SPL
509	  build.
510
511config SPL_MMC_WRITE
512	bool "MMC/SD/SDIO card support for write operations in SPL"
513	depends on SPL_MMC_SUPPORT
514	default n
515	help
516	  Enable write access to MMC and SD Cards in SPL
517
518
519config SPL_MPC8XXX_INIT_DDR_SUPPORT
520	bool "Support MPC8XXX DDR init"
521	help
522	  Enable support for DDR-SDRAM (double-data-rate synchronous dynamic
523	  random-access memory) on the MPC8XXX family within SPL. This
524	  allows DRAM to be set up before loading U-Boot into that DRAM,
525	  where it can run.
526
527config SPL_MTD_SUPPORT
528	bool "Support MTD drivers"
529	help
530	  Enable support for MTD (Memory Technology Device) within SPL. MTD
531	  provides a block interface over raw NAND and can also be used with
532	  SPI flash. This allows SPL to load U-Boot from supported MTD
533	  devices. See SPL_NAND_SUPPORT and SPL_ONENAND_SUPPORT for how
534	  to enable specific MTD drivers.
535
536config SPL_MUSB_NEW_SUPPORT
537	bool "Support new Mentor Graphics USB"
538	help
539	  Enable support for Mentor Graphics USB in SPL. This is a new
540	  driver used by some boards. Enable this option to build
541	  the drivers in drivers/usb/musb-new as part of an SPL build. The
542	  old drivers are in drivers/usb/musb.
543
544config SPL_NAND_SUPPORT
545	bool "Support NAND flash"
546	help
547	  Enable support for NAND (Negative AND) flash in SPL. NAND flash
548	  can be used to allow SPL to load U-Boot from supported devices.
549	  This enables the drivers in drivers/mtd/nand/raw as part of an SPL
550	  build.
551
552config SPL_NET_SUPPORT
553	bool "Support networking"
554	help
555	  Enable support for network devices (such as Ethernet) in SPL.
556	  This permits SPL to load U-Boot over a network link rather than
557	  from an on-board peripheral. Environment support is required since
558	  the network stack uses a number of environment variables. See also
559	  SPL_ETH_SUPPORT.
560
561if SPL_NET_SUPPORT
562config SPL_NET_VCI_STRING
563	string "BOOTP Vendor Class Identifier string sent by SPL"
564	help
565	  As defined by RFC 2132 the vendor class identifier field can be
566	  sent by the client to identify the vendor type and configuration
567	  of a client.  This is often used in practice to allow for the DHCP
568	  server to specify different files to load depending on if the ROM,
569	  SPL or U-Boot itself makes the request
570endif   # if SPL_NET_SUPPORT
571
572config SPL_NO_CPU_SUPPORT
573	bool "Drop CPU code in SPL"
574	help
575	  This is specific to the ARM926EJ-S CPU. It disables the standard
576	  start.S start-up code, presumably so that a replacement can be
577	  used on that CPU. You should not enable it unless you know what
578	  you are doing.
579
580config SPL_NOR_SUPPORT
581	bool "Support NOR flash"
582	help
583	  Enable support for loading U-Boot from memory-mapped NOR (Negative
584	  OR) flash in SPL. NOR flash is slow to write but fast to read, and
585	  a memory-mapped device makes it very easy to access. Loading from
586	  NOR is typically achieved with just a memcpy().
587
588config SPL_XIP_SUPPORT
589	bool "Support XIP"
590	depends on SPL
591	help
592	  Enable support for execute in place of U-Boot or kernel image. There
593	  is no need to copy image from flash to ram if flash supports execute
594	  in place. Its very useful in systems having enough flash but not
595	  enough ram to load the image.
596
597config SPL_ONENAND_SUPPORT
598	bool "Support OneNAND flash"
599	help
600	  Enable support for OneNAND (Negative AND) flash in SPL. OneNAND is
601	  a type of NAND flash and therefore can be used to allow SPL to
602	  load U-Boot from supported devices. This enables the drivers in
603	  drivers/mtd/onenand as part of an SPL build.
604
605config SPL_OS_BOOT
606	bool "Activate Falcon Mode"
607	depends on !TI_SECURE_DEVICE
608	default n
609	help
610	  Enable booting directly to an OS from SPL.
611	  for more info read doc/README.falcon
612
613if SPL_OS_BOOT
614config SYS_OS_BASE
615	hex "addr, where OS is found"
616	depends on SPL_NOR_SUPPORT
617	help
618	  Specify the address, where the OS image is found, which
619	  gets booted.
620
621endif # SPL_OS_BOOT
622
623config SPL_PAYLOAD
624	string "SPL payload"
625	default "tpl/u-boot-with-tpl.bin" if TPL
626	default "u-boot.bin"
627	help
628	  Payload for SPL boot. For backward compatibility, default to
629	  u-boot.bin, i.e. RAW image without any header. In case of
630	  TPL, tpl/u-boot-with-tpl.bin. For new boards, suggest to
631	  use u-boot.img.
632
633config SPL_PCI
634	bool "Support PCI drivers"
635	help
636	  Enable support for PCI in SPL. For platforms that need PCI to boot,
637	  or must perform some init using PCI in SPL, this provides the
638	  necessary driver support. This enables the drivers in drivers/pci
639	  as part of an SPL build.
640
641config SPL_PCH_SUPPORT
642	bool "Support PCH drivers"
643	help
644	  Enable support for PCH (Platform Controller Hub) devices in SPL.
645	  These are used to set up GPIOs and the SPI peripheral early in
646	  boot. This enables the drivers in drivers/pch as part of an SPL
647	  build.
648
649config SPL_POST_MEM_SUPPORT
650	bool "Support POST drivers"
651	help
652	  Enable support for POST (Power-on Self Test) in SPL. POST is a
653	  procedure that checks that the hardware (CPU or board) appears to
654	  be functionally correctly. It is a sanity check that can be
655	  performed before booting. This enables the drivers in post/drivers
656	  as part of an SPL build.
657
658config SPL_DM_RESET
659	bool "Support reset drivers"
660	depends on SPL
661	help
662	  Enable support for reset control in SPL.
663	  That can be useful in SPL to handle IP reset in driver, as in U-Boot,
664	  by using the generic reset API provided by driver model.
665	  This enables the drivers in drivers/reset as part of an SPL build.
666
667config SPL_POWER_SUPPORT
668	bool "Support power drivers"
669	help
670	  Enable support for power control in SPL. This includes support
671	  for PMICs (Power-management Integrated Circuits) and some of the
672	  features provided by PMICs. In particular, voltage regulators can
673	  be used to enable/disable power and vary its voltage. That can be
674	  useful in SPL to turn on boot peripherals and adjust CPU voltage
675	  so that the clock speed can be increased. This enables the drivers
676	  in drivers/power, drivers/power/pmic and drivers/power/regulator
677	  as part of an SPL build.
678
679config SPL_POWER_DOMAIN
680	bool "Support power domain drivers"
681	help
682	  Enable support for power domain control in SPL. Many SoCs allow
683	  power to be applied to or removed from portions of the SoC (power
684	  domains). This may be used to save power. This API provides the
685	  means to control such power management hardware. This enables
686	  the drivers in drivers/power/domain as part of a SPL build.
687
688config SPL_RAM_SUPPORT
689	bool "Support booting from RAM"
690	default y if MICROBLAZE || ARCH_SOCFPGA || TEGRA || ARCH_ZYNQ
691	help
692	  Enable booting of an image in RAM. The image can be preloaded or
693	  it can be loaded by SPL directly into RAM (e.g. using USB).
694
695config SPL_RAM_DEVICE
696	bool "Support booting from preloaded image in RAM"
697	depends on SPL_RAM_SUPPORT
698	default y if MICROBLAZE || ARCH_SOCFPGA || TEGRA || ARCH_ZYNQ
699	help
700	  Enable booting of an image already loaded in RAM. The image has to
701	  be already in memory when SPL takes over, e.g. loaded by the boot
702	  ROM.
703
704config SPL_REMOTEPROC
705	bool "Support REMOTEPROCS"
706	help
707	  Enable support for REMOTEPROCs in SPL. This permits to load
708	  a remote processor firmware in SPL.
709
710config SPL_RTC_SUPPORT
711	bool "Support RTC drivers"
712	help
713	  Enable RTC (Real-time Clock) support in SPL. This includes support
714	  for reading and setting the time. Some RTC devices also have some
715	  non-volatile (battery-backed) memory which is accessible if
716	  needed. This enables the drivers in drivers/rtc as part of an SPL
717	  build.
718
719config SPL_SATA_SUPPORT
720	bool "Support loading from SATA"
721	help
722	  Enable support for SATA (Serial AT attachment) in SPL. This allows
723	  use of SATA devices such as hard drives and flash drivers for
724	  loading U-Boot. SATA is used in higher-end embedded systems and
725	  can provide higher performance than MMC , at somewhat higher
726	  expense and power consumption. This enables loading from SATA
727	  using a configured device.
728
729config SPL_SERIAL_SUPPORT
730	bool "Support serial"
731	select SPL_PRINTF
732	select SPL_STRTO
733	help
734	  Enable support for serial in SPL. This allows use of a serial UART
735	  for displaying messages while SPL is running. It also brings in
736	  printf() and panic() functions. This should normally be enabled
737	  unless there are space reasons not to. Even then, consider
738	  enabling USE_TINY_PRINTF which is a small printf() version.
739
740config SPL_SPI_FLASH_SUPPORT
741	bool "Support SPI flash drivers"
742	help
743	  Enable support for using SPI flash in SPL, and loading U-Boot from
744	  SPI flash. SPI flash (Serial Peripheral Bus flash) is named after
745	  the SPI bus that is used to connect it to a system. It is a simple
746	  but fast bidirectional 4-wire bus (clock, chip select and two data
747	  lines). This enables the drivers in drivers/mtd/spi as part of an
748	  SPL build. This normally requires SPL_SPI_SUPPORT.
749
750if SPL_SPI_FLASH_SUPPORT
751
752config SPL_SPI_FLASH_TINY
753	bool "Enable low footprint SPL SPI Flash support"
754	depends on !SPI_FLASH_BAR
755	default y if SPI_FLASH
756	help
757	 Enable lightweight SPL SPI Flash support that supports just reading
758	 data/images from flash. No support to write/erase flash. Enable
759	 this if you have SPL size limitations and don't need full
760	 fledged SPI flash support.
761
762config SPL_SPI_FLASH_SFDP_SUPPORT
763	bool "SFDP table parsing support for SPI NOR flashes"
764	depends on !SPI_FLASH_BAR && !SPL_SPI_FLASH_TINY
765	help
766	 Enable support for parsing and auto discovery of parameters for
767	 SPI NOR flashes using Serial Flash Discoverable Parameters (SFDP)
768	 tables as per JESD216 standard in SPL.
769
770config SPL_SPI_LOAD
771	bool "Support loading from SPI flash"
772	help
773	  Enable support for loading next stage, U-Boot or otherwise, from
774	  SPI NOR in U-Boot SPL.
775
776endif # SPL_SPI_FLASH_SUPPORT
777
778config SPL_SPI_SUPPORT
779	bool "Support SPI drivers"
780	help
781	  Enable support for using SPI in SPL. This is used for connecting
782	  to SPI flash for loading U-Boot. See SPL_SPI_FLASH_SUPPORT for
783	  more details on that. The SPI driver provides the transport for
784	  data between the SPI flash and the CPU. This option can be used to
785	  enable SPI drivers that are needed for other purposes also, such
786	  as a SPI PMIC.
787
788config SPL_THERMAL
789	bool "Driver support for thermal devices"
790	help
791	  Enable support for temperature-sensing devices. Some SoCs have on-chip
792	  temperature sensors to permit warnings, speed throttling or even
793	  automatic power-off when the temperature gets too high or low. Other
794	  devices may be discrete but connected on a suitable bus.
795
796config SPL_USB_HOST_SUPPORT
797	bool "Support USB host drivers"
798	select HAVE_BLOCK_DEVICE
799	help
800	  Enable access to USB (Universal Serial Bus) host devices so that
801	  SPL can load U-Boot from a connected USB peripheral, such as a USB
802	  flash stick. While USB takes a little longer to start up than most
803	  buses, it is very flexible since many different types of storage
804	  device can be attached. This option enables the drivers in
805	  drivers/usb/host as part of an SPL build.
806
807config SPL_USB_STORAGE
808	bool "Support loading from USB"
809	depends on SPL_USB_HOST_SUPPORT && !(BLK && !DM_USB)
810	help
811	  Enable support for USB devices in SPL. This allows use of USB
812	  devices such as hard drives and flash drivers for loading U-Boot.
813	  The actual drivers are enabled separately using the normal U-Boot
814	  config options. This enables loading from USB using a configured
815	  device.
816
817config SPL_USB_GADGET
818	bool "Suppport USB Gadget drivers"
819	help
820	  Enable USB Gadget API which allows to enable USB device functions
821	  in SPL.
822
823if SPL_USB_GADGET
824
825config SPL_USB_ETHER
826	bool "Support USB Ethernet drivers"
827	help
828	  Enable access to the USB network subsystem and associated
829	  drivers in SPL. This permits SPL to load U-Boot over a
830	  USB-connected Ethernet link (such as a USB Ethernet dongle) rather
831	  than from an onboard peripheral. Environment support is required
832	  since the network stack uses a number of environment variables.
833	  See also SPL_NET_SUPPORT and SPL_ETH_SUPPORT.
834
835config SPL_DFU
836	bool "Support DFU (Device Firmware Upgrade)"
837	select SPL_HASH_SUPPORT
838	select SPL_DFU_NO_RESET
839	depends on SPL_RAM_SUPPORT
840	help
841	  This feature enables the DFU (Device Firmware Upgrade) in SPL with
842	  RAM memory device support. The ROM code will load and execute
843	  the SPL built with dfu. The user can load binaries (u-boot/kernel) to
844	  selected device partition from host-pc using dfu-utils.
845	  This feature is useful to flash the binaries to factory or bare-metal
846	  boards using USB interface.
847
848choice
849	bool "DFU device selection"
850	depends on SPL_DFU
851
852config SPL_DFU_RAM
853	bool "RAM device"
854	depends on SPL_DFU && SPL_RAM_SUPPORT
855	help
856	 select RAM/DDR memory device for loading binary images
857	 (u-boot/kernel) to the selected device partition using
858	 DFU and execute the u-boot/kernel from RAM.
859
860endchoice
861
862config SPL_USB_SDP_SUPPORT
863	bool "Support SDP (Serial Download Protocol)"
864	help
865	  Enable Serial Download Protocol (SDP) device support in SPL. This
866	  allows to download images into memory and execute (jump to) them
867	  using the same protocol as implemented by the i.MX family's boot ROM.
868endif
869
870config SPL_WATCHDOG_SUPPORT
871	bool "Support watchdog drivers"
872	help
873	  Enable support for watchdog drivers in SPL. A watchdog is
874	  typically a hardware peripheral which can reset the system when it
875	  detects no activity for a while (such as a software crash). This
876	  enables the drivers in drivers/watchdog as part of an SPL build.
877
878config SPL_YMODEM_SUPPORT
879	bool "Support loading using Ymodem"
880	depends on SPL_SERIAL_SUPPORT
881	help
882	  While loading from serial is slow it can be a useful backup when
883	  there is no other option. The Ymodem protocol provides a reliable
884	  means of transmitting U-Boot over a serial line for using in SPL,
885	  with a checksum to ensure correctness.
886
887config SPL_ATF
888	bool "Support ARM Trusted Firmware"
889	depends on ARM64
890	help
891	  ATF(ARM Trusted Firmware) is a component for ARM AArch64 which
892	  is loaded by SPL (which is considered as BL2 in ATF terminology).
893	  More detail at: https://github.com/ARM-software/arm-trusted-firmware
894
895config SPL_ATF_NO_PLATFORM_PARAM
896        bool "Pass no platform parameter"
897	depends on SPL_ATF
898	help
899	  While we expect to call a pointer to a valid FDT (or NULL)
900	  as the platform parameter to an ATF, some ATF versions are
901	  not U-Boot aware and have an insufficiently robust parameter
902	  validation to gracefully reject a FDT being passed.
903
904	  If this option is enabled, the spl_atf os-type handler will
905	  always pass NULL for the platform parameter.
906
907	  If your ATF is affected, say Y.
908
909config SPL_AM33XX_ENABLE_RTC32K_OSC
910	bool "Enable the RTC32K OSC on AM33xx based platforms"
911	default y if AM33XX
912	help
913	  Enable access to the AM33xx RTC and select the external 32kHz clock
914	  source.
915
916config SPL_OPTEE
917	bool "Support OP-TEE Trusted OS"
918	depends on ARM
919	help
920	  OP-TEE is an open source Trusted OS  which is loaded by SPL.
921	  More detail at: https://github.com/OP-TEE/optee_os
922
923config TPL
924	bool
925	depends on SUPPORT_TPL
926	prompt "Enable TPL"
927	help
928	  If you want to build TPL as well as the normal image and SPL, say Y.
929
930if TPL
931
932config TPL_HANDOFF
933	bool "Pass hand-off information from TPL to SPL and U-Boot proper"
934	depends on HANDOFF
935	default y
936	help
937	  This option enables TPL to write handoff information. This can be
938	  used to pass information like the size of SDRAM from TPL to U-Boot
939	  proper. The information is also available to SPL if it is useful
940	  there.
941
942config TPL_BOARD_INIT
943	bool "Call board-specific initialization in TPL"
944	help
945	  If this option is enabled, U-Boot will call the function
946	  spl_board_init() from board_init_r(). This function should be
947	  provided by the board.
948
949config TPL_LDSCRIPT
950        string "Linker script for the TPL stage"
951	depends on TPL
952	default "arch/arm/cpu/armv8/u-boot-spl.lds" if ARM64
953	default "arch/$(ARCH)/cpu/u-boot-spl.lds"
954	help
955	  The TPL stage will usually require a different linker-script
956	  (as it runs from a different memory region) than the regular
957	  U-Boot stage.  Set this to the path of the linker-script to
958	  be used for TPL.
959
960	  May be left empty to trigger the Makefile infrastructure to
961	  fall back to the linker-script used for the SPL stage.
962
963config TPL_NEEDS_SEPARATE_TEXT_BASE
964        bool "TPL needs a separate text-base"
965	default n
966	depends on TPL
967	help
968	  Enable, if the TPL stage should not inherit its text-base
969	  from the SPL stage.  When enabled, a base address for the
970	  .text sections of the TPL stage has to be set below.
971
972config TPL_NEEDS_SEPARATE_STACK
973        bool "TPL needs a separate initial stack-pointer"
974	default n
975	depends on TPL
976	help
977	  Enable, if the TPL stage should not inherit its initial
978	  stack-pointer from the settings for the SPL stage.
979
980config TPL_TEXT_BASE
981        hex "Base address for the .text section of the TPL stage"
982	depends on TPL_NEEDS_SEPARATE_TEXT_BASE
983	help
984	  The base address for the .text section of the TPL stage.
985
986config TPL_MAX_SIZE
987        int "Maximum size (in bytes) for the TPL stage"
988	default 0
989	depends on TPL
990	help
991	  The maximum size (in bytes) of the TPL stage.
992
993config TPL_STACK
994        hex "Address of the initial stack-pointer for the TPL stage"
995	depends on TPL_NEEDS_SEPARATE_STACK
996	help
997	  The address of the initial stack-pointer for the TPL stage.
998	  Usually this will be the (aligned) top-of-stack.
999
1000config TPL_BOOTROM_SUPPORT
1001        bool "Support returning to the BOOTROM (from TPL)"
1002	help
1003	  Some platforms (e.g. the Rockchip RK3368) provide support in their
1004	  ROM for loading the next boot-stage after performing basic setup
1005	  from the TPL stage.
1006
1007	  Enable this option, to return to the BOOTROM through the
1008	  BOOT_DEVICE_BOOTROM (or fall-through to the next boot device in the
1009	  boot device list, if not implemented for a given board)
1010
1011config TPL_DRIVERS_MISC_SUPPORT
1012	bool "Support misc drivers in TPL"
1013	help
1014	  Enable miscellaneous drivers in TPL. These drivers perform various
1015	  tasks that don't fall nicely into other categories, Enable this
1016	  option to build the drivers in drivers/misc as part of an TPL
1017	  build, for those that support building in TPL (not all drivers do).
1018
1019config TPL_ENV_SUPPORT
1020	bool "Support an environment"
1021	help
1022	  Enable environment support in TPL. See SPL_ENV_SUPPORT for details.
1023
1024config TPL_GPIO_SUPPORT
1025	bool "Support GPIO in TPL"
1026	help
1027	  Enable support for GPIOs (General-purpose Input/Output) in TPL.
1028	  GPIOs allow U-Boot to read the state of an input line (high or
1029	  low) and set the state of an output line. This can be used to
1030	  drive LEDs, control power to various system parts and read user
1031	  input. GPIOs can be useful in TPL to enable a 'sign-of-life' LED,
1032	  for example. Enable this option to build the drivers in
1033	  drivers/gpio as part of an TPL build.
1034
1035config TPL_I2C_SUPPORT
1036	bool "Support I2C"
1037	help
1038	  Enable support for the I2C bus in TPL. See SPL_I2C_SUPPORT for
1039	  details.
1040
1041config TPL_LIBCOMMON_SUPPORT
1042	bool "Support common libraries"
1043	help
1044	  Enable support for common U-Boot libraries within TPL. See
1045	  SPL_LIBCOMMON_SUPPORT for details.
1046
1047config TPL_LIBGENERIC_SUPPORT
1048	bool "Support generic libraries"
1049	help
1050	  Enable support for generic U-Boot libraries within TPL. See
1051	  SPL_LIBGENERIC_SUPPORT for details.
1052
1053config TPL_MPC8XXX_INIT_DDR_SUPPORT
1054	bool "Support MPC8XXX DDR init"
1055	help
1056	  Enable support for DDR-SDRAM on the MPC8XXX family within TPL. See
1057	  SPL_MPC8XXX_INIT_DDR_SUPPORT for details.
1058
1059config TPL_MMC_SUPPORT
1060	bool "Support MMC"
1061	depends on MMC
1062	help
1063	  Enable support for MMC within TPL. See SPL_MMC_SUPPORT for details.
1064
1065config TPL_NAND_SUPPORT
1066	bool "Support NAND flash"
1067	help
1068	  Enable support for NAND in TPL. See SPL_NAND_SUPPORT for details.
1069
1070config TPL_PCI
1071	bool "Support PCI drivers"
1072	help
1073	  Enable support for PCI in TPL. For platforms that need PCI to boot,
1074	  or must perform some init using PCI in SPL, this provides the
1075	  necessary driver support. This enables the drivers in drivers/pci
1076	  as part of a TPL build.
1077
1078config TPL_PCH_SUPPORT
1079	bool "Support PCH drivers"
1080	help
1081	  Enable support for PCH (Platform Controller Hub) devices in TPL.
1082	  These are used to set up GPIOs and the SPI peripheral early in
1083	  boot. This enables the drivers in drivers/pch as part of a TPL
1084	  build.
1085
1086config TPL_RAM_SUPPORT
1087	bool "Support booting from RAM"
1088	help
1089	  Enable booting of an image in RAM. The image can be preloaded or
1090	  it can be loaded by TPL directly into RAM (e.g. using USB).
1091
1092config TPL_RAM_DEVICE
1093	bool "Support booting from preloaded image in RAM"
1094	depends on TPL_RAM_SUPPORT
1095	help
1096	  Enable booting of an image already loaded in RAM. The image has to
1097	  be already in memory when TPL takes over, e.g. loaded by the boot
1098	  ROM.
1099
1100config TPL_RTC_SUPPORT
1101	bool "Support RTC drivers"
1102	help
1103	  Enable RTC (Real-time Clock) support in TPL. This includes support
1104	  for reading and setting the time. Some RTC devices also have some
1105	  non-volatile (battery-backed) memory which is accessible if
1106	  needed. This enables the drivers in drivers/rtc as part of an TPL
1107	  build.
1108
1109config TPL_SERIAL_SUPPORT
1110	bool "Support serial"
1111	select TPL_PRINTF
1112	select TPL_STRTO
1113	help
1114	  Enable support for serial in TPL. See SPL_SERIAL_SUPPORT for
1115	  details.
1116
1117config TPL_SPI_FLASH_SUPPORT
1118	bool "Support SPI flash drivers"
1119	help
1120	  Enable support for using SPI flash in TPL. See SPL_SPI_FLASH_SUPPORT
1121	  for details.
1122
1123config TPL_SPI_LOAD
1124	bool "Support loading from SPI flash"
1125	depends on TPL_SPI_FLASH_SUPPORT
1126	help
1127	  Enable support for loading next stage, U-Boot or otherwise, from
1128	  SPI NOR in U-Boot TPL.
1129
1130config TPL_SPI_SUPPORT
1131	bool "Support SPI drivers"
1132	help
1133	  Enable support for using SPI in TPL. See SPL_SPI_SUPPORT for
1134	  details.
1135
1136config TPL_YMODEM_SUPPORT
1137	bool "Support loading using Ymodem"
1138	depends on TPL_SERIAL_SUPPORT
1139	help
1140	  While loading from serial is slow it can be a useful backup when
1141	  there is no other option. The Ymodem protocol provides a reliable
1142	  means of transmitting U-Boot over a serial line for using in TPL,
1143	  with a checksum to ensure correctness.
1144
1145endif # TPL
1146
1147endif # SPL
1148endmenu
1149