public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Thierry Reding <thierry.reding@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 01/23] fdt: Add functions to query a node's #address- and #size-cells
Date: Mon, 18 Aug 2014 09:16:14 +0200	[thread overview]
Message-ID: <1408346196-30419-2-git-send-email-thierry.reding@gmail.com> (raw)
In-Reply-To: <1408346196-30419-1-git-send-email-thierry.reding@gmail.com>

From: Thierry Reding <treding@nvidia.com>

Given a device tree node, the fdt_n_addr_cells() function will walk up
the device tree and search for an #address-cells property. It returns
the number of cells required by the device tree node to represent an
address.

Similarly the fdt_n_size_cells() function returns the number of cells
required by the given device tree node to represent a size. It achieves
that by walking up the device tree in seach for a #size-cells property.

If no #address-cells or #size-cells property can be found, both of the
functions return 1.

Signed-off-by: Thierry Reding <treding@nvidia.com>
---
 include/libfdt.h    | 28 ++++++++++++++++++++++++++++
 lib/libfdt/fdt_ro.c | 36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 64 insertions(+)

diff --git a/include/libfdt.h b/include/libfdt.h
index a1ef1e15df3d..e7f991b388cf 100644
--- a/include/libfdt.h
+++ b/include/libfdt.h
@@ -1638,4 +1638,32 @@ int fdt_find_regions(const void *fdt, char * const inc[], int inc_count,
 		     struct fdt_region region[], int max_regions,
 		     char *path, int path_len, int add_string_tab);
 
+/**
+ * fdt_n_addr_cells() - find the number of address cells required by a node
+ *
+ * Looks up the #address-cells property of the node to examine. If that has
+ * no such property, walks up the device tree until it finds one in one of
+ * the device's parents. If no #address-cells property is found, it is
+ * assumed to be 1.
+ *
+ * @param fdt		FDT blob
+ * @param node		node to examine
+ * @return number of address cells
+ */
+int fdt_n_addr_cells(const void *fdt, int node);
+
+/**
+ * fdt_n_size_cells() - find the number of size cells required by a node
+ *
+ * Looks up the #size-cells property of the node to examine. If that has no
+ * such property, walks up the device tree until it finds one in one of the
+ * device's parents. If no #size-cells property is found, it is assumed to
+ * be 1.
+ *
+ * @param fdt		FDT blob
+ * @param node		node to examine
+ * @return number of size cells
+ */
+int fdt_n_size_cells(const void *fdt, int node);
+
 #endif /* _LIBFDT_H */
diff --git a/lib/libfdt/fdt_ro.c b/lib/libfdt/fdt_ro.c
index 36af0435254b..17cd11333c1e 100644
--- a/lib/libfdt/fdt_ro.c
+++ b/lib/libfdt/fdt_ro.c
@@ -530,3 +530,39 @@ int fdt_node_offset_by_compatible(const void *fdt, int startoffset,
 
 	return offset; /* error from fdt_next_node() */
 }
+
+int fdt_n_addr_cells(const void *fdt, int node)
+{
+	const fdt32_t *prop;
+	int len, parent;
+
+	do {
+		parent = fdt_parent_offset(fdt, node);
+		if (parent >= 0)
+			node = parent;
+
+		prop = fdt_getprop(fdt, node, "#address-cells", &len);
+		if (prop)
+			return fdt32_to_cpu(*prop);
+	} while (parent >= 0);
+
+	return 1;
+}
+
+int fdt_n_size_cells(const void *fdt, int node)
+{
+	const fdt32_t *prop;
+	int len, parent;
+
+	do {
+		parent = fdt_parent_offset(fdt, node);
+		if (parent >= 0)
+			node = parent;
+
+		prop = fdt_getprop(fdt, node, "#size-cells", &len);
+		if (prop)
+			return fdt32_to_cpu(*prop);
+	} while (parent >= 0);
+
+	return 1;
+}
-- 
2.0.4

  reply	other threads:[~2014-08-18  7:16 UTC|newest]

