Patrick Georgi (pgeorgi@google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/8812
-gerrit
commit fd880cbbd7a9d5f7e4a875e34e5d3413947eefef Author: Aaron Durbin adurbin@chromium.org Date: Tue Sep 23 16:34:40 2014 -0500
device: convert to stopwatch API
Instead of open coding the monotonic timers use the stopwatch abstraction.
BUG=None BRANCH=None TEST=Booted and noted timings work as expected. Built with software_i2c and no compilation failures.
Change-Id: I0170fe4b93d9976957a2dcb00a6ea41ddc0320ce Signed-off-by: Aaron Durbin adurbin@chromium.org Reviewed-on: https://chromium-review.googlesource.com/219495 Reviewed-by: Julius Werner jwerner@chromium.org --- src/device/device.c | 9 +++------ src/device/software_i2c.c | 11 ++++++----- 2 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/src/device/device.c b/src/device/device.c index 00e323a..b3b8d24 100644 --- a/src/device/device.c +++ b/src/device/device.c @@ -1139,10 +1139,8 @@ static void init_dev(struct device *dev)
if (!dev->initialized && dev->ops && dev->ops->init) { #if CONFIG_HAVE_MONOTONIC_TIMER - struct mono_time start_time; - struct rela_time dev_init_time; - - timer_monotonic_get(&start_time); + struct stopwatch sw; + stopwatch_init(&sw); #endif if (dev->path.type == DEVICE_PATH_I2C) { printk(BIOS_DEBUG, "smbus: %s[%d]->", @@ -1153,9 +1151,8 @@ static void init_dev(struct device *dev) dev->initialized = 1; dev->ops->init(dev); #if CONFIG_HAVE_MONOTONIC_TIMER - dev_init_time = current_time_from(&start_time); printk(BIOS_DEBUG, "%s init %ld usecs\n", dev_path(dev), - rela_time_in_microseconds(&dev_init_time)); + stopwatch_duration_usecs(&sw)); #endif } } diff --git a/src/device/software_i2c.c b/src/device/software_i2c.c index 6c9c200..518aa5f 100644 --- a/src/device/software_i2c.c +++ b/src/device/software_i2c.c @@ -44,20 +44,21 @@ static int __wait(unsigned bus, int timeout_us, int for_scl) int us; int sda = software_i2c[bus]->get_sda(bus); int scl = software_i2c[bus]->get_scl(bus); - struct mono_time start; - timer_monotonic_get(&start); + struct stopwatch sw; + + stopwatch_init_usecs_expire(&sw, timeout_us);
do { int old_sda = sda; int old_scl = scl; - struct rela_time diff = current_time_from(&start); - us = rela_time_in_microseconds(&diff); + + us = stopwatch_duration_usecs(&sw);
if (old_sda != (sda = software_i2c[bus]->get_sda(bus))) spew("[SDA transitioned to %d after %dus] ", sda, us); if (old_scl != (scl = software_i2c[bus]->get_scl(bus))) spew("[SCL transitioned to %d after %dus] ", scl, us); - } while (us < timeout_us && (!for_scl || !scl)); + } while (!stopwatch_expired(&sw) && (!for_scl || !scl));
return scl; }