[coreboot] [HEADS UP] Time stamps for AGESA boards now measured relatively to start and not ramstage

Aaron Durbin adurbin at google.com
Sat Jul 11 15:00:57 CEST 2015


On Sat, Jul 11, 2015 at 4:34 AM, Paul Menzel
<paulepanter at users.sourceforge.net> wrote:
> Dear coreboot folks,
>
>
> thanks to the latest time stamp work and especially thanks to Aaron
> Durbin’s latest fix up commit bd1499d3 (timestamps: don't drop ramstage
> timestamps with EARLY_CBMEM_INIT) [1], the ramstage time stamps on
> AGESA boards – I only tested with the ASRock E350M1 – seem to be
> measured relative to the system start and not relatively to start of
> ramstage.
>
> Before time stamps were measured relatively to ramstage.
>
> $ more asrock/e350m1/4.0-10267-g72dd909/2015-07-10T00\:11\:47Z/coreboot_timestamps.txt
> 12 entries total:
>
>   10:start of ramstage                                 0
>   30:device enumeration                                8 (8)
>   40:device configuration                              94,880 (94,872)
>   50:device enable                                     98,697 (3,816)
>   60:device initialization                             108,662 (9,965)
>   70:device setup done                                 122,998 (14,335)
>   75:cbmem post                                        123,369 (371)
>   80:write tables                                      123,374 (4)
>   90:load payload                                      128,020 (4,646)
>   15:starting LZMA decompress (ignore for x86)         128,275 (254)
>   16:finished LZMA decompress (ignore for x86)         146,142 (17,866)
>   99:selfboot jump                                     146,163 (21)
>
> With the latest changes we they are measured relatively to system start.
>
> $ more asrock/e350m1/4.0-10270-gbd1499d/2015-07-10T13\:23\:53Z/coreboot_timestamps.txt
> 12 entries total:
>
>   10:start of ramstage                                 385,974
>   30:device enumeration                                385,982 (8)
>   40:device configuration                              480,233 (94,250)
>   50:device enable                                     484,088 (3,855)
>   60:device initialization                             494,049 (9,960)
>   70:device setup done                                 508,368 (14,318)
>   75:cbmem post                                        508,736 (368)
>   80:write tables                                      508,741 (4)
>   90:load payload                                      513,320 (4,579)
>   15:starting LZMA decompress (ignore for x86)         513,574 (253)
>   16:finished LZMA decompress (ignore for x86)         531,423 (17,848)
>   99:selfboot jump                                     531,445 (21)
>

This is actually surprising, but I just looked into it. I see why;
it's from my most recent change. If I guard with
CONFIG_EARLY_CBMEM_INIT it'd go back to the previous way. But I
actually do like this way (though unintended). The base_time was never
properly exported it from cbmem:

>-------for (i = 0; i < tst_p->num_entries; i++) {
>------->-------const struct timestamp_entry *tse_p = tst_p->entries + i;
>------->-------timestamp_print_entry(tse_p->entry_id, tse_p->entry_stamp,
>------->------->-------i ? tse_p[-1].entry_stamp : 0);
>-------}

It always assumed 0 as a base_time. Without the diff below base_time
is actually 0 in this case so you see the accumulated time until
ramstage started. I actually think we should fix cbmem.c to not pass 0
as prev_stamp for 0th index. It should be passing base_time as well as
reporting what base_time was from an informational perspective.

If we want to change it back it's not that hard:

diff --git a/src/lib/timestamp.c b/src/lib/timestamp.c
index 7ead383..ca25093 100644
--- a/src/lib/timestamp.c
+++ b/src/lib/timestamp.c
@@ -202,7 +202,7 @@ void timestamp_init(uint64_t base)
        /* In the EARLY_CBMEM_INIT case timestamps could have already been
         * recovered. In those circumstances honor the cache which sits in BSS
         * as it has already been initialized. */
-       if (ENV_RAMSTAGE &&
+       if (ENV_RAMSTAGE && IS_ENABLED(CONFIG_EARLY_CBMEM_INIT) &&
            ts_cache->cache_state != TIMESTAMP_CACHE_UNINITIALIZED)
                return;


> So 386 ms for romstage with AGESA is still an acceptable number. This
> confirms, which was already known. AGESA does a pretty good job.
>
> Time stamps from romstage are still not preserved though, which is a
> well known limitation though.
>
>
> Thanks,
>
> Paul
>
>
> [1] http://review.coreboot.org/10880
> --
> coreboot mailing list: coreboot at coreboot.org
> http://www.coreboot.org/mailman/listinfo/coreboot



More information about the coreboot mailing list