Merge branch '2022-05-05-assorted-cleanups-and-fixes'

- Assorted minor code cleanups.
- Clean-up the reset uclass code slightly and fix some issues with a
  lack of handlers for a case in the driver.
- Y2038 RTC fix
diff --git a/cmd/adc.c b/cmd/adc.c
index 8de9121..195efa8 100644
--- a/cmd/adc.c
+++ b/cmd/adc.c
@@ -71,7 +71,6 @@
 static int do_adc_single(struct cmd_tbl *cmdtp, int flag, int argc,
 			 char *const argv[])
 {
-	char *varname = NULL;
 	struct udevice *dev;
 	unsigned int data;
 	int ret, uV, val;
@@ -79,9 +78,6 @@
 	if (argc < 3)
 		return CMD_RET_USAGE;
 
-	if (argc >= 3)
-		varname = argv[2];
-
 	ret = adc_channel_single_shot(argv[1], simple_strtol(argv[2], NULL, 0),
 				      &data);
 	if (ret) {
@@ -99,8 +95,7 @@
 		printf("%u\n", data);
 	}
 
-	if (varname)
-		env_set_ulong(varname, val);
+	env_set_ulong(argv[2], val);
 
 	return CMD_RET_SUCCESS;
 }
diff --git a/cmd/fdt.c b/cmd/fdt.c
index c07342c..842e6cb 100644
--- a/cmd/fdt.c
+++ b/cmd/fdt.c
@@ -1071,7 +1071,7 @@
 /********************************************************************/
 #ifdef CONFIG_SYS_LONGHELP
 static char fdt_help_text[] =
-	"addr [-cq]  <addr> [<length>]   - Set the [control] fdt location to <addr>\n"
+	"addr [-c] [-q] <addr> [<size>]  - Set the [control] fdt location to <addr>\n"
 #ifdef CONFIG_OF_LIBFDT_OVERLAY
 	"fdt apply <addr>                    - Apply overlay to the DT\n"
 #endif
diff --git a/cmd/mmc.c b/cmd/mmc.c
index 7464f8d..63bf69b 100644
--- a/cmd/mmc.c
+++ b/cmd/mmc.c
@@ -501,11 +501,12 @@
 			 int argc, char *const argv[])
 {
 	struct mmc *mmc;
-	enum bus_mode speed_mode = MMC_MODES_END;
 
 	if (argc == 1) {
 		mmc = init_mmc_device(curr_device, true);
 	} else if (argc == 2) {
+		enum bus_mode speed_mode;
+
 		speed_mode = (int)dectoul(argv[1], NULL);
 		mmc = __init_mmc_device(curr_device, true, speed_mode);
 	} else {
@@ -543,7 +544,6 @@
 {
 	int dev, part = 0, ret;
 	struct mmc *mmc;
-	enum bus_mode speed_mode = MMC_MODES_END;
 
 	if (argc == 1) {
 		dev = curr_device;
@@ -561,6 +561,8 @@
 		}
 		mmc = init_mmc_device(dev, true);
 	} else if (argc == 4) {
+		enum bus_mode speed_mode;
+
 		dev = (int)dectoul(argv[1], NULL);
 		part = (int)dectoul(argv[2], NULL);
 		if (part > PART_ACCESS_MASK) {
diff --git a/cmd/onenand.c b/cmd/onenand.c
index 592985a..d633f19 100644
--- a/cmd/onenand.c
+++ b/cmd/onenand.c
@@ -53,7 +53,7 @@
 	if (*size == mtd->size)
 		puts("whole chip\n");
 	else
-		printf("offset 0x%lx, size 0x%x\n", *off, *size);
+		printf("offset 0x%lx, size 0x%zx\n", *off, *size);
 
 	return 0;
 }
@@ -401,7 +401,7 @@
 
 	ret = onenand_block_read(ofs, len, &retlen, (u8 *)addr, oob);
 
-	printf(" %d bytes read: %s\n", retlen, ret ? "ERROR" : "OK");
+	printf(" %zu bytes read: %s\n", retlen, ret ? "ERROR" : "OK");
 
 	return ret == 0 ? 0 : 1;
 }
@@ -428,7 +428,7 @@
 
 	ret = onenand_block_write(ofs, len, &retlen, (u8 *)addr, withoob);
 
-	printf(" %d bytes written: %s\n", retlen, ret ? "ERROR" : "OK");
+	printf(" %zu bytes written: %s\n", retlen, ret ? "ERROR" : "OK");
 
 	return ret == 0 ? 0 : 1;
 }
diff --git a/drivers/clk/clk_scmi.c b/drivers/clk/clk_scmi.c
index 5702268..5aaabcf 100644
--- a/drivers/clk/clk_scmi.c
+++ b/drivers/clk/clk_scmi.c
@@ -53,7 +53,7 @@
 	if (ret)
 		return ret;
 
-	*name = out.clock_name;
+	*name = strdup(out.clock_name);
 
 	return 0;
 }
