dm: core: Add ofnode function to read a 64-bit int
[oweals/u-boot.git] / drivers / core / ofnode.c
index 3cf3205a2f1d192c0354c6996e2190465c2b6bf5..b2b02e4abfbacc7c7b7a31c3a5567f0e8bc1dfb5 100644 (file)
@@ -55,6 +55,38 @@ int ofnode_read_s32_default(ofnode node, const char *propname, s32 def)
        return def;
 }
 
+int ofnode_read_u64(ofnode node, const char *propname, u64 *outp)
+{
+       const fdt64_t *cell;
+       int len;
+
+       assert(ofnode_valid(node));
+       debug("%s: %s: ", __func__, propname);
+
+       if (ofnode_is_np(node))
+               return of_read_u64(ofnode_to_np(node), propname, outp);
+
+       cell = fdt_getprop(gd->fdt_blob, ofnode_to_offset(node), propname,
+                          &len);
+       if (!cell || len < sizeof(*cell)) {
+               debug("(not found)\n");
+               return -EINVAL;
+       }
+       *outp = fdt64_to_cpu(cell[0]);
+       debug("%#llx (%lld)\n", (unsigned long long)*outp,
+             (unsigned long long)*outp);
+
+       return 0;
+}
+
+int ofnode_read_u64_default(ofnode node, const char *propname, u64 def)
+{
+       assert(ofnode_valid(node));
+       ofnode_read_u64(node, propname, &def);
+
+       return def;
+}
+
 bool ofnode_read_bool(ofnode node, const char *propname)
 {
        const void *prop;