[U-Boot] [PATCH] common: image-fdt: correct fdt_blob for IMAGE_FORMAT_LEGACY
Simon Glass
sjg at chromium.org
Tue Dec 1 21:01:59 CET 2015
On 24 November 2015 at 18:12, Peng Fan <b51431 at freescale.com> wrote:
>
> Hi Simon,
> On Tue, Nov 24, 2015 at 12:04:56PM -0700, Simon Glass wrote:
> >Hi Peng,
> >
> >On 24 November 2015 at 01:54, Peng Fan <Peng.Fan at freescale.com> wrote:
> >> If condition of "(load == image_start || load == image_data)" is true,
> >> should use "fdt_addr = load;", but not "fdt_blob = (char *)image_data;",
> >> or fdt_blob will be overridden by "fdt_blob = map_sysmem(fdt_addr, 0);"
> >> at the end of the switch case.
> >>
> >> Signed-off-by: Peng Fan <Peng.Fan at freescale.com>
> >> Cc: Simon Glass <sjg at chromium.org>
> >> Cc: Joe Hershberger <joe.hershberger at ni.com>
> >> Cc: Max Krummenacher <max.krummenacher at toradex.com>
> >> Cc: Marek Vasut <marex at denx.de>
> >> Cc: Suriyan Ramasami <suriyan.r at gmail.com>
> >> Cc: Paul Kocialkowski <contact at paulk.fr>
> >> Cc: Tom Rini <trini at konsulko.com>
> >> ---
> >> common/image-fdt.c | 2 +-
> >> 1 file changed, 1 insertion(+), 1 deletion(-)
> >>
> >> diff --git a/common/image-fdt.c b/common/image-fdt.c
> >> index 5180a03..5e4e5bd 100644
> >> --- a/common/image-fdt.c
> >> +++ b/common/image-fdt.c
> >> @@ -326,7 +326,7 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch,
> >>
> >> if (load == image_start ||
> >> load == image_data) {
> >> - fdt_blob = (char *)image_data;
> >> + fdt_addr = load;
> >> break;
> >> }
> >
> >Are you sure that should not be:
> >
> >fdt_addr = image_data
> >
> >?
>
> Just code inspection.
>
> See the following code piece:
>
> 319 image_start = (ulong)fdt_hdr;
> 320 image_data = (ulong)image_get_data(fdt_hdr);
> 321 image_end = image_get_image_end(fdt_hdr);
> 322
> 323 load = image_get_load(fdt_hdr);
> 324 load_end = load + image_get_data_size(fdt_hdr);
> 325
> 326 if (load == image_start ||
> 327 load == image_data) {
> 328 fdt_blob = (char *)image_data;
> 329 break;
> 330 }
> 331
> 332 if ((load < image_end) && (load_end > image_start)) {
> 333 fdt_error("fdt overwritten");
> 334 goto error;
> 335 }
> 336
> 337 debug(" Loading FDT from 0x%08lx to 0x%08lx\n",
> 338 image_data, load);
> 339
> 340 memmove((void *)load,
> 341 (void *)image_data,
> 342 image_get_data_size(fdt_hdr));
> 343
> 344 fdt_addr = load;
> 345 break;
>
> .........[snip code].........
>
> 386 printf(" Booting using the fdt blob at %#08lx\n", fdt_addr);
> 387 fdt_blob = map_sysmem(fdt_addr, 0);
>
>
> Line 387 will override the settings of line 328.
> To line 328, means we do not need to relocate image_data to load, since they
> are same. So according to line 344, I use same way "fdt_addr = load".
OK I see.
Reviewed-by: Simon Glass <sjg at chromium.org>
>
> >
> >The idea is to pick up the FDT from inside the image, since the load
> >address indicates that it should not be relocated.
> >
> >BTW one more thing I noticed:
> >
> >image_data = (ulong)image_get_data(fdt_hdr);
> >
> >The cast is confusing, and can be removed.
>
> Yeah. But this patch is to avoid override settings of fdt_blob, line 328
> and line 387. This cast can be discarded using another patch.
>
Yes it should be a separate patch. But since you are in there...
Regards,
Simon
More information about the U-Boot
mailing list