tizen: rpi4: support A/B boot on PRi4 target
authorJaehoon Chung <jh80.chung@samsung.com>
Thu, 16 Jun 2022 07:47:45 +0000 (16:47 +0900)
committerJaehoon Chung <jh80.chung@samsung.com>
Wed, 12 Oct 2022 05:49:00 +0000 (14:49 +0900)
Support A/B boot on RPi4.
It has to be partition-param.bin file to distinguish with
a/b in inform partition. Then bootscript can be parsing its value.

partition-param.bin can be changed to other name.
But it has to change also slotfile of uboot's environment as same value.

Change-Id: I143b9485117a0f10ed3d427a1f3f15b4a86ffd43
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
include/samsung/tizen_rpi.h
tizen/bootscript/tizen-boot-rpi4.scr

index 34b7411..3da59db 100644 (file)
        "mmcrootpart=2\0"                       \
        "mmcinformpart=9\0"                     \
        "rebootparamfile=reboot-param.bin\0"    \
+       "slotfile=partition-param.bin\0"        \
+       "slot_addr=0x02200000\0"                \
        "rebootparam_addr=0x02100000\0"         \
        "upgrade_val=72677075\0"                \
        "recovery_val=72766372\0"               \
        "nodef_val=6665646e\0"                  \
        "download_val=6c6e7764\0"               \
        "ramdiskpart=7\0"                       \
+       "part=7\0"                              \
        "bootmode=ramdisk\0"                    \
        "bootdev=mmc\0"                         \
        "tfm=setenv bootmode download; run bootcmd\0"   \
                TIZEN_VC_MEM                            \
                "8250.nr_uarts=1 dma.dmachans=0x7f35 bcm2709.serial=0xed6687d3 "                \
                "bcm2709.uart_clock=48000000 dwc_otg.lpm_enable=0\0"    \
-       "opts=loglevel=4 partition_ab=a\0"                      \
+       "opts=loglevel=4\0"                     \
        "dfu_usb_con=0\0"                       \
        "dfu_interface=mmc\0"                   \
        "dfu_device=" __stringify(CONFIG_MMC_DEFAULT_DEV) "\0" \
index eb41047..a33612b 100644 (file)
@@ -8,16 +8,54 @@ if test "${target}" = "usb0"; then;
        setenv opts "${opts} rootdelay=2"
 fi
 
+if test -e $bootdev $mmcbootdev:$mmcinformpart $slotfile; then;
+       ext4load $bootdev $mmcbootdev:$mmcinformpart $slot_addr $slotfile;
+       if itest.b *${slot_addr} == 62}; then;
+               setenv ramdiskpart 0xe
+               setenv part 14
+               setenv partition_ab b
+               echo "boot from slot_b";
+       else
+               setenv ramdiskpart 7
+               setenv part 7
+               setenv partition_ab a
+               echo "boot from slot_a";
+       fi
+else
+       setenv ramdiskpart 7
+       setenv part 7
+       setenv partition_ab a
+       echo "boot from slot_a";
+fi
+
 if test -e $bootdev $mmcbootdev:$mmcinformpart $rebootparamfile; then;
        ext4load $bootdev $mmcbootdev:$mmcinformpart $rebootparam_addr $rebootparamfile;
        if itest.l *${rebootparam_addr} == ${upgrade_val}; then;
-               setenv ramdiskpart 8
+               if test "${partition_ab}" = "b"; then
+                       setenv ramdiskpart 0xf
+                       setenv part 15
+               else
+                       setenv ramdiskpart 8
+                       setenv part 8
+               fi
                setenv bootmode fota
        elif itest.l *${rebootparam_addr} == ${recovery_val}; then;
-               setenv ramdiskpart 8
+               if test "${partition_ab}" = "b"; then
+                       setenv ramdiskpart 0xf
+                       setenv part 15
+               else
+                       setenv ramdiskpart 8
+                       setenv part 8
+               fi
                setenv bootmode recovery
        elif itest.l *${rebootparam_addr} == ${download_val}; then;
-               setenv ramdiskpart 8
+               if test "${partition_ab}" = "b"; then
+                       setenv ramdiskpart 0xf
+                       setenv part 15
+               else
+                       setenv ramdiskpart 8
+                       setenv part 8
+               fi
                setenv bootmode flash
        elif itest.l *${rebootparam_addr} == ${nodef_val}; then;
                echo "This reboot parameter is not supported...";
@@ -26,7 +64,13 @@ fi
 
 # This is for jumping to flash mode on u-boot.
 if test "${bootmode}" = "download"; then;
-       setenv ramdiskpart 8
+       if test "${partition_ab}" = "b"; then
+               setenv ramdiskpart 0xf
+               setenv part 15
+       else
+               setenv ramdiskpart 8
+               setenv part 8
+       fi
        setenv bootmode flash
 fi
 
@@ -59,7 +103,7 @@ echo "console: ${console}"
 setenv boot_prefixes \"/\"
 
 # To use cmdline for using serial console. /* Normal mode */
-setenv bootargs \"${tizen_bootarg} root=/dev/${rootdev} rw bootmode=${bootmode} rootwait ${console} ${opts} ${ip_opt}\"
+setenv bootargs \"${tizen_bootarg} root=/dev/${rootdev} rw bootmode=${bootmode} partition_ab=${partition_ab} rootwait ${console} ${opts} ${ip_opt}\"
 
 # Find the ramdisk offset and block count
 part start $bootdev $mmcrootdev $ramdiskpart ramdisk_start
@@ -73,7 +117,8 @@ echo "Searching for kernel in"; for prefix in $boot_prefixes; do
 if load $bootdev $mmcbootdev:$mmcbootpart $tizen_kernel_addr_r $prefix$kernel; then;
        echo ${bootmode} "boot";
        if test -e $bootdev $mmcrootdev:$ramdiskpart sbin/init; then;
-               echo "Loading Ramdisk from partition"${ramdiskpart};
+               echo "Loading Ramdisk from partition"${part};
+               echo "Environment value of ramdiskpart is" ${ramdiskpart};
                $bootdev read $ramdisk_addr_r $ramdisk_start $ramdisk_size;
        fi