[openwrt/openwrt] base-files: recognize bootdevice on devices using fitblk

LEDE Commits lede-commits at lists.infradead.org
Sun Feb 25 18:16:18 PST 2024


dangole pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/5992f976b39a0a0a79e5b9656279186cd471e353

commit 5992f976b39a0a0a79e5b9656279186cd471e353
Author: Daniel Golle <daniel at makrotopia.org>
AuthorDate: Sun Feb 25 21:01:01 2024 +0000

    base-files: recognize bootdevice on devices using fitblk
    
    Boards using the fitblk driver need special treatment when it comes to
    detecting the actual block device used to store the image used to boot
    from. Transparently handle this in 'export_bootdevice' and provide new
    'fitblk_get_bootdev' function to replace implementations in
    /lib/upgrade/platform.sh.
    
    Signed-off-by: Daniel Golle <daniel at makrotopia.org>
---
 package/base-files/files/lib/upgrade/common.sh | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh
index af1182cb16..7e83379082 100644
--- a/package/base-files/files/lib/upgrade/common.sh
+++ b/package/base-files/files/lib/upgrade/common.sh
@@ -165,6 +165,23 @@ part_magic_fat() {
 	[ "$magic" = "FAT" ] || [ "$magic_fat32" = "FAT32" ]
 }
 
+fitblk_get_bootdev() {
+	[ -e /sys/firmware/devicetree/base/chosen/rootdisk ] || return
+
+	local rootdisk="$(cat /sys/firmware/devicetree/base/chosen/rootdisk)"
+	local handle bootdev
+	for handle in /sys/class/block/*/of_node/phandle /sys/class/block/*/device/of_node/phandle; do
+		[ ! -e "$handle" ] && continue
+		if [ "$rootdisk" = "$(cat $handle)" ]; then
+			bootdev="${handle%/of_node/phandle}"
+			bootdev="${bootdev%/device}"
+			bootdev="${bootdev#/sys/class/block/}"
+			echo "$bootdev"
+			break
+		fi
+	done
+}
+
 export_bootdevice() {
 	local cmdline uuid blockdev uevent line class
 	local MAJOR MINOR DEVNAME DEVTYPE
@@ -196,7 +213,11 @@ export_bootdevice() {
 			done
 		;;
 		/dev/*)
-			uevent="/sys/class/block/${rootpart##*/}/../uevent"
+			if [ "$rootpart" = "/dev/fit0" ]; then
+				uevent="/sys/class/block/$(fitblk_get_bootdev)/uevent"
+			else
+				uevent="/sys/class/block/${rootpart##*/}/../uevent"
+			fi
 		;;
 		0x[a-f0-9][a-f0-9][a-f0-9] | 0x[a-f0-9][a-f0-9][a-f0-9][a-f0-9] | \
 		[a-f0-9][a-f0-9][a-f0-9] | [a-f0-9][a-f0-9][a-f0-9][a-f0-9])




More information about the lede-commits mailing list