diff options
| author | Simon Glass <[email protected]> | 2025-01-10 17:00:10 -0700 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2025-01-22 15:58:03 -0600 |
| commit | 8b2561bf9f548f78ddf4dca05126a3bd5d1a3f94 (patch) | |
| tree | d0bd997a3135223c16d12bad0c639b3eb4e55a0e /drivers/core/ofnode.c | |
| parent | 6c6591c823e5a01b42ef52526656119e19fb756d (diff) | |
ofnode: Indicate when out of space in a few places
Update ofnode_add_subnode() and ofnode_add_prop() to return a suitable
error when space is exhausted in the FDT. This makes it easier to see
what is going wrong.
Signed-off-by: Simon Glass <[email protected]>
Reviewed-by: Tom Rini <[email protected]>
Diffstat (limited to 'drivers/core/ofnode.c')
| -rw-r--r-- | drivers/core/ofnode.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index 98483c0f523..83c60069cb3 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -1710,9 +1710,10 @@ ofnode ofnode_by_prop_value(ofnode from, const char *propname, int ofnode_write_prop(ofnode node, const char *propname, const void *value, int len, bool copy) { + int ret; + if (of_live_active()) { void *newval; - int ret; if (copy) { newval = malloc(len); @@ -1726,8 +1727,12 @@ int ofnode_write_prop(ofnode node, const char *propname, const void *value, free(newval); return ret; } else { - return fdt_setprop(ofnode_to_fdt(node), ofnode_to_offset(node), - propname, value, len); + ret = fdt_setprop(ofnode_to_fdt(node), ofnode_to_offset(node), + propname, value, len); + if (ret) + return ret == -FDT_ERR_NOSPACE ? -ENOSPC : -EINVAL; + + return 0; } } @@ -2015,7 +2020,7 @@ int ofnode_add_subnode(ofnode node, const char *name, ofnode *subnodep) ret = -EEXIST; } if (offset < 0) - return -EINVAL; + return offset == -FDT_ERR_NOSPACE ? -ENOSPC : -EINVAL; subnode = noffset_to_ofnode(node, offset); } |
