[U-Boot] [RFC PATCH V3] common: image-fdt: support dts from the second address of android image
Michael Trimarchi
michael at amarulasolutions.com
Thu Jun 16 09:31:57 CEST 2016
Hi
On Thu, Jun 16, 2016 at 2:39 AM, Simon Glass <sjg at chromium.org> wrote:
> Hi Michael,
>
> On 13 June 2016 at 13:53, Michael Trimarchi
> <michael at 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 at 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 at 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
--
| Michael Nazzareno Trimarchi Amarula Solutions BV |
| COO - Founder Cruquiuskade 47 |
| +31(0)851119172 Amsterdam 1018 AM NL |
| [`as] http://www.amarulasolutions.com |
More information about the U-Boot
mailing list