[PATCH v2 0/3] Add Android 14 bootflow support for AM62X and AM62P board

Ths patchset add support of Android 14 with boot image version 4 for : - AM62X-SK EVM: https://www.ti.com/tool/SK-AM62B - BeaglePlay: https://beagleplay.org/ - AM62PX-SK EVM: https://www.ti.com/tool/SK-AM62P-LP
Android Images use to test this series are on the Official TI website: - AM62x/BeaglePlay: https://www.ti.com/tool/PROCESSOR-SDK-AM62X - AM62PX: https://www.ti.com/tool/PROCESSOR-SDK-AM62P
Signed-off-by: Guillaume La Roque glaroque@baylibre.com --- Changes in v2: - Remove uneeded part in android fragment - Update commit message. - Link to v1: https://lore.kernel.org/r/20240902-sitaraupstream-v1-0-0c478c33c08b@baylibre...
--- Guillaume La Roque (1): board: ti: am62x_evm: Add android bootflow
Mattijs Korpershoek (2): board: beagle: beagleplay: Add android bootflow support board: ti: am62px: Add android bootflow support
board/beagle/beagleplay/beagleplay.env | 30 ++++++++++++++++++++++++++++++ board/ti/am62px/am62px.env | 5 +++++ board/ti/am62x/am62x.env | 5 +++++ configs/am62x_a53_android.config | 21 +++++++++++++++++++++ doc/board/ti/am62x_sk.rst | 14 ++++++++++++++ include/env/ti/android.env | 31 +++++++++++++++++++++++++++++++ 6 files changed, 106 insertions(+) --- base-commit: 57949a99b7bd0aa21abbde1ffa7e50e5d9e10a4e change-id: 20240830-sitaraupstream-5b18f3b9824f
Best regards,

