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