From: Marek Szyprowski Date: Thu, 26 Nov 2020 14:32:03 +0000 (+0100) Subject: tizen: enable support for formatting MBR partition layout during flashing X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d5c4b8d91c261b387e94ebabbebe201b2d4dc8aa;p=platform%2Fkernel%2Fu-boot.git tizen: enable support for formatting MBR partition layout during flashing This is ensured by the following steps: 1. enable 'mbr' command and provide default partiton layout, 2. add support for formating block device from THOR downloaded script, 3. check MBR partition layout on boot and enter THOR mode if invalid 4. provide a script for formating MBR for THOR download MBR partition layout is checked on boot if it mathes the one defined during u-boot compilation. If not, set dfu_alt_info to the minimal safe list and enter THOR download mode to flash the new, proper partition layout and the complete Tizen image. Signed-off-by: Marek Szyprowski Change-Id: I490e5b3314513012259f3981feae047f95649c3b --- diff --git a/configs/khadas-vim3_defconfig b/configs/khadas-vim3_defconfig index a040cdd23a..210a9615a4 100644 --- a/configs/khadas-vim3_defconfig +++ b/configs/khadas-vim3_defconfig @@ -14,6 +14,8 @@ CONFIG_IDENT_STRING=" khadas-vim3" CONFIG_DEBUG_UART=y CONFIG_OF_BOARD_SETUP=y # CONFIG_DISPLAY_CPUINFO is not set +CONFIG_USE_PREBOOT=y +CONFIG_PREBOOT="run mbr_check" # CONFIG_CONSOLE_MUX is not set CONFIG_MISC_INIT_R=y CONFIG_SYS_PROMPT="Khadas VIM3>" @@ -24,6 +26,7 @@ CONFIG_CMD_DFU=y CONFIG_CMD_GPIO=y CONFIG_CMD_I2C=y # CONFIG_CMD_LOADS is not set +CONFIG_CMD_MBR=y CONFIG_CMD_MMC=y CONFIG_CMD_PCI=y CONFIG_CMD_SF_TEST=y diff --git a/configs/khadas-vim3l_defconfig b/configs/khadas-vim3l_defconfig index 569891d4c7..b21f146cd6 100644 --- a/configs/khadas-vim3l_defconfig +++ b/configs/khadas-vim3l_defconfig @@ -14,6 +14,8 @@ CONFIG_IDENT_STRING=" khadas-vim3l" CONFIG_DEBUG_UART=y CONFIG_OF_BOARD_SETUP=y # CONFIG_DISPLAY_CPUINFO is not set +CONFIG_USE_PREBOOT=y +CONFIG_PREBOOT="run mbr_check" CONFIG_MISC_INIT_R=y CONFIG_SYS_PROMPT="Khadas VIM3L>" # CONFIG_CMD_BDI is not set @@ -23,6 +25,7 @@ CONFIG_CMD_DFU=y CONFIG_CMD_GPIO=y CONFIG_CMD_I2C=y # CONFIG_CMD_LOADS is not set +CONFIG_CMD_MBR=y CONFIG_CMD_MMC=y CONFIG_CMD_PCI=y CONFIG_CMD_SF_TEST=y diff --git a/configs/odroid-c4_defconfig b/configs/odroid-c4_defconfig index 04c4becf13..65677e3538 100644 --- a/configs/odroid-c4_defconfig +++ b/configs/odroid-c4_defconfig @@ -14,6 +14,8 @@ CONFIG_IDENT_STRING=" odroid-c4/hc4" CONFIG_DEBUG_UART=y CONFIG_OF_BOARD_SETUP=y # CONFIG_DISPLAY_CPUINFO is not set +CONFIG_USE_PREBOOT=y +CONFIG_PREBOOT="run mbr_check" CONFIG_MISC_INIT_R=y CONFIG_SYS_PROMPT="Odroid C4>" # CONFIG_CMD_BDI is not set @@ -22,6 +24,7 @@ CONFIG_CMD_THOR_DOWNLOAD=y CONFIG_CMD_DFU=y CONFIG_CMD_GPIO=y # CONFIG_CMD_LOADS is not set +CONFIG_CMD_MBR=y CONFIG_CMD_MMC=y CONFIG_CMD_USB=y CONFIG_CMD_USB_MASS_STORAGE=y diff --git a/configs/odroid-n2_defconfig b/configs/odroid-n2_defconfig index e1bb200256..d55d9a8cc5 100644 --- a/configs/odroid-n2_defconfig +++ b/configs/odroid-n2_defconfig @@ -14,6 +14,8 @@ CONFIG_IDENT_STRING=" odroid-n2/n2-plus" CONFIG_DEBUG_UART=y CONFIG_OF_BOARD_SETUP=y # CONFIG_DISPLAY_CPUINFO is not set +CONFIG_USE_PREBOOT=y +CONFIG_PREBOOT="run mbr_check" # CONFIG_CONSOLE_MUX is not set CONFIG_MISC_INIT_R=y CONFIG_SYS_PROMPT="Odroid N2>" @@ -23,6 +25,7 @@ CONFIG_CMD_THOR_DOWNLOAD=y CONFIG_CMD_DFU=y CONFIG_CMD_GPIO=y # CONFIG_CMD_LOADS is not set +CONFIG_CMD_MBR=y CONFIG_CMD_MMC=y CONFIG_CMD_USB=y CONFIG_CMD_USB_MASS_STORAGE=y diff --git a/include/samsung/tizen_amlogic.h b/include/samsung/tizen_amlogic.h index 0aafba8057..ea192bddc8 100644 --- a/include/samsung/tizen_amlogic.h +++ b/include/samsung/tizen_amlogic.h @@ -40,24 +40,48 @@ "ramdisk.img part -1 7;" \ "ramdisk-recovery.img part -1 8" +/* + * '0-format.cmd' entity is common for all boards, but it has to be + * defined in the per-board DFU_ALT_BOOT_* to ensure that it is also + * available in the dfu_alt_fallback env + */ #define DFU_ALT_BOOT_ODROID_N2 "u-boot-n2.bin raw 0x1 0x1000;" \ "u-boot-c4.bin skip 0 0;" \ "u-boot-vim3l.bin skip 0 0;" \ - "u-boot-vim3.bin skip 0 0" + "u-boot-vim3.bin skip 0 0;" \ + "0-format.cmd script 0 0" #define DFU_ALT_BOOT_VIM3 "u-boot-vim3.bin raw 0x1 0x1000;" \ "u-boot-c4.bin skip 0 0;" \ "u-boot-vim3l.bin skip 0 0;" \ - "u-boot-n2.bin skip 0 0" + "u-boot-n2.bin skip 0 0;" \ + "0-format.cmd script 0 0" #define DFU_ALT_BOOT_ODROID_C4 "u-boot-c4.bin raw 0x1 0x1000;" \ "u-boot-vim3.bin skip 0 0;" \ "u-boot-vim3l.bin skip 0 0;" \ - "u-boot-n2.bin skip 0 0" + "u-boot-n2.bin skip 0 0;" \ + "0-format.cmd script 0 0" #define DFU_ALT_BOOT_VIM3L "u-boot-vim3l.bin raw 0x1 0x1000;" \ "u-boot-vim3.bin skip 0 0;" \ "u-boot-c4.bin skip 0 0;" \ - "u-boot-n2.bin skip 0 0" + "u-boot-n2.bin skip 0 0;" \ + "0-format.cmd script 0 0" + #define CONFIG_SET_DFU_ALT_BUF_LEN (SZ_1K) +#define PARTS_DEFAULT \ + "name=boot,start=4M,size=128M,bootable,id=0x0e;" \ + "name=rootfs,size=3072M,id=0x83;" \ + "name=system-data,size=512M,id=0x83;" \ + "name=[ext],size=-,id=0x05;" \ + "name=user,size=-,id=0x83;" \ + "name=modules,size=100M,id=0x83;" \ + "name=ramdisk,size=8M,id=0x83;" \ + "name=ramdisk-recovery,size=32M,id=0x83;" \ + "name=reserved0,size=8M,id=0x83;" \ + "name=reserved1,size=64M,id=0x83;" \ + "name=reserved2,size=128M,id=0x83;" \ + "" + /* DFU over USB/UDC */ #if defined(CONFIG_CMD_DFU) || defined(CONFIG_CMD_THOR) #define CONFIG_SYS_DFU_DATA_BUF_SIZE SZ_1M @@ -92,6 +116,17 @@ #define DEVICE_TREE_NAME CONFIG_DEFAULT_DEVICE_TREE #endif +#define MBR_CHECK \ + "env default mbr_parts; " \ + "if mbr verify ${dfu_interface} ${dfu_device}; " \ + "then true; else " \ + "echo \"MBR layout does not match flashed bootloader!\"; " \ + "echo \"Please flash complete Tizen image or Ctrl-C to continue.\"; " \ + "env default dfu_alt_fallback; " \ + "setenv dfu_alt_info \"${dfu_alt_fallback}\"; " \ + "thor; " \ + "fi" + #define TIZEN_ENV_SETTING \ "mmcbootpart=1\0" \ "mmcrootpart=2\0" \ @@ -100,6 +135,7 @@ "bootmode=ramdisk\0" \ "bootdev=mmc\0" \ "dfu_alt_info=" DFU_ALT_SYSTEM ";" DFU_ALT_BOOT "\0"\ + "dfu_alt_fallback=" DFU_ALT_BOOT "\0" \ "fdt_high=0x20000000\0" \ "initrd_high=0x3d800000\0" \ "opts=loglevel=4\0" \ @@ -107,7 +143,10 @@ "dfu_interface=mmc\0" \ "fdtfile=" DEVICE_TREE_NAME "\0" \ "board_name=" BOARD_NAME "\0" \ - "boot_prefixes=" TIZEN_BOOT_PREFIX "\0" + "boot_prefixes=" TIZEN_BOOT_PREFIX "\0" \ + "mbr_parts=" PARTS_DEFAULT "\0" \ + "mbr_check=" MBR_CHECK "\0" + #define CONFIG_TIZEN diff --git a/tizen/build-amlogic.sh b/tizen/build-amlogic.sh index 5133e7e50f..bee5731006 100755 --- a/tizen/build-amlogic.sh +++ b/tizen/build-amlogic.sh @@ -15,6 +15,7 @@ set_names() PARAMS=params-c4.bin OUTPUT_BIN=u-boot-c4.bin OUTPUT_TAR=odroidc4_bootloader.tar + OUTPUT2_TGZ=odroidc4_format_bootloader.tar.gz ;; n2) @@ -25,6 +26,7 @@ set_names() PARAMS=params-n2.bin OUTPUT_BIN=u-boot-n2.bin OUTPUT_TAR=odroidn2_bootloader.tar + OUTPUT2_TGZ=odroidn2_format_bootloader.tar.gz ;; vim3) @@ -35,6 +37,7 @@ set_names() PARAMS=params-vim3.bin OUTPUT_BIN=u-boot-vim3.bin OUTPUT_TAR=kvim3_bootloader.tar + OUTPUT2_TGZ=kvim3_format_bootloader.tar.gz ;; vim3l) @@ -45,10 +48,12 @@ set_names() PARAMS=params-vim3l.bin OUTPUT_BIN=u-boot-vim3l.bin OUTPUT_TAR=kvim3l_bootloader.tar + OUTPUT2_TGZ=kvim3l_format_bootloader.tar.gz ;; all) OUTPUT_TAR=amlogic_bootloader.tar + OUTPUT2_TGZ=amlogic_format_bootloader.tar.gz ;; esac } @@ -120,6 +125,32 @@ build_amlogic() cd .. } +build_format() +{ + cd output + + rm -f 0-format.cmd + for i in params*.bin + do + strings $i | grep 'board_name=' | sed -e 's/\([a-z_]*\)=\(.*\)/if test \$\{\1\} = "\2"; then/' >>0-format.cmd + strings $i | grep 'dfu_alt_info=' | sed -e 's/\([a-z_]*\)=\(.*\)/setenv \1 "\2";/' >>0-format.cmd + strings $i | grep 'mbr_parts=' | sed -e 's/\([a-z_]*\)=\(.*\)/setenv \1 "\2";/' >>0-format.cmd + echo 'mbr write ${dfu_interface} ${dfu_device} "${mbr_parts}";' >>0-format.cmd + echo 'fi;' >>0-format.cmd + done + + # make empty FAT partiton + dd if=/dev/zero of=boot.img bs=1024 count=128k + mkfs.vfat -n BOOT boot.img + mmd -i boot.img odroid + mmd -i boot.img kvim + # WARNING: the order of files in the TAR is important!!! + # 0-format.cmd MUST be before any other MBR related entity + # boot.img must be before any file from FAT partiton + tar cvfz ${OUTPUT2_TGZ} u-boot-+([a-z0-9]).bin 0-format.cmd boot.img boot.scr.uimg params*.bin + cd .. +} + case $1 in c4|n2|vim3|vim3l) BOARDS=$1 @@ -155,3 +186,4 @@ then tar cvf ${OUTPUT_TAR} u-boot-+([a-z0-9]).bin boot.scr.uimg params*.bin cd .. fi +build_format