1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved. 4 */ 5 6 #include <linux/acpi.h> 7 #include <linux/init.h> 8 #include <linux/of.h> 9 #include <linux/clocksource.h> 10 11 extern struct of_device_id __timer_of_table[]; 12 13 static const struct of_device_id __timer_of_table_sentinel 14 __used __section("__timer_of_table_end"); 15 16 void __init timer_probe(void) 17 { 18 struct device_node *np; 19 const struct of_device_id *match; 20 of_init_fn_1_ret init_func_ret; 21 unsigned timers = 0; 22 int ret; 23 24 for_each_matching_node_and_match(np, __timer_of_table, &match) { 25 if (!of_device_is_available(np)) 26 continue; 27 28 init_func_ret = match->data; 29 30 ret = init_func_ret(np); 31 if (ret) { 32 if (ret != -EPROBE_DEFER) 33 pr_err("Failed to initialize '%pOF': %d\n", np, 34 ret); 35 continue; 36 } 37 38 timers++; 39 } 40 41 timers += acpi_probe_device_table(timer); 42 43 if (!timers) 44 pr_crit("%s: no matching timers found\n", __func__); 45 } 46