• Home
  • Raw
  • Download

Lines Matching full:ostm

2  * Renesas Timer Support - OSTM
27 * The OSTM contains independent channels.
28 * The first OSTM channel probed will be set up as a free running
44 /* OSTM REGISTERS */
64 static void ostm_timer_stop(struct ostm_device *ostm) in ostm_timer_stop() argument
66 if (readb(ostm->base + OSTM_TE) & TE) { in ostm_timer_stop()
67 writeb(TT, ostm->base + OSTM_TT); in ostm_timer_stop()
74 while (readb(ostm->base + OSTM_TE) & TE) in ostm_timer_stop()
79 static int __init ostm_init_clksrc(struct ostm_device *ostm, unsigned long rate) in ostm_init_clksrc() argument
85 ostm_timer_stop(ostm); in ostm_init_clksrc()
87 writel(0, ostm->base + OSTM_CMP); in ostm_init_clksrc()
88 writeb(CTL_FREERUN, ostm->base + OSTM_CTL); in ostm_init_clksrc()
89 writeb(TS, ostm->base + OSTM_TS); in ostm_init_clksrc()
91 return clocksource_mmio_init(ostm->base + OSTM_CNT, in ostm_init_clksrc()
92 "ostm", rate, in ostm_init_clksrc()
101 static void __init ostm_init_sched_clock(struct ostm_device *ostm, in ostm_init_sched_clock() argument
104 system_clock = ostm->base + OSTM_CNT; in ostm_init_sched_clock()
111 struct ostm_device *ostm = ced_to_ostm(ced); in ostm_clock_event_next() local
113 ostm_timer_stop(ostm); in ostm_clock_event_next()
115 writel(delta, ostm->base + OSTM_CMP); in ostm_clock_event_next()
116 writeb(CTL_ONESHOT, ostm->base + OSTM_CTL); in ostm_clock_event_next()
117 writeb(TS, ostm->base + OSTM_TS); in ostm_clock_event_next()
124 struct ostm_device *ostm = ced_to_ostm(ced); in ostm_shutdown() local
126 ostm_timer_stop(ostm); in ostm_shutdown()
132 struct ostm_device *ostm = ced_to_ostm(ced); in ostm_set_periodic() local
135 ostm_timer_stop(ostm); in ostm_set_periodic()
137 writel(ostm->ticks_per_jiffy - 1, ostm->base + OSTM_CMP); in ostm_set_periodic()
138 writeb(CTL_PERIODIC, ostm->base + OSTM_CTL); in ostm_set_periodic()
139 writeb(TS, ostm->base + OSTM_TS); in ostm_set_periodic()
146 struct ostm_device *ostm = ced_to_ostm(ced); in ostm_set_oneshot() local
148 ostm_timer_stop(ostm); in ostm_set_oneshot()
155 struct ostm_device *ostm = dev_id; in ostm_timer_interrupt() local
157 if (clockevent_state_oneshot(&ostm->ced)) in ostm_timer_interrupt()
158 ostm_timer_stop(ostm); in ostm_timer_interrupt()
161 if (ostm->ced.event_handler) in ostm_timer_interrupt()
162 ostm->ced.event_handler(&ostm->ced); in ostm_timer_interrupt()
167 static int __init ostm_init_clkevt(struct ostm_device *ostm, int irq, in ostm_init_clkevt() argument
170 struct clock_event_device *ced = &ostm->ced; in ostm_init_clkevt()
175 "ostm", ostm); in ostm_init_clkevt()
177 pr_err("ostm: failed to request irq\n"); in ostm_init_clkevt()
181 ced->name = "ostm"; in ostm_init_clkevt()
197 struct ostm_device *ostm; in ostm_init() local
203 ostm = kzalloc(sizeof(*ostm), GFP_KERNEL); in ostm_init()
204 if (!ostm) in ostm_init()
207 ostm->base = of_iomap(np, 0); in ostm_init()
208 if (!ostm->base) { in ostm_init()
209 pr_err("ostm: failed to remap I/O memory\n"); in ostm_init()
215 pr_err("ostm: Failed to get irq\n"); in ostm_init()
221 pr_err("ostm: Failed to get clock\n"); in ostm_init()
228 pr_err("ostm: Failed to enable clock\n"); in ostm_init()
233 ostm->ticks_per_jiffy = (rate + HZ / 2) / HZ; in ostm_init()
240 ret = ostm_init_clksrc(ostm, rate); in ostm_init()
243 ostm_init_sched_clock(ostm, rate); in ostm_init()
244 pr_info("ostm: used for clocksource\n"); in ostm_init()
248 ret = ostm_init_clkevt(ostm, irq, rate); in ostm_init()
251 pr_info("ostm: used for clock events\n"); in ostm_init()
257 iounmap(ostm->base); in ostm_init()
258 kfree(ostm); in ostm_init()
265 TIMER_OF_DECLARE(ostm, "renesas,ostm", ostm_init);