diff options
author | Alexandru Gagniuc <alexandrux.gagniuc@intel.com> | 2016-05-16 14:22:00 -0700 |
---|---|---|
committer | Aaron Durbin <adurbin@chromium.org> | 2016-05-19 18:25:59 +0200 |
commit | 87c6097c8f3ec812101f302ce98d0e6a53c25bab (patch) | |
tree | 4f5c071fe4414a44a987be13c45d8765a8d57d6b /src | |
parent | bea930d7e483e777b3b7ed88632b030a31d1dc4b (diff) | |
download | coreboot-87c6097c8f3ec812101f302ce98d0e6a53c25bab.tar.xz |
arch/x86: Include timestamp.c in all stages
timestamp.c was not included in bootblock and postcar. This means that
these two stages would use the weak implementation in lib/timestamp.c
instead of the arch-specific implementation based on rdtsc.
This resulted in using timer_monotonic_get() which resets the
timestamps from 0. timer_monotonic_get() only provides per-stage
incrementing semantics on x86 because lapic implementation has
counting down values. A globally incrementing counter like rdtsc
provides the semantics like every other non-x86.
On the test configuration, the weak implementation of timestamp_get()
returned zero, resulting in wrong timestamps coming from the bootblock,
while romstage and ramstage used the arch implementation and returned
correct timestamps.
This is a great example of why weak functions are dangerous, and how
easy it is to miss subtle yet strong interactions between subsystems
and the coreboot buildsystem.
Change-Id: I656f9bd58a6fc179d9dbbc496c5b684ea9288eb5
Signed-off-by: Alexandru Gagniuc <alexandrux.gagniuc@intel.com>
Reviewed-on: https://review.coreboot.org/14860
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/arch/x86/Makefile.inc | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/arch/x86/Makefile.inc b/src/arch/x86/Makefile.inc index a363430cad..c27bb1a994 100644 --- a/src/arch/x86/Makefile.inc +++ b/src/arch/x86/Makefile.inc @@ -97,6 +97,7 @@ ifeq ($(CONFIG_ARCH_BOOTBLOCK_X86_32)$(CONFIG_ARCH_BOOTBLOCK_X86_64),y) bootblock-y += boot.c bootblock-y += memcpy.c bootblock-y += memset.c +bootblock-$(CONFIG_COLLECT_TIMESTAMPS) += timestamp.c bootblock-$(CONFIG_X86_TOP4G_BOOTMEDIA_MAP) += mmap_boot.c bootblock-y += id.S @@ -394,6 +395,7 @@ postcar-y += memset.c postcar-y += memcpy.c postcar-y += memmove.c postcar-y += memlayout.ld +postcar-$(CONFIG_COLLECT_TIMESTAMPS) += timestamp.c postcar-$(CONFIG_X86_TOP4G_BOOTMEDIA_MAP) += mmap_boot.c $(objcbfs)/postcar.debug: $$(postcar-objs) |