[PATCH 5/5] of: platform: Ensure timers are probed early
Sascha Hauer
s.hauer at pengutronix.de
Tue Mar 8 03:51:03 PST 2022
Timers are a very crucial resource and are needed early. Without them
no delay function can work properly. With deep probe enabled they may
be initialized very late in the initialization order. Make sure they
are probed early. We do not know which device node provides the timer,
so probe all nodes named "timer".
Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
drivers/of/platform.c | 26 ++++++++++++++++++++++++++
include/of.h | 1 +
2 files changed, 27 insertions(+)
diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index 4e96350ae2..e4e0b5dc40 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -529,6 +529,24 @@ int of_devices_ensure_probed_by_property(const char *property_name)
}
EXPORT_SYMBOL_GPL(of_devices_ensure_probed_by_property);
+int of_devices_ensure_probed_by_name(const char *name)
+{
+ struct device_node *node;
+ int err, ret = 0;
+
+ if (!deep_probe_is_supported())
+ return 0;
+
+ for_each_node_by_name(node, name) {
+ ret = of_device_ensure_probed(node);
+ if (err)
+ ret = err;
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(of_devices_ensure_probed_by_name);
+
static int of_stdoutpath_init(void)
{
struct device_node *np;
@@ -545,3 +563,11 @@ static int of_stdoutpath_init(void)
return of_device_ensure_probed(np);
}
postconsole_initcall(of_stdoutpath_init);
+
+static int of_timer_init(void)
+{
+ of_devices_ensure_probed_by_name("timer");
+
+ return 0;
+}
+postcore_initcall(of_timer_init);
diff --git a/include/of.h b/include/of.h
index 9089409f9f..cf9950e9b3 100644
--- a/include/of.h
+++ b/include/of.h
@@ -287,6 +287,7 @@ extern struct device_d *of_device_enable_and_register_by_alias(
extern int of_device_ensure_probed(struct device_node *np);
extern int of_device_ensure_probed_by_alias(const char *alias);
extern int of_devices_ensure_probed_by_property(const char *property_name);
+extern int of_devices_ensure_probed_by_name(const char *name);
extern int of_devices_ensure_probed_by_dev_id(const struct of_device_id *ids);
extern int of_partition_ensure_probed(struct device_node *np);
--
2.30.2
More information about the barebox
mailing list