From 9df731a176aab8e03b984b681b1bea01ccff6644 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 06 Nov 2023 07:23:06 +0000
Subject: [PATCH] rk3568 rt uboot init

---
 u-boot/common/android_ab.c |   56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 55 insertions(+), 1 deletions(-)

diff --git a/u-boot/common/android_ab.c b/u-boot/common/android_ab.c
index 2182d3d..5655274 100644
--- a/u-boot/common/android_ab.c
+++ b/u-boot/common/android_ab.c
@@ -406,7 +406,7 @@
 	return 0;
 }
 
-void ab_update_root_uuid(void)
+static void ab_update_root_uuid(void)
 {
 	/*
 	 * In android a/b & avb process, the system.img is mandory and the
@@ -441,6 +441,60 @@
 	}
 }
 
+void ab_update_root_partition(void)
+{
+	char *boot_args = env_get("bootargs");
+	char root_part_dev[64] = {0};
+	disk_partition_t part_info;
+	struct blk_desc *dev_desc;
+	const char *part_type;
+	int part_num;
+
+	dev_desc = rockchip_get_bootdev();
+	if (!dev_desc)
+		return;
+
+	if (ab_is_support_dynamic_partition(dev_desc))
+		return;
+
+	/* Get 'system' partition device number. */
+	part_num = part_get_info_by_name(dev_desc, ANDROID_PARTITION_SYSTEM, &part_info);
+	if (part_num < 0) {
+		printf("%s: Failed to get partition '%s'.\n", __func__, ANDROID_PARTITION_SYSTEM);
+		return;
+	}
+
+	/* Get partition type. */
+	part_type = part_get_type(dev_desc);
+	if (!part_type)
+		return;
+
+	/* Judge the partition device type. */
+	switch (dev_desc->if_type) {
+	case IF_TYPE_MMC:
+		if (strstr(part_type, "ENV"))
+			snprintf(root_part_dev, 64, "root=/dev/mmcblk0p%d", part_num);
+		else if (strstr(part_type, "EFI"))
+			ab_update_root_uuid();
+		break;
+	case IF_TYPE_MTD:
+		if (dev_desc->devnum == BLK_MTD_NAND || dev_desc->devnum == BLK_MTD_SPI_NAND) {
+			if (strstr(boot_args, "rootfstype=squashfs") || strstr(boot_args, "rootfstype=erofs"))
+				snprintf(root_part_dev, 64, "ubi.mtd=%d root=/dev/ubiblock0_0", part_num - 1);
+			else if (strstr(boot_args, "rootfstype=ubifs"))
+				snprintf(root_part_dev, 64, "ubi.mtd=%d root=ubi0:system", part_num - 1);
+		} else if (dev_desc->devnum == BLK_MTD_SPI_NOR) {
+			snprintf(root_part_dev, 64, "root=/dev/mtdblock%d", part_num - 1);
+		}
+		break;
+	default:
+		printf("%s: Not found part type, failed to set root part device.\n", __func__);
+		return;
+	}
+
+	env_update("bootargs", root_part_dev);
+}
+
 int ab_get_slot_suffix(char *slot_suffix)
 {
 	/* TODO: get from pre-loader or misc partition */

--
Gitblit v1.6.2