Thread overview: 92+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-18  7:16 [U-Boot] [PATCH 00/23] ARM: tegra: Add PCIe support Thierry Reding
2014-08-18  7:16 ` Thierry Reding [this message]
2014-08-18 17:52   ` [U-Boot] [PATCH 01/23] fdt: Add functions to query a node's #address- and #size-cells Simon Glass
2014-08-19 10:59     ` Thierry Reding
2014-08-19 12:52       ` Simon Glass
2014-08-19 13:06         ` Thierry Reding
2014-08-23  3:03           ` Simon Glass
2014-08-23 11:26             ` Thierry Reding
2014-08-18  7:16 ` [U-Boot] [PATCH 02/23] fdt: Add a function to get the index of a string Thierry Reding
2014-08-18 17:58   ` Simon Glass
2014-08-19 11:13     ` Thierry Reding
2014-08-18  7:16 ` [U-Boot] [PATCH 03/23] fdt: Add resource parsing functions Thierry Reding
2014-08-18 18:06   ` Simon Glass
2014-08-19 11:35     ` Thierry Reding
2014-08-19 12:55       ` Simon Glass
2014-08-19 13:12         ` Thierry Reding
2014-08-19 21:28           ` Simon Glass
2014-08-20  6:36             ` Thierry Reding
2014-08-20 14:05               ` Simon Glass
2014-08-18  7:16 ` [U-Boot] [PATCH 04/23] fdt: Add a function to return PCI BDF triplet Thierry Reding
2014-08-18 18:20   ` Simon Glass
2014-08-18  7:16 ` [U-Boot] [PATCH 05/23] fdt: Add a subnodes iterator macro Thierry Reding
2014-08-18 18:11   ` Simon Glass
2014-08-19 12:22     ` Thierry Reding
2014-08-19 12:57       ` Simon Glass
2014-08-19 13:12         ` Thierry Reding
2014-08-18  7:16 ` [U-Boot] [PATCH 06/23] pci: Abort early if bus does not exist Thierry Reding
2014-08-18  7:16 ` [U-Boot] [PATCH 07/23] pci: Honour pci_skip_dev() Thierry Reding
2014-08-18  7:16 ` [U-Boot] [PATCH 08/23] Add pr_fmt() macro Thierry Reding
2014-08-18 18:24   ` Simon Glass
2014-08-19 12:27     ` Thierry Reding
2014-08-19 12:58       ` Simon Glass
2014-08-18  7:16 ` [U-Boot] [PATCH 09/23] ARM: tegra: Implement tegra_plle_enable() Thierry Reding
2014-08-20 18:12   ` Stephen Warren
2014-08-18  7:16 ` [U-Boot] [PATCH 10/23] ARM: tegra: Provide PCIEXCLK reset ID Thierry Reding
2014-08-20 18:20   ` Stephen Warren
2014-08-22 12:38     ` Thierry Reding
2014-08-18  7:16 ` [U-Boot] [PATCH 11/23] ARM: tegra: Implement powergate support Thierry Reding
2014-08-20 18:24   ` Stephen Warren
2014-08-22 13:54     ` Thierry Reding
2014-08-18  7:16 ` [U-Boot] [PATCH 12/23] ARM: tegra: Implement XUSB pad controller Thierry Reding
2014-08-20 18:32   ` Stephen Warren
2014-08-22 14:11     ` Thierry Reding
2014-08-22 14:38     ` Thierry Reding
2014-08-18  7:16 ` [U-Boot] [PATCH 13/23] ARM: tegra: Add XUSB pad controller on Tegra124 Thierry Reding
2014-08-20 18:33   ` Stephen Warren
2014-08-18  7:16 ` [U-Boot] [PATCH 14/23] ARM: tegra: Enable XUSB pad controller on Jetson TK1 Thierry Reding
2014-08-20 18:34   ` Stephen Warren
2014-08-18  7:16 ` [U-Boot] [PATCH 15/23] pci: tegra: Add Tegra PCIe driver Thierry Reding
2014-08-20 19:04   ` Stephen Warren
2014-08-22 15:24     ` Thierry Reding
2014-08-22 17:33     ` Stephen Warren
2014-08-22 19:41       ` Thierry Reding
2014-08-18  7:16 ` [U-Boot] [PATCH 16/23] ARM: tegra: Add Tegra20 PCIe device tree node Thierry Reding
2014-08-20 18:37   ` Stephen Warren
2014-08-18  7:16 ` [U-Boot] [PATCH 17/23] ARM: tegra: Enable PCIe on TrimSlice Thierry Reding
2014-08-20 18:38   ` Stephen Warren
2014-08-22 14:44     ` Thierry Reding
2014-08-18  7:16 ` [U-Boot] [PATCH 18/23] ARM: tegra: Add Tegra30 PCIe device tree node Thierry Reding
2014-08-20 18:39   ` Stephen Warren
2014-08-22 14:51     ` Thierry Reding
2014-08-18  7:16 ` [U-Boot] [PATCH 19/23] ARM: tegra: Enable PCIe on Beaver Thierry Reding
2014-08-19 13:48   ` Marcel Ziswiler
2014-08-20  6:38     ` Thierry Reding
2014-08-20  8:56       ` Marcel Ziswiler
2014-08-20  9:46         ` Thierry Reding
2014-08-20 13:13           ` Marcel Ziswiler
2014-08-20 18:43   ` Stephen Warren
2014-08-22 12:33     ` Thierry Reding
2014-08-18  7:16 ` [U-Boot] [PATCH 20/23] ARM: tegra: Enable PCIe on Cardhu Thierry Reding
2014-08-18  7:16 ` [U-Boot] [PATCH 21/23] ARM: tegra: Add GIC for Tegra124 Thierry Reding
2014-08-20 18:45   ` Stephen Warren
2014-08-18  7:16 ` [U-Boot] [PATCH 22/23] ARM: tegra: Add Tegra124 PCIe device tree node Thierry Reding
2014-08-20 18:46   ` Stephen Warren
2014-08-18  7:16 ` [U-Boot] [PATCH 23/23] ARM: tegra: Enable PCIe on Jetson TK1 Thierry Reding
2014-08-18 18:37   ` Simon Glass
2014-08-19 12:29     ` Thierry Reding
2014-08-19 13:07       ` Simon Glass
2014-08-20 18:51   ` Stephen Warren
2014-08-22 12:09     ` Thierry Reding
2014-08-22 18:50       ` Stephen Warren
2014-08-22 19:27       ` Simon Glass
2014-08-22 19:40         ` Thierry Reding
2014-08-22 20:12           ` Simon Glass
2014-08-22 22:03             ` Thierry Reding
2014-08-23  1:47               ` Simon Glass
2014-08-23 11:33                 ` Thierry Reding
2014-08-20 18:54   ` Stephen Warren
2014-08-26 12:54   ` Tuomas Tynkkynen
2014-08-27 13:28     ` Thierry Reding
2014-08-27 14:34       ` Thierry Reding
2014-08-27 16:52         ` Tuomas Tynkkynen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1408346196-30419-2-git-send-email-thierry.reding@gmail.com \
    --to=thierry.reding@gmail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox