dm: Add more livetree helpers and definitions
authorSimon Glass <sjg@chromium.org>
Fri, 19 May 2017 02:09:27 +0000 (20:09 -0600)
committerSimon Glass <sjg@chromium.org>
Thu, 1 Jun 2017 13:03:12 +0000 (07:03 -0600)
Add some definitions and helpers for livetree in the main of.h header
file. These include:

- reading multi-cell integers
- default number of address/size cells
- functions for comparing names

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/core/ofnode.c
include/dm/of.h

index 6805fe242478625acd13bc4955b93dff85c290b0..ac312d65465425f839599958618bc6838ae8ebd5 100644 (file)
@@ -457,8 +457,8 @@ fdt_addr_t ofnode_get_addr_size(ofnode node, const char *property,
 
                na = of_n_addr_cells(np);
                ns = of_n_addr_cells(np);
-               *sizep = fdt_read_number(prop + na, ns);
-               return fdt_read_number(prop, na);
+               *sizep = of_read_number(prop + na, ns);
+               return of_read_number(prop, na);
        } else {
                return fdtdec_get_addr_size(gd->fdt_blob,
                                            ofnode_to_offset(node), property,
index 6b5afab1c16b78568672c6b448353476d26588f4..d4d941e75c195bf4ee2b776979da9142f1c1c43a 100644 (file)
@@ -103,4 +103,40 @@ static inline bool of_live_active(void)
 }
 #endif
 
+#define OF_BAD_ADDR    ((u64)-1)
+
+static inline const char *of_node_full_name(const struct device_node *np)
+{
+       return np ? np->full_name : "<no-node>";
+}
+
+/* Default #address and #size cells */
+#if !defined(OF_ROOT_NODE_ADDR_CELLS_DEFAULT)
+#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT 1
+#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1
+#endif
+
+/* Default string compare functions */
+#if !defined(of_compat_cmp)
+#define of_compat_cmp(s1, s2, l)       strcasecmp((s1), (s2))
+#define of_prop_cmp(s1, s2)            strcmp((s1), (s2))
+#define of_node_cmp(s1, s2)            strcasecmp((s1), (s2))
+#endif
+
+/* Helper to read a big number; size is in cells (not bytes) */
+static inline u64 of_read_number(const __be32 *cell, int size)
+{
+       u64 r = 0;
+       while (size--)
+               r = (r << 32) | be32_to_cpu(*(cell++));
+       return r;
+}
+
+/* Like of_read_number, but we want an unsigned long result */
+static inline unsigned long of_read_ulong(const __be32 *cell, int size)
+{
+       /* toss away upper bits if unsigned long is smaller than u64 */
+       return of_read_number(cell, size);
+}
+
 #endif