Re: [U-Boot] [PATCH 06/15] spl: fit: implement recording of loadables into /fit-images
> On 1 Feb 2018, at 08:51, Michal Simekwrote: > > On 18.1.2018 14:17, Dr. Philipp Tomsich wrote: >> Michal, >> >>> On 18 Jan 2018, at 13:56, Michal Simek wrote: >>> >>> Hi Philipp, >>> >>> >>> 2017-09-13 21:29 GMT+02:00 Philipp Tomsich >>> : >>> If a FDT was loaded (e.g. to append it to U-Boot image), we store it's >>> address and record information for all loadables into this FDT. This >>> allows us to easily keep track of images for multiple privilege levels >>> (e.g. with ATF) or of firmware images preloaded into temporary >>> locations (e.g. PMU firmware that may overlap the SPL stage). >>> >>> Signed-off-by: Philipp Tomsich >>> --- >>> >>> common/spl/spl_fit.c | 95 >>> >>> 1 file changed, 81 insertions(+), 14 deletions(-) >>> >>> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c >>> index 9f05e1e..6dc0969 100644 >>> --- a/common/spl/spl_fit.c >>> +++ b/common/spl/spl_fit.c >>> @@ -2,7 +2,7 @@ >>> * Copyright (C) 2016 Google, Inc >>> * Written by Simon Glass >>> * >>> - * SPDX-License-Identifier: GPL-2.0+ >>> + * SPDX-License-Identifier:GPL-2.0+ >>> */ >>> >>> #include >>> @@ -16,22 +16,24 @@ >>> #endif >>> >>> /** >>> - * spl_fit_get_image_node(): By using the matching configuration subnode, >>> + * spl_fit_get_image_name(): By using the matching configuration subnode, >>> * retrieve the name of an image, specified by a property name and an index >>> * into that. >>> * @fit: Pointer to the FDT blob. >>> * @images:Offset of the /images subnode. >>> * @type: Name of the property within the configuration subnode. >>> * @index: Index into the list of strings in this property. >>> + * @outname: Name of the image >>> * >>> - * Return: the node offset of the respective image node or a negative >>> - * error number. >>> + * Return: 0 on success, or a negative error number >>> */ >>> -static int spl_fit_get_image_node(const void *fit, int images, >>> - const char *type, int index) >>> +static int spl_fit_get_image_name(const void *fit, int images, >>> + const char *type, int index, >>> + char **outname) >>> { >>>const char *name, *str; >>> - int node, conf_node; >>> + __maybe_unused int node; >>> + int conf_node; >>>int len, i; >>> >>>conf_node = fit_find_config_node(fit); >>> @@ -63,7 +65,35 @@ static int spl_fit_get_image_node(const void *fit, int >>> images, >>>} >>>} >>> >>> + *outname = (char *)str; >>> + return 0; >>> +} >>> + >>> +/** >>> + * spl_fit_get_image_node(): By using the matching configuration subnode, >>> + * retrieve the name of an image, specified by a property name and an index >>> + * into that. >>> + * @fit: Pointer to the FDT blob. >>> + * @images:Offset of the /images subnode. >>> + * @type: Name of the property within the configuration subnode. >>> + * @index: Index into the list of strings in this property. >>> + * >>> + * Return: the node offset of the respective image node or a negative >>> + * error number. >>> + */ >>> +static int spl_fit_get_image_node(const void *fit, int images, >>> + const char *type, int index) >>> +{ >>> + char *str; >>> + int err; >>> + int node; >>> + >>> + err = spl_fit_get_image_name(fit, images, type, index, ); >>> + if (err) >>> + return err; >>> + >>>debug("%s: '%s'\n", type, str); >>> + >>>node = fdt_subnode_offset(fit, images, str); >>>if (node < 0) { >>>debug("cannot find image node '%s': %d\n", str, node); >>> @@ -116,15 +146,15 @@ static int get_aligned_image_size(struct >>> spl_load_info *info, int data_size, >>> * @info: points to information about the device to load data from >>> * @sector:the start sector of the FIT image on the device >>> * @fit: points to the flattened device tree blob describing the FIT >>> - * image >>> + * image >>> * @base_offset: the beginning of the data area containing the actual >>> * image data, relative to the beginning of the FIT >>> * @node: offset of the DT node describing the image to load (relative >>> - * to @fit) >>> + * to @fit) >>> * @image_info:will be filled with information about the loaded >>> image >>> - * If the FIT node does not contain a "load" (address) >>> property, >>> - * the image gets loaded to the address pointed to by the >>> - * load_addr member in this struct. >>> + * If the FIT node does not contain a "load" (address) >>> property, >>> + *
Re: [U-Boot] [PATCH 06/15] spl: fit: implement recording of loadables into /fit-images
On 18.1.2018 14:17, Dr. Philipp Tomsich wrote: > Michal, > >> On 18 Jan 2018, at 13:56, Michal Simekwrote: >> >> Hi Philipp, >> >> >> 2017-09-13 21:29 GMT+02:00 Philipp Tomsich >> : >> If a FDT was loaded (e.g. to append it to U-Boot image), we store it's >> address and record information for all loadables into this FDT. This >> allows us to easily keep track of images for multiple privilege levels >> (e.g. with ATF) or of firmware images preloaded into temporary >> locations (e.g. PMU firmware that may overlap the SPL stage). >> >> Signed-off-by: Philipp Tomsich >> --- >> >> common/spl/spl_fit.c | 95 >> >> 1 file changed, 81 insertions(+), 14 deletions(-) >> >> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c >> index 9f05e1e..6dc0969 100644 >> --- a/common/spl/spl_fit.c >> +++ b/common/spl/spl_fit.c >> @@ -2,7 +2,7 @@ >> * Copyright (C) 2016 Google, Inc >> * Written by Simon Glass >> * >> - * SPDX-License-Identifier: GPL-2.0+ >> + * SPDX-License-Identifier:GPL-2.0+ >> */ >> >> #include >> @@ -16,22 +16,24 @@ >> #endif >> >> /** >> - * spl_fit_get_image_node(): By using the matching configuration subnode, >> + * spl_fit_get_image_name(): By using the matching configuration subnode, >> * retrieve the name of an image, specified by a property name and an index >> * into that. >> * @fit: Pointer to the FDT blob. >> * @images:Offset of the /images subnode. >> * @type: Name of the property within the configuration subnode. >> * @index: Index into the list of strings in this property. >> + * @outname: Name of the image >> * >> - * Return: the node offset of the respective image node or a negative >> - * error number. >> + * Return: 0 on success, or a negative error number >> */ >> -static int spl_fit_get_image_node(const void *fit, int images, >> - const char *type, int index) >> +static int spl_fit_get_image_name(const void *fit, int images, >> + const char *type, int index, >> + char **outname) >> { >> const char *name, *str; >> - int node, conf_node; >> + __maybe_unused int node; >> + int conf_node; >> int len, i; >> >> conf_node = fit_find_config_node(fit); >> @@ -63,7 +65,35 @@ static int spl_fit_get_image_node(const void *fit, int >> images, >> } >> } >> >> + *outname = (char *)str; >> + return 0; >> +} >> + >> +/** >> + * spl_fit_get_image_node(): By using the matching configuration subnode, >> + * retrieve the name of an image, specified by a property name and an index >> + * into that. >> + * @fit: Pointer to the FDT blob. >> + * @images:Offset of the /images subnode. >> + * @type: Name of the property within the configuration subnode. >> + * @index: Index into the list of strings in this property. >> + * >> + * Return: the node offset of the respective image node or a negative >> + * error number. >> + */ >> +static int spl_fit_get_image_node(const void *fit, int images, >> + const char *type, int index) >> +{ >> + char *str; >> + int err; >> + int node; >> + >> + err = spl_fit_get_image_name(fit, images, type, index, ); >> + if (err) >> + return err; >> + >> debug("%s: '%s'\n", type, str); >> + >> node = fdt_subnode_offset(fit, images, str); >> if (node < 0) { >> debug("cannot find image node '%s': %d\n", str, node); >> @@ -116,15 +146,15 @@ static int get_aligned_image_size(struct spl_load_info >> *info, int data_size, >> * @info: points to information about the device to load data from >> * @sector:the start sector of the FIT image on the device >> * @fit: points to the flattened device tree blob describing the FIT >> - * image >> + * image >> * @base_offset: the beginning of the data area containing the actual >> * image data, relative to the beginning of the FIT >> * @node: offset of the DT node describing the image to load (relative >> - * to @fit) >> + * to @fit) >> * @image_info:will be filled with information about the loaded >> image >> - * If the FIT node does not contain a "load" (address) property, >> - * the image gets loaded to the address pointed to by the >> - * load_addr member in this struct. >> + * If the FIT node does not contain a "load" (address) property, >> + * the image gets loaded to the address pointed to by the >> + * load_addr member in this struct. >> * >> * Return: 0 on success or a negative error number. >>
Re: [U-Boot] [PATCH 06/15] spl: fit: implement recording of loadables into /fit-images
On 18.1.2018 14:17, Dr. Philipp Tomsich wrote: > Michal, > >> On 18 Jan 2018, at 13:56, Michal Simekwrote: >> >> Hi Philipp, >> >> >> 2017-09-13 21:29 GMT+02:00 Philipp Tomsich >> : >> If a FDT was loaded (e.g. to append it to U-Boot image), we store it's >> address and record information for all loadables into this FDT. This >> allows us to easily keep track of images for multiple privilege levels >> (e.g. with ATF) or of firmware images preloaded into temporary >> locations (e.g. PMU firmware that may overlap the SPL stage). >> >> Signed-off-by: Philipp Tomsich >> --- >> >> common/spl/spl_fit.c | 95 >> >> 1 file changed, 81 insertions(+), 14 deletions(-) >> >> diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c >> index 9f05e1e..6dc0969 100644 >> --- a/common/spl/spl_fit.c >> +++ b/common/spl/spl_fit.c >> @@ -2,7 +2,7 @@ >> * Copyright (C) 2016 Google, Inc >> * Written by Simon Glass >> * >> - * SPDX-License-Identifier: GPL-2.0+ >> + * SPDX-License-Identifier:GPL-2.0+ >> */ >> >> #include >> @@ -16,22 +16,24 @@ >> #endif >> >> /** >> - * spl_fit_get_image_node(): By using the matching configuration subnode, >> + * spl_fit_get_image_name(): By using the matching configuration subnode, >> * retrieve the name of an image, specified by a property name and an index >> * into that. >> * @fit: Pointer to the FDT blob. >> * @images:Offset of the /images subnode. >> * @type: Name of the property within the configuration subnode. >> * @index: Index into the list of strings in this property. >> + * @outname: Name of the image >> * >> - * Return: the node offset of the respective image node or a negative >> - * error number. >> + * Return: 0 on success, or a negative error number >> */ >> -static int spl_fit_get_image_node(const void *fit, int images, >> - const char *type, int index) >> +static int spl_fit_get_image_name(const void *fit, int images, >> + const char *type, int index, >> + char **outname) >> { >> const char *name, *str; >> - int node, conf_node; >> + __maybe_unused int node; >> + int conf_node; >> int len, i; >> >> conf_node = fit_find_config_node(fit); >> @@ -63,7 +65,35 @@ static int spl_fit_get_image_node(const void *fit, int >> images, >> } >> } >> >> + *outname = (char *)str; >> + return 0; >> +} >> + >> +/** >> + * spl_fit_get_image_node(): By using the matching configuration subnode, >> + * retrieve the name of an image, specified by a property name and an index >> + * into that. >> + * @fit: Pointer to the FDT blob. >> + * @images:Offset of the /images subnode. >> + * @type: Name of the property within the configuration subnode. >> + * @index: Index into the list of strings in this property. >> + * >> + * Return: the node offset of the respective image node or a negative >> + * error number. >> + */ >> +static int spl_fit_get_image_node(const void *fit, int images, >> + const char *type, int index) >> +{ >> + char *str; >> + int err; >> + int node; >> + >> + err = spl_fit_get_image_name(fit, images, type, index, ); >> + if (err) >> + return err; >> + >> debug("%s: '%s'\n", type, str); >> + >> node = fdt_subnode_offset(fit, images, str); >> if (node < 0) { >> debug("cannot find image node '%s': %d\n", str, node); >> @@ -116,15 +146,15 @@ static int get_aligned_image_size(struct spl_load_info >> *info, int data_size, >> * @info: points to information about the device to load data from >> * @sector:the start sector of the FIT image on the device >> * @fit: points to the flattened device tree blob describing the FIT >> - * image >> + * image >> * @base_offset: the beginning of the data area containing the actual >> * image data, relative to the beginning of the FIT >> * @node: offset of the DT node describing the image to load (relative >> - * to @fit) >> + * to @fit) >> * @image_info:will be filled with information about the loaded >> image >> - * If the FIT node does not contain a "load" (address) property, >> - * the image gets loaded to the address pointed to by the >> - * load_addr member in this struct. >> + * If the FIT node does not contain a "load" (address) property, >> + * the image gets loaded to the address pointed to by the >> + * load_addr member in this struct. >> * >> * Return: 0 on success or a negative error number. >>
Re: [U-Boot] [PATCH 06/15] spl: fit: implement recording of loadables into /fit-images
Michal, > On 18 Jan 2018, at 13:56, Michal Simekwrote: > > Hi Philipp, > > > 2017-09-13 21:29 GMT+02:00 Philipp Tomsich > : > If a FDT was loaded (e.g. to append it to U-Boot image), we store it's > address and record information for all loadables into this FDT. This > allows us to easily keep track of images for multiple privilege levels > (e.g. with ATF) or of firmware images preloaded into temporary > locations (e.g. PMU firmware that may overlap the SPL stage). > > Signed-off-by: Philipp Tomsich > --- > > common/spl/spl_fit.c | 95 > > 1 file changed, 81 insertions(+), 14 deletions(-) > > diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c > index 9f05e1e..6dc0969 100644 > --- a/common/spl/spl_fit.c > +++ b/common/spl/spl_fit.c > @@ -2,7 +2,7 @@ > * Copyright (C) 2016 Google, Inc > * Written by Simon Glass > * > - * SPDX-License-Identifier: GPL-2.0+ > + * SPDX-License-Identifier:GPL-2.0+ > */ > > #include > @@ -16,22 +16,24 @@ > #endif > > /** > - * spl_fit_get_image_node(): By using the matching configuration subnode, > + * spl_fit_get_image_name(): By using the matching configuration subnode, > * retrieve the name of an image, specified by a property name and an index > * into that. > * @fit: Pointer to the FDT blob. > * @images:Offset of the /images subnode. > * @type: Name of the property within the configuration subnode. > * @index: Index into the list of strings in this property. > + * @outname: Name of the image > * > - * Return: the node offset of the respective image node or a negative > - * error number. > + * Return: 0 on success, or a negative error number > */ > -static int spl_fit_get_image_node(const void *fit, int images, > - const char *type, int index) > +static int spl_fit_get_image_name(const void *fit, int images, > + const char *type, int index, > + char **outname) > { > const char *name, *str; > - int node, conf_node; > + __maybe_unused int node; > + int conf_node; > int len, i; > > conf_node = fit_find_config_node(fit); > @@ -63,7 +65,35 @@ static int spl_fit_get_image_node(const void *fit, int > images, > } > } > > + *outname = (char *)str; > + return 0; > +} > + > +/** > + * spl_fit_get_image_node(): By using the matching configuration subnode, > + * retrieve the name of an image, specified by a property name and an index > + * into that. > + * @fit: Pointer to the FDT blob. > + * @images:Offset of the /images subnode. > + * @type: Name of the property within the configuration subnode. > + * @index: Index into the list of strings in this property. > + * > + * Return: the node offset of the respective image node or a negative > + * error number. > + */ > +static int spl_fit_get_image_node(const void *fit, int images, > + const char *type, int index) > +{ > + char *str; > + int err; > + int node; > + > + err = spl_fit_get_image_name(fit, images, type, index, ); > + if (err) > + return err; > + > debug("%s: '%s'\n", type, str); > + > node = fdt_subnode_offset(fit, images, str); > if (node < 0) { > debug("cannot find image node '%s': %d\n", str, node); > @@ -116,15 +146,15 @@ static int get_aligned_image_size(struct spl_load_info > *info, int data_size, > * @info: points to information about the device to load data from > * @sector:the start sector of the FIT image on the device > * @fit: points to the flattened device tree blob describing the FIT > - * image > + * image > * @base_offset: the beginning of the data area containing the actual > * image data, relative to the beginning of the FIT > * @node: offset of the DT node describing the image to load (relative > - * to @fit) > + * to @fit) > * @image_info:will be filled with information about the loaded image > - * If the FIT node does not contain a "load" (address) property, > - * the image gets loaded to the address pointed to by the > - * load_addr member in this struct. > + * If the FIT node does not contain a "load" (address) property, > + * the image gets loaded to the address pointed to by the > + * load_addr member in this struct. > * > * Return: 0 on success or a negative error number. > */ > @@ -236,6 +266,35 @@ static int spl_fit_append_fdt(struct spl_image_info > *spl_image, > image_info.load_addr = spl_image->load_addr + spl_image->size; >
Re: [U-Boot] [PATCH 06/15] spl: fit: implement recording of loadables into /fit-images
Hi Philipp, 2017-09-13 21:29 GMT+02:00 Philipp Tomsich < philipp.toms...@theobroma-systems.com>: > If a FDT was loaded (e.g. to append it to U-Boot image), we store it's > address and record information for all loadables into this FDT. This > allows us to easily keep track of images for multiple privilege levels > (e.g. with ATF) or of firmware images preloaded into temporary > locations (e.g. PMU firmware that may overlap the SPL stage). > > Signed-off-by: Philipp Tomsich> --- > > common/spl/spl_fit.c | 95 ++ > ++ > 1 file changed, 81 insertions(+), 14 deletions(-) > > diff --git a/common/spl/spl_fit.c b/common/spl/spl_fit.c > index 9f05e1e..6dc0969 100644 > --- a/common/spl/spl_fit.c > +++ b/common/spl/spl_fit.c > @@ -2,7 +2,7 @@ > * Copyright (C) 2016 Google, Inc > * Written by Simon Glass > * > - * SPDX-License-Identifier: GPL-2.0+ > + * SPDX-License-Identifier:GPL-2.0+ > */ > > #include > @@ -16,22 +16,24 @@ > #endif > > /** > - * spl_fit_get_image_node(): By using the matching configuration subnode, > + * spl_fit_get_image_name(): By using the matching configuration subnode, > * retrieve the name of an image, specified by a property name and an > index > * into that. > * @fit: Pointer to the FDT blob. > * @images:Offset of the /images subnode. > * @type: Name of the property within the configuration subnode. > * @index: Index into the list of strings in this property. > + * @outname: Name of the image > * > - * Return: the node offset of the respective image node or a negative > - * error number. > + * Return: 0 on success, or a negative error number > */ > -static int spl_fit_get_image_node(const void *fit, int images, > - const char *type, int index) > +static int spl_fit_get_image_name(const void *fit, int images, > + const char *type, int index, > + char **outname) > { > const char *name, *str; > - int node, conf_node; > + __maybe_unused int node; > + int conf_node; > int len, i; > > conf_node = fit_find_config_node(fit); > @@ -63,7 +65,35 @@ static int spl_fit_get_image_node(const void *fit, int > images, > } > } > > + *outname = (char *)str; > + return 0; > +} > + > +/** > + * spl_fit_get_image_node(): By using the matching configuration subnode, > + * retrieve the name of an image, specified by a property name and an > index > + * into that. > + * @fit: Pointer to the FDT blob. > + * @images:Offset of the /images subnode. > + * @type: Name of the property within the configuration subnode. > + * @index: Index into the list of strings in this property. > + * > + * Return: the node offset of the respective image node or a negative > + * error number. > + */ > +static int spl_fit_get_image_node(const void *fit, int images, > + const char *type, int index) > +{ > + char *str; > + int err; > + int node; > + > + err = spl_fit_get_image_name(fit, images, type, index, ); > + if (err) > + return err; > + > debug("%s: '%s'\n", type, str); > + > node = fdt_subnode_offset(fit, images, str); > if (node < 0) { > debug("cannot find image node '%s': %d\n", str, node); > @@ -116,15 +146,15 @@ static int get_aligned_image_size(struct > spl_load_info *info, int data_size, > * @info: points to information about the device to load data from > * @sector:the start sector of the FIT image on the device > * @fit: points to the flattened device tree blob describing the FIT > - * image > + * image > * @base_offset: the beginning of the data area containing the actual > * image data, relative to the beginning of the FIT > * @node: offset of the DT node describing the image to load > (relative > - * to @fit) > + * to @fit) > * @image_info:will be filled with information about the loaded > image > - * If the FIT node does not contain a "load" (address) > property, > - * the image gets loaded to the address pointed to by the > - * load_addr member in this struct. > + * If the FIT node does not contain a "load" (address) > property, > + * the image gets loaded to the address pointed to by the > + * load_addr member in this struct. > * > * Return: 0 on success or a negative error number. > */ > @@ -236,6 +266,35 @@ static int spl_fit_append_fdt(struct spl_image_info > *spl_image, > image_info.load_addr = spl_image->load_addr + spl_image->size; > ret = spl_load_fit_image(info, sector, fit, base_offset, node, >
Re: [U-Boot] [PATCH 06/15] spl: fit: implement recording of loadables into /fit-images
On 13 September 2017 at 13:29, Philipp Tomsichwrote: > If a FDT was loaded (e.g. to append it to U-Boot image), we store it's > address and record information for all loadables into this FDT. This > allows us to easily keep track of images for multiple privilege levels > (e.g. with ATF) or of firmware images preloaded into temporary > locations (e.g. PMU firmware that may overlap the SPL stage). > > Signed-off-by: Philipp Tomsich > --- > > common/spl/spl_fit.c | 95 > > 1 file changed, 81 insertions(+), 14 deletions(-) Reviewed-by: Simon Glass I wonder if this should be a new CONFIG option to reduce code size for things that don't need it? ___ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot