Message ID | 20180416203227.26523-6-semen.protsenko@linaro.org |
---|---|
State | New |
Headers | show |
Series | Use Android DT image format for TI boards | expand |
On 16 April 2018 at 23:32, Sam Protsenko <semen.protsenko@linaro.org> wrote: > Make sure we can boot Android on TI boards using scheme described in > Android documentation [1]. For this do next: > 1. Enable "dtimg" command. We will need it to boot the Android using > new DTB/DTBO image format. > 2. Add fdt overlay support. We will need that to be able to apply fdt > overlays to dtb file. > 3. Provide new Android boot commands. In case we don't know what board > it is, let's provide fallback mechanism: > - use just dtb[0] from dtb.img > - don't apply any dtbo files on top of it > - but still that dtb file must be packed into Android DT image > > To use new boot scheme, user has to do next: > > 1. Prepare dtb.img and dtbo.img images, generated with mkdtimg tool (can > be found in Android sources, see prebuilts/misc/linux-x86/libufdt). > Example: > > $ ./mkdtimg create dtb.img \ > am57xx-beagle-x15.dtb --id=0 \ > am57xx-beagle-x15-revc.dtb --id=1 > > $ ./mkdtimg create dtbo.img \ > am57xx-evm-common.dtbo --id=0 \ > mt9t111.dtbo --id=1 \ > ov10635.dtbo --id=2 \ > am57xx-evm.dtbo --id=3 \ > am57xx-evm-reva3.dtbo --id=4 > > Current boot commands rely on that specific order of dtb/dtbo files. > Also, be sure to compile .dtb files with -@ dtc flag, so that > overlays can be applied to dtb files. > > 2. Flash new U-Boot, set new environment and format eMMC: > > $ fastboot flash xloader MLO > $ fastboot flash bootloader u-boot.img > > => env default -f -a > => setenv partitions $partitions_android > => env save > => fastboot 1 > > $ fastboot oem format > > 3. Flash dtb.img, dtbo.img: > > $ fastboot flash dtb dtb.img > $ fastboot flash dtbo dtbo.img > > 4. Flash Android images: > > $ fastboot flash boot boot.img > $ fastboot flash cache cache.img > $ fastboot flash recovery recovery.img > $ fastboot flash system system.img > $ fastboot flash userdata userdata.img > $ fastboot flash vendor vendor.img > > For more detailed instructions, see [2]. > > [1] https://source.android.com/devices/architecture/dto/partitions > [2] https://wiki.linaro.org/Boards/BeagleBoard-X15 > > Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org> > --- > board/ti/common/Kconfig | 1 + > configs/am57xx_evm_defconfig | 1 + > configs/am57xx_hs_evm_defconfig | 1 + > configs/dra7xx_evm_defconfig | 1 + > configs/dra7xx_hs_evm_defconfig | 1 + > include/configs/ti_armv7_common.h | 1 + > include/environment/ti/boot.h | 40 +++++++++++++++++++++++++------ > 7 files changed, 39 insertions(+), 7 deletions(-) > > diff --git a/board/ti/common/Kconfig b/board/ti/common/Kconfig > index c21eb8c2d2..f5bd9160b3 100644 > --- a/board/ti/common/Kconfig > +++ b/board/ti/common/Kconfig > @@ -21,6 +21,7 @@ config TI_COMMON_CMD_OPTIONS > imply CRC32_VERIFY if ARCH_KEYSTONE > imply CMD_DFU if USB_GADGET_DOWNLOAD > imply CMD_DHCP > + imply CMD_DTIMG > imply CMD_EEPROM > imply CMD_EXT2 > imply CMD_EXT4 > diff --git a/configs/am57xx_evm_defconfig b/configs/am57xx_evm_defconfig > index 6b11b3476c..7198542d9e 100644 > --- a/configs/am57xx_evm_defconfig > +++ b/configs/am57xx_evm_defconfig > @@ -78,3 +78,4 @@ CONFIG_USB_GADGET=y > CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" > CONFIG_USB_GADGET_VENDOR_NUM=0x0451 > CONFIG_USB_GADGET_PRODUCT_NUM=0xd022 > +CONFIG_OF_LIBFDT_OVERLAY=y > diff --git a/configs/am57xx_hs_evm_defconfig b/configs/am57xx_hs_evm_defconfig > index ca9742f118..e4948d549b 100644 > --- a/configs/am57xx_hs_evm_defconfig > +++ b/configs/am57xx_hs_evm_defconfig > @@ -81,3 +81,4 @@ CONFIG_USB_GADGET=y > CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" > CONFIG_USB_GADGET_VENDOR_NUM=0x0451 > CONFIG_USB_GADGET_PRODUCT_NUM=0xd022 > +CONFIG_OF_LIBFDT_OVERLAY=y > diff --git a/configs/dra7xx_evm_defconfig b/configs/dra7xx_evm_defconfig > index e17135c8f6..4ce687fbda 100644 > --- a/configs/dra7xx_evm_defconfig > +++ b/configs/dra7xx_evm_defconfig > @@ -96,3 +96,4 @@ CONFIG_USB_GADGET=y > CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" > CONFIG_USB_GADGET_VENDOR_NUM=0x0451 > CONFIG_USB_GADGET_PRODUCT_NUM=0xd022 > +CONFIG_OF_LIBFDT_OVERLAY=y > diff --git a/configs/dra7xx_hs_evm_defconfig b/configs/dra7xx_hs_evm_defconfig > index 606f99938c..6546daa080 100644 > --- a/configs/dra7xx_hs_evm_defconfig > +++ b/configs/dra7xx_hs_evm_defconfig > @@ -95,3 +95,4 @@ CONFIG_USB_GADGET=y > CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" > CONFIG_USB_GADGET_VENDOR_NUM=0x0451 > CONFIG_USB_GADGET_PRODUCT_NUM=0xd022 > +CONFIG_OF_LIBFDT_OVERLAY=y > diff --git a/include/configs/ti_armv7_common.h b/include/configs/ti_armv7_common.h > index 4771e74940..4340b5188f 100644 > --- a/include/configs/ti_armv7_common.h > +++ b/include/configs/ti_armv7_common.h > @@ -43,6 +43,7 @@ > "loadaddr=0x82000000\0" \ > "kernel_addr_r=0x82000000\0" \ > "fdtaddr=0x88000000\0" \ > + "dtboaddr=0x89000000\0" \ > "fdt_addr_r=0x88000000\0" \ > "rdaddr=0x88080000\0" \ > "ramdisk_addr_r=0x88080000\0" \ > diff --git a/include/environment/ti/boot.h b/include/environment/ti/boot.h > index f2d91f5298..52c9f129ed 100644 > --- a/include/environment/ti/boot.h > +++ b/include/environment/ti/boot.h > @@ -65,15 +65,41 @@ > "run eval_bootargs; " \ > "setenv mmcdev 1; " \ > "setenv machid fe6; " \ > + "setenv dtbaddr $fdtaddr; " \ > + "setenv dtb_size 0x100000; " \ > "mmc dev $mmcdev; " \ > "mmc rescan; " \ > - "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}; " \ > - "mmc read ${loadaddr} ${boot_start} ${boot_size}; " \ > - "bootm $loadaddr $loadaddr $fdtaddr;\0" > + "part start mmc ${mmcdev} dtb p_dtb_start; " \ > + "part size mmc ${mmcdev} dtb p_dtb_size; " \ > + "part start mmc ${mmcdev} dtbo p_dtbo_start; " \ > + "part size mmc ${mmcdev} dtbo p_dtbo_size; " \ > + "part start mmc ${mmcdev} boot p_boot_start; " \ > + "part size mmc ${mmcdev} boot p_boot_size; " \ > + "mmc read ${dtbaddr} ${p_dtb_start} ${p_dtb_size}; " \ > + "mmc read ${dtboaddr} ${p_dtbo_start} ${p_dtbo_size}; " \ > + "mmc read ${loadaddr} ${p_boot_start} ${p_boot_size}; " \ > + "if test $board_name = am57xx_evm; then " \ > + "dtimg start ${dtbaddr} 0 dtb_addr; " \ > + "fdt addr $dtb_addr $dtb_size; " \ > + "dtimg start ${dtboaddr} 0 dtbo_addr; " \ > + "fdt apply $dtbo_addr; " \ > + "dtimg start ${dtboaddr} 3 dtbo_addr; " \ > + "fdt apply $dtbo_addr; " \ > + "elif test $board_name = am57xx_evm_reva3; then " \ > + "dtimg start ${dtbaddr} 1 dtb_addr; " \ > + "fdt addr $dtb_addr $dtb_size; " \ > + "dtimg start ${dtboaddr} 0 dtbo_addr; " \ > + "fdt apply $dtbo_addr; " \ > + "dtimg start ${dtboaddr} 4 dtbo_addr; " \ > + "fdt apply $dtbo_addr; " \ > + "elif test $board_name = beagle_x15; then " \ > + "dtimg start ${dtbaddr} 0 dtb_addr; " \ > + "elif test $board_name = beagle_x15_revc; then " \ > + "dtimg start ${dtbaddr} 1 dtb_addr; " \ > + "else " \ > + "dtimg start ${dtbaddr} 0 dtb_addr; " \ > + "fi; " \ > + "bootm $loadaddr $loadaddr $dtb_addr;\0" > > #ifdef CONFIG_OMAP54XX > > -- > 2.17.0 > Abandon this patch. I'm gonna send v2 soon.
diff --git a/board/ti/common/Kconfig b/board/ti/common/Kconfig index c21eb8c2d2..f5bd9160b3 100644 --- a/board/ti/common/Kconfig +++ b/board/ti/common/Kconfig @@ -21,6 +21,7 @@ config TI_COMMON_CMD_OPTIONS imply CRC32_VERIFY if ARCH_KEYSTONE imply CMD_DFU if USB_GADGET_DOWNLOAD imply CMD_DHCP + imply CMD_DTIMG imply CMD_EEPROM imply CMD_EXT2 imply CMD_EXT4 diff --git a/configs/am57xx_evm_defconfig b/configs/am57xx_evm_defconfig index 6b11b3476c..7198542d9e 100644 --- a/configs/am57xx_evm_defconfig +++ b/configs/am57xx_evm_defconfig @@ -78,3 +78,4 @@ CONFIG_USB_GADGET=y CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" CONFIG_USB_GADGET_VENDOR_NUM=0x0451 CONFIG_USB_GADGET_PRODUCT_NUM=0xd022 +CONFIG_OF_LIBFDT_OVERLAY=y diff --git a/configs/am57xx_hs_evm_defconfig b/configs/am57xx_hs_evm_defconfig index ca9742f118..e4948d549b 100644 --- a/configs/am57xx_hs_evm_defconfig +++ b/configs/am57xx_hs_evm_defconfig @@ -81,3 +81,4 @@ CONFIG_USB_GADGET=y CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" CONFIG_USB_GADGET_VENDOR_NUM=0x0451 CONFIG_USB_GADGET_PRODUCT_NUM=0xd022 +CONFIG_OF_LIBFDT_OVERLAY=y diff --git a/configs/dra7xx_evm_defconfig b/configs/dra7xx_evm_defconfig index e17135c8f6..4ce687fbda 100644 --- a/configs/dra7xx_evm_defconfig +++ b/configs/dra7xx_evm_defconfig @@ -96,3 +96,4 @@ CONFIG_USB_GADGET=y CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" CONFIG_USB_GADGET_VENDOR_NUM=0x0451 CONFIG_USB_GADGET_PRODUCT_NUM=0xd022 +CONFIG_OF_LIBFDT_OVERLAY=y diff --git a/configs/dra7xx_hs_evm_defconfig b/configs/dra7xx_hs_evm_defconfig index 606f99938c..6546daa080 100644 --- a/configs/dra7xx_hs_evm_defconfig +++ b/configs/dra7xx_hs_evm_defconfig @@ -95,3 +95,4 @@ CONFIG_USB_GADGET=y CONFIG_USB_GADGET_MANUFACTURER="Texas Instruments" CONFIG_USB_GADGET_VENDOR_NUM=0x0451 CONFIG_USB_GADGET_PRODUCT_NUM=0xd022 +CONFIG_OF_LIBFDT_OVERLAY=y diff --git a/include/configs/ti_armv7_common.h b/include/configs/ti_armv7_common.h index 4771e74940..4340b5188f 100644 --- a/include/configs/ti_armv7_common.h +++ b/include/configs/ti_armv7_common.h @@ -43,6 +43,7 @@ "loadaddr=0x82000000\0" \ "kernel_addr_r=0x82000000\0" \ "fdtaddr=0x88000000\0" \ + "dtboaddr=0x89000000\0" \ "fdt_addr_r=0x88000000\0" \ "rdaddr=0x88080000\0" \ "ramdisk_addr_r=0x88080000\0" \ diff --git a/include/environment/ti/boot.h b/include/environment/ti/boot.h index f2d91f5298..52c9f129ed 100644 --- a/include/environment/ti/boot.h +++ b/include/environment/ti/boot.h @@ -65,15 +65,41 @@ "run eval_bootargs; " \ "setenv mmcdev 1; " \ "setenv machid fe6; " \ + "setenv dtbaddr $fdtaddr; " \ + "setenv dtb_size 0x100000; " \ "mmc dev $mmcdev; " \ "mmc rescan; " \ - "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}; " \ - "mmc read ${loadaddr} ${boot_start} ${boot_size}; " \ - "bootm $loadaddr $loadaddr $fdtaddr;\0" + "part start mmc ${mmcdev} dtb p_dtb_start; " \ + "part size mmc ${mmcdev} dtb p_dtb_size; " \ + "part start mmc ${mmcdev} dtbo p_dtbo_start; " \ + "part size mmc ${mmcdev} dtbo p_dtbo_size; " \ + "part start mmc ${mmcdev} boot p_boot_start; " \ + "part size mmc ${mmcdev} boot p_boot_size; " \ + "mmc read ${dtbaddr} ${p_dtb_start} ${p_dtb_size}; " \ + "mmc read ${dtboaddr} ${p_dtbo_start} ${p_dtbo_size}; " \ + "mmc read ${loadaddr} ${p_boot_start} ${p_boot_size}; " \ + "if test $board_name = am57xx_evm; then " \ + "dtimg start ${dtbaddr} 0 dtb_addr; " \ + "fdt addr $dtb_addr $dtb_size; " \ + "dtimg start ${dtboaddr} 0 dtbo_addr; " \ + "fdt apply $dtbo_addr; " \ + "dtimg start ${dtboaddr} 3 dtbo_addr; " \ + "fdt apply $dtbo_addr; " \ + "elif test $board_name = am57xx_evm_reva3; then " \ + "dtimg start ${dtbaddr} 1 dtb_addr; " \ + "fdt addr $dtb_addr $dtb_size; " \ + "dtimg start ${dtboaddr} 0 dtbo_addr; " \ + "fdt apply $dtbo_addr; " \ + "dtimg start ${dtboaddr} 4 dtbo_addr; " \ + "fdt apply $dtbo_addr; " \ + "elif test $board_name = beagle_x15; then " \ + "dtimg start ${dtbaddr} 0 dtb_addr; " \ + "elif test $board_name = beagle_x15_revc; then " \ + "dtimg start ${dtbaddr} 1 dtb_addr; " \ + "else " \ + "dtimg start ${dtbaddr} 0 dtb_addr; " \ + "fi; " \ + "bootm $loadaddr $loadaddr $dtb_addr;\0" #ifdef CONFIG_OMAP54XX
Make sure we can boot Android on TI boards using scheme described in Android documentation [1]. For this do next: 1. Enable "dtimg" command. We will need it to boot the Android using new DTB/DTBO image format. 2. Add fdt overlay support. We will need that to be able to apply fdt overlays to dtb file. 3. Provide new Android boot commands. In case we don't know what board it is, let's provide fallback mechanism: - use just dtb[0] from dtb.img - don't apply any dtbo files on top of it - but still that dtb file must be packed into Android DT image To use new boot scheme, user has to do next: 1. Prepare dtb.img and dtbo.img images, generated with mkdtimg tool (can be found in Android sources, see prebuilts/misc/linux-x86/libufdt). Example: $ ./mkdtimg create dtb.img \ am57xx-beagle-x15.dtb --id=0 \ am57xx-beagle-x15-revc.dtb --id=1 $ ./mkdtimg create dtbo.img \ am57xx-evm-common.dtbo --id=0 \ mt9t111.dtbo --id=1 \ ov10635.dtbo --id=2 \ am57xx-evm.dtbo --id=3 \ am57xx-evm-reva3.dtbo --id=4 Current boot commands rely on that specific order of dtb/dtbo files. Also, be sure to compile .dtb files with -@ dtc flag, so that overlays can be applied to dtb files. 2. Flash new U-Boot, set new environment and format eMMC: $ fastboot flash xloader MLO $ fastboot flash bootloader u-boot.img => env default -f -a => setenv partitions $partitions_android => env save => fastboot 1 $ fastboot oem format 3. Flash dtb.img, dtbo.img: $ fastboot flash dtb dtb.img $ fastboot flash dtbo dtbo.img 4. Flash Android images: $ fastboot flash boot boot.img $ fastboot flash cache cache.img $ fastboot flash recovery recovery.img $ fastboot flash system system.img $ fastboot flash userdata userdata.img $ fastboot flash vendor vendor.img For more detailed instructions, see [2]. [1] https://source.android.com/devices/architecture/dto/partitions [2] https://wiki.linaro.org/Boards/BeagleBoard-X15 Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org> --- board/ti/common/Kconfig | 1 + configs/am57xx_evm_defconfig | 1 + configs/am57xx_hs_evm_defconfig | 1 + configs/dra7xx_evm_defconfig | 1 + configs/dra7xx_hs_evm_defconfig | 1 + include/configs/ti_armv7_common.h | 1 + include/environment/ti/boot.h | 40 +++++++++++++++++++++++++------ 7 files changed, 39 insertions(+), 7 deletions(-)