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 11extern struct of_device_id __timer_of_table[]; 12 13static const struct of_device_id __timer_of_table_sentinel 14 __used __section("__timer_of_table_end"); 15 16void __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