Project import generated by Copybara.

GitOrigin-RevId: 86e7d74983eb98ca8510a2f5eca167c786a0df77
diff --git a/Kconfig b/Kconfig
index e332245..2cc272b 100644
--- a/Kconfig
+++ b/Kconfig
@@ -275,20 +275,10 @@
 	  SHA256 variant is supported: SHA512 and others are not currently
 	  supported in U-Boot.
 
-config FIT_FULL_CHECK
-	bool "Do a full check of the FIT before using it"
-	default y
-	help
-	  Enable this do a full check of the FIT to make sure it is valid. This
-	  helps to protect against carefully crafted FITs which take advantage
-	  of bugs or omissions in the code. This includes a bad structure,
-	  multiple root nodes and the like.
-
 config FIT_SIGNATURE
 	bool "Enable signature verification of FIT uImages"
 	depends on DM
 	select HASH
-	select FIT_FULL_CHECK
 	select RSA
 	help
 	  This option enables signature verification of FIT uImages,
@@ -365,21 +355,11 @@
 	help
 	  Support printing the content of the fitImage in a verbose manner in SPL.
 
-config SPL_FIT_FULL_CHECK
-	bool "Do a full check of the FIT before using it"
-	help
-	  Enable this do a full check of the FIT to make sure it is valid. This
-	  helps to protect against carefully crafted FITs which take advantage
-	  of bugs or omissions in the code. This includes a bad structure,
-	  multiple root nodes and the like.
-
-
 config SPL_FIT_SIGNATURE
 	bool "Enable signature verification of FIT firmware within SPL"
 	depends on SPL_DM
 	select SPL_FIT
 	select SPL_RSA
-	select SPL_FIT_FULL_CHECK
 
 config SPL_LOAD_FIT
 	bool "Enable SPL loading U-Boot as a FIT"
diff --git a/arch/arm/cpu/armv8/sec_firmware.c b/arch/arm/cpu/armv8/sec_firmware.c
index 3c52495..8dc0ac9 100644
--- a/arch/arm/cpu/armv8/sec_firmware.c
+++ b/arch/arm/cpu/armv8/sec_firmware.c
@@ -310,7 +310,7 @@
 		return false;
 	}
 
-	if (fit_check_format(sec_firmware_img, IMAGE_SIZE_INVAL)) {
+	if (!fit_check_format(sec_firmware_img)) {
 		printf("SEC Firmware: Bad firmware image (bad FIT header)\n");
 		return false;
 	}
diff --git a/board/amlogic/defconfigs/s4_t211_defconfig b/board/amlogic/defconfigs/s4_t211_defconfig
index 7ddb506..bc8f787 100644
--- a/board/amlogic/defconfigs/s4_t211_defconfig
+++ b/board/amlogic/defconfigs/s4_t211_defconfig
@@ -12,7 +12,7 @@
 CONFIG_DEBUG_UART=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_BOOTDELAY=-2
-CONFIG_BOOTCOMMAND="run storeboot ; reboot"
+CONFIG_BOOTCOMMAND="run storeboot"
 CONFIG_BOARD_LATE_INIT=y
 # CONFIG_DISPLAY_CPUINFO is not set
 # CONFIG_DISPLAY_BOARDINFO is not set
@@ -111,4 +111,3 @@
 CONFIG_MD5=y
 CONFIG_OF_LIBFDT_OVERLAY=y
 CONFIG_CHROMECAST=y
-CONFIG_AML_DISABLE_DEV_CMDS=y
diff --git a/cmd/amlogic/cmd_avb.c b/cmd/amlogic/cmd_avb.c
index df1b861..948f7ed 100644
--- a/cmd/amlogic/cmd_avb.c
+++ b/cmd/amlogic/cmd_avb.c
@@ -381,10 +381,13 @@
     printf("ab_suffix is %s\n", ab_suffix);
 
     AvbSlotVerifyFlags flags = AVB_SLOT_VERIFY_FLAGS_NONE;
+    char *upgradestep = NULL;
 
     avb_init();
 
-    if (is_device_unlocked())
+    upgradestep = env_get("upgrade_step");
+
+    if (is_device_unlocked() || !strcmp(upgradestep, "3"))
         flags |= AVB_SLOT_VERIFY_FLAGS_ALLOW_VERIFICATION_ERROR;
 
     if (!strcmp(ab_suffix, "")) {
@@ -409,6 +412,9 @@
             flags,
             AVB_HASHTREE_ERROR_MODE_RESTART_AND_INVALIDATE, out_data);
 
+    if (!strcmp(upgradestep, "3"))
+        result = AVB_SLOT_VERIFY_RESULT_OK;
+
     return result;
 }
 
diff --git a/cmd/amlogic/cmd_bcb.c b/cmd/amlogic/cmd_bcb.c
index bbe12bf..7315dda 100644
--- a/cmd/amlogic/cmd_bcb.c
+++ b/cmd/amlogic/cmd_bcb.c
@@ -44,6 +44,21 @@
     char reserved[192];
 };
 
+
+static int clear_misc_partition(char *clearbuf, int size)
+{
+    char *partition = "misc";
+
+    memset(clearbuf, 0, size);
+    if (store_write((const char *)partition,
+        0, size, (unsigned char *)clearbuf) < 0) {
+        printf("failed to clear %s.\n", partition);
+        return -1;
+    }
+
+    return 0;
+}
+
 static int do_RunBcbCommand(
     cmd_tbl_t * cmdtp,
     int flag,
@@ -159,6 +174,25 @@
         return 0;
     }
 
+    if (!memcmp(command_mark, command, strlen(command_mark))) {
+        printf("%s\n", recovery);
+        if (run_command((char *)recovery, 0) < 0) {
+            printf("run_command for cmd:%s failed.\n", recovery);
+            goto ERR;
+        }
+        printf("run command successful.\n");
+
+        if (clear_misc_partition(clearbuf, sizeof(clearbuf)) < 0) {
+            printf("clear misc partition failed.\n");
+            goto ERR;
+        } else {
+            printf("clear misc partition successful.\n");
+        }
+    } else {
+        printf("command mark(%s) not match %s,don't execute.\n",
+            command_mark, command);
+    }
+
     return 0;
 
  ERR:
diff --git a/cmd/bootm.c b/cmd/bootm.c
index e712302..e58a595 100644
--- a/cmd/bootm.c
+++ b/cmd/bootm.c
@@ -416,7 +416,7 @@
 	case IMAGE_FORMAT_FIT:
 		puts("   FIT image found\n");
 
-		if (fit_check_format(hdr, IMAGE_SIZE_INVAL)) {
+		if (!fit_check_format(hdr)) {
 			puts("Bad FIT image format!\n");
 			return 1;
 		}
@@ -489,7 +489,7 @@
 #endif
 #if defined(CONFIG_FIT)
 			case IMAGE_FORMAT_FIT:
-				if (fit_check_format(hdr, IMAGE_SIZE_INVAL))
+				if (!fit_check_format(hdr))
 					goto next_sector;
 
 				printf("FIT Image at %08lX:\n", (ulong)hdr);
@@ -569,7 +569,7 @@
 		return ret;
 	}
 
