Lines Matching full:timer
3 * Rockchip timer support
46 struct rk_timer timer; member
56 return &container_of(ce, struct rk_clkevt, ce)->timer; in rk_timer()
59 static inline void rk_timer_disable(struct rk_timer *timer) in rk_timer_disable() argument
61 writel_relaxed(TIMER_DISABLE, timer->ctrl); in rk_timer_disable()
64 static inline void rk_timer_enable(struct rk_timer *timer, u32 flags) in rk_timer_enable() argument
66 writel_relaxed(TIMER_ENABLE | flags, timer->ctrl); in rk_timer_enable()
70 struct rk_timer *timer) in rk_timer_update_counter() argument
72 writel_relaxed(cycles, timer->base + TIMER_LOAD_COUNT0); in rk_timer_update_counter()
73 writel_relaxed(0, timer->base + TIMER_LOAD_COUNT1); in rk_timer_update_counter()
76 static void rk_timer_interrupt_clear(struct rk_timer *timer) in rk_timer_interrupt_clear() argument
78 writel_relaxed(1, timer->base + TIMER_INT_STATUS); in rk_timer_interrupt_clear()
84 struct rk_timer *timer = rk_timer(ce); in rk_timer_set_next_event() local
86 rk_timer_disable(timer); in rk_timer_set_next_event()
87 rk_timer_update_counter(cycles, timer); in rk_timer_set_next_event()
88 rk_timer_enable(timer, TIMER_MODE_USER_DEFINED_COUNT | in rk_timer_set_next_event()
95 struct rk_timer *timer = rk_timer(ce); in rk_timer_shutdown() local
97 rk_timer_disable(timer); in rk_timer_shutdown()
103 struct rk_timer *timer = rk_timer(ce); in rk_timer_set_periodic() local
105 rk_timer_disable(timer); in rk_timer_set_periodic()
106 rk_timer_update_counter(timer->freq / HZ - 1, timer); in rk_timer_set_periodic()
107 rk_timer_enable(timer, TIMER_MODE_FREE_RUNNING | TIMER_INT_UNMASK); in rk_timer_set_periodic()
114 struct rk_timer *timer = rk_timer(ce); in rk_timer_interrupt() local
116 rk_timer_interrupt_clear(timer); in rk_timer_interrupt()
119 rk_timer_disable(timer); in rk_timer_interrupt()
134 rk_timer_probe(struct rk_timer *timer, struct device_node *np) in rk_timer_probe() argument
141 timer->base = of_iomap(np, 0); in rk_timer_probe()
142 if (!timer->base) { in rk_timer_probe()
147 if (of_device_is_compatible(np, "rockchip,rk3399-timer")) in rk_timer_probe()
150 timer->ctrl = timer->base + ctrl_reg; in rk_timer_probe()
164 timer->pclk = pclk; in rk_timer_probe()
166 timer_clk = of_clk_get_by_name(np, "timer"); in rk_timer_probe()
169 pr_err("Failed to get timer clock for '%s'\n", TIMER_NAME); in rk_timer_probe()
175 pr_err("Failed to enable timer clock\n"); in rk_timer_probe()
178 timer->clk = timer_clk; in rk_timer_probe()
180 timer->freq = clk_get_rate(timer_clk); in rk_timer_probe()
188 timer->irq = irq; in rk_timer_probe()
190 rk_timer_interrupt_clear(timer); in rk_timer_probe()
191 rk_timer_disable(timer); in rk_timer_probe()
199 iounmap(timer->base); in rk_timer_probe()
204 static void __init rk_timer_cleanup(struct rk_timer *timer) in rk_timer_cleanup() argument
206 clk_disable_unprepare(timer->clk); in rk_timer_cleanup()
207 clk_disable_unprepare(timer->pclk); in rk_timer_cleanup()
208 iounmap(timer->base); in rk_timer_cleanup()
222 ret = rk_timer_probe(&rk_clkevt->timer, np); in rk_clkevt_init()
233 ce->irq = rk_clkevt->timer.irq; in rk_clkevt_init()
237 ret = request_irq(rk_clkevt->timer.irq, rk_timer_interrupt, IRQF_TIMER, in rk_clkevt_init()
246 rk_clkevt->timer.freq, 1, UINT_MAX); in rk_clkevt_init()
250 rk_timer_cleanup(&rk_clkevt->timer); in rk_clkevt_init()
309 pr_err("Too many timer definitions for '%s'\n", TIMER_NAME); in rk_timer_init()
313 TIMER_OF_DECLARE(rk3288_timer, "rockchip,rk3288-timer", rk_timer_init);
314 TIMER_OF_DECLARE(rk3399_timer, "rockchip,rk3399-timer", rk_timer_init);
323 { .compatible = "rockchip,rk3288-timer" },
324 { .compatible = "rockchip,rk3399-timer" },