Add Android bootflow support for AM62X SK EVM board with new android boot method.
To build for AM62x for Android, we use the am62x_a53_android.config fragment when building A53 bootloaders:
$ make am62x_evm_a53_defconfig $ make am62x_a53_android.config $ make
Co-developed-by: Mattijs Korpershoek mkorpershoek@baylibre.com Signed-off-by: Mattijs Korpershoek mkorpershoek@baylibre.com Signed-off-by: Guillaume La Roque glaroque@baylibre.com --- board/ti/am62x/am62x.env | 5 +++++ configs/am62x_a53_android.config | 21 +++++++++++++++++++++ doc/board/ti/am62x_sk.rst | 14 ++++++++++++++ include/env/ti/android.env | 31 +++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+)
diff --git a/board/ti/am62x/am62x.env b/board/ti/am62x/am62x.env index 09b9b16a3e58..078cc4b5ac96 100644 --- a/board/ti/am62x/am62x.env +++ b/board/ti/am62x/am62x.env @@ -19,3 +19,8 @@ splashfile=ti_logo_414x97_32bpp.bmp.gz splashimage=0x80200000 splashpos=m,m splashsource=sf + +#if CONFIG_BOOTMETH_ANDROID +#include <env/ti/android.env> +adtb_idx=0 +#endif \ No newline at end of file diff --git a/configs/am62x_a53_android.config b/configs/am62x_a53_android.config new file mode 100644 index 000000000000..adbe2b8e126f --- /dev/null +++ b/configs/am62x_a53_android.config @@ -0,0 +1,21 @@ +# Defconfig fragment for enabling Android boot flow +# to apply on top of am62x_evm_a53_defconfig or am62x_lpsk_a53_defconfig +# Enable fastboot +CONFIG_USB_FUNCTION_FASTBOOT=y +CONFIG_FASTBOOT_BUF_ADDR=0xC0000000 +CONFIG_FASTBOOT_BUF_SIZE=0x2F000000 +CONFIG_FASTBOOT_FLASH=y +CONFIG_FASTBOOT_FLASH_MMC_DEV=0 +CONFIG_CMD_GPT=y # Needed for FASTBOOT_CMD_OEM_FORMAT +CONFIG_RANDOM_UUID=y # Needed for FASTBOOT_CMD_OEM_FORMAT +CONFIG_FASTBOOT_CMD_OEM_FORMAT=y +# Enable Android boot flow +CONFIG_BOOTMETH_ANDROID=y +CONFIG_SYS_BOOTM_LEN=0x4000000 +CONFIG_SYS_MALLOC_LEN=0x08000000 +CONFIG_AVB_VERIFY=y +CONFIG_LIBAVB=y +CONFIG_CMD_ADTIMG=y +CONFIG_CMD_ABOOTIMG=y +CONFIG_CMD_AB_SELECT=y +CONFIG_CMD_AVB=y diff --git a/doc/board/ti/am62x_sk.rst b/doc/board/ti/am62x_sk.rst index b9d35244d446..51dab839ddd9 100644 --- a/doc/board/ti/am62x_sk.rst +++ b/doc/board/ti/am62x_sk.rst @@ -132,6 +132,20 @@ DFU support (and disable storage support) .. include:: ../ti/k3.rst :start-after: .. k3_rst_include_start_build_steps_uboot :end-before: .. k3_rst_include_end_build_steps_uboot + +* 3.2.1 Alternative build of A53 for Android bootflow: + +Since the Android requires many more dependencies, it is disabled by default. +An extra config fragment should be used to enable Android bootflow support. + +.. prompt:: bash $ + + export UBOOT_CFG_CORTEXR="${UBOOT_CFG_CORTEXA} am62x_a53_android.config" + +.. include:: ../ti/k3.rst + :start-after: .. k3_rst_include_start_build_steps_uboot + :end-before: .. k3_rst_include_end_build_steps_uboot + .. am62x_evm_rst_include_end_build_steps
Target Images diff --git a/include/env/ti/android.env b/include/env/ti/android.env new file mode 100644 index 000000000000..a058beb7fc42 --- /dev/null +++ b/include/env/ti/android.env @@ -0,0 +1,31 @@ +/* Android partitions + * += is needed because \n is converted by space in .env files */ +partitions=name=bootloader,start=5M,size=8M,uuid=${uuid_gpt_bootloader}; +partitions+=name=tiboot3,start=4M,size=1M,uuid=${uuid_gpt_tiboot3}; +partitions+=name=misc,start=13824K,size=512K,uuid=${uuid_gpt_misc}; +partitions+=name=frp,size=512K,uuid=${uuid_gpt_frp}; +partitions+=name=boot_a,size=40M,uuid=${uuid_gpt_boot_a}; +partitions+=name=boot_b,size=40M,uuid=${uuid_gpt_boot_b}; +partitions+=name=vendor_boot_a,size=32M,uuid=${uuid_gpt_vendor_boot_a}; +partitions+=name=vendor_boot_b,size=32M,uuid=${uuid_gpt_vendor_boot_b}; +partitions+=name=init_boot_a,size=8M,uuid=${uuid_gpt_init_boot_a}; +partitions+=name=init_boot_b,size=8M,uuid=${uuid_gpt_init_boot_b}; +partitions+=name=dtbo_a,size=8M,uuid=${uuid_gpt_dtbo_a}; +partitions+=name=dtbo_b,size=8M,uuid=${uuid_gpt_dtbo_b}; +partitions+=name=vbmeta_a,size=64K,uuid=${uuid_gpt_vbmeta_a}; +partitions+=name=vbmeta_b,size=64K,uuid=${uuid_gpt_vbmeta_b}; +partitions+=name=vbmeta_vendor_dlkm_a,size=64K,uuid=${uuid_gpt_vbmeta_vendor_dlkm_a}; +partitions+=name=vbmeta_vendor_dlkm_b,size=64K,uuid=${uuid_gpt_vbmeta_vendor_dlkm_b}; +partitions+=name=super,size=4608M,uuid=${uuid_gpt_super}; +partitions+=name=metadata,size=64M,uuid=${uuid_gpt_metadata}; +partitions+=name=persist,size=32M,uuid=${uuid_gpt_persist}; +partitions+=name=userdata,size=-,uuid=${uuid_gpt_userdata} + +fastboot_raw_partition_bootenv=0x800 0x400 mmcpart 1 +fastboot.partition-type:metadata=f2fs + +boot_targets=mmc0 +mmcdev=0 +bootmeths=android +vendor_boot_comp_addr_r=0xd0000000 +bootcmd=bootflow scan -lb

