|
@@ -68,25 +68,40 @@ const char *fdtdec_get_compatible(enum fdt_compat_id id)
|
|
|
return compat_names[id];
|
|
|
}
|
|
|
|
|
|
-fdt_addr_t fdtdec_get_addr(const void *blob, int node,
|
|
|
- const char *prop_name)
|
|
|
+fdt_addr_t fdtdec_get_addr_size(const void *blob, int node,
|
|
|
+ const char *prop_name, fdt_size_t *sizep)
|
|
|
{
|
|
|
const fdt_addr_t *cell;
|
|
|
int len;
|
|
|
|
|
|
debug("%s: %s: ", __func__, prop_name);
|
|
|
cell = fdt_getprop(blob, node, prop_name, &len);
|
|
|
- if (cell && (len == sizeof(fdt_addr_t) ||
|
|
|
- len == sizeof(fdt_addr_t) * 2)) {
|
|
|
+ if (cell && ((!sizep && len == sizeof(fdt_addr_t)) ||
|
|
|
+ len == sizeof(fdt_addr_t) * 2)) {
|
|
|
fdt_addr_t addr = fdt_addr_to_cpu(*cell);
|
|
|
-
|
|
|
- debug("%p\n", (void *)addr);
|
|
|
+ if (sizep) {
|
|
|
+ const fdt_size_t *size;
|
|
|
+
|
|
|
+ size = (fdt_size_t *)((char *)cell +
|
|
|
+ sizeof(fdt_addr_t));
|
|
|
+ *sizep = fdt_size_to_cpu(*size);
|
|
|
+ debug("addr=%p, size=%p\n", (void *)addr,
|
|
|
+ (void *)*sizep);
|
|
|
+ } else {
|
|
|
+ debug("%p\n", (void *)addr);
|
|
|
+ }
|
|
|
return addr;
|
|
|
}
|
|
|
debug("(not found)\n");
|
|
|
return FDT_ADDR_T_NONE;
|
|
|
}
|
|
|
|
|
|
+fdt_addr_t fdtdec_get_addr(const void *blob, int node,
|
|
|
+ const char *prop_name)
|
|
|
+{
|
|
|
+ return fdtdec_get_addr_size(blob, node, prop_name, NULL);
|
|
|
+}
|
|
|
+
|
|
|
s32 fdtdec_get_int(const void *blob, int node, const char *prop_name,
|
|
|
s32 default_val)
|
|
|
{
|