summaryrefslogtreecommitdiffstats
path: root/src/libdt.c
diff options
context:
space:
mode:
authorMarc Kleine-Budde <mkl@pengutronix.de>2015-04-27 16:03:46 +0200
committerMarc Kleine-Budde <mkl@pengutronix.de>2015-04-28 14:20:04 +0200
commit10cc2eb392646da797100739f4627d98e74afcac (patch)
tree846bdcacc151cc069327041b367c0fe0d80cd683 /src/libdt.c
parent954e383388f26682325080e8532b5ea8056dae16 (diff)
downloaddt-utils-10cc2eb392646da797100739f4627d98e74afcac.tar.gz
dt-utils-10cc2eb392646da797100739f4627d98e74afcac.tar.xz
libdt: of_read_devicetree(): try to read fdt from /sys/firmware/fdt first
Which is faster than walking over the filesystem representation of the device tree in /proc or /sys. Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Diffstat (limited to 'src/libdt.c')
-rw-r--r--src/libdt.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/libdt.c b/src/libdt.c
index 50f0da8..7319260 100644
--- a/src/libdt.c
+++ b/src/libdt.c
@@ -1930,8 +1930,15 @@ int scan_proc_dir(struct device_node *node, const char *path)
struct device_node *of_read_proc_devicetree(void)
{
struct device_node *root;
+ void *fdt;
int ret;
+ fdt = read_file("/sys/firmware/fdt", NULL);
+ if (fdt) {
+ root = of_unflatten_dtb(fdt);
+ return root;
+ }
+
root = of_new_node(NULL, NULL);
ret = scan_proc_dir(root, "/sys/firmware/devicetree/base");