Hi Guillaume,
Thank you for the patch.
On jeu., sept. 12, 2024 at 09:29, Guillaume La Roque glaroque@baylibre.com wrote:
Add Android bootflow support for AM62X SK EVM board with new android boot method.
To build for AM62x for Android, we use the am62x_a53_android.config fragment when building A53 bootloaders:
$ make am62x_evm_a53_defconfig $ make am62x_a53_android.config $ make
Co-developed-by: Mattijs Korpershoek mkorpershoek@baylibre.com Signed-off-by: Mattijs Korpershoek mkorpershoek@baylibre.com Signed-off-by: Guillaume La Roque glaroque@baylibre.com
Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com
board/ti/am62x/am62x.env | 5 +++++ configs/am62x_a53_android.config | 21 +++++++++++++++++++++ doc/board/ti/am62x_sk.rst | 14 ++++++++++++++ include/env/ti/android.env | 31 +++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+)
diff --git a/board/ti/am62x/am62x.env b/board/ti/am62x/am62x.env index 09b9b16a3e58..078cc4b5ac96 100644 --- a/board/ti/am62x/am62x.env +++ b/board/ti/am62x/am62x.env @@ -19,3 +19,8 @@ splashfile=ti_logo_414x97_32bpp.bmp.gz splashimage=0x80200000 splashpos=m,m splashsource=sf
+#if CONFIG_BOOTMETH_ANDROID +#include <env/ti/android.env> +adtb_idx=0 +#endif \ No newline at end of file diff --git a/configs/am62x_a53_android.config b/configs/am62x_a53_android.config new file mode 100644 index 000000000000..adbe2b8e126f --- /dev/null +++ b/configs/am62x_a53_android.config @@ -0,0 +1,21 @@ +# Defconfig fragment for enabling Android boot flow +# to apply on top of am62x_evm_a53_defconfig or am62x_lpsk_a53_defconfig +# Enable fastboot +CONFIG_USB_FUNCTION_FASTBOOT=y +CONFIG_FASTBOOT_BUF_ADDR=0xC0000000 +CONFIG_FASTBOOT_BUF_SIZE=0x2F000000 +CONFIG_FASTBOOT_FLASH=y +CONFIG_FASTBOOT_FLASH_MMC_DEV=0 +CONFIG_CMD_GPT=y # Needed for FASTBOOT_CMD_OEM_FORMAT +CONFIG_RANDOM_UUID=y # Needed for FASTBOOT_CMD_OEM_FORMAT +CONFIG_FASTBOOT_CMD_OEM_FORMAT=y +# Enable Android boot flow +CONFIG_BOOTMETH_ANDROID=y +CONFIG_SYS_BOOTM_LEN=0x4000000 +CONFIG_SYS_MALLOC_LEN=0x08000000 +CONFIG_AVB_VERIFY=y +CONFIG_LIBAVB=y +CONFIG_CMD_ADTIMG=y +CONFIG_CMD_ABOOTIMG=y +CONFIG_CMD_AB_SELECT=y +CONFIG_CMD_AVB=y diff --git a/doc/board/ti/am62x_sk.rst b/doc/board/ti/am62x_sk.rst index b9d35244d446..51dab839ddd9 100644 --- a/doc/board/ti/am62x_sk.rst +++ b/doc/board/ti/am62x_sk.rst @@ -132,6 +132,20 @@ DFU support (and disable storage support) .. include:: ../ti/k3.rst :start-after: .. k3_rst_include_start_build_steps_uboot :end-before: .. k3_rst_include_end_build_steps_uboot
+* 3.2.1 Alternative build of A53 for Android bootflow:
+Since the Android requires many more dependencies, it is disabled by default. +An extra config fragment should be used to enable Android bootflow support.
+.. prompt:: bash $
- export UBOOT_CFG_CORTEXR="${UBOOT_CFG_CORTEXA} am62x_a53_android.config"
+.. include:: ../ti/k3.rst
- :start-after: .. k3_rst_include_start_build_steps_uboot
- :end-before: .. k3_rst_include_end_build_steps_uboot
.. am62x_evm_rst_include_end_build_steps
Target Images diff --git a/include/env/ti/android.env b/include/env/ti/android.env new file mode 100644 index 000000000000..a058beb7fc42 --- /dev/null +++ b/include/env/ti/android.env @@ -0,0 +1,31 @@ +/* Android partitions
- += is needed because \n is converted by space in .env files */
+partitions=name=bootloader,start=5M,size=8M,uuid=${uuid_gpt_bootloader}; +partitions+=name=tiboot3,start=4M,size=1M,uuid=${uuid_gpt_tiboot3}; +partitions+=name=misc,start=13824K,size=512K,uuid=${uuid_gpt_misc}; +partitions+=name=frp,size=512K,uuid=${uuid_gpt_frp}; +partitions+=name=boot_a,size=40M,uuid=${uuid_gpt_boot_a}; +partitions+=name=boot_b,size=40M,uuid=${uuid_gpt_boot_b}; +partitions+=name=vendor_boot_a,size=32M,uuid=${uuid_gpt_vendor_boot_a}; +partitions+=name=vendor_boot_b,size=32M,uuid=${uuid_gpt_vendor_boot_b}; +partitions+=name=init_boot_a,size=8M,uuid=${uuid_gpt_init_boot_a}; +partitions+=name=init_boot_b,size=8M,uuid=${uuid_gpt_init_boot_b}; +partitions+=name=dtbo_a,size=8M,uuid=${uuid_gpt_dtbo_a}; +partitions+=name=dtbo_b,size=8M,uuid=${uuid_gpt_dtbo_b}; +partitions+=name=vbmeta_a,size=64K,uuid=${uuid_gpt_vbmeta_a}; +partitions+=name=vbmeta_b,size=64K,uuid=${uuid_gpt_vbmeta_b}; +partitions+=name=vbmeta_vendor_dlkm_a,size=64K,uuid=${uuid_gpt_vbmeta_vendor_dlkm_a}; +partitions+=name=vbmeta_vendor_dlkm_b,size=64K,uuid=${uuid_gpt_vbmeta_vendor_dlkm_b}; +partitions+=name=super,size=4608M,uuid=${uuid_gpt_super}; +partitions+=name=metadata,size=64M,uuid=${uuid_gpt_metadata}; +partitions+=name=persist,size=32M,uuid=${uuid_gpt_persist}; +partitions+=name=userdata,size=-,uuid=${uuid_gpt_userdata}
+fastboot_raw_partition_bootenv=0x800 0x400 mmcpart 1 +fastboot.partition-type:metadata=f2fs
+boot_targets=mmc0 +mmcdev=0 +bootmeths=android +vendor_boot_comp_addr_r=0xd0000000 +bootcmd=bootflow scan -lb
-- 2.34.1

