timer: Return count from timer_ops.get_count

No timer drivers return an error from get_count. Instead of possibly
returning an error, just return the count directly.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Claudiu Beznea <claudiu.beznea@microchip.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Sean Anderson 2020-10-07 14:37:44 -04:00 committed by Tom Rini
parent aff60aba6c
commit 8af7bb914f
24 changed files with 59 additions and 97 deletions

View File

@ -17,11 +17,9 @@
/* mtime register */ /* mtime register */
#define MTIME_REG(base) ((ulong)(base)) #define MTIME_REG(base) ((ulong)(base))
static int andes_plmt_get_count(struct udevice *dev, u64 *count) static u64 andes_plmt_get_count(struct udevice *dev)
{ {
*count = readq((void __iomem *)MTIME_REG(dev->priv)); return readq((void __iomem *)MTIME_REG(dev->priv));
return 0;
} }
static const struct timer_ops andes_plmt_ops = { static const struct timer_ops andes_plmt_ops = {

View File

@ -62,11 +62,9 @@ int riscv_get_ipi(int hart, int *pending)
return 0; return 0;
} }
static int sifive_clint_get_count(struct udevice *dev, u64 *count) static u64 sifive_clint_get_count(struct udevice *dev)
{ {
*count = readq((void __iomem *)MTIME_REG(dev->priv)); return readq((void __iomem *)MTIME_REG(dev->priv));
return 0;
} }
static const struct timer_ops sifive_clint_ops = { static const struct timer_ops sifive_clint_ops = {

View File

@ -62,14 +62,13 @@ struct atftmr_timer_platdata {
struct atftmr_timer_regs *regs; struct atftmr_timer_regs *regs;
}; };
static int atftmr_timer_get_count(struct udevice *dev, u64 *count) static u64 atftmr_timer_get_count(struct udevice *dev)
{ {
struct atftmr_timer_platdata *plat = dev->platdata; struct atftmr_timer_platdata *plat = dev->platdata;
struct atftmr_timer_regs *const regs = plat->regs; struct atftmr_timer_regs *const regs = plat->regs;
u32 val; u32 val;
val = readl(&regs->t3_counter); val = readl(&regs->t3_counter);
*count = timer_conv_64(val); return timer_conv_64(val);
return 0;
} }
static int atftmr_timer_probe(struct udevice *dev) static int atftmr_timer_probe(struct udevice *dev)

View File

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

View File

@ -26,7 +26,7 @@ struct arc_timer_priv {
uint timer_id; uint timer_id;
}; };
static int arc_timer_get_count(struct udevice *dev, u64 *count) static u64 arc_timer_get_count(struct udevice *dev)
{ {
u32 val = 0; u32 val = 0;
struct arc_timer_priv *priv = dev_get_priv(dev); struct arc_timer_priv *priv = dev_get_priv(dev);
@ -39,9 +39,7 @@ static int arc_timer_get_count(struct udevice *dev, u64 *count)
val = read_aux_reg(ARC_AUX_TIMER1_CNT); val = read_aux_reg(ARC_AUX_TIMER1_CNT);
break; break;
} }
*count = timer_conv_64(val); return timer_conv_64(val);
return 0;
} }
static int arc_timer_probe(struct udevice *dev) static int arc_timer_probe(struct udevice *dev)

View File

@ -51,13 +51,11 @@ static int ast_timer_probe(struct udevice *dev)
return 0; return 0;
} }
static int ast_timer_get_count(struct udevice *dev, u64 *count) static u64 ast_timer_get_count(struct udevice *dev)
{ {
struct ast_timer_priv *priv = dev_get_priv(dev); struct ast_timer_priv *priv = dev_get_priv(dev);
*count = AST_TMC_RELOAD_VAL - readl(&priv->tmc->status); return AST_TMC_RELOAD_VAL - readl(&priv->tmc->status);
return 0;
} }
static int ast_timer_ofdata_to_platdata(struct udevice *dev) static int ast_timer_ofdata_to_platdata(struct udevice *dev)

View File

@ -68,13 +68,12 @@ struct atcpit_timer_platdata {
u32 *regs; u32 *regs;
}; };
static int atcpit_timer_get_count(struct udevice *dev, u64 *count) static u64 atcpit_timer_get_count(struct udevice *dev)
{ {
struct atcpit_timer_platdata *plat = dev_get_platdata(dev); struct atcpit_timer_platdata *plat = dev_get_platdata(dev);
u32 val; u32 val;
val = ~(REG32_TMR(CH_CNT(1))+0xffffffff); val = ~(REG32_TMR(CH_CNT(1))+0xffffffff);
*count = timer_conv_64(val); return timer_conv_64(val);
return 0;
} }
static int atcpit_timer_probe(struct udevice *dev) static int atcpit_timer_probe(struct udevice *dev)

