1menu "Console"
2
3config MENU
4	bool
5	help
6	  This is the library functionality to provide a text-based menu of
7	  choices for the user to make choices with.
8
9config CONSOLE_RECORD
10	bool "Console recording"
11	help
12	  This provides a way to record console output (and provide console
13	  input) through circular buffers. This is mostly useful for testing.
14	  Console output is recorded even when the console is silent.
15	  To enable console recording, call console_record_reset_enable()
16	  from your code.
17
18config CONSOLE_RECORD_INIT_F
19	bool "Enable console recording during pre-relocation init"
20	depends on CONSOLE_RECORD && SYS_MALLOC_F
21	default y
22	help
23	  This option enables console recording during pre-relocation init.
24	  CONFIG_SYS_MALLOC_F must be enabled to use this feature.
25
26config CONSOLE_RECORD_OUT_SIZE
27	hex "Output buffer size"
28	depends on CONSOLE_RECORD
29	default 0x400 if CONSOLE_RECORD
30	help
31	  Set the size of the console recording output buffer. When this fills
32	  up, no more data will be recorded until some is removed. The buffer
33	  is allocated immediately after the malloc() region is ready.
34
35config CONSOLE_RECORD_OUT_SIZE_F
36	hex "Output buffer size before relocation"
37	depends on CONSOLE_RECORD
38	default 0x400 if CONSOLE_RECORD
39	help
40	  Set the size of the console recording output buffer before
41	  relocation. When this fills up, no more data will be recorded until
42	  some is removed.  The buffer is allocated immediately after the early
43	  malloc() region is ready.
44
45config CONSOLE_RECORD_IN_SIZE
46	hex "Input buffer size"
47	depends on CONSOLE_RECORD
48	default 0x100 if CONSOLE_RECORD
49	help
50	  Set the size of the console recording input buffer. When this contains data,
51	  tstc() and getc() will use this in preference to real device input.
52	  The buffer is allocated immediately after the malloc() region is
53	  ready.
54
55config SYS_CBSIZE
56	int "Console input buffer size"
57	default 2048 if ARCH_TEGRA || ARCH_VERSAL || ARCH_ZYNQ || ARCH_ZYNQMP || \
58		RCAR_GEN3 || TARGET_SOCFPGA_SOC64
59	default 512 if ARCH_MX5 || ARCH_MX6 || ARCH_MX7 || FSL_LSCH2 || \
60		FSL_LSCH3 || X86
61	default 256 if M68K || PPC
62	default 1024
63	help
64	  Set the size of the console input buffer. This is used both in the
65	  case of reading input literally from the user in some manner as well
66	  as when we need to construct or modify that type of input, for
67	  example when constructing "bootargs" for the OS.
68
69config SYS_PBSIZE
70	int "Console output buffer size"
71	default 1024 if ARCH_SUNXI
72	default 1044
73	help
74	  Set the size of the console output buffer. This is used when we need
75	  to work with some form of a buffer while providing output in some
76	  form to the user.
77
78config DISABLE_CONSOLE
79	bool "Add functionality to disable console completely"
80	help
81		Disable console (in & out).
82
83config IDENT_STRING
84	string "Board specific string to be added to uboot version string"
85	help
86	  This options adds the board specific name to u-boot version.
87
88config LOGLEVEL
89	int "loglevel"
90	default 4
91	range 0 10
92	help
93	  All Messages with a loglevel smaller than the console loglevel will
94	  be compiled in. The loglevels are defined as follows:
95
96	    0 - emergency
97	    1 - alert
98	    2 - critical
99	    3 - error
100	    4 - warning
101	    5 - note
102	    6 - info
103	    7 - debug
104	    8 - debug content
105	    9 - debug hardware I/O
106
107config SPL_LOGLEVEL
108	int
109	depends on SPL
110	default LOGLEVEL
111
112config TPL_LOGLEVEL
113	int
114	depends on TPL
115	default LOGLEVEL
116
117config VPL_LOGLEVEL
118	int "loglevel for VPL"
119	depends on VPL
120	default LOGLEVEL
121	help
122	  All Messages with a loglevel smaller than the console loglevel will
123	  be compiled in to VPL. See LOGLEVEL for a list of available log
124	  levels. Setting this to a value above 4 may increase the code size
125	  significantly.
126
127config SILENT_CONSOLE
128	bool "Support a silent console"
129	help
130	  This option allows the console to be silenced, meaning that no
131	  output will appear on the console devices. This is controlled by
132	  setting the environment variable 'silent' to a non-empty value.
133	  Note this also silences the console when booting Linux.
134
135	  When the console is set up, the variable is checked, and the
136	  GD_FLG_SILENT flag is set. Changing the environment variable later
137	  will update the flag.
138
139config SPL_SILENT_CONSOLE
140	bool "Use a silent console in SPL"
141	default y if SILENT_CONSOLE && !SANDBOX
142	help
143	  This selects a silent console in SPL. When enabled it drops some
144	  output messages. The GD_FLG_SILENT flag is not used in SPL so there
145	  is no run-time control of console messages in SPL.
146
147	  Future work may allow the SPL console to be silenced completely using
148	  this option.
149
150config TPL_SILENT_CONSOLE
151	bool "Use a silent console in TPL"
152	default y if SILENT_CONSOLE && !SANDBOX
153	help
154	  This selects a silent console in TPL. When enabled it drops some
155	  output messages. The GD_FLG_SILENT flag is not used in TPL so there
156	  is no run-time control of console messages in TPL.
157
158	  Future work may allow the TPL console to be silenced completely using
159	  this option.
160
161config SILENT_U_BOOT_ONLY
162	bool "Only silence the U-Boot console"
163	depends on SILENT_CONSOLE
164	help
165	  Normally when the U-Boot console is silenced, Linux's console is
166	  also silenced (assuming the board boots into Linux). This option
167	  allows the linux console to operate normally, even if U-Boot's
168	  is silenced.
169
170config SILENT_CONSOLE_UPDATE_ON_SET
171	bool "Changes to the 'silent' environment variable update immediately"
172	depends on SILENT_CONSOLE
173	default y if SILENT_CONSOLE
174	help
175	  When the 'silent' environment variable is changed, update the
176	  console silence flag immediately. This allows 'setenv' to be used
177	  to silence or un-silence the console.
178
179	  The effect is that any change to the variable will affect the
180	  GD_FLG_SILENT flag.
181
182config SILENT_CONSOLE_UPDATE_ON_RELOC
183	bool "Allow flags to take effect on relocation"
184	depends on SILENT_CONSOLE
185	help
186	  In some cases the environment is not available until relocation
187	  (e.g. NAND). This option makes the value of the 'silent'
188	  environment variable take effect at relocation.
189
190config SILENT_CONSOLE_UNTIL_ENV
191	bool "Keep console silent until environment is loaded"
192	depends on SILENT_CONSOLE
193	help
194	  This option makes sure U-Boot will never use the console unless the
195	  environment from flash does not contain the 'silent' variable.  If
196	  set, the console is kept silent until after the environment was
197	  loaded.  Use this in combination with PRE_CONSOLE_BUFFER to print out
198	  earlier messages after loading the environment when allowed.
199
200config PRE_CONSOLE_BUFFER
201	bool "Buffer characters before the console is available"
202	help
203	  Prior to the console being initialised (i.e. serial UART
204	  initialised etc) all console output is silently discarded.
205	  Defining CONFIG_PRE_CONSOLE_BUFFER will cause U-Boot to
206	  buffer any console messages prior to the console being
207	  initialised to a buffer. The buffer is a circular buffer, so
208	  if it overflows, earlier output is discarded.
209
210	  Note that this is not currently supported in SPL. It would be
211	  useful to be able to share the pre-console buffer with SPL.
212
213config PRE_CON_BUF_SZ
214	int "Sets the size of the pre-console buffer"
215	depends on PRE_CONSOLE_BUFFER
216	default 4096
217	help
218	  The size of the pre-console buffer affects how much console output
219	  can be held before it overflows and starts discarding earlier
220	  output. Normally there is very little output at this early stage,
221	  unless debugging is enabled, so allow enough for ~10 lines of
222	  text.
223
224	  This is a useful feature if you are using a video console and
225	  want to see the full boot output on the console. Without this
226	  option only the post-relocation output will be displayed.
227
228config PRE_CON_BUF_ADDR
229	hex "Address of the pre-console buffer"
230	depends on PRE_CONSOLE_BUFFER
231	default 0x2f000000 if ARCH_SUNXI && MACH_SUN9I
232	default 0x4f000000 if ARCH_SUNXI && !MACH_SUN9I
233	default 0x0f000000 if ROCKCHIP_RK3288
234	default 0x0f200000 if ROCKCHIP_RK3399 || ROCKCHIP_RK3328
235	help
236	  This sets the start address of the pre-console buffer. This must
237	  be in available memory and is accessed before relocation and
238	  possibly before DRAM is set up. Therefore choose an address
239	  carefully.
240
241	  We should consider removing this option and allocating the memory
242	  in board_init_f_init_reserve() instead.
243
244config CONSOLE_FLUSH_SUPPORT
245	bool "Enable console flush support"
246	default y
247	help
248	  This enables compilation of flush() function for console flush support.
249
250config CONSOLE_FLUSH_ON_NEWLINE
251	bool "Flush console buffer on every newline character"
252	depends on DM_SERIAL
253	help
254	  This makes the serial core code flush the console device
255	  whenever a newline (\n) character has been emitted. This can
256	  be especially useful when "printf debugging", as otherwise
257	  lots of output could still be in the UART's FIFO by the time
258	  one hits the code which causes the CPU to hang or reset.
259
260config CONSOLE_MUX
261	bool "Enable console multiplexing"
262	default y if VIDEO || LCD
263	help
264	  This allows multiple devices to be used for each console 'file'.
265	  For example, stdout can be set to go to serial and video.
266	  Similarly, stdin can be set to come from serial and keyboard.
267	  Input can be provided from either source. Console multiplexing
268	  adds a small amount of size to U-Boot.  Changes to the environment
269	  variables stdout, stdin and stderr will take effect immediately.
270
271config SYS_CONSOLE_IS_IN_ENV
272	bool "Select console devices from the environment"
273	default y if CONSOLE_MUX
274	help
275	  This allows multiple input/output devices to be set at boot time.
276	  For example, if stdout is set to "serial,vidconsole" then output
277	  will be sent to both the serial and video devices on boot. The
278	  environment variables can be updated after boot to change the
279	  input/output devices.
280
281config SYS_CONSOLE_OVERWRITE_ROUTINE
282	bool "Allow board control over console overwriting"
283	help
284	  If this is enabled, and the board-specific function
285	  overwrite_console() returns 1, the stdin, stderr and stdout are
286	  switched to the serial port, else the settings in the environment
287	  are used. If this is not enabled, the console will not be switched
288	  to serial.
289
290config SYS_CONSOLE_ENV_OVERWRITE
291	bool "Update environment variables during console init"
292	depends on SYS_CONSOLE_IS_IN_ENV
293	help
294	  The console environment variables (stdout, stdin, stderr) can be
295	  used to determine the correct console devices on start-up. This
296	  option writes the console devices to these variables on console
297	  start-up (after relocation). This causes the environment to be
298	  updated to match the console devices actually chosen.
299
300config SYS_CONSOLE_INFO_QUIET
301	bool "Don't display the console devices on boot"
302	help
303	  Normally U-Boot displays the current settings for stdout, stdin
304	  and stderr on boot when the post-relocation console is set up.
305	  Enable this option to suppress this output. It can be obtained by
306	  calling stdio_print_current_devices() from board code.
307
308config SYS_STDIO_DEREGISTER
309	bool "Allow deregistering stdio devices"
310	default y if USB_KEYBOARD
311	help
312	  Generally there is no need to deregister stdio devices since they
313	  are never deactivated. But if a stdio device is used which can be
314	  removed (for example a USB keyboard) then this option can be
315	  enabled to ensure this is handled correctly.
316
317config SPL_SYS_STDIO_DEREGISTER
318	bool "Allow deregistering stdio devices in SPL"
319	help
320	  Generally there is no need to deregister stdio devices since they
321	  are never deactivated. But if a stdio device is used which can be
322	  removed (for example a USB keyboard) then this option can be
323	  enabled to ensure this is handled correctly. This is very rarely
324	  needed in SPL.
325
326config SYS_DEVICE_NULLDEV
327	bool "Enable a null device for stdio"
328	default y if SPLASH_SCREEN || SYS_STDIO_DEREGISTER
329	help
330	  Enable creation of a "nulldev" stdio device. This allows silent
331	  operation of the console by setting stdout to "nulldev". Enable
332	  this to use a serial console under board control.
333
334endmenu
335
336menu "Logging"
337
338config LOG
339	bool "Enable logging support"
340	depends on DM
341	help
342	  This enables support for logging of status and debug messages. These
343	  can be displayed on the console, recorded in a memory buffer, or
344	  discarded if not needed. Logging supports various categories and
345	  levels of severity.
346
347if LOG
348
349config LOG_MAX_LEVEL
350	int "Maximum log level to record"
351	default 6
352	range 0 9
353	help
354	  This selects the maximum log level that will be recorded. Any value
355	  higher than this will be ignored. If possible log statements below
356	  this level will be discarded at build time. Levels:
357
358	    0 - emergency
359	    1 - alert
360	    2 - critical
361	    3 - error
362	    4 - warning
363	    5 - note
364	    6 - info
365	    7 - debug
366	    8 - debug content
367	    9 - debug hardware I/O
368
369config LOG_DEFAULT_LEVEL
370	int "Default logging level to display"
371	default LOG_MAX_LEVEL
372	range 0 LOG_MAX_LEVEL
373	help
374	  This is the default logging level set when U-Boot starts. It can
375	  be adjusted later using the 'log level' command. Note that setting
376	  this to a value above LOG_MAX_LEVEL will be ineffective, since the
377	  higher levels are not compiled in to U-Boot.
378
379	    0 - emergency
380	    1 - alert
381	    2 - critical
382	    3 - error
383	    4 - warning
384	    5 - note
385	    6 - info
386	    7 - debug
387	    8 - debug content
388	    9 - debug hardware I/O
389
390config LOG_CONSOLE
391	bool "Allow log output to the console"
392	default y
393	help
394	  Enables a log driver which writes log records to the console.
395	  Generally the console is the serial port or LCD display. Only the
396	  log message is shown - other details like level, category, file and
397	  line number are omitted.
398
399config LOGF_FILE
400	bool "Show source file name in log messages by default"
401	help
402	  Show the source file name in log messages by default. This value
403	  can be overridden using the 'log format' command.
404
405config LOGF_LINE
406	bool "Show source line number in log messages by default"
407	help
408	  Show the source line number in log messages by default. This value
409	  can be overridden using the 'log format' command.
410
411config LOGF_FUNC
412	bool "Show function name in log messages by default"
413	help
414	  Show the function name in log messages by default. This value can
415	  be overridden using the 'log format' command.
416
417config LOGF_FUNC_PAD
418	int "Number of characters to use for function"
419	default 20
420	help
421	  Sets the field width to use when showing the function. Set this to
422	  a larger value if you have lots of long function names, and want
423	  things to line up.
424
425config LOG_SYSLOG
426	bool "Log output to syslog server"
427	depends on NET || NET_LWIP
428	help
429	  Enables a log driver which broadcasts log records via UDP port 514
430	  to syslog servers.
431
432config SPL_LOG
433	bool "Enable logging support in SPL"
434	depends on LOG && SPL
435	help
436	  This enables support for logging of status and debug messages. These
437	  can be displayed on the console, recorded in a memory buffer, or
438	  discarded if not needed. Logging supports various categories and
439	  levels of severity.
440
441if SPL_LOG
442
443config SPL_LOG_MAX_LEVEL
444	int "Maximum log level to record in SPL"
445	depends on SPL_LOG
446	default 3
447	range 0 9
448	help
449	  This selects the maximum log level that will be recorded. Any value
450	  higher than this will be ignored. If possible log statements below
451	  this level will be discarded at build time. Levels:
452
453	    0 - emergency
454	    1 - alert
455	    2 - critical
456	    3 - error
457	    4 - warning
458	    5 - note
459	    6 - info
460	    7 - debug
461	    8 - debug content
462	    9 - debug hardware I/O
463
464config SPL_LOG_CONSOLE
465	bool "Allow log output to the console in SPL"
466	default y
467	help
468	  Enables a log driver which writes log records to the console.
469	  Generally the console is the serial port or LCD display. Only the
470	  log message is shown - other details like level, category, file and
471	  line number are omitted.
472
473endif
474
475config TPL_LOG
476	bool "Enable logging support in TPL"
477	depends on LOG && TPL
478	help
479	  This enables support for logging of status and debug messages. These
480	  can be displayed on the console, recorded in a memory buffer, or
481	  discarded if not needed. Logging supports various categories and
482	  levels of severity.
483
484if TPL_LOG
485
486config TPL_LOG_MAX_LEVEL
487	int "Maximum log level to record in TPL"
488	depends on TPL_LOG
489	default 3
490	range 0 9
491	help
492	  This selects the maximum log level that will be recorded. Any value
493	  higher than this will be ignored. If possible log statements below
494	  this level will be discarded at build time. Levels:
495
496	    0 - emergency
497	    1 - alert
498	    2 - critical
499	    3 - error
500	    4 - warning
501	    5 - note
502	    6 - info
503	    7 - debug
504	    8 - debug content
505	    9 - debug hardware I/O
506
507config TPL_LOG_CONSOLE
508	bool "Allow log output to the console in TPL"
509	default y
510	help
511	  Enables a log driver which writes log records to the console.
512	  Generally the console is the serial port or LCD display. Only the
513	  log message is shown - other details like level, category, file and
514	  line number are omitted.
515
516endif
517
518config VPL_LOG
519	bool "Enable logging support in VPL"
520	depends on LOG && VPL
521	help
522	  This enables support for logging of status and debug messages. These
523	  can be displayed on the console, recorded in a memory buffer, or
524	  discarded if not needed. Logging supports various categories and
525	  levels of severity.
526
527if VPL_LOG
528
529config VPL_LOG_MAX_LEVEL
530	int "Maximum log level to record in VPL"
531	default 3
532	help
533	  This selects the maximum log level that will be recorded. Any value
534	  higher than this will be ignored. If possible log statements below
535	  this level will be discarded at build time. Levels:
536
537	    0 - emergency
538	    1 - alert
539	    2 - critical
540	    3 - error
541	    4 - warning
542	    5 - note
543	    6 - info
544	    7 - debug
545	    8 - debug content
546	    9 - debug hardware I/O
547
548config VPL_LOG_CONSOLE
549	bool "Allow log output to the console in VPL"
550	default y
551	help
552	  Enables a log driver which writes log records to the console.
553	  Generally the console is the serial port or LCD display. Only the
554	  log message is shown - other details like level, category, file and
555	  line number are omitted.
556
557endif
558
559config LOG_ERROR_RETURN
560	bool "Log all functions which return an error"
561	help
562	  When an error is returned in U-Boot it is sometimes difficult to
563	  figure out the root cause. For example, reading from SPI flash may
564	  fail due to a problem in the SPI controller or due to the flash part
565	  not returning the expected information. This option changes
566	  log_ret() to log any errors it sees. With this option disabled,
567	  log_ret() is a nop.
568
569	  You can add log_ret() to all functions which return an error code.
570
571config LOG_TEST
572	bool "Provide a test for logging"
573	depends on UNIT_TEST
574	default y if SANDBOX
575	help
576	  This enables a 'log test' command to test logging. It is normally
577	  executed from a pytest and simply outputs logging information
578	  in various different ways to test that the logging system works
579	  correctly with various settings.
580
581endif
582
583endmenu
584
585menu "Init options"
586
587config BOARD_TYPES
588	bool "Enable board_type entry in global data struct"
589	help
590	  If this option is enabled, a field will be added to the global
591	  data struct to store an unsigned long value for the type of
592	  platform that we have determined we are on, at run-time.
593
594config DISPLAY_CPUINFO
595	bool "Display information about the CPU during start up"
596	default y if ARC || ARM || NIOS2 || X86 || XTENSA || M68K
597	help
598	  Display information about the CPU that U-Boot is running on
599	  when U-Boot starts up. The function print_cpuinfo() is called
600	  to do this.
601
602config DISPLAY_BOARDINFO
603	bool "Display information about the board during early start up"
604	default y if ARC || ARM || M68K || MIPS || PPC || SANDBOX || XTENSA
605	help
606	  Display information about the board that U-Boot is running on
607	  when U-Boot starts up. The board function checkboard() is called
608	  to do this.
609
610config DISPLAY_BOARDINFO_LATE
611	bool "Display information about the board during late start up"
612	help
613	  Display information about the board that U-Boot is running on after
614	  the relocation phase. The board function checkboard() is called to do
615	  this.
616
617menu "Start-up hooks"
618
619config CYCLIC
620	bool "General-purpose cyclic execution mechanism"
621	help
622	  This enables a general-purpose cyclic execution infrastructure,
623	  to allow "small" (run-time wise) functions to be executed at
624	  a specified frequency. Things like LED blinking or watchdog
625	  triggering are examples for such tasks.
626
627if CYCLIC
628
629config SPL_CYCLIC
630	bool "General-purpose cyclic execution mechanism (SPL)"
631	help
632	  This enables a general-purpose cyclic execution infrastructure in SPL,
633	  to allow "small" (run-time wise) functions to be executed at
634	  a specified frequency. Things like LED blinking or watchdog
635	  triggering are examples for such tasks.
636
637config CYCLIC_MAX_CPU_TIME_US
638	int "Sets the max allowed time for a cyclic function in us"
639	default 100000 if SANDBOX  # sandbox video is quite slow
640	default 5000
641	help
642	  The max allowed time for a cyclic function in us. If a functions
643	  takes longer than this duration this function will get unregistered
644	  automatically.
645
646endif # CYCLIC
647
648config EVENT
649	bool
650	help
651	  This adds a framework for general purpose sending and processing of
652	  events, to allow interested parties to be alerted when something
653	  happens. This is an attempt to stem the flow of weak functions,
654	  hooks, functions in board_f.c and board_r.c and the Kconfig options
655	  below.
656
657	  See doc/develop/event.rst for more information.
658
659if EVENT
660
661config EVENT_DYNAMIC
662	bool
663	help
664	  Enable this to support adding an event spy at runtime, without adding
665	  it to the EVENT_SPY*() linker list. This increases code size slightly
666	  but provides more flexibility for boards and subsystems that need it.
667
668config EVENT_DEBUG
669	bool "Enable event debugging assistance"
670	default y if SANDBOX
671	help
672	  Enable this to get useful features for seeing what is happening with
673	  events, such as event-type names. This adds to the code size of
674	  U-Boot so can be turned off for production builds.
675
676config SPL_EVENT
677	bool  # General-purpose event-handling mechanism in SPL
678	depends on SPL
679	help
680	  This adds a framework for general purpose sending and processing of
681	  events, to allow interested parties to be alerted when something
682	  happens. This is an attempt to stem the flow of weak functions,
683	  hooks, functions in board_f.c and board_r.c and the Kconfig options
684	  below.
685
686	  See doc/develop/event.rst for more information.
687
688config SPL_EVENT_DYNAMIC
689	bool
690	depends on SPL_EVENT && EVENT_DYNAMIC
691	help
692	  Enable this to support adding an event spy at runtime, without adding
693	  it to the EVENT_SPY*() linker list. This increases code size slightly
694	  but provides more flexibility for boards and subsystems that need it.
695
696endif # EVENT
697
698config ARCH_EARLY_INIT_R
699	bool
700	help
701	  With this option U-Boot will call arch_early_init_r() soon after
702	  relocation. Driver model is running by this point, and the cache
703	  is on. Note that board_early_init_r() is called first, if
704	  enabled. This can be used to set up architecture-specific devices.
705
706config ARCH_MISC_INIT
707	bool
708	help
709	  Call arch-specific init after relocation, when console is ready.
710	  With this option U-Boot will call arch_misc_init() after
711	  relocation to allow miscellaneous arch-dependent initialisation
712	  to be performed. This function should be defined by the board
713	  and will be called after the console is set up, after relocation.
714
715config BOARD_EARLY_INIT_F
716	bool "Call board-specific init before relocation"
717	help
718	  Some boards need to perform initialisation as soon as possible
719	  after boot. With this option, U-Boot calls board_early_init_f()
720	  after driver model is ready in the pre-relocation init sequence.
721	  Note that the normal serial console is not yet set up, but the
722	  debug UART will be available if enabled.
723
724config BOARD_EARLY_INIT_R
725	bool "Call board-specific init after relocation"
726	help
727	  Some boards need to perform initialisation as directly after
728	  relocation. With this option, U-Boot calls board_early_init_r()
729	  in the post-relocation init sequence.
730
731config BOARD_INIT
732	bool "Call board-specific init board_init() during init-calls"
733	default y if ARM || RISCV || SANDBOX
734	help
735	  Some boards need an board_init() function called during the initcall
736	  phase of startup.
737
738config BOARD_POSTCLK_INIT
739	bool "Call board_postclk_init"
740	help
741	  Some boards need this to initialize select items, after clocks /
742	  timebase and before env / serial.
743
744config BOARD_LATE_INIT
745	bool "Execute Board late init"
746	help
747	  Sometimes board require some initialization code that might
748	  require once the actual init done, example saving board specific env,
749	  boot-modes etc. which eventually done at late.
750
751	  So this config enable the late init code with the help of board_late_init
752	  function which should defined on respective boards.
753
754config CLOCKS
755	bool "Call set_cpu_clk_info"
756	depends on ARM
757
758config HWCONFIG
759	bool "hwconfig infrastructure"
760	default y if PPC || ARCH_LS1021A || FSL_LSCH2 || FSL_LSCH3
761
762config SYS_FSL_CLK
763	bool
764	depends on ARCH_LS1021A || FSL_LSCH2 || FSL_LSCH3 || \
765		(FSL_ESDHC_IMX && (ARCH_MX5 || ARCH_MX6 || ARCH_MX7))
766	default y
767	help
768	  Enable to call get_clocks() in board_init_f() for platforms other
769	  than PowerPC or M68k.  This is a legacy option.  If not TARGET_BRPPT2
770
771config LAST_STAGE_INIT
772	bool "Call board-specific as last setup step"
773	select EVENT
774	help
775	  Some boards need to perform initialisation immediately before control
776	  is passed to the command-line interpreter (e.g. for initializations
777	  that depend on later phases in the init sequence). With this option,
778	  U-Boot calls last_stage_init() before the command-line interpreter is
779	  started.
780
781config MISC_INIT_R
782	bool "Execute Misc Init"
783	default y if ARCH_KEYSTONE || ARCH_SUNXI || MPC85xx
784	default y if ARCH_OMAP2PLUS && !AM33XX
785	help
786	  Enabling this option calls 'misc_init_r' function
787
788config SYS_MALLOC_BOOTPARAMS
789	bool "Malloc a buffer to use for bootparams"
790	help
791	  In some cases rather than using a known location to store the
792	  bi_boot_params portion of gd we need to allocate it from our malloc pool.
793
794config SYS_BOOTPARAMS_LEN
795	hex "Size of the bootparam buffer to malloc in bytes"
796	depends on SYS_MALLOC_BOOTPARAMS
797	default 0x20000 if MIPS || RCAR_64
798	default 0x10000
799
800config ID_EEPROM
801	bool "Enable I2C connected system identifier EEPROM"
802	help
803	  A number of different systems and vendors enable a vendor-specified
804	  EEPROM that contains various identifying features.
805
806config SYS_EEPROM_BUS_NUM
807	int "I2C bus number of the system identifier EEPROM"
808	depends on ID_EEPROM
809	default 0
810
811choice
812	prompt "EEPROM starts with 'CCID' or 'NXID'"
813	depends on ID_EEPROM && (PPC || ARCH_LS1021A || FSL_LAYERSCAPE)
814	default SYS_I2C_EEPROM_NXID
815	help
816	  Specify if the Freescale / NXP ID EEPROM starts with 'CCID' or 'NXID'
817	  ASCII literal string.
818
819config SYS_I2C_EEPROM_CCID
820	bool "EEPROM starts with 'CCID'"
821
822config SYS_I2C_EEPROM_NXID
823	bool "EEPROM starts with 'NXID'"
824
825endchoice
826
827config PCI_INIT_R
828	bool "Enumerate PCI buses during init"
829	depends on PCI
830	help
831	  With this option U-Boot will call pci_init() soon after relocation,
832	  which will enumerate PCI buses. This is needed, for instance, in the
833	  case of DM PCI-based Ethernet devices, which will not be detected
834	  without having the enumeration performed earlier.
835
836config RESET_PHY_R
837	bool "Reset ethernet PHY during init"
838	help
839	  Implement reset_phy() in board code if required to reset the ethernet
840	  PHY.
841
842endmenu
843
844endmenu		# Init options
845
846menu "Security support"
847
848config HASH
849	bool # "Support hashing API (SHA1, SHA256, etc.)"
850	help
851	  This provides a way to hash data in memory using various supported
852	  algorithms (such as SHA1, MD5, CRC32). The API is defined in hash.h
853	  and the algorithms it supports are defined in common/hash.c. See
854	  also CMD_HASH for command-line access.
855
856config HASH_CRC8
857	bool "Make crc8 available via the hash API"
858	depends on HASH && CRC8
859	help
860	  Most times, the crc8() function is called directly. To make it also
861	  available via the hash API, e.g. in hash_block(), enable this
862	  option.
863
864config AVB_VERIFY
865	bool "Build Android Verified Boot operations"
866	depends on LIBAVB
867	depends on MMC
868	depends on PARTITION_UUIDS
869	depends on FASTBOOT
870	help
871	  This option enables compilation of bootloader-dependent operations,
872	  used by Android Verified Boot 2.0 library (libavb). Includes:
873	    * Helpers to process strings in order to build OS bootargs.
874	    * Helpers to access MMC, similar to drivers/fastboot/fb_mmc.c.
875	    * Helpers to alloc/init/free avb ops.
876
877if AVB_VERIFY
878
879config AVB_BUF_ADDR
880	hex "Define AVB buffer address"
881	default FASTBOOT_BUF_ADDR
882	help
883	  AVB requires a buffer for memory transactions. This variable defines the
884	  buffer address.
885
886config AVB_BUF_SIZE
887	hex "Define AVB buffer SIZE"
888	default FASTBOOT_BUF_SIZE
889	help
890	  AVB requires a buffer for memory transactions. This variable defines the
891	  buffer size.
892
893endif # AVB_VERIFY
894
895config SCP03
896	bool "Build SCP03 - Secure Channel Protocol O3 - controls"
897	depends on OPTEE || SANDBOX
898	depends on TEE
899	help
900	  This option allows U-Boot to enable and or provision SCP03 on an OPTEE
901	  controlled Secured Element.
902
903config SPL_HASH
904	bool # "Support hashing API (SHA1, SHA256, etc.)"
905	help
906	  This provides a way to hash data in memory using various supported
907	  algorithms (such as SHA1, MD5, CRC32). The API is defined in hash.h
908	  and the algorithms it supports are defined in common/hash.c. See
909	  also CMD_HASH for command-line access.
910
911config TPL_HASH
912	bool # "Support hashing API (SHA1, SHA256, etc.)"
913	help
914	  This provides a way to hash data in memory using various supported
915	  algorithms (such as SHA1, MD5, CRC32). The API is defined in hash.h
916	  and the algorithms it supports are defined in common/hash.c. See
917	  also CMD_HASH for command-line access.
918
919config STACKPROTECTOR
920	bool "Stack Protector buffer overflow detection"
921	help
922	  Enable stack smash detection through compiler's stack-protector
923	  canary logic
924
925config MMU_PGPROT
926	bool "Enable RO, RW and RX mappings"
927	help
928	  U-Boot maps all pages as RWX. If selected pages will
929	  be marked as RO(.rodata), RX(.text), RW(.data) right after
930	  we relocate. Since code sections needs to be page aligned
931	  the final binary size will increase. The mappings can be dumped
932	  using the 'meminfo' command.
933
934	  Enabling this feature can expose bugs in U-Boot where we have
935	  code that violates read-only permissions for example. Use this
936	  feature with caution.
937
938config SPL_STACKPROTECTOR
939	bool "Stack Protector buffer overflow detection for SPL"
940	depends on STACKPROTECTOR && SPL
941
942config TPL_STACKPROTECTOR
943	bool "Stack Protector buffer overflow detection for TPL"
944	depends on STACKPROTECTOR && TPL
945
946config BOARD_RNG_SEED
947	bool "Provide /chosen/rng-seed property to the linux kernel"
948	help
949	  Selecting this option requires the board to define a
950	  board_rng_seed() function, which should return a buffer
951	  which will be used to populate the /chosen/rng-seed property
952	  in the device tree for the OS being booted.
953
954	  It is up to the board code (and more generally the whole
955	  BSP) where and how to store (or generate) such a seed, how
956	  to ensure a given seed is only used once, how to create a
957	  new seed for use on subsequent boots, and whether or not the
958	  kernel should account any entropy from the given seed.
959
960	  Default seed size (64 bytes) can be overridden by a decimal
961	  environment variable rng_seed_size.
962
963endmenu
964
965menu "Update support"
966
967config UPDATE_COMMON
968	bool
969	select DFU_WRITE_ALT
970	imply CMD_TFTPBOOT
971
972config UPDATE_TFTP
973	bool "Auto-update using fitImage via TFTP"
974	depends on FIT && OF_LIBFDT && !MTD_NOR_FLASH
975	select UPDATE_COMMON
976	help
977	  This option allows performing update of NOR with data in fitImage
978	  sent via TFTP boot.
979
980config UPDATE_TFTP_CNT_MAX
981	int "The number of connection retries during auto-update"
982	default 0
983	depends on UPDATE_TFTP || DFU_TFTP
984
985config UPDATE_TFTP_MSEC_MAX
986	int "Delay in mSec to wait for the TFTP server during auto-update"
987	default 100
988	depends on UPDATE_TFTP || DFU_TFTP
989
990config UPDATE_LOAD_ADDR
991	hex "Address in memory to load the update to"
992	depends on UPDATE_TFTP || DFU_TFTP
993	default 0x100000
994	help
995	  This option defines the location in memory to be used to load the
996	  update to, if 'loadaddr' is not set in the environment.
997
998config UPDATE_FIT
999	bool "Firmware update using fitImage"
1000	depends on FIT && OF_LIBFDT
1001	depends on DFU
1002	select UPDATE_COMMON
1003	help
1004	  This option allows performing update of DFU-capable storage with
1005	  data in fitImage.
1006
1007config ANDROID_AB
1008	bool "Android A/B updates"
1009	help
1010	  If enabled, adds support for the new Android A/B update model. This
1011	  allows the bootloader to select which slot to boot from based on the
1012	  information provided by userspace via the Android boot_ctrl HAL. This
1013	  allows a bootloader to try a new version of the system but roll back
1014	  to previous version if the new one didn't boot all the way.
1015
1016config ANDROID_AB_BACKUP_OFFSET
1017	hex "Offset of backup bootloader control"
1018	depends on ANDROID_AB
1019	default 0x0
1020	help
1021	  If non-zero, a backup bootloader message starting at this offset in
1022	  the partition will tried in the event that the primary one (starting
1023	  at offset 0) fails its checksum. The offset is in bytes and must be
1024	  multiple of the block size.
1025
1026endmenu
1027
1028menu "Blob list"
1029
1030config BLOBLIST
1031	bool "Support for a bloblist"
1032	select CRC32
1033	help
1034	  This enables support for a bloblist in U-Boot, which can be passed
1035	  from TPL to SPL to U-Boot proper (and potentially to Linux). The
1036	  blob list supports multiple binary blobs of data, each with a tag,
1037	  so that different U-Boot components can store data which can survive
1038	  through to the next phase of the boot.
1039
1040config SPL_BLOBLIST
1041	bool "Support for a bloblist in SPL"
1042	depends on BLOBLIST && SPL_LIBGENERIC_SUPPORT && SPL_LIBCOMMON_SUPPORT
1043	select SPL_CRC32
1044	default y if SPL
1045	help
1046	  This enables a bloblist in SPL. If this is the first part of U-Boot
1047	  to run, then the bloblist is set up in SPL and passed to U-Boot
1048	  proper. If TPL also has a bloblist, then SPL uses the one from there.
1049
1050config TPL_BLOBLIST
1051	bool "Support for a bloblist in TPL"
1052	depends on BLOBLIST && TPL_LIBGENERIC_SUPPORT && TPL_LIBCOMMON_SUPPORT
1053	select TPL_CRC32
1054	default y if TPL
1055	help
1056	  This enables a bloblist in TPL. The bloblist is set up in TPL and
1057	  passed to SPL and U-Boot proper.
1058
1059config VPL_BLOBLIST
1060	bool "Support for a bloblist in VPL"
1061	depends on BLOBLIST && VPL_LIBGENERIC_SUPPORT && VPL_LIBCOMMON_SUPPORT
1062	default y if VPL
1063	help
1064	  This enables a bloblist in VPL. The bloblist is set up in VPL and
1065	  passed to SPL and U-Boot proper.
1066
1067if BLOBLIST
1068
1069choice
1070	prompt "Bloblist location"
1071	default BLOBLIST_FIXED if SANDBOX
1072	default BLOBLIST_ALLOC
1073	help
1074	  Select the location of the bloblist, via various means.
1075
1076config BLOBLIST_FIXED
1077	bool "Place bloblist at a fixed address in memory"
1078	help
1079	  Select this to use a fixed memory address for the bloblist. If the
1080	  bloblist exists at this address from a previous phase, it is used as is.
1081	  If not it is created at this address in U-Boot.
1082
1083config BLOBLIST_ALLOC
1084	bool "Allocate bloblist"
1085	help
1086	  Allocate the bloblist using malloc(). This avoids the need to
1087	  specify a fixed address on systems where this is unknown or can
1088	  change at runtime.
1089
1090config BLOBLIST_PASSAGE_MANDATORY
1091	bool "Use bloblist in-place mandatorily"
1092	help
1093	  By default U-Boot will use a bloblist in the incoming standard passage.
1094	  This option controls whether U-Boot tries to load a static bloblist or
1095	  allocate one if a valid incoming bloblist does not exist.
1096	  Select this option to mark incoming standard passage as mandatory and
1097	  U-Boot will report an error when a valid incoming bloblist does not
1098	  exist.
1099
1100endchoice
1101
1102config BLOBLIST_ADDR
1103	hex "Address of bloblist"
1104	default 0x100 if SANDBOX
1105	depends on BLOBLIST_FIXED
1106	help
1107	  Sets the address of the bloblist, set up by the first part of U-Boot
1108	  which runs. Subsequent U-Boot phases typically use the same address.
1109
1110	  This is not used if BLOBLIST_ALLOC is selected.
1111
1112config BLOBLIST_SIZE
1113	hex "Size of bloblist"
1114	default 0x0 if BLOBLIST_PASSAGE_MANDATORY
1115	default 0x400
1116	help
1117	  Sets the size of the bloblist in bytes. This must include all
1118	  overhead (alignment, bloblist header, record header). The bloblist
1119	  is set up in the first part of U-Boot to run (TPL, SPL or U-Boot
1120	  proper), and this same bloblist is used for subsequent phases.
1121
1122config BLOBLIST_SIZE_RELOC
1123	hex "Size of bloblist after relocation"
1124	default BLOBLIST_SIZE if BLOBLIST_FIXED || BLOBLIST_ALLOC
1125	default 0x20000 if (ARM && EFI_LOADER && GENERATE_ACPI_TABLE)
1126	help
1127	  Sets the size of the bloblist in bytes after relocation. Since U-Boot
1128	  has a lot more memory available then, it is possible to use a larger
1129	  size than the one set up by SPL. This bloblist is set up during the
1130	  relocation process.
1131
1132endif # BLOBLIST
1133
1134if SPL_BLOBLIST
1135
1136choice
1137	prompt "Bloblist location in SPL"
1138	help
1139	  Select the location of the bloblist, via various means. Typically
1140	  you should use the same value for SPL as for U-Boot, since they need
1141	  to look in the same place. But if BLOBLIST_ALLOC is used, then a
1142	  fresh bloblist will be created each time, since there is no shared
1143	  address (between phases) for the bloblist.
1144
1145config SPL_BLOBLIST_FIXED
1146	bool "Place bloblist at a fixed address in memory"
1147	help
1148	  Select this to used a fixed memory address for the bloblist. If the
1149	  bloblist exists at this address from a previous phase, it used as is.
1150	  If not it is created at this address in SPL.
1151
1152config SPL_BLOBLIST_ALLOC
1153	bool "Allocate bloblist"
1154	help
1155	  Allocate the bloblist using malloc(). This avoids the need to
1156	  specify a fixed address on systems where this is unknown or can
1157	  change at runtime.
1158
1159endchoice
1160
1161endif # SPL_BLOBLIST
1162
1163if TPL_BLOBLIST
1164
1165choice
1166	prompt "Bloblist location in TPL"
1167	help
1168	  Select the location of the bloblist, via various means. Typically
1169	  you should use the same value for TPL as for U-Boot, since they need
1170	  to look in the same place. But if BLOBLIST_ALLOC is used, then a
1171	  fresh bloblist will be created each time, since there is no shared
1172	  address (between phases) for the bloblist.
1173
1174config TPL_BLOBLIST_FIXED
1175	bool "Place bloblist at a fixed address in memory"
1176	help
1177	  Select this to used a fixed memory address for the bloblist. If the
1178	  bloblist exists at this address from a previous phase, it used as is.
1179	  If not it is created at this address in TPL.
1180
1181config TPL_BLOBLIST_ALLOC
1182	bool "Allocate bloblist"
1183	help
1184	  Allocate the bloblist using malloc(). This avoids the need to
1185	  specify a fixed address on systems where this is unknown or can
1186	  change at runtime.
1187
1188endchoice
1189
1190endif # TPL_BLOBLIST
1191
1192if VPL_BLOBLIST
1193
1194choice
1195	prompt "Bloblist location in VPL"
1196	help
1197	  Select the location of the bloblist, via various means. Typically
1198	  you should use the same value for VPL as for U-Boot, since they need
1199	  to look in the same place. But if BLOBLIST_ALLOC is used, then a
1200	  fresh bloblist will be created each time, since there is no shared
1201	  address (between phases) for the bloblist.
1202
1203config VPL_BLOBLIST_FIXED
1204	bool "Place bloblist at a fixed address in memory"
1205	help
1206	  Select this to used a fixed memory address for the bloblist. If the
1207	  bloblist exists at this address from a previous phase, it used as is.
1208	  If not it is created at this address in VPL.
1209
1210config VPL_BLOBLIST_ALLOC
1211	bool "Allocate bloblist"
1212	help
1213	  Allocate the bloblist using malloc(). This avoids the need to
1214	  specify a fixed address on systems where this is unknown or can
1215	  change at runtime.
1216
1217endchoice
1218
1219endif # VPL_BLOBLIST
1220
1221endmenu
1222
1223source "common/spl/Kconfig"
1224
1225config IMAGE_SIGN_INFO
1226	bool
1227	select SHA1
1228	select SHA256
1229	help
1230	  Enable image_sign_info helper functions.
1231
1232if IMAGE_SIGN_INFO
1233
1234config SPL_IMAGE_SIGN_INFO
1235	bool
1236	select SHA1
1237	select SHA256
1238	help
1239	  Enable image_sign_info helper functions in SPL.
1240
1241config VPL_IMAGE_SIGN_INFO
1242	bool
1243	select SHA1
1244	select SHA256
1245	help
1246	  Enable image_sign_info helper functions in SPL.
1247
1248endif
1249
1250config IO_TRACE
1251	bool
1252