diff --git a/debian/changelog b/debian/changelog
index 85e23aea355a98bb84e05ad93073cd5822a125fd..2c705116224797d4eaccd4c736109a4ab32d3ab9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,57 @@
+u-boot (2024.01+dfsg-5) unstable; urgency=medium
+
+  * Upload to unstable.
+
+ -- Vagrant Cascadian <vagrant@debian.org>  Fri, 19 Apr 2024 11:32:03 -0700
+
+u-boot (2024.01+dfsg-4) experimental; urgency=medium
+
+  [ Martyn Welch ]
+  * d/targets: Enable support for am625-sk
+
+  [ Vagrant Cascadian ]
+  * debian/control: Add missing Build-Depends-Arch on
+    gcc-arm-linux-gnueabihf for am625-sk targets.
+  * Move u-boot-exynos (odroid, odroid-xu3) platforms to
+    u-boot-exynos-binaries in contrib.
+  * Move u-boot-amlogic platforms to u-boot-amlogic-binaries in contrib.
+
+ -- Vagrant Cascadian <vagrant@debian.org>  Thu, 18 Apr 2024 15:50:25 -0700
+
+u-boot (2024.01+dfsg-3) unstable; urgency=medium
+
+  * Switch away from dh-builtusing to fix build failure on armhf.
+
+ -- Vagrant Cascadian <vagrant@debian.org>  Wed, 20 Mar 2024 11:38:00 -0700
+
+u-boot (2024.01+dfsg-2) unstable; urgency=medium
+
+  [ Philippe Coval ]
+  * debian/patches: Add Olimex A20-Olinuxino Micro reboot patch
+    (Closes: #1060752)
+
+  [ Aurelien Jarno ]
+  * debian/patches: Apply patches from upstream to fix USB crash on
+    VisionFive 2. (Closes: #1062664)
+  * debian/patches: Apply patch from upstream to improve VisionFive 2 1.2A
+    support.
+  * debian/patches: Apply patch from upstream to support saving
+    environment on VisionFive 2.
+  * debian/patches: Apply patch submitted upstream fixing device-tree
+    corruption on riscv64. (Closes: #1060682)
+  * debian/patches: Apply patch submitted upstream fixing data corruption
+    on HiFive Unmatched.
+
+  [ Андрей Лухнов ]
+  * debian/targets.mk: add orangepi_pc_plus to sunxi platforms
+    (Closes: #1061432)
+
+  [ Nicolas Boulenguez ]
+  * Delegate the Built-Using field to the dh-builtusing debhelper tool
+    (Closes: #1051098)
+
+ -- Vagrant Cascadian <vagrant@debian.org>  Tue, 19 Mar 2024 16:27:45 -0700
+
 u-boot (2024.01+dfsg-1) unstable; urgency=medium
 
   * New upstream version.
diff --git a/debian/control b/debian/control
index 7a6bbc31ccfdda16bad9d9f42186c924a18e1012..7e3082e19ab33aa94c9bf8b90d537499c7b26ddf 100644
--- a/debian/control
+++ b/debian/control
@@ -18,6 +18,7 @@ Build-Depends-Arch:
  arm-trusted-firmware (>= 2.9~) [arm64],
  crust-firmware (>= 0.3-2~) [arm64],
  device-tree-compiler,
+ gcc-arm-linux-gnueabihf [arm64],
  libfdt-dev:native [arm64],
  libgnutls28-dev,
  libgnutls28-dev:native [arm64],
@@ -26,6 +27,8 @@ Build-Depends-Arch:
  libssl-dev:native,
  lzop [armhf],
  opensbi (>= 1.3) [riscv64],
+ python3-jsonschema [arm64],
+ python3-yaml [arm64],
  uuid-dev,
  uuid-dev:native [arm64],
 Build-Depends-Indep:
@@ -58,10 +61,13 @@ Description: A boot loader for embedded systems
  Included platforms:
  ${u-boot:platforms}
 
-Package: u-boot-amlogic
+Package: u-boot-amlogic-binaries
 Architecture: arm64
+Section: contrib/admin
 Multi-Arch: same
 Depends: ${misc:Depends}
+Breaks: u-boot-amlogic (<= 2024.01+dfsg-3)
+Replaces: u-boot-amlogic (<= 2024.01+dfsg-3)
 Recommends: arm-trusted-firmware [arm64]
 Description: A boot loader for amlogic systems
  Das U-Boot is a cross-platform bootloader for embedded systems,
@@ -73,7 +79,7 @@ Description: A boot loader for amlogic systems
  This package includes boot loaders for various amlogic platforms.
  .
  Included platforms:
- ${u-boot-amlogic:platforms}
+ ${u-boot-amlogic-binaries:platforms}
 
 Package: u-boot-asahi
 Architecture: arm64
@@ -221,6 +227,25 @@ Description: A boot loader for exynos systems
  Included platforms:
  ${u-boot-exynos:platforms}
 
+Package: u-boot-exynos-binaries
+Architecture: armhf
+Section: contrib/admin
+Multi-Arch: same
+Depends: ${misc:Depends}
+Breaks: u-boot-exynos (<= 2024.01+dfsg-3)
+Replaces: u-boot-exynos (<= 2024.01+dfsg-3)
+Description: A boot loader for exynos systems
+ Das U-Boot is a cross-platform bootloader for embedded systems,
+ used as the default boot loader by several board vendors.  It is
+ intended to be easy to port and to debug, and runs on many
+ supported architectures, including PPC, ARM, MIPS, x86, m68k,
+ NIOS, and Microblaze.
+ .
+ This package includes boot loaders for various Exynos platforms.
+ .
+ Included platforms:
+ ${u-boot-exynos-binaries:platforms}
+
 Package: u-boot-mvebu
 Architecture: arm64
 Multi-Arch: same
@@ -308,6 +333,25 @@ Description: A boot loader for SiFive systems
  Included platforms:
  ${u-boot-sifive:platforms}
 
+Package: u-boot-sitara-binaries
+Architecture: arm64
+Section: contrib/admin
+Multi-Arch: same
+Depends: ${misc:Depends}
+Description: Boot loader binaries for TI Sitara systems
+ Das U-Boot is a cross-platform bootloader for embedded systems,
+ used as the default boot loader by several board vendors.  It is
+ intended to be easy to port and to debug, and runs on many
+ supported architectures, including PPC, ARM, MIPS, x86, m68k,
+ NIOS, and Microblaze.
+ .
+ This package includes the U-Boot derived boot loader binaries
+ which need to be combined with currently unpackaged firmware to
+ boot various Sitara platforms.
+ .
+ Included platforms:
+ ${u-boot-sitara-binaries:platforms}
+
 Package: u-boot-starfive
 Architecture: riscv64
 Multi-Arch: same
diff --git a/debian/patches/allwinner/0001-arm-sunxi-Reduce-inrush-current-on-Olimex-A20-OLinuX.patch b/debian/patches/allwinner/0001-arm-sunxi-Reduce-inrush-current-on-Olimex-A20-OLinuX.patch
new file mode 100644
index 0000000000000000000000000000000000000000..f33e9aa03dc14f3977bbdf19a6790534c5147e3e
--- /dev/null
+++ b/debian/patches/allwinner/0001-arm-sunxi-Reduce-inrush-current-on-Olimex-A20-OLinuX.patch
@@ -0,0 +1,64 @@
+From a55fa8acd219c025fca06ff130c95b97bc6cbd79 Mon Sep 17 00:00:00 2001
+From: Philippe Coval <rzr@users.sf.net>
+Date: Sat, 6 Jan 2024 11:06:41 +0100
+Subject: [PATCH] arm: sunxi: Reduce inrush current on Olimex
+ A20-OLinuXino_MICRO configs
+
+This change fix reboot, both configurations
+were tested on my Olimex A20 Micro Rev E with debian-12.
+
+This issue was also present and fixed on A20 Lime2 (in 8311e84b18),
+quoting Olliver Schinagl:
+
+    The lime2 features a too large capacitor on the LDO3 output, which
+    causes the PMIC to shutdown when enabling power. To be able to still
+    boot up however, we must gradually enable power on LDO3 for this board.
+    We do this by enabling both the inrush quirk and the maximum slope the
+    AXP209 supports.
+
+Link: https://bugs.debian.org/1060752
+Series-to: u-boot@lists.denx.de
+Series-links: 1:187331
+Series-version: 2
+Cc: Olliver Schinagl <oliver@schinagl.nl>
+Cc: Priit Laes <plaes@plaes.org>
+Cc: Maxime Ripard <maxime.ripard@bootlin.com>
+Signed-off-by: Philippe Coval <rzr@users.sf.net>
+Series-changes: 2
+- Add qirk to eMMC configuration of same machine
+Forwarded: http://patchwork.ozlabs.org/project/uboot/list/?series=394499
+Bug-Debian: https://bugs.debian.org/1060752
+Applied-Upstream: https://source.denx.de/u-boot/u-boot/-/commit/c93a6fc8f5313b2aa7081d53c3061c7c1b94afca#v2024.04-rc3-48-gc93a6fc8f5
+Signed-off-by: Philippe Coval <rzr@users.sf.net>
+---
+ configs/A20-OLinuXino_MICRO-eMMC_defconfig | 1 +
+ configs/A20-OLinuXino_MICRO_defconfig      | 1 +
+ 2 files changed, 2 insertions(+)
+
+diff --git a/configs/A20-OLinuXino_MICRO-eMMC_defconfig b/configs/A20-OLinuXino_MICRO-eMMC_defconfig
+index ca5869f43d..2f26b0ca01 100644
+--- a/configs/A20-OLinuXino_MICRO-eMMC_defconfig
++++ b/configs/A20-OLinuXino_MICRO-eMMC_defconfig
+@@ -20,6 +20,7 @@ CONFIG_ETH_DESIGNWARE=y
+ CONFIG_MII=y
+ CONFIG_SUN7I_GMAC=y
+ CONFIG_SUN7I_GMAC_FORCE_TXERR=y
++CONFIG_AXP_ALDO3_INRUSH_QUIRK=y
+ CONFIG_AXP_ALDO3_VOLT=2800
+ CONFIG_AXP_ALDO4_VOLT=2800
+ CONFIG_SCSI=y
+diff --git a/configs/A20-OLinuXino_MICRO_defconfig b/configs/A20-OLinuXino_MICRO_defconfig
+index db4270f9b2..673ab85c8a 100644
+--- a/configs/A20-OLinuXino_MICRO_defconfig
++++ b/configs/A20-OLinuXino_MICRO_defconfig
+@@ -20,6 +20,7 @@ CONFIG_ETH_DESIGNWARE=y
+ CONFIG_MII=y
+ CONFIG_SUN7I_GMAC=y
+ CONFIG_SUN7I_GMAC_FORCE_TXERR=y
++CONFIG_AXP_ALDO3_INRUSH_QUIRK=y
+ CONFIG_AXP_ALDO3_VOLT=2800
+ CONFIG_AXP_ALDO4_VOLT=2800
+ CONFIG_SCSI=y
+-- 
+2.43.0
+
diff --git a/debian/patches/am62x/0008-arm-dts-k3-am625-Don-t-try-to-build-the-final-firmwa.patch b/debian/patches/am62x/0008-arm-dts-k3-am625-Don-t-try-to-build-the-final-firmwa.patch
new file mode 100644
index 0000000000000000000000000000000000000000..f6e87db0d98abf2214687058f2adc7205e6c09b1
--- /dev/null
+++ b/debian/patches/am62x/0008-arm-dts-k3-am625-Don-t-try-to-build-the-final-firmwa.patch
@@ -0,0 +1,70 @@
+From: Martyn Welch <martyn.welch@collabora.com>
+Date: Mon, 12 Feb 2024 17:41:04 +0000
+Subject: arm: dts: k3-am625*: Don't try to build the final firmware images
+
+The final firmware images require the inclusion of firmware elements that
+are not yet available in linux-firmware. Build the U-Boot elements so that
+these can be combined with the other elements at a later date.
+
+Signed-off-by: Martyn Welch <martyn.welch@collabora.com>
+---
+ arch/arm/dts/k3-am625-beagleplay-u-boot.dtsi | 4 ++++
+ arch/arm/dts/k3-am625-sk-binman.dtsi         | 8 ++++++++
+ 2 files changed, 12 insertions(+)
+
+diff --git a/arch/arm/dts/k3-am625-beagleplay-u-boot.dtsi b/arch/arm/dts/k3-am625-beagleplay-u-boot.dtsi
+index d6c6baa..6df20ad 100644
+--- a/arch/arm/dts/k3-am625-beagleplay-u-boot.dtsi
++++ b/arch/arm/dts/k3-am625-beagleplay-u-boot.dtsi
+@@ -176,6 +176,8 @@
+ #define SPL_AM625_BEAGLEPLAY_DTB "spl/dts/k3-am625-beagleplay.dtb"
+ #define AM625_BEAGLEPLAY_DTB "arch/arm/dts/k3-am625-beagleplay.dtb"
+ 
++#if 0
++
+ &spl_am625_sk_dtb {
+ 	filename = SPL_AM625_BEAGLEPLAY_DTB;
+ };
+@@ -193,3 +195,5 @@
+ };
+ 
+ #endif
++
++#endif
+diff --git a/arch/arm/dts/k3-am625-sk-binman.dtsi b/arch/arm/dts/k3-am625-sk-binman.dtsi
+index 41277bf..9e61d2f 100644
+--- a/arch/arm/dts/k3-am625-sk-binman.dtsi
++++ b/arch/arm/dts/k3-am625-sk-binman.dtsi
+@@ -7,6 +7,8 @@
+ 
+ #ifdef CONFIG_TARGET_AM625_R5_EVM
+ 
++#if 0
++
+ &binman {
+ 	tiboot3-am62x-hs-evm.bin {
+ 		filename = "tiboot3-am62x-hs-evm.bin";
+@@ -139,6 +141,8 @@
+ 
+ #endif
+ 
++#endif
++
+ #ifdef CONFIG_TARGET_AM625_A53_EVM
+ 
+ #define SPL_NODTB "spl/u-boot-spl-nodtb.bin"
+@@ -147,6 +151,8 @@
+ #define UBOOT_NODTB "u-boot-nodtb.bin"
+ #define AM625_SK_DTB "u-boot.dtb"
+ 
++#if 0
++
+ &binman {
+ 	ti-dm {
+ 		filename = "ti-dm.bin";
+@@ -461,3 +467,5 @@
+ 	};
+ };
+ #endif
++
++#endif
diff --git a/debian/patches/riscv64/board-starfive-handle-compatible-property-in-dynamic.patch b/debian/patches/riscv64/board-starfive-handle-compatible-property-in-dynamic.patch
new file mode 100644
index 0000000000000000000000000000000000000000..df3e72c900512bed9c8f3e9189bc91cfe6f4381b
--- /dev/null
+++ b/debian/patches/riscv64/board-starfive-handle-compatible-property-in-dynamic.patch
@@ -0,0 +1,57 @@
+From 465e7e6d506a419ab12ed0817d8f083d43584602 Mon Sep 17 00:00:00 2001
+From: Aurelien Jarno <aurelien@aurel32.net>
+Date: Wed, 10 Jan 2024 21:17:44 +0100
+Subject: [PATCH] board: starfive: handle compatible property in dynamic DT
+ configuration
+
+The difference between the StarFive VisionFive 2 1.2A and 1.3B boards is
+handled dynamically by looking at the PCB version in the EEPROM in order
+to have a single u-boot version for both versions of the board. While
+the "model" property is correctly handled, the "compatible" one is
+always the the one of version 1.3b.
+
+This patch add support for dynamically configuring that property.
+
+Fixes: 9b7060bd15e7 ("riscv: dts: jh7110: Combine the board device tree files of 1.2A and 1.3B")
+
+Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
+Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
+---
+ board/starfive/visionfive2/spl.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/board/starfive/visionfive2/spl.c b/board/starfive/visionfive2/spl.c
+index 336f0cdfc9..911add429d 100644
+--- a/board/starfive/visionfive2/spl.c
++++ b/board/starfive/visionfive2/spl.c
+@@ -61,11 +61,13 @@ static const struct starfive_vf2_pro starfive_verb[] = {
+ 
+ void spl_fdt_fixup_version_a(void *fdt)
+ {
++	static const char compat[] = "starfive,visionfive-2-v1.2a\0starfive,jh7110";
+ 	u32 phandle;
+ 	u8 i;
+ 	int offset;
+ 	int ret;
+ 
++	fdt_setprop(fdt, fdt_path_offset(fdt, "/"), "compatible", compat, sizeof(compat));
+ 	fdt_setprop_string(fdt, fdt_path_offset(fdt, "/"), "model",
+ 			   "StarFive VisionFive 2 v1.2A");
+ 
+@@ -106,11 +108,13 @@ void spl_fdt_fixup_version_a(void *fdt)
+ 
+ void spl_fdt_fixup_version_b(void *fdt)
+ {
++	static const char compat[] = "starfive,visionfive-2-v1.3b\0starfive,jh7110";
+ 	u32 phandle;
+ 	u8 i;
+ 	int offset;
+ 	int ret;
+ 
++	fdt_setprop(fdt, fdt_path_offset(fdt, "/"), "compatible", compat, sizeof(compat));
+ 	fdt_setprop_string(fdt, fdt_path_offset(fdt, "/"), "model",
+ 			   "StarFive VisionFive 2 v1.3B");
+ 
+-- 
+2.42.0
+
diff --git a/debian/patches/riscv64/configs-visionfive2-Disable-ENV_IS_NOWHERE.patch b/debian/patches/riscv64/configs-visionfive2-Disable-ENV_IS_NOWHERE.patch
new file mode 100644
index 0000000000000000000000000000000000000000..db514308f1fe36e8e5cda2023422a1e1b977be50
--- /dev/null
+++ b/debian/patches/riscv64/configs-visionfive2-Disable-ENV_IS_NOWHERE.patch
@@ -0,0 +1,34 @@
+From 386db9a26b454d33b688fbe811289daaa22466af Mon Sep 17 00:00:00 2001
+From: Aurelien Jarno <aurelien@aurel32.net>
+Date: Sat, 27 Jan 2024 14:48:45 +0100
+Subject: [PATCH] configs: visionfive2: Disable ENV_IS_NOWHERE
+
+The VisionFive 2 board supports saving the u-boot environment settings
+are saved to on-board SPI flash. However the defconfig enables both
+ENV_IS_NOWHERE and ENV_IS_IN_SPI_FLASH, preventing the "saveenv" command
+to work. Fix that by disabling ENV_IS_NOWHERE.
+
+Fixes: 7d79bed00c9e ("configs: starfive: Enable environment in SPI flash support")
+
+Reported-by: E Shattow <lucent@gmail.com>
+Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
+Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
+---
+ configs/starfive_visionfive2_defconfig | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/configs/starfive_visionfive2_defconfig b/configs/starfive_visionfive2_defconfig
+index 1b7d57bac7..c68f3c2def 100644
+--- a/configs/starfive_visionfive2_defconfig
++++ b/configs/starfive_visionfive2_defconfig
+@@ -77,7 +77,6 @@ CONFIG_CMD_TFTPPUT=y
+ CONFIG_CMD_BOOTSTAGE=y
+ CONFIG_OF_BOARD=y
+ CONFIG_ENV_OVERWRITE=y
+-CONFIG_ENV_IS_NOWHERE=y
+ CONFIG_ENV_IS_IN_SPI_FLASH=y
+ CONFIG_ENV_SECT_SIZE_AUTO=y
+ CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+-- 
+2.42.0
+
diff --git a/debian/patches/riscv64/efi_loader-avoid-pointer-access-after-calling-efi_de.patch b/debian/patches/riscv64/efi_loader-avoid-pointer-access-after-calling-efi_de.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a2abd7a7fb92812c5f59074c843ac54e7f815a61
--- /dev/null
+++ b/debian/patches/riscv64/efi_loader-avoid-pointer-access-after-calling-efi_de.patch
@@ -0,0 +1,80 @@
+From f674a2f9a9f9c28fddde53f0a0b2f3e3c3b342ee Mon Sep 17 00:00:00 2001
+From: Masahisa Kojima <masahisa.kojima@linaro.org>
+Date: Fri, 19 Jan 2024 09:45:44 +0900
+Subject: [PATCH 1/2] efi_loader: avoid pointer access after calling
+ efi_delete_handle
+
+efi_delete_handle() calls efi_purge_handle(), then it finally
+frees the EFI handle.
+Both diskobj and handle variables in efi_disk_remove() have
+the same pointer, we can not access diskobj->dp after calling
+efi_delete_handle().
+
+This commit saves the struct efi_device_path pointer before
+calling efi_delete_handle(). This commit also fixes the
+missing free for volume member in struct efi_disk_obj.
+
+This commit also removes the container_of() calls, and
+adds the TODO comment of missing efi_close_protocol() call
+for the parent EFI_BLOCK_IO_PROTOCOL.
+
+Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>
+Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
+---
+ lib/efi_loader/efi_disk.c | 20 ++++++++++++++------
+ 1 file changed, 14 insertions(+), 6 deletions(-)
+
+diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c
+index 013842f077..105f080125 100644
+--- a/lib/efi_loader/efi_disk.c
++++ b/lib/efi_loader/efi_disk.c
+@@ -707,7 +707,9 @@ int efi_disk_remove(void *ctx, struct event *event)
+ 	struct udevice *dev = event->data.dm.dev;
+ 	efi_handle_t handle;
+ 	struct blk_desc *desc;
++	struct efi_device_path *dp = NULL;
+ 	struct efi_disk_obj *diskobj = NULL;
++	struct efi_simple_file_system_protocol *volume = NULL;
+ 	efi_status_t ret;
+ 
+ 	if (dev_tag_get_ptr(dev, DM_TAG_EFI, (void **)&handle))
+@@ -718,24 +720,30 @@ int efi_disk_remove(void *ctx, struct event *event)
+ 	case UCLASS_BLK:
+ 		desc = dev_get_uclass_plat(dev);
+ 		if (desc && desc->uclass_id != UCLASS_EFI_LOADER)
+-			diskobj = container_of(handle, struct efi_disk_obj,
+-					       header);
++			diskobj = (struct efi_disk_obj *)handle;
+ 		break;
+ 	case UCLASS_PARTITION:
+-		diskobj = container_of(handle, struct efi_disk_obj, header);
++		diskobj = (struct efi_disk_obj *)handle;
++
++		/* TODO: closing the parent EFI_BLOCK_IO_PROTOCOL is missing. */
++
+ 		break;
+ 	default:
+ 		return 0;
+ 	}
+ 
++	if (diskobj) {
++		dp = diskobj->dp;
++		volume = diskobj->volume;
++	}
++
+ 	ret = efi_delete_handle(handle);
+ 	/* Do not delete DM device if there are still EFI drivers attached. */
+ 	if (ret != EFI_SUCCESS)
+ 		return -1;
+ 
+-	if (diskobj)
+-		efi_free_pool(diskobj->dp);
+-
++	efi_free_pool(dp);
++	free(volume);
+ 	dev_tag_del(dev, DM_TAG_EFI);
+ 
+ 	return 0;
+-- 
+2.42.0
+
diff --git a/debian/patches/riscv64/efi_loader-create-common-function-to-free-struct-efi.patch b/debian/patches/riscv64/efi_loader-create-common-function-to-free-struct-efi.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4904cde8c35abd978437fdc17908087ea63abd45
--- /dev/null
+++ b/debian/patches/riscv64/efi_loader-create-common-function-to-free-struct-efi.patch
@@ -0,0 +1,84 @@
+From 0351b659dd0283062d91ab0dd752887bedd53278 Mon Sep 17 00:00:00 2001
+From: Masahisa Kojima <masahisa.kojima@linaro.org>
+Date: Fri, 19 Jan 2024 09:45:45 +0900
+Subject: [PATCH 2/2] efi_loader: create common function to free struct
+ efi_disk_obj
+
+Current error handling of creating raw disk/partition has
+following issues.
+ - duplicate free for EFI handle, EFI handle is already freed
+   in efi_delete_handle()
+ - missing free for struct efi_device_path and
+   struct efi_simple_file_system_protocol in some error paths
+
+To address those issues, this commit creates the common function
+to free the struct efi_disk_obj resources and calls it in case
+of error.
+
+Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>
+Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
+---
+ lib/efi_loader/efi_disk.c | 26 +++++++++++++++++++-------
+ 1 file changed, 19 insertions(+), 7 deletions(-)
+
+diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c
+index 105f080125..e2edc69fcf 100644
+--- a/lib/efi_loader/efi_disk.c
++++ b/lib/efi_loader/efi_disk.c
+@@ -371,6 +371,20 @@ static int efi_fs_exists(struct blk_desc *desc, int part)
+ 	return 1;
+ }
+ 
++static void efi_disk_free_diskobj(struct efi_disk_obj *diskobj)
++{
++	struct efi_device_path *dp = diskobj->dp;
++	struct efi_simple_file_system_protocol *volume = diskobj->volume;
++
++	/*
++	 * ignore error of efi_delete_handle() since this function
++	 * is expected to be called in error path.
++	 */
++	efi_delete_handle(&diskobj->header);
++	efi_free_pool(dp);
++	free(volume);
++}
++
+ /**
+  * efi_disk_add_dev() - create a handle for a partition or disk
+  *
+@@ -528,9 +542,7 @@ static efi_status_t efi_disk_add_dev(
+ 	}
+ 	return EFI_SUCCESS;
+ error:
+-	efi_delete_handle(&diskobj->header);
+-	free(diskobj->volume);
+-	free(diskobj);
++	efi_disk_free_diskobj(diskobj);
+ 	return ret;
+ }
+ 
+@@ -569,8 +581,7 @@ static int efi_disk_create_raw(struct udevice *dev, efi_handle_t agent_handle)
+ 		return ret;
+ 	}
+ 	if (efi_link_dev(&disk->header, dev)) {
+-		efi_free_pool(disk->dp);
+-		efi_delete_handle(&disk->header);
++		efi_disk_free_diskobj(disk);
+ 
+ 		return -EINVAL;
+ 	}
+@@ -624,8 +635,9 @@ static int efi_disk_create_part(struct udevice *dev, efi_handle_t agent_handle)
+ 		return -1;
+ 	}
+ 	if (efi_link_dev(&disk->header, dev)) {
+-		efi_free_pool(disk->dp);
+-		efi_delete_handle(&disk->header);
++		efi_disk_free_diskobj(disk);
++
++		/* TODO: closing the parent EFI_BLOCK_IO_PROTOCOL is missing. */
+ 
+ 		return -1;
+ 	}
+-- 
+2.42.0
+
diff --git a/debian/patches/riscv64/riscv-sifive-fu740-reduce-DDR-speed-from-1866MT-s-to-1600MT-s.patch b/debian/patches/riscv64/riscv-sifive-fu740-reduce-DDR-speed-from-1866MT-s-to-1600MT-s.patch
new file mode 100644
index 0000000000000000000000000000000000000000..f6be4c4bfc5f2fc3deba10c2ab5b68b2d289c22a
--- /dev/null
+++ b/debian/patches/riscv64/riscv-sifive-fu740-reduce-DDR-speed-from-1866MT-s-to-1600MT-s.patch
@@ -0,0 +1,46 @@
+From: thomas.perrot@bootlin.com
+To: u-boot@lists.denx.de
+Cc: Thomas Perrot <thomas.perrot@bootlin.com>
+Subject: [PATCH] riscv: sifive: fu740: reduce DDR speed from 1866MT/s to
+ 1600MT/s
+Date: Thu, 22 Feb 2024 15:52:03 +0100
+Message-ID: <20240222145203.2659671-1-thomas.perrot@bootlin.com>
+Origin: https://patchwork.ozlabs.org/project/uboot/patch/20240222145203.2659671-1-thomas.perrot@bootlin.com/
+
+From: Thomas Perrot <thomas.perrot@bootlin.com>
+
+It appears that there is some timing marginality either in the
+board layout or the SoC that results in occasional data corruption
+on some boards.
+We observed this issue on some of the new HiFive Unmatched RevB
+boards during volume production as well as some of the original
+HiFive Unmatched boards from 2021 in our possession. This means
+that there are other boards out there that might have the issue
+too.
+
+We have done some limited testing with DDR4 at 1600MT/s and
+faulty boards (failing at 1866MT/s) passed.
+We plan further testing after we procure a temperature chamber.
+
+Signed-off-by: Thomas Perrot <thomas.perrot@bootlin.com>
+---
+ arch/riscv/dts/fu740-c000-u-boot.dtsi | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/arch/riscv/dts/fu740-c000-u-boot.dtsi b/arch/riscv/dts/fu740-c000-u-boot.dtsi
+index 706224b384d2..956237c3218e 100644
+--- a/arch/riscv/dts/fu740-c000-u-boot.dtsi
++++ b/arch/riscv/dts/fu740-c000-u-boot.dtsi
+@@ -77,7 +77,7 @@
+ 			       0x0 0x100b2000 0x0 0x2000
+ 			       0x0 0x100b8000 0x0 0x1000>;
+ 			clocks = <&prci FU740_PRCI_CLK_DDRPLL>;
+-			clock-frequency = <933333324>;
++			clock-frequency = <800000004>;
+ 			bootph-pre-ram;
+ 		};
+ 	};
+-- 
+2.43.2
+
+
diff --git a/debian/patches/riscv64/serial-move-sbi_dbcn_available-to-.data-section.patch b/debian/patches/riscv64/serial-move-sbi_dbcn_available-to-.data-section.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a98f490b0eb0e47f14a592448134d0086851d806
--- /dev/null
+++ b/debian/patches/riscv64/serial-move-sbi_dbcn_available-to-.data-section.patch
@@ -0,0 +1,43 @@
+From: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
+To: Tom Rini <trini@konsulko.com>
+Cc: Rick Chen <rick@andestech.com>, Leo Yu-Chi Liang <ycliang@andestech.com>,
+ u-boot@lists.denx.de,
+ Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
+Subject: [PATCH 1/1] serial: move sbi_dbcn_available to .data section
+Date: Mon, 26 Feb 2024 17:32:26 +0100
+Message-ID: <20240226163226.126288-1-heinrich.schuchardt@canonical.com>
+Origin: https://patchwork.ozlabs.org/project/uboot/patch/20240226163226.126288-1-heinrich.schuchardt@canonical.com/
+Bug-Debian: https://bugs.debian.org/1060682
+
+U-Boot SPL loads the device-tree directly behind main U-Boot overlapping
+the .bss section. reserve_fdt() is called in board_init_f() to relocate the
+device-tree to a safe location.
+
+Debug UARTs are enabled before board_init_f(). With sbi_dbcn_available in
+the .bss section the device-tree is corrupted when _debug_uart_init() is
+called in the SBI serial driver. Move the variable to the .data section.
+
+Link: https://bugs.launchpad.net/ubuntu/+source/u-boot/+bug/2054091
+Fixes: dfe08374943c ("risc-v: implement DBCN based debug console")
+Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
+---
+ drivers/serial/serial_sbi.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/serial/serial_sbi.c b/drivers/serial/serial_sbi.c
+index a51a96c1ef0..f3ecfccab43 100644
+--- a/drivers/serial/serial_sbi.c
++++ b/drivers/serial/serial_sbi.c
+@@ -17,7 +17,7 @@ static inline void _debug_uart_putc(int c)
+ 
+ #else
+ 
+-static int sbi_dbcn_available;
++static int sbi_dbcn_available __section(".data");
+ 
+ static inline void _debug_uart_init(void)
+ {
+-- 
+2.43.0
+
+
diff --git a/debian/patches/series b/debian/patches/series
index fd03069a2e2f860341c10fc4c9275642ced572e0..dce9c43215ede9fd42e404d962e18733f6a1aa05 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1,5 @@
+allwinner/0001-arm-sunxi-Reduce-inrush-current-on-Olimex-A20-OLinuX.patch
+
 arndale/board-spl-rule.diff
 
 test-imagetools-test-fixes
@@ -11,3 +13,12 @@ rockchip/rockchip-inno-usb.patch
 qemu/efi-secure-boot.patch
 
 Makefile-Use-relative-paths-for-debugging-symbols.patch
+
+riscv64/efi_loader-avoid-pointer-access-after-calling-efi_de.patch
+riscv64/efi_loader-create-common-function-to-free-struct-efi.patch
+riscv64/board-starfive-handle-compatible-property-in-dynamic.patch
+riscv64/configs-visionfive2-Disable-ENV_IS_NOWHERE.patch
+riscv64/serial-move-sbi_dbcn_available-to-.data-section.patch
+riscv64/riscv-sifive-fu740-reduce-DDR-speed-from-1866MT-s-to-1600MT-s.patch
+
+am62x/0008-arm-dts-k3-am625-Don-t-try-to-build-the-final-firmwa.patch
diff --git a/debian/targets.mk b/debian/targets.mk
index 12eb78b9b89d5c652875a77941a25f5b2f8deced..4a6cf1f0fdfe9205494ea2b8572dc3e16ece4fc5 100644
--- a/debian/targets.mk
+++ b/debian/targets.mk
@@ -6,26 +6,26 @@ ifeq (${DEB_HOST_ARCH},arm64)
 # u-boot-amlogic
 
   # Neil Armstrong <narmstrong@baylibre.com>
-  u-boot-amlogic_platforms += khadas-vim
+  u-boot-amlogic-binaries_platforms += khadas-vim
   khadas-vim_targets := u-boot.bin uboot.elf
 
   # Neil Armstrong <narmstrong@baylibre.com>
-  u-boot-amlogic_platforms += khadas-vim2
+  u-boot-amlogic-binaries_platforms += khadas-vim2
   khadas-vim2_targets := u-boot.bin uboot.elf
 
   # Frederic Danis <frederic.danis@collabora.com>
-  u-boot-amlogic_platforms += libretech-cc
+  u-boot-amlogic-binaries_platforms += libretech-cc
   libretech-cc_targets := u-boot.bin uboot.elf
 
   # Neil Armstrong <narmstrong@baylibre.com>
-  u-boot-amlogic_platforms += nanopi-k2
+  u-boot-amlogic-binaries_platforms += nanopi-k2
   nanopi-k2_targets := u-boot.bin uboot.elf
 
   # Vagrant Cascadian <vagrant@debian.org>
-  u-boot-amlogic_platforms += odroid-c2
+  u-boot-amlogic-binaries_platforms += odroid-c2
   odroid-c2_targets := u-boot.bin uboot.elf
 
-  u-boot-amlogic_platforms += odroid-n2
+  u-boot-amlogic-binaries_platforms += odroid-n2
   odroid-n2_targets := u-boot.bin uboot.elf
 
 # u-boot-asahi
@@ -140,6 +140,18 @@ ifeq (${DEB_HOST_ARCH},arm64)
   u-boot-rpi_platforms += rpi_arm64
   rpi_arm64_targets := u-boot.bin uboot.elf
 
+# u-boot-sitara
+
+  # Martyn Welch <martyn.welch@collabora.com>
+  u-boot-sitara-binaries_platforms += am62x_evm_r5
+  # Cross-compile initial SPL which boots on 32-bit Cortex-R5 ARM coprocessor
+  am62x_evm_r5_CROSS_COMPILE := arm-linux-gnueabihf-
+  am62x_evm_r5_targets := spl/u-boot-spl.bin
+
+  # Martyn Welch <martyn.welch@collabora.com>
+  u-boot-sitara-binaries_platforms += am62x_evm_a53
+  am62x_evm_a53_targets := spl/u-boot-spl-nodtb.bin arch/arm/dts/k3-am625-sk.dtb u-boot.img
+
 # u-boot-sunxi
 
   u-boot-sunxi_assigns = \
@@ -284,11 +296,11 @@ else ifeq (${DEB_HOST_ARCH},armhf)
   arndale_targets := spl/arndale-spl.bin u-boot.bin uboot.elf
 
   # Joost van Zwieten <joostvanzwieten@gmail.com>, Odroid-U3
-  u-boot-exynos_platforms += odroid
+  u-boot-exynos-binaries_platforms += odroid
   odroid_targets := u-boot.bin uboot.elf
 
   # Vagrant Cascadian <vagrant@debian.org>, Odroid-XU4
-  u-boot-exynos_platforms += odroid-xu3
+  u-boot-exynos-binaries_platforms += odroid-xu3
   odroid-xu3_targets := u-boot.bin uboot.elf
 
 # u-boot-imx
@@ -527,6 +539,10 @@ else ifeq (${DEB_HOST_ARCH},armhf)
   u-boot-sunxi_platforms += nanopi_neo_air
   nanopi_neo_air_targets := u-boot-sunxi-with-spl.bin uboot.elf
 
+  # Andrey Loukhnov <loukhnov@lotes-tm.ru>
+  u-boot-sunxi_platforms += orangepi_pc_plus
+  orangepi_pc_plus_targets := u-boot-sunxi-with-spl.bin  uboot.elf
+
   # Vagrant Cascadian <vagrant@debian.org>, Orange PI Plus2
   u-boot-sunxi_platforms += orangepi_plus
   orangepi_plus_targets := u-boot-sunxi-with-spl.bin uboot.elf
diff --git a/debian/u-boot-amlogic.docs b/debian/u-boot-amlogic-binaries.docs
similarity index 100%
rename from debian/u-boot-amlogic.docs
rename to debian/u-boot-amlogic-binaries.docs
diff --git a/debian/u-boot-amlogic-binaries.lintian-overrides b/debian/u-boot-amlogic-binaries.lintian-overrides
new file mode 100644
index 0000000000000000000000000000000000000000..2f351c4e2d0336c16748ede8a190db569852fa89
--- /dev/null
+++ b/debian/u-boot-amlogic-binaries.lintian-overrides
@@ -0,0 +1,15 @@
+
+# There are no file conflicts across architectures for u-boot, as each
+# target is only installed on a single architecture. In theory, some
+# targets could be built on multiple architectures, but could instead install
+# the package for the architecture needed.
+u-boot-amlogic-binaries binary: arch-dependent-file-not-in-arch-specific-directory *usr/lib/u-boot/*/uboot.elf*
+
+# These bootloaders need to be statically linked.
+u-boot-amlogic-binaries binary: statically-linked-binary *usr/lib/u-boot/*/uboot.elf*
+
+# These are bootloader binaries, and have no external dependency information
+u-boot-amlogic-binaries binary: shared-library-lacks-prerequisites *usr/lib/u-boot/*/uboot.elf*
+
+u-boot-amlogic-binaries: description-synopsis-starts-with-article
+
diff --git a/debian/u-boot-exynos.docs b/debian/u-boot-exynos-binaries.docs
similarity index 100%
rename from debian/u-boot-exynos.docs
rename to debian/u-boot-exynos-binaries.docs
diff --git a/debian/u-boot-amlogic.lintian-overrides b/debian/u-boot-exynos-binaries.lintian-overrides
similarity index 52%
rename from debian/u-boot-amlogic.lintian-overrides
rename to debian/u-boot-exynos-binaries.lintian-overrides
index 33e9d55fb23544c8df25002210e412c764ea284b..f4126e727a90578417ae93c97e8b339ca2058bd1 100644
--- a/debian/u-boot-amlogic.lintian-overrides
+++ b/debian/u-boot-exynos-binaries.lintian-overrides
@@ -3,13 +3,13 @@
 # target is only installed on a single architecture. In theory, some
 # targets could be built on multiple architectures, but could instead install
 # the package for the architecture needed.
-u-boot-amlogic binary: arch-dependent-file-not-in-arch-specific-directory *usr/lib/u-boot/*/uboot.elf*
+u-boot-exynos-binaries binary: arch-dependent-file-not-in-arch-specific-directory *usr/lib/u-boot/*/uboot.elf*
 
 # These bootloaders need to be statically linked.
-u-boot-amlogic binary: statically-linked-binary *usr/lib/u-boot/*/uboot.elf*
+u-boot-exynos-binaries binary: statically-linked-binary *usr/lib/u-boot/*/uboot.elf*
 
 # These are bootloader binaries, and have no external dependency information
-u-boot-amlogic binary: shared-library-lacks-prerequisites *usr/lib/u-boot/*/uboot.elf*
+u-boot-exynos-binaries binary: shared-library-lacks-prerequisites *usr/lib/u-boot/*/uboot.elf*
 
-u-boot-amlogic: description-synopsis-starts-with-article
+u-boot-exynos-binaries: description-synopsis-starts-with-article