View File

@ -25,15 +25,13 @@ struct atmel_pit_platdata {
struct atmel_pit_regs *regs; struct atmel_pit_regs *regs;
}; };
static int atmel_pit_get_count(struct udevice *dev, u64 *count) static u64 atmel_pit_get_count(struct udevice *dev)
{ {
struct atmel_pit_platdata *plat = dev_get_platdata(dev); struct atmel_pit_platdata *plat = dev_get_platdata(dev);
struct atmel_pit_regs *const regs = plat->regs; struct atmel_pit_regs *const regs = plat->regs;
u32 val = readl(&regs->value_image); u32 val = readl(&regs->value_image);
*count = timer_conv_64(val); return timer_conv_64(val);
return 0;
} }
static int atmel_pit_probe(struct udevice *dev) static int atmel_pit_probe(struct udevice *dev)

View File

@ -57,13 +57,11 @@ ulong timer_get_boot_us(void)
} }
#endif #endif
static int cadence_ttc_get_count(struct udevice *dev, u64 *count) static u64 cadence_ttc_get_count(struct udevice *dev)
{ {
struct cadence_ttc_priv *priv = dev_get_priv(dev); struct cadence_ttc_priv *priv = dev_get_priv(dev);
*count = readl(&priv->regs->counter_val1); return readl(&priv->regs->counter_val1);
return 0;
} }
static int cadence_ttc_probe(struct udevice *dev) static int cadence_ttc_probe(struct udevice *dev)

View File

@ -25,7 +25,7 @@ struct dw_apb_timer_priv {
struct reset_ctl_bulk resets; struct reset_ctl_bulk resets;
}; };
static int dw_apb_timer_get_count(struct udevice *dev, u64 *count) static u64 dw_apb_timer_get_count(struct udevice *dev)
{ {
struct dw_apb_timer_priv *priv = dev_get_priv(dev); struct dw_apb_timer_priv *priv = dev_get_priv(dev);
@ -34,9 +34,7 @@ static int dw_apb_timer_get_count(struct udevice *dev, u64 *count)
* requires the count to be incrementing. Invert the * requires the count to be incrementing. Invert the
* result. * result.
*/ */
*count = timer_conv_64(~readl(priv->regs + DW_APB_CURR_VAL)); return timer_conv_64(~readl(priv->regs + DW_APB_CURR_VAL));
return 0;
} }
static int dw_apb_timer_probe(struct udevice *dev) static int dw_apb_timer_probe(struct udevice *dev)

View File

@ -27,16 +27,14 @@ struct mchp_pit64b_priv {
void __iomem *base; void __iomem *base;
}; };
static int mchp_pit64b_get_count(struct udevice *dev, u64 *count) static u64 mchp_pit64b_get_count(struct udevice *dev)
{ {
struct mchp_pit64b_priv *priv = dev_get_priv(dev); struct mchp_pit64b_priv *priv = dev_get_priv(dev);
u32 lsb = readl(priv->base + MCHP_PIT64B_TLSBR); u32 lsb = readl(priv->base + MCHP_PIT64B_TLSBR);
u32 msb = readl(priv->base + MCHP_PIT64B_TMSBR); u32 msb = readl(priv->base + MCHP_PIT64B_TMSBR);
*count = ((u64)msb << 32) | lsb; return ((u64)msb << 32) | lsb;
return 0;
} }
static int mchp_pit64b_probe(struct udevice *dev) static int mchp_pit64b_probe(struct udevice *dev)

View File

@ -187,7 +187,7 @@ void wait_ticks(ulong ticks)
WATCHDOG_RESET(); WATCHDOG_RESET();
} }
static int mpc83xx_timer_get_count(struct udevice *dev, u64 *count) static u64 mpc83xx_timer_get_count(struct udevice *dev)
{ {
u32 tbu, tbl; u32 tbu, tbl;
@ -201,9 +201,7 @@ static int mpc83xx_timer_get_count(struct udevice *dev, u64 *count)
tbl = mftb(); tbl = mftb();
} while (tbu != mftbu()); } while (tbu != mftbu());
*count = (tbu * 0x10000ULL) + tbl; return (tbu * 0x10000ULL) + tbl;
return 0;
} }
static int mpc83xx_timer_probe(struct udevice *dev) static int mpc83xx_timer_probe(struct udevice *dev)