-	if (fit_check_format(imgdata, IMAGE_SIZE_INVAL)) {
+	if (!fit_check_format(imgdata)) {
 		free(imgdata);
 		return 0;
 	}
diff --git a/cmd/disk.c b/cmd/disk.c
index 294fc11..dcc36a6 100644
--- a/cmd/disk.c
+++ b/cmd/disk.c
@@ -110,7 +110,7 @@
 	/* This cannot be done earlier,
 	 * we need complete FIT image in RAM first */
 	if (genimg_get_format((void *) addr) == IMAGE_FORMAT_FIT) {
-		if (fit_check_format(fit_hdr, IMAGE_SIZE_INVAL)) {
+		if (!fit_check_format(fit_hdr)) {
 			bootstage_error(BOOTSTAGE_ID_IDE_FIT_READ);
 			puts("** Bad FIT image format\n");
 			return 1;
diff --git a/cmd/fpga.c b/cmd/fpga.c
index 9093026..88a8e3f 100644
--- a/cmd/fpga.c
+++ b/cmd/fpga.c
@@ -325,7 +325,7 @@
 			return CMD_RET_FAILURE;
 		}
 
-		if (fit_check_format(fit_hdr, IMAGE_SIZE_INVAL)) {
+		if (!fit_check_format(fit_hdr)) {
 			puts("Bad FIT image format\n");
 			return CMD_RET_FAILURE;
 		}
diff --git a/cmd/nand.c b/cmd/nand.c
index 069da99..22a534d 100644
--- a/cmd/nand.c
+++ b/cmd/nand.c
@@ -928,7 +928,7 @@
 #if defined(CONFIG_FIT)
 	/* This cannot be done earlier, we need complete FIT image in RAM first */
 	if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT) {
-		if (fit_check_format(fit_hdr, IMAGE_SIZE_INVAL)) {
+		if (!fit_check_format (fit_hdr)) {
 			bootstage_error(BOOTSTAGE_ID_NAND_FIT_READ);
 			puts ("** Bad FIT image format\n");
 			return 1;
diff --git a/cmd/source.c b/cmd/source.c
index 897b970..6d98a1c 100644
--- a/cmd/source.c
+++ b/cmd/source.c
@@ -106,7 +106,7 @@
 #if defined(CONFIG_FIT)
 	case IMAGE_FORMAT_FIT:
 		fit_hdr = buf;
-		if (fit_check_format(fit_hdr, IMAGE_SIZE_INVAL)) {
+		if (!fit_check_format (fit_hdr)) {
 			puts ("Bad FIT image format\n");
 			return 1;
 		}
diff --git a/cmd/ximg.c b/cmd/ximg.c
index 4fd1b26..6880c74 100644
--- a/cmd/ximg.c
+++ b/cmd/ximg.c
@@ -131,7 +131,7 @@
 			"at %08lx ...\n", uname, addr);
 
 		fit_hdr = (const void *)addr;
-		if (fit_check_format(fit_hdr, IMAGE_SIZE_INVAL)) {
+		if (!fit_check_format(fit_hdr)) {
 			puts("Bad FIT image format\n");
 			return 1;
 		}
diff --git a/common/bootm.c b/common/bootm.c
index 0fef966..85532c7 100644
--- a/common/bootm.c
+++ b/common/bootm.c
@@ -1279,8 +1279,7 @@
 	memmove(to, from, len);
 }
 
-static int bootm_host_load_image(const void *fit, int req_image_type,
-				 int cfg_noffset)
+static int bootm_host_load_image(const void *fit, int req_image_type)
 {
 	const char *fit_uname_config = NULL;
 	ulong data, len;
@@ -1292,7 +1291,6 @@
 	void *load_buf;
 	int ret;
 
-	fit_uname_config = fdt_get_name(fit, cfg_noffset, NULL);
 	memset(&images, '\0', sizeof(images));
 	images.verify = 1;
 	noffset = fit_image_load(&images, (ulong)fit,
@@ -1337,7 +1335,7 @@
 	for (i = 0; i < ARRAY_SIZE(image_types); i++) {
 		int ret;
 
-		ret = bootm_host_load_image(fit, image_types[i], cfg_noffset);
+		ret = bootm_host_load_image(fit, image_types[i]);
 		if (!err && ret && ret != -ENOENT)
 			err = ret;
 	}
diff --git a/common/image-fdt.c b/common/image-fdt.c
index b72b2bf..aaf0f22 100644
--- a/common/image-fdt.c
+++ b/common/image-fdt.c
@@ -363,7 +363,7 @@
 			 */
 #if CONFIG_IS_ENABLED(FIT)
 			/* check FDT blob vs FIT blob */
-			if (!fit_check_format(buf, IMAGE_SIZE_INVAL)) {
+			if (fit_check_format(buf)) {
 				ulong load, len;
 
 				fdt_noffset = boot_get_fdt_fit(images,
diff --git a/common/image-fit.c b/common/image-fit.c
index 3b0f19c..95b5723 100644
--- a/common/image-fit.c
+++ b/common/image-fit.c
@@ -8,14 +8,12 @@
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  */
 
-#define LOG_CATEGORY LOGC_BOOT
-
 #ifdef USE_HOSTCC
 #include "mkimage.h"
 #include <time.h>
-#include <linux/libfdt.h>
 #else
 #include <linux/compiler.h>
+#include <linux/kconfig.h>
 #include <common.h>
 #include <errno.h>
 #include <mapmem.h>
@@ -26,7 +24,6 @@
 
 #include <image.h>
 #include <bootstage.h>
-#include <linux/kconfig.h>
 #include <u-boot/crc.h>
 #include <u-boot/md5.h>
 #include <u-boot/sha1.h>
@@ -169,7 +166,7 @@
 	int value_len;
 	char *algo;
 	const char *padding;
-	bool required;
+	int required;
 	int ret, i;
 
 	debug("%s  %s node:    '%s'\n", p, type,
@@ -180,8 +177,8 @@
 		return;
 	}
 	printf("%s", algo);
-	keyname = fdt_getprop(fit, noffset, FIT_KEY_HINT, NULL);
-	required = fdt_getprop(fit, noffset, FIT_KEY_REQUIRED, NULL) != (void *)NULL;
+	keyname = fdt_getprop(fit, noffset, "key-name-hint", NULL);
+	required = fdt_getprop(fit, noffset, "required", NULL) != NULL;
 	if (keyname)
 		printf(":%s", keyname);
 	if (required)
@@ -1290,31 +1287,21 @@
  */
 int fit_image_verify(const void *fit, int image_noffset)
 {
-	const char *name = fit_get_name(fit, image_noffset, NULL);
 	const void	*data;
 	size_t		size;
+	int		noffset = 0;
 	char		*err_msg = "";
 
-	if (strchr(name, '@')) {
-		/*
-		 * We don't support this since libfdt considers names with the
-		 * name root but different @ suffix to be equal
-		 */
-		err_msg = "Node name contains @";
-		goto err;
-	}
 	/* Get image data and data length */
 	if (fit_image_get_data_and_size(fit, image_noffset, &data, &size)) {
 		err_msg = "Can't get image data/size";
-		goto err;
+		printf("error!\n%s for '%s' hash node in '%s' image node\n",
+		       err_msg, fit_get_name(fit, noffset, NULL),
+		       fit_get_name(fit, image_noffset, NULL));
+		return 0;
 	}
 
 	return fit_image_verify_with_data(fit, image_noffset, data, size);
-
-err:
-	printf("error!\n%s in '%s' image node\n", err_msg,
-	       fit_get_name(fit, image_noffset, NULL));
-	return 0;
 }
 
 /**
@@ -1465,100 +1452,42 @@
 }
 
 /**
- * fdt_check_no_at() - Check for nodes whose names contain '@'
+ * fit_check_format - sanity check FIT image format
+ * @fit: pointer to the FIT format image header
  *
- * This checks the parent node and all subnodes recursively
+ * fit_check_format() runs a basic sanity FIT image verification.
+ * Routine checks for mandatory properties, nodes, etc.
  *
- * @fit: FIT to check
- * @parent: Parent node to check
- * @return 0 if OK, -EADDRNOTAVAIL is a node has a name containing '@'
+ * returns:
+ *     1, on success
+ *     0, on failure
  */
-static int fdt_check_no_at(const void *fit, int parent)
+int fit_check_format(const void *fit)
 {
-	const char *name;
-	int node;
-	int ret;
-
-	name = fdt_get_name(fit, parent, NULL);
-	if (!name || strchr(name, '@'))
-		return -EADDRNOTAVAIL;
-
-	fdt_for_each_subnode(node, fit, parent) {
-		ret = fdt_check_no_at(fit, node);
-		if (ret)
-			return ret;
-	}
-
-	return 0;
-}
-
-int fit_check_format(const void *fit, ulong size)
-{
-	int ret;
-
-	/* A FIT image must be a valid FDT */
-	ret = fdt_check_header(fit);
-	if (ret) {
-		log_debug("Wrong FIT format: not a flattened device tree (err=%d)\n",
-			  ret);
-		return -ENOEXEC;
-	}
-
-	if (CONFIG_IS_ENABLED(FIT_FULL_CHECK)) {
-		/*
-		 * If we are not given the size, make do with calculating it.
-		 * This is not as secure, so we should consider a flag to
-		 * control this.
-		 */
-		if (size == IMAGE_SIZE_INVAL)
-			size = fdt_totalsize(fit);
-		ret = fdt_check_full(fit, size);
-		if (ret)
-			ret = -EINVAL;
-
-		/*
-		 * U-Boot stopped using unit addressed in 2017. Since libfdt
-		 * can match nodes ignoring any unit address, signature
-		 * verification can see the wrong node if one is inserted with
-		 * the same name as a valid node but with a unit address
-		 * attached. Protect against this by disallowing unit addresses.
-		 */
-		if (!ret && CONFIG_IS_ENABLED(FIT_SIGNATURE)) {
-			ret = fdt_check_no_at(fit, 0);
-
-			if (ret) {
-				log_debug("FIT check error %d\n", ret);
-				return ret;
-			}
-		}
-		if (ret) {
-			log_debug("FIT check error %d\n", ret);
-			return ret;
-		}
-	}
 	/* mandatory / node 'description' property */
-	if (!fdt_getprop(fit, 0, FIT_DESC_PROP, NULL)) {
-		log_debug("Wrong FIT format: no description\n");
-		return -ENOMSG;
+	if (fdt_getprop(fit, 0, FIT_DESC_PROP, NULL) == NULL) {
+		debug("Wrong FIT format: no description\n");
+		return 0;
 	}
 
 	if (IMAGE_ENABLE_TIMESTAMP) {
 		/* mandatory / node 'timestamp' property */
-		if (!fdt_getprop(fit, 0, FIT_TIMESTAMP_PROP, NULL)) {
-			log_debug("Wrong FIT format: no timestamp\n");
-			return -ENODATA;
+		if (fdt_getprop(fit, 0, FIT_TIMESTAMP_PROP, NULL) == NULL) {
+			debug("Wrong FIT format: no timestamp\n");
+			return 0;
 		}
 	}
 
 	/* mandatory subimages parent '/images' node */
 	if (fdt_path_offset(fit, FIT_IMAGES_PATH) < 0) {
-		log_debug("Wrong FIT format: no images parent node\n");
-		return -ENOENT;
+		debug("Wrong FIT format: no images parent node\n");
+		return 0;
 	}
 
-	return 0;
+	return 1;
 }
 
+
 /**
  * fit_conf_find_compat
  * @fit: pointer to the FIT format image header
@@ -1887,13 +1816,10 @@
 	printf("## Loading %s from FIT Image at %08lx ...\n", prop_name, addr);
 
 	bootstage_mark(bootstage_id + BOOTSTAGE_SUB_FORMAT);
-	ret = fit_check_format(fit, IMAGE_SIZE_INVAL);
-	if (ret) {
-		printf("Bad FIT %s image format! (err=%d)\n", prop_name, ret);
-		if (CONFIG_IS_ENABLED(FIT_SIGNATURE) && ret == -EADDRNOTAVAIL)
-			printf("Signature checking prevents use of unit addresses (@) in nodes\n");
+	if (!fit_check_format(fit)) {
+		printf("Bad FIT %s image format!\n", prop_name);
 		bootstage_error(bootstage_id + BOOTSTAGE_SUB_FORMAT);
-		return ret;
+		return -ENOEXEC;
 	}
 	bootstage_mark(bootstage_id + BOOTSTAGE_SUB_FORMAT_OK);
 	if (fit_uname) {
@@ -1944,7 +1870,7 @@
 		fit_uname = fit_get_name(fit, noffset, NULL);
 	}
 	if (noffset < 0) {
-		printf("Could not find subimage node type '%s'\n", prop_name);
+		puts("Could not find subimage node\n");
 		bootstage_error(bootstage_id + BOOTSTAGE_SUB_SUBNODE);
 		return -ENOENT;
 	}
diff --git a/common/image-sig.c b/common/image-sig.c
index b757641..4f6b4ec 100644
--- a/common/image-sig.c
+++ b/common/image-sig.c
@@ -200,7 +200,7 @@
 		padding_name = RSA_DEFAULT_PADDING_NAME;
 
 	memset(info, '\0', sizeof(*info));
-	info->keyname = fdt_getprop(fit, noffset, FIT_KEY_HINT, NULL);
+	info->keyname = fdt_getprop(fit, noffset, "key-name-hint", NULL);
 	info->fit = (void *)fit;
 	info->node_offset = noffset;
 	info->name = algo_name;
@@ -311,7 +311,7 @@
 		const char *required;
 		int ret;
 
-		required = fdt_getprop(sig_blob, noffset, FIT_KEY_REQUIRED, NULL);
+		required = fdt_getprop(sig_blob, noffset, "required", NULL);
 		if (!required || strcmp(required, "image"))
 			continue;
 		ret = fit_image_verify_sig(fit, image_noffset, data, size,
@@ -330,39 +330,20 @@
 	return 0;
 }
 
-/**
- * fit_config_check_sig() - Check the signature of a config
- *
- * @fit: FIT to check
- * @noffset: Offset of configuration node (e.g. /configurations/conf-1)
- * @required_keynode:	Offset in the control FDT of the required key node,
- *			if any. If this is given, then the configuration wil not
- *			pass verification unless that key is used. If this is
- *			-1 then any signature will do.
- * @conf_noffset: Offset of the configuration subnode being checked (e.g.
- *	 /configurations/conf-1/kernel)
- * @err_msgp:		In the event of an error, this will be pointed to a
- *			help error string to display to the user.
- * @return 0 if all verified ok, <0 on error
- */
-static int fit_config_check_sig(const void *fit, int noffset,
-				int required_keynode, int conf_noffset,
-				char **err_msgp)
+int fit_config_check_sig(const void *fit, int noffset, int required_keynode,
+			 char **err_msgp)
 {
 	char * const exc_prop[] = {"data"};
 	const char *prop, *end, *name;
 	struct image_sign_info info;
 	const uint32_t *strings;
-	const char *config_name;
 	uint8_t *fit_value;
 	int fit_value_len;
-	bool found_config;
 	int max_regions;
 	int i, prop_len;
 	char path[200];
 	int count;
 
-	config_name = fit_get_name(fit, conf_noffset, NULL);
 	debug("%s: fdt=%p, conf='%s', sig='%s'\n", __func__, gd_fdt_blob(),
 	      fit_get_name(fit, noffset, NULL),
 	      fit_get_name(gd_fdt_blob(), required_keynode, NULL));
@@ -403,20 +384,9 @@
 	char *node_inc[count];
 
 	debug("Hash nodes (%d):\n", count);
-	found_config = false;
 	for (name = prop, i = 0; name < end; name += strlen(name) + 1, i++) {
 		debug("   '%s'\n", name);
 		node_inc[i] = (char *)name;
-		if (!strncmp(FIT_CONFS_PATH, name, strlen(FIT_CONFS_PATH)) &&
-		    name[sizeof(FIT_CONFS_PATH) - 1] == '/' &&
-		    !strcmp(name + sizeof(FIT_CONFS_PATH), config_name)) {
-			debug("      (found config node %s)", config_name);
-			found_config = true;
-		}
-	}
-	if (!found_config) {
-		*err_msgp = "Selected config not in hashed nodes";
-		return -1;
 	}
 
 	/*
@@ -484,7 +454,7 @@
 		if (!strncmp(name, FIT_SIG_NODENAME,
 			     strlen(FIT_SIG_NODENAME))) {
 			ret = fit_config_check_sig(fit, noffset, sig_offset,
-						   conf_noffset, &err_msg);
+						   &err_msg);
 			if (ret) {
 				puts("- ");
 			} else {
@@ -500,14 +470,13 @@
 		goto error;
 	}
 
-	if (verified)
-		return 0;
+	return verified ? 0 : -EPERM;
 
 error:
 	printf(" error!\n%s for '%s' hash node in '%s' config node\n",
 	       err_msg, fit_get_name(fit, noffset, NULL),
 	       fit_get_name(fit, conf_noffset, NULL));
-	return -EPERM;
+	return -1;
 }
 
 int fit_config_verify_required_sigs(const void *fit, int conf_noffset,
@@ -528,7 +497,7 @@
 		const char *required;
 		int ret;
 
-		required = fdt_getprop(sig_blob, noffset, FIT_KEY_REQUIRED, NULL);
+		required = fdt_getprop(sig_blob, noffset, "required", NULL);
 		if (!required || strcmp(required, "conf"))
 			continue;
 		ret = fit_config_verify_sig(fit, conf_noffset, sig_blob,
diff --git a/common/splash_source.c b/common/splash_source.c
index 9467def..62763b9 100644
--- a/common/splash_source.c
+++ b/common/splash_source.c
@@ -329,10 +329,10 @@
 	if (res < 0)
 		return res;
 
-	res = fit_check_format(fit_header, IMAGE_SIZE_INVAL);
-	if (res) {
+	res = fit_check_format(fit_header);
+	if (!res) {
 		debug("Could not find valid FIT image\n");
-		return res;
+		return -EINVAL;
 	}
 
 	node_offset = fit_image_get_node(fit_header, location->name);
diff --git a/common/update.c b/common/update.c
index 42950ed..f237ea5 100644
--- a/common/update.c
+++ b/common/update.c
@@ -280,7 +280,7 @@
 got_update_file:
 	fit = (void *)addr;
 
-	if (fit_check_format((void *)fit, IMAGE_SIZE_INVAL)) {
+	if (!fit_check_format((void *)fit)) {
 		printf("Bad FIT format of the update file, aborting "
 							"auto-update\n");
 		return 1;
diff --git a/disk/part_dos.c b/disk/part_dos.c
index b26a33b..c25c3f0 100644
--- a/disk/part_dos.c
+++ b/disk/part_dos.c
@@ -23,11 +23,6 @@
 
 #define DOS_PART_DEFAULT_SECTOR 512
 
-/* should this be configurable? It looks like it's not very common at all
- * to use large numbers of partitions
- */
-#define MAX_EXT_PARTS 256
-
 /* Convert char[4] in little endian format to the host format integer
  */
 static inline unsigned int le32_to_int(unsigned char *le32)
@@ -132,12 +127,6 @@
 	dos_partition_t *pt;
 	int i;
 
-	/* set a maximum recursion level */
-	if (part_num > MAX_EXT_PARTS) {
-		printf("** Nested DOS partitions detected, stopping **\n");
-		return;
-	}
-
 	if (blk_dread(dev_desc, ext_part_sector, 1, (ulong *)buffer) != 1) {
 		printf ("** Can't read partition table on %d:" LBAFU " **\n",
 			dev_desc->devnum, ext_part_sector);
@@ -203,12 +192,6 @@
 	int i;
 	int dos_type;
 
-	/* set a maximum recursion level */
-	if (part_num > MAX_EXT_PARTS) {
-		printf("** Nested DOS partitions detected, stopping **\n");
-		return -1;
-	}
-
 	if (blk_dread(dev_desc, ext_part_sector, 1, (ulong *)buffer) != 1) {
 		printf ("** Can't read partition table on %d:" LBAFU " **\n",
 			dev_desc->devnum, ext_part_sector);
diff --git a/drivers/amlogic/media/vout/hdmitx/hdmitx20/hdmitx_drv.c b/drivers/amlogic/media/vout/hdmitx/hdmitx20/hdmitx_drv.c
index 49e80c5..5323753 100644
--- a/drivers/amlogic/media/vout/hdmitx/hdmitx20/hdmitx_drv.c
+++ b/drivers/amlogic/media/vout/hdmitx/hdmitx20/hdmitx_drv.c
@@ -964,12 +964,6 @@
 
 	hdmitx_wr_reg(HDMITX_DWC_FC_AVICONF1, 0x8);
 	hdmitx_wr_reg(HDMITX_DWC_FC_AVICONF2, 0);
-	/* refer to 861-H, Page 83, A Source shall always explicitly signal
-	 * the RGB Quantization Range as either Limited Range (Q=1)or Full
-	 * Range (Q=2).
-	 */
-	if (output_color_format == HDMI_COLOR_FORMAT_RGB)
-		hdmitx_set_reg_bits(HDMITX_DWC_FC_AVICONF2, 1, 2, 2);
 
 	/* set Aspect Ratio in AVIInfo */
 	switch (para->vic) {
diff --git a/drivers/fastboot/fb_getvar.c b/drivers/fastboot/fb_getvar.c
index 90ee314..3b5a24e 100644
--- a/drivers/fastboot/fb_getvar.c
+++ b/drivers/fastboot/fb_getvar.c
@@ -253,10 +253,23 @@
 
 static void getvar_super_partition_name(char *var_parameter, char *response)
 {
+	char *slot_name;
+	slot_name = env_get("slot-suffixes");
+	char name[64];
+	if (has_boot_slot == 0) {
+		strncpy(name, "super-partition-name: super", 64);
+	} else {
+		printf("slot-suffixes: %s\n", slot_name);
+		if (strcmp(slot_name, "0") == 0) {
+			strncpy(name, "super-partition-name: super_a", 64);
+		} else if (strcmp(slot_name, "1") == 0) {
+			strncpy(name, "super-partition-name: super_b", 64);
+		}
+	}
 	if (busy_flag == 1)
-		fastboot_busy("super-partition-name: super", response);
+		fastboot_busy(name, response);
 	else
-		fastboot_okay("super", response);
+		fastboot_okay(name, response);
 }
 
 static void getvar_is_logical(char *var_parameter, char *response)
diff --git a/drivers/net/fsl-mc/mc.c b/drivers/net/fsl-mc/mc.c
index 87dfddb..b245fbc 100644
--- a/drivers/net/fsl-mc/mc.c
+++ b/drivers/net/fsl-mc/mc.c
@@ -129,7 +129,7 @@
 		return -EINVAL;
 	}
 
-	if (fit_check_format(fit_hdr, IMAGE_SIZE_INVAL)) {
+	if (!fit_check_format(fit_hdr)) {
 		printf("fsl-mc: ERR: Bad firmware image (bad FIT header)\n");
 		return -EINVAL;
 	}
diff --git a/drivers/net/pfe_eth/pfe_firmware.c b/drivers/net/pfe_eth/pfe_firmware.c
index 7b930ec..adb2d06 100644
--- a/drivers/net/pfe_eth/pfe_firmware.c
+++ b/drivers/net/pfe_eth/pfe_firmware.c
@@ -150,7 +150,7 @@
 		return ret;
 	}
 
-	if (fit_check_format(pfe_fit_addr, IMAGE_SIZE_INVAL)) {
+	if (!fit_check_format(pfe_fit_addr)) {
 		printf("PFE Firmware: Bad firmware image (bad FIT header)\n");
 		ret = -1;
 		return ret;
diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c
index 1d70444..67e2471 100644
--- a/fs/ext4/ext4_common.c
+++ b/fs/ext4/ext4_common.c
@@ -510,8 +510,7 @@
 
 restart_read:
 	/* read the block no allocated to a file */
-	first_block_no_of_root = read_allocated_block(g_parent_inode, blk_idx,
-						      NULL);
+	first_block_no_of_root = read_allocated_block(g_parent_inode, blk_idx);
 	if (first_block_no_of_root <= 0)
 		goto fail;
 
@@ -647,7 +646,7 @@
 
 	/* get the block no allocated to a file */
 	for (blk_idx = 0; blk_idx < directory_blocks; blk_idx++) {
-		blknr = read_allocated_block(parent_inode, blk_idx, NULL);
+		blknr = read_allocated_block(parent_inode, blk_idx);
 		if (blknr <= 0)
 			goto fail;
 
@@ -944,7 +943,7 @@
 
 	/* read the block no allocated to a file */
 	for (blk_idx = 0; blk_idx < directory_blocks; blk_idx++) {
-		blknr = read_allocated_block(g_parent_inode, blk_idx, NULL);
+		blknr = read_allocated_block(g_parent_inode, blk_idx);
 		if (blknr <= 0)
 			break;
 		inodeno = unlink_filename(filename, blknr);
@@ -1523,7 +1522,7 @@
 #endif
 
 static struct ext4_extent_header *ext4fs_get_extent_block
-	(struct ext2_data *data, struct ext_block_cache *cache,
+	(struct ext2_data *data, char *buf,
 		struct ext4_extent_header *ext_block,
 		uint32_t fileblock, int log2_blksz)
 {
@@ -1552,10 +1551,12 @@
 
 		block = le16_to_cpu(index[i].ei_leaf_hi);
 		block = (block << 32) + le32_to_cpu(index[i].ei_leaf_lo);
-		block <<= log2_blksz;
-		if (!ext_cache_read(cache, (lbaint_t)block, blksz))
+
+		if (ext4fs_devread((lbaint_t)block << log2_blksz, 0, blksz,
+				   buf))
+			ext_block = (struct ext4_extent_header *)buf;
+		else
 			return NULL;
-		ext_block = (struct ext4_extent_header *)cache->buf;
 	}
 }
 
@@ -1583,7 +1584,7 @@
 
 int ext4fs_read_inode(struct ext2_data *data, int ino, struct ext2_inode *inode)
 {
-	struct ext2_block_group *blkgrp;
+	struct ext2_block_group blkgrp;
 	struct ext2_sblock *sblock = &data->sblock;
 	struct ext_filesystem *fs = get_fs();
 	int log2blksz = get_fs()->dev_desc->log2blksz;
@@ -1591,28 +1592,17 @@
 	long int blkno;
 	unsigned int blkoff;
 
-	/* Allocate blkgrp based on gdsize (for 64-bit support). */
-	blkgrp = zalloc(get_fs()->gdsize);
-	if (!blkgrp)
-		return 0;
-
 	/* It is easier to calculate if the first inode is 0. */
 	ino--;
 	status = ext4fs_blockgroup(data, ino / le32_to_cpu
-				   (sblock->inodes_per_group), blkgrp);
-	if (status == 0) {
-		free(blkgrp);
+				   (sblock->inodes_per_group), &blkgrp);
+	if (status == 0)
 		return 0;
-	}
 
 	inodes_per_block = EXT2_BLOCK_SIZE(data) / fs->inodesz;
-	blkno = ext4fs_bg_get_inode_table_id(blkgrp, fs) +
+	blkno = ext4fs_bg_get_inode_table_id(&blkgrp, fs) +
 	    (ino % le32_to_cpu(sblock->inodes_per_group)) / inodes_per_block;
 	blkoff = (ino % inodes_per_block) * fs->inodesz;
-
-	/* Free blkgrp as it is no longer required. */
-	free(blkgrp);
-
 	/* Read the inode. */
 	status = ext4fs_devread((lbaint_t)blkno << (LOG2_BLOCK_SIZE(data) -
 				log2blksz), blkoff,
@@ -1623,8 +1613,7 @@
 	return 1;
 }
 
-long int read_allocated_block(struct ext2_inode *inode, int fileblock,
-			      struct ext_block_cache *cache)
+long int read_allocated_block(struct ext2_inode *inode, int fileblock)
 {
 	long int blknr;
 	int blksz;
@@ -1641,26 +1630,20 @@
 
 	if (le32_to_cpu(inode->flags) & EXT4_EXTENTS_FL) {
 		long int startblock, endblock;
-		struct ext_block_cache *c, cd;
+		char *buf = zalloc(blksz);
+		if (!buf)
+			return -ENOMEM;
 		struct ext4_extent_header *ext_block;
 		struct ext4_extent *extent;
 		int i;
-
-		if (cache) {
-			c = cache;
-		} else {
-			c = &cd;
-			ext_cache_init(c);
-		}
 		ext_block =
-			ext4fs_get_extent_block(ext4fs_root, c,
+			ext4fs_get_extent_block(ext4fs_root, buf,
 						(struct ext4_extent_header *)
 						inode->b.blocks.dir_blocks,
 						fileblock, log2_blksz);
 		if (!ext_block) {
 			printf("invalid extent block\n");
-			if (!cache)
-				ext_cache_fini(c);
+			free(buf);
 			return -EINVAL;
 		}
 
@@ -1672,22 +1655,19 @@
 
 			if (startblock > fileblock) {
 				/* Sparse file */
-				if (!cache)
-					ext_cache_fini(c);
+				free(buf);
 				return 0;
 
 			} else if (fileblock < endblock) {
 				start = le16_to_cpu(extent[i].ee_start_hi);
 				start = (start << 32) +
 					le32_to_cpu(extent[i].ee_start_lo);
-				if (!cache)
-					ext_cache_fini(c);
+				free(buf);
 				return (fileblock - startblock) + start;
 			}
 		}
 
-		if (!cache)
-			ext_cache_fini(c);
+		free(buf);
 		return 0;
 	}
 
diff --git a/fs/ext4/ext4_journal.c b/fs/ext4/ext4_journal.c
index 6adbab9..148593d 100644
--- a/fs/ext4/ext4_journal.c
+++ b/fs/ext4/ext4_journal.c
@@ -347,7 +347,7 @@
 	ext4fs_read_inode(ext4fs_root, EXT2_JOURNAL_INO,
 			  (struct ext2_inode *)&inode_journal);
 	blknr = read_allocated_block((struct ext2_inode *)
-				     &inode_journal, i, NULL);
+				     &inode_journal, i);
 	ext4fs_devread((lbaint_t)blknr * fs->sect_perblk, 0, fs->blksz,
 		       temp_buff);
 	p_jdb = (char *)temp_buff;
@@ -372,7 +372,7 @@
 				be32_to_cpu(jdb->h_sequence)) == 0)
 				continue;
 		}
-		blknr = read_allocated_block(&inode_journal, i, NULL);
+		blknr = read_allocated_block(&inode_journal, i);
 		ext4fs_devread((lbaint_t)blknr * fs->sect_perblk, 0,
 			       fs->blksz, metadata_buff);
 		put_ext4((uint64_t)((uint64_t)be32_to_cpu(tag->block) * (uint64_t)fs->blksz),
@@ -419,8 +419,7 @@
 	}
 
 	ext4fs_read_inode(ext4fs_root, EXT2_JOURNAL_INO, &inode_journal);
-	blknr = read_allocated_block(&inode_journal, EXT2_JOURNAL_SUPERBLOCK,
-				     NULL);
+	blknr = read_allocated_block(&inode_journal, EXT2_JOURNAL_SUPERBLOCK);
 	ext4fs_devread((lbaint_t)blknr * fs->sect_perblk, 0, fs->blksz,
 		       temp_buff);
 	jsb = (struct journal_superblock_t *) temp_buff;
@@ -444,7 +443,7 @@
 
 	i = be32_to_cpu(jsb->s_first);
 	while (1) {
-		blknr = read_allocated_block(&inode_journal, i, NULL);
+		blknr = read_allocated_block(&inode_journal, i);
 		memset(temp_buff1, '\0', fs->blksz);
 		ext4fs_devread((lbaint_t)blknr * fs->sect_perblk,
 			       0, fs->blksz, temp_buff1);
@@ -538,7 +537,7 @@
 		ext4_read_superblock((char *)fs->sb);
 
 		blknr = read_allocated_block(&inode_journal,
-					 EXT2_JOURNAL_SUPERBLOCK, NULL);
+					 EXT2_JOURNAL_SUPERBLOCK);
 		put_ext4((uint64_t) ((uint64_t)blknr * (uint64_t)fs->blksz),
 			 (struct journal_superblock_t *)temp_buff,
 			 (uint32_t) fs->blksz);
@@ -567,7 +566,7 @@
 
 	ext4fs_read_inode(ext4fs_root, EXT2_JOURNAL_INO, &inode_journal);
 	jsb_blknr = read_allocated_block(&inode_journal,
-					 EXT2_JOURNAL_SUPERBLOCK, NULL);
+					 EXT2_JOURNAL_SUPERBLOCK);
 	ext4fs_devread((lbaint_t)jsb_blknr * fs->sect_perblk, 0, fs->blksz,
 		       temp_buff);
 	jsb = (struct journal_superblock_t *) temp_buff;
@@ -619,7 +618,7 @@
 	ext4fs_read_inode(ext4fs_root, EXT2_JOURNAL_INO,
 			  &inode_journal);
 	jsb_blknr = read_allocated_block(&inode_journal,
-					 EXT2_JOURNAL_SUPERBLOCK, NULL);
+					 EXT2_JOURNAL_SUPERBLOCK);
 	ext4fs_devread((lbaint_t)jsb_blknr * fs->sect_perblk, 0, fs->blksz,
 		       temp_buff);
 	jsb = (struct journal_superblock_t *) temp_buff;
@@ -646,17 +645,16 @@
 	long int blknr;
 	int i;
 	ext4fs_read_inode(ext4fs_root, EXT2_JOURNAL_INO, &inode_journal);
-	blknr = read_allocated_block(&inode_journal, jrnl_blk_idx++, NULL);
+	blknr = read_allocated_block(&inode_journal, jrnl_blk_idx++);
 	update_descriptor_block(blknr);
 	for (i = 0; i < MAX_JOURNAL_ENTRIES; i++) {
 		if (journal_ptr[i]->blknr == -1)
 			break;
-		blknr = read_allocated_block(&inode_journal, jrnl_blk_idx++,
-					     NULL);
+		blknr = read_allocated_block(&inode_journal, jrnl_blk_idx++);
 		put_ext4((uint64_t) ((uint64_t)blknr * (uint64_t)fs->blksz),
 			 journal_ptr[i]->buf, fs->blksz);
 	}
-	blknr = read_allocated_block(&inode_journal, jrnl_blk_idx++, NULL);
+	blknr = read_allocated_block(&inode_journal, jrnl_blk_idx++);
 	update_commit_block(blknr);
 	printf("update journal finished\n");
 }
diff --git a/fs/ext4/ext4_write.c b/fs/ext4/ext4_write.c
index 8615689..a7f543f 100644
--- a/fs/ext4/ext4_write.c
+++ b/fs/ext4/ext4_write.c
@@ -479,7 +479,7 @@
 
 	/* release data blocks */
 	for (i = 0; i < no_blocks; i++) {
-		blknr = read_allocated_block(&inode, i, NULL);
+		blknr = read_allocated_block(&inode, i);
 		if (blknr == 0)
 			continue;
 		if (blknr < 0)
@@ -695,7 +695,7 @@
 		ext4fs_read_inode(ext4fs_root, EXT2_JOURNAL_INO,
 				  &inode_journal);
 		blknr = read_allocated_block(&inode_journal,
-					EXT2_JOURNAL_SUPERBLOCK, NULL);
+					EXT2_JOURNAL_SUPERBLOCK);
 		ext4fs_devread((lbaint_t)blknr * fs->sect_perblk, 0, fs->blksz,
 			       temp_buff);
 		jsb = (struct journal_superblock_t *)temp_buff;
@@ -776,7 +776,7 @@
 		long int blknr;
 		int blockend = fs->blksz;
 		int skipfirst = 0;
-		blknr = read_allocated_block(file_inode, i, NULL);
+		blknr = read_allocated_block(file_inode, i);
 		if (blknr <= 0)
 			return -1;
 
diff --git a/fs/ext4/ext4fs.c b/fs/ext4/ext4fs.c
index 4624042..2a28031 100644
--- a/fs/ext4/ext4fs.c
+++ b/fs/ext4/ext4fs.c
@@ -61,21 +61,15 @@
 	lbaint_t delayed_skipfirst = 0;
 	lbaint_t delayed_next = 0;
 	char *delayed_buf = NULL;
-	char *start_buf = buf;
 	short status;
-	struct ext_block_cache cache;
 
-	ext_cache_init(&cache);
+	if (blocksize <= 0)
+		return -1;
 
 	/* Adjust len so it we can't read past the end of the file. */
 	if (len + pos > filesize)
 		len = (filesize - pos);
 
-	if (blocksize <= 0 || len <= 0) {
-		ext_cache_fini(&cache);
-		return -1;
-	}
-
 	blockcnt = lldiv(((len + pos) + blocksize - 1), blocksize);
 
 	for (i = lldiv(pos, blocksize); i < blockcnt; i++) {
@@ -83,11 +77,9 @@
 		int blockoff = pos - (blocksize * i);
 		int blockend = blocksize;
 		int skipfirst = 0;
-		blknr = read_allocated_block(&node->inode, i, &cache);
-		if (blknr < 0) {
-			ext_cache_fini(&cache);
+		blknr = read_allocated_block(&(node->inode), i);
+		if (blknr < 0)
 			return -1;
-		}
 
 		blknr = blknr << log2_fs_blocksize;
 
@@ -117,10 +109,8 @@
 							delayed_skipfirst,
 							delayed_extent,
 							delayed_buf);
-					if (status == 0) {
-						ext_cache_fini(&cache);
+					if (status == 0)
 						return -1;
-					}
 					previous_block_number = blknr;
 					delayed_start = blknr;
 					delayed_extent = blockend;
@@ -140,24 +130,20 @@
 			}
 		} else {
 			int n;
-			int n_left;
 			if (previous_block_number != -1) {
 				/* spill */
 				status = ext4fs_devread(delayed_start,
 							delayed_skipfirst,
 							delayed_extent,
 							delayed_buf);
-				if (status == 0) {
-					ext_cache_fini(&cache);
+				if (status == 0)
 					return -1;
-				}
 				previous_block_number = -1;
 			}
 			/* Zero no more than `len' bytes. */
 			n = blocksize - skipfirst;
-			n_left = len - (buf - start_buf);
-			if (n > n_left)
-				n = n_left;
+			if (n > len)
+				n = len;
 			memset(buf, 0, n);
 		}
 		buf += blocksize - skipfirst;
@@ -167,15 +153,12 @@
 		status = ext4fs_devread(delayed_start,
 					delayed_skipfirst, delayed_extent,
 					delayed_buf);
-		if (status == 0) {
-			ext_cache_fini(&cache);
+		if (status == 0)
 			return -1;
-		}
 		previous_block_number = -1;
 	}
 
 	*actread  = len;
-	ext_cache_fini(&cache);
 	return 0;
 }
 
@@ -269,32 +252,3 @@
 	return -ENOSYS;
 #endif
 }
-
-void ext_cache_init(struct ext_block_cache *cache)
-{
-	memset(cache, 0, sizeof(*cache));
-}
-
-void ext_cache_fini(struct ext_block_cache *cache)
-{
-	free(cache->buf);
-	ext_cache_init(cache);
-}
-
-int ext_cache_read(struct ext_block_cache *cache, lbaint_t block, int size)
-{
-	/* This could be more lenient, but this is simple and enough for now */
-	if (cache->buf && cache->block == block && cache->size == size)
-		return 1;
-	ext_cache_fini(cache);
-	cache->buf = malloc(size);
-	if (!cache->buf)
-		return 0;
-	if (!ext4fs_devread(block, 0, size, cache->buf)) {
-		free(cache->buf);
-		return 0;
-	}
-	cache->block = block;
-	cache->size = size;
-	return 1;
-}
diff --git a/fs/fs.c b/fs/fs.c
index 7fd2210..cb26517 100644
--- a/fs/fs.c
+++ b/fs/fs.c
@@ -429,57 +429,13 @@
 	return ret;
 }
 
-#ifdef CONFIG_LMB
-/* Check if a file may be read to the given address */
-static int fs_read_lmb_check(const char *filename, ulong addr, loff_t offset,
-			     loff_t len, struct fstype_info *info)
-{
-	struct lmb lmb;
-	int ret;
-	loff_t size;
-	loff_t read_len;
-
-	/* get the actual size of the file */
-	ret = info->size(filename, &size);
-	if (ret)
-		return ret;
-	if (offset >= size) {
-		/* offset >= EOF, no bytes will be written */
-		return 0;
-	}
-	read_len = size - offset;
-
-	/* limit to 'len' if it is smaller */
-	if (len && len < read_len)
-		read_len = len;
-
-	lmb_init_and_reserve(&lmb, gd->bd->bi_dram[0].start,
-			     gd->bd->bi_dram[0].size, (void *)gd->fdt_blob);
-	lmb_dump_all(&lmb);
-
-	if (lmb_alloc_addr(&lmb, addr, read_len) == addr)
-		return 0;
-
-	printf("** Reading file would overwrite reserved memory **\n");
-	return -ENOSPC;
-}
-#endif
-
-static int _fs_read(const char *filename, ulong addr, loff_t offset, loff_t len,
-		    int do_lmb_check, loff_t *actread)
+int fs_read(const char *filename, ulong addr, loff_t offset, loff_t len,
+	    loff_t *actread)
 {
 	struct fstype_info *info = fs_get_info(fs_type);
 	void *buf;
 	int ret;
 
-#ifdef CONFIG_LMB
-	if (do_lmb_check) {
-		ret = fs_read_lmb_check(filename, addr, offset, len, info);
-		if (ret)
-			return ret;
-	}
-#endif
-
 	/*
 	 * We don't actually know how many bytes are being read, since len==0
 	 * means read the whole file.
@@ -496,12 +452,6 @@
 	return ret;
 }
 
-int fs_read(const char *filename, ulong addr, loff_t offset, loff_t len,
-	    loff_t *actread)
-{
-	return _fs_read(filename, addr, offset, len, 0, actread);
-}
-
 int fs_write(const char *filename, ulong addr, loff_t offset, loff_t len,
 	     loff_t *actwrite)
 {
@@ -672,7 +622,7 @@
 		pos = 0;
 
 	time = get_timer(0);
-	ret = _fs_read(filename, addr, pos, bytes, 1, &len_read);
+	ret = fs_read(filename, addr, pos, bytes, &len_read);
 	time = get_timer(time);
 	if (ret < 0)
 		return 1;
diff --git a/include/ext4fs.h b/include/ext4fs.h
index bed4bee..bb55639 100644
--- a/include/ext4fs.h
+++ b/include/ext4fs.h
@@ -116,12 +116,6 @@
 	struct blk_desc *dev_desc;
 };
 
-struct ext_block_cache {
-	char *buf;
-	lbaint_t block;
-	int size;
-};
-
 extern struct ext2_data *ext4fs_root;
 extern struct ext2fs_node *ext4fs_file;
 
@@ -151,15 +145,11 @@
 void ext4fs_free_node(struct ext2fs_node *node, struct ext2fs_node *currroot);
 int ext4fs_devread(lbaint_t sector, int byte_offset, int byte_len, char *buf);
 void ext4fs_set_blk_dev(struct blk_desc *rbdd, disk_partition_t *info);
-long int read_allocated_block(struct ext2_inode *inode, int fileblock,
-			      struct ext_block_cache *cache);
+long int read_allocated_block(struct ext2_inode *inode, int fileblock);
 int ext4fs_probe(struct blk_desc *fs_dev_desc,
 		 disk_partition_t *fs_partition);
 int ext4_read_file(const char *filename, void *buf, loff_t offset, loff_t len,
 		   loff_t *actread);
 int ext4_read_superblock(char *buffer);
 int ext4fs_uuid(char *uuid_str);
-void ext_cache_init(struct ext_block_cache *cache);
-void ext_cache_fini(struct ext_block_cache *cache);
-int ext_cache_read(struct ext_block_cache *cache, lbaint_t block, int size);
 #endif
diff --git a/include/image.h b/include/image.h
index 43de407..2027f01 100644
--- a/include/image.h
+++ b/include/image.h
@@ -113,9 +113,6 @@
 # define IMAGE_OF_SYSTEM_SETUP	0
 #endif
 
-/* An invalid size, meaning that the image size is not known */
-#define IMAGE_SIZE_INVAL	(-1UL)
-
 enum ih_category {
 	IH_ARCH,
 	IH_COMP,
@@ -912,8 +909,6 @@
 #define FIT_VALUE_PROP		"value"
 #define FIT_IGNORE_PROP		"uboot-ignore"
 #define FIT_SIG_NODENAME	"signature"
-#define FIT_KEY_REQUIRED	"required"
-#define FIT_KEY_HINT		"key-name-hint"
 
 /* image node */
 #define FIT_DATA_PROP		"data"
@@ -1047,23 +1042,7 @@
 int fit_image_check_arch(const void *fit, int noffset, uint8_t arch);
 int fit_image_check_type(const void *fit, int noffset, uint8_t type);
 int fit_image_check_comp(const void *fit, int noffset, uint8_t comp);
-
-/**
- * fit_check_format() - Check that the FIT is valid
- *
- * This performs various checks on the FIT to make sure it is suitable for
- * use, looking for mandatory properties, nodes, etc.
- *
- * If FIT_FULL_CHECK is enabled, it also runs it through libfdt to make
- * sure that there are no strange tags or broken nodes in the FIT.
- *
- * @fit: pointer to the FIT format image header
- * @return 0 if OK, -ENOEXEC if not an FDT file, -EINVAL if the full FDT check
- *	failed (e.g. due to bad structure), -ENOMSG if the description is
- *	missing, -ENODATA if the timestamp is missing, -ENOENT if the /images
- *	path is missing
- */
-int fit_check_format(const void *fit, ulong size);
+int fit_check_format(const void *fit);
 
 int fit_conf_find_compat(const void *fit, const void *fdt);
 int fit_conf_get_node(const void *fit, const char *conf_uname);
diff --git a/include/lmb.h b/include/lmb.h
index c97210d..f04d058 100644
--- a/include/lmb.h
+++ b/include/lmb.h
@@ -31,8 +31,6 @@
 extern struct lmb lmb;
 
 extern void lmb_init(struct lmb *lmb);
-extern void lmb_init_and_reserve(struct lmb *lmb, phys_addr_t base,
-				 phys_size_t size, void *fdt_blob);
 extern long lmb_add(struct lmb *lmb, phys_addr_t base, phys_size_t size);
 extern long lmb_reserve(struct lmb *lmb, phys_addr_t base, phys_size_t size);
 extern phys_addr_t lmb_alloc(struct lmb *lmb, phys_size_t size, ulong align);
@@ -54,8 +52,6 @@
 void board_lmb_reserve(struct lmb *lmb);
 void arch_lmb_reserve(struct lmb *lmb);
 
-phys_addr_t lmb_alloc_addr(struct lmb *lmb, phys_addr_t base, phys_size_t size);
-
 #endif /* __KERNEL__ */
 
 #endif /* _LINUX_LMB_H */
diff --git a/lib/libfdt/fdt_region.c b/lib/libfdt/fdt_region.c
index d52facc..7e9fa92 100644
--- a/lib/libfdt/fdt_region.c
+++ b/lib/libfdt/fdt_region.c
@@ -13,7 +13,6 @@
 #else
 #include "fdt_host.h"
 #endif
-#include <linux/kconfig.h>
 
 #define FDT_MAX_DEPTH	32
 
@@ -42,7 +41,6 @@
 	int depth = -1;
 	int want = 0;
 	int base = fdt_off_dt_struct(fdt);
-	int expect_end = 0;
 
 	end = path;
 	*end = '\0';
@@ -59,10 +57,6 @@
 		tag = fdt_next_tag(fdt, offset, &nextoffset);
 		stop_at = nextoffset;
 
-		/* If we see two root nodes, something is wrong */
-		if (expect_end && tag != FDT_END)
-			return -FDT_ERR_BADLAYOUT;
-
 		switch (tag) {
 		case FDT_PROP:
 			include = want >= 2;
@@ -83,10 +77,6 @@
 			if (depth == FDT_MAX_DEPTH)
 				return -FDT_ERR_BADSTRUCTURE;
 			name = fdt_get_name(fdt, offset, &len);
-
-			/* The root node must have an empty name */
-			if (!depth && *name)
-				return -FDT_ERR_BADLAYOUT;
 			if (end - path + 2 + len >= path_len)
 				return -FDT_ERR_NOSPACE;
 			if (end != path + 1)
@@ -114,8 +104,6 @@
 			while (end > path && *--end != '/')
 				;
 			*end = '\0';
-			if (depth == -1)
-				expect_end = 1;
 			break;
 
 		case FDT_END:
diff --git a/lib/lmb.c b/lib/lmb.c
index cb247f6..1705417 100644
--- a/lib/lmb.c
+++ b/lib/lmb.c
@@ -104,19 +104,6 @@
 	lmb->reserved.size = 0;
 }
 
-/* Initialize the struct, add memory and call arch/board reserve functions */
-void lmb_init_and_reserve(struct lmb *lmb, phys_addr_t base, phys_size_t size,
-			  void *fdt_blob)
-{
-	lmb_init(lmb);
-	lmb_add(lmb, base, size);
-	arch_lmb_reserve(lmb);
-	board_lmb_reserve(lmb);
-
-	if (IMAGE_ENABLE_OF_LIBFDT && fdt_blob)
-		boot_fdt_add_mem_rsv_regions(lmb, fdt_blob);
-}
-
 /* This routine called with relocation disabled. */
 static long lmb_add_region(struct lmb_region *rgn, phys_addr_t base, phys_size_t size)
 {
@@ -356,29 +343,3 @@
 {
 	/* please define platform specific arch_lmb_reserve() */
 }
-
-/*
- * Try to allocate a specific address range: must be in defined memory but not
- * reserved
- */
-phys_addr_t lmb_alloc_addr(struct lmb *lmb, phys_addr_t base, phys_size_t size)
-{
-	long rgn;
-
-	/* Check if the requested address is in one of the memory regions */
-	rgn = lmb_overlaps_region(&lmb->memory, base, size);
-	if (rgn >= 0) {
-		/*
-		 * Check if the requested end address is in the same memory
-		 * region we found.
-		 */
-		if (lmb_addrs_overlap(lmb->memory.region[rgn].base,
-				      lmb->memory.region[rgn].size,
-				      base + size - 1, 1)) {
-			/* ok, reserve the memory */
-			if (lmb_reserve(lmb, base, size) >= 0)
-				return base;
-		}
-	}
-	return 0;
-}
diff --git a/lib/rsa/rsa-sign.c b/lib/rsa/rsa-sign.c
index 8af2c8b..fb5e07b 100644
--- a/lib/rsa/rsa-sign.c
+++ b/lib/rsa/rsa-sign.c
@@ -773,7 +773,7 @@
 	}
 
 	if (!ret) {
-		ret = fdt_setprop_string(keydest, node, FIT_KEY_HINT,
+		ret = fdt_setprop_string(keydest, node, "key-name-hint",
 				 info->keyname);
 	}
 	if (!ret)
@@ -796,7 +796,7 @@
 					 info->name);
 	}
 	if (!ret && info->require_keys) {
-		ret = fdt_setprop_string(keydest, node, FIT_KEY_REQUIRED,
+		ret = fdt_setprop_string(keydest, node, "required",
 					 info->require_keys);
 	}
 done:
diff --git a/lib/uuid.c b/lib/uuid.c
index 468d807..d1bd330 100644
--- a/lib/uuid.c
+++ b/lib/uuid.c
@@ -239,8 +239,6 @@
 	unsigned int *ptr = (unsigned int *)&uuid;
 	int i;
 
-	srand(get_ticks() + rand());
-
 	/* Set all fields randomly */
 	for (i = 0; i < sizeof(struct uuid) / sizeof(*ptr); i++)
 		*(ptr + i) = cpu_to_be32(rand());
diff --git a/net/net.c b/net/net.c
index 5e2d39d..644c550 100644
--- a/net/net.c
+++ b/net/net.c
@@ -1269,9 +1269,6 @@
 			return;
 		}
 
-		if (ntohs(ip->udp_len) < UDP_HDR_SIZE || ntohs(ip->udp_len) > ntohs(ip->ip_len))
-			return;
-
 		debug_cond(DEBUG_DEV_PKT,
 			   "received UDP (to=%pI4, from=%pI4, len=%d)\n",
 			   &dst_ip, &src_ip, len);
diff --git a/scripts/dtc/libfdt/fdt_ro.c b/scripts/dtc/libfdt/fdt_ro.c
index 971bbe3..dfb3236 100644
--- a/scripts/dtc/libfdt/fdt_ro.c
+++ b/scripts/dtc/libfdt/fdt_ro.c
@@ -140,10 +140,6 @@
 	do {
 		tag = fdt_next_tag(fdt, offset, &nextoffset);
 
-		/* If we see two root nodes, something is wrong */
-		if (expect_end && tag != FDT_END)
-			return -FDT_ERR_BADLAYOUT;
-
 		switch (tag) {
 		case FDT_END:
 			if (nextoffset >= 0)
diff --git a/scripts/dtc/libfdt/libfdt.h b/scripts/dtc/libfdt/libfdt.h
index 6b4ebd4..fd73688 100644
--- a/scripts/dtc/libfdt/libfdt.h
+++ b/scripts/dtc/libfdt/libfdt.h
@@ -280,8 +280,6 @@
  */
 int fdt_move(const void *fdt, void *buf, int bufsize);
 
-int fdt_check_full(const void *fdt, size_t bufsize);
-
 /**********************************************************************/
 /* Read-only functions                                                */
 /**********************************************************************/
diff --git a/test/py/tests/test_fit.py b/test/py/tests/test_fit.py
index 839dcf9..49d6fea 100755
--- a/test/py/tests/test_fit.py
+++ b/test/py/tests/test_fit.py
@@ -19,7 +19,7 @@
         #address-cells = <1>;
 
         images {
-                kernel-1 {
+                kernel@1 {
                         data = /incbin/("%(kernel)s");
                         type = "kernel";
                         arch = "sandbox";
@@ -28,7 +28,7 @@
                         load = <0x40000>;
                         entry = <0x8>;
                 };
-                kernel-2 {
+                kernel@2 {
                         data = /incbin/("%(loadables1)s");
                         type = "kernel";
                         arch = "sandbox";
@@ -37,19 +37,19 @@
                         %(loadables1_load)s
                         entry = <0x0>;
                 };
-                fdt-1 {
+                fdt@1 {
                         description = "snow";
                         data = /incbin/("u-boot.dtb");
                         type = "flat_dt";
                         arch = "sandbox";
                         %(fdt_load)s
                         compression = "none";
-                        signature-1 {
+                        signature@1 {
                                 algo = "sha1,rsa2048";
                                 key-name-hint = "dev";
                         };
                 };
-                ramdisk-1 {
+                ramdisk@1 {
                         description = "snow";
                         data = /incbin/("%(ramdisk)s");
                         type = "ramdisk";
@@ -58,7 +58,7 @@
                         %(ramdisk_load)s
                         compression = "none";
                 };
-                ramdisk-2 {
+                ramdisk@2 {
                         description = "snow";
                         data = /incbin/("%(loadables2)s");
                         type = "ramdisk";
@@ -69,10 +69,10 @@
                 };
         };
         configurations {
-                default = "conf-1";
-                conf-1 {
-                        kernel = "kernel-1";
-                        fdt = "fdt-1";
+                default = "conf@1";
+                conf@1 {
+                        kernel = "kernel@1";
+                        fdt = "fdt@1";
                         %(ramdisk_config)s
                         %(loadables_config)s
                 };
@@ -395,7 +395,7 @@
 
         # Try a ramdisk
         with cons.log.section('Kernel + FDT + Ramdisk load'):
-            params['ramdisk_config'] = 'ramdisk = "ramdisk-1";'
+            params['ramdisk_config'] = 'ramdisk = "ramdisk@1";'
             params['ramdisk_load'] = 'load = <%#x>;' % params['ramdisk_addr']
             fit = make_fit(mkimage, params)
             cons.restart_uboot()
@@ -404,7 +404,7 @@
 
         # Configuration with some Loadables
         with cons.log.section('Kernel + FDT + Ramdisk load + Loadables'):
-            params['loadables_config'] = 'loadables = "kernel-2", "ramdisk-2";'
+            params['loadables_config'] = 'loadables = "kernel@2", "ramdisk@2";'
             params['loadables1_load'] = ('load = <%#x>;' %
                                          params['loadables1_addr'])
             params['loadables2_load'] = ('load = <%#x>;' %
diff --git a/test/py/tests/test_vboot.py b/test/py/tests/test_vboot.py
index fb47441..4627ceb 100644
--- a/test/py/tests/test_vboot.py
+++ b/test/py/tests/test_vboot.py
@@ -24,28 +24,10 @@
 Tests run with both SHA1 and SHA256 hashing.
 """
 
-
-import shutil
 import pytest
 import sys
 import struct
 import u_boot_utils as util
-import vboot_evil
-
-# Only run the full suite on a few combinations, since it doesn't add any more
-# test coverage.
-TESTDATA = [
-    ['sha1', '', None, False, True],
-    ['sha1', '', '-E -p 0x10000', False, False],
-    ['sha1', '-pss', None, False, False],
-    ['sha1', '-pss', '-E -p 0x10000', False, False],
-    ['sha256', '', None, False, False],
-    ['sha256', '', '-E -p 0x10000', False, False],
-    ['sha256', '-pss', None, False, False],
-    ['sha256', '-pss', '-E -p 0x10000', False, False],
-    ['sha256', '-pss', None, True, False],
-    ['sha256', '-pss', '-E -p 0x10000', True, True],
-]
 
 @pytest.mark.boardspec('sandbox')
 @pytest.mark.buildconfigspec('fit_signature')
@@ -75,7 +57,7 @@
         util.run_and_log(cons, 'dtc %s %s%s -O dtb '
                          '-o %s%s' % (dtc_args, datadir, dts, tmpdir, dtb))
 
-    def run_bootm(sha_algo, test_type, expect_string, boots, fit=None):
+    def run_bootm(sha_algo, test_type, expect_string, boots):
         """Run a 'bootm' command U-Boot.
 
         This always starts a fresh U-Boot instance since the device tree may
diff --git a/tools/fdt_host.h b/tools/fdt_host.h
index 15c07c7..99b009b 100644
--- a/tools/fdt_host.h
+++ b/tools/fdt_host.h
@@ -27,7 +27,6 @@
  */
 int fdt_remove_unused_strings(const void *old, void *new);
 
-int fit_check_sign(const void *fit, const void *key,
-		   const char *fit_uname_config);
+int fit_check_sign(const void *working_fdt, const void *key);
 
 #endif /* __FDT_HOST_H__ */
diff --git a/tools/fit_check_sign.c b/tools/fit_check_sign.c
index 303e878..62adc75 100644
--- a/tools/fit_check_sign.c
+++ b/tools/fit_check_sign.c
@@ -41,7 +41,6 @@
 	void *fit_blob;
 	char *fdtfile = NULL;
 	char *keyfile = NULL;
-	char *config_name = NULL;
 	char cmdname[256];
 	int ret;
 	void *key_blob;
@@ -49,7 +48,7 @@
 
 	strncpy(cmdname, *argv, sizeof(cmdname) - 1);
 	cmdname[sizeof(cmdname) - 1] = '\0';
-	while ((c = getopt(argc, argv, "f:k:c:")) != -1)
+	while ((c = getopt(argc, argv, "f:k:")) != -1)
 		switch (c) {
 		case 'f':
 			fdtfile = optarg;
@@ -57,9 +56,6 @@
 		case 'k':
 			keyfile = optarg;
 			break;
-		case 'c':
-			config_name = optarg;
-			break;
 		default:
 			usage(cmdname);
 			break;
@@ -82,7 +78,7 @@
 		return EXIT_FAILURE;
 
 	image_set_host_blob(key_blob);
-	ret = fit_check_sign(fit_blob, key_blob, config_name);
+	ret = fit_check_sign(fit_blob, key_blob);
 	if (!ret) {
 		ret = EXIT_SUCCESS;
 		fprintf(stderr, "Signature check OK\n");
diff --git a/tools/fit_common.c b/tools/fit_common.c
index 5e85ca2..d96085e 100644
--- a/tools/fit_common.c
+++ b/tools/fit_common.c
@@ -26,11 +26,7 @@
 int fit_verify_header(unsigned char *ptr, int image_size,
 			struct image_tool_params *params)
 {
-	if (fdt_check_header(ptr) != EXIT_SUCCESS ||
-	    fit_check_format(ptr, IMAGE_SIZE_INVAL))
-		return EXIT_FAILURE;
-
-	return EXIT_SUCCESS;
+	return fdt_check_header(ptr);
 }
 
 int fit_check_image_types(uint8_t type)
diff --git a/tools/fit_image.c b/tools/fit_image.c
index f7ee947..4b62635 100644
--- a/tools/fit_image.c
+++ b/tools/fit_image.c
@@ -763,7 +763,7 @@
 	/* Indent string is defined in header image.h */
 	p = IMAGE_INDENT_STRING;
 
-	if (fit_check_format(fit, IMAGE_SIZE_INVAL)) {
+	if (!fit_check_format(fit)) {
 		printf("Bad FIT image format\n");
 		return -1;
 	}
diff --git a/tools/image-host.c b/tools/image-host.c
index 3396d82..88b3295 100644
--- a/tools/image-host.c
+++ b/tools/image-host.c
@@ -170,7 +170,7 @@
 
 	memset(info, '\0', sizeof(*info));
 	info->keydir = keydir;
-	info->keyname = fdt_getprop(fit, noffset, FIT_KEY_HINT, NULL);
+	info->keyname = fdt_getprop(fit, noffset, "key-name-hint", NULL);
 	info->fit = fit;
 	info->node_offset = noffset;
 	info->name = strdup(algo_name);
@@ -249,7 +249,7 @@
 	free(value);
 
 	/* Get keyname again, as FDT has changed and invalidated our pointer */
-	info.keyname = fdt_getprop(fit, noffset, FIT_KEY_HINT, NULL);
+	info.keyname = fdt_getprop(fit, noffset, "key-name-hint", NULL);
 
 	/*
 	 * Write the public key into the supplied FDT file; this might fail
@@ -630,7 +630,7 @@
 	free(region_prop);
 
 	/* Get keyname again, as FDT has changed and invalidated our pointer */
-	info.keyname = fdt_getprop(fit, noffset, FIT_KEY_HINT, NULL);
+	info.keyname = fdt_getprop(fit, noffset, "key-name-hint", NULL);
 
 	/* Write the public key into the supplied FDT file */
 	if (keydest) {
@@ -734,22 +734,19 @@
 }
 
 #ifdef CONFIG_FIT_SIGNATURE
-int fit_check_sign(const void *fit, const void *key,
-		   const char *fit_uname_config)
+int fit_check_sign(const void *fit, const void *key)
 {
 	int cfg_noffset;
 	int ret;
 
-	cfg_noffset = fit_conf_get_node(fit, fit_uname_config);
+	cfg_noffset = fit_conf_get_node(fit, NULL);
 	if (!cfg_noffset)
 		return -1;
 
-	printf("Verifying Hash Integrity for node '%s'... ",
-	       fdt_get_name(fit, cfg_noffset, NULL));
+	printf("Verifying Hash Integrity ... ");
 	ret = fit_config_verify(fit, cfg_noffset);
 	if (ret)
 		return ret;
-	printf("Verified OK, loading images\n");
 	ret = bootm_host_load_images(fit, cfg_noffset);
 
 	return ret;
diff --git a/tools/mkimage.h b/tools/mkimage.h
index d32625f..0254af5 100644
--- a/tools/mkimage.h
+++ b/tools/mkimage.h
@@ -29,8 +29,6 @@
 #define debug(fmt,args...)
 #endif /* MKIMAGE_DEBUG */
 
-#define log_debug(fmt, args...)	debug(fmt, ##args)
-
 static inline void *map_sysmem(ulong paddr, unsigned long len)
 {
 	return (void *)(uintptr_t)paddr;