|
@@ -337,22 +337,14 @@ out:
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
-static const struct of_device_id arch_timer_of_match[] __initconst = {
|
|
|
- { .compatible = "arm,armv7-timer", },
|
|
|
- { .compatible = "arm,armv8-timer", },
|
|
|
- {},
|
|
|
-};
|
|
|
-
|
|
|
-int __init arch_timer_init(void)
|
|
|
+static void __init arch_timer_init(struct device_node *np)
|
|
|
{
|
|
|
- struct device_node *np;
|
|
|
u32 freq;
|
|
|
int i;
|
|
|
|
|
|
- np = of_find_matching_node(NULL, arch_timer_of_match);
|
|
|
- if (!np) {
|
|
|
- pr_err("arch_timer: can't find DT node\n");
|
|
|
- return -ENODEV;
|
|
|
+ if (arch_timer_get_rate()) {
|
|
|
+ pr_warn("arch_timer: multiple nodes in dt, skipping\n");
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
/* Try to determine the frequency from the device tree or CNTFRQ */
|
|
@@ -378,7 +370,7 @@ int __init arch_timer_init(void)
|
|
|
if (!arch_timer_ppi[PHYS_SECURE_PPI] ||
|
|
|
!arch_timer_ppi[PHYS_NONSECURE_PPI]) {
|
|
|
pr_warn("arch_timer: No interrupt available, giving up\n");
|
|
|
- return -EINVAL;
|
|
|
+ return;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -387,5 +379,8 @@ int __init arch_timer_init(void)
|
|
|
else
|
|
|
arch_timer_read_counter = arch_counter_get_cntpct;
|
|
|
|
|
|
- return arch_timer_register();
|
|
|
+ arch_timer_register();
|
|
|
+ arch_timer_arch_init();
|
|
|
}
|
|
|
+CLOCKSOURCE_OF_DECLARE(armv7_arch_timer, "arm,armv7-timer", arch_timer_init);
|
|
|
+CLOCKSOURCE_OF_DECLARE(armv8_arch_timer, "arm,armv8-timer", arch_timer_init);
|