View File

@ -27,14 +27,12 @@ struct mtk_timer_priv {
void __iomem *base; void __iomem *base;
}; };
static int mtk_timer_get_count(struct udevice *dev, u64 *count) static u64 mtk_timer_get_count(struct udevice *dev)
{ {
struct mtk_timer_priv *priv = dev_get_priv(dev); struct mtk_timer_priv *priv = dev_get_priv(dev);
u32 val = readl(priv->base + MTK_GPT4_CNT); u32 val = readl(priv->base + MTK_GPT4_CNT);
*count = timer_conv_64(val); return timer_conv_64(val);
return 0;
} }
static int mtk_timer_probe(struct udevice *dev) static int mtk_timer_probe(struct udevice *dev)

View File

@ -54,14 +54,12 @@ struct nomadik_mtu_priv {
struct nomadik_mtu_timer_regs *timer; struct nomadik_mtu_timer_regs *timer;
}; };
static int nomadik_mtu_get_count(struct udevice *dev, u64 *count) static u64 nomadik_mtu_get_count(struct udevice *dev)
{ {
struct nomadik_mtu_priv *priv = dev_get_priv(dev); struct nomadik_mtu_priv *priv = dev_get_priv(dev);
/* Decrementing counter: invert the value */ /* Decrementing counter: invert the value */
*count = timer_conv_64(~readl(&priv->timer->cv)); return timer_conv_64(~readl(&priv->timer->cv));
return 0;
} }
static int nomadik_mtu_probe(struct udevice *dev) static int nomadik_mtu_probe(struct udevice *dev)

View File

@ -48,13 +48,11 @@ struct omap_timer_priv {
struct omap_gptimer_regs *regs; struct omap_gptimer_regs *regs;
}; };
static int omap_timer_get_count(struct udevice *dev, u64 *count) static u64 omap_timer_get_count(struct udevice *dev)
{ {
struct omap_timer_priv *priv = dev_get_priv(dev); struct omap_timer_priv *priv = dev_get_priv(dev);
*count = timer_conv_64(readl(&priv->regs->tcrr)); return timer_conv_64(readl(&priv->regs->tcrr));
return 0;
} }
static int omap_timer_probe(struct udevice *dev) static int omap_timer_probe(struct udevice *dev)

View File

@ -27,13 +27,11 @@ struct ostm_priv {
fdt_addr_t regs; fdt_addr_t regs;
}; };
static int ostm_get_count(struct udevice *dev, u64 *count) static u64 ostm_get_count(struct udevice *dev)
{ {
struct ostm_priv *priv = dev_get_priv(dev); struct ostm_priv *priv = dev_get_priv(dev);
*count = timer_conv_64(readl(priv->regs + OSTM_CNT)); return timer_conv_64(readl(priv->regs + OSTM_CNT));
return 0;
} }
static int ostm_probe(struct udevice *dev) static int ostm_probe(struct udevice *dev)

View File

@ -16,22 +16,19 @@
#include <timer.h> #include <timer.h>
#include <asm/csr.h> #include <asm/csr.h>
static int riscv_timer_get_count(struct udevice *dev, u64 *count) static u64 riscv_timer_get_count(struct udevice *dev)
{ {
if (IS_ENABLED(CONFIG_64BIT)) { __maybe_unused u32 hi, lo;
*count = csr_read(CSR_TIME);
} else {
u32 hi, lo;
do { if (IS_ENABLED(CONFIG_64BIT))
hi = csr_read(CSR_TIMEH); return csr_read(CSR_TIME);
lo = csr_read(CSR_TIME);
} while (hi != csr_read(CSR_TIMEH));
*count = ((u64)hi << 32) | lo; do {
} hi = csr_read(CSR_TIMEH);
lo = csr_read(CSR_TIME);
} while (hi != csr_read(CSR_TIMEH));
return 0; return ((u64)hi << 32) | lo;
} }
static int riscv_timer_probe(struct udevice *dev) static int riscv_timer_probe(struct udevice *dev)

View File

