[U-Boot] [PATCH] image-fit: switch ENOLINK to ENOENT

Jonathan Gray jsg at jsg.id.au
Thu Sep 15 23:27:24 CEST 2016


On Thu, Sep 15, 2016 at 04:08:33PM +0200, Mario Six wrote:
> Hi Stefan,
> 
> I also see the same error on our Armada board. It stems from the fact that
> boot_get_ramdisk in common/image.c treats a ENOLINK different from all other
> errors (which the patch changed into a ENOENT). The following patch fixes the
> problem on our board:
> 
> diff --git a/common/image.c b/common/image.c
> index 7ad04ca..c8d9bc8 100644
> --- a/common/image.c
> +++ b/common/image.c
> @@ -1078,7 +1078,7 @@ int boot_get_ramdisk(int argc, char * const
> argv[], bootm_headers_t *images,
>              rd_addr = map_to_sysmem(images->fit_hdr_os);
>              rd_noffset = fit_get_node_from_config(images,
>                      FIT_RAMDISK_PROP, rd_addr);
> -            if (rd_noffset == -ENOLINK)
> +            if (rd_noffset == -ENOENT)
>                  return 0;
>              else if (rd_noffset < 0)
>                  return 1;
> 
> So, yes, 2016.09 breaks Armada, apparently.

The callers of the proposed/rejected kwboot.c errno diff were all
checked but the test of the result in the caller of this one
seems to have been missed indeed.

Sorry for missing this and

Reviewed-by: Jonathan Gray <jsg at jsg.id.au>

> 
> Best regards,
> 
> Mario
> 
> On Thu, Sep 15, 2016 at 2:49 PM, Stefan Roese <sr at denx.de> wrote:
> > Hi Tom,
> > Hi Jonathan,
> >
> > On 03.09.2016 00:30, Jonathan Gray wrote:
> >> ENOLINK is not required by POSIX and does not exist on OpenBSD
> >> and likely other systems.
> >>
> >> Signed-off-by: Jonathan Gray <jsg at jsg.id.au>
> >> ---
> >>  common/image-fit.c | 2 +-
> >>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/common/image-fit.c b/common/image-fit.c
> >> index d8d4e95..79c0375 100644
> >> --- a/common/image-fit.c
> >> +++ b/common/image-fit.c
> >> @@ -1566,7 +1566,7 @@ int fit_get_node_from_config(bootm_headers_t *images, const char *prop_name,
> >>       noffset = fit_conf_get_prop_node(fit_hdr, cfg_noffset, prop_name);
> >>       if (noffset < 0) {
> >>               debug("*  %s: no '%s' in config\n", prop_name, prop_name);
> >> -             return -ENOLINK;
> >> +             return -ENOENT;
> >>       }
> >>
> >>       return noffset;
> >>
> >
> > This patch breaks Linux booting via FIT-image on Marvell Armada
> > XP for me. Here a short log with this patch applied:
> >
> > ## Loading kernel from FIT Image at 02000000 ...
> >    Using 'conf at 1' configuration
> >    Trying 'kernel at 1' kernel subimage
> >      Description:  Linux kernel
> >      Type:         Kernel Image
> >      Compression:  uncompressed
> >      Data Start:   0x020000f4
> >      Data Size:    5065728 Bytes = 4.8 MiB
> >      Architecture: ARM
> >      OS:           Linux
> >      Load Address: 0x00008000
> >      Entry Point:  0x00008000
> >      Hash algo:    sha1
> >      Hash value:   11ddefa0b68cbc5db9d84b0fd74ec67da155fada
> >    Verifying Hash Integrity ... sha1+ OK
> > Ramdisk image is corrupt or invalid
> >
> >
> > And this is how is should look like:
> >
> > ## Loading kernel from FIT Image at 02000000 ...
> >    Using 'conf at 1' configuration
> >    Trying 'kernel at 1' kernel subimage
> >      Description:  Linux kernel
> >      Type:         Kernel Image
> >      Compression:  uncompressed
> >      Data Start:   0x020000f4
> >      Data Size:    5065728 Bytes = 4.8 MiB
> >      Architecture: ARM
> >      OS:           Linux
> >      Load Address: 0x00008000
> >      Entry Point:  0x00008000
> >      Hash algo:    sha1
> >      Hash value:   11ddefa0b68cbc5db9d84b0fd74ec67da155fada
> >    Verifying Hash Integrity ... sha1+ OK
> > ## Loading fdt from FIT Image at 02000000 ...
> >    Using 'conf at 1' configuration
> >    Trying 'fdt at 1' fdt subimage
> >      Description:  Flattened Device Tree blob
> >      Type:         Flat Device Tree
> >      Compression:  uncompressed
> >      Data Start:   0x024d4de8
> >      Data Size:    16971 Bytes = 16.6 KiB
> >      Architecture: ARM
> >      Hash algo:    sha1
> >      Hash value:   672f2964b334406749265f4508e2231fb54ccbf4
> >    Verifying Hash Integrity ... sha1+ OK
> >    Booting using the fdt blob at 0x24d4de8
> >    Loading Kernel Image ... OK
> >    Loading Device Tree to 0fff8000, end 0ffff24a ... OK
> >
> > Starting kernel ...
> >
> >
> > Unfortunately v2016.09 is useless with this patch - at least for me.
> > I really think that we should revert it and release v2016.09.01.
> >
> > What do you think?
> >
> > Thanks,
> > Stefan
> > _______________________________________________
> > U-Boot mailing list
> > U-Boot at lists.denx.de
> > http://lists.denx.de/mailman/listinfo/u-boot


More information about the U-Boot mailing list