hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/clocksource/timer-imx-gpt.c
....@@ -67,7 +67,6 @@
6767 struct clk *clk_ipg;
6868 const struct imx_gpt_data *gpt;
6969 struct clock_event_device ced;
70
- struct irqaction act;
7170 };
7271
7372 struct imx_gpt_data {
....@@ -141,21 +140,25 @@
141140 return sched_clock_reg ? readl_relaxed(sched_clock_reg) : 0;
142141 }
143142
143
+#if defined(CONFIG_ARM)
144144 static struct delay_timer imx_delay_timer;
145145
146146 static unsigned long imx_read_current_timer(void)
147147 {
148148 return readl_relaxed(sched_clock_reg);
149149 }
150
+#endif
150151
151152 static int __init mxc_clocksource_init(struct imx_timer *imxtm)
152153 {
153154 unsigned int c = clk_get_rate(imxtm->clk_per);
154155 void __iomem *reg = imxtm->base + imxtm->gpt->reg_tcn;
155156
157
+#if defined(CONFIG_ARM)
156158 imx_delay_timer.read_current_timer = &imx_read_current_timer;
157159 imx_delay_timer.freq = c;
158160 register_current_timer_delay(&imx_delay_timer);
161
+#endif
159162
160163 sched_clock_reg = reg;
161164
....@@ -198,14 +201,7 @@
198201 static int mxc_shutdown(struct clock_event_device *ced)
199202 {
200203 struct imx_timer *imxtm = to_imx_timer(ced);
201
- unsigned long flags;
202204 u32 tcn;
203
-
204
- /*
205
- * The timer interrupt generation is disabled at least
206
- * for enough time to call mxc_set_next_event()
207
- */
208
- local_irq_save(flags);
209205
210206 /* Disable interrupt in GPT module */
211207 imxtm->gpt->gpt_irq_disable(imxtm);
....@@ -221,21 +217,12 @@
221217 printk(KERN_INFO "%s: changing mode\n", __func__);
222218 #endif /* DEBUG */
223219
224
- local_irq_restore(flags);
225
-
226220 return 0;
227221 }
228222
229223 static int mxc_set_oneshot(struct clock_event_device *ced)
230224 {
231225 struct imx_timer *imxtm = to_imx_timer(ced);
232
- unsigned long flags;
233
-
234
- /*
235
- * The timer interrupt generation is disabled at least
236
- * for enough time to call mxc_set_next_event()
237
- */
238
- local_irq_save(flags);
239226
240227 /* Disable interrupt in GPT module */
241228 imxtm->gpt->gpt_irq_disable(imxtm);
....@@ -260,7 +247,6 @@
260247 * mode switching
261248 */
262249 imxtm->gpt->gpt_irq_enable(imxtm);
263
- local_irq_restore(flags);
264250
265251 return 0;
266252 }
....@@ -286,7 +272,6 @@
286272 static int __init mxc_clockevent_init(struct imx_timer *imxtm)
287273 {
288274 struct clock_event_device *ced = &imxtm->ced;
289
- struct irqaction *act = &imxtm->act;
290275
291276 ced->name = "mxc_timer1";
292277 ced->features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_DYNIRQ;
....@@ -300,12 +285,8 @@
300285 clockevents_config_and_register(ced, clk_get_rate(imxtm->clk_per),
301286 0xff, 0xfffffffe);
302287
303
- act->name = "i.MX Timer Tick";
304
- act->flags = IRQF_TIMER | IRQF_IRQPOLL;
305
- act->handler = mxc_timer_interrupt;
306
- act->dev_id = ced;
307
-
308
- return setup_irq(imxtm->irq, act);
288
+ return request_irq(imxtm->irq, mxc_timer_interrupt,
289
+ IRQF_TIMER | IRQF_IRQPOLL, "i.MX Timer Tick", ced);
309290 }
310291
311292 static void imx1_gpt_setup_tctl(struct imx_timer *imxtm)