summaryrefslogtreecommitdiff
path: root/payloads/libpayload/libc
diff options
context:
space:
mode:
authorRaul E Rangel <rrangel@chromium.org>2018-08-20 12:47:19 -0600
committerMartin Roth <martinroth@google.com>2018-09-12 14:15:18 +0000
commitd63627fb846b6621be87348b1653a5f37070e12f (patch)
tree2547e1bf937bc9bbf128d5b2f1836e407c0e928b /payloads/libpayload/libc
parent24ae85c3ffb48c72f67a514dcb843c1de54e5416 (diff)
downloadcoreboot-d63627fb846b6621be87348b1653a5f37070e12f.tar.xz
libpayload/libc/time: Add an arch_ndelay()
Replace _delay with an arch_ndelay(). This way each arch can setup their own delay mechanism. BUG=b:109749762 TEST=Verified delay's still work on grunt. Change-Id: I552eb30984f9c21e92dffc9d7b36873e9e2e4ac5 Signed-off-by: Raul E Rangel <rrangel@chromium.org> Reviewed-on: https://review.coreboot.org/28243 Reviewed-by: Martin Roth <martinroth@google.com> Reviewed-by: Richard Spiegel <richard.spiegel@silverbackltd.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'payloads/libpayload/libc')
-rw-r--r--payloads/libpayload/libc/time.c44
1 files changed, 3 insertions, 41 deletions
diff --git a/payloads/libpayload/libc/time.c b/payloads/libpayload/libc/time.c
index 46306bb1ba..f8913466dc 100644
--- a/payloads/libpayload/libc/time.c
+++ b/payloads/libpayload/libc/time.c
@@ -158,52 +158,14 @@ int gettimeofday(struct timeval *tv, void *tz)
return 0;
}
-static inline void _delay(uint64_t delta)
+__attribute__((weak))
+void arch_ndelay(uint64_t ns)
{
+ uint64_t delta = ns * timer_hz() / NSECS_PER_SEC;
uint64_t start = timer_raw_value();
while (timer_raw_value() - start < delta) ;
}
-/**
- * Delay for a specified number of nanoseconds.
- *
- * @param n Number of nanoseconds to delay for.
- */
-void ndelay(unsigned int n)
-{
- _delay((uint64_t)n * timer_hz() / 1000000000);
-}
-
-/**
- * Delay for a specified number of microseconds.
- *
- * @param n Number of microseconds to delay for.
- */
-void udelay(unsigned int n)
-{
- _delay((uint64_t)n * timer_hz() / 1000000);
-}
-
-/**
- * Delay for a specified number of milliseconds.
- *
- * @param m Number of milliseconds to delay for.
- */
-void mdelay(unsigned int m)
-{
- _delay((uint64_t)m * timer_hz() / 1000);
-}
-
-/**
- * Delay for a specified number of seconds.
- *
- * @param s Number of seconds to delay for.
- */
-void delay(unsigned int s)
-{
- _delay((uint64_t)s * timer_hz());
-}
-
u64 timer_us(u64 base)
{
static u64 hz;