@@ -152,11 +152,9 @@
 		return ret;
 
 	for (i = 0; i < num_clocks; i++) {
-		char *name;
-
-		if (!scmi_clk_get_attibute(dev, i, &name)) {
-			char *clock_name = strdup(name);
+		char *clock_name;
 
+		if (!scmi_clk_get_attibute(dev, i, &clock_name)) {
 			clk = kzalloc(sizeof(*clk), GFP_KERNEL);
 			if (!clk || !clock_name)
 				ret = -ENOMEM;
diff --git a/drivers/misc/fs_loader.c b/drivers/misc/fs_loader.c
index 0139bd6..5b4d036 100644
--- a/drivers/misc/fs_loader.c
+++ b/drivers/misc/fs_loader.c
@@ -20,6 +20,10 @@
 #include <malloc.h>
 #include <spl.h>
 
+#ifdef CONFIG_CMD_UBIFS
+#include <ubi_uboot.h>
+#endif
+
 DECLARE_GLOBAL_DATA_PTR;
 
 /**
diff --git a/drivers/reset/reset-ast2500.c b/drivers/reset/reset-ast2500.c
index c3d650f..0a1dd23 100644
--- a/drivers/reset/reset-ast2500.c
+++ b/drivers/reset/reset-ast2500.c
@@ -18,22 +18,6 @@
 	struct ast2500_scu *scu;
 };
 
-static int ast2500_reset_request(struct reset_ctl *reset_ctl)
-{
-	debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl,
-	      reset_ctl->dev, reset_ctl->id);
-
-	return 0;
-}
-
-static int ast2500_reset_free(struct reset_ctl *reset_ctl)
-{
-	debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl,
-	      reset_ctl->dev, reset_ctl->id);
-
-	return 0;
-}
-
 static int ast2500_reset_assert(struct reset_ctl *reset_ctl)
 {
 	struct ast2500_reset_priv *priv = dev_get_priv(reset_ctl->dev);
@@ -93,8 +77,6 @@
 };
 
 struct reset_ops ast2500_reset_ops = {
-	.request = ast2500_reset_request,
-	.rfree = ast2500_reset_free,
 	.rst_assert = ast2500_reset_assert,
 	.rst_deassert = ast2500_reset_deassert,
 };
diff --git a/drivers/reset/reset-ast2600.c b/drivers/reset/reset-ast2600.c
index 195ddd1..985235a 100644
--- a/drivers/reset/reset-ast2600.c
+++ b/drivers/reset/reset-ast2600.c
@@ -17,22 +17,6 @@
 	struct ast2600_scu *scu;
 };
 
-static int ast2600_reset_request(struct reset_ctl *reset_ctl)
-{
-	debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl,
-	      reset_ctl->dev, reset_ctl->id);
-
-	return 0;
-}
-
-static int ast2600_reset_free(struct reset_ctl *reset_ctl)
-{
-	debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl,
-	      reset_ctl->dev, reset_ctl->id);
-
-	return 0;
-}
-
 static int ast2600_reset_assert(struct reset_ctl *reset_ctl)
 {
 	struct ast2600_reset_priv *priv = dev_get_priv(reset_ctl->dev);
@@ -92,8 +76,6 @@
 };
 
 struct reset_ops ast2600_reset_ops = {
-	.request = ast2600_reset_request,
-	.rfree = ast2600_reset_free,
 	.rst_assert = ast2600_reset_assert,
 	.rst_deassert = ast2600_reset_deassert,
 };
diff --git a/drivers/reset/reset-bcm6345.c b/drivers/reset/reset-bcm6345.c
index f691898..5383f59 100644
--- a/drivers/reset/reset-bcm6345.c
+++ b/drivers/reset/reset-bcm6345.c
@@ -42,11 +42,6 @@
 	return 0;
 }
 
-static int bcm6345_reset_free(struct reset_ctl *rst)
-{
-	return 0;
-}
-
 static int bcm6345_reset_request(struct reset_ctl *rst)
 {
 	if (rst->id >= MAX_RESETS)
@@ -56,7 +51,6 @@
 }
 
 struct reset_ops bcm6345_reset_reset_ops = {
-	.rfree = bcm6345_reset_free,
 	.request = bcm6345_reset_request,
 	.rst_assert = bcm6345_reset_assert,
 	.rst_deassert = bcm6345_reset_deassert,
diff --git a/drivers/reset/reset-dra7.c b/drivers/reset/reset-dra7.c
index 585f832..a9589d4 100644
--- a/drivers/reset/reset-dra7.c
+++ b/drivers/reset/reset-dra7.c
@@ -18,16 +18,6 @@
 	u8 nreset;
 };
 
-static int dra7_reset_request(struct reset_ctl *reset_ctl)
-{
-	return 0;
-}
-
-static int dra7_reset_free(struct reset_ctl *reset_ctl)
-{
-	return 0;
-}
-
 static inline void dra7_reset_rmw(u32 addr, u32 value, u32 mask)
 {
 	writel(((readl(addr) & (~mask)) | (value & mask)), addr);
@@ -63,8 +53,6 @@
 }
 
 struct reset_ops dra7_reset_ops = {
-	.request = dra7_reset_request,
-	.rfree = dra7_reset_free,
 	.rst_assert = dra7_reset_assert,
 	.rst_deassert = dra7_reset_deassert,
 };
diff --git a/drivers/reset/reset-hisilicon.c b/drivers/reset/reset-hisilicon.c
index 3f9da8c..8152cec 100644
--- a/drivers/reset/reset-hisilicon.c
+++ b/drivers/reset/reset-hisilicon.c
@@ -46,16 +46,6 @@
 	return 0;
 }
 
-static int hisi_reset_free(struct reset_ctl *rst)
-{
-	return 0;
-}
-
-static int hisi_reset_request(struct reset_ctl *rst)
-{
-	return 0;
-}
-
 static int hisi_reset_of_xlate(struct reset_ctl *rst,
 			       struct ofnode_phandle_args *args)
 {
@@ -74,8 +64,6 @@
 
 static const struct reset_ops hisi_reset_reset_ops = {
 	.of_xlate = hisi_reset_of_xlate,
-	.request = hisi_reset_request,
-	.rfree = hisi_reset_free,
 	.rst_assert = hisi_reset_assert,
 	.rst_deassert = hisi_reset_deassert,
 };
diff --git a/drivers/reset/reset-hsdk.c b/drivers/reset/reset-hsdk.c
index 8318d0a..74b1173 100644
--- a/drivers/reset/reset-hsdk.c
+++ b/drivers/reset/reset-hsdk.c
@@ -76,15 +76,7 @@
 	return hsdk_reset_do(rst);
 }
 
-static int hsdk_reset_noop(struct reset_ctl *rst_ctl)
-{
-	return 0;
-}
-
 static const struct reset_ops hsdk_reset_ops = {
-	.request	= hsdk_reset_noop,
-	.rfree		= hsdk_reset_noop,
-	.rst_assert	= hsdk_reset_noop,
 	.rst_deassert	= hsdk_reset_reset,
 };
 
diff --git a/drivers/reset/reset-imx7.c b/drivers/reset/reset-imx7.c
index e5085ae..eaef2cc 100644
--- a/drivers/reset/reset-imx7.c
+++ b/drivers/reset/reset-imx7.c
@@ -264,19 +264,7 @@
 	return priv->ops.rst_deassert(rst);
 }
 
-static int imx7_reset_free(struct reset_ctl *rst)
-{
-	return 0;
-}
-
-static int imx7_reset_request(struct reset_ctl *rst)
-{
-	return 0;
-}
-
 static const struct reset_ops imx7_reset_reset_ops = {
-	.request = imx7_reset_request,
-	.rfree = imx7_reset_free,
 	.rst_assert = imx7_reset_assert,
 	.rst_deassert = imx7_reset_deassert,
 };
diff --git a/drivers/reset/reset-ipq4019.c b/drivers/reset/reset-ipq4019.c
index 15858f3..7f0bd85 100644
--- a/drivers/reset/reset-ipq4019.c
+++ b/drivers/reset/reset-ipq4019.c
@@ -130,19 +130,7 @@
 	return 0;
 }
 
-static int ipq4019_reset_free(struct reset_ctl *rst)
-{
-	return 0;
-}
-
-static int ipq4019_reset_request(struct reset_ctl *rst)
-{
-	return 0;
-}
-
 static const struct reset_ops ipq4019_reset_ops = {
-	.request = ipq4019_reset_request,
-	.rfree = ipq4019_reset_free,
 	.rst_assert = ipq4019_reset_assert,
 	.rst_deassert = ipq4019_reset_deassert,
 };
diff --git a/drivers/reset/reset-mediatek.c b/drivers/reset/reset-mediatek.c
index 7427013..8b62d91 100644
--- a/drivers/reset/reset-mediatek.c
+++ b/drivers/reset/reset-mediatek.c
@@ -24,16 +24,6 @@
 	u32 nr_resets;
 };
 
-static int mediatek_reset_request(struct reset_ctl *reset_ctl)
-{
-	return 0;
-}
-
-static int mediatek_reset_free(struct reset_ctl *reset_ctl)
-{
-	return 0;
-}
-
 static int mediatek_reset_assert(struct reset_ctl *reset_ctl)
 {
 	struct mediatek_reset_priv *priv = dev_get_priv(reset_ctl->dev);
@@ -59,8 +49,6 @@
 }
 
 struct reset_ops mediatek_reset_ops = {
-	.request = mediatek_reset_request,
-	.rfree = mediatek_reset_free,
 	.rst_assert = mediatek_reset_assert,
 	.rst_deassert = mediatek_reset_deassert,
 };
diff --git a/drivers/reset/reset-meson.c b/drivers/reset/reset-meson.c
index 5896bcb..64bc696 100644
--- a/drivers/reset/reset-meson.c
+++ b/drivers/reset/reset-meson.c
@@ -30,11 +30,6 @@
 	return 0;
 }
 
-static int meson_reset_free(struct reset_ctl *reset_ctl)
-{
-	return 0;
-}
-
 static int meson_reset_level(struct reset_ctl *reset_ctl, bool assert)
 {
 	struct meson_reset_priv *priv = dev_get_priv(reset_ctl->dev);
@@ -65,7 +60,6 @@
 
 struct reset_ops meson_reset_ops = {
 	.request = meson_reset_request,
-	.rfree = meson_reset_free,
 	.rst_assert = meson_reset_assert,
 	.rst_deassert = meson_reset_deassert,
 };
diff --git a/drivers/reset/reset-mtmips.c b/drivers/reset/reset-mtmips.c
index 4e71d52..7bb8469 100644
--- a/drivers/reset/reset-mtmips.c
+++ b/drivers/reset/reset-mtmips.c
@@ -18,16 +18,6 @@
 	void __iomem *base;
 };
 
-static int mtmips_reset_request(struct reset_ctl *reset_ctl)
-{
-	return 0;
-}
-
-static int mtmips_reset_free(struct reset_ctl *reset_ctl)
-{
-	return 0;
-}
-
 static int mtmips_reset_assert(struct reset_ctl *reset_ctl)
 {
 	struct mtmips_reset_priv *priv = dev_get_priv(reset_ctl->dev);
@@ -47,8 +37,6 @@
 }
 
 static const struct reset_ops mtmips_reset_ops = {
-	.request	= mtmips_reset_request,
-	.rfree		= mtmips_reset_free,
 	.rst_assert	= mtmips_reset_assert,
 	.rst_deassert	= mtmips_reset_deassert,
 };
diff --git a/drivers/reset/reset-raspberrypi.c b/drivers/reset/reset-raspberrypi.c
index 6a80179..804e32b 100644
--- a/drivers/reset/reset-raspberrypi.c
+++ b/drivers/reset/reset-raspberrypi.c
@@ -18,11 +18,6 @@
 	return 0;
 }
 
-static int raspberrypi_reset_free(struct reset_ctl *reset_ctl)
-{
-	return 0;
-}
-
 static int raspberrypi_reset_assert(struct reset_ctl *reset_ctl)
 {
 	switch (reset_ctl->id) {
@@ -34,16 +29,9 @@
 	}
 }
 
-static int raspberrypi_reset_deassert(struct reset_ctl *reset_ctl)
-{
-	return 0;
-}
-
 struct reset_ops raspberrypi_reset_ops = {
 	.request = raspberrypi_reset_request,
-	.rfree = raspberrypi_reset_free,
 	.rst_assert = raspberrypi_reset_assert,
-	.rst_deassert = raspberrypi_reset_deassert,
 };
 
 static const struct udevice_id raspberrypi_reset_ids[] = {
diff --git a/drivers/reset/reset-rockchip.c b/drivers/reset/reset-rockchip.c
index eeb3d2e..e0a95ed 100644
--- a/drivers/reset/reset-rockchip.c
+++ b/drivers/reset/reset-rockchip.c
@@ -40,14 +40,6 @@
 	return 0;
 }
 
-static int rockchip_reset_free(struct reset_ctl *reset_ctl)
-{
-	debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl,
-	      reset_ctl->dev, reset_ctl->id);
-
-	return 0;
-}
-
 static int rockchip_reset_assert(struct reset_ctl *reset_ctl)
 {
 	struct rockchip_reset_priv *priv = dev_get_priv(reset_ctl->dev);
@@ -80,7 +72,6 @@
 
 struct reset_ops rockchip_reset_ops = {
 	.request = rockchip_reset_request,
-	.rfree = rockchip_reset_free,
 	.rst_assert = rockchip_reset_assert,
 	.rst_deassert = rockchip_reset_deassert,
 };
diff --git a/drivers/reset/reset-scmi.c b/drivers/reset/reset-scmi.c
index 850cb18..81d195a 100644
--- a/drivers/reset/reset-scmi.c
+++ b/drivers/reset/reset-scmi.c
@@ -65,14 +65,8 @@
 	return scmi_to_linux_errno(out.status);
 }
 
-static int scmi_reset_rfree(struct reset_ctl *rst)
-{
-	return 0;
-}
-
 static const struct reset_ops scmi_reset_domain_ops = {
 	.request	= scmi_reset_request,
-	.rfree		= scmi_reset_rfree,
 	.rst_assert	= scmi_reset_assert,
 	.rst_deassert	= scmi_reset_deassert,
 };
diff --git a/drivers/reset/reset-sifive.c b/drivers/reset/reset-sifive.c
index eec840d..23513b2 100644
--- a/drivers/reset/reset-sifive.c
+++ b/drivers/reset/reset-sifive.c
@@ -63,16 +63,6 @@
 	return 0;
 }
 
-static int sifive_reset_free(struct reset_ctl *rst)
-{
-	struct sifive_reset_priv *priv = dev_get_priv(rst->dev);
-
-	debug("%s(rst=%p) (dev=%p, id=%lu) (nr_reset=%d)\n", __func__,
-	      rst, rst->dev, rst->id, priv->nr_reset);
-
-	return 0;
-}
-
 static int sifive_reset_probe(struct udevice *dev)
 {
 	struct sifive_reset_priv *priv = dev_get_priv(dev);
@@ -105,7 +95,6 @@
 
 const struct reset_ops sifive_reset_ops = {
 	.request = sifive_reset_request,
-	.rfree = sifive_reset_free,
 	.rst_assert = sifive_reset_assert,
 	.rst_deassert = sifive_reset_deassert,
 };
diff --git a/drivers/reset/reset-socfpga.c b/drivers/reset/reset-socfpga.c
index 98450db..6e3f03e 100644
--- a/drivers/reset/reset-socfpga.c
+++ b/drivers/reset/reset-socfpga.c
@@ -89,25 +89,7 @@
 				 false, 500, false);
 }
 
-static int socfpga_reset_request(struct reset_ctl *reset_ctl)
-{
-	debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__,
-	      reset_ctl, reset_ctl->dev, reset_ctl->id);
-
-	return 0;
-}
-
-static int socfpga_reset_free(struct reset_ctl *reset_ctl)
-{
-	debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl,
-	      reset_ctl->dev, reset_ctl->id);
-
-	return 0;
-}
-
 static const struct reset_ops socfpga_reset_ops = {
-	.request = socfpga_reset_request,
-	.rfree = socfpga_reset_free,
 	.rst_assert = socfpga_reset_assert,
 	.rst_deassert = socfpga_reset_deassert,
 };
diff --git a/drivers/reset/reset-sunxi.c b/drivers/reset/reset-sunxi.c
index 8b95938..e2a9c2a 100644
--- a/drivers/reset/reset-sunxi.c
+++ b/drivers/reset/reset-sunxi.c
@@ -41,13 +41,6 @@
 	return 0;
 }
 
-static int sunxi_reset_free(struct reset_ctl *reset_ctl)
-{
-	debug("%s: (RST#%ld)\n", __func__, reset_ctl->id);
-
-	return 0;
-}
-
 static int sunxi_set_reset(struct reset_ctl *reset_ctl, bool on)
 {
 	struct sunxi_reset_priv *priv = dev_get_priv(reset_ctl->dev);
@@ -85,7 +78,6 @@
 
 struct reset_ops sunxi_reset_ops = {
 	.request = sunxi_reset_request,
-	.rfree = sunxi_reset_free,
 	.rst_assert = sunxi_reset_assert,
 	.rst_deassert = sunxi_reset_deassert,
 };
diff --git a/drivers/reset/reset-ti-sci.c b/drivers/reset/reset-ti-sci.c
index d8510a4..f353327 100644
--- a/drivers/reset/reset-ti-sci.c
+++ b/drivers/reset/reset-ti-sci.c
@@ -63,18 +63,6 @@
 	return 0;
 }
 
-static int ti_sci_reset_request(struct reset_ctl *rst)
-{
-	debug("%s(rst=%p)\n", __func__, rst);
-	return 0;
-}
-
-static int ti_sci_reset_free(struct reset_ctl *rst)
-{
-	debug("%s(rst=%p)\n", __func__, rst);
-	return 0;
-}
-
 /**
  * ti_sci_reset_set() - program a device's reset
  * @rst: Handle to a single reset signal
@@ -193,8 +181,6 @@
 
 static struct reset_ops ti_sci_reset_ops = {
 	.of_xlate = ti_sci_reset_of_xlate,
-	.request = ti_sci_reset_request,
-	.rfree = ti_sci_reset_free,
 	.rst_assert = ti_sci_reset_assert,
 	.rst_deassert = ti_sci_reset_deassert,
 	.rst_status = ti_sci_reset_status,
diff --git a/drivers/reset/reset-uclass.c b/drivers/reset/reset-uclass.c
index ca9f00a..bcef460 100644
--- a/drivers/reset/reset-uclass.c
+++ b/drivers/reset/reset-uclass.c
@@ -68,7 +68,7 @@
 		return ret;
 	}
 
-	ret = ops->request(reset_ctl);
+	ret = ops->request ? ops->request(reset_ctl) : 0;
 	if (ret) {
 		debug("ops->request() failed: %d\n", ret);
 		return ret;
@@ -168,7 +168,7 @@
 
 	debug("%s(reset_ctl=%p)\n", __func__, reset_ctl);
 
-	return ops->request(reset_ctl);
+	return ops->request ? ops->request(reset_ctl) : 0;
 }
 
 int reset_free(struct reset_ctl *reset_ctl)
@@ -177,7 +177,7 @@
 
 	debug("%s(reset_ctl=%p)\n", __func__, reset_ctl);
 
-	return ops->rfree(reset_ctl);
+	return ops->rfree ? ops->rfree(reset_ctl) : 0;
 }
 
 int reset_assert(struct reset_ctl *reset_ctl)
@@ -186,7 +186,7 @@
 
 	debug("%s(reset_ctl=%p)\n", __func__, reset_ctl);
 
-	return ops->rst_assert(reset_ctl);
+	return ops->rst_assert ? ops->rst_assert(reset_ctl) : 0;
 }
 
 int reset_assert_bulk(struct reset_ctl_bulk *bulk)
@@ -208,7 +208,7 @@
 
 	debug("%s(reset_ctl=%p)\n", __func__, reset_ctl);
 
-	return ops->rst_deassert(reset_ctl);
+	return ops->rst_deassert ? ops->rst_deassert(reset_ctl) : 0;
 }
 
 int reset_deassert_bulk(struct reset_ctl_bulk *bulk)
@@ -230,7 +230,7 @@
 
 	debug("%s(reset_ctl=%p)\n", __func__, reset_ctl);
 
-	return ops->rst_status(reset_ctl);
+	return ops->rst_status ? ops->rst_status(reset_ctl) : 0;
 }
 
 int reset_release_all(struct reset_ctl *reset_ctl, int count)
diff --git a/drivers/reset/reset-uniphier.c b/drivers/reset/reset-uniphier.c
index c5af995..7adae51 100644
--- a/drivers/reset/reset-uniphier.c
+++ b/drivers/reset/reset-uniphier.c
@@ -184,16 +184,6 @@
 	const struct uniphier_reset_data *data;
 };
 
-static int uniphier_reset_request(struct reset_ctl *reset_ctl)
-{
-	return 0;
-}
-
-static int uniphier_reset_free(struct reset_ctl *reset_ctl)
-{
-	return 0;
-}
-
 static int uniphier_reset_update(struct reset_ctl *reset_ctl, int assert)
 {
 	struct uniphier_reset_priv *priv = dev_get_priv(reset_ctl->dev);
@@ -239,8 +229,6 @@
 }
 
 static const struct reset_ops uniphier_reset_ops = {
-	.request = uniphier_reset_request,
-	.rfree = uniphier_reset_free,
 	.rst_assert = uniphier_reset_assert,
 	.rst_deassert = uniphier_reset_deassert,
 };
diff --git a/drivers/reset/reset-zynqmp.c b/drivers/reset/reset-zynqmp.c
index 5765234..4e3f907 100644
--- a/drivers/reset/reset-zynqmp.c
+++ b/drivers/reset/reset-zynqmp.c
@@ -59,16 +59,6 @@
 	return 0;
 }
 
-static int zynqmp_reset_free(struct reset_ctl *rst)
-{
-	struct zynqmp_reset_priv *priv = dev_get_priv(rst->dev);
-
-	dev_dbg(rst->dev, "%s(rst=%p) (id=%lu) (nr_reset=%d)\n", __func__,
-		rst, rst->id, priv->nr_reset);
-
-	return 0;
-}
-
 static int zynqmp_reset_probe(struct udevice *dev)
 {
 	struct zynqmp_reset_priv *priv = dev_get_priv(dev);
@@ -80,7 +70,6 @@
 
 const struct reset_ops zynqmp_reset_ops = {
 	.request = zynqmp_reset_request,
-	.rfree = zynqmp_reset_free,
 	.rst_assert = zynqmp_reset_assert,
 	.rst_deassert = zynqmp_reset_deassert,
 };
diff --git a/drivers/reset/sti-reset.c b/drivers/reset/sti-reset.c
index 9287f28..ea449bb 100644
--- a/drivers/reset/sti-reset.c
+++ b/drivers/reset/sti-reset.c
@@ -280,16 +280,6 @@
 	return 0;
 }
 
-static int sti_reset_request(struct reset_ctl *reset_ctl)
-{
-	return 0;
-}
-
-static int sti_reset_free(struct reset_ctl *reset_ctl)
-{
-	return 0;
-}
-
 static int sti_reset_assert(struct reset_ctl *reset_ctl)
 {
 	return sti_reset_program_hw(reset_ctl, true);
@@ -301,8 +291,6 @@
 }
 
 struct reset_ops sti_reset_ops = {
-	.request = sti_reset_request,
-	.rfree = sti_reset_free,
 	.rst_assert = sti_reset_assert,
 	.rst_deassert = sti_reset_deassert,
 };
diff --git a/drivers/reset/stm32-reset.c b/drivers/reset/stm32-reset.c
index bbc6b13..0bbde29 100644
--- a/drivers/reset/stm32-reset.c
+++ b/drivers/reset/stm32-reset.c
@@ -27,16 +27,6 @@
 	fdt_addr_t base;
 };
 
-static int stm32_reset_request(struct reset_ctl *reset_ctl)
-{
-	return 0;
-}
-
-static int stm32_reset_free(struct reset_ctl *reset_ctl)
-{
-	return 0;
-}
-
 static int stm32_reset_assert(struct reset_ctl *reset_ctl)
 {
 	struct stm32_reset_priv *priv = dev_get_priv(reset_ctl->dev);
@@ -80,8 +70,6 @@
 }
 
 static const struct reset_ops stm32_reset_ops = {
-	.request	= stm32_reset_request,
-	.rfree		= stm32_reset_free,
 	.rst_assert	= stm32_reset_assert,
 	.rst_deassert	= stm32_reset_deassert,
 };
diff --git a/drivers/reset/tegra-car-reset.c b/drivers/reset/tegra-car-reset.c
index a33d453..501e9ca 100644
--- a/drivers/reset/tegra-car-reset.c
+++ b/drivers/reset/tegra-car-reset.c
@@ -23,14 +23,6 @@
 	return 0;
 }
 
-static int tegra_car_reset_free(struct reset_ctl *reset_ctl)
-{
-	debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl,
-	      reset_ctl->dev, reset_ctl->id);
-
-	return 0;
-}
-
 static int tegra_car_reset_assert(struct reset_ctl *reset_ctl)
 {
 	debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl,
@@ -53,21 +45,12 @@
 
 struct reset_ops tegra_car_reset_ops = {
 	.request = tegra_car_reset_request,
-	.rfree = tegra_car_reset_free,
 	.rst_assert = tegra_car_reset_assert,
 	.rst_deassert = tegra_car_reset_deassert,
 };
 
-static int tegra_car_reset_probe(struct udevice *dev)
-{
-	debug("%s(dev=%p)\n", __func__, dev);
-
-	return 0;
-}
-
 U_BOOT_DRIVER(tegra_car_reset) = {
 	.name = "tegra_car_reset",
 	.id = UCLASS_RESET,
-	.probe = tegra_car_reset_probe,
 	.ops = &tegra_car_reset_ops,
 };
diff --git a/drivers/reset/tegra186-reset.c b/drivers/reset/tegra186-reset.c
index c60a03f..d43da45 100644
--- a/drivers/reset/tegra186-reset.c
+++ b/drivers/reset/tegra186-reset.c
@@ -11,22 +11,6 @@
 #include <reset-uclass.h>
 #include <asm/arch-tegra/bpmp_abi.h>
 
-static int tegra186_reset_request(struct reset_ctl *reset_ctl)
-{
-	debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl,
-	      reset_ctl->dev, reset_ctl->id);
-
-	return 0;
-}
-
-static int tegra186_reset_free(struct reset_ctl *reset_ctl)
-{
-	debug("%s(reset_ctl=%p) (dev=%p, id=%lu)\n", __func__, reset_ctl,
-	      reset_ctl->dev, reset_ctl->id);
-
-	return 0;
-}
-
 static int tegra186_reset_common(struct reset_ctl *reset_ctl,
 				 enum mrq_reset_commands cmd)
 {
@@ -61,22 +45,12 @@
 }
 
 struct reset_ops tegra186_reset_ops = {
-	.request = tegra186_reset_request,
-	.rfree = tegra186_reset_free,
 	.rst_assert = tegra186_reset_assert,
 	.rst_deassert = tegra186_reset_deassert,
 };
 
-static int tegra186_reset_probe(struct udevice *dev)
-{
-	debug("%s(dev=%p)\n", __func__, dev);
-
-	return 0;
-}
-
 U_BOOT_DRIVER(tegra186_reset) = {
 	.name		= "tegra186_reset",
 	.id		= UCLASS_RESET,
-	.probe		= tegra186_reset_probe,
 	.ops = &tegra186_reset_ops,
 };
diff --git a/drivers/rtc/rv8803.c b/drivers/rtc/rv8803.c
index 5bae39d..06a4ae8 100644
--- a/drivers/rtc/rv8803.c
+++ b/drivers/rtc/rv8803.c
@@ -49,7 +49,7 @@
 		printf("WARNING: year should be between 2000 and 2099!\n");
 
 	buf[RTC_YR_REG_ADDR] = bin2bcd(tm->tm_year % 100);
-	buf[RTC_MON_REG_ADDR] = bin2bcd(tm->tm_mon);
+	buf[RTC_MON_REG_ADDR] = bin2bcd(tm->tm_mon + 1);
 	buf[RTC_DAY_REG_ADDR] = 1 << (tm->tm_wday & 0x7);
 	buf[RTC_DATE_REG_ADDR] = bin2bcd(tm->tm_mday);
 	buf[RTC_HR_REG_ADDR] = bin2bcd(tm->tm_hour);
@@ -90,7 +90,7 @@
 	tm->tm_min  = bcd2bin(buf[RTC_MIN_REG_ADDR] & 0x7F);
 	tm->tm_hour = bcd2bin(buf[RTC_HR_REG_ADDR] & 0x3F);
 	tm->tm_mday = bcd2bin(buf[RTC_DATE_REG_ADDR] & 0x3F);
-	tm->tm_mon  = bcd2bin(buf[RTC_MON_REG_ADDR] & 0x1F);
+	tm->tm_mon  = bcd2bin(buf[RTC_MON_REG_ADDR] & 0x1F) - 1;
 	tm->tm_year = bcd2bin(buf[RTC_YR_REG_ADDR]) + 2000;
 	tm->tm_wday = fls(buf[RTC_DAY_REG_ADDR] & 0x7F) - 1;
 	tm->tm_yday = 0;
diff --git a/drivers/serial/serial_semihosting.c b/drivers/serial/serial_semihosting.c
index 4328b3d..2561414 100644
--- a/drivers/serial/serial_semihosting.c
+++ b/drivers/serial/serial_semihosting.c
@@ -54,6 +54,9 @@
 		}
 
 		buf = strndup(s, len);
+		if (!buf)
+			return -ENOMEM;
+
 		smh_puts(buf);
 		free(buf);
 		return len;
diff --git a/include/linux/time.h b/include/linux/time.h
index 702dd27..14ff5b6 100644
--- a/include/linux/time.h
+++ b/include/linux/time.h
@@ -152,9 +152,6 @@
     return asctime_r (localtime_r (tim_p, &tm), result);
 }
 
-/* for compatibility with linux code */
-typedef __s64 time64_t;
-
 #ifdef CONFIG_LIB_DATE
 time64_t mktime64(const unsigned int year, const unsigned int mon,
 		  const unsigned int day, const unsigned int hour,
diff --git a/include/rtc.h b/include/rtc.h
index 6c7fcad..10104e3 100644
--- a/include/rtc.h
+++ b/include/rtc.h
@@ -16,6 +16,8 @@
 #include <bcd.h>
 #include <rtc_def.h>
 
+typedef int64_t time64_t;
+
 #ifdef CONFIG_DM_RTC
 
 struct udevice;
@@ -301,7 +303,7 @@
 void rtc_to_tm(u64 time_t, struct rtc_time *time);
 
 /**
- * rtc_mktime() - Convert a broken-out time into a time_t value
+ * rtc_mktime() - Convert a broken-out time into a time64_t value
  *
  * The following fields need to be valid for this function to work:
  *	tm_sec, tm_min, tm_hour, tm_mday, tm_mon, tm_year
@@ -309,9 +311,9 @@
  * Note that tm_wday and tm_yday are ignored.
  *
  * @time:	Broken-out time to convert
- * Return: corresponding time_t value, seconds since 1970-01-01 00:00:00
+ * Return: corresponding time64_t value, seconds since 1970-01-01 00:00:00
  */
-unsigned long rtc_mktime(const struct rtc_time *time);
+time64_t rtc_mktime(const struct rtc_time *time);
 
 /**
  * rtc_month_days() - The number of days in the month
diff --git a/lib/date.c b/lib/date.c
index c589d9e..e3d2245 100644
--- a/lib/date.c
+++ b/lib/date.c
@@ -71,19 +71,16 @@
  * -year / 100 + year / 400 terms, and add 10.]
  *
  * This algorithm was first published by Gauss (I think).
- *
- * WARNING: this function will overflow on 2106-02-07 06:28:16 on
- * machines where long is 32-bit! (However, as time_t is signed, we
- * will already get problems at other places on 2038-01-19 03:14:08)
  */
-unsigned long rtc_mktime(const struct rtc_time *tm)
+time64_t rtc_mktime(const struct rtc_time *tm)
 {
 	int mon = tm->tm_mon;
 	int year = tm->tm_year;
-	int days, hours;
+	unsigned long days;
+	time64_t hours;
 
 	mon -= 2;
-	if (0 >= (int)mon) {	/* 1..12 -> 11, 12, 1..10 */
+	if (0 >= mon) {		/* 1..12 -> 11, 12, 1..10 */
 		mon += 12;	/* Puts Feb last since it has leap day */
 		year -= 1;
 	}
@@ -109,5 +106,5 @@
 	time.tm_min = min;
 	time.tm_sec = sec;
 
-	return (time64_t)rtc_mktime((const struct rtc_time *)&time);
+	return rtc_mktime((const struct rtc_time *)&time);
 }
diff --git a/tools/image-host.c b/tools/image-host.c
index ab6f756..698adfb 100644
--- a/tools/image-host.c
+++ b/tools/image-host.c
@@ -1205,7 +1205,7 @@
 		if (!key_name)
 			printf("The property key-name is missing in the node %s\n",
 			       IMAGE_PRE_LOAD_PATH);
-		ret = -ENODATA;
+		ret = -EINVAL;
 		goto out;
 	}
 
diff --git a/tools/imagetool.c b/tools/imagetool.c
index 5ad6d74..f14ca2f 100644
--- a/tools/imagetool.c
+++ b/tools/imagetool.c
@@ -80,27 +80,33 @@
 	struct image_type_params *tparams,
 	struct image_tool_params *params)
 {
-	int retval;
+	int retval = -1;
 
-	retval = tparams->verify_header((unsigned char *)ptr, sbuf->st_size,
-			params);
+	if (tparams->verify_header) {
+		retval = tparams->verify_header((unsigned char *)ptr,
+						sbuf->st_size, params);
 
-	if (retval == 0) {
-		/*
-		 * Print the image information if verify is successful
-		 */
-		if (tparams->print_header) {
-			if (!params->quiet)
-				tparams->print_header(ptr);
+		if (retval == 0) {
+			/*
+			 * Print the image information if verify is successful
+			 */
+			if (tparams->print_header) {
+				if (!params->quiet)
+					tparams->print_header(ptr);
+			} else {
+				fprintf(stderr,
+					"%s: print_header undefined for %s\n",
+					params->cmdname, tparams->name);
+			}
 		} else {
 			fprintf(stderr,
-				"%s: print_header undefined for %s\n",
-				params->cmdname, tparams->name);
+				"%s: verify_header failed for %s with exit code %d\n",
+				params->cmdname, tparams->name, retval);
 		}
+
 	} else {
-		fprintf(stderr,
-			"%s: verify_header failed for %s with exit code %d\n",
-			params->cmdname, tparams->name, retval);
+		fprintf(stderr, "%s: print_header undefined for %s\n",
+			params->cmdname, tparams->name);
 	}
 
 	return retval;