Kconfig: Move CONFIG_BOOTSTAGE to Kconfig

Move CONFIG_BOOT_STAGE and its associated options to Kconfig. Adjust
existing users and code.

Signed-off-by: Simon Glass <sjg@chromium.org>
master
Simon Glass 9 years ago
parent 5c4f9c1d72
commit ee2b24340f
  1. 49
      README
  2. 9
      arch/x86/Kconfig
  3. 2
      arch/x86/cpu/cpu.c
  4. 106
      common/Kconfig
  5. 7
      common/cmd_bootstage.c
  6. 2
      configs/sandbox_defconfig
  7. 2
      include/bootstage.h
  8. 3
      include/configs/sandbox.h
  9. 3
      include/configs/x86-common.h

@ -3198,55 +3198,6 @@ CBFS (Coreboot Filesystem) support
example, some LED's) on your board. At the moment,
the following checkpoints are implemented:
- Detailed boot stage timing
CONFIG_BOOTSTAGE
Define this option to get detailed timing of each stage
of the boot process.
CONFIG_BOOTSTAGE_USER_COUNT
This is the number of available user bootstage records.
Each time you call bootstage_mark(BOOTSTAGE_ID_ALLOC, ...)
a new ID will be allocated from this stash. If you exceed
the limit, recording will stop.
CONFIG_BOOTSTAGE_REPORT
Define this to print a report before boot, similar to this:
Timer summary in microseconds:
Mark Elapsed Stage
0 0 reset
3,575,678 3,575,678 board_init_f start
3,575,695 17 arch_cpu_init A9
3,575,777 82 arch_cpu_init done
3,659,598 83,821 board_init_r start
3,910,375 250,777 main_loop
29,916,167 26,005,792 bootm_start
30,361,327 445,160 start_kernel
CONFIG_CMD_BOOTSTAGE
Add a 'bootstage' command which supports printing a report
and un/stashing of bootstage data.
CONFIG_BOOTSTAGE_FDT
Stash the bootstage information in the FDT. A root 'bootstage'
node is created with each bootstage id as a child. Each child
has a 'name' property and either 'mark' containing the
mark time in microsecond, or 'accum' containing the
accumulated time for that bootstage id in microseconds.
For example:
bootstage {
154 {
name = "board_init_f";
mark = <3575678>;
};
170 {
name = "lcd";
accum = <33482>;
};
};
Code in the Linux kernel can find this in /proc/devicetree.
Legacy uImage format:

@ -465,4 +465,13 @@ config PCIE_ECAM_BASE
assigned to PCI devices - i.e. the memory and prefetch regions, as
passed to pci_set_region().
config BOOTSTAGE
default y
config BOOTSTAGE_REPORT
default y
config CMD_BOOTSTAGE
default y
endmenu

