[U-Boot] [PATCH 4/5] arm: ti: boot: Add dtbo partition for Android boot

Andrew F. Davis afd at ti.com
Tue Apr 17 21:10:29 UTC 2018


On 04/16/2018 03:32 PM, Sam Protsenko wrote:
> New Android boot scheme looks like this [1], and it involves adding new
> partition for storing Device Tree Overlays. This patch adds dtbo
> partition. While at it, let's revise Android partition table a bit.
> 
> List of changes:
>  - rename "misc" to "hole" (not used for anything, just a guard hole)

Could we instead expand the bootloader partition and just remove this
hole partition?

>  - rename "reserved" to "uenv" (because it hold U-Boot environment)

This is fine.

>  - rename "environment" to "dtb" (because it actually holds .dtb file)


We are working to move to FIT with our Android releases, so the
"boot.img" image will now be a FIT image that contains kernel, dtb,
dtbo, op-tee, ipu, ipu2, etc...

The end result is all these custom partitions we had before all just get
folded into the one boot partition.

Andrew


>  - move "dtb" after "uenv" (so that changes of dtb size won't affect
>    "uenv" offset)
>  - make "hole" size twice as bigger (to keep "uenv" offset the same,
>    because "dtb" was moved after "uenv")
>  - add "dtbo" partition (after "dtb", to not affect "uenv" offset)
>  - while at it, increase "boot" partition size up to 20 MiB; that's
>    needed because while playing with some additional drivers built-in
>    and different compression techniques, and also for HS signing, we
>    have seen the boot partition size reach close to border and
>    sometimes reach over the limit of 10 MiB
> 
> Now eMMC layout looks like this:
> 
>     offset           content             size          partition
>     (KiB)                                (KiB)
> 
>     ===============================================================
> 
>     0       +------------------------+
>             | MBR/GPT header         |   128           -
>     128     +------------------------+
>             | MLO                    |   256           xloader
>     384     +------------------------+
>             | u-boot.img             |   1792          bootloader
>     2176    +------------------------+
>             | //////// hole //////// |   256           hole
>     2432    +------------------------+
>             | U-Boot environment     |   256           uenv
>             | (+ redundant)          |
>     2688    +------------------------+
>             | dtb files              |   1024          dtb
>     3712    +------------------------+
>             | dtbo files             |   1024          dtbo
>     4736    +------------------------+
>               Android partitions         remaining     *
> 
>     ===============================================================
> 
> "hole" partition is needed just to keep U-Boot environment at 2432 KiB
> offset, because:
>  - this offset is used in DFU_ALT_INFO_EMMC:
> 
>        "u-env.raw raw 0x1300 0x200;"
>        0x1300 = 4864 sectors = 2432 KiB
> 
>  - which in turn relies on CONFIG_ENV_OFFSET:
> 
>        CONFIG_ENV_OFFSET = 0x260000 = 2432 KiB
> 
> We are using "hole" partition instead of specifying "start" property to
> "uenv" partition, because this way it's easier to maintain change of
> preceding partitions.
> 
> Also fix Android boot commands appropriately.
> 
> [1] https://source.android.com/devices/architecture/dto/partitions
> 
> Signed-off-by: Sam Protsenko <semen.protsenko at linaro.org>
> ---
>  include/environment/ti/boot.h | 13 +++++++------
>  1 file changed, 7 insertions(+), 6 deletions(-)
> 
> diff --git a/include/environment/ti/boot.h b/include/environment/ti/boot.h
> index 4f3d748b5c..f2d91f5298 100644
> --- a/include/environment/ti/boot.h
> +++ b/include/environment/ti/boot.h
> @@ -26,13 +26,14 @@
>  	"uuid_disk=${uuid_gpt_disk};" \
>  	"name=xloader,start=128K,size=256K,uuid=${uuid_gpt_xloader};" \
>  	"name=bootloader,size=1792K,uuid=${uuid_gpt_bootloader};" \
> -	"name=environment,size=128K,uuid=${uuid_gpt_environment};" \
> -	"name=misc,size=128K,uuid=${uuid_gpt_misc};" \
> -	"name=reserved,size=256K,uuid=${uuid_gpt_reserved};" \
> +	"name=hole,size=256K,uuid=${uuid_gpt_hole};" \
> +	"name=uenv,size=256K,uuid=${uuid_gpt_uenv};" \
> +	"name=dtb,size=1M,uuid=${uuid_gpt_dtb};" \
> +	"name=dtbo,size=1M,uuid=${uuid_gpt_dtbo};" \
>  	"name=efs,size=16M,uuid=${uuid_gpt_efs};" \
>  	"name=crypto,size=16K,uuid=${uuid_gpt_crypto};" \
>  	"name=recovery,size=40M,uuid=${uuid_gpt_recovery};" \
> -	"name=boot,size=10M,uuid=${uuid_gpt_boot};" \
> +	"name=boot,size=20M,uuid=${uuid_gpt_boot};" \
>  	"name=system,size=768M,uuid=${uuid_gpt_system};" \
>  	"name=vendor,size=256M,uuid=${uuid_gpt_vendor};" \
>  	"name=cache,size=256M,uuid=${uuid_gpt_cache};" \
> @@ -66,8 +67,8 @@
>  		"setenv machid fe6; " \
>  		"mmc dev $mmcdev; " \
>  		"mmc rescan; " \
> -		"part start mmc ${mmcdev} environment fdt_start; " \
> -		"part size mmc ${mmcdev} environment fdt_size; " \
> +		"part start mmc ${mmcdev} dtb fdt_start; " \
> +		"part size mmc ${mmcdev} dtb fdt_size; " \
>  		"part start mmc ${mmcdev} boot boot_start; " \
>  		"part size mmc ${mmcdev} boot boot_size; " \
>  		"mmc read ${fdtaddr} ${fdt_start} ${fdt_size}; " \
> 


More information about the U-Boot mailing list