xref: /openbmc/u-boot/common/Kconfig (revision bb597c0eeb7ee2f6e983577d993c76a30dd3c2b4)
1ee2b2434SSimon Glassmenu "Boot timing"
2ee2b2434SSimon Glass
3ee2b2434SSimon Glassconfig BOOTSTAGE
4ee2b2434SSimon Glass	bool "Boot timing and reporting"
5ee2b2434SSimon Glass	help
6ee2b2434SSimon Glass	  Enable recording of boot time while booting. To use it, insert
7ee2b2434SSimon Glass	  calls to bootstage_mark() with a suitable BOOTSTAGE_ID from
8ee2b2434SSimon Glass	  bootstage.h. Only a single entry is recorded for each ID. You can
9ee2b2434SSimon Glass	  give the entry a name with bootstage_mark_name(). You can also
10ee2b2434SSimon Glass	  record elapsed time in a particular stage using bootstage_start()
11ee2b2434SSimon Glass	  before starting and bootstage_accum() when finished. Bootstage will
12ee2b2434SSimon Glass	  add up all the accumated time and report it.
13ee2b2434SSimon Glass
14ee2b2434SSimon Glass	  Normally, IDs are defined in bootstage.h but a small number of
15ee2b2434SSimon Glass	  additional 'user' IDs can be used but passing BOOTSTAGE_ID_ALLOC
16ee2b2434SSimon Glass	  as the ID.
17ee2b2434SSimon Glass
18ee2b2434SSimon Glass	  Calls to show_boot_progress() wil also result in log entries but
19ee2b2434SSimon Glass	  these will not have names.
20ee2b2434SSimon Glass
21ee2b2434SSimon Glassconfig BOOTSTAGE_REPORT
22ee2b2434SSimon Glass	bool "Display a detailed boot timing report before booting the OS"
23ee2b2434SSimon Glass	depends on BOOTSTAGE
24ee2b2434SSimon Glass	help
25ee2b2434SSimon Glass	  Enable output of a boot time report just before the OS is booted.
26ee2b2434SSimon Glass	  This shows how long it took U-Boot to go through each stage of the
27ee2b2434SSimon Glass	  boot process. The report looks something like this:
28ee2b2434SSimon Glass
29ee2b2434SSimon Glass		Timer summary in microseconds:
30ee2b2434SSimon Glass		       Mark    Elapsed  Stage
31ee2b2434SSimon Glass			  0          0  reset
32ee2b2434SSimon Glass		  3,575,678  3,575,678  board_init_f start
33ee2b2434SSimon Glass		  3,575,695         17  arch_cpu_init A9
34ee2b2434SSimon Glass		  3,575,777         82  arch_cpu_init done
35ee2b2434SSimon Glass		  3,659,598     83,821  board_init_r start
36ee2b2434SSimon Glass		  3,910,375    250,777  main_loop
37ee2b2434SSimon Glass		 29,916,167 26,005,792  bootm_start
38ee2b2434SSimon Glass		 30,361,327    445,160  start_kernel
39ee2b2434SSimon Glass
40ee2b2434SSimon Glassconfig BOOTSTAGE_USER_COUNT
41ee2b2434SSimon Glass	hex "Number of boot ID numbers available for user use"
42ee2b2434SSimon Glass	default 20
43ee2b2434SSimon Glass	help
44ee2b2434SSimon Glass	  This is the number of available user bootstage records.
45ee2b2434SSimon Glass	  Each time you call bootstage_mark(BOOTSTAGE_ID_ALLOC, ...)
46ee2b2434SSimon Glass	  a new ID will be allocated from this stash. If you exceed
47ee2b2434SSimon Glass	  the limit, recording will stop.
48ee2b2434SSimon Glass
49ee2b2434SSimon Glassconfig BOOTSTAGE_FDT
50ee2b2434SSimon Glass	bool "Store boot timing information in the OS device tree"
51ee2b2434SSimon Glass	depends on BOOTSTAGE
52ee2b2434SSimon Glass	help
53ee2b2434SSimon Glass	  Stash the bootstage information in the FDT. A root 'bootstage'
54ee2b2434SSimon Glass	  node is created with each bootstage id as a child. Each child
55ee2b2434SSimon Glass	  has a 'name' property and either 'mark' containing the
56ee2b2434SSimon Glass	  mark time in microsecond, or 'accum' containing the
57ee2b2434SSimon Glass	  accumulated time for that bootstage id in microseconds.
58ee2b2434SSimon Glass	  For example:
59ee2b2434SSimon Glass
60ee2b2434SSimon Glass		bootstage {
61ee2b2434SSimon Glass			154 {
62ee2b2434SSimon Glass				name = "board_init_f";
63ee2b2434SSimon Glass				mark = <3575678>;
64ee2b2434SSimon Glass			};
65ee2b2434SSimon Glass			170 {
66ee2b2434SSimon Glass				name = "lcd";
67ee2b2434SSimon Glass				accum = <33482>;
68ee2b2434SSimon Glass			};
69ee2b2434SSimon Glass		};
70ee2b2434SSimon Glass
71ee2b2434SSimon Glass	  Code in the Linux kernel can find this in /proc/devicetree.
72ee2b2434SSimon Glass
73ee2b2434SSimon Glassconfig BOOTSTAGE_STASH
74ee2b2434SSimon Glass	bool "Stash the boot timing information in memory before booting OS"
75ee2b2434SSimon Glass	depends on BOOTSTAGE
76ee2b2434SSimon Glass	help
77ee2b2434SSimon Glass	  Some OSes do not support device tree. Bootstage can instead write
78ee2b2434SSimon Glass	  the boot timing information in a binary format at a given address.
79ee2b2434SSimon Glass	  This happens through a call to bootstage_stash(), typically in
80ee2b2434SSimon Glass	  the CPU's cleanup_before_linux() function. You can use the
81ee2b2434SSimon Glass	  'bootstage stash' and 'bootstage unstash' commands to do this on
82ee2b2434SSimon Glass	  the command line.
83ee2b2434SSimon Glass
84ee2b2434SSimon Glassconfig BOOTSTAGE_STASH_ADDR
85ee2b2434SSimon Glass	hex "Address to stash boot timing information"
86ee2b2434SSimon Glass	default 0
87ee2b2434SSimon Glass	help
88ee2b2434SSimon Glass	  Provide an address which will not be overwritten by the OS when it
89ee2b2434SSimon Glass	  starts, so that it can read this information when ready.
90ee2b2434SSimon Glass
91ee2b2434SSimon Glassconfig BOOTSTAGE_STASH_SIZE
92ee2b2434SSimon Glass	hex "Size of boot timing stash region"
93ee2b2434SSimon Glass	default 4096
94ee2b2434SSimon Glass	help
95ee2b2434SSimon Glass	  This should be large enough to hold the bootstage stash. A value of
96ee2b2434SSimon Glass	  4096 (4KiB) is normally plenty.
97ee2b2434SSimon Glass
98ee2b2434SSimon Glassendmenu
99ee2b2434SSimon Glass
100*bb597c0eSHeiko Schocherconfig BOOTDELAY
101*bb597c0eSHeiko Schocher	int "delay in seconds before automatically booting"
102*bb597c0eSHeiko Schocher	default 0
103*bb597c0eSHeiko Schocher	help
104*bb597c0eSHeiko Schocher	  Delay before automatically running bootcmd;
105*bb597c0eSHeiko Schocher	  set to -1 to disable autoboot.
106*bb597c0eSHeiko Schocher	  set to -2 to autoboot with no delay and not check for abort
107*bb597c0eSHeiko Schocher	  (even when CONFIG_ZERO_BOOTDELAY_CHECK is defined).
108*bb597c0eSHeiko Schocher
1099854a874SSimon Glassconfig CONSOLE_RECORD
1109854a874SSimon Glass	bool "Console recording"
1119854a874SSimon Glass	help
1129854a874SSimon Glass	  This provides a way to record console output (and provide console
1139854a874SSimon Glass	  input) through cirular buffers. This is mostly useful for testing.
1149854a874SSimon Glass	  Console output is recorded even when the console is silent.
1159854a874SSimon Glass	  To enable console recording, call console_record_reset_enable()
1169854a874SSimon Glass	  from your code.
1179854a874SSimon Glass
1189854a874SSimon Glassconfig CONSOLE_RECORD_OUT_SIZE
1199854a874SSimon Glass	hex "Output buffer size"
1209854a874SSimon Glass	depends on CONSOLE_RECORD
1219854a874SSimon Glass	default 0x400 if CONSOLE_RECORD
1229854a874SSimon Glass	help
1239854a874SSimon Glass	  Set the size of the console output buffer. When this fills up, no
1249854a874SSimon Glass	  more data will be recorded until some is removed. The buffer is
1259854a874SSimon Glass	  allocated immediately after the malloc() region is ready.
1269854a874SSimon Glass
1279854a874SSimon Glassconfig CONSOLE_RECORD_IN_SIZE
1289854a874SSimon Glass	hex "Input buffer size"
1299854a874SSimon Glass	depends on CONSOLE_RECORD
1309854a874SSimon Glass	default 0x100 if CONSOLE_RECORD
1319854a874SSimon Glass	help
1329854a874SSimon Glass	  Set the size of the console input buffer. When this contains data,
1339854a874SSimon Glass	  tstc() and getc() will use this in preference to real device input.
1349854a874SSimon Glass	  The buffer is allocated immediately after the malloc() region is
1359854a874SSimon Glass	  ready.
136