From: Mattijs Korpershoek mkorpershoek@baylibre.com
Beagle Play has a different boot flow than the AM62x SK EVM.
AM62x SK EVM: 1. Boot rom reads UDA (User Data Area), looking for tiboot3 2. Boot rom finds tiboot3 and loads it
Beagle Play: 1. Boot rom looks for tiboot3 in mmc0boot0 2. Boot rom finds tiboot3 and loads it
Because of this difference, we need to have a different partitioning table than the generic TI one.
Include generic TI android support and override the partitioning table to boot Android.
Signed-off-by: Mattijs Korpershoek mkorpershoek@baylibre.com Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com Signed-off-by: Guillaume La Roque glaroque@baylibre.com --- board/beagle/beagleplay/beagleplay.env | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)
diff --git a/board/beagle/beagleplay/beagleplay.env b/board/beagle/beagleplay/beagleplay.env index 354bc987d12b..fc29d49712db 100644 --- a/board/beagle/beagleplay/beagleplay.env +++ b/board/beagle/beagleplay/beagleplay.env @@ -17,3 +17,33 @@ bootdir=/boot boot_targets=mmc1 mmc0 bootmeths=script extlinux efi pxe rd_spec=- + +#if CONFIG_BOOTMETH_ANDROID +#include <env/ti/android.env> +/* Override Android partitions + * Required because tiboot3 is in mmc0boot0, not in UDA + * note that += is needed because \n is converted by space in .env files */ +partitions= + name=bootloader,start=5M,size=8M,uuid=${uuid_gpt_bootloader}; +partitions+=name=misc,start=13824K,size=512K,uuid=${uuid_gpt_misc}; +partitions+=name=frp,size=512K,uuid=${uuid_gpt_frp}; +partitions+=name=boot_a,size=40M,uuid=${uuid_gpt_boot_a}; +partitions+=name=boot_b,size=40M,uuid=${uuid_gpt_boot_b}; +partitions+=name=vendor_boot_a,size=32M,uuid=${uuid_gpt_vendor_boot_a}; +partitions+=name=vendor_boot_b,size=32M,uuid=${uuid_gpt_vendor_boot_b}; +partitions+=name=init_boot_a,size=8M,uuid=${uuid_gpt_init_boot_a}; +partitions+=name=init_boot_b,size=8M,uuid=${uuid_gpt_init_boot_b}; +partitions+=name=dtbo_a,size=8M,uuid=${uuid_gpt_dtbo_a}; +partitions+=name=dtbo_b,size=8M,uuid=${uuid_gpt_dtbo_b}; +partitions+=name=vbmeta_a,size=64K,uuid=${uuid_gpt_vbmeta_a}; +partitions+=name=vbmeta_b,size=64K,uuid=${uuid_gpt_vbmeta_b}; +partitions+=name=vbmeta_vendor_dlkm_a,size=64K,uuid=${uuid_gpt_vbmeta_vendor_dlkm_a}; +partitions+=name=vbmeta_vendor_dlkm_b,size=64K,uuid=${uuid_gpt_vbmeta_vendor_dlkm_b}; +partitions+=name=super,size=4608M,uuid=${uuid_gpt_super}; +partitions+=name=metadata,size=64M,uuid=${uuid_gpt_metadata}; +partitions+=name=persist,size=32M,uuid=${uuid_gpt_persist}; +partitions+=name=userdata,size=-,uuid=${uuid_gpt_userdata} +fastboot_raw_partition_tiboot3="0x0 0x800 mmcpart 1" + +adtb_idx=2 +#endif

