Message ID | 20160613195315.GB29401@panicking |
---|---|
State | RFC |
Delegated to: | Tom Rini |
Headers | show |
Hi Michael, On 13 June 2016 at 13:53, Michael Trimarchi <michael@amarulasolutions.com> wrote: > > We can support dts load from the second address of android image. > This let us to boot board (aka freescale) > > Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com> > --- > Changes: > v2 -> v3: Move variable fdt_data and fdt_len in main body > v1 -> v2: reduce code and cleanup > --- > common/image-android.c | 21 +++++++++++++++++++++ > common/image-fdt.c | 13 +++++++++++-- > include/image.h | 2 ++ > 3 files changed, 34 insertions(+), 2 deletions(-) Reviewed-by: Simon Glass <sjg@chromium.org> But please see below. > > diff --git a/common/image-android.c b/common/image-android.c > index ee03b96..9701acd 100644 > --- a/common/image-android.c > +++ b/common/image-android.c > @@ -146,6 +146,27 @@ int android_image_get_ramdisk(const struct andr_img_hdr *hdr, > return 0; > } > > +int android_image_get_dts(const struct andr_img_hdr *hdr, > + ulong *dts_data, ulong *dts_len) > +{ > + if (!hdr->second_size) { > + *dts_data = *dts_len = 0; > + return -1; > + } > + > + printf("Dts load addr 0x%08x size %u KiB\n", > + hdr->second_addr, DIV_ROUND_UP(hdr->second_size, 1024)); > + > + *dts_data = (unsigned long)hdr; > + *dts_data += hdr->page_size; > + *dts_data += ALIGN(hdr->kernel_size, hdr->page_size); > + *dts_data += ALIGN(hdr->ramdisk_size, hdr->page_size); > + > + *dts_len = hdr->second_size; > + return 0; > +} > + > + > #if !defined(CONFIG_SPL_BUILD) > /** > * android_print_contents - prints out the contents of the Android format image > diff --git a/common/image-fdt.c b/common/image-fdt.c > index 6cac7db..fb4cceb 100644 > --- a/common/image-fdt.c > +++ b/common/image-fdt.c > @@ -237,6 +237,7 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, > ulong default_addr; > int fdt_noffset; > #endif > + ulong fdt_data, fdt_len; Won't this give an unused variable warning if CONFIG_ANDROID_BOOT_IMAGE is not defined? > const char *select = NULL; > int ok_no_fdt = 0; > > @@ -345,6 +346,12 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, > fdt_addr = load; > break; > #endif > +#if defined(CONFIG_ANDROID_BOOT_IMAGE) > + case IMAGE_FORMAT_ANDROID: > + android_image_get_dts(buf, &fdt_data, &fdt_len); > + goto boot_fdt; > + break; > +#endif > case IMAGE_FORMAT_FIT: > /* > * This case will catch both: new uImage format > @@ -389,8 +396,6 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, > } else if (images->legacy_hdr_valid && > image_check_type(&images->legacy_hdr_os_copy, > IH_TYPE_MULTI)) { > - ulong fdt_data, fdt_len; > - > /* > * Now check if we have a legacy multi-component image, > * get second entry data start address and len. > @@ -400,6 +405,10 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, > > image_multi_getimg(images->legacy_hdr_os, 2, &fdt_data, > &fdt_len); > + > +#if defined(CONFIG_ANDROID_BOOT_IMAGE) > +boot_fdt: > +#endif > if (fdt_len) { > fdt_blob = (char *)fdt_data; > printf(" Booting using the fdt at 0x%p\n", fdt_blob); > diff --git a/include/image.h b/include/image.h > index 61b5d3b..f475481 100644 > --- a/include/image.h > +++ b/include/image.h > @@ -1147,6 +1147,8 @@ struct andr_img_hdr; > int android_image_check_header(const struct andr_img_hdr *hdr); > int android_image_get_kernel(const struct andr_img_hdr *hdr, int verify, > ulong *os_data, ulong *os_len); > +int android_image_get_dts(const struct andr_img_hdr *hdr, > + ulong *dts_data, ulong *dts_len); > int android_image_get_ramdisk(const struct andr_img_hdr *hdr, > ulong *rd_data, ulong *rd_len); > ulong android_image_get_end(const struct andr_img_hdr *hdr); > -- > 2.8.4 > Regards, Simon
Hi On Thu, Jun 16, 2016 at 2:39 AM, Simon Glass <sjg@chromium.org> wrote: > Hi Michael, > > On 13 June 2016 at 13:53, Michael Trimarchi > <michael@amarulasolutions.com> wrote: >> >> We can support dts load from the second address of android image. >> This let us to boot board (aka freescale) >> >> Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com> >> --- >> Changes: >> v2 -> v3: Move variable fdt_data and fdt_len in main body >> v1 -> v2: reduce code and cleanup >> --- >> common/image-android.c | 21 +++++++++++++++++++++ >> common/image-fdt.c | 13 +++++++++++-- >> include/image.h | 2 ++ >> 3 files changed, 34 insertions(+), 2 deletions(-) > > Reviewed-by: Simon Glass <sjg@chromium.org> > > But please see below. > >> >> diff --git a/common/image-android.c b/common/image-android.c >> index ee03b96..9701acd 100644 >> --- a/common/image-android.c >> +++ b/common/image-android.c >> @@ -146,6 +146,27 @@ int android_image_get_ramdisk(const struct andr_img_hdr *hdr, >> return 0; >> } >> >> +int android_image_get_dts(const struct andr_img_hdr *hdr, >> + ulong *dts_data, ulong *dts_len) >> +{ >> + if (!hdr->second_size) { >> + *dts_data = *dts_len = 0; >> + return -1; >> + } >> + >> + printf("Dts load addr 0x%08x size %u KiB\n", >> + hdr->second_addr, DIV_ROUND_UP(hdr->second_size, 1024)); >> + >> + *dts_data = (unsigned long)hdr; >> + *dts_data += hdr->page_size; >> + *dts_data += ALIGN(hdr->kernel_size, hdr->page_size); >> + *dts_data += ALIGN(hdr->ramdisk_size, hdr->page_size); >> + >> + *dts_len = hdr->second_size; >> + return 0; >> +} >> + >> + >> #if !defined(CONFIG_SPL_BUILD) >> /** >> * android_print_contents - prints out the contents of the Android format image >> diff --git a/common/image-fdt.c b/common/image-fdt.c >> index 6cac7db..fb4cceb 100644 >> --- a/common/image-fdt.c >> +++ b/common/image-fdt.c >> @@ -237,6 +237,7 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, >> ulong default_addr; >> int fdt_noffset; >> #endif >> + ulong fdt_data, fdt_len; > > Won't this give an unused variable warning if > CONFIG_ANDROID_BOOT_IMAGE is not defined? > I had the same feeling but if I remember correctly the other path is always compiled. I will check and in case I will add may_unsed or somenthing similar Michael >> const char *select = NULL; >> int ok_no_fdt = 0; >> >> @@ -345,6 +346,12 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, >> fdt_addr = load; >> break; >> #endif >> +#if defined(CONFIG_ANDROID_BOOT_IMAGE) >> + case IMAGE_FORMAT_ANDROID: >> + android_image_get_dts(buf, &fdt_data, &fdt_len); >> + goto boot_fdt; >> + break; >> +#endif >> case IMAGE_FORMAT_FIT: >> /* >> * This case will catch both: new uImage format >> @@ -389,8 +396,6 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, >> } else if (images->legacy_hdr_valid && >> image_check_type(&images->legacy_hdr_os_copy, >> IH_TYPE_MULTI)) { >> - ulong fdt_data, fdt_len; >> - >> /* >> * Now check if we have a legacy multi-component image, >> * get second entry data start address and len. >> @@ -400,6 +405,10 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, >> >> image_multi_getimg(images->legacy_hdr_os, 2, &fdt_data, >> &fdt_len); >> + >> +#if defined(CONFIG_ANDROID_BOOT_IMAGE) >> +boot_fdt: >> +#endif >> if (fdt_len) { >> fdt_blob = (char *)fdt_data; >> printf(" Booting using the fdt at 0x%p\n", fdt_blob); >> diff --git a/include/image.h b/include/image.h >> index 61b5d3b..f475481 100644 >> --- a/include/image.h >> +++ b/include/image.h >> @@ -1147,6 +1147,8 @@ struct andr_img_hdr; >> int android_image_check_header(const struct andr_img_hdr *hdr); >> int android_image_get_kernel(const struct andr_img_hdr *hdr, int verify, >> ulong *os_data, ulong *os_len); >> +int android_image_get_dts(const struct andr_img_hdr *hdr, >> + ulong *dts_data, ulong *dts_len); >> int android_image_get_ramdisk(const struct andr_img_hdr *hdr, >> ulong *rd_data, ulong *rd_len); >> ulong android_image_get_end(const struct andr_img_hdr *hdr); >> -- >> 2.8.4 >> > > Regards, > Simon
diff --git a/common/image-android.c b/common/image-android.c index ee03b96..9701acd 100644 --- a/common/image-android.c +++ b/common/image-android.c @@ -146,6 +146,27 @@ int android_image_get_ramdisk(const struct andr_img_hdr *hdr, return 0; } +int android_image_get_dts(const struct andr_img_hdr *hdr, + ulong *dts_data, ulong *dts_len) +{ + if (!hdr->second_size) { + *dts_data = *dts_len = 0; + return -1; + } + + printf("Dts load addr 0x%08x size %u KiB\n", + hdr->second_addr, DIV_ROUND_UP(hdr->second_size, 1024)); + + *dts_data = (unsigned long)hdr; + *dts_data += hdr->page_size; + *dts_data += ALIGN(hdr->kernel_size, hdr->page_size); + *dts_data += ALIGN(hdr->ramdisk_size, hdr->page_size); + + *dts_len = hdr->second_size; + return 0; +} + + #if !defined(CONFIG_SPL_BUILD) /** * android_print_contents - prints out the contents of the Android format image diff --git a/common/image-fdt.c b/common/image-fdt.c index 6cac7db..fb4cceb 100644 --- a/common/image-fdt.c +++ b/common/image-fdt.c @@ -237,6 +237,7 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, ulong default_addr; int fdt_noffset; #endif + ulong fdt_data, fdt_len; const char *select = NULL; int ok_no_fdt = 0; @@ -345,6 +346,12 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, fdt_addr = load; break; #endif +#if defined(CONFIG_ANDROID_BOOT_IMAGE) + case IMAGE_FORMAT_ANDROID: + android_image_get_dts(buf, &fdt_data, &fdt_len); + goto boot_fdt; + break; +#endif case IMAGE_FORMAT_FIT: /* * This case will catch both: new uImage format @@ -389,8 +396,6 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, } else if (images->legacy_hdr_valid && image_check_type(&images->legacy_hdr_os_copy, IH_TYPE_MULTI)) { - ulong fdt_data, fdt_len; - /* * Now check if we have a legacy multi-component image, * get second entry data start address and len. @@ -400,6 +405,10 @@ int boot_get_fdt(int flag, int argc, char * const argv[], uint8_t arch, image_multi_getimg(images->legacy_hdr_os, 2, &fdt_data, &fdt_len); + +#if defined(CONFIG_ANDROID_BOOT_IMAGE) +boot_fdt: +#endif if (fdt_len) { fdt_blob = (char *)fdt_data; printf(" Booting using the fdt at 0x%p\n", fdt_blob); diff --git a/include/image.h b/include/image.h index 61b5d3b..f475481 100644 --- a/include/image.h +++ b/include/image.h @@ -1147,6 +1147,8 @@ struct andr_img_hdr; int android_image_check_header(const struct andr_img_hdr *hdr); int android_image_get_kernel(const struct andr_img_hdr *hdr, int verify, ulong *os_data, ulong *os_len); +int android_image_get_dts(const struct andr_img_hdr *hdr, + ulong *dts_data, ulong *dts_len); int android_image_get_ramdisk(const struct andr_img_hdr *hdr, ulong *rd_data, ulong *rd_len); ulong android_image_get_end(const struct andr_img_hdr *hdr);
We can support dts load from the second address of android image. This let us to boot board (aka freescale) Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com> --- Changes: v2 -> v3: Move variable fdt_data and fdt_len in main body v1 -> v2: reduce code and cleanup --- common/image-android.c | 21 +++++++++++++++++++++ common/image-fdt.c | 13 +++++++++++-- include/image.h | 2 ++ 3 files changed, 34 insertions(+), 2 deletions(-)