From 552362c4c92b721f729b1ac71ba4d8252fa17179 Mon Sep 17 00:00:00 2001 From: Jaehoon Chung Date: Thu, 16 Jun 2022 16:47:45 +0900 Subject: [PATCH] tizen: rpi4: support A/B boot on PRi4 target 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 --- include/samsung/tizen_rpi.h | 5 +++- tizen/bootscript/tizen-boot-rpi4.scr | 57 ++++++++++++++++++++++++++++++++---- 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/include/samsung/tizen_rpi.h b/include/samsung/tizen_rpi.h index 8190d63..42c30c6 100644 --- a/include/samsung/tizen_rpi.h +++ b/include/samsung/tizen_rpi.h @@ -95,12 +95,15 @@ "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" \ @@ -108,7 +111,7 @@ 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" \ diff --git a/tizen/bootscript/tizen-boot-rpi4.scr b/tizen/bootscript/tizen-boot-rpi4.scr index eb41047..a33612b 100644 --- a/tizen/bootscript/tizen-boot-rpi4.scr +++ b/tizen/bootscript/tizen-boot-rpi4.scr @@ -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 -- 2.7.4