Kconfig: Move CONFIG_BOOTSTAGE to Kconfig
authorSimon Glass <sjg@chromium.org>
Tue, 3 Mar 2015 00:04:37 +0000 (17:04 -0700)
committerSimon Glass <sjg@chromium.org>
Sat, 18 Apr 2015 17:11:37 +0000 (11:11 -0600)
Move CONFIG_BOOT_STAGE and its associated options to Kconfig. Adjust
existing users and code.

Signed-off-by: Simon Glass <sjg@chromium.org>
README
arch/x86/Kconfig
arch/x86/cpu/cpu.c
common/Kconfig
common/cmd_bootstage.c
configs/sandbox_defconfig
include/bootstage.h
include/configs/sandbox.h
include/configs/x86-common.h

diff --git a/README b/README
index fce66d6e0eebc8d5679aca9cec4f73865c4a4094..caba4602bc7253af33d49244e0901e791b6e8547 100644 (file)
--- a/README
+++ b/README
@@ -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:
 
index 6cff14a0ca88f029ae019f73570615a1c54af8ce..b44f709253ff99c054aad5d33a40b26ab7926dad 100644 (file)
@@ -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
index ed7905c1d7cf24c9ad9350bcd38b3ff9c9c9c727..a9ca50b1e462196869826cf2c912b6bc0602f804 100644 (file)
@@ -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
 
index 4cde4b004880d50c7433813cf83c6728880a245f..0a4652b3143b32dca42f030e397d06e32a3ecbed 100644 (file)
@@ -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
index 106894aa5128ded31e6060c7df9ea8fae1d0da1c..788ab16436ed76751ea67810e0c4a46635b134be 100644 (file)
@@ -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;
index 3731c71ce3535f55d1c024a1a10ebc4f967c2e9b..288aacc2ddc4ec6928e137ee2279319994969026 100644 (file)
@@ -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
index 0276cb3f60d07cac54bc420f9194e0b33d4a4a2c..be440148dd1a6ee9198a30e2b772d2f681548c20 100644 (file)
@@ -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
index d8e0c4b4e97cd3886196494aa8134aa130329113..630e5033832fcdf64cf1e1e33e234238a81c250a 100644 (file)
@@ -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 */
index 928ed5845426bf00d168780bd5daa01bd8b194b9..b378f5872f9a123ac4a6aa84175358df9a657b41 100644 (file)
 #define CONFIG_BOOTP_GATEWAY
 #define CONFIG_BOOTP_HOSTNAME
 
-#define CONFIG_BOOTSTAGE
-#define CONFIG_CMD_BOOTSTAGE
-
 #define CONFIG_CMD_USB
 
 /* Default environment */