X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=drivers%2Ftimer%2Fsandbox_timer.c;h=6a6411afeb39bce1630af3cafe2db190d4ae8a6c;hb=584133665affa0963ca1025a8ad1feae015dee06;hp=4b20af222885f6139438a0c87b92bd5388cc45e5;hpb=f838f124522ea4fb5202c1b584b4706aa48ee144;p=u-boot diff --git a/drivers/timer/sandbox_timer.c b/drivers/timer/sandbox_timer.c index 4b20af2228..6a6411afeb 100644 --- a/drivers/timer/sandbox_timer.c +++ b/drivers/timer/sandbox_timer.c @@ -10,6 +10,8 @@ #include #include +#define SANDBOX_TIMER_RATE 1000000 + /* system timer offset in ms */ static unsigned long sandbox_timer_offset; @@ -18,15 +20,30 @@ void sandbox_timer_add_offset(unsigned long offset) sandbox_timer_offset += offset; } -static int sandbox_timer_get_count(struct udevice *dev, unsigned long *count) +u64 notrace timer_early_get_count(void) +{ + return os_get_nsec() / 1000 + sandbox_timer_offset * 1000; +} + +unsigned long notrace timer_early_get_rate(void) { - *count = os_get_nsec() / 1000 + sandbox_timer_offset * 1000; + return SANDBOX_TIMER_RATE; +} + +static notrace int sandbox_timer_get_count(struct udevice *dev, u64 *count) +{ + *count = timer_early_get_count(); return 0; } static int sandbox_timer_probe(struct udevice *dev) { + struct timer_dev_priv *uc_priv = dev_get_uclass_priv(dev); + + if (!uc_priv->clock_rate) + uc_priv->clock_rate = SANDBOX_TIMER_RATE; + return 0; } @@ -47,3 +64,8 @@ U_BOOT_DRIVER(sandbox_timer) = { .ops = &sandbox_timer_ops, .flags = DM_FLAG_PRE_RELOC, }; + +/* This is here in case we don't have a device tree */ +U_BOOT_DEVICE(sandbox_timer_non_fdt) = { + .name = "sandbox_timer", +};