Re: [PATCH v3] abootimg: Add init_boot image support

2024-06-10 Thread Tom Rini
On Thu, 23 May 2024 07:06:07 +, Roman Stratiienko wrote:

> Quote from [1]:
> 
> "For devices launching with Android 13, the generic ramdisk is removed
> from the boot image and placed in a separate init_boot image.
> This change leaves the boot image with only the GKI kernel."
> 
> While at it, update wrong error handling message when vendor_boot
> cannot be loaded.
> 
> [...]

Applied to u-boot/next, thanks!

-- 
Tom




Re: [PATCH v3] abootimg: Add init_boot image support

2024-05-23 Thread Mattijs Korpershoek
Hi Roman,

Thank you for the patch.

On jeu., mai 23, 2024 at 07:06, Roman Stratiienko  
wrote:

> Quote from [1]:
>
> "For devices launching with Android 13, the generic ramdisk is removed
> from the boot image and placed in a separate init_boot image.
> This change leaves the boot image with only the GKI kernel."
>
> While at it, update wrong error handling message when vendor_boot
> cannot be loaded.
>
> [1]: https://source.android.com/docs/core/architecture/partitions/generic-boot
> Signed-off-by: Roman Stratiienko 
> Reviewed-by: Mattijs Korpershoek 

To confirm, v3 applies without any conflicts.

This series was initially assigned to Tom on patchwork, so it's up to
him to see when he wants to pick this up.

[...]



[PATCH v3] abootimg: Add init_boot image support

2024-05-23 Thread Roman Stratiienko
Quote from [1]:

"For devices launching with Android 13, the generic ramdisk is removed
from the boot image and placed in a separate init_boot image.
This change leaves the boot image with only the GKI kernel."

While at it, update wrong error handling message when vendor_boot
cannot be loaded.

[1]: https://source.android.com/docs/core/architecture/partitions/generic-boot
Signed-off-by: Roman Stratiienko 
Reviewed-by: Mattijs Korpershoek 
---

Changes in v2:
- Addressed review comments v1

Changes in v3:
- Rebased on top of latest u-boot/next

 boot/image-board.c | 13 ++---
 cmd/abootimg.c | 26 +-
 include/image.h|  7 +++
 3 files changed, 38 insertions(+), 8 deletions(-)

diff --git a/boot/image-board.c b/boot/image-board.c
index b7884b8c5d..f212401304 100644
--- a/boot/image-board.c
+++ b/boot/image-board.c
@@ -406,13 +406,20 @@ static int select_ramdisk(struct bootm_headers *images, 
const char *select, u8 a
if (IS_ENABLED(CONFIG_ANDROID_BOOT_IMAGE)) {
int ret;
if (IS_ENABLED(CONFIG_CMD_ABOOTIMG)) {
-   void *boot_img = 
map_sysmem(get_abootimg_addr(), 0);
+   ulong boot_img = get_abootimg_addr();
+   ulong init_boot_img = get_ainit_bootimg_addr();
void *vendor_boot_img = 
map_sysmem(get_avendor_bootimg_addr(), 0);
+   void *ramdisk_img;
 
-   ret = android_image_get_ramdisk(boot_img, 
vendor_boot_img,
+   if (init_boot_img == -1)
+   ramdisk_img = map_sysmem(boot_img, 0);
+   else
+   ramdisk_img = map_sysmem(init_boot_img, 
0);
+
+   ret = android_image_get_ramdisk(ramdisk_img, 
vendor_boot_img,
rd_datap, 
rd_lenp);
unmap_sysmem(vendor_boot_img);
-   unmap_sysmem(boot_img);
+   unmap_sysmem(ramdisk_img);
} else {
void *ptr = map_sysmem(images->os.start, 0);
 
diff --git a/cmd/abootimg.c b/cmd/abootimg.c
index 88c77d9992..327712a536 100644
--- a/cmd/abootimg.c
+++ b/cmd/abootimg.c
@@ -14,6 +14,7 @@
 
 /* Please use abootimg_addr() macro to obtain the boot image address */
 static ulong _abootimg_addr = -1;
+static ulong _ainit_bootimg_addr = -1;
 static ulong _avendor_bootimg_addr = -1;
 
 ulong get_abootimg_addr(void)
@@ -21,6 +22,11 @@ ulong get_abootimg_addr(void)
return (_abootimg_addr == -1 ? image_load_addr : _abootimg_addr);
 }
 
+ulong get_ainit_bootimg_addr(void)
+{
+   return _ainit_bootimg_addr;
+}
+
 ulong get_avendor_bootimg_addr(void)
 {
return _avendor_bootimg_addr;
@@ -179,7 +185,7 @@ static int do_abootimg_addr(struct cmd_tbl *cmdtp, int 
flag, int argc,
char *endp;
ulong img_addr;
 
-   if (argc < 2 || argc > 3)
+   if (argc < 2 || argc > 4)
return CMD_RET_USAGE;
 
img_addr = hextoul(argv[1], );
@@ -190,16 +196,26 @@ static int do_abootimg_addr(struct cmd_tbl *cmdtp, int 
flag, int argc,
 
_abootimg_addr = img_addr;
 
-   if (argc == 3) {
+   if (argc > 2) {
img_addr = simple_strtoul(argv[2], , 16);
if (*endp != '\0') {
-   printf("Error: Wrong vendor image address\n");
+   printf("Error: Wrong vendor_boot image address\n");
return CMD_RET_FAILURE;
}
 
_avendor_bootimg_addr = img_addr;
}
 
+   if (argc == 4) {
+   img_addr = simple_strtoul(argv[3], , 16);
+   if (*endp != '\0') {
+   printf("Error: Wrong init_boot image address\n");
+   return CMD_RET_FAILURE;
+   }
+
+   _ainit_bootimg_addr = img_addr;
+   }
+
return CMD_RET_SUCCESS;
 }
 
@@ -243,7 +259,7 @@ static int do_abootimg_dump(struct cmd_tbl *cmdtp, int 
flag, int argc,
 }
 
 static struct cmd_tbl cmd_abootimg_sub[] = {
-   U_BOOT_CMD_MKENT(addr, 3, 1, do_abootimg_addr, "", ""),
+   U_BOOT_CMD_MKENT(addr, 4, 1, do_abootimg_addr, "", ""),
U_BOOT_CMD_MKENT(dump, 2, 1, do_abootimg_dump, "", ""),
U_BOOT_CMD_MKENT(get, 5, 1, do_abootimg_get, "", ""),
 };
@@ -271,7 +287,7 @@ static int do_abootimg(struct cmd_tbl *cmdtp, int flag, int 
argc,
 U_BOOT_CMD(
abootimg, CONFIG_SYS_MAXARGS, 0, do_abootimg,
"manipulate Android Boot Image",
-   "addr  []>\n"
+   "addr  [ []]\n"
"- set the address in RAM where boot image is located\n"
"  ($loadaddr is used by default)\n"
"abootimg dump dtb\n"
diff --git