dm: timer: Support 64-bit counter

There are timers with a 64-bit counter value but current timer
uclass driver assumes a 32-bit one. Modify timer_get_count()
to ask timer driver to always return a 64-bit counter value,
and provide an inline helper function timer_conv_64() to handle
the 32-bit/64-bit conversion automatically.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Acked-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Bin Meng
2015-11-24 13:31:17 -07:00
committed by Simon Glass
parent f838f12452
commit 9ca07ebbac
5 changed files with 32 additions and 12 deletions

View File

@@ -34,7 +34,7 @@ struct altera_timer_platdata {
struct altera_timer_regs *regs;
};
static int altera_timer_get_count(struct udevice *dev, unsigned long *count)
static int altera_timer_get_count(struct udevice *dev, u64 *count)
{
struct altera_timer_platdata *plat = dev->platdata;
struct altera_timer_regs *const regs = plat->regs;
@@ -46,7 +46,7 @@ static int altera_timer_get_count(struct udevice *dev, unsigned long *count)
/* Read timer value */
val = readl(&regs->snapl) & 0xffff;
val |= (readl(&regs->snaph) & 0xffff) << 16;
*count = ~val;
*count = timer_conv_64(~val);
return 0;
}