@ -88,14 +88,13 @@ ulong timer_get_boot_us(void)
} }
#endif #endif
static int rockchip_timer_get_count(struct udevice *dev, u64 *count) static u64 rockchip_timer_get_count(struct udevice *dev)
{ {
struct rockchip_timer_priv *priv = dev_get_priv(dev); struct rockchip_timer_priv *priv = dev_get_priv(dev);
uint64_t cntr = rockchip_timer_get_curr_value(priv->timer); uint64_t cntr = rockchip_timer_get_curr_value(priv->timer);
/* timers are down-counting */ /* timers are down-counting */
*count = ~0ull - cntr; return ~0ull - cntr;
return 0;
} }
static int rockchip_clk_ofdata_to_platdata(struct udevice *dev) static int rockchip_clk_ofdata_to_platdata(struct udevice *dev)

View File

@ -29,11 +29,9 @@ unsigned long notrace timer_early_get_rate(void)
return SANDBOX_TIMER_RATE; return SANDBOX_TIMER_RATE;
} }
static notrace int sandbox_timer_get_count(struct udevice *dev, u64 *count) static notrace u64 sandbox_timer_get_count(struct udevice *dev)
{ {
*count = timer_early_get_count(); return timer_early_get_count();
return 0;
} }
static int sandbox_timer_probe(struct udevice *dev) static int sandbox_timer_probe(struct udevice *dev)

View File

@ -17,7 +17,7 @@ struct sti_timer_priv {
struct globaltimer *global_timer; struct globaltimer *global_timer;
}; };
static int sti_timer_get_count(struct udevice *dev, u64 *count) static u64 sti_timer_get_count(struct udevice *dev)
{ {
struct sti_timer_priv *priv = dev_get_priv(dev); struct sti_timer_priv *priv = dev_get_priv(dev);
struct globaltimer *global_timer = priv->global_timer; struct globaltimer *global_timer = priv->global_timer;
@ -34,9 +34,7 @@ static int sti_timer_get_count(struct udevice *dev, u64 *count)
old = high; old = high;
} }
timer = high; timer = high;
*count = (u64)((timer << 32) | low); return (u64)((timer << 32) | low);
return 0;
} }
static int sti_timer_probe(struct udevice *dev) static int sti_timer_probe(struct udevice *dev)

View File

@ -52,14 +52,12 @@ struct stm32_timer_priv {
struct stm32_timer_regs *base; struct stm32_timer_regs *base;
}; };
static int stm32_timer_get_count(struct udevice *dev, u64 *count) static u64 stm32_timer_get_count(struct udevice *dev)
{ {
struct stm32_timer_priv *priv = dev_get_priv(dev); struct stm32_timer_priv *priv = dev_get_priv(dev);
struct stm32_timer_regs *regs = priv->base; struct stm32_timer_regs *regs = priv->base;
*count = readl(&regs->cnt); return readl(&regs->cnt);
return 0;
} }
static int stm32_timer_probe(struct udevice *dev) static int stm32_timer_probe(struct udevice *dev)

View File

@ -34,7 +34,8 @@ int notrace timer_get_count(struct udevice *dev, u64 *count)
if (!ops->get_count) if (!ops->get_count)
return -ENOSYS; return -ENOSYS;
return ops->get_count(dev, count); *count = ops->get_count(dev);
return 0;
} }
unsigned long notrace timer_get_rate(struct udevice *dev) unsigned long notrace timer_get_rate(struct udevice *dev)

View File

@ -386,13 +386,11 @@ void __udelay(unsigned long usec)
#endif #endif
} }
static int tsc_timer_get_count(struct udevice *dev, u64 *count) static u64 tsc_timer_get_count(struct udevice *dev)
{ {
u64 now_tick = rdtsc(); u64 now_tick = rdtsc();
*count = now_tick - gd->arch.tsc_base; return now_tick - gd->arch.tsc_base;
return 0;
} }
static void tsc_timer_ensure_setup(bool early) static void tsc_timer_ensure_setup(bool early)

View File

@ -67,11 +67,14 @@ struct timer_ops {
* *
* @dev: The timer device * @dev: The timer device
* *
* @count: pointer that returns the current 64-bit timer count * This function may be called at any time after the driver is probed.
* All necessary initialization must be completed by the time probe()
* returns. The count returned by this functions should be monotonic.
* This function must succeed.
* *
* Return: 0 if OK, -ve on error * Return: The current 64-bit timer count
*/ */
int (*get_count)(struct udevice *dev, u64 *count); u64 (*get_count)(struct udevice *dev);
}; };
/** /**