libpayload/x86/apic: Add an apic_delay method and calibrate the timer

The apic_delay method will halt the CPU and wait for a timer interrupt
to fire. I went with usec because nsec is too granular to guarantee.

This method will be called from an arch_ndelay() method when the delay
is large enough to justify a sleep.

BUG=b:109749762
TEST=Tested it on grunt by changing the _delay method to call
apic_delay().

Change-Id: I80363f06bdb22d0907f895885e607fde1c4c468d
Signed-off-by: Raul E Rangel <rrangel@chromium.org>
Reviewed-on: https://review.coreboot.org/28242
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Martin Roth <martinroth@google.com>
This commit is contained in:
Raul E Rangel
2018-08-20 12:31:11 -06:00
committed by Martin Roth
parent ac8ebd0e73
commit 24ae85c3ff
2 changed files with 79 additions and 0 deletions

View File

@ -40,4 +40,6 @@ uint8_t apic_id(void);
/** Signal the end of the interrupt handler. */
void apic_eoi(void);
void apic_delay(unsigned int usec);
#endif /* __ARCH_X86_INCLUDES_ARCH_APIC_H__ */