fdt_wip.c (1906B)
1// SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause) 2/* 3 * libfdt - Flat Device Tree manipulation 4 * Copyright (C) 2006 David Gibson, IBM Corporation. 5 */ 6#include "libfdt_env.h" 7 8#include <fdt.h> 9#include <libfdt.h> 10 11#include "libfdt_internal.h" 12 13int fdt_setprop_inplace_namelen_partial(void *fdt, int nodeoffset, 14 const char *name, int namelen, 15 uint32_t idx, const void *val, 16 int len) 17{ 18 void *propval; 19 int proplen; 20 21 propval = fdt_getprop_namelen_w(fdt, nodeoffset, name, namelen, 22 &proplen); 23 if (!propval) 24 return proplen; 25 26 if ((unsigned)proplen < (len + idx)) 27 return -FDT_ERR_NOSPACE; 28 29 memcpy((char *)propval + idx, val, len); 30 return 0; 31} 32 33int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name, 34 const void *val, int len) 35{ 36 const void *propval; 37 int proplen; 38 39 propval = fdt_getprop(fdt, nodeoffset, name, &proplen); 40 if (!propval) 41 return proplen; 42 43 if (proplen != len) 44 return -FDT_ERR_NOSPACE; 45 46 return fdt_setprop_inplace_namelen_partial(fdt, nodeoffset, name, 47 strlen(name), 0, 48 val, len); 49} 50 51static void fdt_nop_region_(void *start, int len) 52{ 53 fdt32_t *p; 54 55 for (p = start; (char *)p < ((char *)start + len); p++) 56 *p = cpu_to_fdt32(FDT_NOP); 57} 58 59int fdt_nop_property(void *fdt, int nodeoffset, const char *name) 60{ 61 struct fdt_property *prop; 62 int len; 63 64 prop = fdt_get_property_w(fdt, nodeoffset, name, &len); 65 if (!prop) 66 return len; 67 68 fdt_nop_region_(prop, len + sizeof(*prop)); 69 70 return 0; 71} 72 73int fdt_node_end_offset_(void *fdt, int offset) 74{ 75 int depth = 0; 76 77 while ((offset >= 0) && (depth >= 0)) 78 offset = fdt_next_node(fdt, offset, &depth); 79 80 return offset; 81} 82 83int fdt_nop_node(void *fdt, int nodeoffset) 84{ 85 int endoffset; 86 87 endoffset = fdt_node_end_offset_(fdt, nodeoffset); 88 if (endoffset < 0) 89 return endoffset; 90 91 fdt_nop_region_(fdt_offset_ptr_w(fdt, nodeoffset, 0), 92 endoffset - nodeoffset); 93 return 0; 94}