diff mbox series

[U-Boot,1/2] parse the second area of android image

Message ID 20180127055909.12962-2-bin.chen@linaro.org
State Accepted
Delegated to: Tom Rini
Headers show
Series Android and arm64 improvement | expand

Commit Message

Bin Chen Jan. 27, 2018, 5:59 a.m. UTC
The second area of android image was intended to put a 2nd stage
bootloader but in practice were rarely used (in my knowledge).

An proposal was made to the AOSP to (re)use the second area as the dtb[1],
This patch itself doesn't depend on that proposal being accepted but it won't
be that helpful as well if that proposal won't be accepted. But don't do
any harm as well.

[1] https://android-review.googlesource.com/#/c/417447/
Signed-off-by: Bin Chen <bin.chen@linaro.org>
Reviewed-by: Tom Rini <trini@konsulko.com>
---
 common/image-android.c | 19 +++++++++++++++++++
 include/image.h        |  2 ++
 2 files changed, 21 insertions(+)

Comments

Kever Yang Feb. 6, 2018, 4:34 a.m. UTC | #1
On 01/27/2018 01:59 PM, Bin Chen wrote:
> The second area of android image was intended to put a 2nd stage
> bootloader but in practice were rarely used (in my knowledge).
>
> An proposal was made to the AOSP to (re)use the second area as the dtb[1],
> This patch itself doesn't depend on that proposal being accepted but it won't
> be that helpful as well if that proposal won't be accepted. But don't do
> any harm as well.
>
> [1] https://android-review.googlesource.com/#/c/417447/
> Signed-off-by: Bin Chen <bin.chen@linaro.org>
> Reviewed-by: Tom Rini <trini@konsulko.com>

Looks good to me,

Reviewed-by: Kever Yang <kever.yang@rock-chips.com>

Thanks,
- Kever
> ---
>  common/image-android.c | 19 +++++++++++++++++++
>  include/image.h        |  2 ++
>  2 files changed, 21 insertions(+)
>
> diff --git a/common/image-android.c b/common/image-android.c
> index e74d0aafca..5ad3a1fa38 100644
> --- a/common/image-android.c
> +++ b/common/image-android.c
> @@ -146,6 +146,25 @@ int android_image_get_ramdisk(const struct andr_img_hdr *hdr,
>  	return 0;
>  }
>  
> +int android_image_get_second(const struct andr_img_hdr *hdr,
> +			      ulong *second_data, ulong *second_len)
> +{
> +	if (!hdr->second_size) {
> +		*second_data = *second_len = 0;
> +		return -1;
> +	}
> +
> +	*second_data = (unsigned long)hdr;
> +	*second_data += hdr->page_size;
> +	*second_data += ALIGN(hdr->kernel_size, hdr->page_size);
> +	*second_data += ALIGN(hdr->ramdisk_size, hdr->page_size);
> +
> +	printf("second address is 0x%lx\n",*second_data);
> +
> +	*second_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/include/image.h b/include/image.h
> index b2b23a96f1..c8ce4da901 100644
> --- a/include/image.h
> +++ b/include/image.h
> @@ -1263,6 +1263,8 @@ int android_image_get_kernel(const struct andr_img_hdr *hdr, int verify,
>  			     ulong *os_data, ulong *os_len);
>  int android_image_get_ramdisk(const struct andr_img_hdr *hdr,
>  			      ulong *rd_data, ulong *rd_len);
> +int android_image_get_second(const struct andr_img_hdr *hdr,
> +			      ulong *second_data, ulong *second_len);
>  ulong android_image_get_end(const struct andr_img_hdr *hdr);
>  ulong android_image_get_kload(const struct andr_img_hdr *hdr);
>  void android_print_contents(const struct andr_img_hdr *hdr);
Tom Rini Feb. 8, 2018, 12:26 p.m. UTC | #2
On Sat, Jan 27, 2018 at 04:59:08PM +1100, Bin Chen wrote:

> The second area of android image was intended to put a 2nd stage
> bootloader but in practice were rarely used (in my knowledge).
> 
> An proposal was made to the AOSP to (re)use the second area as the dtb[1],
> This patch itself doesn't depend on that proposal being accepted but it won't
> be that helpful as well if that proposal won't be accepted. But don't do
> any harm as well.
> 
> [1] https://android-review.googlesource.com/#/c/417447/
> Signed-off-by: Bin Chen <bin.chen@linaro.org>
> Reviewed-by: Tom Rini <trini@konsulko.com>
> Reviewed-by: Kever Yang <kever.yang@rock-chips.com>

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/common/image-android.c b/common/image-android.c
index e74d0aafca..5ad3a1fa38 100644
--- a/common/image-android.c
+++ b/common/image-android.c
@@ -146,6 +146,25 @@  int android_image_get_ramdisk(const struct andr_img_hdr *hdr,
 	return 0;
 }
 
+int android_image_get_second(const struct andr_img_hdr *hdr,
+			      ulong *second_data, ulong *second_len)
+{
+	if (!hdr->second_size) {
+		*second_data = *second_len = 0;
+		return -1;
+	}
+
+	*second_data = (unsigned long)hdr;
+	*second_data += hdr->page_size;
+	*second_data += ALIGN(hdr->kernel_size, hdr->page_size);
+	*second_data += ALIGN(hdr->ramdisk_size, hdr->page_size);
+
+	printf("second address is 0x%lx\n",*second_data);
+
+	*second_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/include/image.h b/include/image.h
index b2b23a96f1..c8ce4da901 100644
--- a/include/image.h
+++ b/include/image.h
@@ -1263,6 +1263,8 @@  int android_image_get_kernel(const struct andr_img_hdr *hdr, int verify,
 			     ulong *os_data, ulong *os_len);
 int android_image_get_ramdisk(const struct andr_img_hdr *hdr,
 			      ulong *rd_data, ulong *rd_len);
+int android_image_get_second(const struct andr_img_hdr *hdr,
+			      ulong *second_data, ulong *second_len);
 ulong android_image_get_end(const struct andr_img_hdr *hdr);
 ulong android_image_get_kload(const struct andr_img_hdr *hdr);
 void android_print_contents(const struct andr_img_hdr *hdr);