Lines Matching refs:evt
68 static void mtk_clkevt_time_stop(struct mtk_clock_event_device *evt, u8 timer) in mtk_clkevt_time_stop() argument
72 val = readl(evt->gpt_base + TIMER_CTRL_REG(timer)); in mtk_clkevt_time_stop()
73 writel(val & ~TIMER_CTRL_ENABLE, evt->gpt_base + in mtk_clkevt_time_stop()
77 static void mtk_clkevt_time_setup(struct mtk_clock_event_device *evt, in mtk_clkevt_time_setup() argument
80 writel(delay, evt->gpt_base + TIMER_CMP_REG(timer)); in mtk_clkevt_time_setup()
83 static void mtk_clkevt_time_start(struct mtk_clock_event_device *evt, in mtk_clkevt_time_start() argument
89 writel(GPT_IRQ_ACK(timer), evt->gpt_base + GPT_IRQ_ACK_REG); in mtk_clkevt_time_start()
91 val = readl(evt->gpt_base + TIMER_CTRL_REG(timer)); in mtk_clkevt_time_start()
102 evt->gpt_base + TIMER_CTRL_REG(timer)); in mtk_clkevt_time_start()
108 struct mtk_clock_event_device *evt = to_mtk_clk(clk); in mtk_clkevt_mode() local
110 mtk_clkevt_time_stop(evt, GPT_CLK_EVT); in mtk_clkevt_mode()
114 mtk_clkevt_time_setup(evt, evt->ticks_per_jiffy, GPT_CLK_EVT); in mtk_clkevt_mode()
115 mtk_clkevt_time_start(evt, true, GPT_CLK_EVT); in mtk_clkevt_mode()
131 struct mtk_clock_event_device *evt = to_mtk_clk(clk); in mtk_clkevt_next_event() local
133 mtk_clkevt_time_stop(evt, GPT_CLK_EVT); in mtk_clkevt_next_event()
134 mtk_clkevt_time_setup(evt, event, GPT_CLK_EVT); in mtk_clkevt_next_event()
135 mtk_clkevt_time_start(evt, false, GPT_CLK_EVT); in mtk_clkevt_next_event()
142 struct mtk_clock_event_device *evt = dev_id; in mtk_timer_interrupt() local
145 writel(GPT_IRQ_ACK(GPT_CLK_EVT), evt->gpt_base + GPT_IRQ_ACK_REG); in mtk_timer_interrupt()
146 evt->dev.event_handler(&evt->dev); in mtk_timer_interrupt()
151 static void mtk_timer_global_reset(struct mtk_clock_event_device *evt) in mtk_timer_global_reset() argument
154 writel(0x0, evt->gpt_base + GPT_IRQ_EN_REG); in mtk_timer_global_reset()
156 writel(0x3f, evt->gpt_base + GPT_IRQ_ACK_REG); in mtk_timer_global_reset()
160 mtk_timer_setup(struct mtk_clock_event_device *evt, u8 timer, u8 option) in mtk_timer_setup() argument
163 evt->gpt_base + TIMER_CTRL_REG(timer)); in mtk_timer_setup()
166 evt->gpt_base + TIMER_CLK_REG(timer)); in mtk_timer_setup()
168 writel(0x0, evt->gpt_base + TIMER_CMP_REG(timer)); in mtk_timer_setup()
171 evt->gpt_base + TIMER_CTRL_REG(timer)); in mtk_timer_setup()
174 static void mtk_timer_enable_irq(struct mtk_clock_event_device *evt, u8 timer) in mtk_timer_enable_irq() argument
178 val = readl(evt->gpt_base + GPT_IRQ_EN_REG); in mtk_timer_enable_irq()
180 evt->gpt_base + GPT_IRQ_EN_REG); in mtk_timer_enable_irq()
185 struct mtk_clock_event_device *evt; in mtk_timer_init() local
190 evt = kzalloc(sizeof(*evt), GFP_KERNEL); in mtk_timer_init()
191 if (!evt) { in mtk_timer_init()
196 evt->dev.name = "mtk_tick"; in mtk_timer_init()
197 evt->dev.rating = 300; in mtk_timer_init()
198 evt->dev.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT; in mtk_timer_init()
199 evt->dev.set_mode = mtk_clkevt_mode; in mtk_timer_init()
200 evt->dev.set_next_event = mtk_clkevt_next_event; in mtk_timer_init()
201 evt->dev.cpumask = cpu_possible_mask; in mtk_timer_init()
203 evt->gpt_base = of_io_request_and_map(node, 0, "mtk-timer"); in mtk_timer_init()
204 if (IS_ERR(evt->gpt_base)) { in mtk_timer_init()
209 evt->dev.irq = irq_of_parse_and_map(node, 0); in mtk_timer_init()
210 if (evt->dev.irq <= 0) { in mtk_timer_init()
227 mtk_timer_global_reset(evt); in mtk_timer_init()
229 if (request_irq(evt->dev.irq, mtk_timer_interrupt, in mtk_timer_init()
230 IRQF_TIMER | IRQF_IRQPOLL, "mtk_timer", evt)) { in mtk_timer_init()
231 pr_warn("failed to setup irq %d\n", evt->dev.irq); in mtk_timer_init()
235 evt->ticks_per_jiffy = DIV_ROUND_UP(rate, HZ); in mtk_timer_init()
238 mtk_timer_setup(evt, GPT_CLK_SRC, TIMER_CTRL_OP_FREERUN); in mtk_timer_init()
239 clocksource_mmio_init(evt->gpt_base + TIMER_CNT_REG(GPT_CLK_SRC), in mtk_timer_init()
243 mtk_timer_setup(evt, GPT_CLK_EVT, TIMER_CTRL_OP_REPEAT); in mtk_timer_init()
244 clockevents_config_and_register(&evt->dev, rate, 0x3, in mtk_timer_init()
247 mtk_timer_enable_irq(evt, GPT_CLK_EVT); in mtk_timer_init()
256 irq_dispose_mapping(evt->dev.irq); in mtk_timer_init()
258 iounmap(evt->gpt_base); in mtk_timer_init()