* [PATCH] Add a libfdt function to write a property placeholder @ 2016-03-07 2:52 Simon Glass [not found] ` <1457319172-24071-1-git-send-email-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org> 0 siblings, 1 reply; 3+ messages in thread From: Simon Glass @ 2016-03-07 2:52 UTC (permalink / raw) To: Devicetree Compiler; +Cc: David Gibson, Simon Glass The existing function to add a new property to a tree being built requires that the entire contents of the new property be passed in. For some applications it is more convenient to be able to add the property contents later, perhaps by reading from a file. This avoids double-buffering of the contents. Add a new function to support this and adjust the existing fdt_property() to use it. Signed-off-by: Simon Glass <sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org> --- libfdt/fdt_sw.c | 16 ++++++++++++++-- libfdt/libfdt.h | 16 ++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/libfdt/fdt_sw.c b/libfdt/fdt_sw.c index 6a80485..2bd15e7 100644 --- a/libfdt/fdt_sw.c +++ b/libfdt/fdt_sw.c @@ -220,7 +220,7 @@ static int _fdt_find_add_string(void *fdt, const char *s) return offset; } -int fdt_property(void *fdt, const char *name, const void *val, int len) +int fdt_property_placeholder(void *fdt, const char *name, int len, void **valp) { struct fdt_property *prop; int nameoff; @@ -238,7 +238,19 @@ int fdt_property(void *fdt, const char *name, const void *val, int len) prop->tag = cpu_to_fdt32(FDT_PROP); prop->nameoff = cpu_to_fdt32(nameoff); prop->len = cpu_to_fdt32(len); - memcpy(prop->data, val, len); + *valp = prop->data; + return 0; +} + +int fdt_property(void *fdt, const char *name, const void *val, int len) +{ + void *ptr; + int ret; + + ret = fdt_property_placeholder(fdt, name, len, &ptr); + if (ret) + return ret; + memcpy(ptr, val, len); return 0; } diff --git a/libfdt/libfdt.h b/libfdt/libfdt.h index 78adb12..d6a08b6 100644 --- a/libfdt/libfdt.h +++ b/libfdt/libfdt.h @@ -1180,6 +1180,22 @@ static inline int fdt_property_cell(void *fdt, const char *name, uint32_t val) { return fdt_property_u32(fdt, name, val); } + +/** + * fdt_property_placeholder - add a new property and return a ptr to its value + * + * @fdt: pointer to the device tree blob + * @name: name of property to add + * @len: length of property value in bytes + * @valp: returns a pointer to where where the value should be placed + * + * returns: + * 0, on success + * -FDT_ERR_BADMAGIC, + * -FDT_ERR_NOSPACE, standard meanings + */ +int fdt_property_placeholder(void *fdt, const char *name, int len, void **valp); + #define fdt_property_string(fdt, name, str) \ fdt_property(fdt, name, str, strlen(str)+1) int fdt_end_node(void *fdt); -- 2.7.0.rc3.207.g0ac5344 ^ permalink raw reply related [flat|nested] 3+ messages in thread
[parent not found: <1457319172-24071-1-git-send-email-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>]
* Re: [PATCH] Add a libfdt function to write a property placeholder [not found] ` <1457319172-24071-1-git-send-email-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org> @ 2016-03-07 4:32 ` David Gibson [not found] ` <20160307043247.GH22546-RXTfZT5YzpxwFLYp8hBm2A@public.gmane.org> 0 siblings, 1 reply; 3+ messages in thread From: David Gibson @ 2016-03-07 4:32 UTC (permalink / raw) To: Simon Glass; +Cc: Devicetree Compiler [-- Attachment #1: Type: text/plain, Size: 2945 bytes --] On Sun, Mar 06, 2016 at 07:52:52PM -0700, Simon Glass wrote: > The existing function to add a new property to a tree being built requires > that the entire contents of the new property be passed in. For some > applications it is more convenient to be able to add the property contents > later, perhaps by reading from a file. This avoids double-buffering of the > contents. > > Add a new function to support this and adjust the existing fdt_property() to > use it. > Signed-off-by: Simon Glass <sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org> The change looks fine, but I'd like to see a testcase added for it. > --- > > libfdt/fdt_sw.c | 16 ++++++++++++++-- > libfdt/libfdt.h | 16 ++++++++++++++++ > 2 files changed, 30 insertions(+), 2 deletions(-) > > diff --git a/libfdt/fdt_sw.c b/libfdt/fdt_sw.c > index 6a80485..2bd15e7 100644 > --- a/libfdt/fdt_sw.c > +++ b/libfdt/fdt_sw.c > @@ -220,7 +220,7 @@ static int _fdt_find_add_string(void *fdt, const char *s) > return offset; > } > > -int fdt_property(void *fdt, const char *name, const void *val, int len) > +int fdt_property_placeholder(void *fdt, const char *name, int len, void **valp) > { > struct fdt_property *prop; > int nameoff; > @@ -238,7 +238,19 @@ int fdt_property(void *fdt, const char *name, const void *val, int len) > prop->tag = cpu_to_fdt32(FDT_PROP); > prop->nameoff = cpu_to_fdt32(nameoff); > prop->len = cpu_to_fdt32(len); > - memcpy(prop->data, val, len); > + *valp = prop->data; > + return 0; > +} > + > +int fdt_property(void *fdt, const char *name, const void *val, int len) > +{ > + void *ptr; > + int ret; > + > + ret = fdt_property_placeholder(fdt, name, len, &ptr); > + if (ret) > + return ret; > + memcpy(ptr, val, len); > return 0; > } > > diff --git a/libfdt/libfdt.h b/libfdt/libfdt.h > index 78adb12..d6a08b6 100644 > --- a/libfdt/libfdt.h > +++ b/libfdt/libfdt.h > @@ -1180,6 +1180,22 @@ static inline int fdt_property_cell(void *fdt, const char *name, uint32_t val) > { > return fdt_property_u32(fdt, name, val); > } > + > +/** > + * fdt_property_placeholder - add a new property and return a ptr to its value > + * > + * @fdt: pointer to the device tree blob > + * @name: name of property to add > + * @len: length of property value in bytes > + * @valp: returns a pointer to where where the value should be placed > + * > + * returns: > + * 0, on success > + * -FDT_ERR_BADMAGIC, > + * -FDT_ERR_NOSPACE, standard meanings > + */ > +int fdt_property_placeholder(void *fdt, const char *name, int len, void **valp); > + > #define fdt_property_string(fdt, name, str) \ > fdt_property(fdt, name, str, strlen(str)+1) > int fdt_end_node(void *fdt); -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 3+ messages in thread
[parent not found: <20160307043247.GH22546-RXTfZT5YzpxwFLYp8hBm2A@public.gmane.org>]
* Re: [PATCH] Add a libfdt function to write a property placeholder [not found] ` <20160307043247.GH22546-RXTfZT5YzpxwFLYp8hBm2A@public.gmane.org> @ 2016-03-07 16:21 ` Simon Glass 0 siblings, 0 replies; 3+ messages in thread From: Simon Glass @ 2016-03-07 16:21 UTC (permalink / raw) To: David Gibson; +Cc: Devicetree Compiler Hi David, On 6 March 2016 at 21:32, David Gibson <david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org> wrote: > On Sun, Mar 06, 2016 at 07:52:52PM -0700, Simon Glass wrote: >> The existing function to add a new property to a tree being built requires >> that the entire contents of the new property be passed in. For some >> applications it is more convenient to be able to add the property contents >> later, perhaps by reading from a file. This avoids double-buffering of the >> contents. >> >> Add a new function to support this and adjust the existing fdt_property() to >> use it. >> Signed-off-by: Simon Glass <sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org> > > The change looks fine, but I'd like to see a testcase added for it. OK good. Yes I'll add that. Regards, Simon ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2016-03-07 16:21 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-03-07 2:52 [PATCH] Add a libfdt function to write a property placeholder Simon Glass [not found] ` <1457319172-24071-1-git-send-email-sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org> 2016-03-07 4:32 ` David Gibson [not found] ` <20160307043247.GH22546-RXTfZT5YzpxwFLYp8hBm2A@public.gmane.org> 2016-03-07 16:21 ` Simon Glass
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).