|
@@ -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;
|