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