diff mbox series

[1/3] board: ti: am62x_evm: Add android bootflow

Message ID 20240902-sitaraupstream-v1-1-0c478c33c08b@baylibre.com
State New
Delegated to: Tom Rini
Headers show
Series Add Android 14 bootflow support for AM62X and AM62P board | expand

Commit Message

Guillaume La Roque Sept. 2, 2024, 4:31 p.m. UTC
Add Android bootflow support for AM62X SK EVM board with
new android boot method.

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 | 34 ++++++++++++++++++++++++++++++++++
 doc/board/ti/am62x_sk.rst        | 14 ++++++++++++++
 include/env/ti/android.env       | 31 +++++++++++++++++++++++++++++++
 4 files changed, 84 insertions(+)

Comments

Mattijs Korpershoek Sept. 3, 2024, 7:25 a.m. UTC | #1
Hi Guillaume,

Thank you for the patch.

On lun., sept. 02, 2024 at 18:31, Guillaume La Roque <glaroque@baylibre.com> wrote:

> Add Android bootflow support for AM62X SK EVM board with
> new android boot method.

Maybe add some lines here on how to enable this. I know it's in the docs
but it would be helpful to have it here as well.

>
> 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 | 34 ++++++++++++++++++++++++++++++++++
>  doc/board/ti/am62x_sk.rst        | 14 ++++++++++++++
>  include/env/ti/android.env       | 31 +++++++++++++++++++++++++++++++
>  4 files changed, 84 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..0be6fdd1620f
> --- /dev/null
> +++ b/configs/am62x_a53_android.config
> @@ -0,0 +1,34 @@
> +# 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
> +# Store env in eMMC for dtbo overlays
> +CONFIG_DEFAULT_ENV_IS_RW=y
> +CONFIG_ENV_SIZE=0x20000
> +CONFIG_ENV_OFFSET=0x100000
> +CONFIG_ENV_IS_IN_MMC=y
> +CONFIG_ENV_IS_NOWHERE=n
> +CONFIG_SYS_MMC_ENV_PART=1
> +CONFIG_SPL_ENV_IS_NOWHERE=y

I don't think it's necessary to have the environment in the eMMC
at this point.
We do not support dtbo in bootmeth_android. (as of today)

> +# Disable splashscreen
> +CONFIG_SPL_VIDEO=n
> +CONFIG_VIDEO=n
> +CONFIG_SPL_BMP=n
> +CONFIG_BMP=n

Same for this section, are you sure this is needed?

> 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
diff mbox series

Patch

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..0be6fdd1620f
--- /dev/null
+++ b/configs/am62x_a53_android.config
@@ -0,0 +1,34 @@ 
+# 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
+# Store env in eMMC for dtbo overlays
+CONFIG_DEFAULT_ENV_IS_RW=y
+CONFIG_ENV_SIZE=0x20000
+CONFIG_ENV_OFFSET=0x100000
+CONFIG_ENV_IS_IN_MMC=y
+CONFIG_ENV_IS_NOWHERE=n
+CONFIG_SYS_MMC_ENV_PART=1
+CONFIG_SPL_ENV_IS_NOWHERE=y
+# Disable splashscreen
+CONFIG_SPL_VIDEO=n
+CONFIG_VIDEO=n
+CONFIG_SPL_BMP=n
+CONFIG_BMP=n
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