2 * linux/drivers/clocksource/arm_arch_timer.c
4 * Copyright (C) 2011 ARM Ltd.
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
11 #include <linux/init.h>
12 #include <linux/kernel.h>
13 #include <linux/device.h>
14 #include <linux/smp.h>
15 #include <linux/cpu.h>
16 #include <linux/cpu_pm.h>
17 #include <linux/clockchips.h>
18 #include <linux/clocksource.h>
19 #include <linux/interrupt.h>
20 #include <linux/of_irq.h>
21 #include <linux/of_address.h>
23 #include <linux/slab.h>
24 #include <linux/sched_clock.h>
25 #include <linux/acpi.h>
27 #include <asm/arch_timer.h>
30 #include <clocksource/arm_arch_timer.h>
33 #define CNTTIDR_VIRT(n) (BIT(1) << ((n) * 4))
35 #define CNTVCT_LO 0x08
36 #define CNTVCT_HI 0x0c
38 #define CNTP_TVAL 0x28
40 #define CNTV_TVAL 0x38
43 #define ARCH_CP15_TIMER BIT(0)
44 #define ARCH_MEM_TIMER BIT(1)
45 static unsigned arch_timers_present __initdata
;
47 static void __iomem
*arch_counter_base
;
51 struct clock_event_device evt
;
54 #define to_arch_timer(e) container_of(e, struct arch_timer, evt)
56 static u32 arch_timer_rate
;
66 static int arch_timer_ppi
[MAX_TIMER_PPI
];
68 static struct clock_event_device __percpu
*arch_timer_evt
;
70 static bool arch_timer_use_virtual
= true;
71 static bool arch_timer_c3stop
;
72 static bool arch_timer_mem_use_virtual
;
75 * Architected system timer support.
78 static __always_inline
79 void arch_timer_reg_write(int access
, enum arch_timer_reg reg
, u32 val
,
80 struct clock_event_device
*clk
)
82 if (access
== ARCH_TIMER_MEM_PHYS_ACCESS
) {
83 struct arch_timer
*timer
= to_arch_timer(clk
);
85 case ARCH_TIMER_REG_CTRL
:
86 writel_relaxed(val
, timer
->base
+ CNTP_CTL
);
88 case ARCH_TIMER_REG_TVAL
:
89 writel_relaxed(val
, timer
->base
+ CNTP_TVAL
);
92 } else if (access
== ARCH_TIMER_MEM_VIRT_ACCESS
) {
93 struct arch_timer
*timer
= to_arch_timer(clk
);
95 case ARCH_TIMER_REG_CTRL
:
96 writel_relaxed(val
, timer
->base
+ CNTV_CTL
);
98 case ARCH_TIMER_REG_TVAL
:
99 writel_relaxed(val
, timer
->base
+ CNTV_TVAL
);
103 arch_timer_reg_write_cp15(access
, reg
, val
);
107 static __always_inline
108 u32
arch_timer_reg_read(int access
, enum arch_timer_reg reg
,
109 struct clock_event_device
*clk
)
113 if (access
== ARCH_TIMER_MEM_PHYS_ACCESS
) {
114 struct arch_timer
*timer
= to_arch_timer(clk
);
116 case ARCH_TIMER_REG_CTRL
:
117 val
= readl_relaxed(timer
->base
+ CNTP_CTL
);
119 case ARCH_TIMER_REG_TVAL
:
120 val
= readl_relaxed(timer
->base
+ CNTP_TVAL
);
123 } else if (access
== ARCH_TIMER_MEM_VIRT_ACCESS
) {
124 struct arch_timer
*timer
= to_arch_timer(clk
);
126 case ARCH_TIMER_REG_CTRL
:
127 val
= readl_relaxed(timer
->base
+ CNTV_CTL
);
129 case ARCH_TIMER_REG_TVAL
:
130 val
= readl_relaxed(timer
->base
+ CNTV_TVAL
);
134 val
= arch_timer_reg_read_cp15(access
, reg
);
140 static __always_inline irqreturn_t
timer_handler(const int access
,
141 struct clock_event_device
*evt
)
145 ctrl
= arch_timer_reg_read(access
, ARCH_TIMER_REG_CTRL
, evt
);
146 if (ctrl
& ARCH_TIMER_CTRL_IT_STAT
) {
147 ctrl
|= ARCH_TIMER_CTRL_IT_MASK
;
148 arch_timer_reg_write(access
, ARCH_TIMER_REG_CTRL
, ctrl
, evt
);
149 evt
->event_handler(evt
);
156 static irqreturn_t
arch_timer_handler_virt(int irq
, void *dev_id
)
158 struct clock_event_device
*evt
= dev_id
;
160 return timer_handler(ARCH_TIMER_VIRT_ACCESS
, evt
);
163 static irqreturn_t
arch_timer_handler_phys(int irq
, void *dev_id
)
165 struct clock_event_device
*evt
= dev_id
;
167 return timer_handler(ARCH_TIMER_PHYS_ACCESS
, evt
);
170 static irqreturn_t
arch_timer_handler_phys_mem(int irq
, void *dev_id
)
172 struct clock_event_device
*evt
= dev_id
;
174 return timer_handler(ARCH_TIMER_MEM_PHYS_ACCESS
, evt
);
177 static irqreturn_t
arch_timer_handler_virt_mem(int irq
, void *dev_id
)
179 struct clock_event_device
*evt
= dev_id
;
181 return timer_handler(ARCH_TIMER_MEM_VIRT_ACCESS
, evt
);
184 static __always_inline
void timer_set_mode(const int access
, int mode
,
185 struct clock_event_device
*clk
)
189 case CLOCK_EVT_MODE_UNUSED
:
190 case CLOCK_EVT_MODE_SHUTDOWN
:
191 ctrl
= arch_timer_reg_read(access
, ARCH_TIMER_REG_CTRL
, clk
);
192 ctrl
&= ~ARCH_TIMER_CTRL_ENABLE
;
193 arch_timer_reg_write(access
, ARCH_TIMER_REG_CTRL
, ctrl
, clk
);
200 static void arch_timer_set_mode_virt(enum clock_event_mode mode
,
201 struct clock_event_device
*clk
)
203 timer_set_mode(ARCH_TIMER_VIRT_ACCESS
, mode
, clk
);
206 static void arch_timer_set_mode_phys(enum clock_event_mode mode
,
207 struct clock_event_device
*clk
)
209 timer_set_mode(ARCH_TIMER_PHYS_ACCESS
, mode
, clk
);
212 static void arch_timer_set_mode_virt_mem(enum clock_event_mode mode
,
213 struct clock_event_device
*clk
)
215 timer_set_mode(ARCH_TIMER_MEM_VIRT_ACCESS
, mode
, clk
);
218 static void arch_timer_set_mode_phys_mem(enum clock_event_mode mode
,
219 struct clock_event_device
*clk
)
221 timer_set_mode(ARCH_TIMER_MEM_PHYS_ACCESS
, mode
, clk
);
224 static __always_inline
void set_next_event(const int access
, unsigned long evt
,
225 struct clock_event_device
*clk
)
228 ctrl
= arch_timer_reg_read(access
, ARCH_TIMER_REG_CTRL
, clk
);
229 ctrl
|= ARCH_TIMER_CTRL_ENABLE
;
230 ctrl
&= ~ARCH_TIMER_CTRL_IT_MASK
;
231 arch_timer_reg_write(access
, ARCH_TIMER_REG_TVAL
, evt
, clk
);
232 arch_timer_reg_write(access
, ARCH_TIMER_REG_CTRL
, ctrl
, clk
);
235 static int arch_timer_set_next_event_virt(unsigned long evt
,
236 struct clock_event_device
*clk
)
238 set_next_event(ARCH_TIMER_VIRT_ACCESS
, evt
, clk
);
242 static int arch_timer_set_next_event_phys(unsigned long evt
,
243 struct clock_event_device
*clk
)
245 set_next_event(ARCH_TIMER_PHYS_ACCESS
, evt
, clk
);
249 static int arch_timer_set_next_event_virt_mem(unsigned long evt
,
250 struct clock_event_device
*clk
)
252 set_next_event(ARCH_TIMER_MEM_VIRT_ACCESS
, evt
, clk
);
256 static int arch_timer_set_next_event_phys_mem(unsigned long evt
,
257 struct clock_event_device
*clk
)
259 set_next_event(ARCH_TIMER_MEM_PHYS_ACCESS
, evt
, clk
);
263 static void __arch_timer_setup(unsigned type
,
264 struct clock_event_device
*clk
)
266 clk
->features
= CLOCK_EVT_FEAT_ONESHOT
;
268 if (type
== ARCH_CP15_TIMER
) {
269 if (arch_timer_c3stop
)
270 clk
->features
|= CLOCK_EVT_FEAT_C3STOP
;
271 clk
->name
= "arch_sys_timer";
273 clk
->cpumask
= cpumask_of(smp_processor_id());
274 if (arch_timer_use_virtual
) {
275 clk
->irq
= arch_timer_ppi
[VIRT_PPI
];
276 clk
->set_mode
= arch_timer_set_mode_virt
;
277 clk
->set_next_event
= arch_timer_set_next_event_virt
;
279 clk
->irq
= arch_timer_ppi
[PHYS_SECURE_PPI
];
280 clk
->set_mode
= arch_timer_set_mode_phys
;
281 clk
->set_next_event
= arch_timer_set_next_event_phys
;
284 clk
->features
|= CLOCK_EVT_FEAT_DYNIRQ
;
285 clk
->name
= "arch_mem_timer";
287 clk
->cpumask
= cpu_all_mask
;
288 if (arch_timer_mem_use_virtual
) {
289 clk
->set_mode
= arch_timer_set_mode_virt_mem
;
290 clk
->set_next_event
=
291 arch_timer_set_next_event_virt_mem
;
293 clk
->set_mode
= arch_timer_set_mode_phys_mem
;
294 clk
->set_next_event
=
295 arch_timer_set_next_event_phys_mem
;
299 clk
->set_mode(CLOCK_EVT_MODE_SHUTDOWN
, clk
);
301 clockevents_config_and_register(clk
, arch_timer_rate
, 0xf, 0x7fffffff);
304 static void arch_timer_evtstrm_enable(int divider
)
306 u32 cntkctl
= arch_timer_get_cntkctl();
308 cntkctl
&= ~ARCH_TIMER_EVT_TRIGGER_MASK
;
309 /* Set the divider and enable virtual event stream */
310 cntkctl
|= (divider
<< ARCH_TIMER_EVT_TRIGGER_SHIFT
)
311 | ARCH_TIMER_VIRT_EVT_EN
;
312 arch_timer_set_cntkctl(cntkctl
);
313 elf_hwcap
|= HWCAP_EVTSTRM
;
315 compat_elf_hwcap
|= COMPAT_HWCAP_EVTSTRM
;
319 static void arch_timer_configure_evtstream(void)
321 int evt_stream_div
, pos
;
323 /* Find the closest power of two to the divisor */
324 evt_stream_div
= arch_timer_rate
/ ARCH_TIMER_EVT_STREAM_FREQ
;
325 pos
= fls(evt_stream_div
);
326 if (pos
> 1 && !(evt_stream_div
& (1 << (pos
- 2))))
328 /* enable event stream */
329 arch_timer_evtstrm_enable(min(pos
, 15));
332 static void arch_counter_set_user_access(void)
334 u32 cntkctl
= arch_timer_get_cntkctl();
336 /* Disable user access to the timers and the physical counter */
337 /* Also disable virtual event stream */
338 cntkctl
&= ~(ARCH_TIMER_USR_PT_ACCESS_EN
339 | ARCH_TIMER_USR_VT_ACCESS_EN
340 | ARCH_TIMER_VIRT_EVT_EN
341 | ARCH_TIMER_USR_PCT_ACCESS_EN
);
343 /* Enable user access to the virtual counter */
344 cntkctl
|= ARCH_TIMER_USR_VCT_ACCESS_EN
;
346 arch_timer_set_cntkctl(cntkctl
);
349 static int arch_timer_setup(struct clock_event_device
*clk
)
351 __arch_timer_setup(ARCH_CP15_TIMER
, clk
);
353 if (arch_timer_use_virtual
)
354 enable_percpu_irq(arch_timer_ppi
[VIRT_PPI
], 0);
356 enable_percpu_irq(arch_timer_ppi
[PHYS_SECURE_PPI
], 0);
357 if (arch_timer_ppi
[PHYS_NONSECURE_PPI
])
358 enable_percpu_irq(arch_timer_ppi
[PHYS_NONSECURE_PPI
], 0);
361 arch_counter_set_user_access();
362 if (IS_ENABLED(CONFIG_ARM_ARCH_TIMER_EVTSTREAM
))
363 arch_timer_configure_evtstream();
369 arch_timer_detect_rate(void __iomem
*cntbase
, struct device_node
*np
)
371 /* Who has more than one independent system counter? */
376 * Try to determine the frequency from the device tree or CNTFRQ,
377 * if ACPI is enabled, get the frequency from CNTFRQ ONLY.
379 if (!acpi_disabled
||
380 of_property_read_u32(np
, "clock-frequency", &arch_timer_rate
)) {
382 arch_timer_rate
= readl_relaxed(cntbase
+ CNTFRQ
);
384 arch_timer_rate
= arch_timer_get_cntfrq();
387 /* Check the timer frequency. */
388 if (arch_timer_rate
== 0)
389 pr_warn("Architected timer frequency not available\n");
392 static void arch_timer_banner(unsigned type
)
394 pr_info("Architected %s%s%s timer(s) running at %lu.%02luMHz (%s%s%s).\n",
395 type
& ARCH_CP15_TIMER
? "cp15" : "",
396 type
== (ARCH_CP15_TIMER
| ARCH_MEM_TIMER
) ? " and " : "",
397 type
& ARCH_MEM_TIMER
? "mmio" : "",
398 (unsigned long)arch_timer_rate
/ 1000000,
399 (unsigned long)(arch_timer_rate
/ 10000) % 100,
400 type
& ARCH_CP15_TIMER
?
401 arch_timer_use_virtual
? "virt" : "phys" :
403 type
== (ARCH_CP15_TIMER
| ARCH_MEM_TIMER
) ? "/" : "",
404 type
& ARCH_MEM_TIMER
?
405 arch_timer_mem_use_virtual
? "virt" : "phys" :
409 u32
arch_timer_get_rate(void)
411 return arch_timer_rate
;
414 static u64
arch_counter_get_cntvct_mem(void)
416 u32 vct_lo
, vct_hi
, tmp_hi
;
419 vct_hi
= readl_relaxed(arch_counter_base
+ CNTVCT_HI
);
420 vct_lo
= readl_relaxed(arch_counter_base
+ CNTVCT_LO
);
421 tmp_hi
= readl_relaxed(arch_counter_base
+ CNTVCT_HI
);
422 } while (vct_hi
!= tmp_hi
);
424 return ((u64
) vct_hi
<< 32) | vct_lo
;
428 * Default to cp15 based access because arm64 uses this function for
429 * sched_clock() before DT is probed and the cp15 method is guaranteed
430 * to exist on arm64. arm doesn't use this before DT is probed so even
431 * if we don't have the cp15 accessors we won't have a problem.
433 u64 (*arch_timer_read_counter
)(void) = arch_counter_get_cntvct
;
435 static cycle_t
arch_counter_read(struct clocksource
*cs
)
437 return arch_timer_read_counter();
440 static cycle_t
arch_counter_read_cc(const struct cyclecounter
*cc
)
442 return arch_timer_read_counter();
445 static struct clocksource clocksource_counter
= {
446 .name
= "arch_sys_counter",
448 .read
= arch_counter_read
,
449 .mask
= CLOCKSOURCE_MASK(56),
450 .flags
= CLOCK_SOURCE_IS_CONTINUOUS
| CLOCK_SOURCE_SUSPEND_NONSTOP
,
453 static struct cyclecounter cyclecounter
= {
454 .read
= arch_counter_read_cc
,
455 .mask
= CLOCKSOURCE_MASK(56),
458 static struct timecounter timecounter
;
460 struct timecounter
*arch_timer_get_timecounter(void)
465 static void __init
arch_counter_register(unsigned type
)
469 /* Register the CP15 based counter if we have one */
470 if (type
& ARCH_CP15_TIMER
) {
471 if (IS_ENABLED(CONFIG_ARM64
) || arch_timer_use_virtual
)
472 arch_timer_read_counter
= arch_counter_get_cntvct
;
474 arch_timer_read_counter
= arch_counter_get_cntpct
;
476 arch_timer_read_counter
= arch_counter_get_cntvct_mem
;
478 /* If the clocksource name is "arch_sys_counter" the
479 * VDSO will attempt to read the CP15-based counter.
480 * Ensure this does not happen when CP15-based
481 * counter is not available.
483 clocksource_counter
.name
= "arch_mem_counter";
486 start_count
= arch_timer_read_counter();
487 clocksource_register_hz(&clocksource_counter
, arch_timer_rate
);
488 cyclecounter
.mult
= clocksource_counter
.mult
;
489 cyclecounter
.shift
= clocksource_counter
.shift
;
490 timecounter_init(&timecounter
, &cyclecounter
, start_count
);
492 /* 56 bits minimum, so we assume worst case rollover */
493 sched_clock_register(arch_timer_read_counter
, 56, arch_timer_rate
);
496 static void arch_timer_stop(struct clock_event_device
*clk
)
498 pr_debug("arch_timer_teardown disable IRQ%d cpu #%d\n",
499 clk
->irq
, smp_processor_id());
501 if (arch_timer_use_virtual
)
502 disable_percpu_irq(arch_timer_ppi
[VIRT_PPI
]);
504 disable_percpu_irq(arch_timer_ppi
[PHYS_SECURE_PPI
]);
505 if (arch_timer_ppi
[PHYS_NONSECURE_PPI
])
506 disable_percpu_irq(arch_timer_ppi
[PHYS_NONSECURE_PPI
]);
509 clk
->set_mode(CLOCK_EVT_MODE_UNUSED
, clk
);
512 static int arch_timer_cpu_notify(struct notifier_block
*self
,
513 unsigned long action
, void *hcpu
)
516 * Grab cpu pointer in each case to avoid spurious
517 * preemptible warnings
519 switch (action
& ~CPU_TASKS_FROZEN
) {
521 arch_timer_setup(this_cpu_ptr(arch_timer_evt
));
524 arch_timer_stop(this_cpu_ptr(arch_timer_evt
));
531 static struct notifier_block arch_timer_cpu_nb
= {
532 .notifier_call
= arch_timer_cpu_notify
,
536 static unsigned int saved_cntkctl
;
537 static int arch_timer_cpu_pm_notify(struct notifier_block
*self
,
538 unsigned long action
, void *hcpu
)
540 if (action
== CPU_PM_ENTER
)
541 saved_cntkctl
= arch_timer_get_cntkctl();
542 else if (action
== CPU_PM_ENTER_FAILED
|| action
== CPU_PM_EXIT
)
543 arch_timer_set_cntkctl(saved_cntkctl
);
547 static struct notifier_block arch_timer_cpu_pm_notifier
= {
548 .notifier_call
= arch_timer_cpu_pm_notify
,
551 static int __init
arch_timer_cpu_pm_init(void)
553 return cpu_pm_register_notifier(&arch_timer_cpu_pm_notifier
);
556 static int __init
arch_timer_cpu_pm_init(void)
562 static int __init
arch_timer_register(void)
567 arch_timer_evt
= alloc_percpu(struct clock_event_device
);
568 if (!arch_timer_evt
) {
573 if (arch_timer_use_virtual
) {
574 ppi
= arch_timer_ppi
[VIRT_PPI
];
575 err
= request_percpu_irq(ppi
, arch_timer_handler_virt
,
576 "arch_timer", arch_timer_evt
);
578 ppi
= arch_timer_ppi
[PHYS_SECURE_PPI
];
579 err
= request_percpu_irq(ppi
, arch_timer_handler_phys
,
580 "arch_timer", arch_timer_evt
);
581 if (!err
&& arch_timer_ppi
[PHYS_NONSECURE_PPI
]) {
582 ppi
= arch_timer_ppi
[PHYS_NONSECURE_PPI
];
583 err
= request_percpu_irq(ppi
, arch_timer_handler_phys
,
584 "arch_timer", arch_timer_evt
);
586 free_percpu_irq(arch_timer_ppi
[PHYS_SECURE_PPI
],
592 pr_err("arch_timer: can't register interrupt %d (%d)\n",
597 err
= register_cpu_notifier(&arch_timer_cpu_nb
);
601 err
= arch_timer_cpu_pm_init();
603 goto out_unreg_notify
;
605 /* Immediately configure the timer on the boot CPU */
606 arch_timer_setup(this_cpu_ptr(arch_timer_evt
));
611 unregister_cpu_notifier(&arch_timer_cpu_nb
);
613 if (arch_timer_use_virtual
)
614 free_percpu_irq(arch_timer_ppi
[VIRT_PPI
], arch_timer_evt
);
616 free_percpu_irq(arch_timer_ppi
[PHYS_SECURE_PPI
],
618 if (arch_timer_ppi
[PHYS_NONSECURE_PPI
])
619 free_percpu_irq(arch_timer_ppi
[PHYS_NONSECURE_PPI
],
624 free_percpu(arch_timer_evt
);
629 static int __init
arch_timer_mem_register(void __iomem
*base
, unsigned int irq
)
633 struct arch_timer
*t
;
635 t
= kzalloc(sizeof(*t
), GFP_KERNEL
);
641 __arch_timer_setup(ARCH_MEM_TIMER
, &t
->evt
);
643 if (arch_timer_mem_use_virtual
)
644 func
= arch_timer_handler_virt_mem
;
646 func
= arch_timer_handler_phys_mem
;
648 ret
= request_irq(irq
, func
, IRQF_TIMER
, "arch_mem_timer", &t
->evt
);
650 pr_err("arch_timer: Failed to request mem timer irq\n");
657 static const struct of_device_id arch_timer_of_match
[] __initconst
= {
658 { .compatible
= "arm,armv7-timer", },
659 { .compatible
= "arm,armv8-timer", },
663 static const struct of_device_id arch_timer_mem_of_match
[] __initconst
= {
664 { .compatible
= "arm,armv7-timer-mem", },
669 arch_timer_needs_probing(int type
, const struct of_device_id
*matches
)
671 struct device_node
*dn
;
672 bool needs_probing
= false;
674 dn
= of_find_matching_node(NULL
, matches
);
675 if (dn
&& of_device_is_available(dn
) && !(arch_timers_present
& type
))
676 needs_probing
= true;
679 return needs_probing
;
682 static void __init
arch_timer_common_init(void)
684 unsigned mask
= ARCH_CP15_TIMER
| ARCH_MEM_TIMER
;
686 /* Wait until both nodes are probed if we have two timers */
687 if ((arch_timers_present
& mask
) != mask
) {
688 if (arch_timer_needs_probing(ARCH_MEM_TIMER
, arch_timer_mem_of_match
))
690 if (arch_timer_needs_probing(ARCH_CP15_TIMER
, arch_timer_of_match
))
694 arch_timer_banner(arch_timers_present
);
695 arch_counter_register(arch_timers_present
);
696 arch_timer_arch_init();
699 static void __init
arch_timer_init(void)
702 * If HYP mode is available, we know that the physical timer
703 * has been configured to be accessible from PL1. Use it, so
704 * that a guest can use the virtual timer instead.
706 * If no interrupt provided for virtual timer, we'll have to
707 * stick to the physical timer. It'd better be accessible...
709 if (is_hyp_mode_available() || !arch_timer_ppi
[VIRT_PPI
]) {
710 arch_timer_use_virtual
= false;
712 if (!arch_timer_ppi
[PHYS_SECURE_PPI
] ||
713 !arch_timer_ppi
[PHYS_NONSECURE_PPI
]) {
714 pr_warn("arch_timer: No interrupt available, giving up\n");
719 arch_timer_register();
720 arch_timer_common_init();
723 static void __init
arch_timer_of_init(struct device_node
*np
)
727 if (arch_timers_present
& ARCH_CP15_TIMER
) {
728 pr_warn("arch_timer: multiple nodes in dt, skipping\n");
732 arch_timers_present
|= ARCH_CP15_TIMER
;
733 for (i
= PHYS_SECURE_PPI
; i
< MAX_TIMER_PPI
; i
++)
734 arch_timer_ppi
[i
] = irq_of_parse_and_map(np
, i
);
736 arch_timer_detect_rate(NULL
, np
);
738 arch_timer_c3stop
= !of_property_read_bool(np
, "always-on");
741 * If we cannot rely on firmware initializing the timer registers then
742 * we should use the physical timers instead.
744 if (IS_ENABLED(CONFIG_ARM
) &&
745 of_property_read_bool(np
, "arm,cpu-registers-not-fw-configured"))
746 arch_timer_use_virtual
= false;
750 CLOCKSOURCE_OF_DECLARE(armv7_arch_timer
, "arm,armv7-timer", arch_timer_of_init
);
751 CLOCKSOURCE_OF_DECLARE(armv8_arch_timer
, "arm,armv8-timer", arch_timer_of_init
);
753 static void __init
arch_timer_mem_init(struct device_node
*np
)
755 struct device_node
*frame
, *best_frame
= NULL
;
756 void __iomem
*cntctlbase
, *base
;
760 arch_timers_present
|= ARCH_MEM_TIMER
;
761 cntctlbase
= of_iomap(np
, 0);
763 pr_err("arch_timer: Can't find CNTCTLBase\n");
767 cnttidr
= readl_relaxed(cntctlbase
+ CNTTIDR
);
771 * Try to find a virtual capable frame. Otherwise fall back to a
772 * physical capable frame.
774 for_each_available_child_of_node(np
, frame
) {
777 if (of_property_read_u32(frame
, "frame-number", &n
)) {
778 pr_err("arch_timer: Missing frame-number\n");
779 of_node_put(best_frame
);
784 if (cnttidr
& CNTTIDR_VIRT(n
)) {
785 of_node_put(best_frame
);
787 arch_timer_mem_use_virtual
= true;
790 of_node_put(best_frame
);
791 best_frame
= of_node_get(frame
);
794 base
= arch_counter_base
= of_iomap(best_frame
, 0);
796 pr_err("arch_timer: Can't map frame's registers\n");
797 of_node_put(best_frame
);
801 if (arch_timer_mem_use_virtual
)
802 irq
= irq_of_parse_and_map(best_frame
, 1);
804 irq
= irq_of_parse_and_map(best_frame
, 0);
805 of_node_put(best_frame
);
807 pr_err("arch_timer: Frame missing %s irq",
808 arch_timer_mem_use_virtual
? "virt" : "phys");
812 arch_timer_detect_rate(base
, np
);
813 arch_timer_mem_register(base
, irq
);
814 arch_timer_common_init();
816 CLOCKSOURCE_OF_DECLARE(armv7_arch_timer_mem
, "arm,armv7-timer-mem",
817 arch_timer_mem_init
);
820 static int __init
map_generic_timer_interrupt(u32 interrupt
, u32 flags
)
822 int trigger
, polarity
;
827 trigger
= (flags
& ACPI_GTDT_INTERRUPT_MODE
) ? ACPI_EDGE_SENSITIVE
828 : ACPI_LEVEL_SENSITIVE
;
830 polarity
= (flags
& ACPI_GTDT_INTERRUPT_POLARITY
) ? ACPI_ACTIVE_LOW
833 return acpi_register_gsi(NULL
, interrupt
, trigger
, polarity
);
836 /* Initialize per-processor generic timer */
837 static int __init
arch_timer_acpi_init(struct acpi_table_header
*table
)
839 struct acpi_table_gtdt
*gtdt
;
841 if (arch_timers_present
& ARCH_CP15_TIMER
) {
842 pr_warn("arch_timer: already initialized, skipping\n");
846 gtdt
= container_of(table
, struct acpi_table_gtdt
, header
);
848 arch_timers_present
|= ARCH_CP15_TIMER
;
850 arch_timer_ppi
[PHYS_SECURE_PPI
] =
851 map_generic_timer_interrupt(gtdt
->secure_el1_interrupt
,
852 gtdt
->secure_el1_flags
);
854 arch_timer_ppi
[PHYS_NONSECURE_PPI
] =
855 map_generic_timer_interrupt(gtdt
->non_secure_el1_interrupt
,
856 gtdt
->non_secure_el1_flags
);
858 arch_timer_ppi
[VIRT_PPI
] =
859 map_generic_timer_interrupt(gtdt
->virtual_timer_interrupt
,
860 gtdt
->virtual_timer_flags
);
862 arch_timer_ppi
[HYP_PPI
] =
863 map_generic_timer_interrupt(gtdt
->non_secure_el2_interrupt
,
864 gtdt
->non_secure_el2_flags
);
866 /* Get the frequency from CNTFRQ */
867 arch_timer_detect_rate(NULL
, NULL
);
869 /* Always-on capability */
870 arch_timer_c3stop
= !(gtdt
->non_secure_el1_flags
& ACPI_GTDT_ALWAYS_ON
);
876 /* Initialize all the generic timers presented in GTDT */
877 void __init
acpi_generic_timer_init(void)
882 acpi_table_parse(ACPI_SIG_GTDT
, arch_timer_acpi_init
);