@ -163,7 +163,7 @@ void setup_gdt(gd_t *id, u64 *gdt_addr)
int __weak x86_cleanup_before_linux(void)
{
#ifdef CONFIG_BOOTSTAGE_STASH
bootstage_stash((void *)CONFIG_BOOTSTAGE_STASH,
bootstage_stash((void *)CONFIG_BOOTSTAGE_STASH_ADDR,
CONFIG_BOOTSTAGE_STASH_SIZE);
#endif

@ -341,4 +341,110 @@ config CMD_SETGETDCR
endmenu
menu "Boot timing"
config BOOTSTAGE
bool "Boot timing and reporting"
help
Enable recording of boot time while booting. To use it, insert
calls to bootstage_mark() with a suitable BOOTSTAGE_ID from
bootstage.h. Only a single entry is recorded for each ID. You can
give the entry a name with bootstage_mark_name(). You can also
record elapsed time in a particular stage using bootstage_start()
before starting and bootstage_accum() when finished. Bootstage will
add up all the accumated time and report it.
Normally, IDs are defined in bootstage.h but a small number of
additional 'user' IDs can be used but passing BOOTSTAGE_ID_ALLOC
as the ID.
Calls to show_boot_progress() wil also result in log entries but
these will not have names.
config BOOTSTAGE_REPORT
bool "Display a detailed boot timing report before booting the OS"
depends on BOOTSTAGE
help
Enable output of a boot time report just before the OS is booted.
This shows how long it took U-Boot to go through each stage of the
boot process. The report looks something like this:
Timer summary in microseconds:
Mark Elapsed Stage
0 0 reset
3,575,678 3,575,678 board_init_f start
3,575,695 17 arch_cpu_init A9
3,575,777 82 arch_cpu_init done
3,659,598 83,821 board_init_r start
3,910,375 250,777 main_loop
29,916,167 26,005,792 bootm_start
30,361,327 445,160 start_kernel
config BOOTSTAGE_USER_COUNT
hex "Number of boot ID numbers available for user use"
default 20
help
This is the number of available user bootstage records.
Each time you call bootstage_mark(BOOTSTAGE_ID_ALLOC, ...)
a new ID will be allocated from this stash. If you exceed
the limit, recording will stop.
config CMD_BOOTSTAGE
bool "Enable the 'bootstage' command"
depends on BOOTSTAGE
help
Add a 'bootstage' command which supports printing a report
and un/stashing of bootstage data.
config BOOTSTAGE_FDT
bool "Store boot timing information in the OS device tree"
depends on BOOTSTAGE
help
Stash the bootstage information in the FDT. A root 'bootstage'
node is created with each bootstage id as a child. Each child
has a 'name' property and either 'mark' containing the
mark time in microsecond, or 'accum' containing the
accumulated time for that bootstage id in microseconds.
For example:
bootstage {
154 {
name = "board_init_f";
mark = <3575678>;
};
170 {
name = "lcd";
accum = <33482>;
};
};
Code in the Linux kernel can find this in /proc/devicetree.
config BOOTSTAGE_STASH
bool "Stash the boot timing information in memory before booting OS"
depends on BOOTSTAGE
help
Some OSes do not support device tree. Bootstage can instead write
the boot timing information in a binary format at a given address.
This happens through a call to bootstage_stash(), typically in
the CPU's cleanup_before_linux() function. You can use the
'bootstage stash' and 'bootstage unstash' commands to do this on
the command line.
config BOOTSTAGE_STASH_ADDR
hex "Address to stash boot timing information"
default 0
help
Provide an address which will not be overwritten by the OS when it
starts, so that it can read this information when ready.
config BOOTSTAGE_STASH_SIZE
hex "Size of boot timing stash region"
default 4096
help
This should be large enough to hold the bootstage stash. A value of
4096 (4KiB) is normally plenty.
endmenu
endmenu

@ -6,11 +6,6 @@
#include <common.h>
#ifndef CONFIG_BOOTSTAGE_STASH
#define CONFIG_BOOTSTAGE_STASH -1UL
#define CONFIG_BOOTSTAGE_STASH_SIZE -1
#endif
static int do_bootstage_report(cmd_tbl_t *cmdtp, int flag, int argc,
char * const argv[])
{
@ -24,7 +19,7 @@ static int get_base_size(int argc, char * const argv[], ulong *basep,
{
char *endp;
*basep = CONFIG_BOOTSTAGE_STASH;
*basep = CONFIG_BOOTSTAGE_STASH_ADDR;
*sizep = CONFIG_BOOTSTAGE_STASH_SIZE;
if (argc < 2)
return 0;

@ -15,3 +15,5 @@ CONFIG_USB=y
CONFIG_DM_USB=y
CONFIG_USB_EMUL=y
CONFIG_USB_STORAGE=y
CONFIG_BOOTSTAGE=y
CONFIG_BOOTSTAGE_REPORT=y

@ -11,7 +11,7 @@
#ifndef _BOOTSTAGE_H
#define _BOOTSTAGE_H
/* The number of boot stage records available for the user */
/* Define this for host tools */
#ifndef CONFIG_BOOTSTAGE_USER_COUNT
#define CONFIG_BOOTSTAGE_USER_COUNT 20
#endif

@ -21,9 +21,6 @@
#define CONFIG_SYS_TIMER_RATE 1000000
#define CONFIG_BOOTSTAGE
#define CONFIG_BOOTSTAGE_REPORT
#define CONFIG_SYS_STDIO_DEREGISTER
/* Number of bits in a C 'long' on this architecture */

@ -237,9 +237,6 @@
#define CONFIG_BOOTP_GATEWAY
#define CONFIG_BOOTP_HOSTNAME
#define CONFIG_BOOTSTAGE
#define CONFIG_CMD_BOOTSTAGE
#define CONFIG_CMD_USB
/* Default environment */

Loading…
Cancel
Save