46 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*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_sentinel14 __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