Symbol: stm_timer
drivers/clocksource/timer-nxp-stm.c
102
static void nxp_stm_clocksource_setcnt(struct stm_timer *stm_timer, u32 cnt)
drivers/clocksource/timer-nxp-stm.c
104
writel(cnt, STM_CNT(stm_timer->base));
drivers/clocksource/timer-nxp-stm.c
109
struct stm_timer *stm_timer = cs_to_stm(cs);
drivers/clocksource/timer-nxp-stm.c
111
return (u64)nxp_stm_clocksource_getcnt(stm_timer);
drivers/clocksource/timer-nxp-stm.c
114
static void nxp_stm_module_enable(struct stm_timer *stm_timer)
drivers/clocksource/timer-nxp-stm.c
118
reg = readl(STM_CR(stm_timer->base));
drivers/clocksource/timer-nxp-stm.c
122
writel(reg, STM_CR(stm_timer->base));
drivers/clocksource/timer-nxp-stm.c
125
static void nxp_stm_module_disable(struct stm_timer *stm_timer)
drivers/clocksource/timer-nxp-stm.c
129
reg = readl(STM_CR(stm_timer->base));
drivers/clocksource/timer-nxp-stm.c
133
writel(reg, STM_CR(stm_timer->base));
drivers/clocksource/timer-nxp-stm.c
136
static void nxp_stm_module_put(struct stm_timer *stm_timer)
drivers/clocksource/timer-nxp-stm.c
138
if (atomic_dec_and_test(&stm_timer->refcnt))
drivers/clocksource/timer-nxp-stm.c
139
nxp_stm_module_disable(stm_timer);
drivers/clocksource/timer-nxp-stm.c
142
static void nxp_stm_module_get(struct stm_timer *stm_timer)
drivers/clocksource/timer-nxp-stm.c
144
if (atomic_inc_return(&stm_timer->refcnt) == 1)
drivers/clocksource/timer-nxp-stm.c
145
nxp_stm_module_enable(stm_timer);
drivers/clocksource/timer-nxp-stm.c
150
struct stm_timer *stm_timer = cs_to_stm(cs);
drivers/clocksource/timer-nxp-stm.c
152
nxp_stm_module_get(stm_timer);
drivers/clocksource/timer-nxp-stm.c
159
struct stm_timer *stm_timer = cs_to_stm(cs);
drivers/clocksource/timer-nxp-stm.c
161
nxp_stm_module_put(stm_timer);
drivers/clocksource/timer-nxp-stm.c
166
struct stm_timer *stm_timer = cs_to_stm(cs);
drivers/clocksource/timer-nxp-stm.c
169
stm_timer->counter = nxp_stm_clocksource_getcnt(stm_timer);
drivers/clocksource/timer-nxp-stm.c
174
struct stm_timer *stm_timer = cs_to_stm(cs);
drivers/clocksource/timer-nxp-stm.c
176
nxp_stm_clocksource_setcnt(stm_timer, stm_timer->counter);
drivers/clocksource/timer-nxp-stm.c
182
struct stm_timer *stm_timer = data;
drivers/clocksource/timer-nxp-stm.c
184
clocksource_unregister(&stm_timer->cs);
drivers/clocksource/timer-nxp-stm.c
187
static int nxp_stm_clocksource_init(struct device *dev, struct stm_timer *stm_timer,
drivers/clocksource/timer-nxp-stm.c
192
stm_timer->base = base;
drivers/clocksource/timer-nxp-stm.c
193
stm_timer->rate = clk_get_rate(clk);
drivers/clocksource/timer-nxp-stm.c
195
stm_timer->cs.name = name;
drivers/clocksource/timer-nxp-stm.c
196
stm_timer->cs.rating = 460;
drivers/clocksource/timer-nxp-stm.c
197
stm_timer->cs.read = nxp_stm_clocksource_read;
drivers/clocksource/timer-nxp-stm.c
198
stm_timer->cs.enable = nxp_stm_clocksource_enable;
drivers/clocksource/timer-nxp-stm.c
199
stm_timer->cs.disable = nxp_stm_clocksource_disable;
drivers/clocksource/timer-nxp-stm.c
200
stm_timer->cs.suspend = nxp_stm_clocksource_suspend;
drivers/clocksource/timer-nxp-stm.c
201
stm_timer->cs.resume = nxp_stm_clocksource_resume;
drivers/clocksource/timer-nxp-stm.c
202
stm_timer->cs.mask = CLOCKSOURCE_MASK(32);
drivers/clocksource/timer-nxp-stm.c
203
stm_timer->cs.flags = CLOCK_SOURCE_IS_CONTINUOUS;
drivers/clocksource/timer-nxp-stm.c
204
stm_timer->cs.owner = THIS_MODULE;
drivers/clocksource/timer-nxp-stm.c
206
ret = clocksource_register_hz(&stm_timer->cs, stm_timer->rate);
drivers/clocksource/timer-nxp-stm.c
210
ret = devm_add_action_or_reset(dev, devm_clocksource_unregister, stm_timer);
drivers/clocksource/timer-nxp-stm.c
214
stm_sched_clock = stm_timer;
drivers/clocksource/timer-nxp-stm.c
216
sched_clock_register(nxp_stm_read_sched_clock, 32, stm_timer->rate);
drivers/clocksource/timer-nxp-stm.c
223
static int nxp_stm_clockevent_read_counter(struct stm_timer *stm_timer)
drivers/clocksource/timer-nxp-stm.c
225
return readl(STM_CNT(stm_timer->base));
drivers/clocksource/timer-nxp-stm.c
228
static void nxp_stm_clockevent_disable(struct stm_timer *stm_timer)
drivers/clocksource/timer-nxp-stm.c
230
writel(0, STM_CCR0(stm_timer->base));
drivers/clocksource/timer-nxp-stm.c
233
static void nxp_stm_clockevent_enable(struct stm_timer *stm_timer)
drivers/clocksource/timer-nxp-stm.c
235
writel(STM_CCR_CEN, STM_CCR0(stm_timer->base));
drivers/clocksource/timer-nxp-stm.c
240
struct stm_timer *stm_timer = ced_to_stm(ced);
drivers/clocksource/timer-nxp-stm.c
242
nxp_stm_clockevent_disable(stm_timer);
drivers/clocksource/timer-nxp-stm.c
249
struct stm_timer *stm_timer = ced_to_stm(ced);
drivers/clocksource/timer-nxp-stm.c
252
nxp_stm_clockevent_disable(stm_timer);
drivers/clocksource/timer-nxp-stm.c
254
stm_timer->delta = delta;
drivers/clocksource/timer-nxp-stm.c
256
val = nxp_stm_clockevent_read_counter(stm_timer) + delta;
drivers/clocksource/timer-nxp-stm.c
258
writel(val, STM_CMP0(stm_timer->base));
drivers/clocksource/timer-nxp-stm.c
270
if (val > nxp_stm_clockevent_read_counter(stm_timer) + delta)
drivers/clocksource/timer-nxp-stm.c
273
nxp_stm_clockevent_enable(stm_timer);
drivers/clocksource/timer-nxp-stm.c
280
struct stm_timer *stm_timer = ced_to_stm(ced);
drivers/clocksource/timer-nxp-stm.c
282
return nxp_stm_clockevent_set_next_event(stm_timer->rate, ced);
drivers/clocksource/timer-nxp-stm.c
287
struct stm_timer *stm_timer = ced_to_stm(ced);
drivers/clocksource/timer-nxp-stm.c
289
nxp_stm_module_put(stm_timer);
drivers/clocksource/timer-nxp-stm.c
294
struct stm_timer *stm_timer = ced_to_stm(ced);
drivers/clocksource/timer-nxp-stm.c
296
nxp_stm_module_get(stm_timer);
drivers/clocksource/timer-nxp-stm.c
299
static int nxp_stm_clockevent_per_cpu_init(struct device *dev, struct stm_timer *stm_timer,
drivers/clocksource/timer-nxp-stm.c
303
stm_timer->base = base;
drivers/clocksource/timer-nxp-stm.c
304
stm_timer->rate = clk_get_rate(clk);
drivers/clocksource/timer-nxp-stm.c
306
stm_timer->ced.name = name;
drivers/clocksource/timer-nxp-stm.c
307
stm_timer->ced.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
drivers/clocksource/timer-nxp-stm.c
308
stm_timer->ced.set_state_shutdown = nxp_stm_clockevent_shutdown;
drivers/clocksource/timer-nxp-stm.c
309
stm_timer->ced.set_state_periodic = nxp_stm_clockevent_set_periodic;
drivers/clocksource/timer-nxp-stm.c
310
stm_timer->ced.set_next_event = nxp_stm_clockevent_set_next_event;
drivers/clocksource/timer-nxp-stm.c
311
stm_timer->ced.suspend = nxp_stm_clockevent_suspend;
drivers/clocksource/timer-nxp-stm.c
312
stm_timer->ced.resume = nxp_stm_clockevent_resume;
drivers/clocksource/timer-nxp-stm.c
313
stm_timer->ced.cpumask = cpumask_of(cpu);
drivers/clocksource/timer-nxp-stm.c
314
stm_timer->ced.rating = 460;
drivers/clocksource/timer-nxp-stm.c
315
stm_timer->ced.irq = irq;
drivers/clocksource/timer-nxp-stm.c
316
stm_timer->ced.owner = THIS_MODULE;
drivers/clocksource/timer-nxp-stm.c
318
per_cpu(stm_timers, cpu) = stm_timer;
drivers/clocksource/timer-nxp-stm.c
320
nxp_stm_module_get(stm_timer);
drivers/clocksource/timer-nxp-stm.c
329
struct stm_timer *stm_timer = per_cpu(stm_timers, cpu);
drivers/clocksource/timer-nxp-stm.c
332
if (WARN_ON(!stm_timer))
drivers/clocksource/timer-nxp-stm.c
335
ret = irq_force_affinity(stm_timer->ced.irq, cpumask_of(cpu));
drivers/clocksource/timer-nxp-stm.c
348
clockevents_config_and_register(&stm_timer->ced, stm_timer->rate,
drivers/clocksource/timer-nxp-stm.c
349
(stm_timer->rate / MICRO) * 2, ULONG_MAX);
drivers/clocksource/timer-nxp-stm.c
356
struct stm_timer *stm_timer = dev_id;
drivers/clocksource/timer-nxp-stm.c
357
struct clock_event_device *ced = &stm_timer->ced;
drivers/clocksource/timer-nxp-stm.c
367
writel(STM_CIR_CIF, STM_CIR0(stm_timer->base));
drivers/clocksource/timer-nxp-stm.c
372
val = nxp_stm_clockevent_read_counter(stm_timer) + stm_timer->delta;
drivers/clocksource/timer-nxp-stm.c
374
writel(val, STM_CMP0(stm_timer->base));
drivers/clocksource/timer-nxp-stm.c
382
nxp_stm_clockevent_disable(stm_timer);
drivers/clocksource/timer-nxp-stm.c
391
struct stm_timer *stm_timer;
drivers/clocksource/timer-nxp-stm.c
437
stm_timer = devm_kzalloc(dev, sizeof(*stm_timer), GFP_KERNEL);
drivers/clocksource/timer-nxp-stm.c
438
if (!stm_timer)
drivers/clocksource/timer-nxp-stm.c
442
IRQF_TIMER | IRQF_NOBALANCING, name, stm_timer);
drivers/clocksource/timer-nxp-stm.c
446
ret = nxp_stm_clocksource_init(dev, stm_timer, name, base, clk);
drivers/clocksource/timer-nxp-stm.c
455
ret = nxp_stm_clockevent_per_cpu_init(dev, stm_timer, name,
drivers/clocksource/timer-nxp-stm.c
65
static DEFINE_PER_CPU(struct stm_timer *, stm_timers);
drivers/clocksource/timer-nxp-stm.c
67
static struct stm_timer *stm_sched_clock;
drivers/clocksource/timer-nxp-stm.c
82
static struct stm_timer *cs_to_stm(struct clocksource *cs)
drivers/clocksource/timer-nxp-stm.c
84
return container_of(cs, struct stm_timer, cs);
drivers/clocksource/timer-nxp-stm.c
87
static struct stm_timer *ced_to_stm(struct clock_event_device *ced)
drivers/clocksource/timer-nxp-stm.c
89
return container_of(ced, struct stm_timer, ced);
drivers/clocksource/timer-nxp-stm.c
97
static u32 nxp_stm_clocksource_getcnt(struct stm_timer *stm_timer)
drivers/clocksource/timer-nxp-stm.c
99
return readl(STM_CNT(stm_timer->base));