Lines Matching refs:timer
3 * Rockchip timer support
44 struct rk_timer timer;
52 return &container_of(ce, struct rk_clkevt, ce)->timer;
55 static inline void rk_timer_disable(struct rk_timer *timer)
57 writel_relaxed(TIMER_DISABLE, timer->ctrl);
60 static inline void rk_timer_enable(struct rk_timer *timer, u32 flags)
62 writel_relaxed(TIMER_ENABLE | flags, timer->ctrl);
66 struct rk_timer *timer)
68 writel_relaxed(cycles, timer->base + TIMER_LOAD_COUNT0);
69 writel_relaxed(0, timer->base + TIMER_LOAD_COUNT1);
72 static void rk_timer_interrupt_clear(struct rk_timer *timer)
74 writel_relaxed(1, timer->base + TIMER_INT_STATUS);
80 struct rk_timer *timer = rk_timer(ce);
82 rk_timer_disable(timer);
83 rk_timer_update_counter(cycles, timer);
84 rk_timer_enable(timer, TIMER_MODE_USER_DEFINED_COUNT |
91 struct rk_timer *timer = rk_timer(ce);
93 rk_timer_disable(timer);
99 struct rk_timer *timer = rk_timer(ce);
101 rk_timer_disable(timer);
102 rk_timer_update_counter(timer->freq / HZ - 1, timer);
103 rk_timer_enable(timer, TIMER_MODE_FREE_RUNNING | TIMER_INT_UNMASK);
110 struct rk_timer *timer = rk_timer(ce);
112 rk_timer_interrupt_clear(timer);
115 rk_timer_disable(timer);
128 rk_timer_probe(struct rk_timer *timer, struct device_node *np)
135 timer->base = of_iomap(np, 0);
136 if (!timer->base) {
141 if (of_device_is_compatible(np, "rockchip,rk3399-timer"))
144 timer->ctrl = timer->base + ctrl_reg;
158 timer->pclk = pclk;
160 timer_clk = of_clk_get_by_name(np, "timer");
163 pr_err("Failed to get timer clock for '%s'\n", TIMER_NAME);
169 pr_err("Failed to enable timer clock\n");
172 timer->clk = timer_clk;
174 timer->freq = clk_get_rate(timer_clk);
182 timer->irq = irq;
184 rk_timer_interrupt_clear(timer);
185 rk_timer_disable(timer);
193 iounmap(timer->base);
198 static void __init rk_timer_cleanup(struct rk_timer *timer)
200 clk_disable_unprepare(timer->clk);
201 clk_disable_unprepare(timer->pclk);
202 iounmap(timer->base);
216 ret = rk_timer_probe(&rk_clkevt->timer, np);
227 ce->irq = rk_clkevt->timer.irq;
231 ret = request_irq(rk_clkevt->timer.irq, rk_timer_interrupt, IRQF_TIMER,
240 rk_clkevt->timer.freq, 1, UINT_MAX);
244 rk_timer_cleanup(&rk_clkevt->timer);
299 pr_err("Too many timer definitions for '%s'\n", TIMER_NAME);
303 TIMER_OF_DECLARE(rk3288_timer, "rockchip,rk3288-timer", rk_timer_init);
304 TIMER_OF_DECLARE(rk3399_timer, "rockchip,rk3399-timer", rk_timer_init);