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

2024-05-23 Thread Roman Stratiienko
чт, 23 мая 2024 г. в 09:41, Mattijs Korpershoek :
>
> Hi Roman,
>
> Thank you for the patch.
>
> On mer., mai 22, 2024 at 21:26, 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 
>
> Note: this patch still does not apply on master nor next:
>
> $ ~/work/upstream/u-boot/ git show --pretty='%h ("%s")' HEAD --no-patch
> a7f0154c4128 ("Prepare v2024.07-rc3")
>
> $ ~/work/upstream/u-boot/ b4 shazam -s -l 
> 20240522212645.87250-1-r.stratiie...@gmail.com
>
> [...]
>
> Total patches: 1
> ---
> Applying: abootimg: Add init_boot image support
> Patch failed at 0001 abootimg: Add init_boot image support
> error: sha1 information is lacking or useless (cmd/abootimg.c).
> error: could not build fake ancestor
> hint: Use 'git am --show-current-patch=diff' to see the failed patch
> hint: When you have resolved this problem, run "git am --continue".
> hint: If you prefer to skip this patch, run "git am --skip" instead.
> hint: To restore the original branch and stop patching, run "git am --abort".
> hint: Disable this message with "git config advice.mergeConflict false"
>
> - master: a7f0154c4128 ("Prepare v2024.07-rc3")
> - next: 377e91c162ab ("Merge patch series "Clean-up patch set for MbedTLS 
> integration"")
>
> Looking further down below, we can see that this patch has the "abootimg
> load" command, which is introduced in these series:
> https://lore.kernel.org/r/20240519191856.2582174-1-r.stratiie...@gmail.com
>
> Please consider rebasing on either master or next before sending.

Ahh. I see. Sorry for the inconvenience. I will rebase and send v3.

>
>
> > ---
> >  boot/image-board.c | 13 ++---
> >  cmd/abootimg.c | 26 +-
> >  include/image.h|  7 +++
> >  3 files changed, 38 insertions(+), 8 deletions(-)
>
> [...]
>
> >
> >
> >  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, "", ""),
> >   U_BOOT_CMD_MKENT(load, 5, 1, do_abootimg_load, "", ""),
> > @@ -376,7 +392,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"
>
> [...]


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

2024-05-23 Thread Mattijs Korpershoek
Hi Roman,

Thank you for the patch.

On mer., mai 22, 2024 at 21:26, 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 

Note: this patch still does not apply on master nor next:

$ ~/work/upstream/u-boot/ git show --pretty='%h ("%s")' HEAD --no-patch
a7f0154c4128 ("Prepare v2024.07-rc3")

$ ~/work/upstream/u-boot/ b4 shazam -s -l 
20240522212645.87250-1-r.stratiie...@gmail.com

[...]

Total patches: 1
---
Applying: abootimg: Add init_boot image support
Patch failed at 0001 abootimg: Add init_boot image support
error: sha1 information is lacking or useless (cmd/abootimg.c).
error: could not build fake ancestor
hint: Use 'git am --show-current-patch=diff' to see the failed patch
hint: When you have resolved this problem, run "git am --continue".
hint: If you prefer to skip this patch, run "git am --skip" instead.
hint: To restore the original branch and stop patching, run "git am --abort".
hint: Disable this message with "git config advice.mergeConflict false"

- master: a7f0154c4128 ("Prepare v2024.07-rc3")
- next: 377e91c162ab ("Merge patch series "Clean-up patch set for MbedTLS 
integration"")

Looking further down below, we can see that this patch has the "abootimg
load" command, which is introduced in these series:
https://lore.kernel.org/r/20240519191856.2582174-1-r.stratiie...@gmail.com

Please consider rebasing on either master or next before sending.


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

[...]

>
>  
>  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, "", ""),
>   U_BOOT_CMD_MKENT(load, 5, 1, do_abootimg_load, "", ""),
> @@ -376,7 +392,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"

[...]


[PATCH v2] abootimg: Add init_boot image support

2024-05-22 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 
---
 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 69c7390dbe..9e965c1fb7 100644
--- a/cmd/abootimg.c
+++ b/cmd/abootimg.c
@@ -16,6 +16,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)
@@ -23,6 +24,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;
@@ -210,7 +216,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], );
@@ -221,16 +227,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;
 }
 
@@ -347,7 +363,7 @@ fail:
 }
 
 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, "", ""),
U_BOOT_CMD_MKENT(load, 5, 1, do_abootimg_load, "", ""),
@@ -376,7 +392,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 a/include/image.h b/include/image.h
index 96df2b99a7..7d8ff40c3f 100644
--- a/include/image.h
+++ b/include/image.h
@@ -1982,6 +1982,13 @@ bool