From: Mattijs Korpershoek mkorpershoek@baylibre.com
When CONFIG_BOOTMETH_ANDROID is set, enable Android boot flow support.
To build for AM62Px for Android, we can re-use the am62x_a53_android.config fragment when building A53 bootloaders:
$ make am62px_evm_a53_defconfig $ make am62x_a53_android.config $ make
Signed-off-by: Mattijs Korpershoek mkorpershoek@baylibre.com Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com Signed-off-by: Guillaume La Roque glaroque@baylibre.com --- board/ti/am62px/am62px.env | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/board/ti/am62px/am62px.env b/board/ti/am62px/am62px.env index f8b6aff2c2fd..7ef54079aa8d 100644 --- a/board/ti/am62px/am62px.env +++ b/board/ti/am62px/am62px.env @@ -13,3 +13,8 @@ mmcdev=1 bootpart=1:2 bootdir=/boot rd_spec=- + +#if CONFIG_BOOTMETH_ANDROID +#include <env/ti/android.env> +adtb_idx=3 +#endif \ No newline at end of file

Hi Guillaume!
On September 12, 2024 thus sayeth Guillaume La Roque:
From: Mattijs Korpershoek mkorpershoek@baylibre.com
When CONFIG_BOOTMETH_ANDROID is set, enable Android boot flow support.
To build for AM62Px for Android, we can re-use the am62x_a53_android.config fragment when building A53 bootloaders:
$ make am62px_evm_a53_defconfig $ make am62x_a53_android.config $ make
Signed-off-by: Mattijs Korpershoek mkorpershoek@baylibre.com Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com Signed-off-by: Guillaume La Roque glaroque@baylibre.com
board/ti/am62px/am62px.env | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/board/ti/am62px/am62px.env b/board/ti/am62px/am62px.env index f8b6aff2c2fd..7ef54079aa8d 100644 --- a/board/ti/am62px/am62px.env +++ b/board/ti/am62px/am62px.env @@ -13,3 +13,8 @@ mmcdev=1 bootpart=1:2 bootdir=/boot rd_spec=-
+#if CONFIG_BOOTMETH_ANDROID +#include <env/ti/android.env> +adtb_idx=3 +#endif \ No newline at end of file
It's odd that checkpatch.pl didn't complain about this. Or maybe it has never complained about newlines? my git hook script didn't complain so IDK. Anywho just wanted to point out the nitpick ;)
~Bryan

