From ee930fffee469d076998274a2ca55e13dc1efb67 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 10 May 2024 08:50:54 +0000
Subject: [PATCH] enable tun/tap/iptables

---
 u-boot/arch/arm/mach-rockchip/fit.c |   68 ++++++++++++---------------------
 1 files changed, 25 insertions(+), 43 deletions(-)

diff --git a/u-boot/arch/arm/mach-rockchip/fit.c b/u-boot/arch/arm/mach-rockchip/fit.c
index 9348c76..7c5681a 100644
--- a/u-boot/arch/arm/mach-rockchip/fit.c
+++ b/u-boot/arch/arm/mach-rockchip/fit.c
@@ -142,14 +142,14 @@
 {
 	__maybe_unused int conf_noffset;
 	disk_partition_t part;
-	char *part_name;
+	char *part_name = PART_BOOT;
 	void *fit, *fdt;
 	int blk_num;
 
+#ifndef CONFIG_ANDROID_AB
 	if (rockchip_get_boot_mode() == BOOT_MODE_RECOVERY)
 		part_name = PART_RECOVERY;
-	else
-		part_name = PART_BOOT;
+#endif
 
 	if (part_get_info_by_name(dev_desc, part_name, &part) < 0) {
 		FIT_I("No %s partition\n", part_name);
@@ -201,6 +201,7 @@
 	printf("%s: ", fdt_get_name(fit, conf_noffset, NULL));
 	if (fit_config_verify(fit, conf_noffset)) {
 		puts("\n");
+		/* don't remove this failure handle */
 		run_command("download", 0);
 		hang();
 	}
@@ -246,6 +247,7 @@
 {
 	int ret;
 
+	/* free for fit_image_fixup_alloc(FIT_FDT_PROP) to re-alloc */
 	if ((gd->flags & GD_FLG_KDTB_READY) && !gd->fdt_blob_kern)
 		sysmem_free((phys_addr_t)gd->fdt_blob);
 
@@ -404,65 +406,45 @@
 }
 
 #ifdef CONFIG_ROCKCHIP_RESOURCE_IMAGE
-static int fit_image_load_resource(const void *fit, struct blk_desc *dev_desc,
-				   disk_partition_t *part, ulong *addr)
+ulong fit_image_init_resource(struct blk_desc *dev_desc)
 {
-	int offset, size;
-	int ret;
-	void *data;
-
-	ret = fdt_image_get_offset_size(fit, FIT_MULTI_PROP, &offset, &size);
-	if (ret)
-		return ret;
-
-	data = malloc(ALIGN(size, dev_desc->blksz));
-	if (!data)
-		return -ENOMEM;
-
-	*addr = (ulong)data;
-
-	return fit_image_load_one(fit, dev_desc, part, FIT_MULTI_PROP,
-				  data, IS_ENABLED(CONFIG_FIT_SIGNATURE));
-}
-
-int fit_image_init_resource(void)
-{
-	struct blk_desc *dev_desc;
 	disk_partition_t part;
+	void *fit, *buf;
+	int offset, size;
 	int ret = 0;
-	void *fit;
 
-	dev_desc = rockchip_get_bootdev();
-	if (!dev_desc) {
-		FIT_I("No dev_desc!\n");
+	if (!dev_desc)
 		return -ENODEV;
-	}
 
 	fit = fit_get_blob(dev_desc, &part, true);
 	if (!fit)
+		return -EAGAIN;
+
+	ret = fdt_image_get_offset_size(fit, FIT_MULTI_PROP, &offset, &size);
+	if (ret)
 		return -EINVAL;
 
-#ifdef CONFIG_ROCKCHIP_RESOURCE_IMAGE
-	ulong rsce;
+	buf = memalign(ARCH_DMA_MINALIGN, ALIGN(size, dev_desc->blksz));
+	if (!buf)
+		return -ENOMEM;
 
-	ret = fit_image_load_resource(fit, dev_desc, &part, &rsce);
+	printf("RESC: '%s', blk@0x%08lx\n", part.name,
+	       part.start + ((FIT_ALIGN(fdt_totalsize(fit)) + offset) / dev_desc->blksz));
+	ret = fit_image_load_one(fit, dev_desc, &part, FIT_MULTI_PROP, buf, 1);
+	if (ret)
+		return ret;
+
+	ret = resource_setup_ram_list(dev_desc, buf);
 	if (ret) {
-		FIT_I("Failed to load resource\n");
+		FIT_I("Failed to setup resource ram list, ret=%d\n", ret);
 		free(fit);
 		return ret;
 	}
 
-	ret = resource_create_ram_list(dev_desc, (void *)rsce);
-	if (ret) {
-		FIT_I("Failed to create resource list\n");
-		free(fit);
-		return ret;
-	}
-#endif
 	fit_msg(fit);
 	free(fit);
 
-	return ret;
+	return 0;
 }
 #else
 int fit_image_read_dtb(void *fdt_addr)

--
Gitblit v1.6.2