Skip to content

Commit ba25f05

Browse files
committed
Merge tag 'timers-urgent-2020-09-27' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer updates from Thomas Gleixner: "A set of clocksource/clockevents updates: - Reset the TI/DM timer before enabling it instead of doing it the other way round. - Initialize the reload value for the GX6605s timer correctly so the hardware counter starts at 0 again after overrun. - Make error return value negative in the h8300 timer init function" * tag 'timers-urgent-2020-09-27' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: clocksource/drivers/timer-gx6605s: Fixup counter reload clocksource/drivers/timer-ti-dm: Do reset before enable clocksource/drivers/h8300_timer8: Fix wrong return value in h8300_8timer_init()
2 parents d042035 + a7b6c0f commit ba25f05

File tree

3 files changed

+25
-22
lines changed

3 files changed

+25
-22
lines changed

drivers/clocksource/h8300_timer8.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ static int __init h8300_8timer_init(struct device_node *node)
169169
return PTR_ERR(clk);
170170
}
171171

172-
ret = ENXIO;
172+
ret = -ENXIO;
173173
base = of_iomap(node, 0);
174174
if (!base) {
175175
pr_err("failed to map registers for clockevent\n");

drivers/clocksource/timer-gx6605s.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ static irqreturn_t gx6605s_timer_interrupt(int irq, void *dev)
2828
void __iomem *base = timer_of_base(to_timer_of(ce));
2929

3030
writel_relaxed(GX6605S_STATUS_CLR, base + TIMER_STATUS);
31+
writel_relaxed(0, base + TIMER_INI);
3132

3233
ce->event_handler(ce);
3334

drivers/clocksource/timer-ti-dm-systimer.c

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,33 @@ static bool dmtimer_systimer_revision1(struct dmtimer_systimer *t)
6969
return !(tidr >> 16);
7070
}
7171

72+
static void dmtimer_systimer_enable(struct dmtimer_systimer *t)
73+
{
74+
u32 val;
75+
76+
if (dmtimer_systimer_revision1(t))
77+
val = DMTIMER_TYPE1_ENABLE;
78+
else
79+
val = DMTIMER_TYPE2_ENABLE;
80+
81+
writel_relaxed(val, t->base + t->sysc);
82+
}
83+
84+
static void dmtimer_systimer_disable(struct dmtimer_systimer *t)
85+
{
86+
if (!dmtimer_systimer_revision1(t))
87+
return;
88+
89+
writel_relaxed(DMTIMER_TYPE1_DISABLE, t->base + t->sysc);
90+
}
91+
7292
static int __init dmtimer_systimer_type1_reset(struct dmtimer_systimer *t)
7393
{
7494
void __iomem *syss = t->base + OMAP_TIMER_V1_SYS_STAT_OFFSET;
7595
int ret;
7696
u32 l;
7797

98+
dmtimer_systimer_enable(t);
7899
writel_relaxed(BIT(1) | BIT(2), t->base + t->ifctrl);
79100
ret = readl_poll_timeout_atomic(syss, l, l & BIT(0), 100,
80101
DMTIMER_RESET_WAIT);
@@ -88,6 +109,7 @@ static int __init dmtimer_systimer_type2_reset(struct dmtimer_systimer *t)
88109
void __iomem *sysc = t->base + t->sysc;
89110
u32 l;
90111

112+
dmtimer_systimer_enable(t);
91113
l = readl_relaxed(sysc);
92114
l |= BIT(0);
93115
writel_relaxed(l, sysc);
@@ -336,26 +358,6 @@ static int __init dmtimer_systimer_init_clock(struct dmtimer_systimer *t,
336358
return 0;
337359
}
338360

339-
static void dmtimer_systimer_enable(struct dmtimer_systimer *t)
340-
{
341-
u32 val;
342-
343-
if (dmtimer_systimer_revision1(t))
344-
val = DMTIMER_TYPE1_ENABLE;
345-
else
346-
val = DMTIMER_TYPE2_ENABLE;
347-
348-
writel_relaxed(val, t->base + t->sysc);
349-
}
350-
351-
static void dmtimer_systimer_disable(struct dmtimer_systimer *t)
352-
{
353-
if (!dmtimer_systimer_revision1(t))
354-
return;
355-
356-
writel_relaxed(DMTIMER_TYPE1_DISABLE, t->base + t->sysc);
357-
}
358-
359361
static int __init dmtimer_systimer_setup(struct device_node *np,
360362
struct dmtimer_systimer *t)
361363
{
@@ -409,8 +411,8 @@ static int __init dmtimer_systimer_setup(struct device_node *np,
409411
t->wakeup = regbase + _OMAP_TIMER_WAKEUP_EN_OFFSET;
410412
t->ifctrl = regbase + _OMAP_TIMER_IF_CTRL_OFFSET;
411413

412-
dmtimer_systimer_enable(t);
413414
dmtimer_systimer_reset(t);
415+
dmtimer_systimer_enable(t);
414416
pr_debug("dmtimer rev %08x sysc %08x\n", readl_relaxed(t->base),
415417
readl_relaxed(t->base + t->sysc));
416418

0 commit comments

Comments
 (0)