Hi Bryan,
Le 16/09/2024 à 15:27, Bryan Brattlof a écrit :
Hi Guillaume!
On September 12, 2024 thus sayeth Guillaume La Roque:
From: Mattijs Korpershoek mkorpershoek@baylibre.com
When CONFIG_BOOTMETH_ANDROID is set, enable Android boot flow support.
To build for AM62Px for Android, we can re-use the am62x_a53_android.config fragment when building A53 bootloaders:
$ make am62px_evm_a53_defconfig $ make am62x_a53_android.config $ make
Signed-off-by: Mattijs Korpershoek mkorpershoek@baylibre.com Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com Signed-off-by: Guillaume La Roque glaroque@baylibre.com
board/ti/am62px/am62px.env | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/board/ti/am62px/am62px.env b/board/ti/am62px/am62px.env index f8b6aff2c2fd..7ef54079aa8d 100644 --- a/board/ti/am62px/am62px.env +++ b/board/ti/am62px/am62px.env @@ -13,3 +13,8 @@ mmcdev=1 bootpart=1:2 bootdir=/boot rd_spec=-
+#if CONFIG_BOOTMETH_ANDROID +#include <env/ti/android.env> +adtb_idx=3 +#endif \ No newline at end of file
It's odd that checkpatch.pl didn't complain about this. Or maybe it has never complained about newlines? my git hook script didn't complain so IDK. Anywho just wanted to point out the nitpick ;)
i run checkpatch with b4 tool and script not return any error on this. i will change settings to not add this for the future . thanks to point me this .
Guillaume
~Bryan

On September 12, 2024 thus sayeth Guillaume La Roque:
Ths patchset add support of Android 14 with boot image version 4 for :
- AM62X-SK EVM: https://www.ti.com/tool/SK-AM62B
- BeaglePlay: https://beagleplay.org/
- AM62PX-SK EVM: https://www.ti.com/tool/SK-AM62P-LP
Android Images use to test this series are on the Official TI website:
- AM62x/BeaglePlay: https://www.ti.com/tool/PROCESSOR-SDK-AM62X
- AM62PX: https://www.ti.com/tool/PROCESSOR-SDK-AM62P
Signed-off-by: Guillaume La Roque glaroque@baylibre.com
Changes in v2:
- Remove uneeded part in android fragment
- Update commit message.
- Link to v1: https://lore.kernel.org/r/20240902-sitaraupstream-v1-0-0c478c33c08b@baylibre...
Guillaume La Roque (1): board: ti: am62x_evm: Add android bootflow
Mattijs Korpershoek (2): board: beagle: beagleplay: Add android bootflow support board: ti: am62px: Add android bootflow support
Looks great and thank you for the upstream Android support!
Reviewed-by: Bryan Brattlof bb@ti.com
~Bryan

On Thu, 12 Sep 2024 09:29:56 +0200, Guillaume La Roque wrote:
Ths patchset add support of Android 14 with boot image version 4 for :
- AM62X-SK EVM: https://www.ti.com/tool/SK-AM62B
- BeaglePlay: https://beagleplay.org/
- AM62PX-SK EVM: https://www.ti.com/tool/SK-AM62P-LP
Android Images use to test this series are on the Official TI website:
- AM62x/BeaglePlay: https://www.ti.com/tool/PROCESSOR-SDK-AM62X
- AM62PX: https://www.ti.com/tool/PROCESSOR-SDK-AM62P
[...]
Applied to u-boot/next, thanks!
participants (5)
-
Bryan Brattlof
-
Guillaume LA ROQUE
-
Guillaume La Roque
-
Mattijs Korpershoek
-
Tom Rini