Lines Matching refs:fttmr010
94 struct fttmr010 { struct
109 static struct fttmr010 *local_fttmr; argument
111 static inline struct fttmr010 *to_fttmr010(struct clock_event_device *evt) in to_fttmr010()
113 return container_of(evt, struct fttmr010, clkevt); in to_fttmr010()
139 struct fttmr010 *fttmr010 = to_fttmr010(evt); in fttmr010_timer_set_next_event() local
143 cr = readl(fttmr010->base + TIMER_CR); in fttmr010_timer_set_next_event()
144 cr &= ~fttmr010->t1_enable_val; in fttmr010_timer_set_next_event()
145 writel(cr, fttmr010->base + TIMER_CR); in fttmr010_timer_set_next_event()
147 if (fttmr010->is_aspeed) { in fttmr010_timer_set_next_event()
152 writel(cycles, fttmr010->base + TIMER1_LOAD); in fttmr010_timer_set_next_event()
155 cr = readl(fttmr010->base + TIMER1_COUNT); in fttmr010_timer_set_next_event()
156 writel(cr + cycles, fttmr010->base + TIMER1_MATCH1); in fttmr010_timer_set_next_event()
160 cr = readl(fttmr010->base + TIMER_CR); in fttmr010_timer_set_next_event()
161 cr |= fttmr010->t1_enable_val; in fttmr010_timer_set_next_event()
162 writel(cr, fttmr010->base + TIMER_CR); in fttmr010_timer_set_next_event()
169 struct fttmr010 *fttmr010 = to_fttmr010(evt); in fttmr010_timer_shutdown() local
173 cr = readl(fttmr010->base + TIMER_CR); in fttmr010_timer_shutdown()
174 cr &= ~fttmr010->t1_enable_val; in fttmr010_timer_shutdown()
175 writel(cr, fttmr010->base + TIMER_CR); in fttmr010_timer_shutdown()
182 struct fttmr010 *fttmr010 = to_fttmr010(evt); in fttmr010_timer_set_oneshot() local
186 cr = readl(fttmr010->base + TIMER_CR); in fttmr010_timer_set_oneshot()
187 cr &= ~fttmr010->t1_enable_val; in fttmr010_timer_set_oneshot()
188 writel(cr, fttmr010->base + TIMER_CR); in fttmr010_timer_set_oneshot()
191 writel(0, fttmr010->base + TIMER1_COUNT); in fttmr010_timer_set_oneshot()
192 if (fttmr010->is_aspeed) { in fttmr010_timer_set_oneshot()
193 writel(~0, fttmr010->base + TIMER1_LOAD); in fttmr010_timer_set_oneshot()
195 writel(0, fttmr010->base + TIMER1_LOAD); in fttmr010_timer_set_oneshot()
198 cr = readl(fttmr010->base + TIMER_INTR_MASK); in fttmr010_timer_set_oneshot()
201 writel(cr, fttmr010->base + TIMER_INTR_MASK); in fttmr010_timer_set_oneshot()
209 struct fttmr010 *fttmr010 = to_fttmr010(evt); in fttmr010_timer_set_periodic() local
210 u32 period = DIV_ROUND_CLOSEST(fttmr010->tick_rate, HZ); in fttmr010_timer_set_periodic()
214 cr = readl(fttmr010->base + TIMER_CR); in fttmr010_timer_set_periodic()
215 cr &= ~fttmr010->t1_enable_val; in fttmr010_timer_set_periodic()
216 writel(cr, fttmr010->base + TIMER_CR); in fttmr010_timer_set_periodic()
219 if (fttmr010->is_aspeed) { in fttmr010_timer_set_periodic()
220 writel(period, fttmr010->base + TIMER1_LOAD); in fttmr010_timer_set_periodic()
223 writel(cr, fttmr010->base + TIMER1_COUNT); in fttmr010_timer_set_periodic()
224 writel(cr, fttmr010->base + TIMER1_LOAD); in fttmr010_timer_set_periodic()
227 cr = readl(fttmr010->base + TIMER_INTR_MASK); in fttmr010_timer_set_periodic()
230 writel(cr, fttmr010->base + TIMER_INTR_MASK); in fttmr010_timer_set_periodic()
234 cr = readl(fttmr010->base + TIMER_CR); in fttmr010_timer_set_periodic()
235 cr |= fttmr010->t1_enable_val; in fttmr010_timer_set_periodic()
236 writel(cr, fttmr010->base + TIMER_CR); in fttmr010_timer_set_periodic()
254 struct fttmr010 *fttmr010; in fttmr010_common_init() local
276 fttmr010 = kzalloc(sizeof(*fttmr010), GFP_KERNEL); in fttmr010_common_init()
277 if (!fttmr010) { in fttmr010_common_init()
281 fttmr010->tick_rate = clk_get_rate(clk); in fttmr010_common_init()
283 fttmr010->base = of_iomap(np, 0); in fttmr010_common_init()
284 if (!fttmr010->base) { in fttmr010_common_init()
301 fttmr010->t1_enable_val = TIMER_1_CR_ASPEED_ENABLE | in fttmr010_common_init()
303 fttmr010->is_aspeed = true; in fttmr010_common_init()
305 fttmr010->t1_enable_val = TIMER_1_CR_ENABLE | TIMER_1_CR_INT; in fttmr010_common_init()
310 writel(TIMER_INT_ALL_MASK, fttmr010->base + TIMER_INTR_MASK); in fttmr010_common_init()
311 writel(0, fttmr010->base + TIMER_INTR_STATE); in fttmr010_common_init()
324 writel(val, fttmr010->base + TIMER_CR); in fttmr010_common_init()
330 local_fttmr = fttmr010; in fttmr010_common_init()
331 writel(0, fttmr010->base + TIMER2_COUNT); in fttmr010_common_init()
332 writel(0, fttmr010->base + TIMER2_MATCH1); in fttmr010_common_init()
333 writel(0, fttmr010->base + TIMER2_MATCH2); in fttmr010_common_init()
335 if (fttmr010->is_aspeed) { in fttmr010_common_init()
336 writel(~0, fttmr010->base + TIMER2_LOAD); in fttmr010_common_init()
337 clocksource_mmio_init(fttmr010->base + TIMER2_COUNT, in fttmr010_common_init()
339 fttmr010->tick_rate, in fttmr010_common_init()
342 fttmr010->tick_rate); in fttmr010_common_init()
344 writel(0, fttmr010->base + TIMER2_LOAD); in fttmr010_common_init()
345 clocksource_mmio_init(fttmr010->base + TIMER2_COUNT, in fttmr010_common_init()
347 fttmr010->tick_rate, in fttmr010_common_init()
350 fttmr010->tick_rate); in fttmr010_common_init()
356 writel(0, fttmr010->base + TIMER1_COUNT); in fttmr010_common_init()
357 writel(0, fttmr010->base + TIMER1_LOAD); in fttmr010_common_init()
358 writel(0, fttmr010->base + TIMER1_MATCH1); in fttmr010_common_init()
359 writel(0, fttmr010->base + TIMER1_MATCH2); in fttmr010_common_init()
361 "FTTMR010-TIMER1", &fttmr010->clkevt); in fttmr010_common_init()
367 fttmr010->clkevt.name = "FTTMR010-TIMER1"; in fttmr010_common_init()
369 fttmr010->clkevt.rating = 300; in fttmr010_common_init()
370 fttmr010->clkevt.features = CLOCK_EVT_FEAT_PERIODIC | in fttmr010_common_init()
372 fttmr010->clkevt.set_next_event = fttmr010_timer_set_next_event; in fttmr010_common_init()
373 fttmr010->clkevt.set_state_shutdown = fttmr010_timer_shutdown; in fttmr010_common_init()
374 fttmr010->clkevt.set_state_periodic = fttmr010_timer_set_periodic; in fttmr010_common_init()
375 fttmr010->clkevt.set_state_oneshot = fttmr010_timer_set_oneshot; in fttmr010_common_init()
376 fttmr010->clkevt.tick_resume = fttmr010_timer_shutdown; in fttmr010_common_init()
377 fttmr010->clkevt.cpumask = cpumask_of(0); in fttmr010_common_init()
378 fttmr010->clkevt.irq = irq; in fttmr010_common_init()
379 clockevents_config_and_register(&fttmr010->clkevt, in fttmr010_common_init()
380 fttmr010->tick_rate, in fttmr010_common_init()
385 if (fttmr010->is_aspeed) in fttmr010_common_init()
386 fttmr010->delay_timer.read_current_timer = in fttmr010_common_init()
389 fttmr010->delay_timer.read_current_timer = in fttmr010_common_init()
391 fttmr010->delay_timer.freq = fttmr010->tick_rate; in fttmr010_common_init()
392 register_current_timer_delay(&fttmr010->delay_timer); in fttmr010_common_init()
398 iounmap(fttmr010->base); in fttmr010_common_init()
400 kfree(fttmr010); in fttmr010_common_init()
417 TIMER_OF_DECLARE(fttmr010, "faraday,fttmr010", fttmr010_timer_init);