[U-Boot] [PATCH 3/3] bootstage: Modify routine timer_get_boot_us()
Michal Simek
michal.simek at xilinx.com
Tue May 30 12:22:13 UTC 2017
From: Siva Durga Prasad Paladugu <siva.durga.paladugu at xilinx.com>
Modify routine timer_get_boot_us(), as the base_time
will be stored in bss if initialized to zero(observed for
arm compilers, arm and arm64) and for most of the boards
bss was not initialized to zero before relocation and hence
causing a junk timestamp value in boot record if there is an
entry record before relocation(example would be board_init_f
entry). Also, as it is in bss which will be intialized to zero
after relocation, it causes the first entry after relocation
to be missed while printing bootstage report as the
timer_get_boot_us() returns zero if bss_time is zero.
This patch fixes the same by initialzing bss_time to 1 and also
returning current timestamp if bss_time is 1. Intializing it to
1 causes it to be placed in data section and hence no issues.
Before this patch:
ZynqMP> bootstage report
Timer summary in microseconds:
Mark Elapsed Stage
0 0 reset
491,000 491,000 id=64
516,000 25,000 id=65
522,000 6,000 main_loop
112,092,989,575,347,436,48112,092,989,575,342,216,48 board_init_f
After this patch:
ZynqMP> bootstage report
Timer summary in microseconds:
Mark Elapsed Stage
0 0 reset
9,969 9,969 board_init_f
1,227,000 1,217,031 board_init_r
1,713,000 486,000 id=64
1,733,000 20,000 id=65
1,735,000 2,000 main_loop
Signed-off-by: Siva Durga Prasad Paladugu <sivadur at xilinx.com>
Signed-off-by: Michal Simek <michal.simek at xilinx.com>
---
common/bootstage.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/common/bootstage.c b/common/bootstage.c
index bca74cd207fc..b65345c28105 100644
--- a/common/bootstage.c
+++ b/common/bootstage.c
@@ -294,16 +294,18 @@ void bootstage_report(void)
ulong __timer_get_boot_us(void)
{
- static ulong base_time;
+ static ulong base_time = 1;
/*
* We can't implement this properly. Return 0 on the first call and
* larger values after that.
*/
- if (base_time)
+ if (base_time != 1)
return get_timer(base_time) * 1000;
- base_time = get_timer(0);
- return 0;
+ else
+ base_time = get_timer(0);
+
+ return base_time;
}
ulong timer_get_boot_us(void)
--
1.9.1
More information about the U-Boot
mailing list