diff --git a/meta-arm/meta-arm-bsp/conf/layer.conf b/meta-arm/meta-arm-bsp/conf/layer.conf
index 75efe54..e192a83 100644
--- a/meta-arm/meta-arm-bsp/conf/layer.conf
+++ b/meta-arm/meta-arm-bsp/conf/layer.conf
@@ -9,7 +9,7 @@
 BBFILE_PATTERN_meta-arm-bsp = "^${LAYERDIR}/"
 BBFILE_PRIORITY_meta-arm-bsp = "5"
 
-LAYERSERIES_COMPAT_meta-arm-bsp = "langdale mickledore"
+LAYERSERIES_COMPAT_meta-arm-bsp = "mickledore"
 
 LAYERDEPENDS_meta-arm-bsp = "core meta-arm"
 # This won't be used by layerindex-fetch, but works everywhere else
diff --git a/meta-arm/meta-arm-bsp/conf/machine/corstone500.conf b/meta-arm/meta-arm-bsp/conf/machine/corstone500.conf
index 9db2ceb..dfc850d 100644
--- a/meta-arm/meta-arm-bsp/conf/machine/corstone500.conf
+++ b/meta-arm/meta-arm-bsp/conf/machine/corstone500.conf
@@ -26,7 +26,7 @@
 UBOOT_MACHINE = "corstone500_defconfig"
 UBOOT_IMAGE_ENTRYPOINT = "0x84000000"
 UBOOT_IMAGE_LOADADDRESS = "0x84000000"
-PREFERRED_VERSION_u-boot ?= "2022.07"
+PREFERRED_VERSION_u-boot ?= "2022.10"
 
 # making sure EXTRA_IMAGEDEPENDS will be used while creating the image
 WKS_FILE_DEPENDS:append = " ${EXTRA_IMAGEDEPENDS}"
diff --git a/meta-arm/meta-arm-bsp/conf/machine/fvp-baser-aemv8r64.conf b/meta-arm/meta-arm-bsp/conf/machine/fvp-baser-aemv8r64.conf
index 06bef29..0c2ea12 100644
--- a/meta-arm/meta-arm-bsp/conf/machine/fvp-baser-aemv8r64.conf
+++ b/meta-arm/meta-arm-bsp/conf/machine/fvp-baser-aemv8r64.conf
@@ -9,7 +9,7 @@
 EXTRA_IMAGEDEPENDS += "boot-wrapper-aarch64"
 
 PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
-PREFERRED_VERSION_u-boot ?= "2022.07"
+PREFERRED_VERSION_u-boot ?= "2022.10"
 
 KERNEL_IMAGETYPE = "Image"
 KERNEL_DEVICETREE = "arm/fvp-baser-aemv8r64.dtb"
@@ -25,9 +25,7 @@
 MACHINE_FEATURES:append = " efi"
 
 # As this is a virtual target that will not be used in the real world there is
-# no need for real SSH keys.  Disable rng-tools (which takes too long to
-# initialise) and install the pre-generated keys.
-PACKAGECONFIG:remove:pn-openssh = "rng-tools"
+# no need for real SSH keys.
 MACHINE_EXTRA_RRECOMMENDS += "ssh-pregen-hostkeys"
 
 # testimage configuration
diff --git a/meta-arm/meta-arm-bsp/conf/machine/include/corstone1000.inc b/meta-arm/meta-arm-bsp/conf/machine/include/corstone1000.inc
index ff00e3f..d5d6418 100644
--- a/meta-arm/meta-arm-bsp/conf/machine/include/corstone1000.inc
+++ b/meta-arm/meta-arm-bsp/conf/machine/include/corstone1000.inc
@@ -22,7 +22,7 @@
 RE_IMAGE_OFFSET = "0x1000"
 
 # u-boot
-PREFERRED_VERSION_u-boot ?= "2022.07"
+PREFERRED_VERSION_u-boot ?= "2022.10"
 EXTRA_IMAGEDEPENDS += "u-boot"
 
 UBOOT_CONFIG ??= "EFI"
diff --git a/meta-arm/meta-arm-bsp/conf/machine/include/fvp-common.inc b/meta-arm/meta-arm-bsp/conf/machine/include/fvp-common.inc
index b10977c..b6fc74d 100644
--- a/meta-arm/meta-arm-bsp/conf/machine/include/fvp-common.inc
+++ b/meta-arm/meta-arm-bsp/conf/machine/include/fvp-common.inc
@@ -19,9 +19,7 @@
 EXTRA_IMAGEDEPENDS += "trusted-firmware-a u-boot"
 
 # As this is a virtual target that will not be used in the real world there is
-# no need for real SSH keys.  Disable rng-tools (which takes too long to
-# initialise) and install the pre-generated keys.
-PACKAGECONFIG:remove:pn-openssh = "rng-tools"
+# no need for real SSH keys.
 MACHINE_EXTRA_RRECOMMENDS += "ssh-pregen-hostkeys"
 
 TEST_TARGET = "OEFVPTarget"
diff --git a/meta-arm/meta-arm-bsp/conf/machine/juno.conf b/meta-arm/meta-arm-bsp/conf/machine/juno.conf
index c002ed6..4a86d4e 100644
--- a/meta-arm/meta-arm-bsp/conf/machine/juno.conf
+++ b/meta-arm/meta-arm-bsp/conf/machine/juno.conf
@@ -10,10 +10,10 @@
 
 MACHINE_FEATURES = "usbhost usbgadget alsa screen wifi bluetooth optee pci"
 
-KERNEL_IMAGETYPE = "Image"
+KERNEL_IMAGETYPE = "Image.gz"
 KERNEL_DEVICETREE = "arm/juno.dtb arm/juno-r1.dtb arm/juno-r2.dtb"
 
-IMAGE_FSTYPES += "tar.bz2 ext4"
+IMAGE_FSTYPES += "tar.bz2 ext4 cpio.gz"
 
 SERIAL_CONSOLES = "115200;ttyAMA0"
 
@@ -25,3 +25,6 @@
 
 # Juno u-boot configuration
 UBOOT_MACHINE = "vexpress_aemv8a_juno_defconfig"
+
+INITRAMFS_IMAGE_BUNDLE ?= "1"
+INITRAMFS_IMAGE = "core-image-minimal"
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/images/firmware-image-juno.bb b/meta-arm/meta-arm-bsp/recipes-bsp/images/firmware-image-juno.bb
index 80565af..45f2ec7 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/images/firmware-image-juno.bb
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/images/firmware-image-juno.bb
@@ -63,10 +63,10 @@
     done
 
     if [ "${INITRAMFS_IMAGE_BUNDLE}" -eq 1 ]; then
-        cp -L -f ${DEPLOY_DIR_IMAGE}/Image-initramfs-juno.bin \
+        cp -L -f ${DEPLOY_DIR_IMAGE}/Image.gz-initramfs-juno.bin \
             ${D}/${UNPACK_DIR}/SOFTWARE/Image
     else
-        cp -L -f ${DEPLOY_DIR_IMAGE}/Image ${D}/${UNPACK_DIR}/SOFTWARE/
+        cp -L -f ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE} ${D}/${UNPACK_DIR}/SOFTWARE/
     fi
 
     # Compress the files
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-1.7.0-corstone1000.inc b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-1.7.0-corstone1000.inc
index 861dcff..279109e 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-1.7.0-corstone1000.inc
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m-1.7.0-corstone1000.inc
@@ -6,8 +6,6 @@
 
 TFM_DEBUG = "1"
 
-
-
 ## Default is the MPS3 board
 TFM_PLATFORM_IS_FVP ?= "FALSE"
 EXTRA_OECMAKE += "-DPLATFORM_IS_FVP=${TFM_PLATFORM_IS_FVP}"
@@ -28,11 +26,6 @@
 EXTRA_OECMAKE += "-DLIBOPENAMP_SRC_PATH=${S}/../openamp -DLIBOPENAMP_BIN_PATH=${B}/libopenamp-build"
 
 
-# Uncomment to apply patches
-# FILESEXTRAPATHS:prepend := "${THISDIR}/corstone1000:"
-# SRC_URI:append:corstone1000 = " \
-#           "
-
 do_install() {
   install -D -p -m 0644 ${B}/install/outputs/tfm_s_signed.bin ${D}/firmware/tfm_s_signed.bin
   install -D -p -m 0644 ${B}/install/outputs/bl2_signed.bin ${D}/firmware/bl2_signed.bin
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0006-arm64-smccc-add-support-for-SMCCCv1.2-x0-x17-registe.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0001-arm64-smccc-add-support-for-SMCCCv1.2-x0-x17-registe.patch
similarity index 78%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0006-arm64-smccc-add-support-for-SMCCCv1.2-x0-x17-registe.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0001-arm64-smccc-add-support-for-SMCCCv1.2-x0-x17-registe.patch
index 01cd561..837f8a9 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0006-arm64-smccc-add-support-for-SMCCCv1.2-x0-x17-registe.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0001-arm64-smccc-add-support-for-SMCCCv1.2-x0-x17-registe.patch
@@ -1,7 +1,7 @@
-From 7afe2370bc24b9003be8184fbd3169ebca03165a Mon Sep 17 00:00:00 2001
+From 584e4952dca726c3dc9df319dffb37a518b65c14 Mon Sep 17 00:00:00 2001
 From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
 Date: Fri, 29 Jul 2022 13:06:19 +0100
-Subject: [PATCH 06/26] arm64: smccc: add support for SMCCCv1.2 x0-x17
+Subject: [PATCH 01/25] arm64: smccc: add support for SMCCCv1.2 x0-x17
  registers
 
 add support for x0-x17 registers used by the SMC calls
@@ -16,13 +16,19 @@
 [1]: https://documentation-service.arm.com/static/5f8edaeff86e16515cdbe4c6?token=
 
 Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20220926101723.9965-1-abdellatif.elkhlifi@arm.com/]
-
----
+Reviewed-by: Jens Wiklander <jens.wiklander@linaro.org>
+Cc: Tom Rini <trini@konsulko.com>
+Cc: Simon Glass <sjg@chromium.org>
+Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
+Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20221122131751.22747-1-abdellatif.elkhlifi@arm.com/]
 
 Changelog:
 ===============
 
+v7:
+
+* improve indentation of ARM_SMCCC_1_2_REGS_Xn_OFFS
+
 v4:
 
 * rename the commit title and improve description
@@ -33,11 +39,11 @@
 * port x0-x17 registers support from linux kernel as defined by SMCCCv1.2
   commit title:
       arm64: smccc: add Xn registers support used by SMC calls
-
+---
  arch/arm/cpu/armv8/smccc-call.S | 53 +++++++++++++++++++++++++++++++++
- arch/arm/lib/asm-offsets.c      | 13 ++++++++
+ arch/arm/lib/asm-offsets.c      | 14 +++++++++
  include/linux/arm-smccc.h       | 43 ++++++++++++++++++++++++++
- 3 files changed, 109 insertions(+)
+ 3 files changed, 110 insertions(+)
 
 diff --git a/arch/arm/cpu/armv8/smccc-call.S b/arch/arm/cpu/armv8/smccc-call.S
 index dc92b28777..ec6f299bc9 100644
@@ -108,38 +114,39 @@
 +
 +#endif
 diff --git a/arch/arm/lib/asm-offsets.c b/arch/arm/lib/asm-offsets.c
-index 22fd541f9a..b6bd1b32b0 100644
+index 22fd541f9a..db6d7ed234 100644
 --- a/arch/arm/lib/asm-offsets.c
 +++ b/arch/arm/lib/asm-offsets.c
-@@ -9,6 +9,8 @@
+@@ -9,6 +9,9 @@
   * generate asm statements containing #defines,
   * compile this file to assembler, and then extract the
   * #defines from the assembly-language output.
 + *
 + * (C) Copyright 2022 ARM Limited
++ * Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
   */
  
  #include <common.h>
-@@ -117,6 +119,17 @@ int main(void)
+@@ -117,6 +120,17 @@ int main(void)
  	DEFINE(ARM_SMCCC_RES_X2_OFFS, offsetof(struct arm_smccc_res, a2));
  	DEFINE(ARM_SMCCC_QUIRK_ID_OFFS, offsetof(struct arm_smccc_quirk, id));
  	DEFINE(ARM_SMCCC_QUIRK_STATE_OFFS, offsetof(struct arm_smccc_quirk, state));
-+	#ifdef CONFIG_ARM64
-+		DEFINE(ARM_SMCCC_1_2_REGS_X0_OFFS,	offsetof(struct arm_smccc_1_2_regs, a0));
-+		DEFINE(ARM_SMCCC_1_2_REGS_X2_OFFS,	offsetof(struct arm_smccc_1_2_regs, a2));
-+		DEFINE(ARM_SMCCC_1_2_REGS_X4_OFFS,	offsetof(struct arm_smccc_1_2_regs, a4));
-+		DEFINE(ARM_SMCCC_1_2_REGS_X6_OFFS,	offsetof(struct arm_smccc_1_2_regs, a6));
-+		DEFINE(ARM_SMCCC_1_2_REGS_X8_OFFS,	offsetof(struct arm_smccc_1_2_regs, a8));
-+		DEFINE(ARM_SMCCC_1_2_REGS_X10_OFFS,	offsetof(struct arm_smccc_1_2_regs, a10));
-+		DEFINE(ARM_SMCCC_1_2_REGS_X12_OFFS,	offsetof(struct arm_smccc_1_2_regs, a12));
-+		DEFINE(ARM_SMCCC_1_2_REGS_X14_OFFS,	offsetof(struct arm_smccc_1_2_regs, a14));
-+		DEFINE(ARM_SMCCC_1_2_REGS_X16_OFFS,	offsetof(struct arm_smccc_1_2_regs, a16));
-+	#endif
++#ifdef CONFIG_ARM64
++	DEFINE(ARM_SMCCC_1_2_REGS_X0_OFFS,	offsetof(struct arm_smccc_1_2_regs, a0));
++	DEFINE(ARM_SMCCC_1_2_REGS_X2_OFFS,	offsetof(struct arm_smccc_1_2_regs, a2));
++	DEFINE(ARM_SMCCC_1_2_REGS_X4_OFFS,	offsetof(struct arm_smccc_1_2_regs, a4));
++	DEFINE(ARM_SMCCC_1_2_REGS_X6_OFFS,	offsetof(struct arm_smccc_1_2_regs, a6));
++	DEFINE(ARM_SMCCC_1_2_REGS_X8_OFFS,	offsetof(struct arm_smccc_1_2_regs, a8));
++	DEFINE(ARM_SMCCC_1_2_REGS_X10_OFFS,	offsetof(struct arm_smccc_1_2_regs, a10));
++	DEFINE(ARM_SMCCC_1_2_REGS_X12_OFFS,	offsetof(struct arm_smccc_1_2_regs, a12));
++	DEFINE(ARM_SMCCC_1_2_REGS_X14_OFFS,	offsetof(struct arm_smccc_1_2_regs, a14));
++	DEFINE(ARM_SMCCC_1_2_REGS_X16_OFFS,	offsetof(struct arm_smccc_1_2_regs, a16));
++#endif
  #endif
  
  	return 0;
 diff --git a/include/linux/arm-smccc.h b/include/linux/arm-smccc.h
-index 7f2be23394..dae58d3476 100644
+index e1d09884a1..9105031d55 100644
 --- a/include/linux/arm-smccc.h
 +++ b/include/linux/arm-smccc.h
 @@ -1,6 +1,8 @@
@@ -151,7 +158,7 @@
   */
  #ifndef __LINUX_ARM_SMCCC_H
  #define __LINUX_ARM_SMCCC_H
-@@ -66,6 +68,47 @@ struct arm_smccc_res {
+@@ -70,6 +72,47 @@ struct arm_smccc_res {
  	unsigned long a3;
  };
  
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0001-cmd-load-add-load-command-for-memory-mapped.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0001-cmd-load-add-load-command-for-memory-mapped.patch
deleted file mode 100644
index 4d7c51f..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0001-cmd-load-add-load-command-for-memory-mapped.patch
+++ /dev/null
@@ -1,186 +0,0 @@
-From 910760408430de32ad08b1e5ddf894cc9f2f3d0c Mon Sep 17 00:00:00 2001
-From: Rui Miguel Silva <rui.silva@linaro.org>
-Date: Thu, 24 Jun 2021 09:25:00 +0100
-Subject: [PATCH 01/26] cmd: load: add load command for memory mapped
-
-cp.b is used a lot as a way to load binaries to memory and execute
-them, however we may need to integrate this with the efi subsystem to
-set it up as a bootdev.
-
-So, introduce a loadm command that will be consistent with the other
-loadX commands and will call the efi API's.
-
-ex: loadm $kernel_addr $kernel_addr_r $kernel_size
-
-with this a kernel with CONFIG_EFI_STUB enabled will be loaded and
-then subsequently booted with bootefi command.
-
-Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
-Upstream-Status: Accepted [2022.10-rc1]
----
- README                           |  1 +
- cmd/Kconfig                      |  6 ++++
- cmd/bootefi.c                    | 12 ++++++++
- cmd/load.c                       | 48 ++++++++++++++++++++++++++++++++
- include/efi_loader.h             |  2 ++
- lib/efi_loader/efi_device_path.c |  9 ++++++
- 6 files changed, 78 insertions(+)
-
-diff --git a/README b/README
-index b7ab6e5070..cd76f95e74 100644
---- a/README
-+++ b/README
-@@ -2578,6 +2578,7 @@ rarpboot- boot image via network using RARP/TFTP protocol
- diskboot- boot from IDE devicebootd   - boot default, i.e., run 'bootcmd'
- loads	- load S-Record file over serial line
- loadb	- load binary file over serial line (kermit mode)
-+loadm   - load binary blob from source address to destination address
- md	- memory display
- mm	- memory modify (auto-incrementing)
- nm	- memory modify (constant address)
-diff --git a/cmd/Kconfig b/cmd/Kconfig
-index 09193b61b9..ba2f321ae9 100644
---- a/cmd/Kconfig
-+++ b/cmd/Kconfig
-@@ -1143,6 +1143,12 @@ config CMD_LOADB
- 	help
- 	  Load a binary file over serial line.
- 
-+config CMD_LOADM
-+	bool "loadm"
-+	default y
-+	help
-+	  Load a binary over memory mapped.
-+
- config CMD_LOADS
- 	bool "loads"
- 	default y
-diff --git a/cmd/bootefi.c b/cmd/bootefi.c
-index 827fcd97df..37ce659fa1 100644
---- a/cmd/bootefi.c
-+++ b/cmd/bootefi.c
-@@ -34,6 +34,18 @@ static struct efi_device_path *bootefi_device_path;
- static void *image_addr;
- static size_t image_size;
- 
-+/**
-+ * efi_get_image_parameters() - return image parameters
-+ *
-+ * @img_addr:		address of loaded image in memory
-+ * @img_size:		size of loaded image
-+ */
-+void efi_get_image_parameters(void **img_addr, size_t *img_size)
-+{
-+	*img_addr = image_addr;
-+	*img_size = image_size;
-+}
-+
- /**
-  * efi_clear_bootdev() - clear boot device
-  */
-diff --git a/cmd/load.c b/cmd/load.c
-index 7e4a552d90..1224a7f85b 100644
---- a/cmd/load.c
-+++ b/cmd/load.c
-@@ -1063,6 +1063,44 @@ static ulong load_serial_ymodem(ulong offset, int mode)
- 
- #endif
- 
-+#if defined(CONFIG_CMD_LOADM)
-+static int do_load_memory_bin(struct cmd_tbl *cmdtp, int flag, int argc,
-+			      char *const argv[])
-+{
-+	ulong	addr, dest, size;
-+	void	*src, *dst;
-+
-+	if (argc != 4)
-+		return CMD_RET_USAGE;
-+
-+	addr = simple_strtoul(argv[1], NULL, 16);
-+
-+	dest = simple_strtoul(argv[2], NULL, 16);
-+
-+	size = simple_strtoul(argv[3], NULL, 16);
-+
-+	if (!size) {
-+		printf("loadm: can not load zero bytes\n");
-+		return 1;
-+	}
-+
-+	src = map_sysmem(addr, size);
-+	dst = map_sysmem(dest, size);
-+
-+	memcpy(dst, src, size);
-+
-+	unmap_sysmem(src);
-+	unmap_sysmem(dst);
-+
-+	if (IS_ENABLED(CONFIG_CMD_BOOTEFI))
-+		efi_set_bootdev("Mem", "", "", map_sysmem(dest, 0), size);
-+
-+	printf("loaded bin to memory: size: %lu\n", size);
-+
-+	return 0;
-+}
-+#endif
-+
- /* -------------------------------------------------------------------- */
- 
- #if defined(CONFIG_CMD_LOADS)
-@@ -1137,3 +1175,13 @@ U_BOOT_CMD(
- );
- 
- #endif	/* CONFIG_CMD_LOADB */
-+
-+#if defined(CONFIG_CMD_LOADM)
-+U_BOOT_CMD(
-+	loadm, 4, 0,	do_load_memory_bin,
-+	"load binary blob from source address to destination address",
-+	"[src_addr] [dst_addr] [size]\n"
-+	"     - load a binary blob from one memory location to other"
-+	" from src_addr to dst_addr by size bytes"
-+);
-+#endif /* CONFIG_CMD_LOADM */
-diff --git a/include/efi_loader.h b/include/efi_loader.h
-index 11930fbea8..5b41985244 100644
---- a/include/efi_loader.h
-+++ b/include/efi_loader.h
-@@ -591,6 +591,8 @@ efi_status_t efi_load_pe(struct efi_loaded_image_obj *handle,
- void efi_save_gd(void);
- /* Call this to relocate the runtime section to an address space */
- void efi_runtime_relocate(ulong offset, struct efi_mem_desc *map);
-+/* Call this to get image parameters */
-+void efi_get_image_parameters(void **img_addr, size_t *img_size);
- /* Add a new object to the object list. */
- void efi_add_handle(efi_handle_t obj);
- /* Create handle */
-diff --git a/lib/efi_loader/efi_device_path.c b/lib/efi_loader/efi_device_path.c
-index 171661b897..2493d74326 100644
---- a/lib/efi_loader/efi_device_path.c
-+++ b/lib/efi_loader/efi_device_path.c
-@@ -1158,6 +1158,8 @@ efi_status_t efi_dp_from_name(const char *dev, const char *devnr,
- {
- 	struct blk_desc *desc = NULL;
- 	struct disk_partition fs_partition;
-+	size_t image_size;
-+	void *image_addr;
- 	int part = 0;
- 	char *filename;
- 	char *s;
-@@ -1173,6 +1175,13 @@ efi_status_t efi_dp_from_name(const char *dev, const char *devnr,
- 	} else if (!strcmp(dev, "Uart")) {
- 		if (device)
- 			*device = efi_dp_from_uart();
-+	} else if (!strcmp(dev, "Mem")) {
-+		efi_get_image_parameters(&image_addr, &image_size);
-+
-+		if (device)
-+			*device = efi_dp_from_mem(EFI_RESERVED_MEMORY_TYPE,
-+						  (uintptr_t)image_addr,
-+						  image_size);
- 	} else {
- 		part = blk_get_device_part_str(dev, devnr, &desc, &fs_partition,
- 					       1);
--- 
-2.17.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0002-arm-add-support-to-corstone1000-platform.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0002-arm-add-support-to-corstone1000-platform.patch
deleted file mode 100644
index 4c7c9b1..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0002-arm-add-support-to-corstone1000-platform.patch
+++ /dev/null
@@ -1,682 +0,0 @@
-From 3523b1bac430f10f02a31f7d013ea369e29656be Mon Sep 17 00:00:00 2001
-From: Rui Miguel Silva <rui.silva@linaro.org>
-Date: Tue, 15 Feb 2022 09:44:10 +0000
-Subject: [PATCH 02/26] arm: add support to corstone1000 platform
-
-Corstone1000 is a platform from arm, which includes pre
-verified Corstone SSE710 sub-system that combines Cortex-A and
-Cortex-M processors [0].
-
-This code adds the support for the Cortex-A35 implementation
-at host side, it contains also the necessary bits to support
-the Corstone 1000 FVP (Fixed Virtual Platform) [1] and also the
-FPGA MPS3 board implementation of this platform. [2]
-
-0: https://documentation-service.arm.com/static/619e02b1f45f0b1fbf3a8f16
-1: https://developer.arm.com/tools-and-software/open-source-software/arm-platforms-software/arm-ecosystem-fvps
-2: https://documentation-service.arm.com/static/61f3f4d7fa8173727a1b71bf
-
-Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
-Upstream-Status: Accepted [2022.10-rc1]
----
- arch/arm/Kconfig                         |   8 ++
- arch/arm/dts/Makefile                    |   3 +
- arch/arm/dts/corstone1000-fvp.dts        |  23 +++
- arch/arm/dts/corstone1000-mps3.dts       |  32 +++++
- arch/arm/dts/corstone1000.dtsi           | 169 +++++++++++++++++++++++
- board/armltd/corstone1000/Kconfig        |  12 ++
- board/armltd/corstone1000/MAINTAINERS    |   7 +
- board/armltd/corstone1000/Makefile       |   7 +
- board/armltd/corstone1000/corstone1000.c | 125 +++++++++++++++++
- configs/corstone1000_defconfig           |  80 +++++++++++
- include/configs/corstone1000.h           |  86 ++++++++++++
- 11 files changed, 552 insertions(+)
- create mode 100644 arch/arm/dts/corstone1000-fvp.dts
- create mode 100644 arch/arm/dts/corstone1000-mps3.dts
- create mode 100644 arch/arm/dts/corstone1000.dtsi
- create mode 100644 board/armltd/corstone1000/Kconfig
- create mode 100644 board/armltd/corstone1000/MAINTAINERS
- create mode 100644 board/armltd/corstone1000/Makefile
- create mode 100644 board/armltd/corstone1000/corstone1000.c
- create mode 100644 configs/corstone1000_defconfig
- create mode 100644 include/configs/corstone1000.h
-
-diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
-index 9898c7d68e..2fc2b7d20f 100644
---- a/arch/arm/Kconfig
-+++ b/arch/arm/Kconfig
-@@ -1347,6 +1347,12 @@ config ARCH_VEXPRESS64
- 	select ENV_IS_IN_FLASH if MTD
- 	imply DISTRO_DEFAULTS
- 
-+config TARGET_CORSTONE1000
-+	bool "Support Corstone1000 Platform"
-+	select ARM64
-+	select PL01X_SERIAL
-+	select DM
-+
- config TARGET_TOTAL_COMPUTE
- 	bool "Support Total Compute Platform"
- 	select ARM64
-@@ -2295,6 +2301,8 @@ source "arch/arm/mach-npcm/Kconfig"
- 
- source "board/armltd/total_compute/Kconfig"
- 
-+source "board/armltd/corstone1000/Kconfig"
-+
- source "board/bosch/shc/Kconfig"
- source "board/bosch/guardian/Kconfig"
- source "board/Marvell/octeontx/Kconfig"
-diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
-index a7e0d9f6c0..8c8f15b6a8 100644
---- a/arch/arm/dts/Makefile
-+++ b/arch/arm/dts/Makefile
-@@ -1265,6 +1265,9 @@ dtb-$(CONFIG_TARGET_EA_LPC3250DEVKITV2) += lpc3250-ea3250.dtb
- 
- dtb-$(CONFIG_ARCH_QEMU) += qemu-arm.dtb qemu-arm64.dtb
- 
-+dtb-$(CONFIG_TARGET_CORSTONE1000) += corstone1000-mps3.dtb \
-+				     corstone1000-fvp.dtb
-+
- include $(srctree)/scripts/Makefile.dts
- 
- targets += $(dtb-y)
-diff --git a/arch/arm/dts/corstone1000-fvp.dts b/arch/arm/dts/corstone1000-fvp.dts
-new file mode 100644
-index 0000000000..1fcc137a49
---- /dev/null
-+++ b/arch/arm/dts/corstone1000-fvp.dts
-@@ -0,0 +1,23 @@
-+// SPDX-License-Identifier: GPL-2.0 or MIT
-+/*
-+ * Copyright (c) 2022, Arm Limited. All rights reserved.
-+ * Copyright (c) 2022, Linaro Limited. All rights reserved.
-+ *
-+ */
-+
-+/dts-v1/;
-+
-+#include "corstone1000.dtsi"
-+
-+/ {
-+	model = "ARM Corstone1000 FVP (Fixed Virtual Platform)";
-+	compatible = "arm,corstone1000-fvp";
-+
-+	smsc: ethernet@4010000 {
-+		compatible = "smsc,lan91c111";
-+		reg = <0x40100000 0x10000>;
-+		phy-mode = "mii";
-+		interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
-+		reg-io-width = <2>;
-+	};
-+};
-diff --git a/arch/arm/dts/corstone1000-mps3.dts b/arch/arm/dts/corstone1000-mps3.dts
-new file mode 100644
-index 0000000000..e3146747c2
---- /dev/null
-+++ b/arch/arm/dts/corstone1000-mps3.dts
-@@ -0,0 +1,32 @@
-+// SPDX-License-Identifier: GPL-2.0 or MIT
-+/*
-+ * Copyright (c) 2022, Arm Limited. All rights reserved.
-+ * Copyright (c) 2022, Linaro Limited. All rights reserved.
-+ *
-+ */
-+
-+/dts-v1/;
-+
-+#include "corstone1000.dtsi"
-+
-+/ {
-+	model = "ARM Corstone1000 FPGA MPS3 board";
-+	compatible = "arm,corstone1000-mps3";
-+
-+	smsc: ethernet@4010000 {
-+		compatible = "smsc,lan9220", "smsc,lan9115";
-+		reg = <0x40100000 0x10000>;
-+		phy-mode = "mii";
-+		interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
-+		reg-io-width = <2>;
-+		smsc,irq-push-pull;
-+	};
-+
-+	usb_host: usb@40200000 {
-+		compatible = "nxp,usb-isp1763";
-+		reg = <0x40200000 0x100000>;
-+		interrupts = <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>;
-+		bus-width = <16>;
-+		dr_mode = "host";
-+	};
-+};
-diff --git a/arch/arm/dts/corstone1000.dtsi b/arch/arm/dts/corstone1000.dtsi
-new file mode 100644
-index 0000000000..d0194aa893
---- /dev/null
-+++ b/arch/arm/dts/corstone1000.dtsi
-@@ -0,0 +1,169 @@
-+// SPDX-License-Identifier: GPL-2.0 or MIT
-+/*
-+ * Copyright (c) 2022, Arm Limited. All rights reserved.
-+ * Copyright (c) 2022, Linaro Limited. All rights reserved.
-+ *
-+ */
-+
-+#include <dt-bindings/interrupt-controller/arm-gic.h>
-+
-+/ {
-+	interrupt-parent = <&gic>;
-+	#address-cells = <1>;
-+	#size-cells = <1>;
-+
-+	aliases {
-+		serial0 = &uart0;
-+		serial1 = &uart1;
-+	};
-+
-+	chosen {
-+		stdout-path = "serial0:115200n8";
-+	};
-+
-+	cpus {
-+		#address-cells = <1>;
-+		#size-cells = <0>;
-+
-+		cpu: cpu@0 {
-+			device_type = "cpu";
-+			compatible = "arm,cortex-a35";
-+			reg = <0>;
-+			next-level-cache = <&L2_0>;
-+		};
-+	};
-+
-+	memory@88200000 {
-+		device_type = "memory";
-+		reg = <0x88200000 0x77e00000>;
-+	};
-+
-+	gic: interrupt-controller@1c000000 {
-+		compatible = "arm,gic-400";
-+		#interrupt-cells = <3>;
-+		#address-cells = <0>;
-+		interrupt-controller;
-+		reg =	<0x1c010000 0x1000>,
-+			<0x1c02f000 0x2000>,
-+			<0x1c04f000 0x1000>,
-+			<0x1c06f000 0x2000>;
-+		interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(1) |
-+			      IRQ_TYPE_LEVEL_LOW)>;
-+	};
-+
-+	L2_0: l2-cache0 {
-+		compatible = "cache";
-+		cache-level = <2>;
-+		cache-size = <0x80000>;
-+		cache-line-size = <64>;
-+		cache-sets = <1024>;
-+	};
-+
-+	refclk100mhz: refclk100mhz {
-+		compatible = "fixed-clock";
-+		#clock-cells = <0>;
-+		clock-frequency = <100000000>;
-+		clock-output-names = "apb_pclk";
-+	};
-+
-+	smbclk: refclk24mhzx2 {
-+		/* Reference 24MHz clock x 2 */
-+		compatible = "fixed-clock";
-+		#clock-cells = <0>;
-+		clock-frequency = <48000000>;
-+		clock-output-names = "smclk";
-+	};
-+
-+	timer {
-+		compatible = "arm,armv8-timer";
-+		interrupts =	<GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(1) |
-+				 IRQ_TYPE_LEVEL_LOW)>,
-+				<GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(1) |
-+				 IRQ_TYPE_LEVEL_LOW)>,
-+				<GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(1) |
-+				 IRQ_TYPE_LEVEL_LOW)>,
-+				<GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(1) |
-+				 IRQ_TYPE_LEVEL_LOW)>;
-+	};
-+
-+	uartclk: uartclk {
-+		/* UART clock - 50MHz */
-+		compatible = "fixed-clock";
-+		#clock-cells = <0>;
-+		clock-frequency = <50000000>;
-+		clock-output-names = "uartclk";
-+	};
-+
-+	psci {
-+		compatible = "arm,psci-1.0", "arm,psci-0.2";
-+		method = "smc";
-+	};
-+
-+	soc {
-+		compatible = "simple-bus";
-+		#address-cells = <1>;
-+		#size-cells = <1>;
-+		interrupt-parent = <&gic>;
-+		ranges;
-+
-+		timer@1a220000 {
-+			compatible = "arm,armv7-timer-mem";
-+			reg = <0x1a220000 0x1000>;
-+			#address-cells = <1>;
-+			#size-cells = <1>;
-+			clock-frequency = <50000000>;
-+			ranges;
-+
-+			frame@1a230000 {
-+				frame-number = <0>;
-+				interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>;
-+				reg = <0x1a230000 0x1000>;
-+			};
-+		};
-+
-+		uart0: serial@1a510000 {
-+			compatible = "arm,pl011", "arm,primecell";
-+			reg = <0x1a510000 0x1000>;
-+			interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
-+			clocks = <&uartclk>, <&refclk100mhz>;
-+			clock-names = "uartclk", "apb_pclk";
-+		};
-+
-+		uart1: serial@1a520000 {
-+			compatible = "arm,pl011", "arm,primecell";
-+			reg = <0x1a520000 0x1000>;
-+			interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
-+			clocks = <&uartclk>, <&refclk100mhz>;
-+			clock-names = "uartclk", "apb_pclk";
-+		};
-+
-+		mhu_hse1: mailbox@1b820000 {
-+			compatible = "arm,mhuv2-tx", "arm,primecell";
-+			reg = <0x1b820000 0x1000>;
-+			clocks = <&refclk100mhz>;
-+			clock-names = "apb_pclk";
-+			interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
-+			#mbox-cells = <2>;
-+			arm,mhuv2-protocols = <0 0>;
-+			secure-status = "okay";     /* secure-world-only */
-+			status = "disabled";
-+		};
-+
-+		mhu_seh1: mailbox@1b830000 {
-+			compatible = "arm,mhuv2-rx", "arm,primecell";
-+			reg = <0x1b830000 0x1000>;
-+			clocks = <&refclk100mhz>;
-+			clock-names = "apb_pclk";
-+			interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
-+			#mbox-cells = <2>;
-+			arm,mhuv2-protocols = <0 0>;
-+			secure-status = "okay";     /* secure-world-only */
-+			status = "disabled";
-+		};
-+	};
-+
-+	arm_ffa: arm_ffa {
-+		compatible = "arm,ffa";
-+		method = "smc";
-+	};
-+};
-diff --git a/board/armltd/corstone1000/Kconfig b/board/armltd/corstone1000/Kconfig
-new file mode 100644
-index 0000000000..709674d4cf
---- /dev/null
-+++ b/board/armltd/corstone1000/Kconfig
-@@ -0,0 +1,12 @@
-+if TARGET_CORSTONE1000
-+
-+config SYS_BOARD
-+	default "corstone1000"
-+
-+config SYS_VENDOR
-+	default "armltd"
-+
-+config SYS_CONFIG_NAME
-+	default "corstone1000"
-+
-+endif
-diff --git a/board/armltd/corstone1000/MAINTAINERS b/board/armltd/corstone1000/MAINTAINERS
-new file mode 100644
-index 0000000000..8c905686de
---- /dev/null
-+++ b/board/armltd/corstone1000/MAINTAINERS
-@@ -0,0 +1,7 @@
-+CORSTONE1000 BOARD
-+M:	Rui Miguel Silva <rui.silva@linaro.org>
-+M:	Vishnu Banavath <vishnu.banavath@arm.com>
-+S:	Maintained
-+F:	board/armltd/corstone1000/
-+F:	include/configs/corstone1000.h
-+F:	configs/corstone1000_defconfig
-diff --git a/board/armltd/corstone1000/Makefile b/board/armltd/corstone1000/Makefile
-new file mode 100644
-index 0000000000..77a82c2892
---- /dev/null
-+++ b/board/armltd/corstone1000/Makefile
-@@ -0,0 +1,7 @@
-+# SPDX-License-Identifier: GPL-2.0+
-+#
-+# (C) Copyright 2022 Arm Limited
-+# (C) Copyright 2022 Linaro
-+# Rui Miguel Silva <rui.silva@linaro.org>
-+
-+obj-y	:= corstone1000.o
-diff --git a/board/armltd/corstone1000/corstone1000.c b/board/armltd/corstone1000/corstone1000.c
-new file mode 100644
-index 0000000000..2fa485ff37
---- /dev/null
-+++ b/board/armltd/corstone1000/corstone1000.c
-@@ -0,0 +1,125 @@
-+// SPDX-License-Identifier: GPL-2.0+
-+/*
-+ * (C) Copyright 2022 ARM Limited
-+ * (C) Copyright 2022 Linaro
-+ * Rui Miguel Silva <rui.silva@linaro.org>
-+ */
-+
-+#include <common.h>
-+#include <dm.h>
-+#include <dm/platform_data/serial_pl01x.h>
-+#include <asm/armv8/mmu.h>
-+#include <asm/global_data.h>
-+
-+
-+static const struct pl01x_serial_plat serial_plat = {
-+	.base = V2M_UART0,
-+	.type = TYPE_PL011,
-+	.clock = CONFIG_PL011_CLOCK,
-+};
-+
-+U_BOOT_DRVINFO(corstone1000_serials) = {
-+	.name = "serial_pl01x",
-+	.plat = &serial_plat,
-+};
-+
-+static struct mm_region corstone1000_mem_map[] = {
-+	{
-+		/* CVM */
-+		.virt = 0x02000000UL,
-+		.phys = 0x02000000UL,
-+		.size = 0x02000000UL,
-+		.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
-+			 PTE_BLOCK_INNER_SHARE
-+	}, {
-+		/* QSPI */
-+		.virt = 0x08000000UL,
-+		.phys = 0x08000000UL,
-+		.size = 0x08000000UL,
-+		.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
-+			 PTE_BLOCK_INNER_SHARE
-+	}, {
-+		/* Host Peripherals */
-+		.virt = 0x1A000000UL,
-+		.phys = 0x1A000000UL,
-+		.size = 0x26000000UL,
-+		.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
-+			 PTE_BLOCK_NON_SHARE |
-+			 PTE_BLOCK_PXN | PTE_BLOCK_UXN
-+        }, {
-+                /* USB */
-+                .virt = 0x40200000UL,
-+                .phys = 0x40200000UL,
-+                .size = 0x00100000UL,
-+                .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
-+                         PTE_BLOCK_NON_SHARE |
-+                         PTE_BLOCK_PXN | PTE_BLOCK_UXN
-+	}, {
-+                 /* ethernet */
-+                .virt = 0x40100000UL,
-+                .phys = 0x40100000UL,
-+                .size = 0x00100000UL,
-+                .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
-+                         PTE_BLOCK_NON_SHARE |
-+                         PTE_BLOCK_PXN | PTE_BLOCK_UXN
-+	}, {
-+		/* OCVM */
-+		.virt = 0x80000000UL,
-+		.phys = 0x80000000UL,
-+		.size = 0x80000000UL,
-+		.attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
-+			 PTE_BLOCK_INNER_SHARE
-+	}, {
-+		/* List terminator */
-+		0,
-+	}
-+};
-+
-+struct mm_region *mem_map = corstone1000_mem_map;
-+
-+void set_dfu_alt_info(char *interface, char *devstr)
-+{
-+}
-+
-+int board_init(void)
-+{
-+	return 0;
-+}
-+
-+int dram_init(void)
-+{
-+	gd->ram_size = PHYS_SDRAM_1_SIZE;
-+
-+	return 0;
-+}
-+
-+int dram_init_banksize(void)
-+{
-+	gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
-+	gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
-+
-+	return 0;
-+}
-+
-+/*
-+ * Board specific ethernet initialization routine.
-+ * */
-+int board_eth_init(struct bd_info *bis)
-+{
-+	int rc = 0;
-+
-+#ifndef CONFIG_DM_ETH
-+#ifdef CONFIG_SMC91111
-+	rc = smc91111_initialize(0, CONFIG_SMC91111_BASE);
-+#endif
-+#ifdef CONFIG_SMC911X
-+	rc = smc911x_initialize(0, CONFIG_SMC911X_BASE);
-+#endif
-+#endif
-+
-+	return rc;
-+}
-+
-+void reset_cpu(ulong addr)
-+{
-+}
-diff --git a/configs/corstone1000_defconfig b/configs/corstone1000_defconfig
-new file mode 100644
-index 0000000000..02f931b0d4
---- /dev/null
-+++ b/configs/corstone1000_defconfig
-@@ -0,0 +1,80 @@
-+CONFIG_ARM=y
-+CONFIG_TARGET_CORSTONE1000=y
-+CONFIG_SYS_TEXT_BASE=0x80000000
-+CONFIG_SYS_MALLOC_F_LEN=0x2000
-+CONFIG_SYS_MALLOC_LEN=0x2000000
-+CONFIG_SYS_LOAD_ADDR=0x82100000
-+CONFIG_NR_DRAM_BANKS=1
-+CONFIG_IDENT_STRING=" corstone1000 aarch64 "
-+CONFIG_FIT=y
-+CONFIG_BOOTDELAY=3
-+CONFIG_USE_BOOTARGS=y
-+CONFIG_BOOTARGS="console=ttyAMA0 loglevel=9 ip=dhcp earlyprintk"
-+CONFIG_LOGLEVEL=7
-+# CONFIG_DISPLAY_CPUINFO is not set
-+# CONFIG_DISPLAY_BOARDINFO is not set
-+CONFIG_HUSH_PARSER=y
-+CONFIG_SYS_PROMPT="corstone1000# "
-+# CONFIG_CMD_CONSOLE is not set
-+CONFIG_CMD_BOOTZ=y
-+CONFIG_CMD_BOOTM=y
-+CONFIG_CMD_LOADM=y
-+CONFIG_CMD_BOOTEFI=y
-+CONFIG_EFI_LOADER=y
-+CONFIG_EFI_PARTITION=y
-+CONFIG_CMD_BOOTEFI_HELLO_COMPILE=y
-+CONFIG_CMD_BOOTEFI_HELLO=y
-+# CONFIG_CMD_XIMG is not set
-+# CONFIG_CMD_ENV_EXISTS is not set
-+CONFIG_CMD_NVEDIT_EFI=y
-+# CONFIG_CMD_LOADS is not set
-+CONFIG_CMD_USB=y
-+CONFIG_CMD_ITEST=y
-+# CONFIG_CMD_SETEXPR is not set
-+# CONFIG_CMD_NFS is not set
-+CONFIG_CMD_MII=y
-+CONFIG_CMD_CACHE=y
-+CONFIG_CMD_EFIDEBUG=y
-+CONFIG_CMD_FAT=y
-+CONFIG_OF_CONTROL=y
-+CONFIG_REGMAP=y
-+# CONFIG_MMC is not set
-+CONFIG_DM_SERIAL=y
-+CONFIG_USB=y
-+CONFIG_DM_USB=y
-+CONFIG_USB_STORAGE=y
-+CONFIG_EFI_MM_COMM_TEE=y
-+# CONFIG_OPTEE is not set
-+# CONFIG_GENERATE_SMBIOS_TABLE is not set
-+# CONFIG_HEXDUMP is not set
-+CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
-+CONFIG_EFI_CAPSULE_ON_DISK=y
-+# CONFIG_EFI_CAPSULE_ON_DISK_EARLY is not set
-+# CONFIG_EFI_CAPSULE_AUTHENTICATE is not set
-+CONFIG_EFI_HAVE_CAPSULE_SUPPORT=y
-+CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
-+CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
-+CONFIG_EFI_SECURE_BOOT=y
-+CONFIG_DM_RTC=y
-+CONFIG_CMD_RTC=y
-+CONFIG_EFI_GET_TIME=y
-+CONFIG_EFI_SET_TIME=y
-+CONFIG_RTC_EMULATION=y
-+CONFIG_PSCI_RESET=y
-+CONFIG_DISTRO_DEFAULTS=y
-+CONFIG_CMD_DHCP=y
-+CONFIG_SMC911X=y
-+CONFIG_SMC911X_BASE=0x40100000
-+CONFIG_DM_ETH=y
-+CONFIG_PHY_SMSC=y
-+CONFIG_CMD_BOOTEFI_SELFTEST=y
-+CONFIG_CMD_TIME=y
-+CONFIG_CMD_GETTIME=y
-+CONFIG_NET_RANDOM_ETHADDR=y
-+CONFIG_VERSION_VARIABLE=y
-+CONFIG_PHYLIB=y
-+CONFIG_PHY=y
-+CONFIG_RAM=y
-+CONFIG_ERRNO_STR=y
-+CONFIG_CMD_EDITENV=y
-+CONFIG_MISC=y
-diff --git a/include/configs/corstone1000.h b/include/configs/corstone1000.h
-new file mode 100644
-index 0000000000..cf166f107e
---- /dev/null
-+++ b/include/configs/corstone1000.h
-@@ -0,0 +1,86 @@
-+/* SPDX-License-Identifier: GPL-2.0+ */
-+/*
-+ * (C) Copyright 2022 ARM Limited
-+ * (C) Copyright 2022 Linaro
-+ * Rui Miguel Silva <rui.silva@linaro.org>
-+ * Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-+ *
-+ * Configuration for Corstone1000. Parts were derived from other ARM
-+ * configurations.
-+ */
-+
-+#ifndef __CORSTONE1000_H
-+#define __CORSTONE1000_H
-+
-+#include <linux/sizes.h>
-+
-+#define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_SDRAM_BASE + 0x03f00000)
-+#define CONFIG_SKIP_LOWLEVEL_INIT
-+
-+#define CONFIG_SYS_HZ		1000
-+
-+#define V2M_SRAM0		0x02000000
-+#define V2M_QSPI		0x08000000
-+
-+#define V2M_DEBUG		0x10000000
-+#define V2M_BASE_PERIPH		0x1A000000
-+
-+#define V2M_BASE		0x80000000
-+
-+#define V2M_PERIPH_OFFSET(x)	(x << 16)
-+
-+#define V2M_SYSID		(V2M_BASE_PERIPH)
-+#define V2M_SYSCTL		(V2M_BASE_PERIPH + V2M_PERIPH_OFFSET(1))
-+
-+#define V2M_COUNTER_CTL		(V2M_BASE_PERIPH + V2M_PERIPH_OFFSET(32))
-+#define V2M_COUNTER_READ	(V2M_BASE_PERIPH + V2M_PERIPH_OFFSET(33))
-+
-+#define V2M_TIMER_CTL		(V2M_BASE_PERIPH + V2M_PERIPH_OFFSET(34))
-+#define V2M_TIMER_BASE0		(V2M_BASE_PERIPH + V2M_PERIPH_OFFSET(35))
-+
-+#define V2M_UART0		(V2M_BASE_PERIPH + V2M_PERIPH_OFFSET(81))
-+#define V2M_UART1		(V2M_BASE_PERIPH + V2M_PERIPH_OFFSET(82))
-+
-+#define CONFIG_PL011_CLOCK	50000000
-+
-+/* Physical Memory Map */
-+#define PHYS_SDRAM_1		(V2M_BASE)
-+#define PHYS_SDRAM_1_SIZE	0x80000000
-+
-+#define CONFIG_ENV_SECT_SIZE	SZ_64K
-+
-+#define CONFIG_SYS_SDRAM_BASE	PHYS_SDRAM_1
-+
-+/* Monitor Command Prompt */
-+#define CONFIG_SYS_CBSIZE	512	/* Console I/O Buffer Size */
-+#define CONFIG_SYS_MAXARGS	64	/* max command args */
-+
-+#define CONFIG_EXTRA_ENV_SETTINGS							\
-+				"usb_pgood_delay=250\0"					\
-+				"boot_bank_flag=0x08002000\0"				\
-+				"kernel_addr_bank_0=0x083EE000\0"			\
-+				"kernel_addr_bank_1=0x0936E000\0"			\
-+				"retrieve_kernel_load_addr="				\
-+					"if itest.l *${boot_bank_flag} == 0; then "	\
-+					    "setenv kernel_addr $kernel_addr_bank_0;"	\
-+					"else "						\
-+					    "setenv kernel_addr $kernel_addr_bank_1;"	\
-+					"fi;"						\
-+					"\0"						\
-+				"kernel_addr_r=0x88200000\0"				\
-+				"fdt_high=0xffffffff\0"
-+
-+/*
-+ * config_distro_bootcmd define the boot command to distro_bootcmd, but we here
-+ * want to first try to load a kernel if exists, override that config then
-+ */
-+#undef CONFIG_BOOTCOMMAND
-+
-+#define CONFIG_BOOTCOMMAND								\
-+				"run retrieve_kernel_load_addr;"			\
-+				"echo Loading kernel from $kernel_addr to memory ... ;"	\
-+				"loadm $kernel_addr $kernel_addr_r 0xc00000;"		\
-+				"usb start; usb reset;"					\
-+				"run distro_bootcmd;"					\
-+				"bootefi $kernel_addr_r $fdtcontroladdr;"
-+#endif
--- 
-2.17.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0002-lib-uuid-introduce-uuid_str_to_le_bin-function.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0002-lib-uuid-introduce-uuid_str_to_le_bin-function.patch
new file mode 100644
index 0000000..1b043dd
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0002-lib-uuid-introduce-uuid_str_to_le_bin-function.patch
@@ -0,0 +1,132 @@
+From b226e6000de0b1f55d56c1193d1fde028d64abd3 Mon Sep 17 00:00:00 2001
+From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+Date: Thu, 4 Aug 2022 16:46:47 +0100
+Subject: [PATCH 02/25] lib: uuid: introduce uuid_str_to_le_bin function
+
+convert UUID string to little endian binary data
+
+Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+Cc: Tom Rini <trini@konsulko.com>
+Cc: Simon Glass <sjg@chromium.org>
+Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
+Cc: Jens Wiklander <jens.wiklander@linaro.org>
+Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20221122131751.22747-1-abdellatif.elkhlifi@arm.com/]
+
+Changelog:
+===============
+
+v8:
+
+* use simple_strtoull() in uuid_str_to_le_bin() to support 32-bit platforms
+
+v7:
+
+* rename be_uuid_str_to_le_bin() to uuid_str_to_le_bin()
+* make uuid_str_to_le_bin() implementation similar to uuid_str_to_bin()
+  by using same APIs
+
+v4:
+
+* rename ffa_uuid_str_to_bin to be_uuid_str_to_le_bin and put in
+  a standalone commit (the current)
+
+v3:
+
+* introduce ffa_uuid_str_to_bin (provided by
+  arm_ffa: introduce Arm FF-A low-level driver)
+---
+ include/uuid.h |  8 ++++++++
+ lib/uuid.c     | 46 ++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 54 insertions(+)
+
+diff --git a/include/uuid.h b/include/uuid.h
+index 4a4883d3b5..293a8eb0a5 100644
+--- a/include/uuid.h
++++ b/include/uuid.h
+@@ -2,6 +2,8 @@
+ /*
+  * Copyright (C) 2014 Samsung Electronics
+  * Przemyslaw Marczak <p.marczak@samsung.com>
++ * (C) Copyright 2022 ARM Limited
++ * Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+  */
+ #ifndef __UUID_H__
+ #define __UUID_H__
+@@ -44,4 +46,10 @@ int uuid_guid_get_bin(const char *guid_str, unsigned char *guid_bin);
+ const char *uuid_guid_get_str(const unsigned char *guid_bin);
+ void gen_rand_uuid(unsigned char *uuid_bin);
+ void gen_rand_uuid_str(char *uuid_str, int str_format);
++
++/**
++ * uuid_str_to_le_bin - Converts a UUID string to little endian binary data
++ */
++int uuid_str_to_le_bin(const char *uuid_str, unsigned char *uuid_bin);
++
+ #endif
+diff --git a/lib/uuid.c b/lib/uuid.c
+index 465e1ac38f..d29f561a70 100644
+--- a/lib/uuid.c
++++ b/lib/uuid.c
+@@ -1,6 +1,8 @@
+ // SPDX-License-Identifier: GPL-2.0+
+ /*
+  * Copyright 2011 Calxeda, Inc.
++ * (C) Copyright 2022 ARM Limited
++ * Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+  */
+ 
+ #include <common.h>
+@@ -346,6 +348,50 @@ int uuid_str_to_bin(const char *uuid_str, unsigned char *uuid_bin,
+ 	return 0;
+ }
+ 
++/**
++ * uuid_str_to_le_bin() - Convert string UUID to little endian binary data.
++ * @uuid_str:	pointer to UUID string
++ * @uuid_bin:	pointer to allocated array for little endian output [16B]
++ *
++ * UUID string is 36 characters (36 bytes):
++ *
++ * xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
++ *
++ * where x is a hexadecimal character. Fields are separated by '-'s.
++ * When converting to a little endian binary UUID, the string fields are reversed.
++ *
++ * Return:
++ *
++ *    uuid_bin filled with little endian UUID data
++ *    On success 0 is returned. Otherwise, failure code.
++ */
++int uuid_str_to_le_bin(const char *uuid_str, unsigned char *uuid_bin)
++{
++	u16 tmp16;
++	u32 tmp32;
++	u64 tmp64;
++
++	if (!uuid_str_valid(uuid_str) || !uuid_bin)
++		return -EINVAL;
++
++	tmp32 = cpu_to_le32(hextoul(uuid_str, NULL));
++	memcpy(uuid_bin, &tmp32, 4);
++
++	tmp16 = cpu_to_le16(hextoul(uuid_str + 9, NULL));
++	memcpy(uuid_bin + 4, &tmp16, 2);
++
++	tmp16 = cpu_to_le16(hextoul(uuid_str + 14, NULL));
++	memcpy(uuid_bin + 6, &tmp16, 2);
++
++	tmp16 = cpu_to_le16(hextoul(uuid_str + 19, NULL));
++	memcpy(uuid_bin + 8, &tmp16, 2);
++
++	tmp64 = cpu_to_le64(simple_strtoull(uuid_str + 24, NULL, 16));
++	memcpy(uuid_bin + 10, &tmp64, 6);
++
++	return 0;
++}
++
+ /*
+  * uuid_bin_to_str() - convert big endian binary data to string UUID or GUID.
+  *
+-- 
+2.17.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0009-arm_ffa-introduce-Arm-FF-A-low-level-driver.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0003-arm_ffa-introduce-Arm-FF-A-low-level-driver.patch
similarity index 69%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0009-arm_ffa-introduce-Arm-FF-A-low-level-driver.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0003-arm_ffa-introduce-Arm-FF-A-low-level-driver.patch
index 64653b3..774af44 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0009-arm_ffa-introduce-Arm-FF-A-low-level-driver.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0003-arm_ffa-introduce-Arm-FF-A-low-level-driver.patch
@@ -1,11 +1,11 @@
-From 4729efd57e260b8c02d8cd1c30a443d29885dbd1 Mon Sep 17 00:00:00 2001
+From 93e3267b19c5c5d27664ef133121db4b678ad72d Mon Sep 17 00:00:00 2001
 From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Date: Mon, 15 Aug 2022 15:00:44 +0100
-Subject: [PATCH 09/26] arm_ffa: introduce Arm FF-A low-level driver
+Date: Tue, 29 Nov 2022 14:40:05 +0000
+Subject: [PATCH 03/25] arm_ffa: introduce Arm FF-A low-level driver
 
-Add the driver implementing Arm Firmware Framework for Armv8-A v1.0
+Add the core driver implementing Arm Firmware Framework for Armv8-A v1.0
 
-The Firmware Framework for Arm A-profile processors (FF-A)
+The Firmware Framework for Arm A-profile processors (FF-A v1.0) [1]
 describes interfaces (ABIs) that standardize communication
 between the Secure World and Normal World leveraging TrustZone
 technology.
@@ -14,10 +14,16 @@
 on top of the SMCCC layer. The driver provides the FF-A ABIs needed for
 querying the FF-A framework from the secure world.
 
-32-bit version of the ABIs is supported and 64-bit version of FFA_RXTX_MAP
-and FFA_MSG_SEND_DIRECT_{REQ, RESP}.
+The driver uses SMC32 calling convention which means using the first
+32-bit data of the Xn registers.
 
-In u-boot FF-A design, FF-A is considered as a discoverable bus.
+All supported ABIs come with their 32-bit version except FFA_RXTX_MAP
+which has 64-bit version supported.
+
+Both 32-bit and 64-bit direct messaging are supported which allows both
+32-bit and 64-bit clients to use the FF-A bus.
+
+In U-Boot FF-A design, FF-A is considered as a discoverable bus.
 The Secure World is considered as one entity to communicate with
 using the FF-A bus. FF-A communication is handled by one device and
 one instance (the bus). This FF-A driver takes care of all the
@@ -31,16 +37,45 @@
 - sync_send_receive
 - rxtx_unmap
 
-This implementation provides an optional feature to copy the driver data
-to EFI runtime area.
+For more details please refer to the driver documentation [2].
+
+[1]: https://developer.arm.com/documentation/den0077/latest/
+[2]: doc/arch/arm64.ffa.rst
 
 Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20220926101723.9965-1-abdellatif.elkhlifi@arm.com/]
----
+Cc: Tom Rini <trini@konsulko.com>
+Cc: Simon Glass <sjg@chromium.org>
+Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
+Cc: Jens Wiklander <jens.wiklander@linaro.org>
+Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20221122131751.22747-1-abdellatif.elkhlifi@arm.com/]
 
 Changelog:
 ===============
 
+v8:
+
+* make ffa_get_partitions_info() second argument to be an SP count in both
+  modes
+* update ffa_bus_prvdata_get() to return a pointer rather than a pointer
+  address
+* remove packing from ffa_partition_info and ffa_send_direct_data structures
+* pass the FF-A bus device to the bus operations
+
+v7:
+
+* add support for 32-bit direct messaging
+* rename be_uuid_str_to_le_bin() to uuid_str_to_le_bin()
+* improve the declaration of error handling mapping
+* stating in doc/arch/arm64.ffa.rst that EFI runtime is not supported
+
+v6:
+
+* drop use of EFI runtime support (We decided with Linaro to add this later)
+* drop discovery from initcalls (discovery will be on demand by FF-A users)
+* set the alignment of the RX/TX buffers to the larger translation granule size
+* move FF-A RX/TX buffers unmapping at ExitBootServices() to a separate commit
+* update the documentation and move it to doc/arch/arm64.ffa.rst
+
 v4:
 
 * add doc/README.ffa.drv
@@ -52,16 +87,16 @@
 * replacing panics with an error log and returning an error code
 * improving features discovery in FFA_FEATURES by introducing
   rxtx_min_pages private data field
-* add ffa_remove and ffa_bind functions
+* add ffa_remove and ffa_unbind functions
 * improve how the driver behaves when bus discovery is done more than
   once
 
 v3:
 
-* align the interfaces of the u-boot FF-A driver with those in the linux
+* align the interfaces of the U-Boot FF-A driver with those in the linux
   FF-A driver
 * remove the FF-A helper layer
-* make the u-boot FF-A driver independent from EFI
+* make the U-Boot FF-A driver independent from EFI
 * provide an optional config that enables copying the driver data to EFI
   runtime section at ExitBootServices service
 * use 64-bit version of FFA_RXTX_MAP, FFA_MSG_SEND_DIRECT_{REQ, RESP}
@@ -74,113 +109,105 @@
 v1:
 
 * introduce FF-A bus driver with device tree support
-
- MAINTAINERS                                   |    7 +
- common/board_r.c                              |    7 +
- doc/README.ffa.drv                            |  160 ++
- drivers/Kconfig                               |    2 +
- drivers/Makefile                              |    1 +
- drivers/firmware/arm-ffa/Kconfig              |   39 +
- drivers/firmware/arm-ffa/Makefile             |    7 +
- drivers/firmware/arm-ffa/arm-ffa-uclass.c     |   16 +
- drivers/firmware/arm-ffa/arm_ffa_prv.h        |  196 +++
- drivers/firmware/arm-ffa/core.c               | 1344 +++++++++++++++++
- .../arm-ffa/efi_ffa_runtime_data_mgr.c        |   94 ++
- include/arm_ffa.h                             |  127 ++
- include/dm/uclass-id.h                        |    1 +
- lib/efi_loader/efi_boottime.c                 |   12 +
- 14 files changed, 2013 insertions(+)
- create mode 100644 doc/README.ffa.drv
+---
+ MAINTAINERS                               |    7 +
+ doc/arch/arm64.ffa.rst                    |  218 ++++
+ doc/arch/index.rst                        |    1 +
+ drivers/Kconfig                           |    2 +
+ drivers/Makefile                          |    1 +
+ drivers/firmware/arm-ffa/Kconfig          |   30 +
+ drivers/firmware/arm-ffa/Makefile         |    6 +
+ drivers/firmware/arm-ffa/arm-ffa-uclass.c |   16 +
+ drivers/firmware/arm-ffa/arm_ffa_prv.h    |  200 ++++
+ drivers/firmware/arm-ffa/core.c           | 1315 +++++++++++++++++++++
+ include/arm_ffa.h                         |   97 ++
+ include/dm/uclass-id.h                    |    4 +
+ 12 files changed, 1897 insertions(+)
+ create mode 100644 doc/arch/arm64.ffa.rst
  create mode 100644 drivers/firmware/arm-ffa/Kconfig
  create mode 100644 drivers/firmware/arm-ffa/Makefile
  create mode 100644 drivers/firmware/arm-ffa/arm-ffa-uclass.c
  create mode 100644 drivers/firmware/arm-ffa/arm_ffa_prv.h
  create mode 100644 drivers/firmware/arm-ffa/core.c
- create mode 100644 drivers/firmware/arm-ffa/efi_ffa_runtime_data_mgr.c
  create mode 100644 include/arm_ffa.h
 
 diff --git a/MAINTAINERS b/MAINTAINERS
-index 7f27ff4c20..e760b4ca3a 100644
+index 83346183ee..734fcb10c4 100644
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
-@@ -244,6 +244,13 @@ F:	board/CZ.NIC/
- F:	configs/turris_*_defconfig
- F:	include/configs/turris_*.h
+@@ -248,6 +248,13 @@ F:	drivers/net/cortina_ni.h
+ F:	drivers/net/phy/ca_phy.c
+ F:	configs/cortina_presidio-asic-pnand_defconfig
  
 +ARM FF-A
 +M:	Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
 +S:	Maintained
-+F:	doc/README.ffa.drv
++F:	doc/arch/arm64.ffa.rst
 +F:	drivers/firmware/arm-ffa/
 +F:	include/arm_ffa.h
 +
  ARM FREESCALE IMX
  M:	Stefano Babic <sbabic@denx.de>
  M:	Fabio Estevam <festevam@gmail.com>
-diff --git a/common/board_r.c b/common/board_r.c
-index 6f4aca2077..c75634286b 100644
---- a/common/board_r.c
-+++ b/common/board_r.c
-@@ -63,6 +63,10 @@
- #include <efi_loader.h>
- #include <relocate.h>
- 
-+#ifdef CONFIG_ARM_FFA_TRANSPORT
-+#include <arm_ffa.h>
-+#endif
-+
- DECLARE_GLOBAL_DATA_PTR;
- 
- ulong monitor_flash_len;
-@@ -779,6 +783,9 @@ static init_fnc_t init_sequence_r[] = {
- 	INIT_FUNC_WATCHDOG_RESET
- 	initr_net,
- #endif
-+#ifdef CONFIG_ARM_FFA_TRANSPORT
-+	ffa_bus_discover,
-+#endif
- #ifdef CONFIG_POST
- 	initr_post,
- #endif
-diff --git a/doc/README.ffa.drv b/doc/README.ffa.drv
+diff --git a/doc/arch/arm64.ffa.rst b/doc/arch/arm64.ffa.rst
 new file mode 100644
-index 0000000000..1c0a33deb8
+index 0000000000..dfcec82e45
 --- /dev/null
-+++ b/doc/README.ffa.drv
-@@ -0,0 +1,160 @@
-+Arm FF-A Driver
-+====================
++++ b/doc/arch/arm64.ffa.rst
+@@ -0,0 +1,218 @@
++.. SPDX-License-Identifier: GPL-2.0+
 +
-+Introduction
-+--------------------
++Arm FF-A Driver
++===============
++
++Summary
++-------
 +
 +FF-A stands for Firmware Framework for Arm A-profile processors.
 +
-+FF-A specifies interfaces that enable a pair of software sandboxes to communicate with each other. A sandbox aka partition could
-+be a VM in the Normal or Secure world, an application in S-EL0, or a Trusted OS in S-EL1.
++FF-A specifies interfaces that enable a pair of software sandboxes to
++communicate with each other. A sandbox aka partition could
++be a VM in the Normal or Secure world, an application in S-EL0, or a
++Trusted OS in S-EL1.
 +
-+This FF-A driver implements the interfaces to communicate with partitions in the Secure world aka Secure partitions (SPs).
++This FF-A driver implements the interfaces to communicate with partitions in
++the Secure world aka Secure partitions (SPs).
 +
-+The driver specifically focuses on communicating with SPs that isolate portions of EFI runtime services that must run in a
-+protected environment which is inaccessible by the Host OS or Hypervisor. Examples of such services are set/get variables.
++The driver specifically focuses on communicating with SPs that isolate portions
++of EFI runtime services that must run in a protected environment which is
++inaccessible by the Host OS or Hypervisor. Examples of such services are
++set/get variables.
 +
 +FF-A driver uses the SMC ABIs defined by the FF-A specification to:
 +
-+- Discover the presence of SPs of interest.
-+- Access an SP's service through communication protocols e.g. EFI MM communication protocol.
++- Discover the presence of SPs of interest
++- Access an SP's service through communication protocols
++  e.g. EFI MM communication protocol
++
++At this stage of development the FF-A driver supports EFI boot time only.
++
++Runtime support will be added in future developments.
 +
 +FF-A and SMC specifications
 +-------------------------------------------
 +
-+The current implementation of the driver relies on FF-A specification v1.0 and uses SMC32 calling convention.
++The current implementation of the driver relies on FF-A specification v1.0
++and uses SMC32 calling convention which means using the first 32-bit data of the
++Xn registers.
 +
-+The driver has been tested with Optee OS which supports SMC32 for most of the SMC ABIs.
++At this stage we only need the FF-A v1.0 features.
 +
-+For more details please refer to: https://developer.arm.com/documentation/den0077/a/?lang=en
++The driver has been tested with OP-TEE which supports SMC32 calling convention.
++
++For more details please refer to the FF-A v1.0 spec:
++https://documentation-service.arm.com/static/5fb7e8a6ca04df4095c1d65e?token=
++
++Hypervisors are supported if they are configured to trap SMC calls.
 +
 +The FF-A driver uses 64-bit registers as per SMCCCv1.2 specification.
 +
-+For more details please refer to: https://documentation-service.arm.com/static/5f8edaeff86e16515cdbe4c6?token=
++For more details please refer to the SMC Calling Convention v1.2 spec:
++https://documentation-service.arm.com/static/5f8edaeff86e16515cdbe4c6?token=
 +
 +Supported hardware
 +--------------------------------
@@ -191,60 +218,90 @@
 +----------------------
 +
 +CONFIG_ARM_FFA_TRANSPORT
-+    Enables the FF-A bus driver. Turn this on if you want to use FF-A communication.
-+
-+CONFIG_ARM_FFA_EFI_RUNTIME_MODE
-+    Optional config that enables EFI runtime support for FF-A data and code.
-+    ffa_copy_runtime_data allows to copy the FF-A driver data structures to EFI runtime data section.
-+    Turning the config on makes ffa_copy_runtime_data available for use and the driver code placed at EFI runtime code section.
-+    Call ffa_copy_runtime_data at the event on which you want the FF-A data to be copied (example: at ExitBootServices).
++    Enables the FF-A bus driver. Turn this on if you want to use FF-A
++    communication.
 +
 +CONFIG_SANDBOX_FFA
-+    Enables FF-A Sandbox driver. This emulates the FF-A ABIs handling under Sandbox and provides
-+    functional tests for FF-A.
++    Enables FF-A Sandbox driver. This emulates the FF-A ABIs handling under
++    Sandbox and provides functional tests for FF-A.
 +
 +FF-A ABIs under the hood
 +---------------------------------------
 +
-+Invoking an FF-A ABI involves providing to the secure world/hypervisor the expected arguments from the ABI.
++Invoking an FF-A ABI involves providing to the secure world/hypervisor the
++expected arguments from the ABI.
 +
-+The ABI arguments are stored in x0 to x7 registers. Then, an SMC instruction is executed.
++The ABI arguments are stored in x0 to x7 registers. Then, an SMC instruction
++is executed.
 +
-+At the secure side level or hypervisor the ABI is handled at a higher exception level and the arguments are read and processed.
++At the secure side level or hypervisor the ABI is handled at a higher exception
++level and the arguments are read and processed.
 +
-+The response is put back through x0 to x7 registers and control is giving back to the u-boot FF-A driver (non secure world).
++The response is put back through x0 to x7 registers and control is given back
++to the U-Boot FF-A driver (non-secure world).
 +
 +The driver reads the response and processes it accordingly.
 +
 +This methodology applies to all the FF-A ABIs in the driver.
 +
-+FF-A bus discovery in u-boot
++FF-A bus discovery in U-Boot
 +-------------------------------------------
 +
-+When CONFIG_ARM_FFA_TRANSPORT is enabled, the FF-A bus is automatically discovered at initcall level (after u-boot relocation).
++When CONFIG_ARM_FFA_TRANSPORT is enabled, the FF-A bus is discovered on
++demand by the clients (users).
 +
-+The function that triggers the discovery process is ffa_bus_discover.
++Clients can discover the FF-A bus using ffa_bus_discover() API which triggers the
++discovery process.
 +
-+ffa_bus_discover creates, binds and probes the arm_ffa device using device_{bind, probe} APIs.
++ffa_bus_discover() creates, binds and probes the arm_ffa device using
++device_{bind, probe} APIs.
 +
-+When the device is probed, ffa_probe is called which tries to communicate with the secure world or hypervisor.
++The discovery process consists in communicating with secure world (or hypervisor)
++and querying specific data.
 +
-+The FF-A bus is usable when these checks succeed:
++The discovery process takes place during the arm_ffa device probing which is
++handled by ffa_probe().
++
++The FF-A bus discovery is successful and the bus is ready for use when these
++operations succeed:
 +
 +- querying the FF-A framework version
-+- querying from secure world the u-boot endpoint ID
-+- querying from secure world the supported features of the specified FF-A calls
++- querying from secure world the U-Boot endpoint ID
++- querying from secure world the RX/TX mapping  features
 +- mapping the RX/TX buffers
 +- querying from secure world all the partitions information
 +
-+Probing fails when any of these operations fail. The FF-A bus discovery succeeds when probing is successful.
++Discovery failure results in a probing failure and the arm_ffa device is
++destroyed.
 +
-+When discovery fails the arm_ffa device is destroyed.
++Requirements for clients
++-------------------------------------
++
++When using the FF-A bus with EFI, clients must:
++
++- Query SPs in EFI boot time mode using the service UUID.
++- Unmap RX/TX buffers before EFI runtime mode starts.
++
++The RX/TX buffers are only available at EFI boot time. Querying partitions is
++done at boot time and data is cached for future use.
++
++RX/TX buffers should be unmapped by the user before EFI runtime mode
++starts. The driver provides a bus operation for that: rxtx_unmap()
++
++If  RX/TX buffers created by U-Boot are not unmapped and by
++consequence becoming available at EFI runtime, secure world will get confused
++about RX/TX buffers ownership (U-Boot vs kernel).
++
++When invoking FF-A direct messaging, clients should specify which ABI protocol
++they want to use (32-bit vs 64-bit). Selecting the protocol means using
++the 32-bit or 64-bit version of FFA_MSG_SEND_DIRECT_{REQ, RESP}.
++The calling convention stays the same: SMC32.
 +
 +The bus driver layer
 +------------------------------
 +
-+The driver comes on top of the SMCCC layer and is implemented in drivers/firmware/arm-ffa/core.c
++The driver comes on top of the SMCCC layer and is implemented in
++drivers/firmware/arm-ffa/core.c
 +
 +The driver provides the following features:
 +
@@ -260,6 +317,8 @@
 +FFA_ERROR
 +FFA_SUCCESS
 +FFA_INTERRUPT
++FFA_MSG_SEND_DIRECT_REQ
++FFA_MSG_SEND_DIRECT_RESP
 +
 +- Support for the 64-bit version of the following ABIs:
 +
@@ -269,8 +328,9 @@
 +
 +- Processing the received data from the secure world/hypervisor and caching it
 +
-+- Hiding from upper layers the FF-A protocol and registers details. Upper layers focus on exchanged data,
-+the driver takes care of how to transport that to the secure world/hypervisor using FF-A.
++- Hiding from upper layers the FF-A protocol and registers details. Upper
++  layers focus on exchanged data, the driver takes care of how to transport
++  that to the secure world/hypervisor using FF-A
 +
 +- The driver provides callbacks to be used by clients to access the FF-A bus:
 +
@@ -278,18 +338,19 @@
 +sync_send_receive
 +rxtx_unmap
 +
-+- FF-A bus discovery at initcalls level (after u-boot relocation). The bus is up and running if the FF-A framework is responsive and compatible with the driver.
++- FF-A bus discovery makes sure FF-A framework is responsive and compatible
++  with the driver
 +
-+- When EFI is enabled, unmap the RX/TX buffers at ExitBootServices() level.
-+
-+- When CONFIG_ARM_FFA_EFI_RUNTIME_MODE enabled, ffa_copy_runtime_data function is available for use.
++- FF-A bus can be compiled and used without EFI
 +
 +Using armffa command
 +-----------------------------------
 +
-+armffa is a command showcasing how to use the FF-A driver and how to invoke its operations.
++armffa is an implementation defined command showcasing how to use the FF-A driver and how to invoke
++its operations.
 +
-+This provides a guidance to the client developers on how to call the FF-A bus interfaces.
++This provides a guidance to the client developers on how to call the FF-A bus
++interfaces.
 +
 +Usage:
 +
@@ -308,8 +369,24 @@
 +        devlist
 +
 +            displays the arm_ffa device info
++
++Contributors
++------------
++   * Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+diff --git a/doc/arch/index.rst b/doc/arch/index.rst
+index 792d9182c3..8d1ab0ad4e 100644
+--- a/doc/arch/index.rst
++++ b/doc/arch/index.rst
+@@ -8,6 +8,7 @@ Architecture-specific doc
+ 
+    arc
+    arm64
++   arm64.ffa
+    m68k
+    mips
+    nios2
 diff --git a/drivers/Kconfig b/drivers/Kconfig
-index b26ca8cf70..4a602517bf 100644
+index 8b6fead351..b06b1ae481 100644
 --- a/drivers/Kconfig
 +++ b/drivers/Kconfig
 @@ -6,6 +6,8 @@ source "drivers/core/Kconfig"
@@ -322,10 +399,10 @@
  
  source "drivers/axi/Kconfig"
 diff --git a/drivers/Makefile b/drivers/Makefile
-index 67c8af7442..77db8736e6 100644
+index eba9940231..c3bfad94ac 100644
 --- a/drivers/Makefile
 +++ b/drivers/Makefile
-@@ -109,6 +109,7 @@ obj-y += iommu/
+@@ -110,6 +110,7 @@ obj-y += iommu/
  obj-y += smem/
  obj-y += thermal/
  obj-$(CONFIG_TEE) += tee/
@@ -335,10 +412,10 @@
  obj-$(CONFIG_W1) += w1/
 diff --git a/drivers/firmware/arm-ffa/Kconfig b/drivers/firmware/arm-ffa/Kconfig
 new file mode 100644
-index 0000000000..aceb61cf49
+index 0000000000..e4914b9bc7
 --- /dev/null
 +++ b/drivers/firmware/arm-ffa/Kconfig
-@@ -0,0 +1,39 @@
+@@ -0,0 +1,30 @@
 +# SPDX-License-Identifier: GPL-2.0
 +
 +config ARM_FFA_TRANSPORT
@@ -360,37 +437,27 @@
 +
 +	  https://developer.arm.com/documentation/den0077/a/?lang=en
 +
-+	  In u-boot FF-A design, FF-A is considered as a discoverable bus.
++	  In U-Boot FF-A design, FF-A is considered as a discoverable bus.
 +	  The Secure World is considered as one entity to communicate with
 +	  using the FF-A bus.
 +	  FF-A communication is handled by one device and one instance (the bus).
 +	  This FF-A driver takes care of all the interactions between Normal world
 +	  and Secure World.
 +
-+	  For more details about the FF-A driver, please refer to doc/README.ffa.drv
++	  For more details about the FF-A driver, please refer to doc/arch/arm64.ffa.rst
 +
-+config ARM_FFA_EFI_RUNTIME_MODE
-+	bool "Enable EFI runtime support for FF-A data and code"
-+	depends on ARM_FFA_TRANSPORT && EFI_LOADER
-+	help
-+	  Allows FF-A driver data structures and code to be accessible at EFI runtime.
-+	  FF-A data is copied by ffa_copy_runtime_data function.
-+	  The driver Code needed at runtime is placed at EFI runtime code section.
-+	  Turning this on makes ffa_copy_runtime_data available for use and the driver
-+	  code placed at EFI runtime code section.
 diff --git a/drivers/firmware/arm-ffa/Makefile b/drivers/firmware/arm-ffa/Makefile
 new file mode 100644
-index 0000000000..0b9b0a61b4
+index 0000000000..043a8915be
 --- /dev/null
 +++ b/drivers/firmware/arm-ffa/Makefile
-@@ -0,0 +1,7 @@
+@@ -0,0 +1,6 @@
 +# SPDX-License-Identifier: GPL-2.0+
 +#
-+# (C) Copyright 2022 Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-+#
++# (C) Copyright 2022
++# Abdellatif El Khlifi, Arm Limited, abdellatif.elkhlifi@arm.com.
 +
 +obj-y += arm-ffa-uclass.o core.o
-+obj-$(CONFIG_ARM_FFA_EFI_RUNTIME_MODE) += efi_ffa_runtime_data_mgr.o
 diff --git a/drivers/firmware/arm-ffa/arm-ffa-uclass.c b/drivers/firmware/arm-ffa/arm-ffa-uclass.c
 new file mode 100644
 index 0000000000..7d9695d289
@@ -415,10 +482,10 @@
 +};
 diff --git a/drivers/firmware/arm-ffa/arm_ffa_prv.h b/drivers/firmware/arm-ffa/arm_ffa_prv.h
 new file mode 100644
-index 0000000000..7bc90f7f66
+index 0000000000..4eea7dc036
 --- /dev/null
 +++ b/drivers/firmware/arm-ffa/arm_ffa_prv.h
-@@ -0,0 +1,196 @@
+@@ -0,0 +1,200 @@
 +/* SPDX-License-Identifier: GPL-2.0+ */
 +/*
 + * (C) Copyright 2022 ARM Limited
@@ -485,27 +552,36 @@
 +#define FFA_SMC_64(func_num)				FFA_SMC(ARM_SMCCC_SMC_64, (func_num))
 +
 +enum ffa_abis {
-+	FFA_ERROR					= 0x60,
-+	FFA_SUCCESS					= 0x61,
-+	FFA_INTERRUPT				= 0x62,
-+	FFA_VERSION					= 0x63,
-+	FFA_FEATURES				= 0x64,
-+	FFA_RX_RELEASE				= 0x65,
-+	FFA_RXTX_MAP				= 0x66,
-+	FFA_RXTX_UNMAP			= 0x67,
-+	FFA_PARTITION_INFO_GET		= 0x68,
-+	FFA_ID_GET					= 0x69,
-+	FFA_RUN						= 0x6D,
-+	FFA_MSG_SEND_DIRECT_REQ	= 0x6F,
-+	FFA_MSG_SEND_DIRECT_RESP	= 0x70,
++	FFA_ERROR                 = 0x60,
++	FFA_SUCCESS               = 0x61,
++	FFA_INTERRUPT             = 0x62,
++	FFA_VERSION               = 0x63,
++	FFA_FEATURES              = 0x64,
++	FFA_RX_RELEASE            = 0x65,
++	FFA_RXTX_MAP              = 0x66,
++	FFA_RXTX_UNMAP            = 0x67,
++	FFA_PARTITION_INFO_GET    = 0x68,
++	FFA_ID_GET                = 0x69,
++	FFA_RUN                   = 0x6D,
++	FFA_MSG_SEND_DIRECT_REQ   = 0x6F,
++	FFA_MSG_SEND_DIRECT_RESP  = 0x70,
 +
 +	/* to be updated when adding new FFA IDs */
-+	FFA_FIRST_ID = FFA_ERROR, /* lowest number ID*/
-+	FFA_LAST_ID = FFA_MSG_SEND_DIRECT_RESP, /* highest number ID*/
++	FFA_FIRST_ID              = FFA_ERROR, /* lowest number ID*/
++	FFA_LAST_ID               = FFA_MSG_SEND_DIRECT_RESP, /* highest number ID*/
 +};
 +
-+/* number of the errors supported by the FF-A specification */
-+#define MAX_NUMBER_FFA_ERR 9
++enum ffa_abi_errcode {
++	NOT_SUPPORTED = 1,
++	INVALID_PARAMETERS,
++	NO_MEMORY,
++	BUSY,
++	INTERRUPTED,
++	DENIED,
++	RETRY,
++	ABORTED,
++	MAX_NUMBER_FFA_ERR
++};
 +
 +/* container structure and helper macros to map between an FF-A error and relevant error log */
 +struct ffa_abi_errmap {
@@ -605,22 +681,17 @@
 +};
 +
 +/**
-+ * ffa_device_get - create, bind and probe the arm_ffa device
-+ */
-+int ffa_device_get(void);
-+
-+/**
 + * ffa_bus_prvdata_get - bus driver private data getter
 + */
-+struct ffa_prvdata **ffa_bus_prvdata_get(void);
++struct ffa_prvdata *ffa_bus_prvdata_get(void);
 +
 +#endif
 diff --git a/drivers/firmware/arm-ffa/core.c b/drivers/firmware/arm-ffa/core.c
 new file mode 100644
-index 0000000000..41c7b96e68
+index 0000000000..0b1f8e6a07
 --- /dev/null
 +++ b/drivers/firmware/arm-ffa/core.c
-@@ -0,0 +1,1344 @@
+@@ -0,0 +1,1315 @@
 +// SPDX-License-Identifier: GPL-2.0+
 +/*
 + * (C) Copyright 2022 ARM Limited
@@ -644,115 +715,83 @@
 +DECLARE_GLOBAL_DATA_PTR;
 +
 +/**
-+ * The device private data structure containing all the resident
++ * The device private data structure containing all the
 + * data read from secure world
 + */
-+__ffa_runtime_data struct ffa_prvdata *ffa_priv_data;
++struct ffa_prvdata *ffa_priv_data;
 +
 +/* Error mapping declarations */
 +
-+__ffa_runtime_data int ffa_to_std_errmap[MAX_NUMBER_FFA_ERR] = {
-+	0,
-+	-EOPNOTSUPP,	/* NOT_SUPPORTED */
-+	-EINVAL,	/* INVALID_PARAMETERS */
-+	-ENOMEM,	/* NO_MEMORY */
-+	-EBUSY,		/* BUSY */
-+	-EINTR,		/* INTERRUPTED */
-+	-EACCES,	/* DENIED */
-+	-EAGAIN,	/* RETRY */
-+	-ECANCELED,	/* ABORTED */
++int ffa_to_std_errmap[MAX_NUMBER_FFA_ERR] = {
++	[NOT_SUPPORTED] = -EOPNOTSUPP,
++	[INVALID_PARAMETERS] = -EINVAL,
++	[NO_MEMORY] = -ENOMEM,
++	[BUSY] = -EBUSY,
++	[INTERRUPTED] = -EINTR,
++	[DENIED] = -EACCES,
++	[RETRY] = -EAGAIN,
++	[ABORTED] = -ECANCELED,
 +};
 +
 +struct ffa_abi_errmap err_msg_map[FFA_ERRMAP_COUNT] = {
 +	[FFA_ID_TO_ERRMAP_ID(FFA_VERSION)] = {
 +		{
-+			"",
++			[NOT_SUPPORTED] =
 +			"NOT_SUPPORTED: A Firmware Framework implementation does not exist",
-+			"", /* INVALID_PARAMETERS */
-+			"", /* NO_MEMORY */
-+			"", /* BUSY */
-+			"", /* INTERRUPTED */
-+			"", /* DENIED */
-+			"", /* RETRY */
-+			"", /* ABORTED */
 +		},
 +	},
 +	[FFA_ID_TO_ERRMAP_ID(FFA_ID_GET)] = {
 +		{
-+			"",
++			[NOT_SUPPORTED] =
 +			"NOT_SUPPORTED: This function is not implemented at this FF-A instance",
-+			"", /* INVALID_PARAMETERS */
-+			"", /* NO_MEMORY */
-+			"", /* BUSY */
-+			"", /* INTERRUPTED */
-+			"", /* DENIED */
-+			"", /* RETRY */
-+			"", /* ABORTED */
 +		},
 +	},
 +	[FFA_ID_TO_ERRMAP_ID(FFA_FEATURES)] = {
 +		{
-+			"",
++			[NOT_SUPPORTED] =
 +			"NOT_SUPPORTED: FFA_RXTX_MAP is not implemented at this FF-A instance",
-+			"", /* INVALID_PARAMETERS */
-+			"", /* NO_MEMORY */
-+			"", /* BUSY */
-+			"", /* INTERRUPTED */
-+			"", /* DENIED */
-+			"", /* RETRY */
-+			"", /* ABORTED */
 +		},
 +	},
 +	[FFA_ID_TO_ERRMAP_ID(FFA_PARTITION_INFO_GET)] = {
 +		{
-+			"",
++			[NOT_SUPPORTED] =
 +			"NOT_SUPPORTED: This function is not implemented at this FF-A instance",
++			[INVALID_PARAMETERS] =
 +			"INVALID_PARAMETERS: Unrecognized UUID",
++			[NO_MEMORY] =
 +			"NO_MEMORY: Results cannot fit in RX buffer of the caller",
++			[BUSY] =
 +			"BUSY: RX buffer of the caller is not free",
-+			"", /* INTERRUPTED */
++			[DENIED] =
 +			"DENIED: Callee is not in a state to handle this request",
-+			"", /* RETRY */
-+			"", /* ABORTED */
 +		},
 +	},
 +	[FFA_ID_TO_ERRMAP_ID(FFA_RXTX_UNMAP)] = {
-+			{
-+			"",
++		{
++			[NOT_SUPPORTED] =
 +			"NOT_SUPPORTED: FFA_RXTX_UNMAP is not implemented at this FF-A instance",
++			[INVALID_PARAMETERS] =
 +			"INVALID_PARAMETERS: No buffer pair registered on behalf of the caller",
-+			"", /* NO_MEMORY */
-+			"", /* BUSY */
-+			"", /* INTERRUPTED */
-+			"", /* DENIED */
-+			"", /* RETRY */
-+			"", /* ABORTED */
 +		},
 +	},
 +	[FFA_ID_TO_ERRMAP_ID(FFA_RX_RELEASE)] = {
-+			{
-+			"",
++		{
++			[NOT_SUPPORTED] =
 +			"NOT_SUPPORTED: FFA_RX_RELEASE is not implemented at this FF-A instance",
-+			"", /* INVALID_PARAMETERS */
-+			"", /* NO_MEMORY */
-+			"", /* BUSY */
-+			"", /* INTERRUPTED */
++			[DENIED] =
 +			"DENIED: Caller did not have ownership of the RX buffer",
-+			"", /* RETRY */
-+			"", /* ABORTED */
 +		},
 +	},
 +	[FFA_ID_TO_ERRMAP_ID(FFA_RXTX_MAP)] = {
-+			{
-+			"",
++		{
++			[NOT_SUPPORTED] =
 +			"NOT_SUPPORTED: This function is not implemented at this FF-A instance",
++			[INVALID_PARAMETERS] =
 +			"INVALID_PARAMETERS: Field(s) in input parameters incorrectly encoded",
++			[NO_MEMORY] =
 +			"NO_MEMORY: Not enough memory",
-+			"", /* BUSY */
-+			"", /* INTERRUPTED */
++			[DENIED] =
 +			"DENIED: Buffer pair already registered",
-+			"", /* RETRY */
-+			"", /* ABORTED */
 +		},
 +	},
 +};
@@ -761,14 +800,14 @@
 + * ffa_to_std_errno - convert FF-A error code to standard error code
 + * @ffa_errno:	Error code returned by the FF-A ABI
 + *
-+ * This runtime function maps the given FF-A error code as specified
++ * This function maps the given FF-A error code as specified
 + * by the spec to a u-boot standard error code.
 + *
 + * Return:
 + *
 + * The standard error code on success. . Otherwise, failure
 + */
-+__ffa_runtime int ffa_to_std_errno(int ffa_errno)
++int ffa_to_std_errno(int ffa_errno)
 +{
 +	int err_idx = -ffa_errno;
 +
@@ -783,7 +822,7 @@
 + * @ffa_id:	FF-A ABI ID
 + * @ffa_errno:	Error code returned by the FF-A ABI
 + *
-+ * This boot time function maps the FF-A error code to the error log relevant to the
++ * This function maps the FF-A error code to the error log relevant to the
 + * selected FF-A ABI. Then the error log is printed.
 + *
 + * Return:
@@ -806,7 +845,7 @@
 +	if (abi_idx < 0 || abi_idx >= FFA_ERRMAP_COUNT)
 +		return -EINVAL;
 +
-+	if (!err_msg_map[abi_idx].err_str || !err_msg_map[abi_idx].err_str[err_idx])
++	if (!err_msg_map[abi_idx].err_str[err_idx])
 +		return -EINVAL;
 +
 +	ffa_err("%s", err_msg_map[abi_idx].err_str[err_idx]);
@@ -822,7 +861,7 @@
 + * ffa_remove_device - removes the arm_ffa device
 + * @dev:	the device to be removed
 + *
-+ * This boot time function makes sure the arm_ffa device is removed
++ * This function makes sure the arm_ffa device is removed
 + * No need to free the kmalloced data when the device is destroyed.
 + * It's automatically done by devm management by
 + * device_remove() -> device_free() -> devres_release_probe().
@@ -861,26 +900,24 @@
 +
 +/**
 + * ffa_device_get - create, bind and probe the arm_ffa device
++ * @pdev: the address of a device pointer (to be filled when the arm_ffa bus device is created
++ *       successfully)
 + *
-+ * This boot time function makes sure the arm_ffa device is
++ * This function makes sure the arm_ffa device is
 + * created, bound to this driver, probed and ready to use.
-+ * Arm FF-A transport is implemented through a single u-boot
++ * Arm FF-A transport is implemented through a single U-Boot
 + * device managing the FF-A bus (arm_ffa).
 + *
 + * Return:
 + *
 + * 0 on success. Otherwise, failure
 + */
-+int ffa_device_get(void)
++int ffa_device_get(struct udevice **pdev)
 +{
 +	int ret;
 +	struct udevice *dev = NULL;
 +
-+	ret = device_bind(dm_root(),
-+			  DM_DRIVER_GET(arm_ffa),
-+			  FFA_DRV_NAME,
-+			  NULL,
-+			  ofnode_null(),
++	ret = device_bind(dm_root(), DM_DRIVER_GET(arm_ffa), FFA_DRV_NAME, NULL, ofnode_null(),
 +			  &dev);
 +	if (ret)
 +		return ret;
@@ -893,13 +930,16 @@
 +		return ret;
 +	}
 +
++	if (pdev)
++		*pdev = dev;
++
 +	return 0;
 +}
 +
 +/**
 + * ffa_get_version - FFA_VERSION handler function
 + *
-+ * This is the boot time function that implements FFA_VERSION FF-A function
++ * This function implements FFA_VERSION FF-A function
 + * to get from the secure world the FF-A framework version
 + *
 + * Return:
@@ -913,18 +953,17 @@
 +	int ffa_errno;
 +
 +	ffa_priv_data->invoke_ffa_fn((ffa_value_t){
-+			.a0 = FFA_SMC_32(FFA_VERSION),
-+			.a1 = FFA_VERSION_1_0, .a2 = 0, .a3 = 0, .a4 = 0, .a5 = 0, .a6 = 0, .a7 = 0,
++			.a0 = FFA_SMC_32(FFA_VERSION), .a1 = FFA_VERSION_1_0,
 +			}, &res);
 +
-+	ffa_errno = (int)res.a0;
++	ffa_errno = res.a0;
 +	if (ffa_errno < 0) {
 +		ffa_print_error_log(FFA_VERSION, ffa_errno);
 +		return ffa_to_std_errno(ffa_errno);
 +	}
 +
-+	major = GET_FFA_MAJOR_VERSION((u32)res.a0);
-+	minor = GET_FFA_MINOR_VERSION((u32)res.a0);
++	major = GET_FFA_MAJOR_VERSION(res.a0);
++	minor = GET_FFA_MINOR_VERSION(res.a0);
 +
 +	ffa_info("FF-A driver %d.%d\nFF-A framework %d.%d",
 +		 FFA_MAJOR_VERSION, FFA_MINOR_VERSION, major, minor);
@@ -932,7 +971,7 @@
 +	if ((major == FFA_MAJOR_VERSION && minor >= FFA_MINOR_VERSION)) {
 +		ffa_info("Versions are compatible ");
 +
-+		ffa_priv_data->fwk_version = (u32)res.a0;
++		ffa_priv_data->fwk_version = res.a0;
 +
 +		return 0;
 +	}
@@ -946,7 +985,7 @@
 +/**
 + * ffa_get_endpoint_id - FFA_ID_GET handler function
 + *
-+ * This is the boot time function that implements FFA_ID_GET FF-A function
++ * This function implements FFA_ID_GET FF-A function
 + * to get from the secure world u-boot endpoint ID
 + *
 + * Return:
@@ -960,7 +999,6 @@
 +
 +	ffa_priv_data->invoke_ffa_fn((ffa_value_t){
 +			.a0 = FFA_SMC_32(FFA_ID_GET),
-+			.a1 = 0, .a2 = 0, .a3 = 0, .a4 = 0, .a5 = 0, .a6 = 0, .a7 = 0,
 +			}, &res);
 +
 +	if (res.a0 == FFA_SMC_32(FFA_SUCCESS)) {
@@ -970,7 +1008,7 @@
 +		return 0;
 +	}
 +
-+	ffa_errno = (int)res.a2;
++	ffa_errno = res.a2;
 +
 +	ffa_print_error_log(FFA_ID_GET, ffa_errno);
 +
@@ -981,7 +1019,7 @@
 + * ffa_set_rxtx_buffers_pages_cnt - sets the minimum number of pages in each of the RX/TX buffers
 + * @prop_field: properties field obtained from FFA_FEATURES ABI
 + *
-+ * This boot time function sets the minimum number of pages
++ * This function sets the minimum number of pages
 + *  in each of the RX/TX buffers in the private data structure
 + *
 + * Return:
@@ -1015,7 +1053,7 @@
 +/**
 + * ffa_get_rxtx_map_features - FFA_FEATURES handler function with FFA_RXTX_MAP argument
 + *
-+ * This is the boot time function that implements FFA_FEATURES FF-A function
++ * This function implements FFA_FEATURES FF-A function
 + * to retrieve the FFA_RXTX_MAP features
 + *
 + * Return:
@@ -1030,13 +1068,12 @@
 +	ffa_priv_data->invoke_ffa_fn((ffa_value_t){
 +			.a0 = FFA_SMC_32(FFA_FEATURES),
 +			.a1 = FFA_SMC_64(FFA_RXTX_MAP),
-+			.a2 = 0, .a3 = 0, .a4 = 0, .a5 = 0, .a6 = 0, .a7 = 0,
 +			}, &res);
 +
 +	if (res.a0 == FFA_SMC_32(FFA_SUCCESS))
-+		return ffa_set_rxtx_buffers_pages_cnt((u32)res.a2);
++		return ffa_set_rxtx_buffers_pages_cnt(res.a2);
 +
-+	ffa_errno = (int)res.a2;
++	ffa_errno = res.a2;
 +	ffa_print_error_log(FFA_FEATURES, ffa_errno);
 +
 +	return ffa_to_std_errno(ffa_errno);
@@ -1045,7 +1082,7 @@
 +/**
 + * ffa_free_rxtx_buffers - frees the RX/TX buffers
 + *
-+ * This is the boot time function used to free the RX/TX buffers
++ * This  function  frees the RX/TX buffers
 + *
 + */
 +static void ffa_free_rxtx_buffers(void)
@@ -1066,7 +1103,7 @@
 +/**
 + * ffa_alloc_rxtx_buffers - allocates the RX/TX buffers
 + *
-+ * This is the boot time function used by ffa_map_rxtx_buffers to allocate
++ * This function is used by ffa_map_rxtx_buffers to allocate
 + * the RX/TX buffers before mapping them. The allocated memory is physically
 + * contiguous since memalign ends up calling malloc which allocates
 + * contiguous memory in u-boot.
@@ -1084,9 +1121,12 @@
 +
 +	bytes = ffa_priv_data->pair.rxtx_min_pages * SZ_4K;
 +
-+	/* RX/TX buffers addresses should be PAGE_SIZE aligned */
++	/*
++	 * The alignment of the RX and TX buffers must be equal
++	 * to the larger translation granule size
++	 */
 +
-+	ffa_priv_data->pair.rxbuf = (u64)memalign(PAGE_SIZE, bytes);
++	ffa_priv_data->pair.rxbuf = (u64)memalign(bytes, bytes);
 +	if (!ffa_priv_data->pair.rxbuf) {
 +		ffa_err("failure to allocate RX buffer");
 +		return -ENOBUFS;
@@ -1094,7 +1134,7 @@
 +
 +	ffa_info("RX buffer at virtual address 0x%llx", ffa_priv_data->pair.rxbuf);
 +
-+	ffa_priv_data->pair.txbuf = (u64)memalign(PAGE_SIZE, bytes);
++	ffa_priv_data->pair.txbuf = (u64)memalign(bytes, bytes);
 +	if (!ffa_priv_data->pair.txbuf) {
 +		free((void *)ffa_priv_data->pair.rxbuf);
 +		ffa_priv_data->pair.rxbuf = 0;
@@ -1116,7 +1156,7 @@
 +/**
 + * ffa_map_rxtx_buffers - FFA_RXTX_MAP handler function
 + *
-+ * This is the boot time function that implements FFA_RXTX_MAP FF-A function
++ * This function implements FFA_RXTX_MAP FF-A function
 + * to map the RX/TX buffers
 + *
 + * Return:
@@ -1136,7 +1176,7 @@
 +	/*
 +	 * we need to pass the physical addresses of the RX/TX buffers
 +	 * in u-boot physical/virtual mapping is 1:1
-+	 *no need to convert from virtual to physical
++	 * no need to convert from virtual to physical
 +	 */
 +
 +	ffa_priv_data->invoke_ffa_fn((ffa_value_t){
@@ -1144,7 +1184,6 @@
 +			.a1 = ffa_priv_data->pair.txbuf,
 +			.a2 = ffa_priv_data->pair.rxbuf,
 +			.a3 = ffa_priv_data->pair.rxtx_min_pages,
-+			.a4 = 0, .a5 = 0, .a6 = 0, .a7 = 0,
 +			}, &res);
 +
 +	if (res.a0 == FFA_SMC_32(FFA_SUCCESS)) {
@@ -1152,7 +1191,7 @@
 +		return 0;
 +	}
 +
-+	ffa_errno = (int)res.a2;
++	ffa_errno = res.a2;
 +	ffa_print_error_log(FFA_RXTX_MAP, ffa_errno);
 +
 +	ffa_free_rxtx_buffers();
@@ -1162,15 +1201,16 @@
 +
 +/**
 + * ffa_unmap_rxtx_buffers - FFA_RXTX_UNMAP handler function
++ *	@dev: The arm_ffa bus device
 + *
-+ * This is the boot time function that implements FFA_RXTX_UNMAP FF-A function
++ * This function implements FFA_RXTX_UNMAP FF-A function
 + * to unmap the RX/TX buffers
 + *
 + * Return:
 + *
 + * 0 on success. Otherwise, failure
 + */
-+static int ffa_unmap_rxtx_buffers(void)
++static int ffa_unmap_rxtx_buffers(struct udevice *dev)
 +{
 +	ffa_value_t res = {0};
 +	int ffa_errno;
@@ -1178,7 +1218,6 @@
 +	ffa_priv_data->invoke_ffa_fn((ffa_value_t){
 +			.a0 = FFA_SMC_32(FFA_RXTX_UNMAP),
 +			.a1 = PREP_SELF_ENDPOINT_ID(ffa_priv_data->id),
-+			.a2 = 0, .a3 = 0, .a4 = 0, .a5 = 0, .a6 = 0, .a7 = 0,
 +			}, &res);
 +
 +	if (res.a0 == FFA_SMC_32(FFA_SUCCESS)) {
@@ -1186,7 +1225,7 @@
 +		return 0;
 +	}
 +
-+	ffa_errno = (int)res.a2;
++	ffa_errno = res.a2;
 +	ffa_print_error_log(FFA_RXTX_UNMAP, ffa_errno);
 +
 +	return ffa_to_std_errno(ffa_errno);
@@ -1195,7 +1234,7 @@
 +/**
 + * ffa_release_rx_buffer - FFA_RX_RELEASE handler function
 + *
-+ * This is the boot time function that invokes FFA_RX_RELEASE FF-A function
++ * This function invokes FFA_RX_RELEASE FF-A function
 + * to release the ownership of the RX buffer
 + *
 + * Return:
@@ -1209,13 +1248,12 @@
 +
 +	ffa_priv_data->invoke_ffa_fn((ffa_value_t){
 +			.a0 = FFA_SMC_32(FFA_RX_RELEASE),
-+			.a1 = 0, .a2 = 0, .a3 = 0, .a4 = 0, .a5 = 0, .a6 = 0, .a7 = 0,
 +			}, &res);
 +
 +	if (res.a0 == FFA_SMC_32(FFA_SUCCESS))
 +		return 0;
 +
-+	ffa_errno = (int)res.a2;
++	ffa_errno = res.a2;
 +	ffa_print_error_log(FFA_RX_RELEASE, ffa_errno);
 +
 +	return ffa_to_std_errno(ffa_errno);
@@ -1226,20 +1264,20 @@
 + * @uuid1: first UUID
 + * @uuid2: second UUID
 + *
-+ * This is a boot time function used by ffa_read_partitions_info to search
++ * This function is used by ffa_read_partitions_info to search
 + * for a UUID in the partitions descriptors table
 + *
 + * Return:
 + *
 + * 1 when UUIDs match. Otherwise, 0
 + */
-+int ffa_uuid_are_identical(const struct ffa_partition_uuid *uuid1,
-+			   const struct ffa_partition_uuid *uuid2)
++bool ffa_uuid_are_identical(const struct ffa_partition_uuid *uuid1,
++			    const struct ffa_partition_uuid *uuid2)
 +{
 +	if (!uuid1 || !uuid2)
 +		return 0;
 +
-+	return (!memcmp(uuid1, uuid2, sizeof(struct ffa_partition_uuid)));
++	return !memcmp(uuid1, uuid2, sizeof(struct ffa_partition_uuid));
 +}
 +
 +/**
@@ -1248,7 +1286,7 @@
 + * @count: The number of partitions queried
 + * @part_uuid: Pointer to the partition(s) UUID
 + *
-+ * This is the boot time function that reads the partitions information
++ * This function reads the partitions information
 + * returned by the FFA_PARTITION_INFO_GET and saves it in the private
 + * data structure.
 + *
@@ -1288,8 +1326,8 @@
 +			return -ENOMEM;
 +		}
 +
-+		ffa_priv_data->partitions.descs = (struct ffa_partition_desc *)
-+			devm_kmalloc(ffa_priv_data->dev, data_bytes, __GFP_ZERO);
++		ffa_priv_data->partitions.descs = devm_kmalloc(ffa_priv_data->dev, data_bytes,
++							       __GFP_ZERO);
 +		if (!ffa_priv_data->partitions.descs) {
 +			ffa_err("cannot  allocate partitions data buffer");
 +			return -ENOMEM;
@@ -1357,7 +1395,7 @@
 + * @part_uuid: Pointer to the partition(s) UUID
 + * @pcount: Pointer to the number of partitions variable filled when querying
 + *
-+ * This is the boot time function that executes the FFA_PARTITION_INFO_GET
++ * This function executes the FFA_PARTITION_INFO_GET
 + * to query the partitions data. Then, it calls ffa_read_partitions_info
 + * to save the data in the private data structure.
 + *
@@ -1398,9 +1436,6 @@
 +			.a2 = query_uuid.a2,
 +			.a3 = query_uuid.a3,
 +			.a4 = query_uuid.a4,
-+			.a5 = 0,
-+			.a6 = 0,
-+			.a7 = 0,
 +			}, &res);
 +
 +	if (res.a0 == FFA_SMC_32(FFA_SUCCESS)) {
@@ -1435,7 +1470,7 @@
 +		return ret;
 +	}
 +
-+	ffa_errno = (int)res.a2;
++	ffa_errno = res.a2;
 +	ffa_print_error_log(FFA_PARTITION_INFO_GET, ffa_errno);
 +
 +	return ffa_to_std_errno(ffa_errno);
@@ -1448,19 +1483,21 @@
 + * Mode 1: When getting from the driver the number of
 + *	secure partitions:
 + *	@uuid_str: pointer to the UUID string
-+ *	@parts_size: pointer to the variable that contains the number of partitions
++ *	@sp_count: pointer to the variable that contains the number of partitions
 + *			 The variable will be set by the driver
 + *	@buffer: NULL
 + *
 + * Mode 2: When requesting the driver to return the
 + *	partitions information:
++ *	@dev: The arm_ffa bus device
 + *	@uuid_str: pointer to the UUID string
-+ *	@parts_size: pointer to the size of the SPs information buffer in bytes
++ *	@sp_count: pointer to the variable that contains the number of empty partition descriptors
++ *			 The variable will be read by the driver
 + *	@buffer: pointer to SPs information buffer
-+ *		(allocated by the client).
++ *		(allocated by the client and contains empty @sp_count descriptors).
 + *		The buffer will be filled by the driver
 + *
-+ * This is the boot time function that queries the secure partition data from
++ * This function queries the secure partition data from
 + * the private data structure. If not found, it invokes FFA_PARTITION_INFO_GET
 + * FF-A function to query the partition information from secure world.
 + *
@@ -1491,27 +1528,25 @@
 + *
 + * Return:
 + *
-+ * @parts_size: When pointing to the number of partitions variable, the number is
++ * @sp_count: When pointing to the number of partitions variable, the number is
 + * set by the driver.
 + * When pointing to the partitions information buffer size, the buffer will be
 + * filled by the driver.
 + *
 + * On success 0 is returned. Otherwise, failure
 + */
-+static int ffa_get_partitions_info(const char *uuid_str,
-+				   u32 *parts_size, struct ffa_partition_info *buffer)
++static int ffa_get_partitions_info(struct udevice *dev, const char *uuid_str,
++				   u32 *sp_count, struct ffa_partition_info *buffer)
 +{
 +	/*
 +	 * fill_data:
 +	 * 0: return the SP count
 +	 * 1: fill SP data and return it to the caller
-+	 * -1: undefined mode
 +	 */
-+	int fill_data = -1;
++	bool fill_data = 0;
 +	u32 desc_idx, client_desc_idx;
 +	struct ffa_partition_uuid part_uuid = {0};
-+	u32 client_desc_max_cnt;
-+	u32 parts_found = 0;
++	u32 sp_found = 0;
 +
 +	if (!ffa_priv_data->partitions.count || !ffa_priv_data->partitions.descs) {
 +		ffa_err("no partition installed");
@@ -1523,12 +1558,12 @@
 +		return -EINVAL;
 +	}
 +
-+	if (!parts_size) {
++	if (!sp_count) {
 +		ffa_err("no size/count provided");
 +		return -EINVAL;
 +	}
 +
-+	if (be_uuid_str_to_le_bin(uuid_str, (unsigned char *)&part_uuid)) {
++	if (uuid_str_to_le_bin(uuid_str, (unsigned char *)&part_uuid)) {
 +		ffa_err("invalid UUID");
 +		return -EINVAL;
 +	}
@@ -1540,19 +1575,13 @@
 +
 +		ffa_info("Preparing for checking partitions count");
 +
-+	} else if ((*parts_size >= sizeof(struct ffa_partition_info)) &&
-+		   !(*parts_size % sizeof(struct ffa_partition_info))) {
++	} else if (*sp_count) {
 +		/* Mode 2: retrieving the partitions information */
 +
 +		fill_data = 1;
 +
 +		client_desc_idx = 0;
 +
-+		/*
-+		 * number of empty descriptors preallocated by the caller
-+		 */
-+		client_desc_max_cnt = *parts_size / sizeof(struct ffa_partition_info);
-+
 +		ffa_info("Preparing for filling partitions info");
 +
 +	} else {
@@ -1573,14 +1602,14 @@
 +			ffa_info("Partition ID %x matches the provided UUID",
 +				 ffa_priv_data->partitions.descs[desc_idx].info.id);
 +
-+			parts_found++;
++			sp_found++;
 +
 +			if (fill_data) {
 +				/*
 +				 * trying to fill the partition info in the input buffer
 +				 */
 +
-+				if (client_desc_idx < client_desc_max_cnt) {
++				if (client_desc_idx < *sp_count) {
 +					buffer[client_desc_idx++] =
 +						ffa_priv_data->partitions.descs[desc_idx].info;
 +					continue;
@@ -1592,27 +1621,28 @@
 +		}
 +	}
 +
-+	if (!parts_found) {
++	if (!sp_found) {
 +		int ret;
 +
 +		ffa_info("No partition found. Querying framework ...");
 +
-+		ret = ffa_query_partitions_info(&part_uuid, &parts_found);
++		ret = ffa_query_partitions_info(&part_uuid, &sp_found);
 +
 +		if (ret == 0) {
 +			if (!fill_data) {
-+				*parts_size = parts_found;
++				*sp_count = sp_found;
 +
 +				ffa_info("Number of partition(s) found matching the UUID: %d",
-+					 parts_found);
++					 sp_found);
 +			} else {
 +				/*
 +				 * If SPs data detected, they are already in the private data
 +				 * structure, retry searching SP data again to return them
 +				 *  to the caller
 +				 */
-+				if (parts_found)
-+					ret = ffa_get_partitions_info(uuid_str, parts_size, buffer);
++				if (sp_found)
++					ret = ffa_get_partitions_info(dev, uuid_str, sp_count,
++								      buffer);
 +				else
 +					ret = -ENODATA;
 +			}
@@ -1623,7 +1653,7 @@
 +
 +	/* partition(s) found */
 +	if (!fill_data)
-+		*parts_size = parts_found;
++		*sp_count = sp_found;
 +
 +	return 0;
 +}
@@ -1631,7 +1661,7 @@
 +/**
 + * ffa_cache_partitions_info - Queries and saves all secure partitions data
 + *
-+ * This is a boot time function that invokes FFA_PARTITION_INFO_GET FF-A
++ * This function invokes FFA_PARTITION_INFO_GET FF-A
 + * function to query from secure world all partitions information.
 + *
 + * The FFA_PARTITION_INFO_GET call is issued with nil UUID as an argument.
@@ -1653,10 +1683,12 @@
 +
 +/**
 + * ffa_msg_send_direct_req - FFA_MSG_SEND_DIRECT_{REQ,RESP} handler function
++ * @dev: The arm_ffa bus device
 + * @dst_part_id: destination partition ID
 + * @msg: pointer to the message data preallocated by the client (in/out)
++ * @is_smc64: select 64-bit or 32-bit FF-A ABI
 + *
-+ * This is the runtime function that implements FFA_MSG_SEND_DIRECT_{REQ,RESP}
++ * This function implements FFA_MSG_SEND_DIRECT_{REQ,RESP}
 + * FF-A functions.
 + *
 + * FFA_MSG_SEND_DIRECT_REQ is used to send the data to the secure partition.
@@ -1671,10 +1703,12 @@
 + *
 + * 0 on success. Otherwise, failure
 + */
-+static int __ffa_runtime ffa_msg_send_direct_req(u16 dst_part_id, struct ffa_send_direct_data *msg)
++static int ffa_msg_send_direct_req(struct udevice *dev, u16 dst_part_id,
++				   struct ffa_send_direct_data *msg, bool is_smc64)
 +{
 +	ffa_value_t res = {0};
 +	int ffa_errno;
++	u64 req_mode, resp_mode;
 +
 +	if (!ffa_priv_data || !ffa_priv_data->invoke_ffa_fn)
 +		return -EINVAL;
@@ -1683,8 +1717,16 @@
 +	if (!ffa_priv_data->partitions.count || !ffa_priv_data->partitions.descs)
 +		return -ENODEV;
 +
++	if (is_smc64) {
++		req_mode = FFA_SMC_64(FFA_MSG_SEND_DIRECT_REQ);
++		resp_mode = FFA_SMC_64(FFA_MSG_SEND_DIRECT_RESP);
++	} else {
++		req_mode = FFA_SMC_32(FFA_MSG_SEND_DIRECT_REQ);
++		resp_mode = FFA_SMC_32(FFA_MSG_SEND_DIRECT_RESP);
++	}
++
 +	ffa_priv_data->invoke_ffa_fn((ffa_value_t){
-+			.a0 = FFA_SMC_64(FFA_MSG_SEND_DIRECT_REQ),
++			.a0 = req_mode,
 +			.a1 = PREP_SELF_ENDPOINT_ID(ffa_priv_data->id) |
 +				PREP_PART_ENDPOINT_ID(dst_part_id),
 +			.a2 = 0,
@@ -1698,7 +1740,7 @@
 +	while (res.a0 == FFA_SMC_32(FFA_INTERRUPT))
 +		ffa_priv_data->invoke_ffa_fn((ffa_value_t){
 +			.a0 = FFA_SMC_32(FFA_RUN),
-+			.a1 = res.a1, .a2 = 0, .a3 = 0, .a4 = 0, .a5 = 0, .a6 = 0, .a7 = 0,
++			.a1 = res.a1,
 +			}, &res);
 +
 +	if (res.a0 == FFA_SMC_32(FFA_SUCCESS)) {
@@ -1706,7 +1748,7 @@
 +		return 0;
 +	}
 +
-+	if (res.a0 == FFA_SMC_64(FFA_MSG_SEND_DIRECT_RESP)) {
++	if (res.a0 == resp_mode) {
 +		/*
 +		 * Message sent with response
 +		 * extract the return data
@@ -1720,7 +1762,7 @@
 +		return 0;
 +	}
 +
-+	ffa_errno = (int)res.a2;
++	ffa_errno = res.a2;
 +	return ffa_to_std_errno(ffa_errno);
 +}
 +
@@ -1733,7 +1775,7 @@
 + *
 + * Return: void
 + */
-+void __ffa_runtime __arm_ffa_fn_smc(ffa_value_t args, ffa_value_t *res)
++void __arm_ffa_fn_smc(ffa_value_t args, ffa_value_t *res)
 +{
 +	arm_smccc_1_2_smc(&args, res);
 +}
@@ -1741,7 +1783,7 @@
 +/**
 + * ffa_set_smc_conduit - Set the SMC conduit
 + *
-+ * This boot time function selects the SMC conduit by setting the driver invoke function
++ * This function selects the SMC conduit by setting the driver invoke function
 + * to SMC assembly function
 + *
 + * Return:
@@ -1779,7 +1821,7 @@
 + * ffa_alloc_prvdata - allocate the driver main data structure and sets the device
 + * @dev:	the arm_ffa device
 + *
-+ * This boot time function creates the main data structure embedding all the driver data.
++ * This function creates the main data structure embedding all the driver data.
 + *
 + * Return:
 + *
@@ -1879,7 +1921,7 @@
 +{
 +	ffa_info("removing the device");
 +
-+	ffa_unmap_rxtx_buffers();
++	ffa_unmap_rxtx_buffers(dev);
 +
 +	if (ffa_priv_data->pair.rxbuf || ffa_priv_data->pair.txbuf)
 +		ffa_free_rxtx_buffers();
@@ -1908,9 +1950,9 @@
 + * ffa_bus_ops_get - bus driver operations getter
 + *
 + * Return:
-+ * This runtime function returns a pointer to the driver operations structure
++ * This function returns a pointer to the driver operations structure
 + */
-+const struct ffa_bus_ops * __ffa_runtime ffa_bus_ops_get(void)
++const struct ffa_bus_ops *ffa_bus_ops_get(void)
 +{
 +	return &ffa_priv_data->ffa_ops;
 +}
@@ -1919,20 +1961,20 @@
 + * ffa_bus_prvdata_get - bus driver private data getter
 + *
 + * Return:
-+ * This boot time function returns a pointer to the main private data structure
++ * This function returns a pointer to the main private data structure
 + */
-+struct ffa_prvdata **ffa_bus_prvdata_get(void)
++struct ffa_prvdata *ffa_bus_prvdata_get(void)
 +{
-+	return &ffa_priv_data;
++	return ffa_priv_data;
 +}
 +
 +/**
-+ * ffa_bus_discover - discover FF-A bus and probe the arm_ffa device
++ * ffa_bus_discover - discover FF-A bus and probe arm_ffa device
++ * @pdev: the address of a device pointer (to be filled when the arm_ffa bus device is created
++ *       successfully)
 + *
-+ * This boot time function makes sure the FF-A bus is discoverable.
-+ * Then, the arm_ffa device is probed and ready to use.
-+ * This function is called automatically at initcalls
-+ * level (after u-boot relocation).
++ * This function makes sure the FF-A bus is discoverable.
++ * When probing succeeds FF-A discovery is done. The arm_ffa device is ready to use.
 + *
 + * When the bus was already discovered successfully the discovery will not run again.
 + *
@@ -1944,12 +1986,12 @@
 + *
 + * 0 on success. Otherwise, failure
 + */
-+int ffa_bus_discover(void)
++int ffa_bus_discover(struct udevice **pdev)
 +{
 +	int ret = 0;
 +
-+	if (!ffa_priv_data)
-+		ret = ffa_device_get();
++	if (!ffa_priv_data) {
++		ret = ffa_device_get(pdev);
 +
 +	return ret;
 +}
@@ -1965,112 +2007,12 @@
 +	.remove		= ffa_remove,
 +	.unbind		= ffa_unbind,
 +};
-diff --git a/drivers/firmware/arm-ffa/efi_ffa_runtime_data_mgr.c b/drivers/firmware/arm-ffa/efi_ffa_runtime_data_mgr.c
-new file mode 100644
-index 0000000000..c76cf2147b
---- /dev/null
-+++ b/drivers/firmware/arm-ffa/efi_ffa_runtime_data_mgr.c
-@@ -0,0 +1,94 @@
-+// SPDX-License-Identifier: GPL-2.0+
-+/*
-+ * (C) Copyright 2022 ARM Limited
-+ * Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-+ */
-+
-+#include "arm_ffa_prv.h"
-+
-+/**
-+ * ffa_copy_runtime_data - copy the private data structure  to the runtime area
-+ *
-+ * This boot time function copies the arm_ffa driver data structures including
-+ *  partitions data to the EFI runtime data section.
-+ *
-+ * Return:
-+ *
-+ * 0 on success. Otherwise, failure
-+ */
-+efi_status_t ffa_copy_runtime_data(void)
-+{
-+	efi_status_t efi_ret;
-+	efi_uintn_t prvdata_pages;
-+	efi_uintn_t descs_pages;
-+	struct ffa_prvdata **prvdata = NULL; /* Pointer to the current structure */
-+	struct ffa_prvdata *runtime_prvdata = NULL; /* Pointer to the structure runtime copy */
-+	u64 runtime_descs = 0;
-+
-+	prvdata = ffa_bus_prvdata_get();
-+
-+	printf("INFO: EFI: FFA: prv data area at 0x%llx\n", (u64)prvdata);
-+
-+	/* allocate private data runtime area */
-+
-+	prvdata_pages = efi_size_in_pages(sizeof(struct ffa_prvdata));
-+	efi_ret = efi_allocate_pages(EFI_ALLOCATE_ANY_PAGES,
-+				     EFI_RUNTIME_SERVICES_DATA,
-+				     prvdata_pages,
-+				     (u64 *)&runtime_prvdata);
-+
-+	if (efi_ret != EFI_SUCCESS) {
-+		printf("ERROR: EFI: FFA: allocating runtime data (err: 0x%lx, addr 0x%llx)\n",
-+		       efi_ret, (u64)runtime_prvdata);
-+
-+		return efi_ret;
-+	}
-+
-+	printf("INFO: EFI: FFA: runtime data area at 0x%llx\n", (u64)runtime_prvdata);
-+
-+	if (!runtime_prvdata)
-+		return EFI_INVALID_PARAMETER;
-+
-+	/* allocate the partition data runtime area */
-+
-+	descs_pages = efi_size_in_pages((*prvdata)->partitions.count *
-+					sizeof(struct ffa_partition_desc));
-+	efi_ret = efi_allocate_pages(EFI_ALLOCATE_ANY_PAGES,
-+				     EFI_RUNTIME_SERVICES_DATA,
-+				     descs_pages,
-+				     &runtime_descs);
-+
-+	if (efi_ret != EFI_SUCCESS) {
-+		printf("ERROR: EFI: FFA: allocating runtime SPs data (err: 0x%lx, addr 0x%llx)\n",
-+		       efi_ret, runtime_descs);
-+
-+		efi_free_pages((u64)runtime_prvdata, prvdata_pages);
-+
-+		return efi_ret;
-+	}
-+
-+	printf("INFO: EFI: FFA: SPs runtime area at 0x%llx\n", (u64)runtime_descs);
-+
-+	if (!runtime_descs)
-+		return EFI_INVALID_PARAMETER;
-+
-+	*runtime_prvdata = **prvdata;
-+
-+	runtime_prvdata->dev = NULL;
-+	runtime_prvdata->ffa_ops.partition_info_get = NULL;
-+	runtime_prvdata->ffa_ops.rxtx_unmap = NULL;
-+	runtime_prvdata->partitions.descs = (struct ffa_partition_desc *)runtime_descs;
-+	runtime_prvdata->pair.rxbuf = 0;
-+	runtime_prvdata->pair.txbuf = 0;
-+
-+	/*
-+	 * Update the private data structure pointer in the driver
-+	 * no need to free the old structure. devm takes care of that
-+	 */
-+	*prvdata = runtime_prvdata;
-+
-+	printf("INFO: EFI: FFA: runtime prv data now at 0x%llx , SPs count %d\n",
-+	       (u64)*prvdata, (*prvdata)->partitions.count);
-+
-+	return 0;
-+}
 diff --git a/include/arm_ffa.h b/include/arm_ffa.h
 new file mode 100644
-index 0000000000..f17b100497
+index 0000000000..74b16174c2
 --- /dev/null
 +++ b/include/arm_ffa.h
-@@ -0,0 +1,127 @@
+@@ -0,0 +1,97 @@
 +/* SPDX-License-Identifier: GPL-2.0+ */
 +/*
 + * (C) Copyright 2022 ARM Limited
@@ -2103,7 +2045,7 @@
 + * Data structure containing information about partitions instantiated in the system
 + * This structure is filled with the data queried by FFA_PARTITION_INFO_GET
 + */
-+struct  __packed ffa_partition_info {
++struct ffa_partition_info {
 +	u16 id;
 +	u16 exec_ctxt;
 +/* partition supports receipt of direct requests */
@@ -2125,7 +2067,7 @@
 + */
 +
 +/* For use with FFA_MSG_SEND_DIRECT_{REQ,RESP} which pass data via registers */
-+struct __packed ffa_send_direct_data {
++struct ffa_send_direct_data {
 +	unsigned long data0; /* w3/x3 */
 +	unsigned long data1; /* w4/x4 */
 +	unsigned long data2; /* w5/x5 */
@@ -2133,30 +2075,7 @@
 +	unsigned long data4; /* w7/x7 */
 +};
 +
-+#if CONFIG_IS_ENABLED(ARM_FFA_EFI_RUNTIME_MODE)
-+
-+#include <efi_loader.h>
-+
-+/*
-+ *  __ffa_runtime - controls whether functions are
-+ * available after calling the EFI ExitBootServices service.
-+ * Functions tagged with these keywords are resident (available at boot time and
-+ * at runtime)
-+ */
-+
-+#define __ffa_runtime_data __efi_runtime_data
-+#define __ffa_runtime __efi_runtime
-+
-+#else
-+
-+/*
-+ *  The FF-A driver is independent from EFI
-+ */
-+
-+#define __ffa_runtime_data
-+#define __ffa_runtime
-+
-+#endif
++struct udevice;
 +
 +/**
 + * struct ffa_bus_ops - The driver operations structure
@@ -2168,10 +2087,12 @@
 + * This structure is EFI runtime resident.
 + */
 +struct ffa_bus_ops {
-+	int (*partition_info_get)(const char *uuid_str,
-+				  u32 *parts_size, struct ffa_partition_info *buffer);
-+	int (*sync_send_receive)(u16 dst_part_id, struct ffa_send_direct_data *msg);
-+	int (*rxtx_unmap)(void);
++	int (*partition_info_get)(struct udevice *dev, const char *uuid_str,
++				  u32 *sp_count, struct ffa_partition_info *buffer);
++	int (*sync_send_receive)(struct udevice *dev, u16 dst_part_id,
++				 struct ffa_send_direct_data *msg,
++				 bool is_smc64);
++	int (*rxtx_unmap)(struct udevice *dev);
 +};
 +
 +/**
@@ -2181,65 +2102,36 @@
 +/**
 + * ffa_bus_ops_get - driver operations getter
 + */
-+const struct ffa_bus_ops * __ffa_runtime ffa_bus_ops_get(void);
++const struct ffa_bus_ops *ffa_bus_ops_get(void);
 +
 +/**
 + * ffa_bus_discover - discover FF-A bus and probes the arm_ffa device
 + */
-+int ffa_bus_discover(void);
-+
-+#if CONFIG_IS_ENABLED(ARM_FFA_EFI_RUNTIME_MODE)
-+
-+/**
-+ * ffa_copy_runtime_data - copy the private data structure and the SPs data to the runtime area
-+ */
-+efi_status_t ffa_copy_runtime_data(void);
-+
-+#endif
++int ffa_bus_discover(struct udevice **pdev);
 +
 +#endif
 diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
-index 3ba69ad9a0..7324418245 100644
+index a432e43871..5dd698b7a9 100644
 --- a/include/dm/uclass-id.h
 +++ b/include/dm/uclass-id.h
-@@ -55,6 +55,7 @@ enum uclass_id {
+@@ -4,6 +4,9 @@
+  *
+  * (C) Copyright 2012
+  * Pavel Herrmann <morpheus.ibis@gmail.com>
++ *
++ * (C) Copyright 2022 ARM Limited
++ * Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+  */
+ 
+ #ifndef _DM_UCLASS_ID_H
+@@ -55,6 +58,7 @@ enum uclass_id {
  	UCLASS_EFI_MEDIA,	/* Devices provided by UEFI firmware */
  	UCLASS_ETH,		/* Ethernet device */
  	UCLASS_ETH_PHY,		/* Ethernet PHY device */
 +	UCLASS_FFA,		/* Arm Firmware Framework for Armv8-A */
  	UCLASS_FIRMWARE,	/* Firmware */
+ 	UCLASS_FUZZING_ENGINE,	/* Fuzzing engine */
  	UCLASS_FS_FIRMWARE_LOADER,		/* Generic loader */
- 	UCLASS_GPIO,		/* Bank of general-purpose I/O pins */
-diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
-index 4da64b5d29..0ec002ac8b 100644
---- a/lib/efi_loader/efi_boottime.c
-+++ b/lib/efi_loader/efi_boottime.c
-@@ -23,6 +23,10 @@
- #include <asm/setjmp.h>
- #include <linux/libfdt_env.h>
- 
-+#if CONFIG_IS_ENABLED(ARM_FFA_TRANSPORT)
-+#include <arm_ffa.h>
-+#endif
-+
- DECLARE_GLOBAL_DATA_PTR;
- 
- /* Task priority level */
-@@ -2173,6 +2177,14 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
- 		dm_remove_devices_flags(DM_REMOVE_ACTIVE_ALL);
- 	}
- 
-+#if CONFIG_IS_ENABLED(ARM_FFA_TRANSPORT)
-+		/* unmap FF-A RX/TX buffers */
-+		if (ffa_bus_ops_get()->rxtx_unmap())
-+			debug("[efi_boottime][ERROR]: can not unmap FF-A RX/TX buffers\n");
-+		else
-+			debug("[efi_boottime][INFO]: FF-A RX/TX buffers unmapped\n");
-+#endif
-+
- 	/* Patch out unsupported runtime function */
- 	efi_runtime_detach();
- 
 -- 
 2.17.1
 
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0003-usb-common-move-urb-code-to-common.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0003-usb-common-move-urb-code-to-common.patch
deleted file mode 100644
index 7e726fe..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0003-usb-common-move-urb-code-to-common.patch
+++ /dev/null
@@ -1,498 +0,0 @@
-From 178da5bee196f44c4c10e9804674fe5ac0bc1176 Mon Sep 17 00:00:00 2001
-From: Rui Miguel Silva <rui.silva@linaro.org>
-Date: Mon, 28 Jun 2021 23:20:55 +0100
-Subject: [PATCH 03/26] usb: common: move urb code to common
-
-Move urb code from musb only use to a more common scope, so other
-drivers in the future can use the handling of urb in usb.
-
-Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
-Upstream-Status: Accepted [2022.10-rc1]
----
- drivers/usb/common/Makefile                   |   2 +
- drivers/usb/common/usb_urb.c                  | 160 ++++++++++++++++++
- drivers/usb/host/r8a66597-hcd.c               |  30 +---
- drivers/usb/musb-new/musb_core.c              |   2 +-
- drivers/usb/musb-new/musb_host.c              |   2 +-
- drivers/usb/musb-new/musb_host.h              |   2 +-
- drivers/usb/musb-new/musb_uboot.c             |  38 +----
- drivers/usb/musb-new/musb_uboot.h             |   2 +-
- .../linux/usb/usb_urb_compat.h                |  46 ++++-
- include/usb_defs.h                            |  32 ++++
- 10 files changed, 240 insertions(+), 76 deletions(-)
- create mode 100644 drivers/usb/common/usb_urb.c
- rename drivers/usb/musb-new/usb-compat.h => include/linux/usb/usb_urb_compat.h (60%)
-
-diff --git a/drivers/usb/common/Makefile b/drivers/usb/common/Makefile
-index 3bedbf213f..dc05cb0a50 100644
---- a/drivers/usb/common/Makefile
-+++ b/drivers/usb/common/Makefile
-@@ -4,5 +4,7 @@
- #
- 
- obj-$(CONFIG_$(SPL_)DM_USB) += common.o
-+obj-$(CONFIG_USB_MUSB_HCD) += usb_urb.o
-+obj-$(CONFIG_USB_MUSB_UDC) += usb_urb.o
- obj-$(CONFIG_USB_EHCI_FSL) += fsl-dt-fixup.o fsl-errata.o
- obj-$(CONFIG_USB_XHCI_FSL) += fsl-dt-fixup.o fsl-errata.o
-diff --git a/drivers/usb/common/usb_urb.c b/drivers/usb/common/usb_urb.c
-new file mode 100644
-index 0000000000..be3b6b9f32
---- /dev/null
-+++ b/drivers/usb/common/usb_urb.c
-@@ -0,0 +1,160 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * Common code for usb urb handling, based on the musb-new code
-+ *
-+ * Copyright 2021 Linaro, Rui Miguel Silva <rui.silva@linaro.org>
-+ *
-+ */
-+
-+#include <dm/device.h>
-+#include <dm/device_compat.h>
-+#include <linux/usb/usb_urb_compat.h>
-+
-+#include <time.h>
-+#include <usb.h>
-+
-+#if CONFIG_IS_ENABLED(DM_USB)
-+struct usb_device *usb_dev_get_parent(struct usb_device *udev)
-+{
-+	struct udevice *parent = udev->dev->parent;
-+
-+	/*
-+	 * When called from usb-uclass.c: usb_scan_device() udev->dev points
-+	 * to the parent udevice, not the actual udevice belonging to the
-+	 * udev as the device is not instantiated yet.
-+	 *
-+	 * If dev is an usb-bus, then we are called from usb_scan_device() for
-+	 * an usb-device plugged directly into the root port, return NULL.
-+	 */
-+	if (device_get_uclass_id(udev->dev) == UCLASS_USB)
-+		return NULL;
-+
-+	/*
-+	 * If these 2 are not the same we are being called from
-+	 * usb_scan_device() and udev itself is the parent.
-+	 */
-+	if (dev_get_parent_priv(udev->dev) != udev)
-+		return udev;
-+
-+	/* We are being called normally, use the parent pointer */
-+	if (device_get_uclass_id(parent) == UCLASS_USB_HUB)
-+		return dev_get_parent_priv(parent);
-+
-+	return NULL;
-+}
-+#else
-+struct usb_device *usb_dev_get_parent(struct usb_device *udev)
-+{
-+	return udev->parent;
-+}
-+#endif
-+
-+static void usb_urb_complete(struct urb *urb)
-+{
-+	urb->dev->status &= ~USB_ST_NOT_PROC;
-+	urb->dev->act_len = urb->actual_length;
-+
-+	if (urb->status == -EINPROGRESS)
-+		urb->status = 0;
-+}
-+
-+void usb_urb_fill(struct urb *urb, struct usb_host_endpoint *hep,
-+		  struct usb_device *dev, int endpoint_type,
-+		  unsigned long pipe, void *buffer, int len,
-+		  struct devrequest *setup, int interval)
-+{
-+	int epnum = usb_pipeendpoint(pipe);
-+	int is_in = usb_pipein(pipe);
-+	u16 maxpacketsize = is_in ? dev->epmaxpacketin[epnum] :
-+					dev->epmaxpacketout[epnum];
-+
-+	memset(urb, 0, sizeof(struct urb));
-+	memset(hep, 0, sizeof(struct usb_host_endpoint));
-+	INIT_LIST_HEAD(&hep->urb_list);
-+	INIT_LIST_HEAD(&urb->urb_list);
-+	urb->ep = hep;
-+	urb->complete = usb_urb_complete;
-+	urb->status = -EINPROGRESS;
-+	urb->dev = dev;
-+	urb->pipe = pipe;
-+	urb->transfer_buffer = buffer;
-+	urb->transfer_dma = (unsigned long)buffer;
-+	urb->transfer_buffer_length = len;
-+	urb->setup_packet = (unsigned char *)setup;
-+
-+	urb->ep->desc.wMaxPacketSize = __cpu_to_le16(maxpacketsize);
-+	urb->ep->desc.bmAttributes = endpoint_type;
-+	urb->ep->desc.bEndpointAddress = ((is_in ? USB_DIR_IN : USB_DIR_OUT) |
-+					  epnum);
-+	urb->ep->desc.bInterval = interval;
-+}
-+
-+int usb_urb_submit(struct usb_hcd *hcd, struct urb *urb)
-+{
-+	const struct usb_urb_ops *ops = hcd->urb_ops;
-+	unsigned long timeout;
-+	int ret;
-+
-+	if (!ops)
-+		return -EINVAL;
-+
-+	ret = ops->urb_enqueue(hcd, urb, 0);
-+	if (ret < 0) {
-+		printf("Failed to enqueue URB to controller\n");
-+		return ret;
-+	}
-+
-+	timeout = get_timer(0) + USB_TIMEOUT_MS(urb->pipe);
-+	do {
-+		if (ctrlc())
-+			return -EIO;
-+		ops->isr(0, hcd);
-+	} while (urb->status == -EINPROGRESS && get_timer(0) < timeout);
-+
-+	if (urb->status == -EINPROGRESS)
-+		ops->urb_dequeue(hcd, urb, -ETIME);
-+
-+	return urb->status;
-+}
-+
-+int usb_urb_submit_control(struct usb_hcd *hcd, struct urb *urb,
-+			   struct usb_host_endpoint *hep,
-+			   struct usb_device *dev, unsigned long pipe,
-+			   void *buffer, int len, struct devrequest *setup,
-+			   int interval, enum usb_device_speed speed)
-+{
-+	const struct usb_urb_ops *ops = hcd->urb_ops;
-+
-+	usb_urb_fill(urb, hep, dev, USB_ENDPOINT_XFER_CONTROL, pipe, buffer,
-+		     len, setup, 0);
-+
-+	/* Fix speed for non hub-attached devices */
-+	if (!usb_dev_get_parent(dev)) {
-+		dev->speed = speed;
-+		if (ops->hub_control)
-+			return ops->hub_control(hcd, dev, pipe, buffer, len,
-+						setup);
-+	}
-+
-+	return usb_urb_submit(hcd, urb);
-+}
-+
-+int usb_urb_submit_bulk(struct usb_hcd *hcd, struct urb *urb,
-+			struct usb_host_endpoint *hep, struct usb_device *dev,
-+			unsigned long pipe, void *buffer, int len)
-+{
-+	usb_urb_fill(urb, hep, dev, USB_ENDPOINT_XFER_BULK, pipe, buffer, len,
-+		     NULL, 0);
-+
-+	return usb_urb_submit(hcd, urb);
-+}
-+
-+int usb_urb_submit_irq(struct usb_hcd *hcd, struct urb *urb,
-+		       struct usb_host_endpoint *hep, struct usb_device *dev,
-+		       unsigned long pipe, void *buffer, int len, int interval)
-+{
-+	usb_urb_fill(urb, hep, dev, USB_ENDPOINT_XFER_INT, pipe, buffer, len,
-+		     NULL, interval);
-+
-+	return usb_urb_submit(hcd, urb);
-+}
-diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c
-index f1fc93f3d4..3ccbc16da3 100644
---- a/drivers/usb/host/r8a66597-hcd.c
-+++ b/drivers/usb/host/r8a66597-hcd.c
-@@ -14,6 +14,7 @@
- #include <dm/device_compat.h>
- #include <linux/delay.h>
- #include <linux/iopoll.h>
-+#include <linux/usb/usb_urb_compat.h>
- #include <power/regulator.h>
- 
- #include "r8a66597.h"
-@@ -24,35 +25,6 @@
- #define R8A66597_DPRINT(...)
- #endif
- 
--static inline struct usb_device *usb_dev_get_parent(struct usb_device *udev)
--{
--	struct udevice *parent = udev->dev->parent;
--
--	/*
--	 * When called from usb-uclass.c: usb_scan_device() udev->dev points
--	 * to the parent udevice, not the actual udevice belonging to the
--	 * udev as the device is not instantiated yet.
--	 *
--	 * If dev is an usb-bus, then we are called from usb_scan_device() for
--	 * an usb-device plugged directly into the root port, return NULL.
--	 */
--	if (device_get_uclass_id(udev->dev) == UCLASS_USB)
--		return NULL;
--
--	/*
--	 * If these 2 are not the same we are being called from
--	 * usb_scan_device() and udev itself is the parent.
--	 */
--	if (dev_get_parent_priv(udev->dev) != udev)
--		return udev;
--
--	/* We are being called normally, use the parent pointer */
--	if (device_get_uclass_id(parent) == UCLASS_USB_HUB)
--		return dev_get_parent_priv(parent);
--
--	return NULL;
--}
--
- static void get_hub_data(struct usb_device *dev, u16 *hub_devnum, u16 *hubport)
- {
- 	struct usb_device *parent = usb_dev_get_parent(dev);
-diff --git a/drivers/usb/musb-new/musb_core.c b/drivers/usb/musb-new/musb_core.c
-index 18d9bc805f..fc7af7484e 100644
---- a/drivers/usb/musb-new/musb_core.c
-+++ b/drivers/usb/musb-new/musb_core.c
-@@ -89,9 +89,9 @@
- #include <linux/usb/ch9.h>
- #include <linux/usb/gadget.h>
- #include <linux/usb/musb.h>
-+#include <linux/usb/usb_urb_compat.h>
- #include <asm/io.h>
- #include "linux-compat.h"
--#include "usb-compat.h"
- #endif
- 
- #include "musb_core.h"
-diff --git a/drivers/usb/musb-new/musb_host.c b/drivers/usb/musb-new/musb_host.c
-index acb2d40f3b..e5905d90d6 100644
---- a/drivers/usb/musb-new/musb_host.c
-+++ b/drivers/usb/musb-new/musb_host.c
-@@ -26,8 +26,8 @@
- #include <dm/device_compat.h>
- #include <usb.h>
- #include <linux/bug.h>
-+#include <linux/usb/usb_urb_compat.h>
- #include "linux-compat.h"
--#include "usb-compat.h"
- #endif
- 
- #include "musb_core.h"
-diff --git a/drivers/usb/musb-new/musb_host.h b/drivers/usb/musb-new/musb_host.h
-index afc8fa35a7..5a604bdb0c 100644
---- a/drivers/usb/musb-new/musb_host.h
-+++ b/drivers/usb/musb-new/musb_host.h
-@@ -10,7 +10,7 @@
- #ifndef _MUSB_HOST_H
- #define _MUSB_HOST_H
- #ifdef __UBOOT__
--#include "usb-compat.h"
-+#include <linux/usb/usb_urb_compat.h>
- #endif
- 
- static inline struct usb_hcd *musb_to_hcd(struct musb *musb)
-diff --git a/drivers/usb/musb-new/musb_uboot.c b/drivers/usb/musb-new/musb_uboot.c
-index 61ff68def2..d186facc7e 100644
---- a/drivers/usb/musb-new/musb_uboot.c
-+++ b/drivers/usb/musb-new/musb_uboot.c
-@@ -8,10 +8,10 @@
- #include <linux/errno.h>
- #include <linux/usb/ch9.h>
- #include <linux/usb/gadget.h>
-+#include <linux/usb/usb_urb_compat.h>
- 
- #include <usb.h>
- #include "linux-compat.h"
--#include "usb-compat.h"
- #include "musb_core.h"
- #include "musb_host.h"
- #include "musb_gadget.h"
-@@ -453,39 +453,3 @@ struct musb *musb_register(struct musb_hdrc_platform_data *plat, void *bdata,
- 
- 	return *musbp;
- }
--
--#if CONFIG_IS_ENABLED(DM_USB)
--struct usb_device *usb_dev_get_parent(struct usb_device *udev)
--{
--	struct udevice *parent = udev->dev->parent;
--
--	/*
--	 * When called from usb-uclass.c: usb_scan_device() udev->dev points
--	 * to the parent udevice, not the actual udevice belonging to the
--	 * udev as the device is not instantiated yet.
--	 *
--	 * If dev is an usb-bus, then we are called from usb_scan_device() for
--	 * an usb-device plugged directly into the root port, return NULL.
--	 */
--	if (device_get_uclass_id(udev->dev) == UCLASS_USB)
--		return NULL;
--
--	/*
--	 * If these 2 are not the same we are being called from
--	 * usb_scan_device() and udev itself is the parent.
--	 */
--	if (dev_get_parent_priv(udev->dev) != udev)
--		return udev;
--
--	/* We are being called normally, use the parent pointer */
--	if (device_get_uclass_id(parent) == UCLASS_USB_HUB)
--		return dev_get_parent_priv(parent);
--
--	return NULL;
--}
--#else
--struct usb_device *usb_dev_get_parent(struct usb_device *udev)
--{
--	return udev->parent;
--}
--#endif
-diff --git a/drivers/usb/musb-new/musb_uboot.h b/drivers/usb/musb-new/musb_uboot.h
-index 18282efccc..6b162f03b1 100644
---- a/drivers/usb/musb-new/musb_uboot.h
-+++ b/drivers/usb/musb-new/musb_uboot.h
-@@ -8,8 +8,8 @@
- #define __MUSB_UBOOT_H__
- 
- #include <usb.h>
-+#include <linux/usb/usb_urb_compat.h>
- #include "linux-compat.h"
--#include "usb-compat.h"
- #include "musb_core.h"
- 
- struct musb_host_data {
-diff --git a/drivers/usb/musb-new/usb-compat.h b/include/linux/usb/usb_urb_compat.h
-similarity index 60%
-rename from drivers/usb/musb-new/usb-compat.h
-rename to include/linux/usb/usb_urb_compat.h
-index df68c9220a..5ed96fa64e 100644
---- a/drivers/usb/musb-new/usb-compat.h
-+++ b/include/linux/usb/usb_urb_compat.h
-@@ -1,16 +1,31 @@
--#ifndef __USB_COMPAT_H__
--#define __USB_COMPAT_H__
-+#ifndef __USB_URB_COMPAT_H__
-+#define __USB_URB_COMPAT_H__
- 
--#include "usb.h"
-+#include <linux/compat.h>
-+#include <usb.h>
- 
- struct udevice;
-+struct urb;
-+struct usb_hcd;
-+
-+
-+struct usb_urb_ops {
-+	int (*urb_enqueue)(struct usb_hcd *hcd, struct urb *urb,
-+			   gfp_t mem_flags);
-+	int (*urb_dequeue)(struct usb_hcd *hcd, struct urb *urb, int status);
-+	int (*hub_control)(struct usb_hcd *hcd, struct usb_device *dev,
-+			   unsigned long pipe, void *buffer, int len,
-+			   struct devrequest *setup);
-+	irqreturn_t (*isr)(int irq, void *priv);
-+};
- 
- struct usb_hcd {
- 	void *hcd_priv;
-+	const struct usb_urb_ops *urb_ops;
- };
- 
- struct usb_host_endpoint {
--	struct usb_endpoint_descriptor		desc;
-+	struct usb_endpoint_descriptor desc;
- 	struct list_head urb_list;
- 	void *hcpriv;
- };
-@@ -23,8 +38,6 @@ struct usb_host_endpoint {
- #define URB_SHORT_NOT_OK	0x0001	/* report short reads as errors */
- #define URB_ZERO_PACKET		0x0040	/* Finish bulk OUT with short packet */
- 
--struct urb;
--
- typedef void (*usb_complete_t)(struct urb *);
- 
- struct urb {
-@@ -76,4 +89,25 @@ static inline int usb_hcd_unmap_urb_for_dma(struct usb_hcd *hcd,
-  */
- struct usb_device *usb_dev_get_parent(struct usb_device *udev);
- 
-+int usb_urb_submit_control(struct usb_hcd *hcd, struct urb *urb,
-+			   struct usb_host_endpoint *hep,
-+			   struct usb_device *dev, unsigned long pipe,
-+			   void *buffer, int len, struct devrequest *setup,
-+			   int interval, enum usb_device_speed speed);
-+
-+int usb_urb_submit_bulk(struct usb_hcd *hcd, struct urb *urb,
-+			struct usb_host_endpoint *hep, struct usb_device *dev,
-+			unsigned long pipe, void *buffer, int len);
-+
-+int usb_urb_submit_irq(struct usb_hcd *hcd, struct urb *urb,
-+		       struct usb_host_endpoint *hep, struct usb_device *dev,
-+		       unsigned long pipe, void *buffer, int len, int interval);
-+
-+void usb_urb_fill(struct urb *urb, struct usb_host_endpoint *hep,
-+		  struct usb_device *dev, int endpoint_type,
-+		  unsigned long pipe, void *buffer, int len,
-+		  struct devrequest *setup, int interval);
-+
-+int usb_urb_submit(struct usb_hcd *hcd, struct urb *urb);
-+
- #endif /* __USB_COMPAT_H__ */
-diff --git a/include/usb_defs.h b/include/usb_defs.h
-index 6dd2c997f9..ec00161710 100644
---- a/include/usb_defs.h
-+++ b/include/usb_defs.h
-@@ -81,6 +81,32 @@
- #define EndpointOutRequest \
- 	((USB_DIR_OUT | USB_TYPE_STANDARD | USB_RECIP_INTERFACE) << 8)
- 
-+/* class requests from the USB 2.0 hub spec, table 11-15 */
-+#define HUB_CLASS_REQ(dir, type, request) ((((dir) | (type)) << 8) | (request))
-+/* GetBusState and SetHubDescriptor are optional, omitted */
-+#define ClearHubFeature		HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_HUB, \
-+					      USB_REQ_CLEAR_FEATURE)
-+#define ClearPortFeature	HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_PORT, \
-+					      USB_REQ_CLEAR_FEATURE)
-+#define GetHubDescriptor	HUB_CLASS_REQ(USB_DIR_IN, USB_RT_HUB, \
-+					      USB_REQ_GET_DESCRIPTOR)
-+#define GetHubStatus		HUB_CLASS_REQ(USB_DIR_IN, USB_RT_HUB, \
-+					      USB_REQ_GET_STATUS)
-+#define GetPortStatus		HUB_CLASS_REQ(USB_DIR_IN, USB_RT_PORT, \
-+					      USB_REQ_GET_STATUS)
-+#define SetHubFeature		HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_HUB, \
-+					      USB_REQ_SET_FEATURE)
-+#define SetPortFeature		HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_PORT, \
-+					      USB_REQ_SET_FEATURE)
-+#define ClearTTBuffer		HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_PORT, \
-+					      HUB_CLEAR_TT_BUFFER)
-+#define ResetTT			HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_PORT, \
-+					      HUB_RESET_TT)
-+#define GetTTState		HUB_CLASS_REQ(USB_DIR_IN, USB_RT_PORT, \
-+					      HUB_GET_TT_STATE)
-+#define StopTT			HUB_CLASS_REQ(USB_DIR_OUT, USB_RT_PORT, \
-+					      HUB_STOP_TT)
-+
- /* Descriptor types */
- #define USB_DT_DEVICE        0x01
- #define USB_DT_CONFIG        0x02
-@@ -289,10 +315,16 @@
- #define USB_SS_PORT_STAT_C_CONFIG_ERROR	0x0080
- 
- /* wHubCharacteristics (masks) */
-+#define HUB_CHAR_COMMON_OCPM        0x0000 /* All ports Over-Current reporting */
-+#define HUB_CHAR_INDV_PORT_LPSM     0x0001 /* per-port power control */
-+#define HUB_CHAR_NO_LPSM            0x0002 /* no power switching */
- #define HUB_CHAR_LPSM               0x0003
- #define HUB_CHAR_COMPOUND           0x0004
-+#define HUB_CHAR_INDV_PORT_OCPM     0x0008 /* per-port Over-current reporting */
-+#define HUB_CHAR_NO_OCPM            0x0010 /* No Over-current Protection support */
- #define HUB_CHAR_OCPM               0x0018
- #define HUB_CHAR_TTTT               0x0060 /* TT Think Time mask */
-+#define HUB_CHAR_PORTIND            0x0080 /* per-port indicators (LEDs) */
- 
- /*
-  * Hub Status & Hub Change bit masks
--- 
-2.17.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0004-arm_ffa-efi-unmap-RX-TX-buffers.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0004-arm_ffa-efi-unmap-RX-TX-buffers.patch
new file mode 100644
index 0000000..f20cc28
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0004-arm_ffa-efi-unmap-RX-TX-buffers.patch
@@ -0,0 +1,73 @@
+From 3035651bfc0dcdfd48d28acff6efe2f29bbe9439 Mon Sep 17 00:00:00 2001
+From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+Date: Thu, 6 Oct 2022 15:04:25 +0100
+Subject: [PATCH 04/25] arm_ffa: efi: unmap RX/TX buffers
+
+unmap RX/TX buffers at ExitBootServices()
+
+Unmapping the RX/TX buffers created by u-boot is needed before EFI
+runtime.
+
+At EFI runtime the linux kernel takes care of allocating its own RX/TX
+buffers and registering them with the secure world.
+
+Secure world should be using the RX/TX buffers created by the kernel.
+So, RX/TX buffers created by u-boot must be unmapped.
+
+Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+Cc: Tom Rini <trini@konsulko.com>
+Cc: Simon Glass <sjg@chromium.org>
+Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
+Cc: Jens Wiklander <jens.wiklander@linaro.org>
+Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20221122131751.22747-1-abdellatif.elkhlifi@arm.com/]
+
+Changelog:
+===============
+
+v8: pass NULL device pointer to the FF-A bus operation
+v7: replace debug() by log_err()
+---
+ lib/efi_loader/efi_boottime.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
+index 6f7333638a..caa64028be 100644
+--- a/lib/efi_loader/efi_boottime.c
++++ b/lib/efi_loader/efi_boottime.c
+@@ -3,6 +3,9 @@
+  * EFI application boot time services
+  *
+  * Copyright (c) 2016 Alexander Graf
++ *
++ * (C) Copyright 2022 ARM Limited
++ * Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+  */
+ 
+ #include <common.h>
+@@ -23,6 +26,10 @@
+ #include <asm/setjmp.h>
+ #include <linux/libfdt_env.h>
+ 
++#if CONFIG_IS_ENABLED(ARM_FFA_TRANSPORT)
++#include <arm_ffa.h>
++#endif
++
+ DECLARE_GLOBAL_DATA_PTR;
+ 
+ /* Task priority level */
+@@ -2178,6 +2185,12 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
+ 		dm_remove_devices_flags(DM_REMOVE_ACTIVE_ALL);
+ 	}
+ 
++#if CONFIG_IS_ENABLED(ARM_FFA_TRANSPORT)
++		/* unmap FF-A RX/TX buffers */
++		if (ffa_bus_ops_get()->rxtx_unmap(NULL))
++			log_err("Can't unmap FF-A RX/TX buffers\n");
++#endif
++
+ 	/* Patch out unsupported runtime function */
+ 	efi_runtime_detach();
+ 
+-- 
+2.17.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0004-usb-add-isp1760-family-driver.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0004-usb-add-isp1760-family-driver.patch
deleted file mode 100644
index 794389e..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0004-usb-add-isp1760-family-driver.patch
+++ /dev/null
@@ -1,3806 +0,0 @@
-From 83ba88292211394ce6b3a21fbc0f702dae543290 Mon Sep 17 00:00:00 2001
-From: Rui Miguel Silva <rui.silva@linaro.org>
-Date: Mon, 28 Jun 2021 23:31:25 +0100
-Subject: [PATCH 04/26] usb: add isp1760 family driver
-
-ISP1760/61/63 are a family of usb controllers, blah, blah, more info
-here.
-
-Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
-Upstream-Status: Accepted [2022.10-rc1]
----
- Makefile                            |    1 +
- drivers/usb/Kconfig                 |    2 +
- drivers/usb/common/Makefile         |    1 +
- drivers/usb/isp1760/Kconfig         |   12 +
- drivers/usb/isp1760/Makefile        |    6 +
- drivers/usb/isp1760/isp1760-core.c  |  378 ++++
- drivers/usb/isp1760/isp1760-core.h  |   96 +
- drivers/usb/isp1760/isp1760-hcd.c   | 2574 +++++++++++++++++++++++++++
- drivers/usb/isp1760/isp1760-hcd.h   |   82 +
- drivers/usb/isp1760/isp1760-if.c    |  127 ++
- drivers/usb/isp1760/isp1760-regs.h  |  292 +++
- drivers/usb/isp1760/isp1760-uboot.c |   76 +
- drivers/usb/isp1760/isp1760-uboot.h |   27 +
- 13 files changed, 3674 insertions(+)
- create mode 100644 drivers/usb/isp1760/Kconfig
- create mode 100644 drivers/usb/isp1760/Makefile
- create mode 100644 drivers/usb/isp1760/isp1760-core.c
- create mode 100644 drivers/usb/isp1760/isp1760-core.h
- create mode 100644 drivers/usb/isp1760/isp1760-hcd.c
- create mode 100644 drivers/usb/isp1760/isp1760-hcd.h
- create mode 100644 drivers/usb/isp1760/isp1760-if.c
- create mode 100644 drivers/usb/isp1760/isp1760-regs.h
- create mode 100644 drivers/usb/isp1760/isp1760-uboot.c
- create mode 100644 drivers/usb/isp1760/isp1760-uboot.h
-
-diff --git a/Makefile b/Makefile
-index 98867fbe06..67851020f5 100644
---- a/Makefile
-+++ b/Makefile
-@@ -841,6 +841,7 @@ libs-y += drivers/usb/host/
- libs-y += drivers/usb/mtu3/
- libs-y += drivers/usb/musb/
- libs-y += drivers/usb/musb-new/
-+libs-y += drivers/usb/isp1760/
- libs-y += drivers/usb/phy/
- libs-y += drivers/usb/ulpi/
- ifdef CONFIG_POST
-diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig
-index ab1d061bd0..bbe07be02c 100644
---- a/drivers/usb/Kconfig
-+++ b/drivers/usb/Kconfig
-@@ -78,6 +78,8 @@ source "drivers/usb/musb/Kconfig"
- 
- source "drivers/usb/musb-new/Kconfig"
- 
-+source "drivers/usb/isp1760/Kconfig"
-+
- source "drivers/usb/emul/Kconfig"
- 
- source "drivers/usb/phy/Kconfig"
-diff --git a/drivers/usb/common/Makefile b/drivers/usb/common/Makefile
-index dc05cb0a50..f08b064d24 100644
---- a/drivers/usb/common/Makefile
-+++ b/drivers/usb/common/Makefile
-@@ -4,6 +4,7 @@
- #
- 
- obj-$(CONFIG_$(SPL_)DM_USB) += common.o
-+obj-$(CONFIG_USB_ISP1760) += usb_urb.o
- obj-$(CONFIG_USB_MUSB_HCD) += usb_urb.o
- obj-$(CONFIG_USB_MUSB_UDC) += usb_urb.o
- obj-$(CONFIG_USB_EHCI_FSL) += fsl-dt-fixup.o fsl-errata.o
-diff --git a/drivers/usb/isp1760/Kconfig b/drivers/usb/isp1760/Kconfig
-new file mode 100644
-index 0000000000..993d71e74c
---- /dev/null
-+++ b/drivers/usb/isp1760/Kconfig
-@@ -0,0 +1,12 @@
-+# SPDX-License-Identifier: GPL-2.0
-+
-+config USB_ISP1760
-+	tristate "NXP ISP 1760/1761/1763 support"
-+	select DM_USB
-+	select USB_HOST
-+	help
-+	  Say Y or M here if your system as an ISP1760/1761/1763 USB host
-+	  controller.
-+
-+	  This USB controller is usually attached to a non-DMA-Master
-+	  capable bus.
-diff --git a/drivers/usb/isp1760/Makefile b/drivers/usb/isp1760/Makefile
-new file mode 100644
-index 0000000000..2c809c01b1
---- /dev/null
-+++ b/drivers/usb/isp1760/Makefile
-@@ -0,0 +1,6 @@
-+# SPDX-License-Identifier: GPL-2.0
-+isp1760-y := isp1760-core.o isp1760-if.o isp1760-uboot.o isp1760-hcd.o
-+
-+#isp1760-hcd.o
-+
-+obj-$(CONFIG_USB_ISP1760) += isp1760.o
-diff --git a/drivers/usb/isp1760/isp1760-core.c b/drivers/usb/isp1760/isp1760-core.c
-new file mode 100644
-index 0000000000..3080595549
---- /dev/null
-+++ b/drivers/usb/isp1760/isp1760-core.c
-@@ -0,0 +1,378 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * Driver for the NXP ISP1760 chip
-+ *
-+ * Copyright 2021 Linaro, Rui Miguel Silva <rui.silva@linaro.org>
-+ *
-+ * This is based on linux kernel driver, original developed:
-+ * Copyright 2014 Laurent Pinchart
-+ * Copyright 2007 Sebastian Siewior
-+ *
-+ */
-+
-+#include <dm.h>
-+#include <dm/device-internal.h>
-+#include <dm/device_compat.h>
-+#include <dm/devres.h>
-+#include <linux/compat.h>
-+#include <linux/delay.h>
-+#include <linux/io.h>
-+#include <linux/kernel.h>
-+#include <regmap.h>
-+#include <usb.h>
-+
-+#include "isp1760-core.h"
-+#include "isp1760-hcd.h"
-+#include "isp1760-regs.h"
-+
-+#define msleep(a) udelay(a * 1000)
-+
-+static int isp1760_init_core(struct isp1760_device *isp)
-+{
-+	struct isp1760_hcd *hcd = &isp->hcd;
-+
-+	/*
-+	 * Reset the host controller, including the CPU interface
-+	 * configuration.
-+	 */
-+	isp1760_field_set(hcd->fields, SW_RESET_RESET_ALL);
-+	msleep(100);
-+
-+	/* Setup HW Mode Control: This assumes a level active-low interrupt */
-+	if ((isp->devflags & ISP1760_FLAG_ANALOG_OC) && hcd->is_isp1763)
-+		return -EINVAL;
-+
-+	if (isp->devflags & ISP1760_FLAG_BUS_WIDTH_16)
-+		isp1760_field_clear(hcd->fields, HW_DATA_BUS_WIDTH);
-+	if (isp->devflags & ISP1760_FLAG_BUS_WIDTH_8)
-+		isp1760_field_set(hcd->fields, HW_DATA_BUS_WIDTH);
-+	if (isp->devflags & ISP1760_FLAG_ANALOG_OC)
-+		isp1760_field_set(hcd->fields, HW_ANA_DIGI_OC);
-+	if (isp->devflags & ISP1760_FLAG_DACK_POL_HIGH)
-+		isp1760_field_set(hcd->fields, HW_DACK_POL_HIGH);
-+	if (isp->devflags & ISP1760_FLAG_DREQ_POL_HIGH)
-+		isp1760_field_set(hcd->fields, HW_DREQ_POL_HIGH);
-+	if (isp->devflags & ISP1760_FLAG_INTR_POL_HIGH)
-+		isp1760_field_set(hcd->fields, HW_INTR_HIGH_ACT);
-+	if (isp->devflags & ISP1760_FLAG_INTR_EDGE_TRIG)
-+		isp1760_field_set(hcd->fields, HW_INTR_EDGE_TRIG);
-+
-+	/*
-+	 * The ISP1761 has a dedicated DC IRQ line but supports sharing the HC
-+	 * IRQ line for both the host and device controllers. Hardcode IRQ
-+	 * sharing for now and disable the DC interrupts globally to avoid
-+	 * spurious interrupts during HCD registration.
-+	 */
-+	if (isp->devflags & ISP1760_FLAG_ISP1761) {
-+		isp1760_reg_write(hcd->regs, ISP176x_DC_MODE, 0);
-+		isp1760_field_set(hcd->fields, HW_COMN_IRQ);
-+	}
-+
-+	/*
-+	 * PORT 1 Control register of the ISP1760 is the OTG control register
-+	 * on ISP1761.
-+	 *
-+	 * TODO: Really support OTG. For now we configure port 1 in device mode
-+	 */
-+	if (((isp->devflags & ISP1760_FLAG_ISP1761) ||
-+	     (isp->devflags & ISP1760_FLAG_ISP1763)) &&
-+	    (isp->devflags & ISP1760_FLAG_PERIPHERAL_EN)) {
-+		isp1760_field_set(hcd->fields, HW_DM_PULLDOWN);
-+		isp1760_field_set(hcd->fields, HW_DP_PULLDOWN);
-+		isp1760_field_set(hcd->fields, HW_OTG_DISABLE);
-+	} else {
-+		isp1760_field_set(hcd->fields, HW_SW_SEL_HC_DC);
-+		isp1760_field_set(hcd->fields, HW_VBUS_DRV);
-+		isp1760_field_set(hcd->fields, HW_SEL_CP_EXT);
-+	}
-+
-+	printf( "%s bus width: %u, oc: %s\n",
-+		 hcd->is_isp1763 ? "isp1763" : "isp1760",
-+		 isp->devflags & ISP1760_FLAG_BUS_WIDTH_8 ? 8 :
-+		 isp->devflags & ISP1760_FLAG_BUS_WIDTH_16 ? 16 : 32,
-+		 hcd->is_isp1763 ? "not available" :
-+		 isp->devflags & ISP1760_FLAG_ANALOG_OC ? "analog" : "digital");
-+
-+	return 0;
-+}
-+
-+void isp1760_set_pullup(struct isp1760_device *isp, bool enable)
-+{
-+	struct isp1760_hcd *hcd = &isp->hcd;
-+
-+	if (enable)
-+		isp1760_field_set(hcd->fields, HW_DP_PULLUP);
-+	else
-+		isp1760_field_set(hcd->fields, HW_DP_PULLUP_CLEAR);
-+}
-+
-+/*
-+ * ISP1760/61:
-+ *
-+ * 60kb divided in:
-+ * - 32 blocks @ 256  bytes
-+ * - 20 blocks @ 1024 bytes
-+ * -  4 blocks @ 8192 bytes
-+ */
-+static const struct isp1760_memory_layout isp176x_memory_conf = {
-+	.blocks[0]		= 32,
-+	.blocks_size[0]		= 256,
-+	.blocks[1]		= 20,
-+	.blocks_size[1]		= 1024,
-+	.blocks[2]		= 4,
-+	.blocks_size[2]		= 8192,
-+
-+	.slot_num		= 32,
-+	.payload_blocks		= 32 + 20 + 4,
-+	.payload_area_size	= 0xf000,
-+};
-+
-+/*
-+ * ISP1763:
-+ *
-+ * 20kb divided in:
-+ * - 8 blocks @ 256  bytes
-+ * - 2 blocks @ 1024 bytes
-+ * - 4 blocks @ 4096 bytes
-+ */
-+static const struct isp1760_memory_layout isp1763_memory_conf = {
-+	.blocks[0]		= 8,
-+	.blocks_size[0]		= 256,
-+	.blocks[1]		= 2,
-+	.blocks_size[1]		= 1024,
-+	.blocks[2]		= 4,
-+	.blocks_size[2]		= 4096,
-+
-+	.slot_num		= 16,
-+	.payload_blocks		= 8 + 2 + 4,
-+	.payload_area_size	= 0x5000,
-+};
-+
-+static const struct regmap_config isp1760_hc_regmap_conf = {
-+	.width = REGMAP_SIZE_16,
-+};
-+
-+static const struct reg_field isp1760_hc_reg_fields[] = {
-+	[HCS_PPC]		= REG_FIELD(ISP176x_HC_HCSPARAMS, 4, 4),
-+	[HCS_N_PORTS]		= REG_FIELD(ISP176x_HC_HCSPARAMS, 0, 3),
-+	[HCC_ISOC_CACHE]	= REG_FIELD(ISP176x_HC_HCCPARAMS, 7, 7),
-+	[HCC_ISOC_THRES]	= REG_FIELD(ISP176x_HC_HCCPARAMS, 4, 6),
-+	[CMD_LRESET]		= REG_FIELD(ISP176x_HC_USBCMD, 7, 7),
-+	[CMD_RESET]		= REG_FIELD(ISP176x_HC_USBCMD, 1, 1),
-+	[CMD_RUN]		= REG_FIELD(ISP176x_HC_USBCMD, 0, 0),
-+	[STS_PCD]		= REG_FIELD(ISP176x_HC_USBSTS, 2, 2),
-+	[HC_FRINDEX]		= REG_FIELD(ISP176x_HC_FRINDEX, 0, 13),
-+	[FLAG_CF]		= REG_FIELD(ISP176x_HC_CONFIGFLAG, 0, 0),
-+	[HC_ISO_PTD_DONEMAP]	= REG_FIELD(ISP176x_HC_ISO_PTD_DONEMAP, 0, 31),
-+	[HC_ISO_PTD_SKIPMAP]	= REG_FIELD(ISP176x_HC_ISO_PTD_SKIPMAP, 0, 31),
-+	[HC_ISO_PTD_LASTPTD]	= REG_FIELD(ISP176x_HC_ISO_PTD_LASTPTD, 0, 31),
-+	[HC_INT_PTD_DONEMAP]	= REG_FIELD(ISP176x_HC_INT_PTD_DONEMAP, 0, 31),
-+	[HC_INT_PTD_SKIPMAP]	= REG_FIELD(ISP176x_HC_INT_PTD_SKIPMAP, 0, 31),
-+	[HC_INT_PTD_LASTPTD]	= REG_FIELD(ISP176x_HC_INT_PTD_LASTPTD, 0, 31),
-+	[HC_ATL_PTD_DONEMAP]	= REG_FIELD(ISP176x_HC_ATL_PTD_DONEMAP, 0, 31),
-+	[HC_ATL_PTD_SKIPMAP]	= REG_FIELD(ISP176x_HC_ATL_PTD_SKIPMAP, 0, 31),
-+	[HC_ATL_PTD_LASTPTD]	= REG_FIELD(ISP176x_HC_ATL_PTD_LASTPTD, 0, 31),
-+	[PORT_OWNER]		= REG_FIELD(ISP176x_HC_PORTSC1, 13, 13),
-+	[PORT_POWER]		= REG_FIELD(ISP176x_HC_PORTSC1, 12, 12),
-+	[PORT_LSTATUS]		= REG_FIELD(ISP176x_HC_PORTSC1, 10, 11),
-+	[PORT_RESET]		= REG_FIELD(ISP176x_HC_PORTSC1, 8, 8),
-+	[PORT_SUSPEND]		= REG_FIELD(ISP176x_HC_PORTSC1, 7, 7),
-+	[PORT_RESUME]		= REG_FIELD(ISP176x_HC_PORTSC1, 6, 6),
-+	[PORT_PE]		= REG_FIELD(ISP176x_HC_PORTSC1, 2, 2),
-+	[PORT_CSC]		= REG_FIELD(ISP176x_HC_PORTSC1, 1, 1),
-+	[PORT_CONNECT]		= REG_FIELD(ISP176x_HC_PORTSC1, 0, 0),
-+	[ALL_ATX_RESET]		= REG_FIELD(ISP176x_HC_HW_MODE_CTRL, 31, 31),
-+	[HW_ANA_DIGI_OC]	= REG_FIELD(ISP176x_HC_HW_MODE_CTRL, 15, 15),
-+	[HW_COMN_IRQ]		= REG_FIELD(ISP176x_HC_HW_MODE_CTRL, 10, 10),
-+	[HW_DATA_BUS_WIDTH]	= REG_FIELD(ISP176x_HC_HW_MODE_CTRL, 8, 8),
-+	[HW_DACK_POL_HIGH]	= REG_FIELD(ISP176x_HC_HW_MODE_CTRL, 6, 6),
-+	[HW_DREQ_POL_HIGH]	= REG_FIELD(ISP176x_HC_HW_MODE_CTRL, 5, 5),
-+	[HW_INTR_HIGH_ACT]	= REG_FIELD(ISP176x_HC_HW_MODE_CTRL, 2, 2),
-+	[HW_INTR_EDGE_TRIG]	= REG_FIELD(ISP176x_HC_HW_MODE_CTRL, 1, 1),
-+	[HW_GLOBAL_INTR_EN]	= REG_FIELD(ISP176x_HC_HW_MODE_CTRL, 0, 0),
-+	[HC_CHIP_REV]		= REG_FIELD(ISP176x_HC_CHIP_ID, 16, 31),
-+	[HC_CHIP_ID_HIGH]	= REG_FIELD(ISP176x_HC_CHIP_ID, 8, 15),
-+	[HC_CHIP_ID_LOW]	= REG_FIELD(ISP176x_HC_CHIP_ID, 0, 7),
-+	[HC_SCRATCH]		= REG_FIELD(ISP176x_HC_SCRATCH, 0, 31),
-+	[SW_RESET_RESET_ALL]	= REG_FIELD(ISP176x_HC_RESET, 0, 0),
-+	[ISO_BUF_FILL]		= REG_FIELD(ISP176x_HC_BUFFER_STATUS, 2, 2),
-+	[INT_BUF_FILL]		= REG_FIELD(ISP176x_HC_BUFFER_STATUS, 1, 1),
-+	[ATL_BUF_FILL]		= REG_FIELD(ISP176x_HC_BUFFER_STATUS, 0, 0),
-+	[MEM_BANK_SEL]		= REG_FIELD(ISP176x_HC_MEMORY, 16, 17),
-+	[MEM_START_ADDR]	= REG_FIELD(ISP176x_HC_MEMORY, 0, 15),
-+	[HC_INTERRUPT]		= REG_FIELD(ISP176x_HC_INTERRUPT, 0, 9),
-+	[HC_ATL_IRQ_ENABLE]	= REG_FIELD(ISP176x_HC_INTERRUPT_ENABLE, 8, 8),
-+	[HC_INT_IRQ_ENABLE]	= REG_FIELD(ISP176x_HC_INTERRUPT_ENABLE, 7, 7),
-+	[HC_ISO_IRQ_MASK_OR]	= REG_FIELD(ISP176x_HC_ISO_IRQ_MASK_OR, 0, 31),
-+	[HC_INT_IRQ_MASK_OR]	= REG_FIELD(ISP176x_HC_INT_IRQ_MASK_OR, 0, 31),
-+	[HC_ATL_IRQ_MASK_OR]	= REG_FIELD(ISP176x_HC_ATL_IRQ_MASK_OR, 0, 31),
-+	[HC_ISO_IRQ_MASK_AND]	= REG_FIELD(ISP176x_HC_ISO_IRQ_MASK_AND, 0, 31),
-+	[HC_INT_IRQ_MASK_AND]	= REG_FIELD(ISP176x_HC_INT_IRQ_MASK_AND, 0, 31),
-+	[HC_ATL_IRQ_MASK_AND]	= REG_FIELD(ISP176x_HC_ATL_IRQ_MASK_AND, 0, 31),
-+	[HW_OTG_DISABLE]	= REG_FIELD(ISP176x_HC_OTG_CTRL_SET, 10, 10),
-+	[HW_SW_SEL_HC_DC]	= REG_FIELD(ISP176x_HC_OTG_CTRL_SET, 7, 7),
-+	[HW_VBUS_DRV]		= REG_FIELD(ISP176x_HC_OTG_CTRL_SET, 4, 4),
-+	[HW_SEL_CP_EXT]		= REG_FIELD(ISP176x_HC_OTG_CTRL_SET, 3, 3),
-+	[HW_DM_PULLDOWN]	= REG_FIELD(ISP176x_HC_OTG_CTRL_SET, 2, 2),
-+	[HW_DP_PULLDOWN]	= REG_FIELD(ISP176x_HC_OTG_CTRL_SET, 1, 1),
-+	[HW_DP_PULLUP]		= REG_FIELD(ISP176x_HC_OTG_CTRL_SET, 0, 0),
-+	[HW_OTG_DISABLE_CLEAR]	= REG_FIELD(ISP176x_HC_OTG_CTRL_CLEAR, 10, 10),
-+	[HW_SW_SEL_HC_DC_CLEAR]	= REG_FIELD(ISP176x_HC_OTG_CTRL_CLEAR, 7, 7),
-+	[HW_VBUS_DRV_CLEAR]	= REG_FIELD(ISP176x_HC_OTG_CTRL_CLEAR, 4, 4),
-+	[HW_SEL_CP_EXT_CLEAR]	= REG_FIELD(ISP176x_HC_OTG_CTRL_CLEAR, 3, 3),
-+	[HW_DM_PULLDOWN_CLEAR]	= REG_FIELD(ISP176x_HC_OTG_CTRL_CLEAR, 2, 2),
-+	[HW_DP_PULLDOWN_CLEAR]	= REG_FIELD(ISP176x_HC_OTG_CTRL_CLEAR, 1, 1),
-+	[HW_DP_PULLUP_CLEAR]	= REG_FIELD(ISP176x_HC_OTG_CTRL_CLEAR, 0, 0),
-+};
-+
-+static const struct regmap_config isp1763_hc_regmap_conf = {
-+	.width = REGMAP_SIZE_16,
-+};
-+
-+static const struct reg_field isp1763_hc_reg_fields[] = {
-+	[CMD_LRESET]		= REG_FIELD(ISP1763_HC_USBCMD, 7, 7),
-+	[CMD_RESET]		= REG_FIELD(ISP1763_HC_USBCMD, 1, 1),
-+	[CMD_RUN]		= REG_FIELD(ISP1763_HC_USBCMD, 0, 0),
-+	[STS_PCD]		= REG_FIELD(ISP1763_HC_USBSTS, 2, 2),
-+	[HC_FRINDEX]		= REG_FIELD(ISP1763_HC_FRINDEX, 0, 13),
-+	[FLAG_CF]		= REG_FIELD(ISP1763_HC_CONFIGFLAG, 0, 0),
-+	[HC_ISO_PTD_DONEMAP]	= REG_FIELD(ISP1763_HC_ISO_PTD_DONEMAP, 0, 15),
-+	[HC_ISO_PTD_SKIPMAP]	= REG_FIELD(ISP1763_HC_ISO_PTD_SKIPMAP, 0, 15),
-+	[HC_ISO_PTD_LASTPTD]	= REG_FIELD(ISP1763_HC_ISO_PTD_LASTPTD, 0, 15),
-+	[HC_INT_PTD_DONEMAP]	= REG_FIELD(ISP1763_HC_INT_PTD_DONEMAP, 0, 15),
-+	[HC_INT_PTD_SKIPMAP]	= REG_FIELD(ISP1763_HC_INT_PTD_SKIPMAP, 0, 15),
-+	[HC_INT_PTD_LASTPTD]	= REG_FIELD(ISP1763_HC_INT_PTD_LASTPTD, 0, 15),
-+	[HC_ATL_PTD_DONEMAP]	= REG_FIELD(ISP1763_HC_ATL_PTD_DONEMAP, 0, 15),
-+	[HC_ATL_PTD_SKIPMAP]	= REG_FIELD(ISP1763_HC_ATL_PTD_SKIPMAP, 0, 15),
-+	[HC_ATL_PTD_LASTPTD]	= REG_FIELD(ISP1763_HC_ATL_PTD_LASTPTD, 0, 15),
-+	[PORT_OWNER]		= REG_FIELD(ISP1763_HC_PORTSC1, 13, 13),
-+	[PORT_POWER]		= REG_FIELD(ISP1763_HC_PORTSC1, 12, 12),
-+	[PORT_LSTATUS]		= REG_FIELD(ISP1763_HC_PORTSC1, 10, 11),
-+	[PORT_RESET]		= REG_FIELD(ISP1763_HC_PORTSC1, 8, 8),
-+	[PORT_SUSPEND]		= REG_FIELD(ISP1763_HC_PORTSC1, 7, 7),
-+	[PORT_RESUME]		= REG_FIELD(ISP1763_HC_PORTSC1, 6, 6),
-+	[PORT_PE]		= REG_FIELD(ISP1763_HC_PORTSC1, 2, 2),
-+	[PORT_CSC]		= REG_FIELD(ISP1763_HC_PORTSC1, 1, 1),
-+	[PORT_CONNECT]		= REG_FIELD(ISP1763_HC_PORTSC1, 0, 0),
-+	[HW_DATA_BUS_WIDTH]	= REG_FIELD(ISP1763_HC_HW_MODE_CTRL, 4, 4),
-+	[HW_DACK_POL_HIGH]	= REG_FIELD(ISP1763_HC_HW_MODE_CTRL, 6, 6),
-+	[HW_DREQ_POL_HIGH]	= REG_FIELD(ISP1763_HC_HW_MODE_CTRL, 5, 5),
-+	[HW_INTF_LOCK]		= REG_FIELD(ISP1763_HC_HW_MODE_CTRL, 3, 3),
-+	[HW_INTR_HIGH_ACT]	= REG_FIELD(ISP1763_HC_HW_MODE_CTRL, 2, 2),
-+	[HW_INTR_EDGE_TRIG]	= REG_FIELD(ISP1763_HC_HW_MODE_CTRL, 1, 1),
-+	[HW_GLOBAL_INTR_EN]	= REG_FIELD(ISP1763_HC_HW_MODE_CTRL, 0, 0),
-+	[SW_RESET_RESET_ATX]	= REG_FIELD(ISP1763_HC_RESET, 3, 3),
-+	[SW_RESET_RESET_ALL]	= REG_FIELD(ISP1763_HC_RESET, 0, 0),
-+	[HC_CHIP_ID_HIGH]	= REG_FIELD(ISP1763_HC_CHIP_ID, 0, 15),
-+	[HC_CHIP_ID_LOW]	= REG_FIELD(ISP1763_HC_CHIP_REV, 8, 15),
-+	[HC_CHIP_REV]		= REG_FIELD(ISP1763_HC_CHIP_REV, 0, 7),
-+	[HC_SCRATCH]		= REG_FIELD(ISP1763_HC_SCRATCH, 0, 15),
-+	[ISO_BUF_FILL]		= REG_FIELD(ISP1763_HC_BUFFER_STATUS, 2, 2),
-+	[INT_BUF_FILL]		= REG_FIELD(ISP1763_HC_BUFFER_STATUS, 1, 1),
-+	[ATL_BUF_FILL]		= REG_FIELD(ISP1763_HC_BUFFER_STATUS, 0, 0),
-+	[MEM_START_ADDR]	= REG_FIELD(ISP1763_HC_MEMORY, 0, 15),
-+	[HC_DATA]		= REG_FIELD(ISP1763_HC_DATA, 0, 15),
-+	[HC_INTERRUPT]		= REG_FIELD(ISP1763_HC_INTERRUPT, 0, 10),
-+	[HC_ATL_IRQ_ENABLE]	= REG_FIELD(ISP1763_HC_INTERRUPT_ENABLE, 8, 8),
-+	[HC_INT_IRQ_ENABLE]	= REG_FIELD(ISP1763_HC_INTERRUPT_ENABLE, 7, 7),
-+	[HC_ISO_IRQ_MASK_OR]	= REG_FIELD(ISP1763_HC_ISO_IRQ_MASK_OR, 0, 15),
-+	[HC_INT_IRQ_MASK_OR]	= REG_FIELD(ISP1763_HC_INT_IRQ_MASK_OR, 0, 15),
-+	[HC_ATL_IRQ_MASK_OR]	= REG_FIELD(ISP1763_HC_ATL_IRQ_MASK_OR, 0, 15),
-+	[HC_ISO_IRQ_MASK_AND]	= REG_FIELD(ISP1763_HC_ISO_IRQ_MASK_AND, 0, 15),
-+	[HC_INT_IRQ_MASK_AND]	= REG_FIELD(ISP1763_HC_INT_IRQ_MASK_AND, 0, 15),
-+	[HC_ATL_IRQ_MASK_AND]	= REG_FIELD(ISP1763_HC_ATL_IRQ_MASK_AND, 0, 15),
-+	[HW_HC_2_DIS]		= REG_FIELD(ISP1763_HC_OTG_CTRL_SET, 15, 15),
-+	[HW_OTG_DISABLE]	= REG_FIELD(ISP1763_HC_OTG_CTRL_SET, 10, 10),
-+	[HW_SW_SEL_HC_DC]	= REG_FIELD(ISP1763_HC_OTG_CTRL_SET, 7, 7),
-+	[HW_VBUS_DRV]		= REG_FIELD(ISP1763_HC_OTG_CTRL_SET, 4, 4),
-+	[HW_SEL_CP_EXT]		= REG_FIELD(ISP1763_HC_OTG_CTRL_SET, 3, 3),
-+	[HW_DM_PULLDOWN]	= REG_FIELD(ISP1763_HC_OTG_CTRL_SET, 2, 2),
-+	[HW_DP_PULLDOWN]	= REG_FIELD(ISP1763_HC_OTG_CTRL_SET, 1, 1),
-+	[HW_DP_PULLUP]		= REG_FIELD(ISP1763_HC_OTG_CTRL_SET, 0, 0),
-+	[HW_HC_2_DIS_CLEAR]	= REG_FIELD(ISP1763_HC_OTG_CTRL_CLEAR, 15, 15),
-+	[HW_OTG_DISABLE_CLEAR]	= REG_FIELD(ISP1763_HC_OTG_CTRL_CLEAR, 10, 10),
-+	[HW_SW_SEL_HC_DC_CLEAR]	= REG_FIELD(ISP1763_HC_OTG_CTRL_CLEAR, 7, 7),
-+	[HW_VBUS_DRV_CLEAR]	= REG_FIELD(ISP1763_HC_OTG_CTRL_CLEAR, 4, 4),
-+	[HW_SEL_CP_EXT_CLEAR]	= REG_FIELD(ISP1763_HC_OTG_CTRL_CLEAR, 3, 3),
-+	[HW_DM_PULLDOWN_CLEAR]	= REG_FIELD(ISP1763_HC_OTG_CTRL_CLEAR, 2, 2),
-+	[HW_DP_PULLDOWN_CLEAR]	= REG_FIELD(ISP1763_HC_OTG_CTRL_CLEAR, 1, 1),
-+	[HW_DP_PULLUP_CLEAR]	= REG_FIELD(ISP1763_HC_OTG_CTRL_CLEAR, 0, 0),
-+};
-+
-+int isp1760_register(struct isp1760_device *isp, struct resource *mem, int irq,
-+		     unsigned long irqflags)
-+{
-+	const struct regmap_config *hc_regmap;
-+	const struct reg_field *hc_reg_fields;
-+	struct isp1760_hcd *hcd;
-+	struct regmap_field *f;
-+	unsigned int devflags;
-+	struct udevice *dev;
-+	int ret;
-+	int i;
-+
-+	hcd = &isp->hcd;
-+	devflags = isp->devflags;
-+	dev = isp->dev;
-+
-+	hcd->is_isp1763 = !!(devflags & ISP1760_FLAG_ISP1763);
-+
-+	if (!hcd->is_isp1763 && (devflags & ISP1760_FLAG_BUS_WIDTH_8)) {
-+		dev_err(dev, "isp1760/61 do not support data width 8\n");
-+		return -EINVAL;
-+	}
-+
-+	if (hcd->is_isp1763) {
-+		hc_regmap = &isp1763_hc_regmap_conf;
-+		hc_reg_fields = &isp1763_hc_reg_fields[0];
-+	} else {
-+		hc_regmap = &isp1760_hc_regmap_conf;
-+		hc_reg_fields = &isp1760_hc_reg_fields[0];
-+	}
-+
-+	hcd->base = devm_ioremap(dev, mem->start, resource_size(mem));
-+	if (IS_ERR(hcd->base))
-+		return PTR_ERR(hcd->base);
-+
-+	hcd->regs = devm_regmap_init(dev, NULL, NULL, hc_regmap);
-+	if (IS_ERR(hcd->regs))
-+		return PTR_ERR(hcd->regs);
-+
-+	for (i = 0; i < HC_FIELD_MAX; i++) {
-+		f = devm_regmap_field_alloc(dev, hcd->regs, hc_reg_fields[i]);
-+		if (IS_ERR(f))
-+			return PTR_ERR(f);
-+
-+		hcd->fields[i] = f;
-+	}
-+
-+	if (hcd->is_isp1763)
-+		hcd->memory_layout = &isp1763_memory_conf;
-+	else
-+		hcd->memory_layout = &isp176x_memory_conf;
-+
-+	ret = isp1760_init_core(isp);
-+	if (ret < 0)
-+		return ret;
-+
-+	hcd->dev = dev;
-+
-+	ret = isp1760_hcd_register(hcd, mem, irq, irqflags, dev);
-+	if (ret < 0)
-+		return ret;
-+
-+	ret = isp1760_hcd_lowlevel_init(hcd);
-+	if (ret < 0)
-+		return ret;
-+
-+	dev_set_drvdata(dev, isp);
-+
-+	return 0;
-+}
-+
-+void isp1760_unregister(struct isp1760_device *isp)
-+{
-+	isp1760_hcd_unregister(&isp->hcd);
-+
-+	return;
-+}
-diff --git a/drivers/usb/isp1760/isp1760-core.h b/drivers/usb/isp1760/isp1760-core.h
-new file mode 100644
-index 0000000000..0a60e30b5f
---- /dev/null
-+++ b/drivers/usb/isp1760/isp1760-core.h
-@@ -0,0 +1,96 @@
-+/* SPDX-License-Identifier: GPL-2.0 */
-+/*
-+ * Driver for the NXP ISP1760 chip
-+ *
-+ * Copyright 2021 Linaro, Rui Miguel Silva
-+ * Copyright 2014 Laurent Pinchart
-+ * Copyright 2007 Sebastian Siewior
-+ *
-+ * Contacts:
-+ *	Sebastian Siewior <bigeasy@linutronix.de>
-+ *	Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-+ *	Rui Miguel Silva <rui.silva@linaro.org>
-+ */
-+
-+#ifndef _ISP1760_CORE_H_
-+#define _ISP1760_CORE_H_
-+
-+#include <linux/compat.h>
-+#include <linux/ioport.h>
-+#include <regmap.h>
-+
-+#include "isp1760-hcd.h"
-+
-+struct device;
-+struct gpio_desc;
-+
-+/*
-+ * Device flags that can vary from board to board.  All of these
-+ * indicate the most "atypical" case, so that a devflags of 0 is
-+ * a sane default configuration.
-+ */
-+#define ISP1760_FLAG_BUS_WIDTH_16	0x00000002 /* 16-bit data bus width */
-+#define ISP1760_FLAG_PERIPHERAL_EN	0x00000004 /* Port 1 supports Peripheral mode*/
-+#define ISP1760_FLAG_ANALOG_OC		0x00000008 /* Analog overcurrent */
-+#define ISP1760_FLAG_DACK_POL_HIGH	0x00000010 /* DACK active high */
-+#define ISP1760_FLAG_DREQ_POL_HIGH	0x00000020 /* DREQ active high */
-+#define ISP1760_FLAG_ISP1761		0x00000040 /* Chip is ISP1761 */
-+#define ISP1760_FLAG_INTR_POL_HIGH	0x00000080 /* Interrupt polarity active high */
-+#define ISP1760_FLAG_INTR_EDGE_TRIG	0x00000100 /* Interrupt edge triggered */
-+#define ISP1760_FLAG_ISP1763		0x00000200 /* Chip is ISP1763 */
-+#define ISP1760_FLAG_BUS_WIDTH_8	0x00000400 /* 8-bit data bus width */
-+
-+struct isp1760_device {
-+	struct udevice *dev;
-+
-+	unsigned int devflags;
-+	struct gpio_desc *rst_gpio;
-+
-+	struct isp1760_hcd hcd;
-+};
-+
-+int isp1760_register(struct isp1760_device *isp, struct resource *mem, int irq,
-+		     unsigned long irqflags);
-+void isp1760_unregister(struct isp1760_device *isp);
-+
-+void isp1760_set_pullup(struct isp1760_device *isp, bool enable);
-+
-+static inline u32 isp1760_field_read(struct regmap_field **fields, u32 field)
-+{
-+	unsigned int val;
-+
-+	regmap_field_read(fields[field], &val);
-+
-+	return val;
-+}
-+
-+static inline void isp1760_field_write(struct regmap_field **fields, u32 field,
-+				       u32 val)
-+{
-+	regmap_field_write(fields[field], val);
-+}
-+
-+static inline void isp1760_field_set(struct regmap_field **fields, u32 field)
-+{
-+	isp1760_field_write(fields, field, 0xFFFFFFFF);
-+}
-+
-+static inline void isp1760_field_clear(struct regmap_field **fields, u32 field)
-+{
-+	isp1760_field_write(fields, field, 0);
-+}
-+
-+static inline u32 isp1760_reg_read(struct regmap *regs, u32 reg)
-+{
-+	unsigned int val;
-+
-+	regmap_read(regs, reg, &val);
-+
-+	return val;
-+}
-+
-+static inline void isp1760_reg_write(struct regmap *regs, u32 reg, u32 val)
-+{
-+	regmap_write(regs, reg, val);
-+}
-+#endif
-diff --git a/drivers/usb/isp1760/isp1760-hcd.c b/drivers/usb/isp1760/isp1760-hcd.c
-new file mode 100644
-index 0000000000..b1d86dd69b
---- /dev/null
-+++ b/drivers/usb/isp1760/isp1760-hcd.c
-@@ -0,0 +1,2574 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * Driver for the NXP ISP1760 chip
-+ *
-+ * Copyright 2021 Linaro, Rui Miguel Silva <rui.silva@linaro.org>
-+ *
-+ */
-+
-+#include <hexdump.h>
-+#include <common.h>
-+#include <asm/cache.h>
-+#include <cpu_func.h>
-+#include <dm.h>
-+#include <dm/device-internal.h>
-+#include <dm/device_compat.h>
-+#include <linux/bug.h>
-+#include <linux/kernel.h>
-+#include <linux/list.h>
-+#include <linux/usb/usb_urb_compat.h>
-+#include <usb.h>
-+#include <linux/io.h>
-+#include <linux/iopoll.h>
-+#include <asm/unaligned.h>
-+
-+#include "isp1760-core.h"
-+#include "isp1760-hcd.h"
-+#include "isp1760-regs.h"
-+#include "isp1760-uboot.h"
-+
-+static struct kmem_cache *qtd_cachep;
-+static struct kmem_cache *qh_cachep;
-+static struct kmem_cache *urb_listitem_cachep;
-+
-+typedef void (packet_enqueue)(struct usb_hcd *hcd, struct isp1760_qh *qh,
-+			      struct isp1760_qtd *qtd);
-+
-+static inline struct isp1760_hcd *hcd_to_priv(struct usb_hcd *hcd)
-+{
-+	return hcd->hcd_priv;
-+}
-+
-+#define dw_to_le32(x)	(cpu_to_le32((__force u32)x))
-+#define le32_to_dw(x)	((__force __dw)(le32_to_cpu(x)))
-+
-+/* urb state*/
-+#define DELETE_URB		(0x0008)
-+#define NO_TRANSFER_ACTIVE	(0xffffffff)
-+
-+/* Philips Proprietary Transfer Descriptor (PTD) */
-+typedef __u32 __bitwise __dw;
-+struct ptd {
-+	__dw dw0;
-+	__dw dw1;
-+	__dw dw2;
-+	__dw dw3;
-+	__dw dw4;
-+	__dw dw5;
-+	__dw dw6;
-+	__dw dw7;
-+};
-+
-+struct ptd_le32 {
-+	__le32 dw0;
-+	__le32 dw1;
-+	__le32 dw2;
-+	__le32 dw3;
-+	__le32 dw4;
-+	__le32 dw5;
-+	__le32 dw6;
-+	__le32 dw7;
-+};
-+
-+#define PTD_OFFSET		0x0400
-+#define ISO_PTD_OFFSET		0x0400
-+#define INT_PTD_OFFSET		0x0800
-+#define ATL_PTD_OFFSET		0x0c00
-+#define PAYLOAD_OFFSET		0x1000
-+
-+#define ISP_BANK_0		0x00
-+#define ISP_BANK_1		0x01
-+#define ISP_BANK_2		0x02
-+#define ISP_BANK_3		0x03
-+
-+#define TO_DW(x)	((__force __dw)x)
-+#define TO_U32(x)	((__force u32)x)
-+
-+ /* ATL */
-+ /* DW0 */
-+#define DW0_VALID_BIT			TO_DW(1)
-+#define FROM_DW0_VALID(x)		(TO_U32(x) & 0x01)
-+#define TO_DW0_LENGTH(x)		TO_DW((((u32)x) << 3))
-+#define TO_DW0_MAXPACKET(x)		TO_DW((((u32)x) << 18))
-+#define TO_DW0_MULTI(x)			TO_DW((((u32)x) << 29))
-+#define TO_DW0_ENDPOINT(x)		TO_DW((((u32)x) << 31))
-+/* DW1 */
-+#define TO_DW1_DEVICE_ADDR(x)		TO_DW((((u32)x) << 3))
-+#define TO_DW1_PID_TOKEN(x)		TO_DW((((u32)x) << 10))
-+#define DW1_TRANS_BULK			TO_DW(((u32)2 << 12))
-+#define DW1_TRANS_INT			TO_DW(((u32)3 << 12))
-+#define DW1_TRANS_SPLIT			TO_DW(((u32)1 << 14))
-+#define DW1_SE_USB_LOSPEED		TO_DW(((u32)2 << 16))
-+#define TO_DW1_PORT_NUM(x)		TO_DW((((u32)x) << 18))
-+#define TO_DW1_HUB_NUM(x)		TO_DW((((u32)x) << 25))
-+/* DW2 */
-+#define TO_DW2_DATA_START_ADDR(x)	TO_DW((((u32)x) << 8))
-+#define TO_DW2_RL(x)			TO_DW(((x) << 25))
-+#define FROM_DW2_RL(x)			((TO_U32(x) >> 25) & 0xf)
-+/* DW3 */
-+#define FROM_DW3_NRBYTESTRANSFERRED(x)		TO_U32((x) & 0x3fff)
-+#define FROM_DW3_SCS_NRBYTESTRANSFERRED(x)	TO_U32((x) & 0x07ff)
-+#define TO_DW3_NAKCOUNT(x)		TO_DW(((x) << 19))
-+#define FROM_DW3_NAKCOUNT(x)		((TO_U32(x) >> 19) & 0xf)
-+#define TO_DW3_CERR(x)			TO_DW(((x) << 23))
-+#define FROM_DW3_CERR(x)		((TO_U32(x) >> 23) & 0x3)
-+#define TO_DW3_DATA_TOGGLE(x)		TO_DW(((x) << 25))
-+#define FROM_DW3_DATA_TOGGLE(x)		((TO_U32(x) >> 25) & 0x1)
-+#define TO_DW3_PING(x)			TO_DW(((x) << 26))
-+#define FROM_DW3_PING(x)		((TO_U32(x) >> 26) & 0x1)
-+#define DW3_ERROR_BIT			TO_DW((1 << 28))
-+#define DW3_BABBLE_BIT			TO_DW((1 << 29))
-+#define DW3_HALT_BIT			TO_DW((1 << 30))
-+#define DW3_ACTIVE_BIT			TO_DW((1 << 31))
-+#define FROM_DW3_ACTIVE(x)		((TO_U32(x) >> 31) & 0x01)
-+
-+#define INT_UNDERRUN			(1 << 2)
-+#define INT_BABBLE			(1 << 1)
-+#define INT_EXACT			(1 << 0)
-+
-+#define SETUP_PID	(2)
-+#define IN_PID		(1)
-+#define OUT_PID		(0)
-+
-+/* Errata 1 */
-+#define RL_COUNTER	(0)
-+#define NAK_COUNTER	(0)
-+#define ERR_COUNTER	(3)
-+
-+struct isp1760_qtd {
-+	u8 packet_type;
-+	void *data_buffer;
-+	u32 payload_addr;
-+
-+	/* the rest is HCD-private */
-+	struct list_head qtd_list;
-+	struct urb *urb;
-+	size_t length;
-+	size_t actual_length;
-+
-+	/* QTD_ENQUEUED:	waiting for transfer (inactive) */
-+	/* QTD_PAYLOAD_ALLOC:	chip mem has been allocated for payload */
-+	/* QTD_XFER_STARTED:	valid ptd has been written to isp176x - only
-+				interrupt handler may touch this qtd! */
-+	/* QTD_XFER_COMPLETE:	payload has been transferred successfully */
-+	/* QTD_RETIRE:		transfer error/abort qtd */
-+#define QTD_ENQUEUED		0
-+#define QTD_PAYLOAD_ALLOC	1
-+#define QTD_XFER_STARTED	2
-+#define QTD_XFER_COMPLETE	3
-+#define QTD_RETIRE		4
-+	u32 status;
-+};
-+
-+/* Queue head, one for each active endpoint */
-+struct isp1760_qh {
-+	struct list_head qh_list;
-+	struct list_head qtd_list;
-+	int epnum;
-+	u32 toggle;
-+	u32 ping;
-+	int slot;
-+	int tt_buffer_dirty;	/* See USB2.0 spec section 11.17.5 */
-+};
-+
-+struct urb_listitem {
-+	struct list_head urb_list;
-+	struct urb *urb;
-+};
-+
-+static const u32 isp1763_hc_portsc1_fields[] = {
-+	[PORT_OWNER]		= BIT(13),
-+	[PORT_POWER]		= BIT(12),
-+	[PORT_LSTATUS]		= BIT(10),
-+	[PORT_RESET]		= BIT(8),
-+	[PORT_SUSPEND]		= BIT(7),
-+	[PORT_RESUME]		= BIT(6),
-+	[PORT_PE]		= BIT(2),
-+	[PORT_CSC]		= BIT(1),
-+	[PORT_CONNECT]		= BIT(0),
-+};
-+
-+static struct descriptor {
-+	struct usb_device_descriptor device;
-+	struct usb_config_descriptor config;
-+	struct usb_interface_descriptor interface;
-+	struct usb_endpoint_descriptor endpoint;
-+} __packed rh_descriptor = {
-+	{
-+		/* usb 2.0 root hub device descriptor */
-+		0x12,       /*  __u8  bLength; */
-+		USB_DT_DEVICE, /* __u8 bDescriptorType; Device */
-+		0x0002, /*  __le16 bcdUSB; v2.0 */
-+
-+		0x09,       /*  __u8  bDeviceClass; HUB_CLASSCODE */
-+		0x00,       /*  __u8  bDeviceSubClass; */
-+		0x00,       /*  __u8  bDeviceProtocol; [ usb 2.0 no TT ] */
-+		0x40,       /*  __u8  bMaxPacketSize0; 64 Bytes */
-+
-+		0x6b1d,     /*  __le16 idVendor; Linux Foundation 0x1d6b */
-+		0x0200,     /*  __le16 idProduct; device 0x0002 */
-+		0x0001,     /*  __le16 bcdDevice */
-+
-+		0x03,       /*  __u8  iManufacturer; */
-+		0x02,       /*  __u8  iProduct; */
-+		0x01,       /*  __u8  iSerialNumber; */
-+		0x01        /*  __u8  bNumConfigurations; */
-+	}, {
-+		/* one configuration */
-+		0x09,       /*  __u8  bLength; */
-+		USB_DT_CONFIG, /* __u8 bDescriptorType; Configuration */
-+		0x1900,     /*  __le16 wTotalLength; */
-+		0x01,       /*  __u8  bNumInterfaces; (1) */
-+		0x01,       /*  __u8  bConfigurationValue; */
-+		0x00,       /*  __u8  iConfiguration; */
-+		0xc0,       /*  __u8  bmAttributes;
-+					Bit 7: must be set,
-+					6: Self-powered,
-+					5: Remote wakeup,
-+					4..0: resvd */
-+		0x00,       /*  __u8  MaxPower; */
-+	}, {
-+		/* one interface */
-+		0x09,       /*  __u8  if_bLength; */
-+		USB_DT_INTERFACE, /* __u8 if_bDescriptorType; Interface */
-+		0x00,       /*  __u8  if_bInterfaceNumber; */
-+		0x00,       /*  __u8  if_bAlternateSetting; */
-+		0x01,       /*  __u8  if_bNumEndpoints; */
-+		0x09,       /*  __u8  if_bInterfaceClass; HUB_CLASSCODE */
-+		0x00,       /*  __u8  if_bInterfaceSubClass; */
-+		0x00,       /*  __u8  if_bInterfaceProtocol; [usb1.1 or single tt] */
-+		0x00,       /*  __u8  if_iInterface; */
-+	}, {
-+		/* one endpoint (status change endpoint) */
-+		0x07,       /*  __u8  ep_bLength; */
-+		USB_DT_ENDPOINT, /* __u8 ep_bDescriptorType; Endpoint */
-+		0x81,       /*  __u8  ep_bEndpointAddress; IN Endpoint 1 */
-+		0x03,       /*  __u8  ep_bmAttributes; Interrupt */
-+			/* __le16 ep_wMaxPacketSize; 1 + (MAX_ROOT_PORTS / 8)
-+			* see hub.c:hub_configure() for details. */
-+		(USB_MAXCHILDREN + 1 + 7) / 8, 0x00,
-+		0x0c        /*  __u8  ep_bInterval; (256ms -- usb 2.0 spec) */
-+	},
-+};
-+
-+/*
-+ * Access functions for isp176x registers regmap fields
-+ */
-+static u32 isp1760_hcd_read(struct usb_hcd *hcd, u32 field)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+
-+	return isp1760_field_read(priv->fields, field);
-+}
-+
-+/*
-+ * We need, in isp1763, to write directly the values to the portsc1
-+ * register so it will make the other values to trigger.
-+ */
-+static void isp1760_hcd_portsc1_set_clear(struct isp1760_hcd *priv, u32 field,
-+					  u32 val)
-+{
-+	u32 bit = isp1763_hc_portsc1_fields[field];
-+	u32 port_status = readl(priv->base + ISP1763_HC_PORTSC1);
-+
-+	if (val)
-+		writel(port_status | bit, priv->base + ISP1763_HC_PORTSC1);
-+	else
-+		writel(port_status & ~bit, priv->base + ISP1763_HC_PORTSC1);
-+}
-+
-+static void isp1760_hcd_write(struct usb_hcd *hcd, u32 field, u32 val)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+
-+	if (unlikely(priv->is_isp1763 &&
-+		     (field >= PORT_OWNER && field <= PORT_CONNECT)))
-+		return isp1760_hcd_portsc1_set_clear(priv, field, val);
-+
-+	isp1760_field_write(priv->fields, field, val);
-+}
-+
-+static void isp1760_hcd_set(struct usb_hcd *hcd, u32 field)
-+{
-+	isp1760_hcd_write(hcd, field, 0xFFFFFFFF);
-+}
-+
-+static void isp1760_hcd_clear(struct usb_hcd *hcd, u32 field)
-+{
-+	isp1760_hcd_write(hcd, field, 0);
-+}
-+
-+static int isp1760_hcd_set_and_wait(struct usb_hcd *hcd, u32 field,
-+				    u32 timeout_us)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	u32 val;
-+
-+	isp1760_hcd_set(hcd, field);
-+
-+	return regmap_field_read_poll_timeout(priv->fields[field], val,
-+					      val, 10, timeout_us);
-+}
-+
-+static int isp1760_hcd_set_and_wait_swap(struct usb_hcd *hcd, u32 field,
-+					 u32 timeout_us)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	u32 val;
-+
-+	isp1760_hcd_set(hcd, field);
-+
-+	return regmap_field_read_poll_timeout(priv->fields[field], val,
-+					      !val, 10, timeout_us);
-+}
-+
-+static int isp1760_hcd_clear_and_wait(struct usb_hcd *hcd, u32 field,
-+				      u32 timeout_us)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	u32 val;
-+
-+	isp1760_hcd_clear(hcd, field);
-+
-+	return regmap_field_read_poll_timeout(priv->fields[field], val,
-+					      !val, 10, timeout_us);
-+}
-+
-+static bool isp1760_hcd_is_set(struct usb_hcd *hcd, u32 field)
-+{
-+	return !!isp1760_hcd_read(hcd, field);
-+}
-+
-+static bool isp1760_hcd_ppc_is_set(struct usb_hcd *hcd)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+
-+	if (priv->is_isp1763)
-+		return true;
-+
-+	return isp1760_hcd_is_set(hcd, HCS_PPC);
-+}
-+
-+static u32 isp1760_hcd_n_ports(struct usb_hcd *hcd)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+
-+	if (priv->is_isp1763)
-+		return 1;
-+
-+	return isp1760_hcd_read(hcd, HCS_N_PORTS);
-+}
-+
-+/*
-+ * Access functions for isp176x memory (offset >= 0x0400).
-+ *
-+ * bank_reads8() reads memory locations prefetched by an earlier write to
-+ * HC_MEMORY_REG (see isp176x datasheet). Unless you want to do fancy multi-
-+ * bank optimizations, you should use the more generic mem_read() below.
-+ *
-+ * For access to ptd memory, use the specialized ptd_read() and ptd_write()
-+ * below.
-+ *
-+ * These functions copy via MMIO data to/from the device. memcpy_{to|from}io()
-+ * doesn't quite work because some people have to enforce 32-bit access
-+ */
-+static void bank_reads8(void __iomem *src_base, u32 src_offset, u32 bank_addr,
-+							__u32 *dst, u32 bytes)
-+{
-+	__u32 __iomem *src;
-+	u32 val;
-+	__u8 *src_byteptr;
-+	__u8 *dst_byteptr;
-+
-+	src = src_base + (bank_addr | src_offset);
-+
-+	if (src_offset < PAYLOAD_OFFSET) {
-+		while (bytes >= 4) {
-+			*dst = readl_relaxed(src);
-+			bytes -= 4;
-+			src++;
-+			dst++;
-+		}
-+	} else {
-+		while (bytes >= 4) {
-+			*dst = __raw_readl(src);
-+			bytes -= 4;
-+			src++;
-+			dst++;
-+		}
-+	}
-+
-+	if (!bytes)
-+		return;
-+
-+	/* in case we have 3, 2 or 1 by left. The dst buffer may not be fully
-+	 * allocated.
-+	 */
-+	if (src_offset < PAYLOAD_OFFSET)
-+		val = readl_relaxed(src);
-+	else
-+		val = __raw_readl(src);
-+
-+	dst_byteptr = (void *) dst;
-+	src_byteptr = (void *) &val;
-+	while (bytes > 0) {
-+		*dst_byteptr = *src_byteptr;
-+		dst_byteptr++;
-+		src_byteptr++;
-+		bytes--;
-+	}
-+}
-+
-+static void isp1760_mem_read(struct usb_hcd *hcd, u32 src_offset, void *dst,
-+			     u32 bytes)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+
-+	isp1760_hcd_write(hcd, MEM_BANK_SEL, ISP_BANK_0);
-+	isp1760_hcd_write(hcd, MEM_START_ADDR, src_offset);
-+	ndelay(100);
-+
-+	bank_reads8(priv->base, src_offset, ISP_BANK_0, dst, bytes);
-+}
-+
-+/*
-+ * ISP1763 does not have the banks direct host controller memory access,
-+ * needs to use the HC_DATA register. Add data read/write according to this,
-+ * and also adjust 16bit access.
-+ */
-+static void isp1763_mem_read(struct usb_hcd *hcd, u16 srcaddr,
-+			     u16 *dstptr, u32 bytes)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+
-+
-+	/* Write the starting device address to the hcd memory register */
-+	isp1760_reg_write(priv->regs, ISP1763_HC_MEMORY, srcaddr);
-+	ndelay(100); /* Delay between consecutive access */
-+
-+	/* As long there are at least 16-bit to read ... */
-+	while (bytes >= 2) {
-+		*dstptr = __raw_readw(priv->base + ISP1763_HC_DATA);
-+		bytes -= 2;
-+		dstptr++;
-+	}
-+
-+	/* If there are no more bytes to read, return */
-+	if (bytes <= 0)
-+		return;
-+
-+	*((u8 *)dstptr) = (u8)(readw(priv->base + ISP1763_HC_DATA) & 0xFF);
-+}
-+
-+static void mem_read(struct usb_hcd *hcd, u32 src_offset, __u32 *dst,
-+		     u32 bytes)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+
-+	if (!priv->is_isp1763)
-+		return isp1760_mem_read(hcd, src_offset, (u16 *)dst, bytes);
-+
-+	isp1763_mem_read(hcd, (u16)src_offset, (u16 *)dst, bytes);
-+}
-+
-+static void isp1760_mem_write(void __iomem *dst_base, u32 dst_offset,
-+			      __u32 const *src, u32 bytes)
-+{
-+	__u32 __iomem *dst;
-+
-+	dst = dst_base + dst_offset;
-+
-+	if (dst_offset < PAYLOAD_OFFSET) {
-+		while (bytes >= 4) {
-+			writel_relaxed(*src, dst);
-+			bytes -= 4;
-+			src++;
-+			dst++;
-+		}
-+	} else {
-+		while (bytes >= 4) {
-+			__raw_writel(*src, dst);
-+			bytes -= 4;
-+			src++;
-+			dst++;
-+		}
-+	}
-+
-+	if (!bytes)
-+		return;
-+	/* in case we have 3, 2 or 1 bytes left. The buffer is allocated and the
-+	 * extra bytes should not be read by the HW.
-+	 */
-+
-+	if (dst_offset < PAYLOAD_OFFSET)
-+		writel_relaxed(*src, dst);
-+	else
-+		__raw_writel(*src, dst);
-+}
-+
-+static void isp1763_mem_write(struct usb_hcd *hcd, u16 dstaddr, u16 *src,
-+			      u32 bytes)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+
-+	/* Write the starting device address to the hcd memory register */
-+	isp1760_reg_write(priv->regs, ISP1763_HC_MEMORY, dstaddr);
-+	ndelay(100); /* Delay between consecutive access */
-+
-+	while (bytes >= 2) {
-+		/* Get and write the data; then adjust the data ptr and len */
-+		__raw_writew(*src, priv->base + ISP1763_HC_DATA);
-+		bytes -= 2;
-+		src++;
-+	}
-+
-+	/* If there are no more bytes to process, return */
-+	if (bytes <= 0)
-+		return;
-+
-+	/*
-+	 * The only way to get here is if there is a single byte left,
-+	 * get it and write it to the data reg;
-+	 */
-+	writew(*((u8 *)src), priv->base + ISP1763_HC_DATA);
-+}
-+
-+static void mem_write(struct usb_hcd *hcd, u32 dst_offset, __u32 *src,
-+		      u32 bytes)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+
-+	if (!priv->is_isp1763)
-+		return isp1760_mem_write(priv->base, dst_offset, src, bytes);
-+
-+	isp1763_mem_write(hcd, dst_offset, (u16 *)src, bytes);
-+}
-+
-+/*
-+ * Read and write ptds. 'ptd_offset' should be one of ISO_PTD_OFFSET,
-+ * INT_PTD_OFFSET, and ATL_PTD_OFFSET. 'slot' should be less than 32.
-+ */
-+static void isp1760_ptd_read(struct usb_hcd *hcd, u32 ptd_offset, u32 slot,
-+			     struct ptd *ptd)
-+{
-+	u16 src_offset = ptd_offset + slot * sizeof(*ptd);
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+
-+	isp1760_hcd_write(hcd, MEM_BANK_SEL, ISP_BANK_0);
-+	isp1760_hcd_write(hcd, MEM_START_ADDR, src_offset);
-+	ndelay(90);
-+
-+	bank_reads8(priv->base, src_offset, ISP_BANK_0, (void *)ptd,
-+		    sizeof(*ptd));
-+}
-+
-+static void isp1763_ptd_read(struct usb_hcd *hcd, u32 ptd_offset, u32 slot,
-+			     struct ptd *ptd)
-+{
-+	u16 src_offset = ptd_offset + slot * sizeof(*ptd);
-+	struct ptd_le32 le32_ptd;
-+
-+	isp1763_mem_read(hcd, src_offset, (u16 *)&le32_ptd, sizeof(le32_ptd));
-+	/* Normalize the data obtained */
-+	ptd->dw0 = le32_to_dw(le32_ptd.dw0);
-+	ptd->dw1 = le32_to_dw(le32_ptd.dw1);
-+	ptd->dw2 = le32_to_dw(le32_ptd.dw2);
-+	ptd->dw3 = le32_to_dw(le32_ptd.dw3);
-+	ptd->dw4 = le32_to_dw(le32_ptd.dw4);
-+	ptd->dw5 = le32_to_dw(le32_ptd.dw5);
-+	ptd->dw6 = le32_to_dw(le32_ptd.dw6);
-+	ptd->dw7 = le32_to_dw(le32_ptd.dw7);
-+}
-+
-+static void ptd_read(struct usb_hcd *hcd, u32 ptd_offset, u32 slot,
-+		     struct ptd *ptd)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+
-+	if (!priv->is_isp1763)
-+		return isp1760_ptd_read(hcd, ptd_offset, slot, ptd);
-+
-+	isp1763_ptd_read(hcd, ptd_offset, slot, ptd);
-+}
-+
-+static void isp1763_ptd_write(struct usb_hcd *hcd, u32 ptd_offset, u32 slot,
-+			      struct ptd *cpu_ptd)
-+{
-+	u16 dst_offset = ptd_offset + slot * sizeof(*cpu_ptd);
-+	struct ptd_le32 ptd;
-+
-+	ptd.dw0 = dw_to_le32(cpu_ptd->dw0);
-+	ptd.dw1 = dw_to_le32(cpu_ptd->dw1);
-+	ptd.dw2 = dw_to_le32(cpu_ptd->dw2);
-+	ptd.dw3 = dw_to_le32(cpu_ptd->dw3);
-+	ptd.dw4 = dw_to_le32(cpu_ptd->dw4);
-+	ptd.dw5 = dw_to_le32(cpu_ptd->dw5);
-+	ptd.dw6 = dw_to_le32(cpu_ptd->dw6);
-+	ptd.dw7 = dw_to_le32(cpu_ptd->dw7);
-+
-+	isp1763_mem_write(hcd, dst_offset,  (u16 *)&ptd.dw0,
-+			  8 * sizeof(ptd.dw0));
-+}
-+
-+static void isp1760_ptd_write(void __iomem *base, u32 ptd_offset, u32 slot,
-+			      struct ptd *ptd)
-+{
-+	u32 dst_offset = ptd_offset + slot * sizeof(*ptd);
-+
-+	/*
-+	 * Make sure dw0 gets written last (after other dw's and after payload)
-+	 *  since it contains the enable bit
-+	 */
-+	isp1760_mem_write(base, dst_offset + sizeof(ptd->dw0),
-+			  (__force u32 *)&ptd->dw1, 7 * sizeof(ptd->dw1));
-+	wmb();
-+	isp1760_mem_write(base, dst_offset, (__force u32 *)&ptd->dw0,
-+			  sizeof(ptd->dw0));
-+}
-+
-+static void ptd_write(struct usb_hcd *hcd, u32 ptd_offset, u32 slot,
-+		      struct ptd *ptd)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+
-+	if (!priv->is_isp1763)
-+		return isp1760_ptd_write(priv->base, ptd_offset, slot, ptd);
-+
-+	isp1763_ptd_write(hcd, ptd_offset, slot, ptd);
-+}
-+
-+/* memory management of the 60kb on the chip from 0x1000 to 0xffff */
-+static void init_memory(struct isp1760_hcd *priv)
-+{
-+	const struct isp1760_memory_layout *mem = priv->memory_layout;
-+	int i, j, curr;
-+	u32 payload_addr;
-+
-+	payload_addr = PAYLOAD_OFFSET;
-+
-+	for (i = 0, curr = 0; i < ARRAY_SIZE(mem->blocks); i++) {
-+		for (j = 0; j < mem->blocks[i]; j++, curr++) {
-+			priv->memory_pool[curr + j].start = payload_addr;
-+			priv->memory_pool[curr + j].size = mem->blocks_size[i];
-+			priv->memory_pool[curr + j].free = 1;
-+			payload_addr += priv->memory_pool[curr + j].size;
-+		}
-+	}
-+
-+	WARN_ON(payload_addr - priv->memory_pool[0].start >
-+		mem->payload_area_size);
-+}
-+
-+static void alloc_mem(struct usb_hcd *hcd, struct isp1760_qtd *qtd)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	const struct isp1760_memory_layout *mem = priv->memory_layout;
-+	int i;
-+
-+	WARN_ON(qtd->payload_addr);
-+
-+	if (!qtd->length)
-+		return;
-+
-+	for (i = 0; i < mem->payload_blocks; i++) {
-+		if (priv->memory_pool[i].size >= qtd->length &&
-+				priv->memory_pool[i].free) {
-+			priv->memory_pool[i].free = 0;
-+			qtd->payload_addr = priv->memory_pool[i].start;
-+			return;
-+		}
-+	}
-+}
-+
-+static void free_mem(struct usb_hcd *hcd, struct isp1760_qtd *qtd)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	const struct isp1760_memory_layout *mem = priv->memory_layout;
-+	int i;
-+
-+	if (!qtd->payload_addr)
-+		return;
-+
-+	for (i = 0; i < mem->payload_blocks; i++) {
-+		if (priv->memory_pool[i].start == qtd->payload_addr) {
-+			WARN_ON(priv->memory_pool[i].free);
-+			priv->memory_pool[i].free = 1;
-+			qtd->payload_addr = 0;
-+			return;
-+		}
-+	}
-+
-+	WARN_ON(1);
-+	qtd->payload_addr = 0;
-+}
-+
-+/* reset a non-running (STS_HALT == 1) controller */
-+static int ehci_reset(struct usb_hcd *hcd)
-+{
-+	return isp1760_hcd_set_and_wait_swap(hcd, CMD_RESET, 250 * 1000);
-+}
-+
-+static struct isp1760_qh *qh_alloc(gfp_t flags)
-+{
-+	struct isp1760_qh *qh;
-+
-+	qh = kmem_cache_alloc(qh_cachep, flags);
-+	if (!qh)
-+		return NULL;
-+
-+	memset(qh, '\0', qh_cachep->sz);
-+	INIT_LIST_HEAD(&qh->qh_list);
-+	INIT_LIST_HEAD(&qh->qtd_list);
-+	qh->slot = -1;
-+
-+	return qh;
-+}
-+
-+static void qh_free(struct isp1760_qh *qh)
-+{
-+	WARN_ON(!list_empty(&qh->qtd_list));
-+	WARN_ON(qh->slot > -1);
-+	kmem_cache_free(qh_cachep, qh);
-+}
-+
-+/* one-time init, only for memory state */
-+static int priv_init(struct usb_hcd *hcd)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	u32 isoc_cache;
-+	u32 isoc_thres;
-+	int i;
-+
-+	spin_lock_init(&priv->lock);
-+
-+	for (i = 0; i < QH_END; i++)
-+		INIT_LIST_HEAD(&priv->qh_list[i]);
-+
-+	/*
-+	 * hw default: 1K periodic list heads, one per frame.
-+	 * periodic_size can shrink by USBCMD update if hcc_params allows.
-+	 */
-+	priv->periodic_size = DEFAULT_I_TDPS;
-+
-+	if (priv->is_isp1763) {
-+		priv->i_thresh = 2;
-+		return 0;
-+	}
-+
-+	/* controllers may cache some of the periodic schedule ... */
-+	isoc_cache = isp1760_hcd_read(hcd, HCC_ISOC_CACHE);
-+	isoc_thres = isp1760_hcd_read(hcd, HCC_ISOC_THRES);
-+
-+	/* full frame cache */
-+	if (isoc_cache)
-+		priv->i_thresh = 8;
-+	else /* N microframes cached */
-+		priv->i_thresh = 2 + isoc_thres;
-+
-+	return 0;
-+}
-+
-+static int isp1760_hc_setup(struct usb_hcd *hcd)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	u32 atx_reset;
-+	int result;
-+	u32 scratch;
-+	u32 pattern;
-+
-+	if (priv->is_isp1763)
-+		pattern = 0xcafe;
-+	else
-+		pattern = 0xdeadcafe;
-+
-+	isp1760_hcd_write(hcd, HC_SCRATCH, pattern);
-+
-+	/* Change bus pattern */
-+	scratch = isp1760_hcd_read(hcd, HC_CHIP_ID_HIGH);
-+	scratch = isp1760_hcd_read(hcd, HC_SCRATCH);
-+	if (scratch != pattern) {
-+		printf("Scratch test failed. 0x%08x\n", scratch);
-+		return -ENODEV;
-+	}
-+
-+	/*
-+	 * The RESET_HC bit in the SW_RESET register is supposed to reset the
-+	 * host controller without touching the CPU interface registers, but at
-+	 * least on the ISP1761 it seems to behave as the RESET_ALL bit and
-+	 * reset the whole device. We thus can't use it here, so let's reset
-+	 * the host controller through the EHCI USB Command register. The device
-+	 * has been reset in core code anyway, so this shouldn't matter.
-+	 */
-+	isp1760_hcd_clear(hcd, ISO_BUF_FILL);
-+	isp1760_hcd_clear(hcd, INT_BUF_FILL);
-+	isp1760_hcd_clear(hcd, ATL_BUF_FILL);
-+
-+	isp1760_hcd_set(hcd, HC_ATL_PTD_SKIPMAP);
-+	isp1760_hcd_set(hcd, HC_INT_PTD_SKIPMAP);
-+	isp1760_hcd_set(hcd, HC_ISO_PTD_SKIPMAP);
-+
-+	result = ehci_reset(hcd);
-+	if (result)
-+		return result;
-+
-+	/* Step 11 passed */
-+
-+	/* ATL reset */
-+	if (priv->is_isp1763)
-+		atx_reset = SW_RESET_RESET_ATX;
-+	else
-+		atx_reset = ALL_ATX_RESET;
-+
-+	isp1760_hcd_set(hcd, atx_reset);
-+	mdelay(10);
-+	isp1760_hcd_clear(hcd, atx_reset);
-+
-+	if (priv->is_isp1763) {
-+		isp1760_hcd_set(hcd, HW_OTG_DISABLE);
-+		isp1760_hcd_set(hcd, HW_SW_SEL_HC_DC_CLEAR);
-+		isp1760_hcd_set(hcd, HW_HC_2_DIS_CLEAR);
-+		isp1760_hcd_set(hcd, HW_DM_PULLDOWN);
-+		isp1760_hcd_set(hcd, HW_DP_PULLDOWN);
-+		mdelay(10);
-+
-+		isp1760_hcd_set(hcd, HW_INTF_LOCK);
-+	}
-+
-+	isp1760_hcd_set(hcd, HC_INT_IRQ_ENABLE);
-+	isp1760_hcd_set(hcd, HC_ATL_IRQ_ENABLE);
-+
-+	return priv_init(hcd);
-+}
-+
-+static u32 base_to_chip(u32 base)
-+{
-+	return ((base - 0x400) >> 3);
-+}
-+
-+static int last_qtd_of_urb(struct isp1760_qtd *qtd, struct isp1760_qh *qh)
-+{
-+	struct urb *urb;
-+
-+	if (list_is_last(&qtd->qtd_list, &qh->qtd_list))
-+		return 1;
-+
-+	urb = qtd->urb;
-+	qtd = list_entry(qtd->qtd_list.next, typeof(*qtd), qtd_list);
-+
-+	return (qtd->urb != urb);
-+}
-+
-+/* magic numbers that can affect system performance */
-+#define	EHCI_TUNE_CERR		3	/* 0-3 qtd retries; 0 == don't stop */
-+#define	EHCI_TUNE_RL_HS		4	/* nak throttle; see 4.9 */
-+#define	EHCI_TUNE_RL_TT		0
-+#define	EHCI_TUNE_MULT_HS	1	/* 1-3 transactions/uframe; 4.10.3 */
-+#define	EHCI_TUNE_MULT_TT	1
-+#define	EHCI_TUNE_FLS		2	/* (small) 256 frame schedule */
-+
-+static void create_ptd_atl(struct isp1760_qh *qh, struct isp1760_qtd *qtd,
-+			   struct ptd *ptd)
-+{
-+	u32 maxpacket;
-+	u32 multi;
-+	u32 rl = RL_COUNTER;
-+	u32 nak = NAK_COUNTER;
-+	u8 portnr;
-+	u8 hubaddr;
-+
-+	memset(ptd, 0, sizeof(*ptd));
-+
-+	/* according to 3.6.2, max packet len can not be > 0x400 */
-+	maxpacket = usb_maxpacket(qtd->urb->dev, qtd->urb->pipe);
-+	multi =  1 + ((maxpacket >> 11) & 0x3);
-+	maxpacket &= 0x7ff;
-+
-+	/* DW0 */
-+	ptd->dw0 = DW0_VALID_BIT;
-+	ptd->dw0 |= TO_DW0_LENGTH(qtd->length);
-+	ptd->dw0 |= TO_DW0_MAXPACKET(maxpacket);
-+	ptd->dw0 |= TO_DW0_ENDPOINT(usb_pipeendpoint(qtd->urb->pipe));
-+
-+	/* DW1 */
-+	ptd->dw1 = TO_DW((usb_pipeendpoint(qtd->urb->pipe) >> 1));
-+	ptd->dw1 |= TO_DW1_DEVICE_ADDR(usb_pipedevice(qtd->urb->pipe));
-+	ptd->dw1 |= TO_DW1_PID_TOKEN(qtd->packet_type);
-+
-+	if (usb_pipebulk(qtd->urb->pipe))
-+		ptd->dw1 |= DW1_TRANS_BULK;
-+	else if  (usb_pipeint(qtd->urb->pipe))
-+		ptd->dw1 |= DW1_TRANS_INT;
-+
-+	if (qtd->urb->dev->speed != USB_SPEED_HIGH) {
-+		/* split transaction */
-+
-+		ptd->dw1 |= DW1_TRANS_SPLIT;
-+		if (qtd->urb->dev->speed == USB_SPEED_LOW)
-+			ptd->dw1 |= DW1_SE_USB_LOSPEED;
-+
-+		if (!qtd->urb->dev->dev->parent_priv_) {
-+			portnr = qtd->urb->dev->portnr;
-+			hubaddr = qtd->urb->dev->devnum;
-+		} else {
-+			usb_find_usb2_hub_address_port(qtd->urb->dev, &hubaddr,
-+						       &portnr);
-+		}
-+
-+		ptd->dw1 |= TO_DW1_PORT_NUM(portnr);
-+		ptd->dw1 |= TO_DW1_HUB_NUM(hubaddr);
-+
-+		/* SE bit for Split INT transfers */
-+		if (usb_pipeint(qtd->urb->pipe) &&
-+				(qtd->urb->dev->speed == USB_SPEED_LOW))
-+			ptd->dw1 |= DW1_SE_USB_LOSPEED;
-+
-+		rl = 0;
-+		nak = 0;
-+	} else {
-+		ptd->dw0 |= TO_DW0_MULTI(multi);
-+		if (usb_pipecontrol(qtd->urb->pipe) ||
-+						usb_pipebulk(qtd->urb->pipe))
-+			ptd->dw3 |= TO_DW3_PING(qh->ping);
-+	}
-+	/* DW2 */
-+	ptd->dw2 = 0;
-+	ptd->dw2 |= TO_DW2_DATA_START_ADDR(base_to_chip(qtd->payload_addr));
-+	ptd->dw2 |= TO_DW2_RL(rl);
-+
-+	/* DW3 */
-+	ptd->dw3 |= TO_DW3_NAKCOUNT(nak);
-+	ptd->dw3 |= TO_DW3_DATA_TOGGLE(qh->toggle);
-+
-+	if (usb_pipecontrol(qtd->urb->pipe)) {
-+		if (qtd->data_buffer == qtd->urb->setup_packet) {
-+			ptd->dw3 &= ~TO_DW3_DATA_TOGGLE(1);
-+		} else if (last_qtd_of_urb(qtd, qh)) {
-+			ptd->dw3 |= TO_DW3_DATA_TOGGLE(1);
-+		}
-+	}
-+
-+	ptd->dw3 |= DW3_ACTIVE_BIT;
-+	/* Cerr */
-+	ptd->dw3 |= TO_DW3_CERR(ERR_COUNTER);
-+}
-+
-+static void transform_add_int(struct isp1760_qh *qh, struct isp1760_qtd *qtd,
-+			      struct ptd *ptd)
-+{
-+	struct usb_host_endpoint *hep = qtd->urb->ep;
-+	struct usb_endpoint_descriptor *epd = &hep->desc;
-+	u32 usof;
-+	u32 period;
-+
-+	/*
-+	 * Most of this is guessing. ISP1761 datasheet is quite unclear, and
-+	 * the algorithm from the original Philips driver code, which was
-+	 * pretty much used in this driver before as well, is quite horrendous
-+	 * and, i believe, incorrect. The code below follows the datasheet and
-+	 * USB2.0 spec as far as I can tell, and plug/unplug seems to be much
-+	 * more reliable this way (fingers crossed...).
-+	 */
-+
-+	if (qtd->urb->dev->speed == USB_SPEED_HIGH) {
-+		/* urb->interval is in units of microframes (1/8 ms) */
-+		period = epd->bInterval >> 3;
-+
-+		if (epd->bInterval > 4)
-+			usof = 0x01; /* One bit set =>
-+						interval 1 ms * uFrame-match */
-+		else if (epd->bInterval > 2)
-+			usof = 0x22; /* Two bits set => interval 1/2 ms */
-+		else if (epd->bInterval > 1)
-+			usof = 0x55; /* Four bits set => interval 1/4 ms */
-+		else
-+			usof = 0xff; /* All bits set => interval 1/8 ms */
-+	} else {
-+		/* urb->interval is in units of frames (1 ms) */
-+		period = epd->bInterval;
-+		usof = 0x0f;		/* Execute Start Split on any of the
-+					   four first uFrames */
-+
-+		/*
-+		 * First 8 bits in dw5 is uSCS and "specifies which uSOF the
-+		 * complete split needs to be sent. Valid only for IN." Also,
-+		 * "All bits can be set to one for every transfer." (p 82,
-+		 * ISP1761 data sheet.) 0x1c is from Philips driver. Where did
-+		 * that number come from? 0xff seems to work fine...
-+		 */
-+		/* ptd->dw5 = 0x1c; */
-+		ptd->dw5 = TO_DW(0xff); /* Execute Complete Split on any uFrame */
-+	}
-+
-+	period = period >> 1;/* Ensure equal or shorter period than requested */
-+	period &= 0xf8; /* Mask off too large values and lowest unused 3 bits */
-+
-+	ptd->dw2 |= TO_DW(period);
-+	ptd->dw4 = TO_DW(usof);
-+}
-+
-+static void create_ptd_int(struct isp1760_qh *qh, struct isp1760_qtd *qtd,
-+			   struct ptd *ptd)
-+{
-+	create_ptd_atl(qh, qtd, ptd);
-+	transform_add_int(qh, qtd, ptd);
-+}
-+
-+static void isp1760_urb_done(struct usb_hcd *hcd, struct urb *urb)
-+{
-+	if (usb_pipein(urb->pipe) && usb_pipetype(urb->pipe) != PIPE_CONTROL) {
-+		void *ptr;
-+		for (ptr = urb->transfer_buffer;
-+		     ptr < urb->transfer_buffer + urb->transfer_buffer_length;
-+		     ptr += PAGE_SIZE)
-+			flush_dcache_range((unsigned  long)ptr,
-+					   (unsigned long)ptr + PAGE_SIZE);
-+	}
-+
-+	/* complete() can reenter this HCD */
-+	usb_hcd_unlink_urb_from_ep(hcd, urb);
-+	usb_hcd_giveback_urb(hcd, urb, urb->status);
-+}
-+
-+static struct isp1760_qtd *qtd_alloc(gfp_t flags, struct urb *urb,
-+				     u8 packet_type)
-+{
-+	struct isp1760_qtd *qtd;
-+
-+	qtd = kmem_cache_alloc(qtd_cachep, flags);
-+	if (!qtd)
-+		return NULL;
-+
-+	memset(qtd, '\0', sizeof(*qtd));
-+	INIT_LIST_HEAD(&qtd->qtd_list);
-+	qtd->urb = urb;
-+	qtd->packet_type = packet_type;
-+	qtd->status = QTD_ENQUEUED;
-+	qtd->actual_length = 0;
-+
-+	return qtd;
-+}
-+
-+static void qtd_free(struct isp1760_qtd *qtd)
-+{
-+	WARN_ON(qtd->payload_addr);
-+	kmem_cache_free(qtd_cachep, qtd);
-+}
-+
-+static void start_bus_transfer(struct usb_hcd *hcd, u32 ptd_offset, int slot,
-+				struct isp1760_slotinfo *slots,
-+				struct isp1760_qtd *qtd, struct isp1760_qh *qh,
-+				struct ptd *ptd)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	const struct isp1760_memory_layout *mem = priv->memory_layout;
-+	int skip_map;
-+
-+	WARN_ON((slot < 0) || (slot > mem->slot_num - 1));
-+	WARN_ON(qtd->length && !qtd->payload_addr);
-+	WARN_ON(slots[slot].qtd);
-+	WARN_ON(slots[slot].qh);
-+	WARN_ON(qtd->status != QTD_PAYLOAD_ALLOC);
-+
-+	if (priv->is_isp1763)
-+		ndelay(100);
-+
-+	/* Make sure done map has not triggered from some unlinked transfer */
-+	if (ptd_offset == ATL_PTD_OFFSET) {
-+		skip_map = isp1760_hcd_read(hcd, HC_ATL_PTD_SKIPMAP);
-+		isp1760_hcd_write(hcd, HC_ATL_PTD_SKIPMAP,
-+				  skip_map | (1 << slot));
-+		priv->atl_done_map |= isp1760_hcd_read(hcd, HC_ATL_PTD_DONEMAP);
-+		priv->atl_done_map &= ~(1 << slot);
-+	} else {
-+		skip_map = isp1760_hcd_read(hcd, HC_INT_PTD_SKIPMAP);
-+		isp1760_hcd_write(hcd, HC_INT_PTD_SKIPMAP,
-+				  skip_map | (1 << slot));
-+		priv->int_done_map |= isp1760_hcd_read(hcd, HC_INT_PTD_DONEMAP);
-+		priv->int_done_map &= ~(1 << slot);
-+	}
-+
-+	skip_map &= ~(1 << slot);
-+	qh->slot = slot;
-+	qtd->status = QTD_XFER_STARTED;
-+	slots[slot].qtd = qtd;
-+	slots[slot].qh = qh;
-+
-+	ptd_write(hcd, ptd_offset, slot, ptd);
-+
-+	if (ptd_offset == ATL_PTD_OFFSET)
-+		isp1760_hcd_write(hcd, HC_ATL_PTD_SKIPMAP, skip_map);
-+	else
-+		isp1760_hcd_write(hcd, HC_INT_PTD_SKIPMAP, skip_map);
-+}
-+
-+static int is_short_bulk(struct isp1760_qtd *qtd)
-+{
-+	return (usb_pipebulk(qtd->urb->pipe) &&
-+					(qtd->actual_length < qtd->length));
-+}
-+
-+static void collect_qtds(struct usb_hcd *hcd, struct isp1760_qh *qh,
-+						struct list_head *urb_list)
-+{
-+	struct isp1760_qtd *qtd, *qtd_next;
-+	struct urb_listitem *urb_listitem;
-+	int last_qtd;
-+
-+	list_for_each_entry_safe(qtd, qtd_next, &qh->qtd_list, qtd_list) {
-+		if (qtd->status < QTD_XFER_COMPLETE)
-+			break;
-+
-+		last_qtd = last_qtd_of_urb(qtd, qh);
-+
-+		if ((!last_qtd) && (qtd->status == QTD_RETIRE))
-+			qtd_next->status = QTD_RETIRE;
-+
-+		if (qtd->status == QTD_XFER_COMPLETE) {
-+			if (qtd->actual_length) {
-+				switch (qtd->packet_type) {
-+				case IN_PID:
-+					mem_read(hcd, qtd->payload_addr,
-+						 qtd->data_buffer,
-+						 qtd->actual_length);
-+					fallthrough;
-+				case OUT_PID:
-+					qtd->urb->actual_length +=
-+							qtd->actual_length;
-+					fallthrough;
-+				case SETUP_PID:
-+					break;
-+				}
-+			}
-+
-+			if (is_short_bulk(qtd)) {
-+				if (qtd->urb->transfer_flags & URB_SHORT_NOT_OK)
-+					qtd->urb->status = -EREMOTEIO;
-+				if (!last_qtd)
-+					qtd_next->status = QTD_RETIRE;
-+			}
-+		}
-+
-+		if (qtd->payload_addr)
-+			free_mem(hcd, qtd);
-+
-+		if (last_qtd) {
-+			if ((qtd->status == QTD_RETIRE) &&
-+					(qtd->urb->status == -EINPROGRESS))
-+				qtd->urb->status = -EPIPE;
-+			/* Defer calling of urb_done() since it releases lock */
-+			urb_listitem = kmem_cache_alloc(urb_listitem_cachep,
-+								GFP_ATOMIC);
-+			if (unlikely(!urb_listitem))
-+				break; /* Try again on next call */
-+			urb_listitem->urb = qtd->urb;
-+			list_add_tail(&urb_listitem->urb_list, urb_list);
-+		}
-+
-+		list_del(&qtd->qtd_list);
-+		qtd_free(qtd);
-+	}
-+}
-+
-+#define ENQUEUE_DEPTH	2
-+static void enqueue_qtds(struct usb_hcd *hcd, struct isp1760_qh *qh)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	const struct isp1760_memory_layout *mem = priv->memory_layout;
-+	int slot_num = mem->slot_num;
-+	int ptd_offset;
-+	struct isp1760_slotinfo *slots;
-+	int curr_slot, free_slot;
-+	int n;
-+	struct ptd ptd;
-+	struct isp1760_qtd *qtd;
-+
-+	if (unlikely(list_empty(&qh->qtd_list)))
-+		return;
-+
-+	/* Make sure this endpoint's TT buffer is clean before queueing ptds */
-+	if (qh->tt_buffer_dirty)
-+		return;
-+
-+	if (usb_pipeint(list_entry(qh->qtd_list.next, struct isp1760_qtd,
-+				   qtd_list)->urb->pipe)) {
-+		ptd_offset = INT_PTD_OFFSET;
-+		slots = priv->int_slots;
-+	} else {
-+		ptd_offset = ATL_PTD_OFFSET;
-+		slots = priv->atl_slots;
-+	}
-+
-+	free_slot = -1;
-+	for (curr_slot = 0; curr_slot < slot_num; curr_slot++) {
-+		if ((free_slot == -1) && (slots[curr_slot].qtd == NULL))
-+			free_slot = curr_slot;
-+		if (slots[curr_slot].qh == qh)
-+			break;
-+	}
-+
-+	n = 0;
-+	list_for_each_entry(qtd, &qh->qtd_list, qtd_list) {
-+		if (qtd->status == QTD_ENQUEUED) {
-+			WARN_ON(qtd->payload_addr);
-+			alloc_mem(hcd, qtd);
-+			if ((qtd->length) && (!qtd->payload_addr))
-+				break;
-+
-+			if (qtd->length && (qtd->packet_type == SETUP_PID ||
-+					    qtd->packet_type == OUT_PID)) {
-+				mem_write(hcd, qtd->payload_addr,
-+					  qtd->data_buffer, qtd->length);
-+			}
-+
-+			qtd->status = QTD_PAYLOAD_ALLOC;
-+		}
-+
-+		if (qtd->status == QTD_PAYLOAD_ALLOC) {
-+/*
-+			if ((curr_slot > 31) && (free_slot == -1))
-+				printf("%s: No slot "
-+					"available for transfer\n", __func__);
-+*/
-+			/* Start xfer for this endpoint if not already done */
-+			if ((curr_slot > slot_num - 1) && (free_slot > -1)) {
-+				if (usb_pipeint(qtd->urb->pipe))
-+					create_ptd_int(qh, qtd, &ptd);
-+				else
-+					create_ptd_atl(qh, qtd, &ptd);
-+
-+				start_bus_transfer(hcd, ptd_offset, free_slot,
-+							slots, qtd, qh, &ptd);
-+				curr_slot = free_slot;
-+			}
-+
-+			n++;
-+			if (n >= ENQUEUE_DEPTH)
-+				break;
-+		}
-+	}
-+}
-+
-+static void schedule_ptds(struct usb_hcd *hcd)
-+{
-+	struct isp1760_hcd *priv;
-+	struct isp1760_qh *qh, *qh_next;
-+	struct list_head *ep_queue;
-+	LIST_HEAD(urb_list);
-+	struct urb_listitem *urb_listitem, *urb_listitem_next;
-+	int i;
-+
-+	if (!hcd) {
-+		WARN_ON(1);
-+		return;
-+	}
-+
-+	priv = hcd_to_priv(hcd);
-+
-+	/*
-+	 * check finished/retired xfers, transfer payloads, call urb_done()
-+	 */
-+	for (i = 0; i < QH_END; i++) {
-+		ep_queue = &priv->qh_list[i];
-+		list_for_each_entry_safe(qh, qh_next, ep_queue, qh_list)
-+			collect_qtds(hcd, qh, &urb_list);
-+	}
-+
-+	list_for_each_entry_safe(urb_listitem, urb_listitem_next, &urb_list,
-+				 urb_list) {
-+		isp1760_urb_done(hcd, urb_listitem->urb);
-+		kmem_cache_free(urb_listitem_cachep, urb_listitem);
-+	}
-+
-+	/*
-+	 * Schedule packets for transfer.
-+	 *
-+	 * According to USB2.0 specification:
-+	 *
-+	 * 1st prio: interrupt xfers, up to 80 % of bandwidth
-+	 * 2nd prio: control xfers
-+	 * 3rd prio: bulk xfers
-+	 *
-+	 * ... but let's use a simpler scheme here (mostly because ISP1761 doc
-+	 * is very unclear on how to prioritize traffic):
-+	 *
-+	 * 1) Enqueue any queued control transfers, as long as payload chip mem
-+	 *    and PTD ATL slots are available.
-+	 * 2) Enqueue any queued INT transfers, as long as payload chip mem
-+	 *    and PTD INT slots are available.
-+	 * 3) Enqueue any queued bulk transfers, as long as payload chip mem
-+	 *    and PTD ATL slots are available.
-+	 *
-+	 * Use double buffering (ENQUEUE_DEPTH==2) as a compromise between
-+	 * conservation of chip mem and performance.
-+	 *
-+	 * I'm sure this scheme could be improved upon!
-+	 */
-+	for (i = 0; i < QH_END; i++) {
-+		ep_queue = &priv->qh_list[i];
-+		list_for_each_entry_safe(qh, qh_next, ep_queue, qh_list)
-+			enqueue_qtds(hcd, qh);
-+	}
-+}
-+
-+#define PTD_STATE_QTD_DONE	1
-+#define PTD_STATE_QTD_RELOAD	2
-+#define PTD_STATE_URB_RETIRE	3
-+
-+static int check_int_transfer(struct usb_hcd *hcd, struct ptd *ptd,
-+								struct urb *urb)
-+{
-+	u32 dw4;
-+	int i;
-+
-+	dw4 = TO_U32(ptd->dw4);
-+	dw4 >>= 8;
-+
-+	/* FIXME: ISP1761 datasheet does not say what to do with these. Do we
-+	   need to handle these errors? Is it done in hardware? */
-+	if (ptd->dw3 & DW3_HALT_BIT) {
-+
-+		urb->status = -EPROTO; /* Default unknown error */
-+
-+		for (i = 0; i < 8; i++) {
-+			switch (dw4 & 0x7) {
-+			case INT_UNDERRUN:
-+				printf("underrun during uFrame %d\n", i);
-+				urb->status = -ECOMM; /* Could not write data */
-+				break;
-+			case INT_EXACT:
-+				printf("transaction error uFrame %d\n", i);
-+				urb->status = -EPROTO; /* timeout, bad CRC, PID
-+							  error etc. */
-+				break;
-+			case INT_BABBLE:
-+				printf("babble error during uFrame %d\n", i);
-+				urb->status = -EOVERFLOW;
-+				break;
-+			}
-+			dw4 >>= 3;
-+		}
-+
-+		return PTD_STATE_URB_RETIRE;
-+	}
-+
-+	return PTD_STATE_QTD_DONE;
-+}
-+
-+static int check_atl_transfer(struct usb_hcd *hcd, struct ptd *ptd,
-+			      struct urb *urb)
-+{
-+	WARN_ON(!ptd);
-+	if (ptd->dw3 & DW3_HALT_BIT) {
-+		if (ptd->dw3 & DW3_BABBLE_BIT)
-+			urb->status = -EOVERFLOW;
-+		else if (FROM_DW3_CERR(ptd->dw3))
-+			urb->status = -EPIPE;  /* Stall */
-+		else
-+			urb->status = -EPROTO; /* Unknown */
-+
-+		/* usefull debug
-+		printf("%s: ptd error:\n"
-+			"        dw0: %08x dw1: %08x dw2: %08x dw3: %08x\n"
-+			"        dw4: %08x dw5: %08x dw6: %08x dw7: %08x\n",
-+			__func__,
-+			ptd->dw0, ptd->dw1, ptd->dw2, ptd->dw3,
-+			ptd->dw4, ptd->dw5, ptd->dw6, ptd->dw7);
-+		*/
-+
-+		return PTD_STATE_URB_RETIRE;
-+	}
-+
-+	/* Transfer Error, *but* active and no HALT -> reload */
-+	if ((ptd->dw3 & DW3_ERROR_BIT) && (ptd->dw3 & DW3_ACTIVE_BIT))
-+		return PTD_STATE_QTD_RELOAD;
-+
-+	/*
-+	* NAKs are handled in HW by the chip. Usually if the
-+	* device is not able to send data fast enough.
-+	* This happens mostly on slower hardware.
-+	*/
-+	if (!FROM_DW3_NAKCOUNT(ptd->dw3) && (ptd->dw3 & DW3_ACTIVE_BIT))
-+		return PTD_STATE_QTD_RELOAD;
-+
-+	return PTD_STATE_QTD_DONE;
-+}
-+
-+static void handle_done_ptds(struct usb_hcd *hcd)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	struct isp1760_slotinfo *slots;
-+	struct isp1760_qtd *qtd;
-+	struct isp1760_qh *qh;
-+	struct ptd ptd;
-+	u32 ptd_offset;
-+	int modified;
-+	int skip_map;
-+	int state;
-+	int slot;
-+
-+	skip_map = isp1760_hcd_read(hcd, HC_INT_PTD_SKIPMAP);
-+	priv->int_done_map &= ~skip_map;
-+	skip_map = isp1760_hcd_read(hcd, HC_ATL_PTD_SKIPMAP);
-+	priv->atl_done_map &= ~skip_map;
-+
-+	modified = priv->int_done_map || priv->atl_done_map;
-+
-+	while (priv->int_done_map || priv->atl_done_map) {
-+		if (priv->int_done_map) {
-+			/* INT ptd */
-+			slot = __ffs(priv->int_done_map);
-+			priv->int_done_map &= ~(1 << slot);
-+			slots = priv->int_slots;
-+			/* This should not trigger, and could be removed if
-+			   noone have any problems with it triggering: */
-+			if (!slots[slot].qh) {
-+				WARN_ON(1);
-+				continue;
-+			}
-+			ptd_offset = INT_PTD_OFFSET;
-+			ptd_read(hcd, INT_PTD_OFFSET, slot, &ptd);
-+			state = check_int_transfer(hcd, &ptd,
-+						   slots[slot].qtd->urb);
-+		} else {
-+			/* ATL ptd */
-+			slot = __ffs(priv->atl_done_map);
-+			priv->atl_done_map &= ~(1 << slot);
-+			slots = priv->atl_slots;
-+			/* This should not trigger, and could be removed if
-+			   noone have any problems with it triggering: */
-+			if (!slots[slot].qh) {
-+				WARN_ON(1);
-+				continue;
-+			}
-+			ptd_offset = ATL_PTD_OFFSET;
-+			ptd_read(hcd, ATL_PTD_OFFSET, slot, &ptd);
-+			state = check_atl_transfer(hcd, &ptd,
-+						   slots[slot].qtd->urb);
-+		}
-+
-+		qtd = slots[slot].qtd;
-+		slots[slot].qtd = NULL;
-+		qh = slots[slot].qh;
-+		slots[slot].qh = NULL;
-+		qh->slot = -1;
-+
-+		WARN_ON(qtd->status != QTD_XFER_STARTED);
-+
-+		switch (state) {
-+		case PTD_STATE_QTD_DONE:
-+			if ((usb_pipeint(qtd->urb->pipe)) &&
-+			    (qtd->urb->dev->speed != USB_SPEED_HIGH))
-+				qtd->actual_length =
-+				       FROM_DW3_SCS_NRBYTESTRANSFERRED(ptd.dw3);
-+			else
-+				qtd->actual_length =
-+					FROM_DW3_NRBYTESTRANSFERRED(ptd.dw3);
-+
-+			qtd->status = QTD_XFER_COMPLETE;
-+
-+			if (list_is_last(&qtd->qtd_list, &qh->qtd_list) ||
-+			    is_short_bulk(qtd))
-+				qtd = NULL;
-+			else
-+				qtd = list_entry(qtd->qtd_list.next,
-+							typeof(*qtd), qtd_list);
-+
-+			qh->toggle = FROM_DW3_DATA_TOGGLE(ptd.dw3);
-+			qh->ping = FROM_DW3_PING(ptd.dw3);
-+
-+			break;
-+
-+		case PTD_STATE_QTD_RELOAD: /* QTD_RETRY, for atls only */
-+			qtd->status = QTD_PAYLOAD_ALLOC;
-+			ptd.dw0 |= DW0_VALID_BIT;
-+			/* RL counter = ERR counter */
-+			ptd.dw3 &= ~TO_DW3_NAKCOUNT(0xf);
-+			ptd.dw3 |= TO_DW3_NAKCOUNT(FROM_DW2_RL(ptd.dw2));
-+			ptd.dw3 &= ~TO_DW3_CERR(3);
-+			ptd.dw3 |= TO_DW3_CERR(ERR_COUNTER);
-+
-+			qh->toggle = FROM_DW3_DATA_TOGGLE(ptd.dw3);
-+			qh->ping = FROM_DW3_PING(ptd.dw3);
-+			break;
-+
-+		case PTD_STATE_URB_RETIRE:
-+			qtd->status = QTD_RETIRE;
-+			qtd = NULL;
-+			qh->toggle = 0;
-+			qh->ping = 0;
-+			break;
-+
-+		default:
-+			WARN_ON(1);
-+			continue;
-+		}
-+
-+		if (qtd && (qtd->status == QTD_PAYLOAD_ALLOC)) {
-+			if (slots == priv->int_slots) {
-+				if (state == PTD_STATE_QTD_RELOAD)
-+					dev_err(priv->dev,
-+						"%s: PTD_STATE_QTD_RELOAD on "
-+						"interrupt packet\n", __func__);
-+				if (state != PTD_STATE_QTD_RELOAD)
-+					create_ptd_int(qh, qtd, &ptd);
-+			} else {
-+				if (state != PTD_STATE_QTD_RELOAD)
-+					create_ptd_atl(qh, qtd, &ptd);
-+			}
-+
-+			start_bus_transfer(hcd, ptd_offset, slot, slots, qtd,
-+				qh, &ptd);
-+		}
-+	}
-+
-+	if (modified)
-+		schedule_ptds(hcd);
-+}
-+
-+static irqreturn_t isp1760_irq(int irq, void *__hci)
-+{
-+	struct usb_hcd *hcd = __hci;
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	irqreturn_t irqret = IRQ_NONE;
-+	u32 int_reg;
-+	u32 imask;
-+
-+	imask = isp1760_hcd_read(hcd, HC_INTERRUPT);
-+	if (unlikely(!imask))
-+		return irqret;
-+
-+	int_reg = priv->is_isp1763 ? ISP1763_HC_INTERRUPT :
-+		ISP176x_HC_INTERRUPT;
-+	isp1760_reg_write(priv->regs, int_reg, imask);
-+
-+	priv->int_done_map |= isp1760_hcd_read(hcd, HC_INT_PTD_DONEMAP);
-+	priv->atl_done_map |= isp1760_hcd_read(hcd, HC_ATL_PTD_DONEMAP);
-+
-+	handle_done_ptds(hcd);
-+
-+	irqret = IRQ_HANDLED;
-+
-+	return irqret;
-+}
-+
-+static int isp1763_run(struct usb_hcd *hcd)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	int retval;
-+	u32 chipid_h;
-+	u32 chipid_l;
-+	u32 chip_rev;
-+	u32 ptd_atl_int;
-+	u32 ptd_iso;
-+
-+	chipid_h = isp1760_hcd_read(hcd, HC_CHIP_ID_HIGH);
-+	chipid_l = isp1760_hcd_read(hcd, HC_CHIP_ID_LOW);
-+	chip_rev = isp1760_hcd_read(hcd, HC_CHIP_REV);
-+	printf("USB ISP %02x%02x HW rev. %d started\n", chipid_h,
-+	       chipid_l, chip_rev);
-+
-+	isp1760_hcd_clear(hcd, ISO_BUF_FILL);
-+	isp1760_hcd_clear(hcd, INT_BUF_FILL);
-+	isp1760_hcd_clear(hcd, ATL_BUF_FILL);
-+
-+	isp1760_hcd_set(hcd, HC_ATL_PTD_SKIPMAP);
-+	isp1760_hcd_set(hcd, HC_INT_PTD_SKIPMAP);
-+	isp1760_hcd_set(hcd, HC_ISO_PTD_SKIPMAP);
-+	ndelay(100);
-+	isp1760_hcd_clear(hcd, HC_ATL_PTD_DONEMAP);
-+	isp1760_hcd_clear(hcd, HC_INT_PTD_DONEMAP);
-+	isp1760_hcd_clear(hcd, HC_ISO_PTD_DONEMAP);
-+
-+	isp1760_hcd_set(hcd, HW_OTG_DISABLE);
-+	isp1760_reg_write(priv->regs, ISP1763_HC_OTG_CTRL_CLEAR, BIT(7));
-+	isp1760_reg_write(priv->regs, ISP1763_HC_OTG_CTRL_CLEAR, BIT(15));
-+	mdelay(10);
-+
-+	isp1760_hcd_set(hcd, HC_INT_IRQ_ENABLE);
-+	isp1760_hcd_set(hcd, HC_ATL_IRQ_ENABLE);
-+
-+	isp1760_hcd_set(hcd, HW_GLOBAL_INTR_EN);
-+
-+	isp1760_hcd_clear(hcd, HC_ATL_IRQ_MASK_AND);
-+	isp1760_hcd_clear(hcd, HC_INT_IRQ_MASK_AND);
-+	isp1760_hcd_clear(hcd, HC_ISO_IRQ_MASK_AND);
-+
-+	isp1760_hcd_set(hcd, HC_ATL_IRQ_MASK_OR);
-+	isp1760_hcd_set(hcd, HC_INT_IRQ_MASK_OR);
-+	isp1760_hcd_set(hcd, HC_ISO_IRQ_MASK_OR);
-+
-+	ptd_atl_int = 0x8000;
-+	ptd_iso = 0x0001;
-+
-+	isp1760_hcd_write(hcd, HC_ATL_PTD_LASTPTD, ptd_atl_int);
-+	isp1760_hcd_write(hcd, HC_INT_PTD_LASTPTD, ptd_atl_int);
-+	isp1760_hcd_write(hcd, HC_ISO_PTD_LASTPTD, ptd_iso);
-+
-+	isp1760_hcd_set(hcd, ATL_BUF_FILL);
-+	isp1760_hcd_set(hcd, INT_BUF_FILL);
-+
-+	isp1760_hcd_clear(hcd, CMD_LRESET);
-+	isp1760_hcd_clear(hcd, CMD_RESET);
-+
-+	retval = isp1760_hcd_set_and_wait(hcd, CMD_RUN, 250 * 1000);
-+	if (retval)
-+		return retval;
-+
-+	down_write(&ehci_cf_port_reset_rwsem);
-+	retval = isp1760_hcd_set_and_wait(hcd, FLAG_CF, 250 * 1000);
-+	up_write(&ehci_cf_port_reset_rwsem);
-+	retval = 0;
-+	if (retval)
-+		return retval;
-+
-+	return 0;
-+}
-+
-+static int isp1760_run(struct usb_hcd *hcd)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	int retval;
-+	u32 chipid_h;
-+	u32 chipid_l;
-+	u32 chip_rev;
-+	u32 ptd_atl_int;
-+	u32 ptd_iso;
-+
-+	/*
-+	 * ISP1763 have some differences in the setup and order to enable
-+	 * the ports, disable otg, setup buffers, and ATL, INT, ISO status.
-+	 * So, just handle it a separate sequence.
-+	 */
-+	if (priv->is_isp1763)
-+		return isp1763_run(hcd);
-+
-+	/* Set PTD interrupt AND & OR maps */
-+	isp1760_hcd_clear(hcd, HC_ATL_IRQ_MASK_AND);
-+	isp1760_hcd_clear(hcd, HC_INT_IRQ_MASK_AND);
-+	isp1760_hcd_clear(hcd, HC_ISO_IRQ_MASK_AND);
-+
-+	isp1760_hcd_set(hcd, HC_ATL_IRQ_MASK_OR);
-+	isp1760_hcd_set(hcd, HC_INT_IRQ_MASK_OR);
-+	isp1760_hcd_set(hcd, HC_ISO_IRQ_MASK_OR);
-+
-+	/* step 23 passed */
-+
-+	isp1760_hcd_set(hcd, HW_GLOBAL_INTR_EN);
-+
-+	isp1760_hcd_clear(hcd, CMD_LRESET);
-+	isp1760_hcd_clear(hcd, CMD_RESET);
-+
-+	retval = isp1760_hcd_set_and_wait(hcd, CMD_RUN, 250 * 1000);
-+	if (retval)
-+		return retval;
-+
-+	/*
-+	 * XXX
-+	 * Spec says to write FLAG_CF as last config action, priv code grabs
-+	 * the semaphore while doing so.
-+	 */
-+	down_write(&ehci_cf_port_reset_rwsem);
-+
-+	retval = isp1760_hcd_set_and_wait(hcd, FLAG_CF, 250 * 1000);
-+	up_write(&ehci_cf_port_reset_rwsem);
-+	if (retval)
-+		return retval;
-+
-+	chipid_h = isp1760_hcd_read(hcd, HC_CHIP_ID_HIGH);
-+	chipid_l = isp1760_hcd_read(hcd, HC_CHIP_ID_LOW);
-+	chip_rev = isp1760_hcd_read(hcd, HC_CHIP_REV);
-+	dev_info(priv->dev, "USB ISP %02x%02x HW rev. %d started\n",
-+		 chipid_h, chipid_l, chip_rev);
-+
-+	/* PTD Register Init Part 2, Step 28 */
-+
-+	/* Setup registers controlling PTD checking */
-+	ptd_atl_int = 0x80000000;
-+	ptd_iso = 0x00000001;
-+
-+	isp1760_hcd_write(hcd, HC_ATL_PTD_LASTPTD, ptd_atl_int);
-+	isp1760_hcd_write(hcd, HC_INT_PTD_LASTPTD, ptd_atl_int);
-+	isp1760_hcd_write(hcd, HC_ISO_PTD_LASTPTD, ptd_iso);
-+
-+	isp1760_hcd_set(hcd, HC_ATL_PTD_SKIPMAP);
-+	isp1760_hcd_set(hcd, HC_INT_PTD_SKIPMAP);
-+	isp1760_hcd_set(hcd, HC_ISO_PTD_SKIPMAP);
-+
-+	isp1760_hcd_set(hcd, ATL_BUF_FILL);
-+	isp1760_hcd_set(hcd, INT_BUF_FILL);
-+
-+	/* GRR this is run-once init(), being done every time the HC starts.
-+	 * So long as they're part of class devices, we can't do it init()
-+	 * since the class device isn't created that early.
-+	 */
-+	return 0;
-+}
-+
-+static int qtd_fill(struct isp1760_qtd *qtd, void *databuffer, size_t len)
-+{
-+	qtd->data_buffer = databuffer;
-+
-+	qtd->length = len;
-+
-+	return qtd->length;
-+}
-+
-+static void qtd_list_free(struct list_head *qtd_list)
-+{
-+	struct isp1760_qtd *qtd, *qtd_next;
-+
-+	list_for_each_entry_safe(qtd, qtd_next, qtd_list, qtd_list) {
-+		list_del(&qtd->qtd_list);
-+		qtd_free(qtd);
-+	}
-+}
-+
-+/*
-+ * Packetize urb->transfer_buffer into list of packets of size wMaxPacketSize.
-+ * Also calculate the PID type (SETUP/IN/OUT) for each packet.
-+ */
-+#define max_packet(wMaxPacketSize) ((wMaxPacketSize) & 0x07ff)
-+static void packetize_urb(struct usb_hcd *hcd,
-+		struct urb *urb, struct list_head *head, gfp_t flags)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	const struct isp1760_memory_layout *mem = priv->memory_layout;
-+	struct isp1760_qtd *qtd;
-+	void *buf;
-+	int len, maxpacketsize;
-+	u8 packet_type;
-+
-+	/*
-+	 * URBs map to sequences of QTDs:  one logical transaction
-+	 */
-+
-+	if (!urb->transfer_buffer && urb->transfer_buffer_length) {
-+		/* XXX This looks like usb storage / SCSI bug */
-+		dev_err(priv->dev, "buf is null, dma is %08lx len is %d\n",
-+			(long unsigned)urb->transfer_dma,
-+			urb->transfer_buffer_length);
-+		WARN_ON(1);
-+	}
-+
-+	if (usb_pipein(urb->pipe))
-+		packet_type = IN_PID;
-+	else
-+		packet_type = OUT_PID;
-+
-+	if (usb_pipecontrol(urb->pipe)) {
-+		qtd = qtd_alloc(flags, urb, SETUP_PID);
-+		if (!qtd)
-+			goto cleanup;
-+		qtd_fill(qtd, urb->setup_packet, sizeof(struct usb_ctrlrequest));
-+		list_add_tail(&qtd->qtd_list, head);
-+
-+		/* for zero length DATA stages, STATUS is always IN */
-+		if (urb->transfer_buffer_length == 0)
-+			packet_type = IN_PID;
-+	}
-+
-+	maxpacketsize = max_packet(usb_maxpacket(urb->dev, urb->pipe));
-+
-+	/*
-+	 * buffer gets wrapped in one or more qtds;
-+	 * last one may be "short" (including zero len)
-+	 * and may serve as a control status ack
-+	 */
-+	buf = urb->transfer_buffer;
-+	len = urb->transfer_buffer_length;
-+
-+	for (;;) {
-+		int this_qtd_len;
-+
-+		qtd = qtd_alloc(flags, urb, packet_type);
-+		if (!qtd)
-+			goto cleanup;
-+
-+		if (len > mem->blocks_size[ISP176x_BLOCK_NUM - 1])
-+			len = mem->blocks_size[ISP176x_BLOCK_NUM - 1];
-+
-+		this_qtd_len = qtd_fill(qtd, buf, len);
-+		list_add_tail(&qtd->qtd_list, head);
-+
-+		len -= this_qtd_len;
-+		buf += this_qtd_len;
-+
-+		if (len <= 0)
-+			break;
-+	}
-+
-+	/*
-+	 * control requests may need a terminating data "status" ack;
-+	 * bulk ones may need a terminating short packet (zero length).
-+	 */
-+	if (urb->transfer_buffer_length != 0) {
-+		int one_more = 0;
-+
-+		if (usb_pipecontrol(urb->pipe)) {
-+			one_more = 1;
-+			if (packet_type == IN_PID)
-+				packet_type = OUT_PID;
-+			else
-+				packet_type = IN_PID;
-+		} else if (usb_pipebulk(urb->pipe)
-+			   && (urb->transfer_flags & URB_ZERO_PACKET)
-+			   && !(urb->transfer_buffer_length %
-+				maxpacketsize)) {
-+			one_more = 1;
-+		}
-+		if (one_more) {
-+			qtd = qtd_alloc(flags, urb, packet_type);
-+			if (!qtd)
-+				goto cleanup;
-+
-+			/* never any data in such packets */
-+			qtd_fill(qtd, NULL, 0);
-+			list_add_tail(&qtd->qtd_list, head);
-+		}
-+	}
-+
-+	return;
-+
-+cleanup:
-+	qtd_list_free(head);
-+}
-+
-+static int isp1760_urb_enqueue(struct usb_hcd *hcd, struct urb *urb,
-+			       gfp_t mem_flags)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	struct isp1760_qh *qh = NULL;
-+	struct list_head *ep_queue;
-+	LIST_HEAD(new_qtds);
-+	int qh_in_queue;
-+	int retval;
-+	int epnum;
-+
-+	switch (usb_pipetype(urb->pipe)) {
-+	case PIPE_CONTROL:
-+		ep_queue = &priv->qh_list[QH_CONTROL];
-+		break;
-+	case PIPE_BULK:
-+		ep_queue = &priv->qh_list[QH_BULK];
-+		break;
-+	case PIPE_INTERRUPT:
-+		ep_queue = &priv->qh_list[QH_INTERRUPT];
-+		break;
-+	case PIPE_ISOCHRONOUS:
-+		printf("isochronous USB packets not yet supported\n");
-+		return -EPIPE;
-+	default:
-+		printf("unknown pipe type\n");
-+		return -EPIPE;
-+	}
-+
-+	if (usb_pipein(urb->pipe))
-+		urb->actual_length = 0;
-+
-+	packetize_urb(hcd, urb, &new_qtds, mem_flags);
-+	if (list_empty(&new_qtds))
-+		return -ENOMEM;
-+
-+	retval = usb_hcd_link_urb_to_ep(hcd, urb);
-+	if (retval) {
-+		qtd_list_free(&new_qtds);
-+		goto out;
-+	}
-+
-+	epnum = usb_pipeendpoint(urb->pipe);
-+
-+	qh_in_queue = 0;
-+	list_for_each_entry(qh, ep_queue, qh_list) {
-+		if (qh->epnum == epnum) {
-+			qh_in_queue = 1;
-+			break;
-+		}
-+	}
-+
-+	if (!qh_in_queue) {
-+		qh = qh_alloc(GFP_ATOMIC);
-+		if (!qh) {
-+			retval = -ENOMEM;
-+			usb_hcd_unlink_urb_from_ep(hcd, urb);
-+			qtd_list_free(&new_qtds);
-+			goto out;
-+		}
-+
-+		qh->epnum = epnum;
-+		list_add_tail(&qh->qh_list, ep_queue);
-+		urb->ep->hcpriv = qh;
-+	}
-+
-+	list_splice_tail(&new_qtds, &qh->qtd_list);
-+	schedule_ptds(hcd);
-+
-+out:
-+	return retval;
-+}
-+
-+static void kill_transfer(struct usb_hcd *hcd, struct urb *urb,
-+		struct isp1760_qh *qh)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	int skip_map;
-+
-+	WARN_ON(qh->slot == -1);
-+
-+	/* We need to forcefully reclaim the slot since some transfers never
-+	   return, e.g. interrupt transfers and NAKed bulk transfers. */
-+	if (usb_pipecontrol(urb->pipe) || usb_pipebulk(urb->pipe)) {
-+		skip_map = isp1760_hcd_read(hcd, HC_ATL_PTD_SKIPMAP);
-+		skip_map |= (1 << qh->slot);
-+		isp1760_hcd_write(hcd, HC_ATL_PTD_SKIPMAP, skip_map);
-+		ndelay(100);
-+		priv->atl_slots[qh->slot].qh = NULL;
-+		priv->atl_slots[qh->slot].qtd = NULL;
-+	} else {
-+		skip_map = isp1760_hcd_read(hcd, HC_INT_PTD_SKIPMAP);
-+		skip_map |= (1 << qh->slot);
-+		isp1760_hcd_write(hcd, HC_INT_PTD_SKIPMAP, skip_map);
-+		priv->int_slots[qh->slot].qh = NULL;
-+		priv->int_slots[qh->slot].qtd = NULL;
-+	}
-+
-+	qh->slot = -1;
-+}
-+
-+/*
-+ * Retire the qtds beginning at 'qtd' and belonging all to the same urb, killing
-+ * any active transfer belonging to the urb in the process.
-+ */
-+static void dequeue_urb_from_qtd(struct usb_hcd *hcd, struct isp1760_qh *qh,
-+				 struct isp1760_qtd *qtd)
-+{
-+	struct urb *urb;
-+	int urb_was_running;
-+
-+	urb = qtd->urb;
-+	urb_was_running = 0;
-+	list_for_each_entry_from(qtd, &qh->qtd_list, qtd_list) {
-+		if (qtd->urb != urb)
-+			break;
-+
-+		if (qtd->status >= QTD_XFER_STARTED)
-+			urb_was_running = 1;
-+		if (last_qtd_of_urb(qtd, qh) &&
-+					(qtd->status >= QTD_XFER_COMPLETE))
-+			urb_was_running = 0;
-+
-+		if (qtd->status == QTD_XFER_STARTED)
-+			kill_transfer(hcd, urb, qh);
-+		qtd->status = QTD_RETIRE;
-+	}
-+}
-+
-+int isp1760_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
-+{
-+	struct isp1760_qtd *qtd;
-+	struct isp1760_qh *qh;
-+	int retval = 0;
-+
-+	retval = usb_hcd_check_unlink_urb(hcd, urb, status);
-+	if (retval)
-+		goto out;
-+
-+	qh = urb->ep->hcpriv;
-+	if (!qh) {
-+		retval = -EINVAL;
-+		goto out;
-+	}
-+
-+	list_for_each_entry(qtd, &qh->qtd_list, qtd_list)
-+		if (qtd->urb == urb) {
-+			dequeue_urb_from_qtd(hcd, qh, qtd);
-+			list_move(&qtd->qtd_list, &qh->qtd_list);
-+			break;
-+		}
-+
-+	urb->status = status;
-+	schedule_ptds(hcd);
-+
-+out:
-+	return retval;
-+}
-+
-+static void isp1760_hub_descriptor(struct isp1760_hcd *priv,
-+				   struct usb_hub_descriptor *desc)
-+{
-+	int ports;
-+	u16 temp;
-+
-+	ports = isp1760_hcd_n_ports(priv->hcd);
-+
-+	desc->bDescriptorType = USB_DT_HUB;
-+	/* priv 1.0, 2.3.9 says 20ms max */
-+	desc->bPwrOn2PwrGood = 10;
-+	desc->bHubContrCurrent = 0;
-+
-+	desc->bNbrPorts = ports;
-+	temp = 1 + (ports / 8);
-+	desc->bLength = 7 + 2 * temp;
-+
-+	/* ports removable, and usb 1.0 legacy PortPwrCtrlMask */
-+	memset(&desc->u.hs.DeviceRemovable[0], 0, temp);
-+	memset(&desc->u.hs.DeviceRemovable[temp], 0xff, temp);
-+
-+	/* per-port overcurrent reporting */
-+	temp = HUB_CHAR_INDV_PORT_OCPM;
-+	if (isp1760_hcd_ppc_is_set(priv->hcd))
-+		/* per-port power control */
-+		temp |= HUB_CHAR_INDV_PORT_LPSM;
-+	else
-+		/* no power switching */
-+		temp |= HUB_CHAR_NO_LPSM;
-+	desc->wHubCharacteristics = cpu_to_le16(temp);
-+}
-+
-+#define	PORT_WAKE_BITS	(PORT_WKOC_E|PORT_WKDISC_E|PORT_WKCONN_E)
-+
-+static void check_reset_complete(struct usb_hcd *hcd, int index)
-+{
-+	if (!(isp1760_hcd_is_set(hcd, PORT_CONNECT)))
-+		return;
-+
-+	/* if reset finished and it's still not enabled -- handoff */
-+	if (!isp1760_hcd_is_set(hcd, PORT_PE)) {
-+		printf("port %d full speed --> companion\n", index + 1);
-+
-+		isp1760_hcd_set(hcd, PORT_OWNER);
-+
-+		isp1760_hcd_clear(hcd, PORT_CSC);
-+	} else {
-+		printf("port %d high speed\n", index + 1);
-+	}
-+
-+	return;
-+}
-+
-+static int isp1760_hub_control(struct usb_hcd *hcd, struct usb_device *dev,
-+			       unsigned long pipe, void *buffer, int length,
-+			       struct devrequest *setup)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	u16 typeReq, wValue, wIndex;
-+	unsigned long flags;
-+	char *buf = buffer;
-+	void *src = NULL;
-+	int src_len = 0;
-+	int retval = 0;
-+	u32 status;
-+	int ports;
-+
-+	if (!setup)
-+		return -EINVAL;
-+
-+	ports = isp1760_hcd_n_ports(hcd);
-+
-+	typeReq = setup->request | (setup->requesttype << 8);
-+	wValue = le16_to_cpu(setup->value);
-+	wIndex = le16_to_cpu(setup->index);
-+
-+	/*
-+	 * FIXME:  support SetPortFeatures USB_PORT_FEAT_INDICATOR.
-+	 * HCS_INDICATOR may say we can change LEDs to off/amber/green.
-+	 * (track current state ourselves) ... blink for diagnostics,
-+	 * power, "this is the one", etc.  EHCI spec supports this.
-+	 */
-+
-+	switch (typeReq) {
-+	case DeviceOutRequest | USB_REQ_SET_ADDRESS:
-+		break;
-+	case DeviceOutRequest | USB_REQ_SET_CONFIGURATION:
-+		/* Nothing to do */
-+		break;
-+	case DeviceRequest | USB_REQ_GET_DESCRIPTOR:
-+		switch (wValue & 0xff00) {
-+		case USB_DT_DEVICE << 8:
-+			src = &rh_descriptor.device;
-+			src_len = 0x12;
-+			break;
-+		case USB_DT_CONFIG << 8:
-+			src = &rh_descriptor.config;
-+			src_len = 0x09;
-+			break;
-+		case USB_DT_STRING << 8:
-+			switch (wValue & 0xff) {
-+			case 0:	/* Language */
-+				src = "\4\3\19\4";
-+				src_len = 4;
-+				break;
-+			case 1:	/* Vendor String  */
-+				src = "\16\3U\0-\0B\0o\0o\0t\0";
-+				src_len = 14;
-+				break;
-+			case 2:	/* Product Name */
-+				src = "\52\3I\0S\0P\0-\0 "
-+					 "\0H\0o\0s\0t\0 "
-+					 "\0C\0o\0n\0t\0r\0o\0l\0l\0e\0r\0";
-+				src_len = 42;
-+				break;
-+			default:
-+				goto error;
-+			}
-+			break;
-+		}
-+		break;
-+	case ClearHubFeature:
-+		switch (wValue) {
-+		case C_HUB_LOCAL_POWER:
-+		case C_HUB_OVER_CURRENT:
-+			/* no hub-wide feature/status flags */
-+			break;
-+		default:
-+			goto error;
-+		}
-+		break;
-+	case ClearPortFeature:
-+		if (!wIndex || wIndex > ports)
-+			goto error;
-+		wIndex--;
-+
-+		/*
-+		 * Even if OWNER is set, so the port is owned by the
-+		 * companion controller, hub_wq needs to be able to clear
-+		 * the port-change status bits (especially
-+		 * USB_PORT_STAT_C_CONNECTION).
-+		 */
-+
-+		switch (wValue) {
-+		case USB_PORT_FEAT_ENABLE:
-+			isp1760_hcd_clear(hcd, PORT_PE);
-+			break;
-+		case USB_PORT_FEAT_C_ENABLE:
-+			/* XXX error? */
-+			break;
-+		case USB_PORT_FEAT_SUSPEND:
-+			if (isp1760_hcd_is_set(hcd, PORT_RESET))
-+				goto error;
-+
-+			if (isp1760_hcd_is_set(hcd, PORT_SUSPEND)) {
-+				if (!isp1760_hcd_is_set(hcd, PORT_PE))
-+					goto error;
-+				/* resume signaling for 20 msec */
-+				isp1760_hcd_clear(hcd, PORT_CSC);
-+				isp1760_hcd_set(hcd, PORT_RESUME);
-+
-+				priv->reset_done = get_timer(0) + 40;
-+			}
-+			break;
-+		case USB_PORT_FEAT_C_SUSPEND:
-+			/* we auto-clear this feature */
-+			break;
-+		case USB_PORT_FEAT_POWER:
-+			if (isp1760_hcd_ppc_is_set(hcd))
-+				isp1760_hcd_clear(hcd, PORT_POWER);
-+			break;
-+		case USB_PORT_FEAT_C_CONNECTION:
-+			isp1760_hcd_set(hcd, PORT_CSC);
-+			break;
-+		case USB_PORT_FEAT_C_OVER_CURRENT:
-+			/* XXX error ?*/
-+			break;
-+		case USB_PORT_FEAT_C_RESET:
-+			/* GetPortStatus clears reset */
-+			break;
-+		default:
-+			goto error;
-+		}
-+		isp1760_hcd_read(hcd, CMD_RUN);
-+		break;
-+	case GetHubDescriptor:
-+		isp1760_hub_descriptor(priv, (struct usb_hub_descriptor *) buf);
-+		break;
-+	case GetHubStatus:
-+		/* no hub-wide feature/status flags */
-+		memset(buf, 0, 4);
-+		break;
-+	case GetPortStatus:
-+		if (!wIndex || wIndex > ports)
-+			goto error;
-+		wIndex--;
-+		status = 0;
-+
-+		/* wPortChange bits */
-+		if (isp1760_hcd_is_set(hcd, PORT_CSC))
-+			status |= USB_PORT_STAT_C_CONNECTION << 16;
-+
-+		/* whoever resumes must GetPortStatus to complete it!! */
-+		if (isp1760_hcd_is_set(hcd, PORT_RESUME)) {
-+			status |= USB_PORT_STAT_C_SUSPEND << 16;
-+
-+			if (!priv->reset_done) {
-+				priv->reset_done = get_timer(0) + 20;
-+			} else if (get_timer(0) > priv->reset_done) {
-+				/* stop resume signaling */
-+				isp1760_hcd_clear(hcd, PORT_CSC);
-+
-+				retval = isp1760_hcd_clear_and_wait(hcd,
-+								    PORT_RESUME, 2000);
-+				if (retval != 0) {
-+					printf("port %d resume error %d\n",
-+					       wIndex + 1, retval);
-+					goto error;
-+				}
-+			}
-+		}
-+
-+		/* whoever resets must GetPortStatus to complete it!! */
-+		if (isp1760_hcd_is_set(hcd, PORT_RESET) &&
-+		    get_timer(0) > priv->reset_done) {
-+			status |= USB_PORT_STAT_C_RESET << 16;
-+			priv->reset_done = 0;
-+
-+			/* force reset to complete */
-+			/* REVISIT:  some hardware needs 550+ usec to clear
-+			 * this bit; seems too long to spin routinely...
-+			 */
-+			retval = isp1760_hcd_clear_and_wait(hcd, PORT_RESET,
-+							    750);
-+			if (retval != 0) {
-+				printf("port %d reset error %d\n", wIndex + 1,
-+				       retval);
-+				goto error;
-+			}
-+
-+			/* see what we found out */
-+			check_reset_complete(hcd, wIndex);
-+		}
-+		/*
-+		 * Even if OWNER is set, there's no harm letting hub_wq
-+		 * see the wPortStatus values (they should all be 0 except
-+		 * for PORT_POWER anyway).
-+		 */
-+
-+		if (isp1760_hcd_is_set(hcd, PORT_OWNER))
-+			printf("PORT_OWNER is set\n");
-+
-+		if (isp1760_hcd_is_set(hcd, PORT_CONNECT)) {
-+			status |= USB_PORT_STAT_CONNECTION;
-+
-+			/* status may be from integrated TT */
-+			status |= USB_PORT_STAT_HIGH_SPEED;
-+		}
-+		if (isp1760_hcd_is_set(hcd, PORT_PE))
-+			status |= USB_PORT_STAT_ENABLE;
-+		if (isp1760_hcd_is_set(hcd, PORT_SUSPEND) &&
-+		    isp1760_hcd_is_set(hcd, PORT_RESUME))
-+			status |= USB_PORT_STAT_SUSPEND;
-+		if (isp1760_hcd_is_set(hcd, PORT_RESET))
-+			status |= USB_PORT_STAT_RESET;
-+		if (isp1760_hcd_is_set(hcd, PORT_POWER))
-+			status |= USB_PORT_STAT_POWER;
-+
-+		put_unaligned(cpu_to_le32(status), (__le32 *) buf);
-+		break;
-+	case SetHubFeature:
-+		switch (wValue) {
-+		case C_HUB_LOCAL_POWER:
-+		case C_HUB_OVER_CURRENT:
-+			/* no hub-wide feature/status flags */
-+			break;
-+		default:
-+			goto error;
-+		}
-+		break;
-+	case SetPortFeature:
-+		wIndex &= 0xff;
-+		if (!wIndex || wIndex > ports)
-+			goto error;
-+		wIndex--;
-+
-+		if (isp1760_hcd_is_set(hcd, PORT_OWNER))
-+			break;
-+
-+		switch (wValue) {
-+		case USB_PORT_FEAT_ENABLE:
-+			isp1760_hcd_set(hcd, PORT_PE);
-+			break;
-+
-+		case USB_PORT_FEAT_SUSPEND:
-+			if (!isp1760_hcd_is_set(hcd, PORT_PE) ||
-+			    isp1760_hcd_is_set(hcd, PORT_RESET))
-+				goto error;
-+
-+			isp1760_hcd_set(hcd, PORT_SUSPEND);
-+			break;
-+		case USB_PORT_FEAT_POWER:
-+			if (isp1760_hcd_ppc_is_set(hcd))
-+				isp1760_hcd_set(hcd, PORT_POWER);
-+			break;
-+		case USB_PORT_FEAT_RESET:
-+			if (isp1760_hcd_is_set(hcd, PORT_RESUME))
-+				goto error;
-+			/* line status bits may report this as low speed,
-+			 * which can be fine if this root hub has a
-+			 * transaction translator built in.
-+			 */
-+			if ((isp1760_hcd_is_set(hcd, PORT_CONNECT) &&
-+			     !isp1760_hcd_is_set(hcd, PORT_PE)) &&
-+			    (isp1760_hcd_read(hcd, PORT_LSTATUS) == 1)) {
-+				isp1760_hcd_set(hcd, PORT_OWNER);
-+			} else {
-+				isp1760_hcd_set(hcd, PORT_RESET);
-+				isp1760_hcd_clear(hcd, PORT_PE);
-+
-+				priv->reset_done = get_timer(0) + 50;
-+			}
-+			break;
-+		default:
-+			goto error;
-+		}
-+		break;
-+
-+	default:
-+		printf("root: unknown request: 0x%0x\n", typeReq);
-+		goto error;
-+	}
-+	spin_unlock_irqrestore(&priv->lock, flags);
-+
-+	if (src_len) {
-+		length = min(src_len, length);
-+
-+		if (src != NULL && length > 0)
-+			memcpy(buffer, src, length);
-+		else
-+			printf("zero copy USB descriptor\n");
-+	}
-+
-+	dev->act_len = length;
-+	dev->status = 0;
-+
-+	return 0;
-+
-+error:
-+	/* "stall" on error */
-+	dev->act_len = 0;
-+	dev->status = USB_ST_STALLED;
-+	return -EPIPE;
-+}
-+
-+#ifndef __UBOOT__
-+static int isp1760_hub_status_data(struct usb_hcd *hcd, char *buf)
-+{
-+	u32 status = 0;
-+	int retval = 1;
-+
-+	/* init status to no-changes */
-+	buf[0] = 0;
-+
-+	if (isp1760_hcd_is_set(hcd, PORT_OWNER) &&
-+	    isp1760_hcd_is_set(hcd, PORT_CSC)) {
-+		isp1760_hcd_clear(hcd, PORT_CSC);
-+		goto done;
-+	}
-+
-+done:
-+	return status ? retval : 0;
-+}
-+
-+static void isp1760_endpoint_disable(struct usb_hcd *hcd,
-+		struct usb_host_endpoint *ep)
-+{
-+	struct isp1760_qh *qh, *qh_iter;
-+	unsigned long spinflags;
-+	int i;
-+
-+	qh = ep->hcpriv;
-+	if (!qh)
-+		return;
-+
-+	WARN_ON(!list_empty(&qh->qtd_list));
-+
-+	for (i = 0; i < QH_END; i++)
-+		list_for_each_entry(qh_iter, &priv->qh_list[i], qh_list)
-+			if (qh_iter == qh) {
-+				list_del(&qh_iter->qh_list);
-+				i = QH_END;
-+				break;
-+			}
-+	qh_free(qh);
-+	ep->hcpriv = NULL;
-+
-+	schedule_ptds(hcd);
-+}
-+
-+static int isp1760_get_frame(struct usb_hcd *hcd)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+	u32 fr;
-+
-+	fr = isp1760_hcd_read(hcd, HC_FRINDEX);
-+	return (fr >> 3) % priv->periodic_size;
-+}
-+
-+static void isp1760_stop(struct usb_hcd *hcd)
-+{
-+	struct isp1760_hcd *priv = hcd_to_priv(hcd);
-+
-+	msleep(20);
-+
-+	spin_lock_irq(&priv->lock);
-+	ehci_reset(hcd);
-+	/* Disable IRQ */
-+	isp1760_hcd_clear(hcd, HW_GLOBAL_INTR_EN);
-+	spin_unlock_irq(&priv->lock);
-+
-+	isp1760_hcd_clear(hcd, FLAG_CF);
-+}
-+
-+static void isp1760_shutdown(struct usb_hcd *hcd)
-+{
-+	isp1760_stop(hcd);
-+
-+	isp1760_hcd_clear(hcd, HW_GLOBAL_INTR_EN);
-+
-+	isp1760_hcd_clear(hcd, CMD_RUN);
-+}
-+
-+static void isp1760_clear_tt_buffer_complete(struct usb_hcd *hcd,
-+						struct usb_host_endpoint *ep)
-+{
-+	struct isp1760_qh *qh = ep->hcpriv;
-+	unsigned long spinflags;
-+
-+	if (!qh)
-+		return;
-+
-+	qh->tt_buffer_dirty = 0;
-+	schedule_ptds(hcd);
-+}
-+
-+
-+static const struct hc_driver isp1760_hc_driver = {
-+	.description		= "isp1760-hcd",
-+	.product_desc		= "NXP ISP1760 USB Host Controller",
-+	.hcd_priv_size		= sizeof(struct isp1760_hcd *),
-+	.irq			= isp1760_irq,
-+	.flags			= HCD_MEMORY | HCD_USB2,
-+	.reset			= isp1760_hc_setup,
-+	.start			= isp1760_run,
-+	.stop			= isp1760_stop,
-+	.shutdown		= isp1760_shutdown,
-+	.urb_enqueue		= isp1760_urb_enqueue,
-+	.urb_dequeue		= isp1760_urb_dequeue,
-+	.endpoint_disable	= isp1760_endpoint_disable,
-+	.get_frame_number	= isp1760_get_frame,
-+	.hub_status_data	= isp1760_hub_status_data,
-+	.hub_control		= isp1760_hub_control,
-+	.clear_tt_buffer_complete	= isp1760_clear_tt_buffer_complete,
-+};
-+#endif // __UBOOT__
-+
-+int __init isp1760_init_kmem_once(void)
-+{
-+	urb_listitem_cachep = kmem_cache_create("isp1760_urb_listitem",
-+			sizeof(struct urb_listitem), 0, SLAB_TEMPORARY |
-+			SLAB_MEM_SPREAD, NULL);
-+
-+	if (!urb_listitem_cachep)
-+		return -ENOMEM;
-+
-+	qtd_cachep = kmem_cache_create("isp1760_qtd",
-+			sizeof(struct isp1760_qtd), 0, SLAB_TEMPORARY |
-+			SLAB_MEM_SPREAD, NULL);
-+
-+	if (!qtd_cachep)
-+		return -ENOMEM;
-+
-+	qh_cachep = kmem_cache_create("isp1760_qh", sizeof(struct isp1760_qh),
-+			0, SLAB_TEMPORARY | SLAB_MEM_SPREAD, NULL);
-+
-+	if (!qh_cachep) {
-+		kmem_cache_destroy(qtd_cachep);
-+		return -ENOMEM;
-+	}
-+
-+	return 0;
-+}
-+
-+void isp1760_deinit_kmem_cache(void)
-+{
-+	kmem_cache_destroy(qtd_cachep);
-+	kmem_cache_destroy(qh_cachep);
-+	kmem_cache_destroy(urb_listitem_cachep);
-+}
-+
-+int isp1760_hcd_lowlevel_init(struct isp1760_hcd *priv)
-+{
-+	int ret;
-+
-+	ret = isp1760_hc_setup(priv->hcd);
-+	if (ret < 0)
-+		return ret;
-+
-+	ret = isp1760_run(priv->hcd);
-+	if (ret < 0)
-+		return ret;
-+
-+	return 0;
-+}
-+
-+static const struct usb_urb_ops isp1760_urb_ops = {
-+	.urb_enqueue = isp1760_urb_enqueue,
-+	.urb_dequeue = isp1760_urb_dequeue,
-+	.hub_control = isp1760_hub_control,
-+	.isr = isp1760_irq,
-+};
-+
-+int isp1760_hcd_register(struct isp1760_hcd *priv, struct resource *mem,
-+			 int irq, unsigned long irqflags,
-+			 struct udevice *dev)
-+{
-+	const struct isp1760_memory_layout *mem_layout = priv->memory_layout;
-+	struct isp1760_host_data *host = dev_get_priv(dev);
-+	struct usb_hcd *hcd = &host->hcd;
-+	int ret;
-+
-+	priv->hcd = hcd;
-+
-+	hcd->hcd_priv = priv;
-+
-+	priv->hcd = hcd;
-+
-+	hcd->urb_ops = &isp1760_urb_ops;
-+
-+	priv->atl_slots = kcalloc(mem_layout->slot_num,
-+				  sizeof(struct isp1760_slotinfo), GFP_KERNEL);
-+	if (!priv->atl_slots)
-+		return -ENOMEM;
-+
-+	priv->int_slots = kcalloc(mem_layout->slot_num,
-+				  sizeof(struct isp1760_slotinfo), GFP_KERNEL);
-+	if (!priv->int_slots) {
-+		ret = -ENOMEM;
-+		goto free_atl_slots;
-+	}
-+
-+	host->host_speed = USB_SPEED_HIGH;
-+
-+	init_memory(priv);
-+
-+	return 0;
-+
-+free_atl_slots:
-+	kfree(priv->atl_slots);
-+
-+	return ret;
-+}
-+
-+void isp1760_hcd_unregister(struct isp1760_hcd *priv)
-+{
-+	struct isp1760_qh *qh, *qh_next;
-+	int i;
-+
-+	for (i = 0; i < QH_END; i++)
-+		list_for_each_entry_safe(qh, qh_next, &priv->qh_list[i],
-+					 qh_list) {
-+			qtd_list_free(&qh->qtd_list);
-+			list_del(&qh->qh_list);
-+			qh_free(qh);
-+		}
-+
-+	kfree(priv->atl_slots);
-+	kfree(priv->int_slots);
-+}
-diff --git a/drivers/usb/isp1760/isp1760-hcd.h b/drivers/usb/isp1760/isp1760-hcd.h
-new file mode 100644
-index 0000000000..00f5ca8c1f
---- /dev/null
-+++ b/drivers/usb/isp1760/isp1760-hcd.h
-@@ -0,0 +1,82 @@
-+/* SPDX-License-Identifier: GPL-2.0 */
-+#ifndef _ISP1760_HCD_H_
-+#define _ISP1760_HCD_H_
-+
-+#include <regmap.h>
-+
-+#include "isp1760-regs.h"
-+
-+struct isp1760_qh;
-+struct isp1760_qtd;
-+struct resource;
-+struct usb_hcd;
-+
-+struct isp1760_slotinfo {
-+	struct isp1760_qh *qh;
-+	struct isp1760_qtd *qtd;
-+	unsigned long timestamp;
-+};
-+
-+/* chip memory management */
-+#define ISP176x_BLOCK_MAX (32 + 20 + 4)
-+#define ISP176x_BLOCK_NUM 3
-+
-+struct isp1760_memory_layout {
-+	unsigned int blocks[ISP176x_BLOCK_NUM];
-+	unsigned int blocks_size[ISP176x_BLOCK_NUM];
-+
-+	unsigned int slot_num;
-+	unsigned int payload_blocks;
-+	unsigned int payload_area_size;
-+};
-+
-+struct isp1760_memory_chunk {
-+	unsigned int start;
-+	unsigned int size;
-+	unsigned int free;
-+};
-+
-+enum isp1760_queue_head_types {
-+	QH_CONTROL,
-+	QH_BULK,
-+	QH_INTERRUPT,
-+	QH_END
-+};
-+
-+struct isp1760_hcd {
-+	struct usb_hcd		*hcd;
-+	struct udevice		*dev;
-+
-+	void __iomem		*base;
-+
-+	struct regmap		*regs;
-+	struct regmap_field	*fields[HC_FIELD_MAX];
-+
-+	bool			is_isp1763;
-+	const struct isp1760_memory_layout	*memory_layout;
-+
-+	spinlock_t		lock;
-+	struct isp1760_slotinfo	*atl_slots;
-+	int			atl_done_map;
-+	struct isp1760_slotinfo	*int_slots;
-+	int			int_done_map;
-+	struct isp1760_memory_chunk memory_pool[ISP176x_BLOCK_MAX];
-+	struct list_head	qh_list[QH_END];
-+
-+	/* periodic schedule support */
-+#define	DEFAULT_I_TDPS		1024
-+	unsigned		periodic_size;
-+	unsigned		i_thresh;
-+	unsigned long		reset_done;
-+	unsigned long		next_statechange;
-+};
-+
-+int isp1760_hcd_register(struct isp1760_hcd *priv, struct resource *mem,
-+			 int irq, unsigned long irqflags, struct udevice *dev);
-+void isp1760_hcd_unregister(struct isp1760_hcd *priv);
-+int isp1760_hcd_lowlevel_init(struct isp1760_hcd *priv);
-+
-+int isp1760_init_kmem_once(void);
-+void isp1760_deinit_kmem_cache(void);
-+
-+#endif /* _ISP1760_HCD_H_ */
-diff --git a/drivers/usb/isp1760/isp1760-if.c b/drivers/usb/isp1760/isp1760-if.c
-new file mode 100644
-index 0000000000..c610da6b23
---- /dev/null
-+++ b/drivers/usb/isp1760/isp1760-if.c
-@@ -0,0 +1,127 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * Copyright 2021 Linaro, Rui Miguel Silva <rui.silva@linaro.org>
-+ *
-+ * based on original code from:
-+ * (c) 2007 Sebastian Siewior <bigeasy@linutronix.de>
-+ */
-+
-+#include <common.h>
-+#include <dm.h>
-+#include <dm/device-internal.h>
-+#include <dm/device_compat.h>
-+#include <dm/devres.h>
-+#include <dm/lists.h>
-+#include <linux/bug.h>
-+#include <linux/io.h>
-+#include <linux/kernel.h>
-+#include <linux/usb/otg.h>
-+#include <log.h>
-+#include <usb.h>
-+
-+#include "isp1760-core.h"
-+#include "isp1760-regs.h"
-+#include "isp1760-uboot.h"
-+
-+
-+static int isp1760_of_to_plat(struct udevice *dev)
-+{
-+	struct isp1760_device *isp = dev_get_plat(dev);
-+	unsigned int devflags = 0;
-+	u32 bus_width = 0;
-+	ofnode dp;
-+
-+
-+	if (!dev_has_ofnode(dev)) {
-+		/* select isp1763 as the default device */
-+		devflags = ISP1760_FLAG_ISP1763 | ISP1760_FLAG_BUS_WIDTH_16;
-+		pr_err("isp1760: no platform data\n");
-+		goto isp_setup;
-+	}
-+
-+	dp = dev_ofnode(dev);
-+
-+	if (ofnode_device_is_compatible(dp, "nxp,usb-isp1761"))
-+		devflags |= ISP1760_FLAG_ISP1761;
-+
-+	if (ofnode_device_is_compatible(dp, "nxp,usb-isp1763"))
-+		devflags |= ISP1760_FLAG_ISP1763;
-+
-+	/*
-+	* Some systems wire up only 8 of 16 data lines or
-+	* 16 of the 32 data lines
-+	*/
-+	bus_width = ofnode_read_u32_default(dp, "bus-width", 16);
-+	if (bus_width == 16)
-+		devflags |= ISP1760_FLAG_BUS_WIDTH_16;
-+	else if (bus_width == 8)
-+		devflags |= ISP1760_FLAG_BUS_WIDTH_8;
-+
-+	if (usb_get_dr_mode(dev_ofnode(dev)) == USB_DR_MODE_PERIPHERAL)
-+		devflags |= ISP1760_FLAG_PERIPHERAL_EN;
-+
-+	if (ofnode_read_bool(dp, "analog-oc"))
-+		devflags |= ISP1760_FLAG_ANALOG_OC;
-+
-+	if (ofnode_read_bool(dp, "dack-polarity"))
-+		devflags |= ISP1760_FLAG_DACK_POL_HIGH;
-+
-+	if (ofnode_read_bool(dp, "dreq-polarity"))
-+		devflags |= ISP1760_FLAG_DREQ_POL_HIGH;
-+
-+isp_setup:
-+	isp->devflags = devflags;
-+	isp->dev = dev;
-+
-+	return 0;
-+}
-+
-+static int isp1760_plat_probe(struct udevice *dev)
-+{
-+	struct isp1760_device *isp = dev_get_plat(dev);
-+	struct resource mem_res;
-+	struct resource irq_res;
-+	int ret;
-+
-+	dev_read_resource(dev, 0, &mem_res);
-+	dev_read_resource(dev, 1, &irq_res);
-+
-+	isp1760_init_kmem_once();
-+
-+	ret = isp1760_register(isp, &mem_res, irq_res.start, irq_res.flags);
-+	if (ret < 0) {
-+		isp1760_deinit_kmem_cache();
-+		return ret;
-+	}
-+
-+	return 0;
-+}
-+
-+static int isp1760_plat_remove(struct udevice *dev)
-+{
-+	struct isp1760_device *isp = dev_get_plat(dev);
-+
-+	isp1760_deinit_kmem_cache();
-+	isp1760_unregister(isp);
-+
-+	return 0;
-+}
-+
-+static const struct udevice_id isp1760_ids[] = {
-+	{ .compatible = "nxp,usb-isp1760", },
-+	{ .compatible = "nxp,usb-isp1761", },
-+	{ .compatible = "nxp,usb-isp1763", },
-+	{ },
-+};
-+
-+U_BOOT_DRIVER(isp1760) = {
-+	.name		= "isp1760",
-+	.id		= UCLASS_USB,
-+	.of_match	= isp1760_ids,
-+	.of_to_plat	= isp1760_of_to_plat,
-+	.ops		= &isp1760_usb_ops,
-+	.probe		= isp1760_plat_probe,
-+	.remove		= isp1760_plat_remove,
-+	.plat_auto	= sizeof(struct isp1760_device),
-+	.priv_auto	= sizeof(struct isp1760_host_data),
-+};
-diff --git a/drivers/usb/isp1760/isp1760-regs.h b/drivers/usb/isp1760/isp1760-regs.h
-new file mode 100644
-index 0000000000..94ea60c20b
---- /dev/null
-+++ b/drivers/usb/isp1760/isp1760-regs.h
-@@ -0,0 +1,292 @@
-+/* SPDX-License-Identifier: GPL-2.0 */
-+/*
-+ * Driver for the NXP ISP1760 chip
-+ *
-+ * Copyright 2021 Linaro, Rui Miguel Silva
-+ * Copyright 2014 Laurent Pinchart
-+ * Copyright 2007 Sebastian Siewior
-+ *
-+ * Contacts:
-+ *     Sebastian Siewior <bigeasy@linutronix.de>
-+ *     Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-+ *     Rui Miguel Silva <rui.silva@linaro.org>
-+ */
-+
-+#ifndef _ISP176x_REGS_H_
-+#define _ISP176x_REGS_H_
-+
-+/* -----------------------------------------------------------------------------
-+ * Host Controller
-+ */
-+
-+/* ISP1760/31 */
-+/* EHCI capability registers */
-+#define ISP176x_HC_VERSION		0x002
-+#define ISP176x_HC_HCSPARAMS		0x004
-+#define ISP176x_HC_HCCPARAMS		0x008
-+
-+/* EHCI operational registers */
-+#define ISP176x_HC_USBCMD		0x020
-+#define ISP176x_HC_USBSTS		0x024
-+#define ISP176x_HC_FRINDEX		0x02c
-+
-+#define ISP176x_HC_CONFIGFLAG		0x060
-+#define ISP176x_HC_PORTSC1		0x064
-+
-+#define ISP176x_HC_ISO_PTD_DONEMAP	0x130
-+#define ISP176x_HC_ISO_PTD_SKIPMAP	0x134
-+#define ISP176x_HC_ISO_PTD_LASTPTD	0x138
-+#define ISP176x_HC_INT_PTD_DONEMAP	0x140
-+#define ISP176x_HC_INT_PTD_SKIPMAP	0x144
-+#define ISP176x_HC_INT_PTD_LASTPTD	0x148
-+#define ISP176x_HC_ATL_PTD_DONEMAP	0x150
-+#define ISP176x_HC_ATL_PTD_SKIPMAP	0x154
-+#define ISP176x_HC_ATL_PTD_LASTPTD	0x158
-+
-+/* Configuration Register */
-+#define ISP176x_HC_HW_MODE_CTRL		0x300
-+#define ISP176x_HC_CHIP_ID		0x304
-+#define ISP176x_HC_SCRATCH		0x308
-+#define ISP176x_HC_RESET		0x30c
-+#define ISP176x_HC_BUFFER_STATUS	0x334
-+#define ISP176x_HC_MEMORY		0x33c
-+
-+/* Interrupt Register */
-+#define ISP176x_HC_INTERRUPT		0x310
-+#define ISP176x_HC_INTERRUPT_ENABLE	0x314
-+#define ISP176x_HC_ISO_IRQ_MASK_OR	0x318
-+#define ISP176x_HC_INT_IRQ_MASK_OR	0x31c
-+#define ISP176x_HC_ATL_IRQ_MASK_OR	0x320
-+#define ISP176x_HC_ISO_IRQ_MASK_AND	0x324
-+#define ISP176x_HC_INT_IRQ_MASK_AND	0x328
-+#define ISP176x_HC_ATL_IRQ_MASK_AND	0x32c
-+
-+#define ISP176x_HC_OTG_CTRL_SET		0x374
-+#define ISP176x_HC_OTG_CTRL_CLEAR	0x376
-+
-+enum isp176x_host_controller_fields {
-+	/* HC_PORTSC1 */
-+	PORT_OWNER, PORT_POWER, PORT_LSTATUS, PORT_RESET, PORT_SUSPEND,
-+	PORT_RESUME, PORT_PE, PORT_CSC, PORT_CONNECT,
-+	/* HC_HCSPARAMS */
-+	HCS_PPC, HCS_N_PORTS,
-+	/* HC_HCCPARAMS */
-+	HCC_ISOC_CACHE, HCC_ISOC_THRES,
-+	/* HC_USBCMD */
-+	CMD_LRESET, CMD_RESET, CMD_RUN,
-+	/* HC_USBSTS */
-+	STS_PCD,
-+	/* HC_FRINDEX */
-+	HC_FRINDEX,
-+	/* HC_CONFIGFLAG */
-+	FLAG_CF,
-+	/* ISO/INT/ATL PTD */
-+	HC_ISO_PTD_DONEMAP, HC_ISO_PTD_SKIPMAP, HC_ISO_PTD_LASTPTD,
-+	HC_INT_PTD_DONEMAP, HC_INT_PTD_SKIPMAP, HC_INT_PTD_LASTPTD,
-+	HC_ATL_PTD_DONEMAP, HC_ATL_PTD_SKIPMAP, HC_ATL_PTD_LASTPTD,
-+	/* HC_HW_MODE_CTRL */
-+	ALL_ATX_RESET, HW_ANA_DIGI_OC, HW_DEV_DMA, HW_COMN_IRQ, HW_COMN_DMA,
-+	HW_DATA_BUS_WIDTH, HW_DACK_POL_HIGH, HW_DREQ_POL_HIGH, HW_INTR_HIGH_ACT,
-+	HW_INTF_LOCK, HW_INTR_EDGE_TRIG, HW_GLOBAL_INTR_EN,
-+	/* HC_CHIP_ID */
-+	HC_CHIP_ID_HIGH, HC_CHIP_ID_LOW, HC_CHIP_REV,
-+	/* HC_SCRATCH */
-+	HC_SCRATCH,
-+	/* HC_RESET */
-+	SW_RESET_RESET_ATX, SW_RESET_RESET_HC, SW_RESET_RESET_ALL,
-+	/* HC_BUFFER_STATUS */
-+	ISO_BUF_FILL, INT_BUF_FILL, ATL_BUF_FILL,
-+	/* HC_MEMORY */
-+	MEM_BANK_SEL, MEM_START_ADDR,
-+	/* HC_DATA */
-+	HC_DATA,
-+	/* HC_INTERRUPT */
-+	HC_INTERRUPT,
-+	/* HC_INTERRUPT_ENABLE */
-+	HC_INT_IRQ_ENABLE, HC_ATL_IRQ_ENABLE,
-+	/* INTERRUPT MASKS */
-+	HC_ISO_IRQ_MASK_OR, HC_INT_IRQ_MASK_OR, HC_ATL_IRQ_MASK_OR,
-+	HC_ISO_IRQ_MASK_AND, HC_INT_IRQ_MASK_AND, HC_ATL_IRQ_MASK_AND,
-+	/* HW_OTG_CTRL_SET */
-+	HW_OTG_DISABLE, HW_SW_SEL_HC_DC, HW_VBUS_DRV, HW_SEL_CP_EXT,
-+	HW_DM_PULLDOWN, HW_DP_PULLDOWN, HW_DP_PULLUP, HW_HC_2_DIS,
-+	/* HW_OTG_CTRL_CLR */
-+	HW_OTG_DISABLE_CLEAR, HW_SW_SEL_HC_DC_CLEAR, HW_VBUS_DRV_CLEAR,
-+	HW_SEL_CP_EXT_CLEAR, HW_DM_PULLDOWN_CLEAR, HW_DP_PULLDOWN_CLEAR,
-+	HW_DP_PULLUP_CLEAR, HW_HC_2_DIS_CLEAR,
-+	/* Last element */
-+	HC_FIELD_MAX,
-+};
-+
-+/* ISP1763 */
-+/* EHCI operational registers */
-+#define ISP1763_HC_USBCMD		0x8c
-+#define ISP1763_HC_USBSTS		0x90
-+#define ISP1763_HC_FRINDEX		0x98
-+
-+#define ISP1763_HC_CONFIGFLAG		0x9c
-+#define ISP1763_HC_PORTSC1		0xa0
-+
-+#define ISP1763_HC_ISO_PTD_DONEMAP	0xa4
-+#define ISP1763_HC_ISO_PTD_SKIPMAP	0xa6
-+#define ISP1763_HC_ISO_PTD_LASTPTD	0xa8
-+#define ISP1763_HC_INT_PTD_DONEMAP	0xaa
-+#define ISP1763_HC_INT_PTD_SKIPMAP	0xac
-+#define ISP1763_HC_INT_PTD_LASTPTD	0xae
-+#define ISP1763_HC_ATL_PTD_DONEMAP	0xb0
-+#define ISP1763_HC_ATL_PTD_SKIPMAP	0xb2
-+#define ISP1763_HC_ATL_PTD_LASTPTD	0xb4
-+
-+/* Configuration Register */
-+#define ISP1763_HC_HW_MODE_CTRL		0xb6
-+#define ISP1763_HC_CHIP_REV		0x70
-+#define ISP1763_HC_CHIP_ID		0x72
-+#define ISP1763_HC_SCRATCH		0x78
-+#define ISP1763_HC_RESET		0xb8
-+#define ISP1763_HC_BUFFER_STATUS	0xba
-+#define ISP1763_HC_MEMORY		0xc4
-+#define ISP1763_HC_DATA			0xc6
-+
-+/* Interrupt Register */
-+#define ISP1763_HC_INTERRUPT		0xd4
-+#define ISP1763_HC_INTERRUPT_ENABLE	0xd6
-+#define ISP1763_HC_ISO_IRQ_MASK_OR	0xd8
-+#define ISP1763_HC_INT_IRQ_MASK_OR	0xda
-+#define ISP1763_HC_ATL_IRQ_MASK_OR	0xdc
-+#define ISP1763_HC_ISO_IRQ_MASK_AND	0xde
-+#define ISP1763_HC_INT_IRQ_MASK_AND	0xe0
-+#define ISP1763_HC_ATL_IRQ_MASK_AND	0xe2
-+
-+#define ISP1763_HC_OTG_CTRL_SET		0xe4
-+#define ISP1763_HC_OTG_CTRL_CLEAR	0xe6
-+
-+/* -----------------------------------------------------------------------------
-+ * Peripheral Controller
-+ */
-+
-+#define DC_IEPTX(n)			(1 << (11 + 2 * (n)))
-+#define DC_IEPRX(n)			(1 << (10 + 2 * (n)))
-+#define DC_IEPRXTX(n)			(3 << (10 + 2 * (n)))
-+
-+#define ISP176x_DC_CDBGMOD_ACK		BIT(6)
-+#define ISP176x_DC_DDBGMODIN_ACK	BIT(4)
-+#define ISP176x_DC_DDBGMODOUT_ACK	BIT(2)
-+
-+#define ISP176x_DC_IEP0SETUP		BIT(8)
-+#define ISP176x_DC_IEVBUS		BIT(7)
-+#define ISP176x_DC_IEHS_STA		BIT(5)
-+#define ISP176x_DC_IERESM		BIT(4)
-+#define ISP176x_DC_IESUSP		BIT(3)
-+#define ISP176x_DC_IEBRST		BIT(0)
-+
-+#define ISP176x_DC_ENDPTYP_ISOC		0x01
-+#define ISP176x_DC_ENDPTYP_BULK		0x02
-+#define ISP176x_DC_ENDPTYP_INTERRUPT	0x03
-+
-+/* Initialization Registers */
-+#define ISP176x_DC_ADDRESS		0x0200
-+#define ISP176x_DC_MODE			0x020c
-+#define ISP176x_DC_INTCONF		0x0210
-+#define ISP176x_DC_DEBUG		0x0212
-+#define ISP176x_DC_INTENABLE		0x0214
-+
-+/* Data Flow Registers */
-+#define ISP176x_DC_EPMAXPKTSZ		0x0204
-+#define ISP176x_DC_EPTYPE		0x0208
-+
-+#define ISP176x_DC_BUFLEN		0x021c
-+#define ISP176x_DC_BUFSTAT		0x021e
-+#define ISP176x_DC_DATAPORT		0x0220
-+
-+#define ISP176x_DC_CTRLFUNC		0x0228
-+#define ISP176x_DC_EPINDEX		0x022c
-+
-+/* DMA Registers */
-+#define ISP176x_DC_DMACMD		0x0230
-+#define ISP176x_DC_DMATXCOUNT		0x0234
-+#define ISP176x_DC_DMACONF		0x0238
-+#define ISP176x_DC_DMAHW		0x023c
-+#define ISP176x_DC_DMAINTREASON		0x0250
-+#define ISP176x_DC_DMAINTEN		0x0254
-+#define ISP176x_DC_DMAEP		0x0258
-+#define ISP176x_DC_DMABURSTCOUNT	0x0264
-+
-+/* General Registers */
-+#define ISP176x_DC_INTERRUPT		0x0218
-+#define ISP176x_DC_CHIPID		0x0270
-+#define ISP176x_DC_FRAMENUM		0x0274
-+#define ISP176x_DC_SCRATCH		0x0278
-+#define ISP176x_DC_UNLOCKDEV		0x027c
-+#define ISP176x_DC_INTPULSEWIDTH	0x0280
-+#define ISP176x_DC_TESTMODE		0x0284
-+
-+enum isp176x_device_controller_fields {
-+	/* DC_ADDRESS */
-+	DC_DEVEN, DC_DEVADDR,
-+	/* DC_MODE */
-+	DC_VBUSSTAT, DC_SFRESET, DC_GLINTENA,
-+	/* DC_INTCONF */
-+	DC_CDBGMOD_ACK, DC_DDBGMODIN_ACK, DC_DDBGMODOUT_ACK, DC_INTPOL,
-+	/* DC_INTENABLE */
-+	DC_IEPRXTX_7, DC_IEPRXTX_6, DC_IEPRXTX_5, DC_IEPRXTX_4, DC_IEPRXTX_3,
-+	DC_IEPRXTX_2, DC_IEPRXTX_1, DC_IEPRXTX_0,
-+	DC_IEP0SETUP, DC_IEVBUS, DC_IEHS_STA, DC_IERESM, DC_IESUSP, DC_IEBRST,
-+	/* DC_EPINDEX */
-+	DC_EP0SETUP, DC_ENDPIDX, DC_EPDIR,
-+	/* DC_CTRLFUNC */
-+	DC_CLBUF, DC_VENDP, DC_DSEN, DC_STATUS, DC_STALL,
-+	/* DC_BUFLEN */
-+	DC_BUFLEN,
-+	/* DC_EPMAXPKTSZ */
-+	DC_FFOSZ,
-+	/* DC_EPTYPE */
-+	DC_EPENABLE, DC_ENDPTYP,
-+	/* DC_FRAMENUM */
-+	DC_FRAMENUM, DC_UFRAMENUM,
-+	/* DC_CHIP_ID */
-+	DC_CHIP_ID_HIGH, DC_CHIP_ID_LOW,
-+	/* DC_SCRATCH */
-+	DC_SCRATCH,
-+	/* Last element */
-+	DC_FIELD_MAX,
-+};
-+
-+/* ISP1763 */
-+/* Initialization Registers */
-+#define ISP1763_DC_ADDRESS		0x00
-+#define ISP1763_DC_MODE			0x0c
-+#define ISP1763_DC_INTCONF		0x10
-+#define ISP1763_DC_INTENABLE		0x14
-+
-+/* Data Flow Registers */
-+#define ISP1763_DC_EPMAXPKTSZ		0x04
-+#define ISP1763_DC_EPTYPE		0x08
-+
-+#define ISP1763_DC_BUFLEN		0x1c
-+#define ISP1763_DC_BUFSTAT		0x1e
-+#define ISP1763_DC_DATAPORT		0x20
-+
-+#define ISP1763_DC_CTRLFUNC		0x28
-+#define ISP1763_DC_EPINDEX		0x2c
-+
-+/* DMA Registers */
-+#define ISP1763_DC_DMACMD		0x30
-+#define ISP1763_DC_DMATXCOUNT		0x34
-+#define ISP1763_DC_DMACONF		0x38
-+#define ISP1763_DC_DMAHW		0x3c
-+#define ISP1763_DC_DMAINTREASON		0x50
-+#define ISP1763_DC_DMAINTEN		0x54
-+#define ISP1763_DC_DMAEP		0x58
-+#define ISP1763_DC_DMABURSTCOUNT	0x64
-+
-+/* General Registers */
-+#define ISP1763_DC_INTERRUPT		0x18
-+#define ISP1763_DC_CHIPID_LOW		0x70
-+#define ISP1763_DC_CHIPID_HIGH		0x72
-+#define ISP1763_DC_FRAMENUM		0x74
-+#define ISP1763_DC_SCRATCH		0x78
-+#define ISP1763_DC_UNLOCKDEV		0x7c
-+#define ISP1763_DC_INTPULSEWIDTH	0x80
-+#define ISP1763_DC_TESTMODE		0x84
-+
-+#endif
-diff --git a/drivers/usb/isp1760/isp1760-uboot.c b/drivers/usb/isp1760/isp1760-uboot.c
-new file mode 100644
-index 0000000000..7635210fe2
---- /dev/null
-+++ b/drivers/usb/isp1760/isp1760-uboot.c
-@@ -0,0 +1,76 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * Driver for the NXP ISP1760 chip
-+ *
-+ * Copyright 2021 Linaro, Rui Miguel Silva <rui.silva@linaro.org>
-+ *
-+ */
-+
-+#include <common.h>
-+#include <dm.h>
-+#include <dm/device-internal.h>
-+#include <dm/device_compat.h>
-+#include <dm/devres.h>
-+#include <dm/lists.h>
-+#include <linux/bug.h>
-+#include <linux/io.h>
-+#include <linux/kernel.h>
-+#include <linux/usb/otg.h>
-+#include <linux/usb/usb_urb_compat.h>
-+#include <log.h>
-+#include <usb.h>
-+
-+#include "isp1760-core.h"
-+#include "isp1760-hcd.h"
-+#include "isp1760-regs.h"
-+#include "isp1760-uboot.h"
-+
-+static int isp1760_msg_submit_control(struct udevice *dev,
-+				      struct usb_device *udev,
-+				      unsigned long pipe, void *buffer,
-+				      int length, struct devrequest *setup)
-+{
-+	struct isp1760_host_data *host = dev_get_priv(dev);
-+
-+	return usb_urb_submit_control(&host->hcd, &host->urb, &host->hep, udev,
-+				      pipe, buffer, length, setup, 0,
-+				      host->host_speed);
-+}
-+
-+static int isp1760_msg_submit_bulk(struct udevice *dev, struct usb_device *udev,
-+				   unsigned long pipe, void *buffer, int length)
-+{
-+	struct isp1760_host_data *host = dev_get_priv(dev);
-+
-+	return usb_urb_submit_bulk(&host->hcd, &host->urb, &host->hep, udev,
-+				   pipe, buffer, length);
-+}
-+
-+static int isp1760_msg_submit_irq(struct udevice *dev, struct usb_device *udev,
-+				  unsigned long pipe, void *buffer, int length,
-+				  int interval, bool nonblock)
-+{
-+	struct isp1760_host_data *host = dev_get_priv(dev);
-+
-+	return usb_urb_submit_irq(&host->hcd, &host->urb, &host->hep, udev,
-+				  pipe, buffer, length, interval);
-+}
-+
-+static int isp1760_get_max_xfer_size(struct udevice *dev, size_t *size)
-+{
-+	struct isp1760_host_data *host = dev_get_priv(dev);
-+	struct isp1760_hcd *priv = host->hcd.hcd_priv;
-+	const struct isp1760_memory_layout *mem = priv->memory_layout;
-+
-+	*size = mem->blocks_size[ISP176x_BLOCK_NUM - 1];
-+
-+	return 0;
-+}
-+
-+
-+struct dm_usb_ops isp1760_usb_ops = {
-+	.control		= isp1760_msg_submit_control,
-+	.bulk			= isp1760_msg_submit_bulk,
-+	.interrupt		= isp1760_msg_submit_irq,
-+	.get_max_xfer_size	= isp1760_get_max_xfer_size,
-+};
-diff --git a/drivers/usb/isp1760/isp1760-uboot.h b/drivers/usb/isp1760/isp1760-uboot.h
-new file mode 100644
-index 0000000000..2486de6f9e
---- /dev/null
-+++ b/drivers/usb/isp1760/isp1760-uboot.h
-@@ -0,0 +1,27 @@
-+// SPDX-License-Identifier: GPL-2.0
-+/*
-+ * Driver for the NXP ISP1760 chip
-+ *
-+ * Copyright 2021 Linaro, Rui Miguel Silva <rui.silva@linaro.org>
-+ *
-+ */
-+
-+#ifndef __ISP1760_UBOOT_H__
-+#define __ISP1760_UBOOT_H__
-+
-+#include <linux/usb/usb_urb_compat.h>
-+#include <usb.h>
-+
-+#include "isp1760-core.h"
-+
-+struct isp1760_host_data {
-+	struct isp1760_hcd *priv;
-+	struct usb_hcd hcd;
-+	enum usb_device_speed host_speed;
-+	struct usb_host_endpoint hep;
-+	struct urb urb;
-+};
-+
-+extern struct dm_usb_ops isp1760_usb_ops;
-+
-+#endif
--- 
-2.17.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0010-arm_ffa-introduce-armffa-command.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0005-arm_ffa-introduce-armffa-command.patch
similarity index 83%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0010-arm_ffa-introduce-armffa-command.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0005-arm_ffa-introduce-armffa-command.patch
index f52f88d..44afdd5 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0010-arm_ffa-introduce-armffa-command.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0005-arm_ffa-introduce-armffa-command.patch
@@ -1,20 +1,35 @@
-From a09ed2542f4d991fef61bd51f87d373f44ad1ff3 Mon Sep 17 00:00:00 2001
+From e9ec690a3f0d34631729a17c1734d66111e768e1 Mon Sep 17 00:00:00 2001
 From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
 Date: Mon, 6 Jun 2022 12:46:38 +0100
-Subject: [PATCH 10/26] arm_ffa: introduce armffa command
+Subject: [PATCH 05/25] arm_ffa: introduce armffa command
 
 Provide armffa command showcasing the use of the FF-A driver
 
 The armffa command allows to query secure partitions data from
-the secure world and exchanging messages with the partitions.
+the secure world and exchanging messages with the partitions
+using 64-bit FF-A direct messaging.
 
 Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20220926101723.9965-1-abdellatif.elkhlifi@arm.com/]
----
+Cc: Tom Rini <trini@konsulko.com>
+Cc: Simon Glass <sjg@chromium.org>
+Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
+Cc: Jens Wiklander <jens.wiklander@linaro.org>
+Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20221122131751.22747-1-abdellatif.elkhlifi@arm.com/]
 
 Changelog:
 ===============
 
+v8:
+
+* update partition_info_get() second argument to be an SP count
+* pass NULL device pointer to the FF-A bus discovery and operations
+
+v7:
+
+* adapt do_ffa_dev_list() following the recent update on
+  uclass_first_device/uclass_next_device functions (they return void now)
+* set armffa command to use 64-bit direct messaging
+
 v4:
 
 * remove pattern data in do_ffa_msg_send_direct_req
@@ -32,32 +47,32 @@
 v1:
 
 * introduce armffa command
-
+---
  MAINTAINERS                      |   1 +
  cmd/Kconfig                      |  10 ++
  cmd/Makefile                     |   2 +
- cmd/armffa.c                     | 242 +++++++++++++++++++++++++++++++
+ cmd/armffa.c                     | 237 +++++++++++++++++++++++++++++++
  drivers/firmware/arm-ffa/Kconfig |   1 +
- 5 files changed, 256 insertions(+)
+ 5 files changed, 251 insertions(+)
  create mode 100644 cmd/armffa.c
 
 diff --git a/MAINTAINERS b/MAINTAINERS
-index e760b4ca3a..9f0a1b7387 100644
+index 734fcb10c4..d50bdddea8 100644
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
-@@ -247,6 +247,7 @@ F:	include/configs/turris_*.h
+@@ -251,6 +251,7 @@ F:	configs/cortina_presidio-asic-pnand_defconfig
  ARM FF-A
  M:	Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
  S:	Maintained
 +F:	cmd/armffa.c
- F:	doc/README.ffa.drv
+ F:	doc/arch/arm64.ffa.rst
  F:	drivers/firmware/arm-ffa/
  F:	include/arm_ffa.h
 diff --git a/cmd/Kconfig b/cmd/Kconfig
-index ba2f321ae9..090e668125 100644
+index 0e0be94f41..013d4c3da7 100644
 --- a/cmd/Kconfig
 +++ b/cmd/Kconfig
-@@ -873,6 +873,16 @@ endmenu
+@@ -912,6 +912,16 @@ endmenu
  
  menu "Device access commands"
  
@@ -75,7 +90,7 @@
  	#depends on FLASH_CFI_DRIVER
  	bool "armflash"
 diff --git a/cmd/Makefile b/cmd/Makefile
-index 5e43a1e022..e40f52f1e4 100644
+index 6e87522b62..979c6d59df 100644
 --- a/cmd/Makefile
 +++ b/cmd/Makefile
 @@ -12,6 +12,8 @@ obj-y += panic.o
@@ -89,10 +104,10 @@
  obj-$(CONFIG_CMD_AES) += aes.o
 diff --git a/cmd/armffa.c b/cmd/armffa.c
 new file mode 100644
-index 0000000000..9b56e8a830
+index 0000000000..d2e8687bfb
 --- /dev/null
 +++ b/cmd/armffa.c
-@@ -0,0 +1,242 @@
+@@ -0,0 +1,237 @@
 +// SPDX-License-Identifier: GPL-2.0+
 +/*
 + * (C) Copyright 2022 ARM Limited
@@ -126,7 +141,7 @@
 +static int do_ffa_get_singular_partition_info(struct cmd_tbl *cmdtp, int flag, int argc,
 +					      char *const argv[])
 +{
-+	u32 count = 0, size = 0;
++	u32 count = 0;
 +	int ret;
 +	struct ffa_partition_info *parts_info;
 +	u32 info_idx;
@@ -135,7 +150,7 @@
 +		return -EINVAL;
 +
 +	/* Mode 1: getting the number of secure partitions */
-+	ret = ffa_bus_ops_get()->partition_info_get(argv[0], &count, NULL);
++	ret = ffa_bus_ops_get()->partition_info_get(NULL, argv[0], &count, NULL);
 +	if (ret != 0) {
 +		ffa_err("Failure in querying partitions count (error code: %d)", ret);
 +		return ret;
@@ -157,13 +172,11 @@
 +	if (!parts_info)
 +		return -EINVAL;
 +
-+	size = count * sizeof(struct ffa_partition_info);
-+
 +	/*
 +	 * ask the driver to fill the buffer with the SPs info
 +	 */
 +
-+	ret = ffa_bus_ops_get()->partition_info_get(argv[0], &size, parts_info);
++	ret = ffa_bus_ops_get()->partition_info_get(NULL, argv[0], &count, parts_info);
 +	if (ret != 0) {
 +		ffa_err("Failure in querying partition(s) info (error code: %d)", ret);
 +		free(parts_info);
@@ -224,7 +237,7 @@
 +		return -EINVAL;
 +	}
 +
-+	ret = ffa_bus_ops_get()->sync_send_receive(part_id, &msg);
++	ret = ffa_bus_ops_get()->sync_send_receive(NULL, part_id, &msg, 1);
 +	if (ret == 0) {
 +		u8 cnt;
 +
@@ -257,16 +270,13 @@
 +int do_ffa_dev_list(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 +{
 +	struct udevice *dev = NULL;
-+	int i, ret;
++	int i;
 +
 +	ffa_info("arm_ffa uclass entries:");
 +
-+	for (i = 0, ret = uclass_first_device(UCLASS_FFA, &dev);
++	for (i = 0, uclass_first_device(UCLASS_FFA, &dev);
 +	     dev;
-+	     ret = uclass_next_device(&dev), i++) {
-+		if (ret)
-+			break;
-+
++	     uclass_next_device(&dev), i++) {
 +		ffa_info("entry %d - instance %08x, ops %08x, plat %08x",
 +			 i,
 +			 (u32)map_to_sysmem(dev),
@@ -274,7 +284,7 @@
 +			 (u32)map_to_sysmem(dev_get_plat(dev)));
 +	}
 +
-+	return cmd_process_error(cmdtp, ret);
++	return 0;
 +}
 +
 +static struct cmd_tbl armffa_commands[] = {
@@ -315,7 +325,7 @@
 +	if (!armffa_cmd || argc > armffa_cmd->maxargs)
 +		return CMD_RET_USAGE;
 +
-+	ret = ffa_bus_discover();
++	ret = ffa_bus_discover(NULL);
 +	if (ret != 0)
 +		return cmd_process_error(cmdtp, ret);
 +
@@ -336,7 +346,7 @@
 +	   "devlist\n"
 +	   "	 - displays the arm_ffa device info\n");
 diff --git a/drivers/firmware/arm-ffa/Kconfig b/drivers/firmware/arm-ffa/Kconfig
-index aceb61cf49..40b467b0a5 100644
+index e4914b9bc7..be4df89d23 100644
 --- a/drivers/firmware/arm-ffa/Kconfig
 +++ b/drivers/firmware/arm-ffa/Kconfig
 @@ -4,6 +4,7 @@ config ARM_FFA_TRANSPORT
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0005-corstone1000-enable-isp1763-usb-controller.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0005-corstone1000-enable-isp1763-usb-controller.patch
deleted file mode 100644
index 6ebba56..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0005-corstone1000-enable-isp1763-usb-controller.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 8717357eff3f4172c74f0b10078c31cdff9bcc41 Mon Sep 17 00:00:00 2001
-From: Rui Miguel Silva <rui.silva@linaro.org>
-Date: Thu, 3 Mar 2022 16:52:02 +0000
-Subject: [PATCH 05/26] corstone1000: enable isp1763 usb controller
-
-MPS3 board have a ISP1763 usb controller, add the
-correspondent mmio area and enable it to be used for mass
-storage access for example.
-
-Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
-Upstream-Status: Accepted [2022.10-rc1]
----
- configs/corstone1000_defconfig | 1 +
- include/configs/corstone1000.h | 6 ++++++
- 2 files changed, 7 insertions(+)
-
-diff --git a/configs/corstone1000_defconfig b/configs/corstone1000_defconfig
-index 02f931b0d4..e573fe6fe6 100644
---- a/configs/corstone1000_defconfig
-+++ b/configs/corstone1000_defconfig
-@@ -42,6 +42,7 @@ CONFIG_REGMAP=y
- CONFIG_DM_SERIAL=y
- CONFIG_USB=y
- CONFIG_DM_USB=y
-+CONFIG_USB_ISP1760=y
- CONFIG_USB_STORAGE=y
- CONFIG_EFI_MM_COMM_TEE=y
- # CONFIG_OPTEE is not set
-diff --git a/include/configs/corstone1000.h b/include/configs/corstone1000.h
-index cf166f107e..8ba0effb0a 100644
---- a/include/configs/corstone1000.h
-+++ b/include/configs/corstone1000.h
-@@ -55,7 +55,13 @@
- #define CONFIG_SYS_CBSIZE	512	/* Console I/O Buffer Size */
- #define CONFIG_SYS_MAXARGS	64	/* max command args */
- 
-+#define BOOT_TARGET_DEVICES(func) \
-+	func(USB, usb, 0)
-+
-+#include <config_distro_bootcmd.h>
-+
- #define CONFIG_EXTRA_ENV_SETTINGS							\
-+				BOOTENV							\
- 				"usb_pgood_delay=250\0"					\
- 				"boot_bank_flag=0x08002000\0"				\
- 				"kernel_addr_bank_0=0x083EE000\0"			\
--- 
-2.17.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0011-arm_ffa-introduce-the-FF-A-Sandbox-driver.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0006-arm_ffa-introduce-the-FF-A-Sandbox-driver.patch
similarity index 91%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0011-arm_ffa-introduce-the-FF-A-Sandbox-driver.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0006-arm_ffa-introduce-the-FF-A-Sandbox-driver.patch
index 739f781..9d86dd5 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0011-arm_ffa-introduce-the-FF-A-Sandbox-driver.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0006-arm_ffa-introduce-the-FF-A-Sandbox-driver.patch
@@ -1,7 +1,7 @@
-From 553b57e39808ef04bc6aa54e0324f92b0175e476 Mon Sep 17 00:00:00 2001
+From 6d28dcdc36ad87b6987c7f920e06165c74eca59d Mon Sep 17 00:00:00 2001
 From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Date: Mon, 6 Jun 2022 12:55:08 +0100
-Subject: [PATCH 11/26] arm_ffa: introduce the FF-A Sandbox driver
+Date: Tue, 29 Nov 2022 14:44:36 +0000
+Subject: [PATCH 06/25] arm_ffa: introduce the FF-A Sandbox driver
 
 Provide a Sandbox driver to emulate the FF-A ABIs
 
@@ -12,67 +12,63 @@
 application to read the status of all the inspected ABIs
 and perform functional tests based on that.
 
+sandbox driver supports only 64-bit direct messaging.
+
 Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20220926101723.9965-1-abdellatif.elkhlifi@arm.com/]
----
+Cc: Tom Rini <trini@konsulko.com>
+Cc: Simon Glass <sjg@chromium.org>
+Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
+Cc: Jens Wiklander <jens.wiklander@linaro.org>
+Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20221122131751.22747-1-abdellatif.elkhlifi@arm.com/]
 
 Changelog:
 ===============
 
+v8: update ffa_bus_prvdata_get() to return a pointer rather than
+    a pointer address
+
+v7: state that sandbox driver supports only 64-bit direct messaging
+
 v4: align sandbox driver with the new FF-A driver interfaces
- and new way of error handling
+    and new way of error handling
 
 v1: introduce the sandbox driver
-
+---
  MAINTAINERS                                   |   1 +
- common/board_r.c                              |   2 +-
  configs/sandbox64_defconfig                   |   2 +
  configs/sandbox_defconfig                     |   2 +
  doc/arch/sandbox.rst                          |   1 +
- drivers/firmware/arm-ffa/Kconfig              |  10 +-
+ drivers/firmware/arm-ffa/Kconfig              |   9 +-
  drivers/firmware/arm-ffa/Makefile             |   1 +
  drivers/firmware/arm-ffa/arm_ffa_prv.h        |  15 +-
- drivers/firmware/arm-ffa/core.c               |  24 +-
+ drivers/firmware/arm-ffa/core.c               |  22 +-
  drivers/firmware/arm-ffa/sandbox.c            | 659 ++++++++++++++++++
  .../firmware/arm-ffa/sandbox_arm_ffa_prv.h    | 144 ++++
  include/arm_ffa.h                             |   2 +-
  include/sandbox_arm_ffa.h                     |  91 +++
  lib/efi_loader/efi_boottime.c                 |   2 +-
- 14 files changed, 941 insertions(+), 15 deletions(-)
+ 13 files changed, 938 insertions(+), 13 deletions(-)
  create mode 100644 drivers/firmware/arm-ffa/sandbox.c
  create mode 100644 drivers/firmware/arm-ffa/sandbox_arm_ffa_prv.h
  create mode 100644 include/sandbox_arm_ffa.h
 
 diff --git a/MAINTAINERS b/MAINTAINERS
-index 9f0a1b7387..96157db6b6 100644
+index d50bdddea8..23cebbd526 100644
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
-@@ -251,6 +251,7 @@ F:	cmd/armffa.c
- F:	doc/README.ffa.drv
+@@ -255,6 +255,7 @@ F:	cmd/armffa.c
+ F:	doc/arch/arm64.ffa.rst
  F:	drivers/firmware/arm-ffa/
  F:	include/arm_ffa.h
 +F:	include/sandbox_arm_ffa.h
  
  ARM FREESCALE IMX
  M:	Stefano Babic <sbabic@denx.de>
-diff --git a/common/board_r.c b/common/board_r.c
-index c75634286b..f838cd5958 100644
---- a/common/board_r.c
-+++ b/common/board_r.c
-@@ -783,7 +783,7 @@ static init_fnc_t init_sequence_r[] = {
- 	INIT_FUNC_WATCHDOG_RESET
- 	initr_net,
- #endif
--#ifdef CONFIG_ARM_FFA_TRANSPORT
-+#if defined(CONFIG_ARM_FFA_TRANSPORT) && !defined(CONFIG_SANDBOX_FFA)
- 	ffa_bus_discover,
- #endif
- #ifdef CONFIG_POST
 diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig
-index d7f22b39ae..78bc5aaa96 100644
+index 290d1506c2..36e6448968 100644
 --- a/configs/sandbox64_defconfig
 +++ b/configs/sandbox64_defconfig
-@@ -250,3 +250,5 @@ CONFIG_TEST_FDTDEC=y
+@@ -248,3 +248,5 @@ CONFIG_TEST_FDTDEC=y
  CONFIG_UNIT_TEST=y
  CONFIG_UT_TIME=y
  CONFIG_UT_DM=y
@@ -80,10 +76,10 @@
 +CONFIG_SANDBOX_FFA=y
 \ No newline at end of file
 diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
-index c509a924e6..8942aa7157 100644
+index ab5d3f19bf..8bf3848788 100644
 --- a/configs/sandbox_defconfig
 +++ b/configs/sandbox_defconfig
-@@ -327,3 +327,5 @@ CONFIG_TEST_FDTDEC=y
+@@ -328,3 +328,5 @@ CONFIG_TEST_FDTDEC=y
  CONFIG_UNIT_TEST=y
  CONFIG_UT_TIME=y
  CONFIG_UT_DM=y
@@ -103,7 +99,7 @@
  - Chrome OS EC
  - GPIO
 diff --git a/drivers/firmware/arm-ffa/Kconfig b/drivers/firmware/arm-ffa/Kconfig
-index 40b467b0a5..263481de96 100644
+index be4df89d23..b86f16d778 100644
 --- a/drivers/firmware/arm-ffa/Kconfig
 +++ b/drivers/firmware/arm-ffa/Kconfig
 @@ -2,8 +2,8 @@
@@ -117,27 +113,26 @@
  	select CMD_ARMFFA
  	select LIB_UUID
  	select DEVRES
-@@ -38,3 +38,9 @@ config ARM_FFA_EFI_RUNTIME_MODE
- 	  The driver Code needed at runtime is placed at EFI runtime code section.
- 	  Turning this on makes ffa_copy_runtime_data available for use and the driver
- 	  code placed at EFI runtime code section.
-+
+@@ -29,3 +29,8 @@ config ARM_FFA_TRANSPORT
+ 
+ 	  For more details about the FF-A driver, please refer to doc/arch/arm64.ffa.rst
+ 
 +config SANDBOX_FFA
 +	bool "FF-A Sandbox driver"
 +	depends on ARM_FFA_TRANSPORT && SANDBOX
 +	help
 +	  This emulates the FF-A handling under Sandbox and allows to test the FF-A driver
 diff --git a/drivers/firmware/arm-ffa/Makefile b/drivers/firmware/arm-ffa/Makefile
-index 0b9b0a61b4..d50060b836 100644
+index 043a8915be..0d21d6b47a 100644
 --- a/drivers/firmware/arm-ffa/Makefile
 +++ b/drivers/firmware/arm-ffa/Makefile
-@@ -5,3 +5,4 @@
+@@ -4,3 +4,4 @@
+ # Abdellatif El Khlifi, Arm Limited, abdellatif.elkhlifi@arm.com.
  
  obj-y += arm-ffa-uclass.o core.o
- obj-$(CONFIG_ARM_FFA_EFI_RUNTIME_MODE) += efi_ffa_runtime_data_mgr.o
 +obj-$(CONFIG_SANDBOX_FFA) += sandbox.o
 diff --git a/drivers/firmware/arm-ffa/arm_ffa_prv.h b/drivers/firmware/arm-ffa/arm_ffa_prv.h
-index 7bc90f7f66..3e0d4c112c 100644
+index 4eea7dc036..bbc8b87069 100644
 --- a/drivers/firmware/arm-ffa/arm_ffa_prv.h
 +++ b/drivers/firmware/arm-ffa/arm_ffa_prv.h
 @@ -19,6 +19,16 @@
@@ -157,7 +152,7 @@
  /* FF-A driver version definitions */
  
  #define MAJOR_VERSION_MASK		GENMASK(30, 16)
-@@ -94,11 +104,6 @@ struct ffa_abi_errmap {
+@@ -103,11 +113,6 @@ struct ffa_abi_errmap {
  #define FFA_ERRMAP_COUNT (FFA_LAST_ID - FFA_FIRST_ID + 1)
  #define FFA_ID_TO_ERRMAP_ID(ffa_id) ((ffa_id) - FFA_FIRST_ID)
  
@@ -170,10 +165,10 @@
   * struct ffa_partition_uuid - 16 bytes UUID transmitted by FFA_PARTITION_INFO_GET
   * @a1-4:	32-bit words access to the UUID data
 diff --git a/drivers/firmware/arm-ffa/core.c b/drivers/firmware/arm-ffa/core.c
-index 41c7b96e68..caba10caae 100644
+index 0b1f8e6a07..560603b28b 100644
 --- a/drivers/firmware/arm-ffa/core.c
 +++ b/drivers/firmware/arm-ffa/core.c
-@@ -1101,6 +1101,7 @@ static int __ffa_runtime ffa_msg_send_direct_req(u16 dst_part_id, struct ffa_sen
+@@ -1072,6 +1072,7 @@ static int ffa_msg_send_direct_req(struct udevice *dev, u16 dst_part_id,
  	return ffa_to_std_errno(ffa_errno);
  }
  
@@ -181,7 +176,7 @@
  /**
   * __arm_ffa_fn_smc - SMC wrapper
   * @args: FF-A ABI arguments to be copied to Xn registers
-@@ -1114,6 +1115,7 @@ void __ffa_runtime __arm_ffa_fn_smc(ffa_value_t args, ffa_value_t *res)
+@@ -1085,6 +1086,7 @@ void __arm_ffa_fn_smc(ffa_value_t args, ffa_value_t *res)
  {
  	arm_smccc_1_2_smc(&args, res);
  }
@@ -189,7 +184,7 @@
  
  /**
   * ffa_set_smc_conduit - Set the SMC conduit
-@@ -1127,7 +1129,12 @@ void __ffa_runtime __arm_ffa_fn_smc(ffa_value_t args, ffa_value_t *res)
+@@ -1098,7 +1100,12 @@ void __arm_ffa_fn_smc(ffa_value_t args, ffa_value_t *res)
   */
  static int ffa_set_smc_conduit(void)
  {
@@ -203,19 +198,19 @@
  
  	if (!ffa_priv_data->invoke_ffa_fn) {
  		ffa_err("failure to set the invoke function");
-@@ -1304,17 +1311,18 @@ struct ffa_prvdata **ffa_bus_prvdata_get(void)
+@@ -1275,17 +1282,18 @@ struct ffa_prvdata *ffa_bus_prvdata_get(void)
  }
  
  /**
-- * ffa_bus_discover - discover FF-A bus and probe the arm_ffa device
+- * ffa_bus_discover - discover FF-A bus and probe arm_ffa device
 + * ffa_bus_discover - discover FF-A bus and probe arm_ffa and sandbox_arm_ffa devices
+  * @pdev: the address of a device pointer (to be filled when the arm_ffa bus device is created
+  *       successfully)
   *
-  * This boot time function makes sure the FF-A bus is discoverable.
-- * Then, the arm_ffa device is probed and ready to use.
-+ * Then, the arm_ffa and sandbox_arm_ffa devices are ready to use.
-+ *
-  * This function is called automatically at initcalls
-  * level (after u-boot relocation).
+  * This function makes sure the FF-A bus is discoverable.
+- * When probing succeeds FF-A discovery is done. The arm_ffa device is ready to use.
++ * When probing succeeds FF-A discovery is done. The arm_ffa and sandbox_arm_ffa devices
++ * are ready to use.
   *
   * When the bus was already discovered successfully the discovery will not run again.
   *
@@ -225,13 +220,9 @@
   * All FF-A clients should use the arm_ffa device to use the FF-A transport.
   *
   * Return:
-@@ -1325,9 +1333,15 @@ int ffa_bus_discover(void)
- {
- 	int ret = 0;
- 
--	if (!ffa_priv_data)
-+	if (!ffa_priv_data) {
- 		ret = ffa_device_get();
+@@ -1299,6 +1307,12 @@ int ffa_bus_discover(struct udevice **pdev)
+ 	if (!ffa_priv_data) {
+ 		ret = ffa_device_get(pdev);
  
 +#if CONFIG_IS_ENABLED(SANDBOX_FFA)
 +		if (ret == 0)
@@ -244,7 +235,7 @@
  
 diff --git a/drivers/firmware/arm-ffa/sandbox.c b/drivers/firmware/arm-ffa/sandbox.c
 new file mode 100644
-index 0000000000..16e1fdc809
+index 0000000000..16f1ca926e
 --- /dev/null
 +++ b/drivers/firmware/arm-ffa/sandbox.c
 @@ -0,0 +1,659 @@
@@ -680,7 +671,7 @@
 + * @{a0-a7} , res: The SMC call arguments and return structure.
 + *
 + * This is the function that emulates FFA_MSG_SEND_DIRECT_{REQ,RESP}
-+ * FF-A functions.
++ * FF-A functions. Only SMC 64-bit is supported in Sandbox.
 + *
 + * Emulating interrupts is not supported. So, FFA_RUN and FFA_INTERRUPT are not supported.
 + * In case of success FFA_MSG_SEND_DIRECT_RESP is returned with default pattern data (0xff).
@@ -743,13 +734,13 @@
 +	if (!func_data)
 +		return -EINVAL;
 +
-+	if (!func_data->data0 || func_data->data0_size != sizeof(struct ffa_prvdata **))
++	if (!func_data->data0 || func_data->data0_size != sizeof(struct ffa_prvdata *))
 +		return -EINVAL;
 +
-+	if (!func_data->data1 || func_data->data1_size != sizeof(struct sandbox_ffa_prvdata **))
++	if (!func_data->data1 || func_data->data1_size != sizeof(struct sandbox_ffa_prvdata *))
 +		return -EINVAL;
 +
-+	*((struct ffa_prvdata **)func_data->data0) = *(ffa_bus_prvdata_get());
++	*((struct ffa_prvdata **)func_data->data0) = ffa_bus_prvdata_get();
 +	*((struct sandbox_ffa_prvdata **)func_data->data1) = &sandbox_ffa_priv_data;
 +
 +	return 0;
@@ -1058,17 +1049,17 @@
 +
 +#endif
 diff --git a/include/arm_ffa.h b/include/arm_ffa.h
-index f17b100497..665413a0c5 100644
+index 74b16174c2..b88904fe50 100644
 --- a/include/arm_ffa.h
 +++ b/include/arm_ffa.h
-@@ -111,7 +111,7 @@ struct ffa_bus_ops {
- const struct ffa_bus_ops * __ffa_runtime ffa_bus_ops_get(void);
+@@ -90,7 +90,7 @@ struct ffa_bus_ops {
+ const struct ffa_bus_ops *ffa_bus_ops_get(void);
  
  /**
 - * ffa_bus_discover - discover FF-A bus and probes the arm_ffa device
 + * ffa_bus_discover - discover FF-A bus and probes the arm_ffa and sandbox_arm_ffa devices
   */
- int ffa_bus_discover(void);
+ int ffa_bus_discover(struct udevice **pdev);
  
 diff --git a/include/sandbox_arm_ffa.h b/include/sandbox_arm_ffa.h
 new file mode 100644
@@ -1168,18 +1159,18 @@
 +
 +#endif
 diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
-index 0ec002ac8b..8fa9a58d76 100644
+index caa64028be..1099ccc800 100644
 --- a/lib/efi_loader/efi_boottime.c
 +++ b/lib/efi_loader/efi_boottime.c
-@@ -2177,7 +2177,7 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
+@@ -2185,7 +2185,7 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
  		dm_remove_devices_flags(DM_REMOVE_ACTIVE_ALL);
  	}
  
 -#if CONFIG_IS_ENABLED(ARM_FFA_TRANSPORT)
 +#if CONFIG_IS_ENABLED(ARM_FFA_TRANSPORT) && !CONFIG_IS_ENABLED(SANDBOX_FFA)
  		/* unmap FF-A RX/TX buffers */
- 		if (ffa_bus_ops_get()->rxtx_unmap())
- 			debug("[efi_boottime][ERROR]: can not unmap FF-A RX/TX buffers\n");
+ 		if (ffa_bus_ops_get()->rxtx_unmap(NULL))
+ 			log_err("Can't unmap FF-A RX/TX buffers\n");
 -- 
 2.17.1
 
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0007-arm64-smccc-clear-the-Xn-registers-after-SMC-calls.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0007-arm64-smccc-clear-the-Xn-registers-after-SMC-calls.patch
deleted file mode 100644
index cedac06..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0007-arm64-smccc-clear-the-Xn-registers-after-SMC-calls.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 83f9da30247c2d021658bc1b595c59ecc35eadf5 Mon Sep 17 00:00:00 2001
-From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Date: Fri, 29 Jul 2022 13:07:43 +0100
-Subject: [PATCH 07/26] arm64: smccc: clear the Xn registers after SMC calls
-
-set to zero the x0-x17 registers
-
-As per the SMCCC v1.2 spec, unused result and scratch registers can leak
-information after an SMC call. We can mitigate against this risk by
-returning zero in each register.
-
-Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20220926101723.9965-1-abdellatif.elkhlifi@arm.com/]
----
-
-Changelog:
-===============
-
-v4:
-
-* move the clearing code into a new macro: clear_gp_regs
-
-v3:
-
-* clear the Xn registers after SMC calls
-
- arch/arm/cpu/armv8/smccc-call.S | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
-diff --git a/arch/arm/cpu/armv8/smccc-call.S b/arch/arm/cpu/armv8/smccc-call.S
-index ec6f299bc9..32f3eb8eeb 100644
---- a/arch/arm/cpu/armv8/smccc-call.S
-+++ b/arch/arm/cpu/armv8/smccc-call.S
-@@ -50,6 +50,12 @@ ENDPROC(__arm_smccc_hvc)
- 
- #ifdef CONFIG_ARM64
- 
-+	.macro	clear_gp_regs
-+	.irp	n,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
-+	mov	x\n, xzr
-+	.endr
-+	.endm
-+
- 	.macro SMCCC_1_2 instr
- 	/* Save `res` and free a GPR that won't be clobbered */
- 	stp     x1, x19, [sp, #-16]!
-@@ -84,6 +90,9 @@ ENDPROC(__arm_smccc_hvc)
- 	stp	x14, x15, [x19, #ARM_SMCCC_1_2_REGS_X14_OFFS]
- 	stp	x16, x17, [x19, #ARM_SMCCC_1_2_REGS_X16_OFFS]
- 
-+	/* x0-x17 registers can leak information after an SMC or HVC call. Let's clear them */
-+	clear_gp_regs
-+
- 	/* Restore original x19 */
- 	ldp     xzr, x19, [sp], #16
- 	ret
--- 
-2.17.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0012-arm_ffa-introduce-Sandbox-test-cases-for-UCLASS_FFA.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0007-arm_ffa-introduce-Sandbox-test-cases-for-UCLASS_FFA.patch
similarity index 85%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0012-arm_ffa-introduce-Sandbox-test-cases-for-UCLASS_FFA.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0007-arm_ffa-introduce-Sandbox-test-cases-for-UCLASS_FFA.patch
index edc5ed6..62f6e43 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0012-arm_ffa-introduce-Sandbox-test-cases-for-UCLASS_FFA.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0007-arm_ffa-introduce-Sandbox-test-cases-for-UCLASS_FFA.patch
@@ -1,7 +1,7 @@
-From dbc51066367481b5a45ce24f91571f83a022576e Mon Sep 17 00:00:00 2001
+From de26427c9f9b450ab4a18352fa51f46b3b585bc1 Mon Sep 17 00:00:00 2001
 From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
 Date: Mon, 6 Jun 2022 17:26:06 +0100
-Subject: [PATCH 12/26] arm_ffa: introduce Sandbox test cases for UCLASS_FFA
+Subject: [PATCH 07/25] arm_ffa: introduce Sandbox test cases for UCLASS_FFA
 
 Add functional test cases for the FF-A core driver
 
@@ -9,28 +9,38 @@
  inspecting the FF-A core driver.
 
 Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20220926101723.9965-1-abdellatif.elkhlifi@arm.com/]
----
+Cc: Tom Rini <trini@konsulko.com>
+Cc: Simon Glass <sjg@chromium.org>
+Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
+Cc: Jens Wiklander <jens.wiklander@linaro.org>
+Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20221122131751.22747-1-abdellatif.elkhlifi@arm.com/]
 
 Changelog:
 ===============
 
+v8:
+
+  * update partition_info_get() second argument to be an SP count
+  * pass NULL device pointer to the FF-A bus discovery and operations
+
+v7: set the tests to use 64-bit direct messaging
+
 v4: align sandbox tests with the new FF-A driver interfaces
  and new way of error handling
 
 v1: introduce sandbox tests
-
+---
  MAINTAINERS      |   1 +
- test/dm/Makefile |   1 +
- test/dm/ffa.c    | 394 +++++++++++++++++++++++++++++++++++++++++++++++
- 3 files changed, 396 insertions(+)
+ test/dm/Makefile |   2 +
+ test/dm/ffa.c    | 392 +++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 395 insertions(+)
  create mode 100644 test/dm/ffa.c
 
 diff --git a/MAINTAINERS b/MAINTAINERS
-index 96157db6b6..e5b71b0ade 100644
+index 23cebbd526..e682db8d8f 100644
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
-@@ -252,6 +252,7 @@ F:	doc/README.ffa.drv
+@@ -256,6 +256,7 @@ F:	doc/arch/arm64.ffa.rst
  F:	drivers/firmware/arm-ffa/
  F:	include/arm_ffa.h
  F:	include/sandbox_arm_ffa.h
@@ -39,10 +49,18 @@
  ARM FREESCALE IMX
  M:	Stefano Babic <sbabic@denx.de>
 diff --git a/test/dm/Makefile b/test/dm/Makefile
-index f0a7c97e3d..f96f848046 100644
+index 7543df8823..e5a791768e 100644
 --- a/test/dm/Makefile
 +++ b/test/dm/Makefile
-@@ -79,6 +79,7 @@ obj-$(CONFIG_POWER_DOMAIN) += power-domain.o
+@@ -1,6 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0+
+ #
+ # Copyright (c) 2013 Google, Inc
++# (C) Copyright 2022 ARM Limited
+ 
+ obj-$(CONFIG_UT_DM) += test-dm.o
+ 
+@@ -81,6 +82,7 @@ obj-$(CONFIG_POWER_DOMAIN) += power-domain.o
  obj-$(CONFIG_ACPI_PMC) += pmc.o
  obj-$(CONFIG_DM_PMIC) += pmic.o
  obj-$(CONFIG_DM_PWM) += pwm.o
@@ -52,10 +70,10 @@
  obj-y += regmap.o
 diff --git a/test/dm/ffa.c b/test/dm/ffa.c
 new file mode 100644
-index 0000000000..052d5fc3f4
+index 0000000000..128d8626a7
 --- /dev/null
 +++ b/test/dm/ffa.c
-@@ -0,0 +1,394 @@
+@@ -0,0 +1,392 @@
 +// SPDX-License-Identifier: GPL-2.0+
 +/*
 + * Functional tests for UCLASS_FFA  class
@@ -228,7 +246,7 @@
 +	struct ffa_send_direct_data msg = {0};
 +	u8 cnt;
 +
-+	ut_assertok(ffa_bus_ops_get()->sync_send_receive(part_id, &msg));
++	ut_assertok(ffa_bus_ops_get()->sync_send_receive(NULL, part_id, &msg, 1));
 +
 +	for (cnt = 0; cnt < sizeof(struct ffa_send_direct_data) / sizeof(u64); cnt++)
 +		ut_assertok(((u64 *)&msg)[cnt] != 0xffffffffffffffff);
@@ -240,7 +258,7 @@
 +				     struct sandbox_ffa_prvdata *sdx_prvdata,
 +				     struct unit_test_state *uts)
 +{
-+	u32 count = 0, size = 0;
++	u32 count = 0;
 +	struct ffa_partition_info *parts_info;
 +	u32 info_idx, exp_info_idx;
 +	int ret;
@@ -248,7 +266,7 @@
 +	/*
 +	 * get from the driver the count of the SPs matching the UUID
 +	 */
-+	ret = ffa_bus_ops_get()->partition_info_get(service_uuid, &count, NULL);
++	ret = ffa_bus_ops_get()->partition_info_get(NULL, service_uuid, &count, NULL);
 +	/* make sure partitions are detected */
 +	ut_assertok(ret != 0);
 +	ut_assertok(count != SANDBOX_SP_COUNT_PER_VALID_SERVICE);
@@ -261,12 +279,10 @@
 +	parts_info = calloc(count, sizeof(struct ffa_partition_info));
 +	ut_assertok(!parts_info);
 +
-+	size = count * sizeof(struct ffa_partition_info);
-+
 +	/*
 +	 * ask the driver to fill the buffer with the SPs info
 +	 */
-+	ret = ffa_bus_ops_get()->partition_info_get(service_uuid, &size, parts_info);
++	ret = ffa_bus_ops_get()->partition_info_get(NULL, service_uuid, &count, parts_info);
 +	if (ret != 0) {
 +		free(parts_info);
 +		ut_assertok(ret != 0);
@@ -317,7 +333,7 @@
 +	int ret;
 +
 +	/*  test probing FF-A devices */
-+	ut_assertok(ffa_bus_discover());
++	ut_assertok(ffa_bus_discover(NULL));
 +
 +	/* get a pointer to the FF-A core and sandbox drivers private data */
 +	func_data.data0 = &prvdata;
@@ -374,7 +390,7 @@
 +	ut_assertok(check_rxbuf_release_flag(rxbuf_flag, uts));
 +
 +	/* test FFA_RXTX_UNMAP */
-+	ut_assertok(ffa_bus_ops_get()->rxtx_unmap());
++	ut_assertok(ffa_bus_ops_get()->rxtx_unmap(NULL));
 +
 +	rxbuf_flag = 1;
 +	ut_assertok(sandbox_ffa_query_core_state(FFA_RXTX_UNMAP, &func_data));
@@ -399,7 +415,7 @@
 +	u16 part_id = 0;
 +
 +	/*  test probing FF-A devices */
-+	ut_assertok(ffa_bus_discover());
++	ut_assertok(ffa_bus_discover(NULL));
 +
 +	/* get a pointer to the FF-A core and sandbox drivers private data */
 +	func_data.data0 = &prvdata;
@@ -418,32 +434,32 @@
 +	ut_assertok(check_sandbox_dev(sdx_prvdata, uts));
 +
 +	/* query partitions count using  invalid arguments  */
-+	ret = ffa_bus_ops_get()->partition_info_get(unvalid_svc_uuid, NULL, NULL);
++	ret = ffa_bus_ops_get()->partition_info_get(NULL, unvalid_svc_uuid, NULL, NULL);
 +	ut_assertok(ret != -EINVAL);
 +
 +	/* query partitions count using an invalid UUID  string */
-+	ret = ffa_bus_ops_get()->partition_info_get(unvalid_svc_uuid_str, &count, NULL);
++	ret = ffa_bus_ops_get()->partition_info_get(NULL, unvalid_svc_uuid_str, &count, NULL);
 +	ut_assertok(ret != -EINVAL);
 +
 +	/* query partitions count using an invalid UUID (no matching SP) */
 +	count = 0;
-+	ret = ffa_bus_ops_get()->partition_info_get(unvalid_svc_uuid, &count, NULL);
++	ret = ffa_bus_ops_get()->partition_info_get(NULL, unvalid_svc_uuid, &count, NULL);
 +	ut_assertok(count != 0);
 +
 +	/* query partitions count using a valid UUID  */
 +	count = 0;
-+	ret = ffa_bus_ops_get()->partition_info_get(valid_svc_uuid, &count, NULL);
++	ret = ffa_bus_ops_get()->partition_info_get(NULL, valid_svc_uuid, &count, NULL);
 +	/* make sure partitions are detected */
 +	ut_assertok(ret != 0);
 +	ut_assertok(count != SANDBOX_SP_COUNT_PER_VALID_SERVICE);
 +
 +	/* send data to an invalid partition */
-+	ret = ffa_bus_ops_get()->sync_send_receive(part_id, &msg);
++	ret = ffa_bus_ops_get()->sync_send_receive(NULL, part_id, &msg, 1);
 +	ut_assertok(ret != -EINVAL);
 +
 +	/* send data to a valid partition */
 +	part_id = prvdata->partitions.descs[0].info.id;
-+	ret = ffa_bus_ops_get()->sync_send_receive(part_id, &msg);
++	ret = ffa_bus_ops_get()->sync_send_receive(NULL, part_id, &msg, 1);
 +	ut_assertok(ret != 0);
 +
 +	return CMD_RET_SUCCESS;
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0013-arm_ffa-introduce-armffa-command-Sandbox-test.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0008-arm_ffa-introduce-armffa-command-Sandbox-test.patch
similarity index 67%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0013-arm_ffa-introduce-armffa-command-Sandbox-test.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0008-arm_ffa-introduce-armffa-command-Sandbox-test.patch
index 9722677..db0d4b0 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0013-arm_ffa-introduce-armffa-command-Sandbox-test.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0008-arm_ffa-introduce-armffa-command-Sandbox-test.patch
@@ -1,13 +1,16 @@
-From 5be8c1d52045cbdc1adf79299792a6a49fef66c3 Mon Sep 17 00:00:00 2001
+From 5507189fe37f1243d685c59ea52fa5643d3cc50c Mon Sep 17 00:00:00 2001
 From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Date: Mon, 6 Jun 2022 17:30:44 +0100
-Subject: [PATCH 13/26] arm_ffa: introduce armffa command Sandbox test
+Date: Tue, 29 Nov 2022 14:48:34 +0000
+Subject: [PATCH 08/25] arm_ffa: introduce armffa command Sandbox test
 
 Add Sandbox test for the armffa command
 
 Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20220926101723.9965-1-abdellatif.elkhlifi@arm.com/]
----
+Cc: Tom Rini <trini@konsulko.com>
+Cc: Simon Glass <sjg@chromium.org>
+Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
+Cc: Jens Wiklander <jens.wiklander@linaro.org>
+Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20221122131751.22747-1-abdellatif.elkhlifi@arm.com/]
 
 Changelog:
 ===============
@@ -15,18 +18,18 @@
 v4: drop use of helper APIs
 
 v1: introduce armffa command sandbox test
-
+---
  MAINTAINERS       |  1 +
- test/cmd/Makefile |  1 +
- test/cmd/armffa.c | 40 ++++++++++++++++++++++++++++++++++++++++
+ test/cmd/Makefile |  2 ++
+ test/cmd/armffa.c | 39 +++++++++++++++++++++++++++++++++++++++
  3 files changed, 42 insertions(+)
  create mode 100644 test/cmd/armffa.c
 
 diff --git a/MAINTAINERS b/MAINTAINERS
-index e5b71b0ade..505fffff14 100644
+index e682db8d8f..72f01769c9 100644
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
-@@ -252,6 +252,7 @@ F:	doc/README.ffa.drv
+@@ -256,6 +256,7 @@ F:	doc/arch/arm64.ffa.rst
  F:	drivers/firmware/arm-ffa/
  F:	include/arm_ffa.h
  F:	include/sandbox_arm_ffa.h
@@ -35,20 +38,28 @@
  
  ARM FREESCALE IMX
 diff --git a/test/cmd/Makefile b/test/cmd/Makefile
-index a59adb1e6d..d9dc0809d6 100644
+index c331757425..19e9d0a995 100644
 --- a/test/cmd/Makefile
 +++ b/test/cmd/Makefile
-@@ -11,3 +11,4 @@ obj-$(CONFIG_CMD_MEM_SEARCH) += mem_search.o
+@@ -1,6 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0+
+ #
+ # Copyright (c) 2013 Google, Inc
++# (C) Copyright 2022 ARM Limited
+ 
+ ifdef CONFIG_HUSH_PARSER
+ obj-$(CONFIG_CONSOLE_RECORD) += test_echo.o
+@@ -13,3 +14,4 @@ obj-$(CONFIG_CMD_MEM_SEARCH) += mem_search.o
  obj-$(CONFIG_CMD_PINMUX) += pinmux.o
  obj-$(CONFIG_CMD_PWM) += pwm.o
  obj-$(CONFIG_CMD_SETEXPR) += setexpr.o
 +obj-$(CONFIG_SANDBOX_FFA) += armffa.o
 diff --git a/test/cmd/armffa.c b/test/cmd/armffa.c
 new file mode 100644
-index 0000000000..531f82066e
+index 0000000000..e04363ba63
 --- /dev/null
 +++ b/test/cmd/armffa.c
-@@ -0,0 +1,40 @@
+@@ -0,0 +1,39 @@
 +// SPDX-License-Identifier: GPL-2.0+
 +/*
 + * Test for armffa command
@@ -58,7 +69,6 @@
 + */
 +
 +#include <common.h>
-+#include <dm.h>
 +#include <dm/test.h>
 +#include <sandbox_arm_ffa.h>
 +#include <string.h>
@@ -72,7 +82,7 @@
 +{
 +	char ping_cmd[PING_CMD_SIZE] = {0};
 +
-+	ut_assertok(ffa_bus_discover());
++	ut_assertok(ffa_bus_discover(NULL));
 +
 +	/* armffa getpart <UUID> */
 +	ut_assertok(run_command("armffa getpart " SANDBOX_SERVICE1_UUID, 0));
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0008-lib-uuid-introduce-be_uuid_str_to_le_bin-function.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0008-lib-uuid-introduce-be_uuid_str_to_le_bin-function.patch
deleted file mode 100644
index 769209b..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0008-lib-uuid-introduce-be_uuid_str_to_le_bin-function.patch
+++ /dev/null
@@ -1,127 +0,0 @@
-From af17d357674393565c8be15f21c86cba972963e7 Mon Sep 17 00:00:00 2001
-From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Date: Thu, 4 Aug 2022 16:46:47 +0100
-Subject: [PATCH 08/26] lib: uuid: introduce be_uuid_str_to_le_bin function
-
-convert big endian UUID string to little endian buffer
-
-Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20220926101723.9965-1-abdellatif.elkhlifi@arm.com/]
----
-
-Changelog:
-===============
-
-v4:
-
-* rename ffa_uuid_str_to_bin to be_uuid_str_to_le_bin and put in
-  a standalone commit (the current)
-
-v3:
-
-* introduce ffa_uuid_str_to_bin (provided by
-  arm_ffa: introduce Arm FF-A low-level driver)
-
- include/uuid.h |  6 +++++
- lib/uuid.c     | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 69 insertions(+)
-
-diff --git a/include/uuid.h b/include/uuid.h
-index 4a4883d3b5..5355230b5e 100644
---- a/include/uuid.h
-+++ b/include/uuid.h
-@@ -44,4 +44,10 @@ int uuid_guid_get_bin(const char *guid_str, unsigned char *guid_bin);
- const char *uuid_guid_get_str(const unsigned char *guid_bin);
- void gen_rand_uuid(unsigned char *uuid_bin);
- void gen_rand_uuid_str(char *uuid_str, int str_format);
-+
-+/**
-+ * be_uuid_str_to_le_bin - Converts a big endian UUID string to a little endian buffer
-+ */
-+int be_uuid_str_to_le_bin(const char *uuid_str, unsigned char *uuid_bin);
-+
- #endif
-diff --git a/lib/uuid.c b/lib/uuid.c
-index 284f8113ff..d0fa51d0bf 100644
---- a/lib/uuid.c
-+++ b/lib/uuid.c
-@@ -1,6 +1,7 @@
- // SPDX-License-Identifier: GPL-2.0+
- /*
-  * Copyright 2011 Calxeda, Inc.
-+ * Copyright 2022 ARM Limited
-  */
- 
- #include <common.h>
-@@ -342,6 +343,68 @@ int uuid_str_to_bin(const char *uuid_str, unsigned char *uuid_bin,
- 	return 0;
- }
- 
-+/**
-+ * be_uuid_str_to_le_bin - Converts a big endian UUID string to a little endian buffer
-+ * @uuid_str:	UUID string in big endian format (36 bytes wide + '/0')
-+ * @uuid_bin:	preallocated 16 bytes UUID buffer in little endian format
-+ *
-+ * UUID string is 36 characters (36 bytes):
-+ *
-+ * xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
-+ * be		     be	     be	      be      be
-+ *
-+ * where x is a hexadecimal character. Fields are separated by '-'s.
-+ * When converting to a binary UUID, these endianness rules apply:
-+ *     be: means the field in the string is considered a big endian hex number
-+ *	   and should be converted to little endian binary format
-+ *
-+ * Return:
-+ *
-+ *    uuid_bin filled with little endian UUID data
-+ *    On success 0 is returned. Otherwise, failure code.
-+ */
-+int be_uuid_str_to_le_bin(const char *uuid_str, unsigned char *uuid_bin)
-+{
-+	u16 tmp16 = 0;
-+	u32 tmp32 = 0;
-+	u64 tmp64 = 0;
-+
-+	if (!uuid_str_valid(uuid_str) || !uuid_bin)
-+		return -EINVAL;
-+
-+	/*
-+	 * reverse bytes from big to little endian
-+	 */
-+	tmp32 = simple_strtoul(uuid_str, NULL, 16);
-+	memcpy(uuid_bin, &tmp32, 4);
-+
-+	/*
-+	 * reverse bytes from big to little endian
-+	 */
-+	tmp16 = simple_strtoul(uuid_str + 9, NULL, 16);
-+	memcpy(uuid_bin + 4, &tmp16, 2);
-+
-+	/*
-+	 * reverse bytes from big to little endian
-+	 */
-+	tmp16 = simple_strtoul(uuid_str + 14, NULL, 16);
-+	memcpy(uuid_bin + 6, &tmp16, 2);
-+
-+	/*
-+	 * reverse bytes from big to little endian
-+	 */
-+	tmp16 = simple_strtoul(uuid_str + 19, NULL, 16);
-+	memcpy(uuid_bin + 8, &tmp16, 2);
-+
-+	/*
-+	 * reverse bytes from big to little endian
-+	 */
-+	tmp64 = simple_strtoull(uuid_str + 24, NULL, 16);
-+	memcpy(uuid_bin + 10, (char *)&tmp64, 6);
-+
-+	return 0;
-+}
-+
- /*
-  * uuid_bin_to_str() - convert big endian binary data to string UUID or GUID.
-  *
--- 
-2.17.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0014-arm_ffa-introduce-FF-A-MM-communication.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0009-arm_ffa-efi-introduce-FF-A-MM-communication.patch
similarity index 61%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0014-arm_ffa-introduce-FF-A-MM-communication.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0009-arm_ffa-efi-introduce-FF-A-MM-communication.patch
index 04e5557..e9ffd6b 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0014-arm_ffa-introduce-FF-A-MM-communication.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0009-arm_ffa-efi-introduce-FF-A-MM-communication.patch
@@ -1,12 +1,10 @@
-From b3c7d84dcde6ee1cbc13e10664d24ffa220f5fb3 Mon Sep 17 00:00:00 2001
+From cefc1d101c62e62e66f9cbf1775defde7d2c3d27 Mon Sep 17 00:00:00 2001
 From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
 Date: Mon, 15 Aug 2022 15:12:49 +0100
-Subject: [PATCH 14/26] arm_ffa: introduce FF-A MM communication
+Subject: [PATCH 09/25] arm_ffa: efi: introduce FF-A MM communication
 
 Add MM communication support using FF-A transport
 
-Access an SP's service through EFI MM communication protocol.
-
 This feature allows accessing MM partitions services through
 EFI MM communication protocol. MM partitions such as StandAlonneMM
 or smm-gateway secure partitions which reside in secure world.
@@ -26,18 +24,41 @@
 The response data is copied back to the communication buffer and
 consumed by the EFI subsystem.
 
-FF-A driver private data is copied to EFI runtime section at
-ExitBootServices(). This garantees secure world partitions data are
-available at EFI runtime level.
+MM communication protocol supports FF-A 64-bit direct messaging.
 
 Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
 Signed-off-by: Gowtham Suresh Kumar <gowtham.sureshkumar@arm.com>
-Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20220926101723.9965-1-abdellatif.elkhlifi@arm.com/]
----
+Cc: Tom Rini <trini@konsulko.com>
+Cc: Simon Glass <sjg@chromium.org>
+Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
+Cc: Jens Wiklander <jens.wiklander@linaro.org>
+Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20221122131751.22747-1-abdellatif.elkhlifi@arm.com/]
 
 Changelog:
 ===============
 
+v8:
+
+* isolate the compilation choices between FF-A and OP-TEE
+* update partition_info_get() second argument to be an SP count
+* pass NULL device pointer to the FF-A bus discovery and operations
+
+v7:
+
+* set the MM door bell event to use 64-bit direct messaging
+* issue a compile time error when one of these macros are not found :
+  FFA_SHARED_MM_BUFFER_SIZE, FFA_SHARED_MM_BUFFER_OFFSET, FFA_SHARED_MM_BUFFER_ADDR
+* make mm_sp_svc_uuid static
+* replace EINVAL with ENOMEM in ffa_discover_mm_sp_id() when calloc() fails
+* improve use of unmap_sysmem() in ffa_mm_communicate()
+
+v6:
+
+* add FF-A runtime discovery at MM communication level
+* drop EFI runtime support for FF-A MM communication
+* revert the changes in include/mm_communication.h for
+  efi_mm_communicate_header and smm_variable_access structures
+
 v4:
 
 * use the new FF-A driver interfaces
@@ -45,7 +66,7 @@
 * copy FF-A driver private data to EFI runtime section at
   ExitBootServices()
 * drop use of FFA_ERR_STAT_SUCCESS error code
-* replace EFI_BUFFER_TOO_SMALL by EFI_OUT_OF_RESOURCES
+* replace EFI_BUFFER_TOO_SMALL with EFI_OUT_OF_RESOURCES
   in ffa_mm_communicate(). No need for efi_memcpy_runtime() anymore
 * revert the error log in mm_communicate() in case of failure
 * remove packed attribute from efi_mm_communicate_header and
@@ -58,93 +79,26 @@
 v1:
 
 * introduce FF-A MM communication
-
- arch/arm/cpu/armv8/cache.S        |  16 ++
- arch/arm/cpu/armv8/cache_v8.c     |   3 +-
- include/mm_communication.h        |   7 +-
+---
+ include/mm_communication.h        |   5 +
  lib/efi_loader/Kconfig            |  14 +-
- lib/efi_loader/efi_boottime.c     |   7 +
- lib/efi_loader/efi_variable_tee.c | 261 +++++++++++++++++++++++++++++-
- 6 files changed, 299 insertions(+), 9 deletions(-)
+ lib/efi_loader/efi_variable_tee.c | 294 +++++++++++++++++++++++++++++-
+ 3 files changed, 307 insertions(+), 6 deletions(-)
 
-diff --git a/arch/arm/cpu/armv8/cache.S b/arch/arm/cpu/armv8/cache.S
-index d1cee23437..f69ef64ed6 100644
---- a/arch/arm/cpu/armv8/cache.S
-+++ b/arch/arm/cpu/armv8/cache.S
-@@ -21,7 +21,11 @@
-  * x1: 0 clean & invalidate, 1 invalidate only
-  * x2~x9: clobbered
-  */
-+#ifdef CONFIG_EFI_LOADER
-+.pushsection .text.efi_runtime, "ax"
-+#else
- .pushsection .text.__asm_dcache_level, "ax"
-+#endif
- ENTRY(__asm_dcache_level)
- 	lsl	x12, x0, #1
- 	msr	csselr_el1, x12		/* select cache level */
-@@ -65,7 +69,11 @@ ENDPROC(__asm_dcache_level)
-  *
-  * flush or invalidate all data cache by SET/WAY.
-  */
-+#ifdef CONFIG_EFI_LOADER
-+.pushsection .text.efi_runtime, "ax"
-+#else
- .pushsection .text.__asm_dcache_all, "ax"
-+#endif
- ENTRY(__asm_dcache_all)
- 	mov	x1, x0
- 	dsb	sy
-@@ -109,7 +117,11 @@ ENTRY(__asm_flush_dcache_all)
- ENDPROC(__asm_flush_dcache_all)
- .popsection
- 
-+#ifdef CONFIG_EFI_LOADER
-+.pushsection .text.efi_runtime, "ax"
-+#else
- .pushsection .text.__asm_invalidate_dcache_all, "ax"
-+#endif
- ENTRY(__asm_invalidate_dcache_all)
- 	mov	x0, #0x1
- 	b	__asm_dcache_all
-@@ -182,7 +194,11 @@ ENTRY(__asm_invalidate_icache_all)
- ENDPROC(__asm_invalidate_icache_all)
- .popsection
- 
-+#ifdef CONFIG_EFI_LOADER
-+.pushsection .text.efi_runtime, "ax"
-+#else
- .pushsection .text.__asm_invalidate_l3_dcache, "ax"
-+#endif
- WEAK(__asm_invalidate_l3_dcache)
- 	mov	x0, #0			/* return status as success */
- 	ret
-diff --git a/arch/arm/cpu/armv8/cache_v8.c b/arch/arm/cpu/armv8/cache_v8.c
-index e4736e5643..afbc487fa1 100644
---- a/arch/arm/cpu/armv8/cache_v8.c
-+++ b/arch/arm/cpu/armv8/cache_v8.c
-@@ -9,6 +9,7 @@
- 
- #include <common.h>
- #include <cpu_func.h>
-+#include <efi_loader.h>
- #include <hang.h>
- #include <log.h>
- #include <asm/cache.h>
-@@ -445,7 +446,7 @@ __weak void mmu_setup(void)
- /*
-  * Performs a invalidation of the entire data cache at all levels
-  */
--void invalidate_dcache_all(void)
-+void __efi_runtime invalidate_dcache_all(void)
- {
- 	__asm_invalidate_dcache_all();
- 	__asm_invalidate_l3_dcache();
 diff --git a/include/mm_communication.h b/include/mm_communication.h
-index e65fbde60d..32dc5dbac8 100644
+index e65fbde60d..d409bed777 100644
 --- a/include/mm_communication.h
 +++ b/include/mm_communication.h
-@@ -13,6 +13,9 @@
+@@ -6,6 +6,8 @@
+  *  Copyright (c) 2017, Intel Corporation. All rights reserved.
+  *  Copyright (C) 2020 Linaro Ltd. <sughosh.ganu@linaro.org>
+  *  Copyright (C) 2020 Linaro Ltd. <ilias.apalodimas@linaro.org>
++ * (C) Copyright 2022 ARM Limited
++ * Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+  */
+ 
+ #ifndef _MM_COMMUNICATION_H_
+@@ -13,6 +15,9 @@
  
  #include <part_efi.h>
  
@@ -154,29 +108,11 @@
  /*
   * Interface to the pseudo Trusted Application (TA), which provides a
   * communication channel with the Standalone MM (Management Mode)
-@@ -43,7 +46,7 @@
-  * To avoid confusion in interpreting frames, the communication buffer should
-  * always begin with efi_mm_communicate_header.
-  */
--struct __packed efi_mm_communicate_header {
-+struct efi_mm_communicate_header {
- 	efi_guid_t header_guid;
- 	size_t     message_len;
- 	u8         data[];
-@@ -145,7 +148,7 @@ struct smm_variable_communicate_header {
-  * Defined in EDK2 as SMM_VARIABLE_COMMUNICATE_ACCESS_VARIABLE.
-  *
-  */
--struct smm_variable_access {
-+struct __packed smm_variable_access {
- 	efi_guid_t  guid;
- 	efi_uintn_t data_size;
- 	efi_uintn_t name_size;
 diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
-index e3f2402d0e..2a6d70f862 100644
+index b8fb2701a7..d292f57244 100644
 --- a/lib/efi_loader/Kconfig
 +++ b/lib/efi_loader/Kconfig
-@@ -60,13 +60,23 @@ config EFI_VARIABLE_FILE_STORE
+@@ -61,13 +61,23 @@ config EFI_VARIABLE_FILE_STORE
  	  stored as file /ubootefi.var on the EFI system partition.
  
  config EFI_MM_COMM_TEE
@@ -202,29 +138,24 @@
  config EFI_VARIABLE_NO_STORE
  	bool "Don't persist non-volatile UEFI variables"
  	help
-diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
-index 8fa9a58d76..cede7826bd 100644
---- a/lib/efi_loader/efi_boottime.c
-+++ b/lib/efi_loader/efi_boottime.c
-@@ -2185,6 +2185,13 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
- 			debug("[efi_boottime][INFO]: FF-A RX/TX buffers unmapped\n");
- #endif
- 
-+#if CONFIG_IS_ENABLED(ARM_FFA_EFI_RUNTIME_MODE) && !CONFIG_IS_ENABLED(SANDBOX_FFA)
-+		if (ffa_copy_runtime_data())
-+			printf("ERROR: EFI: FFA: copying runtime data\n");
-+		else
-+			printf("INFO: EFI: FFA: runtime data copied\n");
-+#endif
-+
- 	/* Patch out unsupported runtime function */
- 	efi_runtime_detach();
- 
 diff --git a/lib/efi_loader/efi_variable_tee.c b/lib/efi_loader/efi_variable_tee.c
-index dfef18435d..7d9d577281 100644
+index dfef18435d..3933a24e8c 100644
 --- a/lib/efi_loader/efi_variable_tee.c
 +++ b/lib/efi_loader/efi_variable_tee.c
-@@ -15,6 +15,36 @@
+@@ -4,9 +4,12 @@
+  *
+  *  Copyright (C) 2019 Linaro Ltd. <sughosh.ganu@linaro.org>
+  *  Copyright (C) 2019 Linaro Ltd. <ilias.apalodimas@linaro.org>
++ *  Copyright (C) 2022 ARM Limited
++ *  Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+  */
+ 
+ #include <common.h>
++#include <dm.h>
+ #include <efi.h>
+ #include <efi_api.h>
+ #include <efi_loader.h>
+@@ -15,6 +18,36 @@
  #include <malloc.h>
  #include <mm_communication.h>
  
@@ -235,33 +166,33 @@
 +#include <mapmem.h>
 +
 +#ifndef FFA_SHARED_MM_BUFFER_SIZE
-+#warning "FFA_SHARED_MM_BUFFER_SIZE must be defined in include/configs/<board>.h"
++#error "FFA_SHARED_MM_BUFFER_SIZE must be defined in include/configs/<board>.h"
 +#define FFA_SHARED_MM_BUFFER_SIZE 0
 +#endif
 +
 +#ifndef FFA_SHARED_MM_BUFFER_OFFSET
-+#warning "FFA_SHARED_MM_BUFFER_OFFSET must be defined in include/configs/<board>.h"
++#error "FFA_SHARED_MM_BUFFER_OFFSET must be defined in include/configs/<board>.h"
 +#define FFA_SHARED_MM_BUFFER_OFFSET 0
 +#endif
 +
 +#ifndef FFA_SHARED_MM_BUFFER_ADDR
-+#warning "FFA_SHARED_MM_BUFFER_ADDR must be defined in include/configs/<board>.h"
++#error "FFA_SHARED_MM_BUFFER_ADDR must be defined in include/configs/<board>.h"
 +#define FFA_SHARED_MM_BUFFER_ADDR 0
 +#endif
 +
 +/* MM return codes */
 +#define MM_SUCCESS (0)
 +
-+const char *mm_sp_svc_uuid = MM_SP_UUID;
++static const char *mm_sp_svc_uuid = MM_SP_UUID;
 +
-+static __efi_runtime_data u16 mm_sp_id;
++static u16 mm_sp_id;
 +
 +#endif
 +
  extern struct efi_var_file __efi_runtime_data *efi_var_buf;
  static efi_uintn_t max_buffer_size;	/* comm + var + func + data */
  static efi_uintn_t max_payload_size;	/* func + data */
-@@ -24,6 +54,7 @@ struct mm_connection {
+@@ -24,6 +57,7 @@ struct mm_connection {
  	u32 session;
  };
  
@@ -269,7 +200,7 @@
  /**
   * get_connection() - Retrieve OP-TEE session for a specific UUID.
   *
-@@ -143,16 +174,227 @@ static efi_status_t optee_mm_communicate(void *comm_buf, ulong dsize)
+@@ -143,13 +177,248 @@ static efi_status_t optee_mm_communicate(void *comm_buf, ulong dsize)
  
  	return ret;
  }
@@ -290,7 +221,7 @@
 + *
 + * 0 on success
 + */
-+static int __efi_runtime ffa_notify_mm_sp(void)
++static int ffa_notify_mm_sp(void)
 +{
 +	struct ffa_send_direct_data msg = {0};
 +	int ret;
@@ -301,7 +232,7 @@
 +
 +	msg.data0 = FFA_SHARED_MM_BUFFER_OFFSET; /* x3 */
 +
-+	ret = ffa_bus_ops_get()->sync_send_receive(mm_sp_id, &msg);
++	ret = ffa_bus_ops_get()->sync_send_receive(NULL, mm_sp_id, &msg, 1);
 +	if (ret != 0)
 +		return ret;
 +
@@ -330,7 +261,7 @@
 + */
 +static int ffa_discover_mm_sp_id(void)
 +{
-+	u32 count = 0, size = 0;
++	u32 count = 0;
 +	int ret;
 +	struct ffa_partition_info *parts_info;
 +
@@ -340,7 +271,7 @@
 +	/*
 +	 * get from the driver the count of the SPs matching the UUID
 +	 */
-+	ret = ffa_bus_ops_get()->partition_info_get(mm_sp_svc_uuid, &count, NULL);
++	ret = ffa_bus_ops_get()->partition_info_get(NULL, mm_sp_svc_uuid, &count, NULL);
 +	if (ret != 0) {
 +		log_err("EFI: Failure in querying partitions count (error code: %d)\n", ret);
 +		return ret;
@@ -358,18 +289,16 @@
 +
 +	log_info("EFI: Pre-allocating %d partition(s) info structures\n", count);
 +
-+	parts_info = calloc(count, sizeof(struct ffa_partition_info));
++	parts_info = calloc(count, sizeof(*parts_info));
 +	if (!parts_info)
-+		return -EINVAL;
-+
-+	size = count * sizeof(struct ffa_partition_info);
++		return -ENOMEM;
 +
 +	/*
 +	 * ask the driver to fill the
 +	 * buffer with the SPs info
 +	 */
-+	ret = ffa_bus_ops_get()->partition_info_get(mm_sp_svc_uuid, &size, parts_info);
-+	if (ret != 0) {
++	ret = ffa_bus_ops_get()->partition_info_get(NULL, mm_sp_svc_uuid, &count, parts_info);
++	if (ret) {
 +		log_err("EFI: Failure in querying partition(s) info (error code: %d)\n", ret);
 +		free(parts_info);
 +		return ret;
@@ -404,10 +333,11 @@
 + *
 + * EFI status code
 + */
-+static efi_status_t __efi_runtime ffa_mm_communicate(void *comm_buf, ulong comm_buf_size)
++static efi_status_t ffa_mm_communicate(void *comm_buf, ulong comm_buf_size)
 +{
 +	ulong tx_data_size;
 +	int ffa_ret;
++	efi_status_t efi_ret;
 +	struct efi_mm_communicate_header *mm_hdr;
 +	void *virt_shared_buf;
 +
@@ -429,7 +359,7 @@
 +	/* Copy the data to the shared buffer */
 +
 +	virt_shared_buf = (void *)map_sysmem((phys_addr_t)FFA_SHARED_MM_BUFFER_ADDR, 0);
-+	efi_memcpy_runtime(virt_shared_buf, comm_buf, tx_data_size);
++	memcpy(virt_shared_buf, comm_buf, tx_data_size);
 +
 +	/*
 +	 * The secure world might have cache disabled for
@@ -444,8 +374,6 @@
 +	/* Announce there is data in the shared buffer */
 +
 +	ffa_ret = ffa_notify_mm_sp();
-+	if (ffa_ret)
-+		unmap_sysmem(virt_shared_buf);
 +
 +	switch (ffa_ret) {
 +	case 0:
@@ -457,30 +385,57 @@
 +			sizeof(size_t);
 +
 +		if (rx_data_size > comm_buf_size) {
-+			unmap_sysmem(virt_shared_buf);
-+			return EFI_OUT_OF_RESOURCES;
++			efi_ret = EFI_OUT_OF_RESOURCES;
++			break;
 +		}
 +
-+		efi_memcpy_runtime(comm_buf, virt_shared_buf, rx_data_size);
-+		unmap_sysmem(virt_shared_buf);
-+
-+		return EFI_SUCCESS;
++		memcpy(comm_buf, virt_shared_buf, rx_data_size);
++		efi_ret = EFI_SUCCESS;
++		break;
 +	}
 +	case -EINVAL:
-+		return EFI_DEVICE_ERROR;
++		efi_ret = EFI_DEVICE_ERROR;
++		break;
 +	case -EPERM:
-+		return EFI_INVALID_PARAMETER;
++		efi_ret = EFI_INVALID_PARAMETER;
++		break;
 +	case -EACCES:
-+		return EFI_ACCESS_DENIED;
++		efi_ret = EFI_ACCESS_DENIED;
++		break;
 +	case -EBUSY:
-+		return EFI_OUT_OF_RESOURCES;
++		efi_ret = EFI_OUT_OF_RESOURCES;
++		break;
 +	default:
-+		return EFI_ACCESS_DENIED;
++		efi_ret = EFI_ACCESS_DENIED;
 +	}
++
++	unmap_sysmem(virt_shared_buf);
++	return efi_ret;
 +}
 +#endif
 +
 +/**
++ * select_ffa_mm_comms() - checks FF-A support availability
++ *
++ * Making sure FF-A is compiled in. If that's the case try to discover
++ * the FF-A bus.
++ *
++ * Return:
++ *
++ * 0: FF-A ready for use. Otherwise, failure
++ */
++static efi_status_t select_ffa_mm_comms(void)
++{
++	efi_status_t ret = EFI_UNSUPPORTED;
++#if (IS_ENABLED(CONFIG_ARM_FFA_TRANSPORT))
++	ret = ffa_bus_discover(NULL);
++	if (ret)
++		ret = EFI_NOT_READY;
++#endif
++	return ret;
++}
++
++/**
 + * mm_communicate() - Adjust the communication buffer to the MM SP and send
   * it to OP-TEE
   *
@@ -488,31 +443,34 @@
 + * @comm_buf:		locally allocated communication buffer
   * @dsize:		buffer size
 + *
-+ * The MM SP (also called partition) can be StandAlonneMM or smm-gateway.
++ * The SP (also called partition) can be any MM SP such as  StandAlonneMM or smm-gateway.
 + * The comm_buf format is the same for both partitions.
 + * When using the u-boot OP-TEE driver, StandAlonneMM is supported.
-+ * When using the u-boot FF-A  driver, StandAlonneMM and smm-gateway are supported.
++ * When using the u-boot FF-A  driver, any MM SP is supported.
 + *
   * Return:		status code
   */
--static efi_status_t mm_communicate(u8 *comm_buf, efi_uintn_t dsize)
-+static efi_status_t __efi_runtime mm_communicate(u8 *comm_buf, efi_uintn_t dsize)
- {
- 	efi_status_t ret;
- 	struct efi_mm_communicate_header *mm_hdr;
-@@ -162,7 +404,11 @@ static efi_status_t mm_communicate(u8 *comm_buf, efi_uintn_t dsize)
+ static efi_status_t mm_communicate(u8 *comm_buf, efi_uintn_t dsize)
+@@ -162,7 +431,17 @@ static efi_status_t mm_communicate(u8 *comm_buf, efi_uintn_t dsize)
  	mm_hdr = (struct efi_mm_communicate_header *)comm_buf;
  	var_hdr = (struct smm_variable_communicate_header *)mm_hdr->data;
  
-+	#if (IS_ENABLED(CONFIG_OPTEE))
- 	ret = optee_mm_communicate(comm_buf, dsize);
-+	#elif (IS_ENABLED(CONFIG_ARM_FFA_TRANSPORT))
-+	ret = ffa_mm_communicate(comm_buf, dsize);
-+	#endif
+-	ret = optee_mm_communicate(comm_buf, dsize);
++	ret = select_ffa_mm_comms();
++	if (ret != EFI_SUCCESS) {
++#if (IS_ENABLED(CONFIG_OPTEE))
++		ret = optee_mm_communicate(comm_buf, dsize);
++#endif
++	} else {
++#if (IS_ENABLED(CONFIG_ARM_FFA_TRANSPORT))
++		ret = ffa_mm_communicate(comm_buf, dsize);
++#endif
++	}
++
  	if (ret != EFI_SUCCESS) {
  		log_err("%s failed!\n", __func__);
  		return ret;
-@@ -258,6 +504,13 @@ efi_status_t EFIAPI get_max_payload(efi_uintn_t *size)
+@@ -258,6 +537,13 @@ efi_status_t EFIAPI get_max_payload(efi_uintn_t *size)
  		goto out;
  	}
  	*size = var_payload->size;
@@ -526,7 +484,7 @@
  	/*
  	 * There seems to be a bug in EDK2 miscalculating the boundaries and
  	 * size checks, so deduct 2 more bytes to fulfill this requirement. Fix
-@@ -697,7 +950,7 @@ void efi_variables_boot_exit_notify(void)
+@@ -697,7 +983,7 @@ void efi_variables_boot_exit_notify(void)
  		ret = EFI_NOT_FOUND;
  
  	if (ret != EFI_SUCCESS)
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0010-arm_ffa-efi-corstone1000-enable-MM-communication.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0010-arm_ffa-efi-corstone1000-enable-MM-communication.patch
new file mode 100644
index 0000000..1dfc19b
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0010-arm_ffa-efi-corstone1000-enable-MM-communication.patch
@@ -0,0 +1,76 @@
+From 46cadb787a3b13da39419706fae7d1ba703f4b68 Mon Sep 17 00:00:00 2001
+From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+Date: Fri, 23 Sep 2022 15:17:21 +0100
+Subject: [PATCH 10/25] arm_ffa: efi: corstone1000: enable MM communication
+
+turn on EFI MM communication
+
+On corstone1000 platform MM communication between u-boot
+and the secure world (Optee) is done using the FF-A bus.
+
+Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+Cc: Tom Rini <trini@konsulko.com>
+Cc: Simon Glass <sjg@chromium.org>
+Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
+Cc: Jens Wiklander <jens.wiklander@linaro.org>
+Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20221122131751.22747-1-abdellatif.elkhlifi@arm.com/]
+
+Changelog:
+===============
+
+v8:
+
+* drop OP-TEE configs from Corstone-1000 defconfig
+
+v7:
+
+* improve the definition of FFA_SHARED_MM_BUFFER_ADDR and
+  FFA_SHARED_MM_BUFFER_OFFSET
+* update FFA_SHARED_MM_BUFFER_ADDR value
+
+v6:
+
+* corstone-1000: enable optee driver
+* corstone-1000: remove CONFIG_ARM_FFA_EFI_RUNTIME_MODE from the defconfig
+
+v4:
+
+* corstone-1000: turn on EFI MM communication
+---
+ configs/corstone1000_defconfig | 2 ++
+ include/configs/corstone1000.h | 9 +++++++++
+ 2 files changed, 11 insertions(+)
+
+diff --git a/configs/corstone1000_defconfig b/configs/corstone1000_defconfig
+index ed2e0fe70a..c26f99e7e5 100644
+--- a/configs/corstone1000_defconfig
++++ b/configs/corstone1000_defconfig
+@@ -52,3 +52,5 @@ CONFIG_DM_SERIAL=y
+ CONFIG_USB=y
+ CONFIG_USB_ISP1760=y
+ CONFIG_ERRNO_STR=y
++CONFIG_EFI_MM_COMM_TEE=y
++CONFIG_ARM_FFA_TRANSPORT=y
+diff --git a/include/configs/corstone1000.h b/include/configs/corstone1000.h
+index 8e0230c135..0362d29ac2 100644
+--- a/include/configs/corstone1000.h
++++ b/include/configs/corstone1000.h
+@@ -14,6 +14,15 @@
+ 
+ #include <linux/sizes.h>
+ 
++#define FFA_SHARED_MM_BUFFER_SIZE	SZ_4K /* 4 KB */
++
++/*
++ * shared buffer physical address used for communication between
++ * u-boot and the MM SP
++ */
++#define FFA_SHARED_MM_BUFFER_ADDR	0x02000000UL
++#define FFA_SHARED_MM_BUFFER_OFFSET	0
++
+ #define V2M_BASE		0x80000000
+ 
+ #define CONFIG_PL011_CLOCK	50000000
+-- 
+2.17.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0016-efi-corstone1000-introduce-EFI-capsule-update.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0011-efi-corstone1000-introduce-EFI-capsule-update.patch
similarity index 83%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0016-efi-corstone1000-introduce-EFI-capsule-update.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0011-efi-corstone1000-introduce-EFI-capsule-update.patch
index 291d15d..57f1b9a 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0016-efi-corstone1000-introduce-EFI-capsule-update.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0011-efi-corstone1000-introduce-EFI-capsule-update.patch
@@ -1,7 +1,7 @@
-From 10e155a677192731481ebe7f302e2d9ad790346a Mon Sep 17 00:00:00 2001
+From 7702c4aeda51011be95ecbaab0dc2e7373d04286 Mon Sep 17 00:00:00 2001
 From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Date: Thu, 28 Jul 2022 15:01:55 +0100
-Subject: [PATCH 16/26] efi: corstone1000: introduce EFI capsule update
+Date: Tue, 29 Nov 2022 15:11:27 +0000
+Subject: [PATCH 11/25] efi: corstone1000: introduce EFI capsule update
 
 This commit provides capsule update feature for Corstone1000.
 
@@ -22,15 +22,43 @@
 Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
 Upstream-Status: Pending [Not submitted to upstream yet]
 ---
- include/configs/corstone1000.h |  18 +++++
- include/efi_loader.h           |   4 +-
- lib/efi_loader/efi_boottime.c  |  36 ++++++++++
- lib/efi_loader/efi_capsule.c   | 124 ++++++++++++++++++++++++++++++++-
- lib/efi_loader/efi_setup.c     |  15 ++++
- 5 files changed, 193 insertions(+), 4 deletions(-)
+ board/armltd/corstone1000/corstone1000.c |   4 +
+ configs/corstone1000_defconfig           |   3 +
+ include/configs/corstone1000.h           |  18 ++++
+ include/efi_loader.h                     |   4 +-
+ lib/efi_loader/efi_boottime.c            |  36 +++++++
+ lib/efi_loader/efi_capsule.c             | 124 ++++++++++++++++++++++-
+ lib/efi_loader/efi_setup.c               |  15 +++
+ 7 files changed, 200 insertions(+), 4 deletions(-)
 
+diff --git a/board/armltd/corstone1000/corstone1000.c b/board/armltd/corstone1000/corstone1000.c
+index 4f4b96a095..76816f8f4e 100644
+--- a/board/armltd/corstone1000/corstone1000.c
++++ b/board/armltd/corstone1000/corstone1000.c
+@@ -66,6 +66,10 @@ static struct mm_region corstone1000_mem_map[] = {
+ 
+ struct mm_region *mem_map = corstone1000_mem_map;
+ 
++void set_dfu_alt_info(char *interface, char *devstr)
++{
++}
++
+ int board_init(void)
+ {
+ 	return 0;
+diff --git a/configs/corstone1000_defconfig b/configs/corstone1000_defconfig
+index c26f99e7e5..c72d027711 100644
+--- a/configs/corstone1000_defconfig
++++ b/configs/corstone1000_defconfig
+@@ -54,3 +54,6 @@ CONFIG_USB_ISP1760=y
+ CONFIG_ERRNO_STR=y
+ CONFIG_EFI_MM_COMM_TEE=y
+ CONFIG_ARM_FFA_TRANSPORT=y
++CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
++CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
++CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
 diff --git a/include/configs/corstone1000.h b/include/configs/corstone1000.h
-index 5960c6b4be..fe5ec0adcd 100644
+index 0362d29ac2..4d20090c9b 100644
 --- a/include/configs/corstone1000.h
 +++ b/include/configs/corstone1000.h
 @@ -14,6 +14,24 @@
@@ -59,10 +87,10 @@
  
  /*
 diff --git a/include/efi_loader.h b/include/efi_loader.h
-index 5b41985244..796419b69b 100644
+index 545ba06d94..773c4f6310 100644
 --- a/include/efi_loader.h
 +++ b/include/efi_loader.h
-@@ -984,11 +984,11 @@ extern const struct efi_firmware_management_protocol efi_fmp_fit;
+@@ -993,11 +993,11 @@ extern const struct efi_firmware_management_protocol efi_fmp_fit;
  extern const struct efi_firmware_management_protocol efi_fmp_raw;
  
  /* Capsule update */
@@ -77,10 +105,10 @@
  		efi_uintn_t capsule_count,
  		u64 *maximum_capsule_size,
 diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
-index cede7826bd..9bf2596597 100644
+index 1099ccc800..d9eed33ac8 100644
 --- a/lib/efi_loader/efi_boottime.c
 +++ b/lib/efi_loader/efi_boottime.c
-@@ -2095,6 +2095,33 @@ static void efi_exit_caches(void)
+@@ -2103,6 +2103,33 @@ static void efi_exit_caches(void)
  #endif
  }
  
@@ -106,7 +134,7 @@
 +	msg.data0 = CORSTONE1000_SEPROXY_UPDATE_SVC_ID; /* x3 */
 +	msg.data2 = CORSTONE1000_KERNEL_STARTED_EVT; /* x5 */
 +
-+	return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg);
++	return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg, 0);
 +}
 +
 +#endif
@@ -114,7 +142,7 @@
  /**
   * efi_exit_boot_services() - stop all boot services
   * @image_handle: handle of the loaded image
-@@ -2210,6 +2237,15 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
+@@ -2209,6 +2236,15 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
  	/* Recalculate CRC32 */
  	efi_update_table_header_crc32(&systab.hdr);
  
@@ -131,7 +159,7 @@
  	efi_set_watchdog(0);
  	WATCHDOG_RESET();
 diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
-index a6b98f066a..c0f3427a60 100644
+index a6b98f066a..636b61f0ad 100644
 --- a/lib/efi_loader/efi_capsule.c
 +++ b/lib/efi_loader/efi_capsule.c
 @@ -25,6 +25,14 @@
@@ -221,7 +249,7 @@
 +	msg.data1 = capsule_image_size; /* x4 */
 +	msg.data2 = CORSTONE1000_BUFFER_READY_EVT; /* x5 */
 +
-+	return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg);
++	return ffa_bus_ops_get()->sync_send_receive(NULL, CORSTONE1000_SEPROXY_PART_ID, &msg, 0);
 +}
 +#endif
 +
@@ -301,7 +329,7 @@
  		efi_uintn_t capsule_count,
  		u64 *maximum_capsule_size,
 diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c
-index 492ecf4cb1..bfd4687e10 100644
+index c633fcd91e..443f409906 100644
 --- a/lib/efi_loader/efi_setup.c
 +++ b/lib/efi_loader/efi_setup.c
 @@ -16,6 +16,13 @@
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0018-arm-corstone1000-fix-unrecognized-filesystem-type.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0012-arm-corstone1000-fix-unrecognized-filesystem-type.patch
similarity index 86%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0018-arm-corstone1000-fix-unrecognized-filesystem-type.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0012-arm-corstone1000-fix-unrecognized-filesystem-type.patch
index 1a28d6c..9b12ee9 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0018-arm-corstone1000-fix-unrecognized-filesystem-type.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0012-arm-corstone1000-fix-unrecognized-filesystem-type.patch
@@ -1,7 +1,7 @@
-From 3f8d35ccbb0d59d4820b81f7f939ada95b3cd92c Mon Sep 17 00:00:00 2001
+From 71162273e8a6b28a6aaf8635cff752419d09a293 Mon Sep 17 00:00:00 2001
 From: Rui Miguel Silva <rui.silva@linaro.org>
 Date: Fri, 4 Mar 2022 15:56:09 +0000
-Subject: [PATCH 18/26] arm: corstone1000: fix unrecognized filesystem type
+Subject: [PATCH 12/25] arm: corstone1000: fix unrecognized filesystem type
 
 Some usb sticks are not recognized by usb, just add a
 delay before checking status.
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0019-efi_capsule-corstone1000-pass-interface-id-and-buffe.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0013-efi_capsule-corstone1000-pass-interface-id-and-buffe.patch
similarity index 89%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0019-efi_capsule-corstone1000-pass-interface-id-and-buffe.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0013-efi_capsule-corstone1000-pass-interface-id-and-buffe.patch
index 3d8a6216..9334b80 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0019-efi_capsule-corstone1000-pass-interface-id-and-buffe.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0013-efi_capsule-corstone1000-pass-interface-id-and-buffe.patch
@@ -1,7 +1,7 @@
-From 3bb5826af8e3891617d41a30419de0ce089f9fc3 Mon Sep 17 00:00:00 2001
+From f8ccaf53dec63d57bab2f86b822f9fb3ed06d132 Mon Sep 17 00:00:00 2001
 From: Vishnu Banavath <vishnu.banavath@arm.com>
 Date: Fri, 10 Dec 2021 20:03:35 +0000
-Subject: [PATCH 19/26] efi_capsule: corstone1000: pass interface id and buffer
+Subject: [PATCH 13/25] efi_capsule: corstone1000: pass interface id and buffer
  event id using register w4
 
 Initially the interface/event IDs are passed to the SP using register
@@ -23,7 +23,7 @@
  2 files changed, 13 insertions(+), 4 deletions(-)
 
 diff --git a/include/configs/corstone1000.h b/include/configs/corstone1000.h
-index 2d89a8966e..4637dd5d5d 100644
+index 4d20090c9b..77f96e87a1 100644
 --- a/include/configs/corstone1000.h
 +++ b/include/configs/corstone1000.h
 @@ -24,6 +24,12 @@
@@ -40,7 +40,7 @@
  #define CORSTONE1000_CAPSULE_BUFFER_SIZE	(8192) /* 32 MB */
  
 diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
-index c0f3427a60..bf8bd68256 100644
+index 636b61f0ad..c22b9b5aa0 100644
 --- a/lib/efi_loader/efi_capsule.c
 +++ b/lib/efi_loader/efi_capsule.c
 @@ -28,6 +28,8 @@
@@ -67,7 +67,7 @@
 +	msg.data1 = PREP_SEPROXY_SVC_ID(CORSTONE1000_SEPROXY_UPDATE_SVC_ID) |
 +		PREP_SEPROXY_EVT(CORSTONE1000_BUFFER_READY_EVT); /* w4 */
  
- 	return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg);
+ 	return ffa_bus_ops_get()->sync_send_receive(NULL, CORSTONE1000_SEPROXY_PART_ID, &msg, 0);
  }
 -- 
 2.17.1
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0020-efi_boottime-corstone1000-pass-interface-id-and-kern.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0014-efi_boottime-corstone1000-pass-interface-id-and-kern.patch
similarity index 86%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0020-efi_boottime-corstone1000-pass-interface-id-and-kern.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0014-efi_boottime-corstone1000-pass-interface-id-and-kern.patch
index db2ff32..a8d2c81 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0020-efi_boottime-corstone1000-pass-interface-id-and-kern.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0014-efi_boottime-corstone1000-pass-interface-id-and-kern.patch
@@ -1,7 +1,7 @@
-From 668fe40ccb0db5542ef333cd4655511dbb8572f9 Mon Sep 17 00:00:00 2001
+From e4e7ccc77a4e6930a768cc1c1f6daf8907ac16c3 Mon Sep 17 00:00:00 2001
 From: Vishnu Banavath <vishnu.banavath@arm.com>
 Date: Fri, 10 Dec 2021 20:10:41 +0000
-Subject: [PATCH 20/26] efi_boottime: corstone1000: pass interface id and
+Subject: [PATCH 14/25] efi_boottime: corstone1000: pass interface id and
  kernel event id using register w4
 
 Initially the interface/event IDs are passed to the SP using register
@@ -22,10 +22,10 @@
  1 file changed, 10 insertions(+), 3 deletions(-)
 
 diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
-index 9bf2596597..de815484d2 100644
+index d9eed33ac8..88f2d050be 100644
 --- a/lib/efi_loader/efi_boottime.c
 +++ b/lib/efi_loader/efi_boottime.c
-@@ -27,6 +27,11 @@
+@@ -30,6 +30,11 @@
  #include <arm_ffa.h>
  #endif
  
@@ -37,7 +37,7 @@
  DECLARE_GLOBAL_DATA_PTR;
  
  /* Task priority level */
-@@ -2112,10 +2117,12 @@ static int efi_corstone1000_kernel_started_event(void)
+@@ -2120,10 +2125,12 @@ static int efi_corstone1000_kernel_started_event(void)
  	log_debug("[%s]\n", __func__);
  
  	/*
@@ -51,7 +51,7 @@
 +	msg.data1 = PREP_SEPROXY_SVC_ID(CORSTONE1000_SEPROXY_UPDATE_SVC_ID) |
 +		PREP_SEPROXY_EVT(CORSTONE1000_KERNEL_STARTED_EVT); /* w4 */
  
- 	return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg);
+ 	return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg, 0);
  }
 -- 
 2.17.1
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0015-arm_ffa-corstone1000-enable-FF-A-and-MM-support.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0015-arm_ffa-corstone1000-enable-FF-A-and-MM-support.patch
deleted file mode 100644
index dcc3ea7..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0015-arm_ffa-corstone1000-enable-FF-A-and-MM-support.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From 01d1487cebc37834e2a5d259e0417a610539a0f5 Mon Sep 17 00:00:00 2001
-From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Date: Thu, 9 Jun 2022 12:47:35 +0100
-Subject: [PATCH 15/26] arm_ffa: corstone1000: enable FF-A and MM support
-
-This commit allows corstone1000 platform to perform
-MM communication between u-boot and the secure world
-using FF-A transport.
-
-Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
-Upstream-Status: Submitted [cover letter: https://lore.kernel.org/all/20220926101723.9965-1-abdellatif.elkhlifi@arm.com/]
----
- configs/corstone1000_defconfig | 2 ++
- include/configs/corstone1000.h | 9 +++++++++
- 2 files changed, 11 insertions(+)
-
-diff --git a/configs/corstone1000_defconfig b/configs/corstone1000_defconfig
-index e573fe6fe6..c299dda49f 100644
---- a/configs/corstone1000_defconfig
-+++ b/configs/corstone1000_defconfig
-@@ -44,6 +44,8 @@ CONFIG_USB=y
- CONFIG_DM_USB=y
- CONFIG_USB_ISP1760=y
- CONFIG_USB_STORAGE=y
-+CONFIG_ARM_FFA_TRANSPORT=y
-+CONFIG_ARM_FFA_EFI_RUNTIME_MODE=y
- CONFIG_EFI_MM_COMM_TEE=y
- # CONFIG_OPTEE is not set
- # CONFIG_GENERATE_SMBIOS_TABLE is not set
-diff --git a/include/configs/corstone1000.h b/include/configs/corstone1000.h
-index 8ba0effb0a..5960c6b4be 100644
---- a/include/configs/corstone1000.h
-+++ b/include/configs/corstone1000.h
-@@ -14,6 +14,15 @@
- 
- #include <linux/sizes.h>
- 
-+#define FFA_SHARED_MM_BUFFER_SIZE	SZ_4K /* 4 KB */
-+
-+/*
-+ * shared buffer physical address used for communication between
-+ * u-boot and the MM SP
-+ */
-+#define FFA_SHARED_MM_BUFFER_ADDR	(0x023F8000)
-+#define FFA_SHARED_MM_BUFFER_OFFSET	(0)
-+
- #define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_SDRAM_BASE + 0x03f00000)
- #define CONFIG_SKIP_LOWLEVEL_INIT
- 
--- 
-2.17.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0021-efi_loader-corstone1000-remove-guid-check-from-corst.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0015-efi_loader-corstone1000-remove-guid-check-from-corst.patch
similarity index 90%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0021-efi_loader-corstone1000-remove-guid-check-from-corst.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0015-efi_loader-corstone1000-remove-guid-check-from-corst.patch
index 38ef1c0..d028e3e 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0021-efi_loader-corstone1000-remove-guid-check-from-corst.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0015-efi_loader-corstone1000-remove-guid-check-from-corst.patch
@@ -1,7 +1,7 @@
-From 4d7fd850347dbea10a73cd5cf6eb518607118414 Mon Sep 17 00:00:00 2001
+From caf6c4ec65fd0a5e945dd790f2369acd163d1daf Mon Sep 17 00:00:00 2001
 From: Vishnu Banavath <vishnu.banavath@arm.com>
 Date: Sat, 11 Dec 2021 13:23:55 +0000
-Subject: [PATCH 21/26] efi_loader: corstone1000: remove guid check from
+Subject: [PATCH 15/25] efi_loader: corstone1000: remove guid check from
  corstone1000 config option
 
 Use generic fmp guid and no separte check is required for
@@ -15,7 +15,7 @@
  1 file changed, 1 insertion(+), 15 deletions(-)
 
 diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
-index bf8bd68256..5db9d30d53 100644
+index c22b9b5aa0..0eee3c2d4c 100644
 --- a/lib/efi_loader/efi_capsule.c
 +++ b/lib/efi_loader/efi_capsule.c
 @@ -646,12 +646,6 @@ efi_status_t __efi_runtime EFIAPI efi_update_capsule(
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0022-efi_loader-populate-ESRT-table-if-EFI_ESRT-config-op.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0016-efi_loader-populate-ESRT-table-if-EFI_ESRT-config-op.patch
similarity index 86%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0022-efi_loader-populate-ESRT-table-if-EFI_ESRT-config-op.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0016-efi_loader-populate-ESRT-table-if-EFI_ESRT-config-op.patch
index 3cedaa7..934476b 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0022-efi_loader-populate-ESRT-table-if-EFI_ESRT-config-op.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0016-efi_loader-populate-ESRT-table-if-EFI_ESRT-config-op.patch
@@ -1,7 +1,7 @@
-From 720e5ada733b0f7b019baaec57d74603a9dff67e Mon Sep 17 00:00:00 2001
+From 41a2c8bb23e587e9abe7b8bc62db1a93c0e5d841 Mon Sep 17 00:00:00 2001
 From: Vishnu Banavath <vishnu.banavath@arm.com>
 Date: Fri, 17 Dec 2021 19:49:02 +0000
-Subject: [PATCH 22/26] efi_loader: populate ESRT table if EFI_ESRT config
+Subject: [PATCH 16/25] efi_loader: populate ESRT table if EFI_ESRT config
  option is set
 
 This change is to call efi_esrt_populate function if CONFIG_EFI_ESRT
@@ -15,7 +15,7 @@
  1 file changed, 7 insertions(+)
 
 diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
-index 5db9d30d53..65e2fc8296 100644
+index 0eee3c2d4c..94dc0dfe3d 100644
 --- a/lib/efi_loader/efi_capsule.c
 +++ b/lib/efi_loader/efi_capsule.c
 @@ -668,6 +668,13 @@ efi_status_t __efi_runtime EFIAPI efi_update_capsule(
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0017-corstone1000-Update-FFA-shared-buffer-address.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0017-corstone1000-Update-FFA-shared-buffer-address.patch
deleted file mode 100644
index 7f5464c..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0017-corstone1000-Update-FFA-shared-buffer-address.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From a84f6be14f1bb31edea987fc02efd5a079a28db1 Mon Sep 17 00:00:00 2001
-From: Gowtham Suresh Kumar <gowtham.sureshkumar@arm.com>
-Date: Wed, 17 Nov 2021 15:28:06 +0000
-Subject: [PATCH 17/26] corstone1000: Update FFA shared buffer address
-
-FFA shared buffer address changed to 0x02000000.
-
-The existing address 0x023F8000 is currently being used by
-Optee so the virtual address returned to the SMM gateway is 0x0000.
-So the buffer is moved to 0x02000000.
-
-Signed-off-by: Gowtham Suresh Kumar <gowtham.sureshkumar@arm.com>
-Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
-Upstream-Status: Pending [Not submitted to upstream yet]
----
- include/configs/corstone1000.h | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/include/configs/corstone1000.h b/include/configs/corstone1000.h
-index fe5ec0adcd..2d89a8966e 100644
---- a/include/configs/corstone1000.h
-+++ b/include/configs/corstone1000.h
-@@ -38,7 +38,7 @@
-  * shared buffer physical address used for communication between
-  * u-boot and the MM SP
-  */
--#define FFA_SHARED_MM_BUFFER_ADDR	(0x023F8000)
-+#define FFA_SHARED_MM_BUFFER_ADDR	(0x02000000)
- #define FFA_SHARED_MM_BUFFER_OFFSET	(0)
- 
- #define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_SDRAM_BASE + 0x03f00000)
--- 
-2.17.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0023-efi_firmware-add-get_image_info-for-corstone1000.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0017-efi_firmware-add-get_image_info-for-corstone1000.patch
similarity index 96%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0023-efi_firmware-add-get_image_info-for-corstone1000.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0017-efi_firmware-add-get_image_info-for-corstone1000.patch
index f6aafa3..2c0ad25 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0023-efi_firmware-add-get_image_info-for-corstone1000.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0017-efi_firmware-add-get_image_info-for-corstone1000.patch
@@ -1,7 +1,7 @@
-From 2cad562823976134f201d6e2ef187bf103e17d1e Mon Sep 17 00:00:00 2001
+From 323df950c63af6d1a9ba5bd16f4f9d9348e9afc2 Mon Sep 17 00:00:00 2001
 From: Vishnu Banavath <vishnu.banavath@arm.com>
 Date: Fri, 17 Dec 2021 19:50:25 +0000
-Subject: [PATCH 23/26] efi_firmware: add get_image_info for corstone1000
+Subject: [PATCH 17/25] efi_firmware: add get_image_info for corstone1000
 
 This change is to populate get_image_info which eventually
 will be populated in ESRT table
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0024-efi_loader-send-bootcomplete-message-to-secure-encla.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0018-efi_loader-send-bootcomplete-message-to-secure-encla.patch
similarity index 91%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0024-efi_loader-send-bootcomplete-message-to-secure-encla.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0018-efi_loader-send-bootcomplete-message-to-secure-encla.patch
index 35f5cb2..e95609a 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0024-efi_loader-send-bootcomplete-message-to-secure-encla.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0018-efi_loader-send-bootcomplete-message-to-secure-encla.patch
@@ -1,7 +1,7 @@
-From 709e5d8ff07474f840f1d34d3077135f77795452 Mon Sep 17 00:00:00 2001
+From 7bf9c380c63726b7de8316e9c743cb06c9bc7842 Mon Sep 17 00:00:00 2001
 From: Vishnu Banavath <vishnu.banavath@arm.com>
 Date: Mon, 15 Aug 2022 15:46:18 +0100
-Subject: [PATCH 24/26] efi_loader: send bootcomplete message to secure enclave
+Subject: [PATCH 18/25] efi_loader: send bootcomplete message to secure enclave
 
 On corstone1000 platform, Secure Enclave will be expecting
 an event from uboot when it performs capsule update. Previously,
@@ -21,7 +21,7 @@
  4 files changed, 41 insertions(+), 45 deletions(-)
 
 diff --git a/include/configs/corstone1000.h b/include/configs/corstone1000.h
-index 4637dd5d5d..333b1d93b6 100644
+index 77f96e87a1..4cf1170ffb 100644
 --- a/include/configs/corstone1000.h
 +++ b/include/configs/corstone1000.h
 @@ -22,7 +22,7 @@
@@ -34,10 +34,10 @@
  #define PREP_SEPROXY_SVC_ID_MASK	GENMASK(31, 16)
  #define PREP_SEPROXY_SVC_ID(x)	 (FIELD_PREP(PREP_SEPROXY_SVC_ID_MASK, (x)))
 diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
-index de815484d2..cede7826bd 100644
+index 88f2d050be..1099ccc800 100644
 --- a/lib/efi_loader/efi_boottime.c
 +++ b/lib/efi_loader/efi_boottime.c
-@@ -27,11 +27,6 @@
+@@ -30,11 +30,6 @@
  #include <arm_ffa.h>
  #endif
  
@@ -49,7 +49,7 @@
  DECLARE_GLOBAL_DATA_PTR;
  
  /* Task priority level */
-@@ -2100,35 +2095,6 @@ static void efi_exit_caches(void)
+@@ -2108,35 +2103,6 @@ static void efi_exit_caches(void)
  #endif
  }
  
@@ -77,7 +77,7 @@
 -	msg.data1 = PREP_SEPROXY_SVC_ID(CORSTONE1000_SEPROXY_UPDATE_SVC_ID) |
 -		PREP_SEPROXY_EVT(CORSTONE1000_KERNEL_STARTED_EVT); /* w4 */
 -
--	return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg);
+-	return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg, 0);
 -}
 -
 -#endif
@@ -85,7 +85,7 @@
  /**
   * efi_exit_boot_services() - stop all boot services
   * @image_handle: handle of the loaded image
-@@ -2244,15 +2210,6 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
+@@ -2243,15 +2209,6 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
  	/* Recalculate CRC32 */
  	efi_update_table_header_crc32(&systab.hdr);
  
@@ -115,7 +115,7 @@
  	}
  
 diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c
-index bfd4687e10..6c9e14c37e 100644
+index 443f409906..c154eb0e9d 100644
 --- a/lib/efi_loader/efi_setup.c
 +++ b/lib/efi_loader/efi_setup.c
 @@ -17,6 +17,9 @@
@@ -156,7 +156,7 @@
 +	msg.data1 = PREP_SEPROXY_SVC_ID(CORSTONE1000_SEPROXY_UPDATE_SVC_ID) |
 +			PREP_SEPROXY_EVT(CORSTONE1000_UBOOT_EFI_STARTED_EVT); /* w4 */
 +
-+	return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg);
++	return ffa_bus_ops_get()->sync_send_receive(NULL, CORSTONE1000_SEPROXY_PART_ID, &msg, 0);
 +}
 +#endif
 +
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0025-efi_loader-fix-null-pointer-exception-with-get_image.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0019-efi_loader-fix-null-pointer-exception-with-get_image.patch
similarity index 94%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0025-efi_loader-fix-null-pointer-exception-with-get_image.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0019-efi_loader-fix-null-pointer-exception-with-get_image.patch
index dc9063a..e9bf495 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0025-efi_loader-fix-null-pointer-exception-with-get_image.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0019-efi_loader-fix-null-pointer-exception-with-get_image.patch
@@ -1,7 +1,7 @@
-From 456e616401b02a579e9ea5ec3e5ab1d1c884b389 Mon Sep 17 00:00:00 2001
+From 28e7a47c7021b7d321bb6e4dbe1bd7d2ceb8aa6d Mon Sep 17 00:00:00 2001
 From: Vishnu Banavath <vishnu.banavath@arm.com>
 Date: Fri, 14 Jan 2022 15:24:18 +0000
-Subject: [PATCH 25/26] efi_loader: fix null pointer exception with
+Subject: [PATCH 19/25] efi_loader: fix null pointer exception with
  get_image_info
 
 get_img_info API implemented for corstone1000 target does not
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0020-arm-corstone1000-add-mmc-for-fvp.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0020-arm-corstone1000-add-mmc-for-fvp.patch
new file mode 100644
index 0000000..8743259
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0020-arm-corstone1000-add-mmc-for-fvp.patch
@@ -0,0 +1,99 @@
+From d662633cb8e90144969790b8abf047a3f777e47a Mon Sep 17 00:00:00 2001
+From: Rui Miguel Silva <rui.silva@linaro.org>
+Date: Wed, 30 Nov 2022 15:37:22 +0000
+Subject: [PATCH 20/25] arm:corstone1000: add mmc for fvp
+
+Enable support mmc/sdcard for the corstone1000 FVP.
+
+Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
+Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
+Upstream-Status: Pending [Not submitted to upstream yet]
+---
+ board/armltd/corstone1000/corstone1000.c | 28 +++++++++++++++++++-----
+ configs/corstone1000_defconfig           |  8 ++++++-
+ include/configs/corstone1000.h           |  4 +++-
+ 3 files changed, 32 insertions(+), 8 deletions(-)
+
+diff --git a/board/armltd/corstone1000/corstone1000.c b/board/armltd/corstone1000/corstone1000.c
+index 76816f8f4e..d6ca6e8961 100644
+--- a/board/armltd/corstone1000/corstone1000.c
++++ b/board/armltd/corstone1000/corstone1000.c
+@@ -38,19 +38,35 @@ static struct mm_region corstone1000_mem_map[] = {
+ 	}, {
+ 		/* USB */
+ 		.virt = 0x40200000UL,
+-		.phys = 0x40200000UL,
++			.phys = 0x40200000UL,
++			.size = 0x00100000UL,
++			.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
++				PTE_BLOCK_NON_SHARE |
++				PTE_BLOCK_PXN | PTE_BLOCK_UXN
++	}, {
++		/* MMC0 */
++		.virt = 0x40300000UL,
++		.phys = 0x40300000UL,
+ 		.size = 0x00100000UL,
+ 		.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
+-			PTE_BLOCK_NON_SHARE |
+-			PTE_BLOCK_PXN | PTE_BLOCK_UXN
++				 PTE_BLOCK_NON_SHARE |
++				 PTE_BLOCK_PXN | PTE_BLOCK_UXN
+ 	}, {
+ 		/* ethernet */
+ 		.virt = 0x40100000UL,
+-		.phys = 0x40100000UL,
++			.phys = 0x40100000UL,
++			.size = 0x00100000UL,
++			.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
++				PTE_BLOCK_NON_SHARE |
++				PTE_BLOCK_PXN | PTE_BLOCK_UXN
++	}, {
++		/* MMC1 */
++		.virt = 0x50000000UL,
++		.phys = 0x50000000UL,
+ 		.size = 0x00100000UL,
+ 		.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
+-			PTE_BLOCK_NON_SHARE |
+-			PTE_BLOCK_PXN | PTE_BLOCK_UXN
++				 PTE_BLOCK_NON_SHARE |
++				 PTE_BLOCK_PXN | PTE_BLOCK_UXN
+ 	}, {
+ 		/* OCVM */
+ 		.virt = 0x80000000UL,
+diff --git a/configs/corstone1000_defconfig b/configs/corstone1000_defconfig
+index c72d027711..336da67a8d 100644
+--- a/configs/corstone1000_defconfig
++++ b/configs/corstone1000_defconfig
+@@ -40,7 +40,13 @@ CONFIG_VERSION_VARIABLE=y
+ CONFIG_NET_RANDOM_ETHADDR=y
+ CONFIG_REGMAP=y
+ CONFIG_MISC=y
+-# CONFIG_MMC is not set
++CONFIG_CLK=y
++CONFIG_CMD_MMC=y
++CONFIG_DM_MMC=y
++CONFIG_ARM_PL180_MMCI=y
++CONFIG_MMC_SDHCI_ADMA_HELPERS=y
++CONFIG_MMC_WRITE=y
++CONFIG_DM_GPIO=y
+ CONFIG_PHYLIB=y
+ CONFIG_PHY_SMSC=y
+ CONFIG_SMC911X=y
+diff --git a/include/configs/corstone1000.h b/include/configs/corstone1000.h
+index 4cf1170ffb..1f28a0f6c0 100644
+--- a/include/configs/corstone1000.h
++++ b/include/configs/corstone1000.h
+@@ -58,7 +58,9 @@
+ #define CONFIG_SYS_SDRAM_BASE	PHYS_SDRAM_1
+ 
+ #define BOOT_TARGET_DEVICES(func) \
+-	func(USB, usb, 0)
++	func(USB, usb, 0) \
++	func(MMC, mmc, 0) \
++	func(MMC, mmc, 1)
+ 
+ #include <config_distro_bootcmd.h>
+ 
+-- 
+2.17.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0021-corstone1000-add-compressed-kernel-support.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0021-corstone1000-add-compressed-kernel-support.patch
new file mode 100644
index 0000000..d237523
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0021-corstone1000-add-compressed-kernel-support.patch
@@ -0,0 +1,33 @@
+From 37ee9a07d168b43bde17b2ce3dbf637905af5bf2 Mon Sep 17 00:00:00 2001
+From: Jon Mason <jon.mason@arm.com>
+Date: Wed, 30 Nov 2022 18:59:59 +0000
+Subject: [PATCH 21/25] corstone1000: add compressed kernel support
+
+The corstone1000 kernel has become too large to fit in the available
+storage.  Swtiching to a compressed kernel avoids the problem, but
+requires uncompressing it.  Add this decompression to the default boot
+instructions.
+
+Signed-off-by: Jon Mason <jon.mason@arm.com>
+Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+Upstream-Status: Pending [Not submitted to upstream yet]
+---
+ configs/corstone1000_defconfig | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configs/corstone1000_defconfig b/configs/corstone1000_defconfig
+index 336da67a8d..eeb207aa5f 100644
+--- a/configs/corstone1000_defconfig
++++ b/configs/corstone1000_defconfig
+@@ -15,7 +15,7 @@ CONFIG_FIT=y
+ CONFIG_BOOTDELAY=3
+ CONFIG_USE_BOOTARGS=y
+ CONFIG_BOOTARGS="console=ttyAMA0 loglevel=9 ip=dhcp earlyprintk"
+-CONFIG_BOOTCOMMAND="run retrieve_kernel_load_addr; echo Loading kernel from $kernel_addr to memory ... ; loadm $kernel_addr $kernel_addr_r 0xc00000; usb start; usb reset; run distro_bootcmd; bootefi $kernel_addr_r $fdtcontroladdr;"
++CONFIG_BOOTCOMMAND="run retrieve_kernel_load_addr; echo Loading kernel from $kernel_addr to memory ... ; unzip $kernel_addr 0x90000000; loadm 0x90000000 $kernel_addr_r 0xf00000; usb start; usb reset; run distro_bootcmd; bootefi $kernel_addr_r $fdtcontroladdr;"
+ CONFIG_CONSOLE_RECORD=y
+ CONFIG_LOGLEVEL=7
+ # CONFIG_DISPLAY_CPUINFO is not set
+-- 
+2.17.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0028-Introduce-external-sys-driver-to-device-tree.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0022-Introduce-external-sys-driver-to-device-tree.patch
similarity index 74%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0028-Introduce-external-sys-driver-to-device-tree.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0022-Introduce-external-sys-driver-to-device-tree.patch
index bd9a6cf..91af426 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0028-Introduce-external-sys-driver-to-device-tree.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0022-Introduce-external-sys-driver-to-device-tree.patch
@@ -1,7 +1,7 @@
-From 83f16fe96a86b00f7a4b7c4c4f7416119b80eddd Mon Sep 17 00:00:00 2001
+From a3fae205de2fd6d2abdb8afca6475267c16e9e29 Mon Sep 17 00:00:00 2001
 From: Emekcan <emekcan.aras@arm.com>
-Date: Fri, 19 Aug 2022 16:04:48 +0100
-Subject: [PATCH] Introduce external sys driver to device-tree
+Date: Wed, 30 Nov 2022 19:02:26 +0000
+Subject: [PATCH 22/25] Introduce external sys driver to device-tree
 
 It adds external sys driver binding to u-boot
 device tree.
@@ -13,10 +13,10 @@
  1 file changed, 7 insertions(+)
 
 diff --git a/arch/arm/dts/corstone1000.dtsi b/arch/arm/dts/corstone1000.dtsi
-index d0194aa893..19b6e3ea72 100644
+index 4e46826f88..2c7185e139 100644
 --- a/arch/arm/dts/corstone1000.dtsi
 +++ b/arch/arm/dts/corstone1000.dtsi
-@@ -160,6 +160,13 @@
+@@ -160,5 +160,12 @@
  			secure-status = "okay";     /* secure-world-only */
  			status = "disabled";
  		};
@@ -28,8 +28,7 @@
 +			reg-names = "rstreg", "streg";
 +		};
  	};
- 
- 	arm_ffa: arm_ffa {
+ };
 -- 
 2.17.1
 
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0029-Add-mhu-and-rpmsg-client-to-u-boot-device-tree.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0023-Add-mhu-and-rpmsg-client-to-u-boot-device-tree.patch
similarity index 92%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0029-Add-mhu-and-rpmsg-client-to-u-boot-device-tree.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0023-Add-mhu-and-rpmsg-client-to-u-boot-device-tree.patch
index 57bdef4..04cbf76 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0029-Add-mhu-and-rpmsg-client-to-u-boot-device-tree.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0023-Add-mhu-and-rpmsg-client-to-u-boot-device-tree.patch
@@ -1,7 +1,7 @@
-From a1b8b91a43cfa9dbaa2d907a6d9629da6f93fa3e Mon Sep 17 00:00:00 2001
+From 55e2bc835be50b23ef04066b950bbe75c0065d19 Mon Sep 17 00:00:00 2001
 From: Emekcan <emekcan.aras@arm.com>
 Date: Mon, 12 Sep 2022 15:47:06 +0100
-Subject: [PATCH] Add mhu and rpmsg client to u-boot device tree
+Subject: [PATCH 23/25] Add mhu and rpmsg client to u-boot device tree
 
 Adds external system controller and mhu driver to u-boot
 device tree. This enables communication between host and
@@ -10,11 +10,11 @@
 Signed-off-by: Emekcan Aras <Emekcan.Aras@arm.com>
 Upstream-Status: Pending [Not submitted to upstream yet]
 ---
- arch/arm/dts/corstone1000.dtsi | 50 ++++++++++++++++++++++++++++++++
+ arch/arm/dts/corstone1000.dtsi | 50 ++++++++++++++++++++++++++++++++++
  1 file changed, 50 insertions(+)
 
 diff --git a/arch/arm/dts/corstone1000.dtsi b/arch/arm/dts/corstone1000.dtsi
-index 19b6e3ea72..61dd6c432c 100644
+index 2c7185e139..61e0c33247 100644
 --- a/arch/arm/dts/corstone1000.dtsi
 +++ b/arch/arm/dts/corstone1000.dtsi
 @@ -161,6 +161,56 @@
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0030-arm-corstone1000-esrt-support.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0024-arm-corstone1000-esrt-support.patch
similarity index 92%
rename from meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0030-arm-corstone1000-esrt-support.patch
rename to meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0024-arm-corstone1000-esrt-support.patch
index 2db5c2a..160ff8a 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0030-arm-corstone1000-esrt-support.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0024-arm-corstone1000-esrt-support.patch
@@ -1,7 +1,7 @@
-From d8fca6ebd5917df9a12dbf1da6a97f99af06eee9 Mon Sep 17 00:00:00 2001
+From 475f787ba7351282ca3ce0fcf9badc01821cd8a3 Mon Sep 17 00:00:00 2001
 From: Satish Kumar <satish.kumar01@arm.com>
-Date: Fri, 19 Aug 2022 09:18:33 +0100
-Subject: [PATCH] arm/corstone1000: esrt support
+Date: Wed, 30 Nov 2022 19:11:43 +0000
+Subject: [PATCH 24/25] arm/corstone1000: esrt support
 
 The implementation is platform specific and would require
 change in future.
@@ -15,14 +15,14 @@
 ---
  include/efi_api.h             |   2 +-
  lib/efi_loader/efi_firmware.c | 133 ++++++++++++++++++++++++++++++++++
- lib/efi_loader/efi_setup.c    |  16 ++--
- 3 files changed, 142 insertions(+), 9 deletions(-)
+ lib/efi_loader/efi_setup.c    |  17 +++--
+ 3 files changed, 143 insertions(+), 9 deletions(-)
 
 diff --git a/include/efi_api.h b/include/efi_api.h
-index 83c01085fd..26899afd01 100644
+index 9bb0d44ac8..fcf2643e14 100644
 --- a/include/efi_api.h
 +++ b/include/efi_api.h
-@@ -2014,7 +2014,7 @@ struct efi_firmware_image_descriptor {
+@@ -2030,7 +2030,7 @@ struct efi_firmware_image_descriptor {
  	u32 last_attempt_status;
  	u64 hardware_instance;
  	efi_firmware_image_dep_t *dependencies;
@@ -185,13 +185,14 @@
  	.set_image = efi_firmware_fit_set_image,
  	.check_image = efi_firmware_check_image_unsupported,
 diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c
-index 6c9e14c37e..6ccda175ff 100644
+index c154eb0e9d..63329bbff8 100644
 --- a/lib/efi_loader/efi_setup.c
 +++ b/lib/efi_loader/efi_setup.c
-@@ -168,13 +168,6 @@ static efi_status_t efi_init_capsule(void)
+@@ -167,14 +167,6 @@ static efi_status_t efi_init_capsule(void)
+ 	efi_status_t ret = EFI_SUCCESS;
  
  #if IS_ENABLED(CONFIG_TARGET_CORSTONE1000)
- 	int ffa_ret;
+-	int ffa_ret;
 -
 -	ffa_ret = efi_corstone1000_uboot_efi_started_event();
 -	if (ffa_ret)
@@ -202,11 +203,10 @@
  	ret = efi_corstone1000_alloc_capsule_shared_buf();
  	if (ret != EFI_SUCCESS) {
  		printf("EFI: Corstone-1000: cannot allocate caspsule shared buffer\n");
-@@ -306,7 +299,14 @@ efi_status_t efi_init_obj_list(void)
- 		if (ret != EFI_SUCCESS)
- 			goto out;
- 	}
--
+@@ -308,6 +300,15 @@ efi_status_t efi_init_obj_list(void)
+ 	if (ret != EFI_SUCCESS)
+ 		goto out;
+ 
 +#if IS_ENABLED(CONFIG_TARGET_CORSTONE1000)
 +		int ffa_ret;
 +		ffa_ret = efi_corstone1000_uboot_efi_started_event();
@@ -215,9 +215,10 @@
 +		else
 +			debug("[efi_boottime][INFO]: SE Proxy FW update service notified\n");
 +#endif
++
  	/* Initialize variable services */
  	ret = efi_init_variables();
  	if (ret != EFI_SUCCESS)
 -- 
-2.25.1
+2.17.1
 
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0025-efi_setup-discover-FF-A-bus-before-raising-EFI-start.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0025-efi_setup-discover-FF-A-bus-before-raising-EFI-start.patch
new file mode 100644
index 0000000..6c17786
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0025-efi_setup-discover-FF-A-bus-before-raising-EFI-start.patch
@@ -0,0 +1,50 @@
+From de5994cda7a35317f12dc1cedb28cae1b932283a Mon Sep 17 00:00:00 2001
+From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+Date: Wed, 30 Nov 2022 19:14:52 +0000
+Subject: [PATCH 25/25] efi_setup: discover FF-A bus before raising EFI started
+ event
+
+add FF-A discovery to efi_corstone1000_uboot_efi_started_event()
+
+Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+Upstream-Status: Pending [Not submitted to upstream yet]
+---
+ lib/efi_loader/efi_setup.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c
+index 63329bbff8..cf8abe3af0 100644
+--- a/lib/efi_loader/efi_setup.c
++++ b/lib/efi_loader/efi_setup.c
+@@ -142,9 +142,16 @@ static efi_status_t efi_init_secure_boot(void)
+ static int efi_corstone1000_uboot_efi_started_event(void)
+ {
+ 	struct ffa_send_direct_data msg = {0};
++	int ret;
+ 
+ 	log_debug("[%s]\n", __func__);
+ 
++	ret = ffa_bus_discover(NULL);
++	if (ret != 0) {
++		log_err("failure to discover FF-A bus\n");
++		return ret;
++	}
++
+ 	/*
+ 	 * setting the kernel started  event arguments:
+ 	 * setting capsule update interface ID(31:16)
+@@ -304,9 +311,9 @@ efi_status_t efi_init_obj_list(void)
+ 		int ffa_ret;
+ 		ffa_ret = efi_corstone1000_uboot_efi_started_event();
+ 		if (ffa_ret)
+-			debug("[efi_boottime][ERROR]: Failure to notify SE Proxy FW update service\n");
++			log_err("Failure to notify SE Proxy FW update service\n");
+ 		else
+-			debug("[efi_boottime][INFO]: SE Proxy FW update service notified\n");
++			debug("SE Proxy FW update service notified\n");
+ #endif
+ 
+ 	/* Initialize variable services */
+-- 
+2.17.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0026-arm-corstone1000-add-mmc-for-fvp.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0026-arm-corstone1000-add-mmc-for-fvp.patch
deleted file mode 100644
index d4bf652..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0026-arm-corstone1000-add-mmc-for-fvp.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From 5e4c819c7ab0841429016c098106615b33486c8b Mon Sep 17 00:00:00 2001
-From: Rui Miguel Silva <rui.silva@linaro.org>
-Date: Tue, 5 Apr 2022 10:24:38 +0100
-Subject: [PATCH 26/26] arm:corstone1000: add mmc for fvp
-
-Enable support mmc/sdcard for the corstone1000 FVP.
-
-Signed-off-by: Vishnu Banavath <vishnu.banavath@arm.com>
-Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
-Upstream-Status: Pending [Not submitted to upstream yet]
----
- arch/arm/dts/corstone1000-fvp.dts        | 28 +++++++++++++++
- board/armltd/corstone1000/corstone1000.c | 46 ++++++++++++++++--------
- configs/corstone1000_defconfig           |  8 ++++-
- include/configs/corstone1000.h           |  4 ++-
- 4 files changed, 69 insertions(+), 17 deletions(-)
-
-diff --git a/arch/arm/dts/corstone1000-fvp.dts b/arch/arm/dts/corstone1000-fvp.dts
-index 1fcc137a49..26b0f1b3ce 100644
---- a/arch/arm/dts/corstone1000-fvp.dts
-+++ b/arch/arm/dts/corstone1000-fvp.dts
-@@ -20,4 +20,32 @@
- 		interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
- 		reg-io-width = <2>;
- 	};
-+
-+	vmmc_v3_3d: fixed_v3_3d {
-+		compatible = "regulator-fixed";
-+		regulator-name = "vmmc_supply";
-+		regulator-min-microvolt = <3300000>;
-+		regulator-max-microvolt = <3300000>;
-+		regulator-always-on;
-+	};
-+
-+	sdmmc0: mmc@40300000 {
-+		compatible = "arm,pl18x", "arm,primecell";
-+		reg = <0x40300000 0x1000>;
-+		interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
-+		max-frequency = <12000000>;
-+		vmmc-supply = <&vmmc_v3_3d>;
-+		clocks = <&smbclk>, <&refclk100mhz>;
-+		clock-names = "smclk", "apb_pclk";
-+	};
-+
-+	sdmmc1: mmc@50000000 {
-+		compatible = "arm,pl18x", "arm,primecell";
-+		reg = <0x50000000 0x10000>;
-+		interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
-+		max-frequency = <12000000>;
-+		vmmc-supply = <&vmmc_v3_3d>;
-+		clocks = <&smbclk>, <&refclk100mhz>;
-+		clock-names = "smclk", "apb_pclk";
-+	};
- };
-diff --git a/board/armltd/corstone1000/corstone1000.c b/board/armltd/corstone1000/corstone1000.c
-index 2fa485ff37..3d537d7a90 100644
---- a/board/armltd/corstone1000/corstone1000.c
-+++ b/board/armltd/corstone1000/corstone1000.c
-@@ -46,22 +46,38 @@ static struct mm_region corstone1000_mem_map[] = {
- 		.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
- 			 PTE_BLOCK_NON_SHARE |
- 			 PTE_BLOCK_PXN | PTE_BLOCK_UXN
--        }, {
--                /* USB */
--                .virt = 0x40200000UL,
--                .phys = 0x40200000UL,
--                .size = 0x00100000UL,
--                .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
--                         PTE_BLOCK_NON_SHARE |
--                         PTE_BLOCK_PXN | PTE_BLOCK_UXN
- 	}, {
--                 /* ethernet */
--                .virt = 0x40100000UL,
--                .phys = 0x40100000UL,
--                .size = 0x00100000UL,
--                .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
--                         PTE_BLOCK_NON_SHARE |
--                         PTE_BLOCK_PXN | PTE_BLOCK_UXN
-+		/* USB */
-+		.virt = 0x40200000UL,
-+			.phys = 0x40200000UL,
-+			.size = 0x00100000UL,
-+			.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
-+				PTE_BLOCK_NON_SHARE |
-+				PTE_BLOCK_PXN | PTE_BLOCK_UXN
-+	}, {
-+		/* MMC0 */
-+		.virt = 0x40300000UL,
-+		.phys = 0x40300000UL,
-+		.size = 0x00100000UL,
-+		.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
-+				 PTE_BLOCK_NON_SHARE |
-+				 PTE_BLOCK_PXN | PTE_BLOCK_UXN
-+	}, {
-+		/* ethernet */
-+		.virt = 0x40100000UL,
-+			.phys = 0x40100000UL,
-+			.size = 0x00100000UL,
-+			.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
-+				PTE_BLOCK_NON_SHARE |
-+				PTE_BLOCK_PXN | PTE_BLOCK_UXN
-+	}, {
-+		/* MMC1 */
-+		.virt = 0x50000000UL,
-+		.phys = 0x50000000UL,
-+		.size = 0x00100000UL,
-+		.attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
-+				 PTE_BLOCK_NON_SHARE |
-+				 PTE_BLOCK_PXN | PTE_BLOCK_UXN
- 	}, {
- 		/* OCVM */
- 		.virt = 0x80000000UL,
-diff --git a/configs/corstone1000_defconfig b/configs/corstone1000_defconfig
-index c299dda49f..76e07fc20c 100644
---- a/configs/corstone1000_defconfig
-+++ b/configs/corstone1000_defconfig
-@@ -38,7 +38,13 @@ CONFIG_CMD_EFIDEBUG=y
- CONFIG_CMD_FAT=y
- CONFIG_OF_CONTROL=y
- CONFIG_REGMAP=y
--# CONFIG_MMC is not set
-+CONFIG_CLK=y
-+CONFIG_CMD_MMC=y
-+CONFIG_DM_MMC=y
-+CONFIG_ARM_PL180_MMCI=y
-+CONFIG_MMC_SDHCI_ADMA_HELPERS=y
-+CONFIG_MMC_WRITE=y
-+CONFIG_DM_GPIO=y
- CONFIG_DM_SERIAL=y
- CONFIG_USB=y
- CONFIG_DM_USB=y
-diff --git a/include/configs/corstone1000.h b/include/configs/corstone1000.h
-index 333b1d93b6..815239590e 100644
---- a/include/configs/corstone1000.h
-+++ b/include/configs/corstone1000.h
-@@ -89,7 +89,9 @@
- #define CONFIG_SYS_MAXARGS	64	/* max command args */
- 
- #define BOOT_TARGET_DEVICES(func) \
--	func(USB, usb, 0)
-+	func(USB, usb, 0) \
-+	func(MMC, mmc, 0) \
-+	func(MMC, mmc, 1)
- 
- #include <config_distro_bootcmd.h>
- 
--- 
-2.17.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0026-corstone1000-enable-distro-booting-command.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0026-corstone1000-enable-distro-booting-command.patch
new file mode 100644
index 0000000..a88180d
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0026-corstone1000-enable-distro-booting-command.patch
@@ -0,0 +1,27 @@
+From 15778524604652db60f704a772b6815d0f4305bf Mon Sep 17 00:00:00 2001
+From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+Date: Mon, 5 Dec 2022 17:02:32 +0000
+Subject: [PATCH] corstone1000: enable distro booting command
+
+enable distro_bootcmd
+
+Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
+Upstream-Status: Pending [Not submitted to upstream yet]
+---
+ include/configs/corstone1000.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/include/configs/corstone1000.h b/include/configs/corstone1000.h
+index 1f28a0f6c0..548856b970 100644
+--- a/include/configs/corstone1000.h
++++ b/include/configs/corstone1000.h
+@@ -64,5 +64,6 @@
+ 
+ #include <config_distro_bootcmd.h>
+ 
++#define CONFIG_EXTRA_ENV_SETTINGS BOOTENV
+ 
+ #endif
+-- 
+2.17.1
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0027-corstone1000-use-a-compressed-kernel.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0027-corstone1000-use-a-compressed-kernel.patch
deleted file mode 100644
index 59000cd..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0027-corstone1000-use-a-compressed-kernel.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 26c8a8528b794dbaba49bcf3e1bae8a1e15a8448 Mon Sep 17 00:00:00 2001
-From: Jon Mason <jon.mason@arm.com>
-Date: Thu, 25 Aug 2022 11:21:28 +0100
-Subject: [PATCH] corstone1000: add compressed kernel support
-
-The corstone1000 kernel has become too large to fit in the available
-storage.  Swtiching to a compressed kernel avoids the problem, but
-requires uncompressing it.  Add this decompression to the default boot
-instructions.
-
-Signed-off-by: Jon Mason <jon.mason@arm.com>
-Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Upstream-Status: Pending [Not submitted to upstream yet]
----
- include/configs/corstone1000.h | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/include/configs/corstone1000.h b/include/configs/corstone1000.h
-index 815239590e..a8aa105fe6 100644
---- a/include/configs/corstone1000.h
-+++ b/include/configs/corstone1000.h
-@@ -120,7 +120,8 @@
- #define CONFIG_BOOTCOMMAND								\
- 				"run retrieve_kernel_load_addr;"			\
- 				"echo Loading kernel from $kernel_addr to memory ... ;"	\
--				"loadm $kernel_addr $kernel_addr_r 0xc00000;"		\
-+				"unzip $kernel_addr 0x90000000;"	\
-+				"loadm 0x90000000 $kernel_addr_r 0xf00000;"		\
- 				"usb start; usb reset;"					\
- 				"run distro_bootcmd;"					\
- 				"bootefi $kernel_addr_r $fdtcontroladdr;"
--- 
-2.17.1
-
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0031-ffa-add-support-for-32-bit-direct-messaging.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0031-ffa-add-support-for-32-bit-direct-messaging.patch
deleted file mode 100644
index ac0638e..0000000
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone1000/0031-ffa-add-support-for-32-bit-direct-messaging.patch
+++ /dev/null
@@ -1,182 +0,0 @@
-From 6cb8e5f83d53357fbc6e58c2c5c5a3450654f9e6 Mon Sep 17 00:00:00 2001
-From: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Date: Wed, 19 Oct 2022 17:51:10 +0100
-Subject: [PATCH] arm_ffa: add support for 32-bit direct messaging
-
-add 32-bit mode for FFA_MSG_SEND_DIRECT_REQ and FFA_MSG_SEND_DIRECT_RESP
-
-Tested-by: Mohamed Omar Asaker <mohamed.omarasaker@arm.com>
-Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
-Upstream-Status: Pending [Not submitted to upstream yet]
----
- cmd/armffa.c                       |  2 +-
- drivers/firmware/arm-ffa/core.c    | 17 ++++++++++++++---
- drivers/firmware/arm-ffa/sandbox.c |  2 +-
- include/arm_ffa.h                  |  2 +-
- lib/efi_loader/efi_capsule.c       |  2 +-
- lib/efi_loader/efi_setup.c         |  2 +-
- lib/efi_loader/efi_variable_tee.c  |  2 +-
- test/dm/ffa.c                      |  6 +++---
- 8 files changed, 23 insertions(+), 12 deletions(-)
-​
-diff --git a/cmd/armffa.c b/cmd/armffa.c
-index 9b56e8a830..9842b99181 100644
---- a/cmd/armffa.c
-+++ b/cmd/armffa.c
-@@ -129,7 +129,7 @@ int  do_ffa_msg_send_direct_req(struct cmd_tbl *cmdtp, int flag, int argc,
- 		return -EINVAL;
- 	}
- 
--	ret = ffa_bus_ops_get()->sync_send_receive(part_id, &msg);
-+	ret = ffa_bus_ops_get()->sync_send_receive(part_id, &msg, 1);
- 	if (ret == 0) {
- 		u8 cnt;
- 
-diff --git a/drivers/firmware/arm-ffa/core.c b/drivers/firmware/arm-ffa/core.c
-index caba10caae..ba1ba59937 100644
---- a/drivers/firmware/arm-ffa/core.c
-+++ b/drivers/firmware/arm-ffa/core.c
-@@ -1032,6 +1032,7 @@ static int ffa_cache_partitions_info(void)
-  * ffa_msg_send_direct_req - FFA_MSG_SEND_DIRECT_{REQ,RESP} handler function
-  * @dst_part_id: destination partition ID
-  * @msg: pointer to the message data preallocated by the client (in/out)
-+ * @is_smc64: select 64-bit or 32-bit FF-A ABI
-  *
-  * This is the runtime function that implements FFA_MSG_SEND_DIRECT_{REQ,RESP}
-  * FF-A functions.
-@@ -1048,10 +1049,12 @@ static int ffa_cache_partitions_info(void)
-  *
-  * 0 on success. Otherwise, failure
-  */
--static int __ffa_runtime ffa_msg_send_direct_req(u16 dst_part_id, struct ffa_send_direct_data *msg)
-+static int __ffa_runtime ffa_msg_send_direct_req(u16 dst_part_id, struct ffa_send_direct_data *msg,
-+						 u8 is_smc64)
- {
- 	ffa_value_t res = {0};
- 	int ffa_errno;
-+	u64 req_mode, resp_mode;
- 
- 	if (!ffa_priv_data || !ffa_priv_data->invoke_ffa_fn)
- 		return -EINVAL;
-@@ -1060,8 +1063,16 @@ static int __ffa_runtime ffa_msg_send_direct_req(u16 dst_part_id, struct ffa_sen
- 	if (!ffa_priv_data->partitions.count || !ffa_priv_data->partitions.descs)
- 		return -ENODEV;
- 
-+	if(is_smc64) {
-+		req_mode = FFA_SMC_64(FFA_MSG_SEND_DIRECT_REQ);
-+		resp_mode = FFA_SMC_64(FFA_MSG_SEND_DIRECT_RESP);
-+	} else {
-+		req_mode = FFA_SMC_32(FFA_MSG_SEND_DIRECT_REQ);
-+		resp_mode = FFA_SMC_32(FFA_MSG_SEND_DIRECT_RESP);
-+	}
-+
- 	ffa_priv_data->invoke_ffa_fn((ffa_value_t){
--			.a0 = FFA_SMC_64(FFA_MSG_SEND_DIRECT_REQ),
-+			.a0 = req_mode,
- 			.a1 = PREP_SELF_ENDPOINT_ID(ffa_priv_data->id) |
- 				PREP_PART_ENDPOINT_ID(dst_part_id),
- 			.a2 = 0,
-@@ -1083,7 +1094,7 @@ static int __ffa_runtime ffa_msg_send_direct_req(u16 dst_part_id, struct ffa_sen
- 		return 0;
- 	}
- 
--	if (res.a0 == FFA_SMC_64(FFA_MSG_SEND_DIRECT_RESP)) {
-+	if (res.a0 == resp_mode){
- 		/*
- 		 * Message sent with response
- 		 * extract the return data
-diff --git a/drivers/firmware/arm-ffa/sandbox.c b/drivers/firmware/arm-ffa/sandbox.c
-index 16e1fdc809..8e8549441d 100644
---- a/drivers/firmware/arm-ffa/sandbox.c
-+++ b/drivers/firmware/arm-ffa/sandbox.c
-@@ -430,7 +430,7 @@ static int sandbox_ffa_sp_valid(u16 part_id)
-  * @{a0-a7} , res: The SMC call arguments and return structure.
-  *
-  * This is the function that emulates FFA_MSG_SEND_DIRECT_{REQ,RESP}
-- * FF-A functions.
-+ * FF-A functions. Only SMC 64-bit is supported in Sandbox.
-  *
-  * Emulating interrupts is not supported. So, FFA_RUN and FFA_INTERRUPT are not supported.
-  * In case of success FFA_MSG_SEND_DIRECT_RESP is returned with default pattern data (0xff).
-diff --git a/include/arm_ffa.h b/include/arm_ffa.h
-index 665413a0c5..4a7c59ff28 100644
---- a/include/arm_ffa.h
-+++ b/include/arm_ffa.h
-@@ -97,7 +97,7 @@ struct __packed ffa_send_direct_data {
- struct ffa_bus_ops {
- 	int (*partition_info_get)(const char *uuid_str,
- 				  u32 *parts_size, struct ffa_partition_info *buffer);
--	int (*sync_send_receive)(u16 dst_part_id, struct ffa_send_direct_data *msg);
-+	int (*sync_send_receive)(u16 dst_part_id, struct ffa_send_direct_data *msg, u8 is_smc64);
- 	int (*rxtx_unmap)(void);
- };
- 
-diff --git a/lib/efi_loader/efi_capsule.c b/lib/efi_loader/efi_capsule.c
-index 65e2fc8296..c479c53d04 100644
---- a/lib/efi_loader/efi_capsule.c
-+++ b/lib/efi_loader/efi_capsule.c
-@@ -591,7 +591,7 @@ static int __efi_runtime efi_corstone1000_buffer_ready_event(u32 capsule_image_s
- 	msg.data1 = PREP_SEPROXY_SVC_ID(CORSTONE1000_SEPROXY_UPDATE_SVC_ID) |
- 		PREP_SEPROXY_EVT(CORSTONE1000_BUFFER_READY_EVT); /* w4 */
- 
--	return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg);
-+	return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg, 0);
- }
- #endif
- 
-diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c
-index 6ccda175ff..416af8d663 100644
---- a/lib/efi_loader/efi_setup.c
-+++ b/lib/efi_loader/efi_setup.c
-@@ -153,7 +153,7 @@ static int efi_corstone1000_uboot_efi_started_event(void)
- 	msg.data1 = PREP_SEPROXY_SVC_ID(CORSTONE1000_SEPROXY_UPDATE_SVC_ID) |
- 			PREP_SEPROXY_EVT(CORSTONE1000_UBOOT_EFI_STARTED_EVT); /* w4 */
- 
--	return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg);
-+	return ffa_bus_ops_get()->sync_send_receive(CORSTONE1000_SEPROXY_PART_ID, &msg, 0);
- }
- #endif
- 
-diff --git a/lib/efi_loader/efi_variable_tee.c b/lib/efi_loader/efi_variable_tee.c
-index 7d9d577281..05f3c02911 100644
---- a/lib/efi_loader/efi_variable_tee.c
-+++ b/lib/efi_loader/efi_variable_tee.c
-@@ -201,7 +201,7 @@ static int __efi_runtime ffa_notify_mm_sp(void)
- 
- 	msg.data0 = FFA_SHARED_MM_BUFFER_OFFSET; /* x3 */
- 
--	ret = ffa_bus_ops_get()->sync_send_receive(mm_sp_id, &msg);
-+	ret = ffa_bus_ops_get()->sync_send_receive(mm_sp_id, &msg, 1);
- 	if (ret != 0)
- 		return ret;
- 
-diff --git a/test/dm/ffa.c b/test/dm/ffa.c
-index 052d5fc3f4..14b19cf71e 100644
---- a/test/dm/ffa.c
-+++ b/test/dm/ffa.c
-@@ -170,7 +170,7 @@ static int  test_ffa_msg_send_direct_req(u16 part_id, struct unit_test_state *ut
- 	struct ffa_send_direct_data msg = {0};
- 	u8 cnt;
- 
--	ut_assertok(ffa_bus_ops_get()->sync_send_receive(part_id, &msg));
-+	ut_assertok(ffa_bus_ops_get()->sync_send_receive(part_id, &msg, 1));
- 
- 	for (cnt = 0; cnt < sizeof(struct ffa_send_direct_data) / sizeof(u64); cnt++)
- 		ut_assertok(((u64 *)&msg)[cnt] != 0xffffffffffffffff);
-@@ -380,12 +380,12 @@ static int dm_test_ffa_nack(struct unit_test_state *uts)
- 	ut_assertok(count != SANDBOX_SP_COUNT_PER_VALID_SERVICE);
- 
- 	/* send data to an invalid partition */
--	ret = ffa_bus_ops_get()->sync_send_receive(part_id, &msg);
-+	ret = ffa_bus_ops_get()->sync_send_receive(part_id, &msg, 1);
- 	ut_assertok(ret != -EINVAL);
- 
- 	/* send data to a valid partition */
- 	part_id = prvdata->partitions.descs[0].info.id;
--	ret = ffa_bus_ops_get()->sync_send_receive(part_id, &msg);
-+	ret = ffa_bus_ops_get()->sync_send_receive(part_id, &msg, 1);
- 	ut_assertok(ret != 0);
- 
- 	return CMD_RET_SUCCESS;
--- 
-2.17.1
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone500/0001-armv7-adding-generic-timer-access-through-MMIO.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone500/0001-armv7-adding-generic-timer-access-through-MMIO.patch
index 9a29975..2cdafac 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone500/0001-armv7-adding-generic-timer-access-through-MMIO.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone500/0001-armv7-adding-generic-timer-access-through-MMIO.patch
@@ -1,4 +1,4 @@
-From d75d794785419592ba49046165d19a6ec9488b2d Mon Sep 17 00:00:00 2001
+From 787a802afb8c05fcb5117c1cbb612c51554aad24 Mon Sep 17 00:00:00 2001
 From: Rui Miguel Silva <rui.silva@linaro.org>
 Date: Wed, 18 Dec 2019 21:52:34 +0000
 Subject: [PATCH 1/2] armv7: adding generic timer access through MMIO
@@ -124,10 +124,10 @@
 +	return gd->arch.timer_rate_hz;
 +}
 diff --git a/scripts/config_whitelist.txt b/scripts/config_whitelist.txt
-index c61df4fb1c9b..cfb1c68b6297 100644
+index f505722f6b04..e0df0026c985 100644
 --- a/scripts/config_whitelist.txt
 +++ b/scripts/config_whitelist.txt
-@@ -1253,6 +1253,7 @@ CONFIG_SYS_MMC_U_BOOT_DST
+@@ -900,6 +900,7 @@ CONFIG_SYS_MMC_U_BOOT_DST
  CONFIG_SYS_MMC_U_BOOT_OFFS
  CONFIG_SYS_MMC_U_BOOT_SIZE
  CONFIG_SYS_MMC_U_BOOT_START
@@ -136,5 +136,5 @@
  CONFIG_SYS_MONITOR_SEC
  CONFIG_SYS_MOR_VAL
 -- 
-2.37.1
+2.38.1
 
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone500/0002-board-arm-add-corstone500-board.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone500/0002-board-arm-add-corstone500-board.patch
index c389a64..f76f449 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone500/0002-board-arm-add-corstone500-board.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/corstone500/0002-board-arm-add-corstone500-board.patch
@@ -1,4 +1,4 @@
-From 3566cf4ab79ca78acd69cfb87e74587394e5aeb2 Mon Sep 17 00:00:00 2001
+From 70cf3f7498e98a98b21804f577f3b850018894da Mon Sep 17 00:00:00 2001
 From: Rui Miguel Silva <rui.silva@linaro.org>
 Date: Wed, 8 Jan 2020 09:48:11 +0000
 Subject: [PATCH 2/2] board: arm: add corstone500 board
@@ -11,18 +11,14 @@
 makefile for this system.
 
 Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
-
-%% original patch: 0002-board-arm-add-corstone500-board.patch
-
-Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
 ---
  arch/arm/Kconfig                       |  10 +++
  board/armltd/corstone500/Kconfig       |  12 +++
  board/armltd/corstone500/Makefile      |   8 ++
- board/armltd/corstone500/corstone500.c |  48 +++++++++++
- configs/corstone500_defconfig          |  40 +++++++++
- include/configs/corstone500.h          | 109 +++++++++++++++++++++++++
- 6 files changed, 227 insertions(+)
+ board/armltd/corstone500/corstone500.c |  48 ++++++++++++
+ configs/corstone500_defconfig          |  41 ++++++++++
+ include/configs/corstone500.h          | 102 +++++++++++++++++++++++++
+ 6 files changed, 221 insertions(+)
  create mode 100644 board/armltd/corstone500/Kconfig
  create mode 100644 board/armltd/corstone500/Makefile
  create mode 100644 board/armltd/corstone500/corstone500.c
@@ -30,12 +26,12 @@
  create mode 100644 include/configs/corstone500.h
 
 diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
-index 9898c7d68e1b..8c60ed39712e 100644
+index 82cd456f51f1..a925e7759ee8 100644
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
-@@ -718,6 +718,15 @@ config ARCH_BCMSTB
- 	  This enables support for Broadcom ARM-based set-top box
- 	  chipsets, including the 7445 family of chips.
+@@ -1349,6 +1349,15 @@ config TARGET_CORSTONE1000
+ 	select PL01X_SERIAL
+ 	select DM
  
 +config TARGET_CORSTONE500
 +	bool "Support Corstone500"
@@ -46,10 +42,10 @@
 +	  This enables support for Corstone500 ARM which is a
 +	  Cortex-A5 system
 +
- config TARGET_VEXPRESS_CA9X4
- 	bool "Support vexpress_ca9x4"
- 	select CPU_V7A
-@@ -2299,6 +2308,7 @@ source "board/bosch/shc/Kconfig"
+ config TARGET_TOTAL_COMPUTE
+ 	bool "Support Total Compute Platform"
+ 	select ARM64
+@@ -2302,6 +2311,7 @@ source "board/bosch/shc/Kconfig"
  source "board/bosch/guardian/Kconfig"
  source "board/Marvell/octeontx/Kconfig"
  source "board/Marvell/octeontx2/Kconfig"
@@ -145,22 +141,24 @@
 +
 diff --git a/configs/corstone500_defconfig b/configs/corstone500_defconfig
 new file mode 100644
-index 000000000000..d3161a4b40d8
+index 000000000000..e475cbe7e40d
 --- /dev/null
 +++ b/configs/corstone500_defconfig
-@@ -0,0 +1,40 @@
+@@ -0,0 +1,41 @@
 +CONFIG_ARM=y
 +CONFIG_SKIP_LOWLEVEL_INIT=y
 +CONFIG_TARGET_CORSTONE500=y
 +CONFIG_SYS_TEXT_BASE=0x88000000
 +CONFIG_SYS_MALLOC_LEN=0x840000
-+CONFIG_SYS_MALLOC_F_LEN=0x2000
 +CONFIG_NR_DRAM_BANKS=1
-+CONFIG_SYS_MEMTEST_START=0x80000000
-+CONFIG_SYS_MEMTEST_END=0xff000000
 +CONFIG_ENV_SIZE=0x40000
++CONFIG_SYS_PROMPT="corstone500# "
 +CONFIG_IDENT_STRING=" corstone500 aarch32"
 +CONFIG_SYS_LOAD_ADDR=0x90000000
++CONFIG_SYS_MEMTEST_START=0x80000000
++CONFIG_SYS_MEMTEST_END=0xff000000
++CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
++CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x83f00000
 +CONFIG_SUPPORT_RAW_INITRD=y
 +CONFIG_BOOTDELAY=1
 +CONFIG_USE_BOOTARGS=y
@@ -168,7 +166,6 @@
 +# CONFIG_DISPLAY_CPUINFO is not set
 +# CONFIG_DISPLAY_BOARDINFO is not set
 +CONFIG_HUSH_PARSER=y
-+CONFIG_SYS_PROMPT="corstone500# "
 +# CONFIG_CMD_CONSOLE is not set
 +CONFIG_CMD_BOOTZ=y
 +# CONFIG_CMD_XIMG is not set
@@ -191,10 +188,10 @@
 +CONFIG_OF_LIBFDT=y
 diff --git a/include/configs/corstone500.h b/include/configs/corstone500.h
 new file mode 100644
-index 000000000000..93c397d2f515
+index 000000000000..416f5fa4399d
 --- /dev/null
 +++ b/include/configs/corstone500.h
-@@ -0,0 +1,109 @@
+@@ -0,0 +1,102 @@
 +/* SPDX-License-Identifier: GPL-2.0+ */
 +/*
 + * (C) Copyright 2022 ARM Limited
@@ -208,8 +205,6 @@
 +#ifndef __CORSTONE500_H
 +#define __CORSTONE500_H
 +
-+#define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_SDRAM_BASE + 0x03f00000)
-+
 +/* Generic Timer Definitions */
 +#define CONFIG_SYS_HZ_CLOCK	7500000
 +#define CONFIG_SYS_HZ		1000
@@ -285,12 +280,7 @@
 +				"bootz $kernel_addr $initrd_addr:0x800000 $fdt_addr"
 +
 +/* Monitor Command Prompt */
-+#define CONFIG_SYS_CBSIZE		512     /* Console I/O Buffer Size */
-+#define CONFIG_SYS_MAXARGS		64      /* max command args */
-+
 +#define CONFIG_SYS_FLASH_BASE		0x80000000
-+/* 256 x 256KiB sectors */
-+#define CONFIG_SYS_MAX_FLASH_SECT	256
 +/* Store environment at top of flash */
 +#define CONFIG_ENV_ADDR			0x0a7c0000
 +#define CONFIG_ENV_SECT_SIZE		0x0040000
@@ -305,5 +295,5 @@
 +#define CONFIG_ENV_IS_IN_FLASH		1
 +#endif
 -- 
-2.37.1
+2.38.1
 
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0002-vexpress64-add-MPU-memory-map-for-the-BASER_FVP.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0002-vexpress64-add-MPU-memory-map-for-the-BASER_FVP.patch
index f405457..b8cab45 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0002-vexpress64-add-MPU-memory-map-for-the-BASER_FVP.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0002-vexpress64-add-MPU-memory-map-for-the-BASER_FVP.patch
@@ -1,4 +1,4 @@
-From 80c64d0c035a5cd0cb23c7b01be39f25e15c7193 Mon Sep 17 00:00:00 2001
+From 181f5efb401ffaa5ab0898b07a976796f75e502a Mon Sep 17 00:00:00 2001
 From: Qi Feng <qi.feng@arm.com>
 Date: Tue, 26 Jul 2022 18:13:23 +0800
 Subject: [PATCH 2/9] vexpress64: add MPU memory map for the BASER_FVP
@@ -17,7 +17,7 @@
  1 file changed, 22 insertions(+)
 
 diff --git a/board/armltd/vexpress64/vexpress64.c b/board/armltd/vexpress64/vexpress64.c
-index 709ebf3fb0..1791cd986f 100644
+index af326dc6f4..2310d18eb7 100644
 --- a/board/armltd/vexpress64/vexpress64.c
 +++ b/board/armltd/vexpress64/vexpress64.c
 @@ -19,6 +19,7 @@
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0003-armv8-Allow-disabling-exception-vectors-on-non-SPL-b.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0003-armv8-Allow-disabling-exception-vectors-on-non-SPL-b.patch
index e6ccc17..caabf80 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0003-armv8-Allow-disabling-exception-vectors-on-non-SPL-b.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0003-armv8-Allow-disabling-exception-vectors-on-non-SPL-b.patch
@@ -1,4 +1,4 @@
-From 61a2df4467c13bbc83bff8a3429e9ebb4b957b56 Mon Sep 17 00:00:00 2001
+From 07cc3e4af3def76d92faf39712d4fd8717b21d2b Mon Sep 17 00:00:00 2001
 From: Peter Hoyes <Peter.Hoyes@arm.com>
 Date: Fri, 10 Dec 2021 11:41:19 +0000
 Subject: [PATCH 3/9] armv8: Allow disabling exception vectors on non-SPL
@@ -27,7 +27,7 @@
  4 files changed, 13 insertions(+), 8 deletions(-)
 
 diff --git a/arch/arm/cpu/armv8/Kconfig b/arch/arm/cpu/armv8/Kconfig
-index 09f3f50fa2..031faa909c 100644
+index 1305238c9d..dec4be0e30 100644
 --- a/arch/arm/cpu/armv8/Kconfig
 +++ b/arch/arm/cpu/armv8/Kconfig
 @@ -1,8 +1,8 @@
@@ -55,7 +55,7 @@
          bool "Enable multiple CPUs to enter into U-Boot"
  
 diff --git a/arch/arm/cpu/armv8/Makefile b/arch/arm/cpu/armv8/Makefile
-index 85fe0475c8..8b3f695835 100644
+index 2e4bf9e038..001a31cae7 100644
 --- a/arch/arm/cpu/armv8/Makefile
 +++ b/arch/arm/cpu/armv8/Makefile
 @@ -13,10 +13,8 @@ ifndef CONFIG_$(SPL_)SYS_DCACHE_OFF
@@ -94,11 +94,11 @@
  	adr	x0, vectors
  	switch_el x1, 3f, 2f, 1f
 diff --git a/configs/vexpress_aemv8r_defconfig b/configs/vexpress_aemv8r_defconfig
-index a1c5d88717..1d5b7411f0 100644
+index 495eb1dee3..683d983c36 100644
 --- a/configs/vexpress_aemv8r_defconfig
 +++ b/configs/vexpress_aemv8r_defconfig
-@@ -13,3 +13,4 @@ CONFIG_BOOTARGS="console=ttyAMA0 earlycon=pl011,0x9c090000 rootfstype=ext4 root=
- CONFIG_SYS_PROMPT="VExpress64# "
+@@ -16,3 +16,4 @@ CONFIG_SYS_CBSIZE=512
+ CONFIG_SYS_PBSIZE=541
  # CONFIG_MMC is not set
  CONFIG_VIRTIO_MMIO=y
 +CONFIG_ARMV8_EXCEPTION_VECTORS=n
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0004-armv8-ARMV8_SWITCH_TO_EL1-improvements.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0004-armv8-ARMV8_SWITCH_TO_EL1-improvements.patch
index 84f6b4b..81758fc 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0004-armv8-ARMV8_SWITCH_TO_EL1-improvements.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0004-armv8-ARMV8_SWITCH_TO_EL1-improvements.patch
@@ -1,4 +1,4 @@
-From dbc1a218e9837e39cd50dd3c19f603f29a08ddba Mon Sep 17 00:00:00 2001
+From 30405f59881c73946b6b0ffdbf25804f9fbf1585 Mon Sep 17 00:00:00 2001
 From: Peter Hoyes <Peter.Hoyes@arm.com>
 Date: Wed, 14 Jul 2021 12:44:27 +0100
 Subject: [PATCH 4/9] armv8: ARMV8_SWITCH_TO_EL1 improvements
@@ -17,29 +17,11 @@
 Signed-off-by: Peter Hoyes <Peter.Hoyes@arm.com>
 Change-Id: If98478148d6d8d1f732acac5439276700614815f
 ---
- arch/arm/cpu/armv8/Kconfig           |  8 +++++++
  arch/arm/cpu/armv8/exception_level.c | 21 ++++++++++++++--
  arch/arm/lib/bootm.c                 | 36 ++++++++++++++++------------
  configs/vexpress_aemv8r_defconfig    |  1 +
- 4 files changed, 49 insertions(+), 17 deletions(-)
+ 3 files changed, 41 insertions(+), 17 deletions(-)
 
-diff --git a/arch/arm/cpu/armv8/Kconfig b/arch/arm/cpu/armv8/Kconfig
-index 031faa909c..110adf63b3 100644
---- a/arch/arm/cpu/armv8/Kconfig
-+++ b/arch/arm/cpu/armv8/Kconfig
-@@ -191,4 +191,12 @@ config ARMV8_EA_EL3_FIRST
- 	  Exception handling at all exception levels for External Abort and
- 	  SError interrupt exception are taken in EL3.
- 
-+config ARMV8_SWITCH_TO_EL1
-+	bool "Switch to EL1 before booting the operating system"
-+	default n
-+	help
-+	  Switch to EL1 before booting the operating system, if for example the
-+	  operating system does not support booting at EL2, or you wish to prevent
-+	  any hypervisors from running. Supported for bootm, booti and bootefi.
-+
- endif
 diff --git a/arch/arm/cpu/armv8/exception_level.c b/arch/arm/cpu/armv8/exception_level.c
 index b11936548f..4aad1550f4 100644
 --- a/arch/arm/cpu/armv8/exception_level.c
@@ -84,10 +66,10 @@
  	}
  }
 diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
-index a59a5e6c0e..e2cf2e6ec4 100644
+index 9f086f3b90..b044aeca88 100644
 --- a/arch/arm/lib/bootm.c
 +++ b/arch/arm/lib/bootm.c
-@@ -272,7 +272,6 @@ __weak void update_os_arch_secondary_cores(uint8_t os_arch)
+@@ -270,7 +270,6 @@ __weak void update_os_arch_secondary_cores(uint8_t os_arch)
  {
  }
  
@@ -95,7 +77,7 @@
  static void switch_to_el1(void)
  {
  	if ((IH_ARCH_DEFAULT == IH_ARCH_ARM64) &&
-@@ -287,7 +286,6 @@ static void switch_to_el1(void)
+@@ -285,7 +284,6 @@ static void switch_to_el1(void)
  				    ES_TO_AARCH64);
  }
  #endif
@@ -103,7 +85,7 @@
  
  /* Subcommand: GO */
  static void boot_jump_linux(bootm_headers_t *images, int flag)
-@@ -314,21 +312,29 @@ static void boot_jump_linux(bootm_headers_t *images, int flag)
+@@ -312,21 +310,29 @@ static void boot_jump_linux(bootm_headers_t *images, int flag)
  
  		update_os_arch_secondary_cores(images->os.arch);
  
@@ -147,10 +129,10 @@
  #else
  	unsigned long machid = gd->bd->bi_arch_number;
 diff --git a/configs/vexpress_aemv8r_defconfig b/configs/vexpress_aemv8r_defconfig
-index 1d5b7411f0..35e5e8a5e1 100644
+index 683d983c36..6044f82b00 100644
 --- a/configs/vexpress_aemv8r_defconfig
 +++ b/configs/vexpress_aemv8r_defconfig
-@@ -14,3 +14,4 @@ CONFIG_SYS_PROMPT="VExpress64# "
+@@ -17,3 +17,4 @@ CONFIG_SYS_PBSIZE=541
  # CONFIG_MMC is not set
  CONFIG_VIRTIO_MMIO=y
  CONFIG_ARMV8_EXCEPTION_VECTORS=n
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0005-armv8-Make-disabling-HVC-configurable-when-switching.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0005-armv8-Make-disabling-HVC-configurable-when-switching.patch
index b546026..f64db3b 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0005-armv8-Make-disabling-HVC-configurable-when-switching.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0005-armv8-Make-disabling-HVC-configurable-when-switching.patch
@@ -1,4 +1,4 @@
-From f75060be04aaed4bb5a07cb40361d694b3775f4a Mon Sep 17 00:00:00 2001
+From a6daca56b77d7f1b26483f10eb33ebdd6e157d3e Mon Sep 17 00:00:00 2001
 From: Peter Hoyes <Peter.Hoyes@arm.com>
 Date: Fri, 10 Dec 2021 16:37:26 +0000
 Subject: [PATCH 5/9] armv8: Make disabling HVC configurable when switching to
@@ -22,12 +22,12 @@
  3 files changed, 18 insertions(+), 2 deletions(-)
 
 diff --git a/arch/arm/cpu/armv8/Kconfig b/arch/arm/cpu/armv8/Kconfig
-index 110adf63b3..a821e219d8 100644
+index dec4be0e30..95c03487a2 100644
 --- a/arch/arm/cpu/armv8/Kconfig
 +++ b/arch/arm/cpu/armv8/Kconfig
-@@ -199,4 +199,13 @@ config ARMV8_SWITCH_TO_EL1
- 	  operating system does not support booting at EL2, or you wish to prevent
- 	  any hypervisors from running. Supported for bootm, booti and bootefi.
+@@ -208,4 +208,13 @@ config ARMV8_CE_SHA256
+ 
+ endif
  
 +config ARMV8_DISABLE_HVC
 +	bool "Disable HVC calls before switching to EL1"
@@ -70,10 +70,10 @@
  
  	/* Return to AArch32 Supervisor mode from EL2 */
 diff --git a/configs/vexpress_aemv8r_defconfig b/configs/vexpress_aemv8r_defconfig
-index 35e5e8a5e1..605a724a61 100644
+index 6044f82b00..6226f6b2c1 100644
 --- a/configs/vexpress_aemv8r_defconfig
 +++ b/configs/vexpress_aemv8r_defconfig
-@@ -15,3 +15,4 @@ CONFIG_SYS_PROMPT="VExpress64# "
+@@ -18,3 +18,4 @@ CONFIG_SYS_PBSIZE=541
  CONFIG_VIRTIO_MMIO=y
  CONFIG_ARMV8_EXCEPTION_VECTORS=n
  CONFIG_ARMV8_SWITCH_TO_EL1=y
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0006-vexpress64-Do-not-set-COUNTER_FREQUENCY.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0006-vexpress64-Do-not-set-COUNTER_FREQUENCY.patch
index ca99d0e..ebbc939 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0006-vexpress64-Do-not-set-COUNTER_FREQUENCY.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0006-vexpress64-Do-not-set-COUNTER_FREQUENCY.patch
@@ -1,4 +1,4 @@
-From db7d4cc91ae19d0cbd05c0ff1b9bf6a55ac0d04a Mon Sep 17 00:00:00 2001
+From 862d3f1ac66a75cdf48adbdebd8adbaf671a9366 Mon Sep 17 00:00:00 2001
 From: Qi Feng <qi.feng@arm.com>
 Date: Thu, 28 Jul 2022 17:47:18 +0800
 Subject: [PATCH 6/9] vexpress64: Do not set COUNTER_FREQUENCY
@@ -18,7 +18,7 @@
  1 file changed, 1 deletion(-)
 
 diff --git a/configs/vexpress_aemv8r_defconfig b/configs/vexpress_aemv8r_defconfig
-index 605a724a61..153fa14efc 100644
+index 6226f6b2c1..b902a6a7d9 100644
 --- a/configs/vexpress_aemv8r_defconfig
 +++ b/configs/vexpress_aemv8r_defconfig
 @@ -1,5 +1,4 @@
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0007-vexpress64-Enable-LIBFDT_OVERLAY-in-the-vexpress_aem.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0007-vexpress64-Enable-LIBFDT_OVERLAY-in-the-vexpress_aem.patch
index 467fb40..8c09ed2 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0007-vexpress64-Enable-LIBFDT_OVERLAY-in-the-vexpress_aem.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0007-vexpress64-Enable-LIBFDT_OVERLAY-in-the-vexpress_aem.patch
@@ -1,4 +1,4 @@
-From f4986ed954ffad36abfa27db5520e702cba2531e Mon Sep 17 00:00:00 2001
+From 32beea722c1167c9b33f1ecfdc28d360cabd6823 Mon Sep 17 00:00:00 2001
 From: Peter Hoyes <Peter.Hoyes@arm.com>
 Date: Tue, 22 Feb 2022 15:32:51 +0000
 Subject: [PATCH 7/9] vexpress64: Enable LIBFDT_OVERLAY in the vexpress_aemv8r
@@ -14,10 +14,10 @@
  1 file changed, 1 insertion(+)
 
 diff --git a/configs/vexpress_aemv8r_defconfig b/configs/vexpress_aemv8r_defconfig
-index 153fa14efc..94651768b3 100644
+index b902a6a7d9..a58a9db385 100644
 --- a/configs/vexpress_aemv8r_defconfig
 +++ b/configs/vexpress_aemv8r_defconfig
-@@ -15,3 +15,4 @@ CONFIG_VIRTIO_MMIO=y
+@@ -18,3 +18,4 @@ CONFIG_VIRTIO_MMIO=y
  CONFIG_ARMV8_EXCEPTION_VECTORS=n
  CONFIG_ARMV8_SWITCH_TO_EL1=y
  CONFIG_ARMV8_DISABLE_HVC=n
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0008-armv8-Allow-PRBAR-MPU-attributes-to-be-configured.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0008-armv8-Allow-PRBAR-MPU-attributes-to-be-configured.patch
index 4b6daf8..8be14ee 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0008-armv8-Allow-PRBAR-MPU-attributes-to-be-configured.patch
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/fvp-baser-aemv8r64/0008-armv8-Allow-PRBAR-MPU-attributes-to-be-configured.patch
@@ -1,4 +1,4 @@
-From af05764e7b64e0704291ba2e71138f2345737afa Mon Sep 17 00:00:00 2001
+From 01490ab8deb0f0b61eeb55a02ee5ea430cfe7eee Mon Sep 17 00:00:00 2001
 From: Peter Hoyes <Peter.Hoyes@arm.com>
 Date: Wed, 18 May 2022 15:24:19 +0100
 Subject: [PATCH 8/9] armv8: Allow PRBAR MPU attributes to be configured
@@ -75,7 +75,7 @@
  
  extern struct mpu_region *mpu_mem_map;
 diff --git a/board/armltd/vexpress64/vexpress64.c b/board/armltd/vexpress64/vexpress64.c
-index 1791cd986f..7858521fec 100644
+index 2310d18eb7..531fa4d618 100644
 --- a/board/armltd/vexpress64/vexpress64.c
 +++ b/board/armltd/vexpress64/vexpress64.c
 @@ -42,15 +42,18 @@ static struct mpu_region vexpress64_aemv8r_mem_map[] = {
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/juno/0002-configs-vexpress-modify-to-boot-compressed-initramfs.patch b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/juno/0002-configs-vexpress-modify-to-boot-compressed-initramfs.patch
new file mode 100644
index 0000000..2bf68fe
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot/juno/0002-configs-vexpress-modify-to-boot-compressed-initramfs.patch
@@ -0,0 +1,41 @@
+From 097a43223da4fa42335944295903ede2755e2dfd Mon Sep 17 00:00:00 2001
+From: Jon Mason <jdmason@kudzu.us>
+Date: Mon, 19 Dec 2022 11:36:04 -0500
+Subject: [PATCH] configs: vexpress: modify to boot compressed initramfs
+
+Signed-off-by: Jon Mason <jdmason@kudzu.us>
+Upstream-Status: Inappropriate
+
+---
+ configs/vexpress_aemv8a_juno_defconfig | 1 +
+ include/configs/vexpress_aemv8.h       | 2 ++
+ 2 files changed, 3 insertions(+)
+
+diff --git a/configs/vexpress_aemv8a_juno_defconfig b/configs/vexpress_aemv8a_juno_defconfig
+index e02124cc7f54..6ffe8f5fe67e 100644
+--- a/configs/vexpress_aemv8a_juno_defconfig
++++ b/configs/vexpress_aemv8a_juno_defconfig
+@@ -16,6 +16,7 @@ CONFIG_SYS_LOAD_ADDR=0x90000000
+ CONFIG_BOOTDELAY=1
+ CONFIG_USE_BOOTARGS=y
+ CONFIG_BOOTARGS="console=ttyAMA0,115200n8 root=/dev/sda2 rw rootwait earlycon=pl011,0x7ff80000 debug user_debug=31 androidboot.hardware=juno loglevel=9"
++CONFIG_BOOTCOMMAND="echo running default boot command; afs load ${kernel_name} ${kernel_addr_r} ; if test $? -eq 1; then   echo Loading ${kernel_alt_name} instead of ${kernel_name};   afs load ${kernel_alt_name} ${kernel_addr_r};fi ; afs load  ${fdtfile} ${fdt_addr_r} ; if test $? -eq 1; then   echo Loading ${fdt_alt_name} instead of ${fdtfile};   afs load ${fdt_alt_name} ${fdt_addr_r}; fi ; fdt addr ${fdt_addr_r}; fdt resize; if afs load  ${initrd_name} ${initrd_addr_r} ; then   setenv initrd_param ${initrd_addr_r};   else setenv initrd_param -; fi ; booti ${kernel_addr_r} ${initrd_param} ${fdt_addr_r}"
+ # CONFIG_DISPLAY_CPUINFO is not set
+ # CONFIG_DISPLAY_BOARDINFO is not set
+ CONFIG_SYS_PROMPT="VExpress64# "
+diff --git a/include/configs/vexpress_aemv8.h b/include/configs/vexpress_aemv8.h
+index cd7f6c1b9ba0..c2f5eb302076 100644
+--- a/include/configs/vexpress_aemv8.h
++++ b/include/configs/vexpress_aemv8.h
+@@ -164,6 +164,8 @@
+ 				"kernel_name=norkern\0"	\
+ 				"kernel_alt_name=Image\0"	\
+ 				"kernel_addr_r=0x80080000\0" \
++				"kernel_comp_addr_r=0x90000000\0" \
++				"kernel_comp_size=0x3000000\0" \
+ 				"initrd_name=ramdisk.img\0"	\
+ 				"initrd_addr_r=0x88000000\0"	\
+ 				"fdtfile=board.dtb\0" \
+-- 
+2.30.2
+
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend
index 6144e97..f26ab4a 100644
--- a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend
@@ -18,37 +18,32 @@
 SYSROOT_DIRS:append:corstone1000 = " /boot"
 
 SRC_URI:append:corstone1000 = " \
-        file://0001-cmd-load-add-load-command-for-memory-mapped.patch                 \
-        file://0002-arm-add-support-to-corstone1000-platform.patch		      \
-        file://0003-usb-common-move-urb-code-to-common.patch			      \
-        file://0004-usb-add-isp1760-family-driver.patch				      \
-        file://0005-corstone1000-enable-isp1763-usb-controller.patch		      \
-        file://0006-arm64-smccc-add-support-for-SMCCCv1.2-x0-x17-registe.patch	      \
-        file://0007-arm64-smccc-clear-the-Xn-registers-after-SMC-calls.patch	      \
-        file://0008-lib-uuid-introduce-be_uuid_str_to_le_bin-function.patch	      \
-        file://0009-arm_ffa-introduce-Arm-FF-A-low-level-driver.patch		      \
-        file://0010-arm_ffa-introduce-armffa-command.patch			      \
-        file://0011-arm_ffa-introduce-the-FF-A-Sandbox-driver.patch		      \
-        file://0012-arm_ffa-introduce-Sandbox-test-cases-for-UCLASS_FFA.patch	      \
-        file://0013-arm_ffa-introduce-armffa-command-Sandbox-test.patch		      \
-        file://0014-arm_ffa-introduce-FF-A-MM-communication.patch		      \
-        file://0015-arm_ffa-corstone1000-enable-FF-A-and-MM-support.patch	      \
-        file://0016-efi-corstone1000-introduce-EFI-capsule-update.patch		      \
-	file://0017-corstone1000-Update-FFA-shared-buffer-address.patch		      \
-	file://0018-arm-corstone1000-fix-unrecognized-filesystem-type.patch	      \
-	file://0019-efi_capsule-corstone1000-pass-interface-id-and-buffe.patch	      \
-	file://0020-efi_boottime-corstone1000-pass-interface-id-and-kern.patch	      \
-        file://0021-efi_loader-corstone1000-remove-guid-check-from-corst.patch	      \
-        file://0022-efi_loader-populate-ESRT-table-if-EFI_ESRT-config-op.patch	      \
-        file://0023-efi_firmware-add-get_image_info-for-corstone1000.patch	      \
-        file://0024-efi_loader-send-bootcomplete-message-to-secure-encla.patch	      \
-        file://0025-efi_loader-fix-null-pointer-exception-with-get_image.patch	      \
-        file://0026-arm-corstone1000-add-mmc-for-fvp.patch			      \
-        file://0027-corstone1000-use-a-compressed-kernel.patch \
-        file://0028-Introduce-external-sys-driver-to-device-tree.patch \
-        file://0029-Add-mhu-and-rpmsg-client-to-u-boot-device-tree.patch \
-        file://0030-arm-corstone1000-esrt-support.patch \
-        file://0031-ffa-add-support-for-32-bit-direct-messaging.patch  \
+        file://0001-arm64-smccc-add-support-for-SMCCCv1.2-x0-x17-registe.patch          \ 
+        file://0002-lib-uuid-introduce-uuid_str_to_le_bin-function.patch		\ 
+        file://0003-arm_ffa-introduce-Arm-FF-A-low-level-driver.patch			\ 
+        file://0004-arm_ffa-efi-unmap-RX-TX-buffers.patch				\ 
+        file://0005-arm_ffa-introduce-armffa-command.patch				\ 
+        file://0006-arm_ffa-introduce-the-FF-A-Sandbox-driver.patch			\ 
+        file://0007-arm_ffa-introduce-Sandbox-test-cases-for-UCLASS_FFA.patch		\ 
+        file://0008-arm_ffa-introduce-armffa-command-Sandbox-test.patch			\ 
+        file://0009-arm_ffa-efi-introduce-FF-A-MM-communication.patch			\ 
+        file://0010-arm_ffa-efi-corstone1000-enable-MM-communication.patch		\ 
+        file://0011-efi-corstone1000-introduce-EFI-capsule-update.patch			\ 
+        file://0012-arm-corstone1000-fix-unrecognized-filesystem-type.patch		\ 
+        file://0013-efi_capsule-corstone1000-pass-interface-id-and-buffe.patch		\ 
+        file://0014-efi_boottime-corstone1000-pass-interface-id-and-kern.patch		\ 
+        file://0015-efi_loader-corstone1000-remove-guid-check-from-corst.patch		\ 
+        file://0016-efi_loader-populate-ESRT-table-if-EFI_ESRT-config-op.patch		\ 
+        file://0017-efi_firmware-add-get_image_info-for-corstone1000.patch		\ 
+        file://0018-efi_loader-send-bootcomplete-message-to-secure-encla.patch		\ 
+        file://0019-efi_loader-fix-null-pointer-exception-with-get_image.patch		\ 
+        file://0020-arm-corstone1000-add-mmc-for-fvp.patch				\ 
+        file://0021-corstone1000-add-compressed-kernel-support.patch			\ 
+        file://0022-Introduce-external-sys-driver-to-device-tree.patch			\ 
+        file://0023-Add-mhu-and-rpmsg-client-to-u-boot-device-tree.patch		\ 
+        file://0024-arm-corstone1000-esrt-support.patch					\ 
+        file://0025-efi_setup-discover-FF-A-bus-before-raising-EFI-start.patch		\ 
+        file://0026-corstone1000-enable-distro-booting-command.patch                        \
         "
 
 #
@@ -82,7 +77,9 @@
 #
 # Juno Machines
 #
-SRC_URI:append:juno = " file://0001-arm-juno-add-custom-bootcmd-to-autoboot-from-uEnv.tx.patch"
+SRC_URI:append:juno = " file://0001-arm-juno-add-custom-bootcmd-to-autoboot-from-uEnv.tx.patch \
+                        file://0002-configs-vexpress-modify-to-boot-compressed-initramfs.patch \
+                      "
 
 
 #
diff --git a/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_2022.10.bb b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_2022.10.bb
new file mode 100644
index 0000000..905ae55
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_2022.10.bb
@@ -0,0 +1,26 @@
+HOMEPAGE = "http://www.denx.de/wiki/U-Boot/WebHome"
+DESCRIPTION = "U-Boot, a boot loader for Embedded boards based on PowerPC, \
+ARM, MIPS and several other processors, which can be installed in a boot \
+ROM and used to initialize and test the hardware or to download and run \
+application code."
+SECTION = "bootloaders"
+DEPENDS += "flex-native bison-native"
+
+LICENSE = "GPL-2.0-or-later"
+LIC_FILES_CHKSUM = "file://Licenses/README;md5=2ca5f2c35c8cc335f0a19756634782f1"
+PE = "1"
+
+# We use the revision in order to avoid having to fetch it from the
+# repo during parse
+SRCREV = "4debc57a3da6c3f4d3f89a637e99206f4cea0a96"
+
+SRC_URI = "git://git.denx.de/u-boot.git;branch=master \
+          "
+
+S = "${WORKDIR}/git"
+B = "${WORKDIR}/build"
+do_configure[cleandirs] = "${B}"
+
+require recipes-bsp/u-boot/u-boot.inc
+
+DEPENDS += "bc-native dtc-native gnutls-native"
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/juno/0001-arm64-dts-juno-Add-thermal-critical-trip-points.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/juno/0001-arm64-dts-juno-Add-thermal-critical-trip-points.patch
new file mode 100644
index 0000000..1c0f25e
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/juno/0001-arm64-dts-juno-Add-thermal-critical-trip-points.patch
@@ -0,0 +1,60 @@
+From c4a7b9b587ca1bb4678d48d8be7132492b23a81c Mon Sep 17 00:00:00 2001
+From: Cristian Marussi <cristian.marussi@arm.com>
+Date: Fri, 28 Oct 2022 15:08:33 +0100
+Subject: [PATCH] arm64: dts: juno: Add thermal critical trip points
+
+When thermnal zones are defined, trip points definitions are mandatory.
+Define a couple of critical trip points for monitoring of existing
+PMIC and SOC thermal zones.
+
+This was lost between txt to yaml conversion and was re-enforced recently
+via the commit 8c596324232d ("dt-bindings: thermal: Fix missing required property")
+
+Cc: Rob Herring <robh+dt@kernel.org>
+Cc: Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>
+Cc: devicetree@vger.kernel.org
+Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
+Fixes: f7b636a8d83c ("arm64: dts: juno: add thermal zones for scpi sensors")
+Link: https://lore.kernel.org/r/20221028140833.280091-8-cristian.marussi@arm.com
+Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
+
+Signed-off-by: Jon Mason <jon.mason@arm.com>
+Upstream-Status: Backport
+---
+ arch/arm64/boot/dts/arm/juno-base.dtsi | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+diff --git a/arch/arm64/boot/dts/arm/juno-base.dtsi b/arch/arm64/boot/dts/arm/juno-base.dtsi
+index 2f27619d8abd..8b4d280b1e7e 100644
+--- a/arch/arm64/boot/dts/arm/juno-base.dtsi
++++ b/arch/arm64/boot/dts/arm/juno-base.dtsi
+@@ -751,12 +751,26 @@ pmic {
+ 			polling-delay = <1000>;
+ 			polling-delay-passive = <100>;
+ 			thermal-sensors = <&scpi_sensors0 0>;
++			trips {
++				pmic_crit0: trip0 {
++					temperature = <90000>;
++					hysteresis = <2000>;
++					type = "critical";
++				};
++			};
+ 		};
+ 
+ 		soc {
+ 			polling-delay = <1000>;
+ 			polling-delay-passive = <100>;
+ 			thermal-sensors = <&scpi_sensors0 3>;
++			trips {
++				soc_crit0: trip0 {
++					temperature = <80000>;
++					hysteresis = <2000>;
++					type = "critical";
++				};
++			};
+ 		};
+ 
+ 		big_cluster_thermal_zone: big-cluster {
+-- 
+2.30.2
+
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/juno/0002-arm64-dts-Update-cache-properties-for-Arm-Ltd-platfo.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/juno/0002-arm64-dts-Update-cache-properties-for-Arm-Ltd-platfo.patch
new file mode 100644
index 0000000..f19fb8b
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/juno/0002-arm64-dts-Update-cache-properties-for-Arm-Ltd-platfo.patch
@@ -0,0 +1,141 @@
+From 59fb813f9742b349f48250bd7793279cafe2752c Mon Sep 17 00:00:00 2001
+From: Pierre Gondois <pierre.gondois@arm.com>
+Date: Mon, 7 Nov 2022 16:56:58 +0100
+Subject: [PATCH] arm64: dts: Update cache properties for Arm Ltd platforms
+
+The DeviceTree Specification v0.3 specifies that the cache node
+"compatible" and "cache-level" properties are required.
+
+Cf. s3.8 Multi-level and Shared Cache Nodes
+The 'cache-unified' property should be present if one of the properties
+for unified cache is present ('cache-size', ...).
+
+Update the relevant device trees nodes accordingly.
+
+Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
+Link: https://lore.kernel.org/r/20221107155825.1644604-6-pierre.gondois@arm.com
+Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
+
+Signed-off-by: Jon Mason <jon.mason@arm.com>
+Upstream-Status: Backport
+---
+ arch/arm64/boot/dts/arm/corstone1000.dtsi            | 1 +
+ arch/arm64/boot/dts/arm/foundation-v8.dtsi           | 1 +
+ arch/arm64/boot/dts/arm/juno-r1.dts                  | 2 ++
+ arch/arm64/boot/dts/arm/juno-r2.dts                  | 2 ++
+ arch/arm64/boot/dts/arm/juno.dts                     | 2 ++
+ arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts           | 1 +
+ arch/arm64/boot/dts/arm/vexpress-v2f-1xv7-ca53x2.dts | 1 +
+ 7 files changed, 10 insertions(+)
+
+diff --git a/arch/arm64/boot/dts/arm/corstone1000.dtsi b/arch/arm64/boot/dts/arm/corstone1000.dtsi
+index 4e46826f883a..21f1f952e985 100644
+--- a/arch/arm64/boot/dts/arm/corstone1000.dtsi
++++ b/arch/arm64/boot/dts/arm/corstone1000.dtsi
+@@ -53,6 +53,7 @@ gic: interrupt-controller@1c000000 {
+ 
+ 	L2_0: l2-cache0 {
+ 		compatible = "cache";
++		cache-unified;
+ 		cache-level = <2>;
+ 		cache-size = <0x80000>;
+ 		cache-line-size = <64>;
+diff --git a/arch/arm64/boot/dts/arm/foundation-v8.dtsi b/arch/arm64/boot/dts/arm/foundation-v8.dtsi
+index 83e3e7e3984f..c8bd23b1a7ba 100644
+--- a/arch/arm64/boot/dts/arm/foundation-v8.dtsi
++++ b/arch/arm64/boot/dts/arm/foundation-v8.dtsi
+@@ -58,6 +58,7 @@ cpu3: cpu@3 {
+ 
+ 		L2_0: l2-cache0 {
+ 			compatible = "cache";
++			cache-level = <2>;
+ 		};
+ 	};
+ 
+diff --git a/arch/arm64/boot/dts/arm/juno-r1.dts b/arch/arm64/boot/dts/arm/juno-r1.dts
+index 6451c62146fd..1d90eeebb37d 100644
+--- a/arch/arm64/boot/dts/arm/juno-r1.dts
++++ b/arch/arm64/boot/dts/arm/juno-r1.dts
+@@ -189,6 +189,7 @@ A53_3: cpu@103 {
+ 
+ 		A57_L2: l2-cache0 {
+ 			compatible = "cache";
++			cache-unified;
+ 			cache-size = <0x200000>;
+ 			cache-line-size = <64>;
+ 			cache-sets = <2048>;
+@@ -197,6 +198,7 @@ A57_L2: l2-cache0 {
+ 
+ 		A53_L2: l2-cache1 {
+ 			compatible = "cache";
++			cache-unified;
+ 			cache-size = <0x100000>;
+ 			cache-line-size = <64>;
+ 			cache-sets = <1024>;
+diff --git a/arch/arm64/boot/dts/arm/juno-r2.dts b/arch/arm64/boot/dts/arm/juno-r2.dts
+index 438cd1ff4bd0..d2ada69b0a43 100644
+--- a/arch/arm64/boot/dts/arm/juno-r2.dts
++++ b/arch/arm64/boot/dts/arm/juno-r2.dts
+@@ -195,6 +195,7 @@ A53_3: cpu@103 {
+ 
+ 		A72_L2: l2-cache0 {
+ 			compatible = "cache";
++			cache-unified;
+ 			cache-size = <0x200000>;
+ 			cache-line-size = <64>;
+ 			cache-sets = <2048>;
+@@ -203,6 +204,7 @@ A72_L2: l2-cache0 {
+ 
+ 		A53_L2: l2-cache1 {
+ 			compatible = "cache";
++			cache-unified;
+ 			cache-size = <0x100000>;
+ 			cache-line-size = <64>;
+ 			cache-sets = <1024>;
+diff --git a/arch/arm64/boot/dts/arm/juno.dts b/arch/arm64/boot/dts/arm/juno.dts
+index cf4a58211399..5e48a01a5b9f 100644
+--- a/arch/arm64/boot/dts/arm/juno.dts
++++ b/arch/arm64/boot/dts/arm/juno.dts
+@@ -194,6 +194,7 @@ A53_3: cpu@103 {
+ 
+ 		A57_L2: l2-cache0 {
+ 			compatible = "cache";
++			cache-unified;
+ 			cache-size = <0x200000>;
+ 			cache-line-size = <64>;
+ 			cache-sets = <2048>;
+@@ -202,6 +203,7 @@ A57_L2: l2-cache0 {
+ 
+ 		A53_L2: l2-cache1 {
+ 			compatible = "cache";
++			cache-unified;
+ 			cache-size = <0x100000>;
+ 			cache-line-size = <64>;
+ 			cache-sets = <1024>;
+diff --git a/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts b/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts
+index 258991ad7cc0..ef68f5aae7dd 100644
+--- a/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts
++++ b/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts
+@@ -71,6 +71,7 @@ cpu@3 {
+ 
+ 		L2_0: l2-cache0 {
+ 			compatible = "cache";
++			cache-level = <2>;
+ 		};
+ 	};
+ 
+diff --git a/arch/arm64/boot/dts/arm/vexpress-v2f-1xv7-ca53x2.dts b/arch/arm64/boot/dts/arm/vexpress-v2f-1xv7-ca53x2.dts
+index 5b6d9d8e934d..796cd7d02eb5 100644
+--- a/arch/arm64/boot/dts/arm/vexpress-v2f-1xv7-ca53x2.dts
++++ b/arch/arm64/boot/dts/arm/vexpress-v2f-1xv7-ca53x2.dts
+@@ -57,6 +57,7 @@ cpu@1 {
+ 
+ 		L2_0: l2-cache0 {
+ 			compatible = "cache";
++			cache-level = <2>;
+ 		};
+ 	};
+ 
+-- 
+2.30.2
+
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/juno/0003-arm64-dts-fvp-Add-SPE-to-Foundation-FVP.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/juno/0003-arm64-dts-fvp-Add-SPE-to-Foundation-FVP.patch
new file mode 100644
index 0000000..34dd025
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/juno/0003-arm64-dts-fvp-Add-SPE-to-Foundation-FVP.patch
@@ -0,0 +1,38 @@
+From 3bd7a0219082c2c91570b81afc35f2aec57cade2 Mon Sep 17 00:00:00 2001
+From: James Clark <james.clark@arm.com>
+Date: Thu, 17 Nov 2022 10:25:36 +0000
+Subject: [PATCH] arm64: dts: fvp: Add SPE to Foundation FVP
+
+Add SPE DT node to FVP model. If the model doesn't support SPE (e.g.,
+turned off via parameter), the driver will skip the initialisation
+accordingly and thus is safe.
+
+Signed-off-by: James Clark <james.clark@arm.com>
+Link: https://lore.kernel.org/r/20221117102536.237515-1-james.clark@arm.com
+Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
+
+Signed-off-by: Jon Mason <jon.mason@arm.com>
+Upstream-Status: Backport
+---
+ arch/arm64/boot/dts/arm/foundation-v8.dtsi | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/arch/arm64/boot/dts/arm/foundation-v8.dtsi b/arch/arm64/boot/dts/arm/foundation-v8.dtsi
+index c8bd23b1a7ba..029578072d8f 100644
+--- a/arch/arm64/boot/dts/arm/foundation-v8.dtsi
++++ b/arch/arm64/boot/dts/arm/foundation-v8.dtsi
+@@ -85,6 +85,11 @@ pmu {
+ 			     <GIC_SPI 63 IRQ_TYPE_LEVEL_HIGH>;
+ 	};
+ 
++	spe-pmu {
++		compatible = "arm,statistical-profiling-extension-v1";
++		interrupts = <GIC_PPI 5 IRQ_TYPE_LEVEL_HIGH>;
++	};
++
+ 	watchdog@2a440000 {
+ 		compatible = "arm,sbsa-gwdt";
+ 		reg = <0x0 0x2a440000 0 0x1000>,
+-- 
+2.30.2
+
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/juno/0004-arm64-dts-fvp-Add-information-about-L1-and-L2-caches.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/juno/0004-arm64-dts-fvp-Add-information-about-L1-and-L2-caches.patch
new file mode 100644
index 0000000..72f7161
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/juno/0004-arm64-dts-fvp-Add-information-about-L1-and-L2-caches.patch
@@ -0,0 +1,149 @@
+From b2d5025e129289d9b914c696646e64495a7453c0 Mon Sep 17 00:00:00 2001
+From: Sudeep Holla <sudeep.holla@arm.com>
+Date: Fri, 18 Nov 2022 15:10:17 +0000
+Subject: [PATCH] arm64: dts: fvp: Add information about L1 and L2 caches
+
+Add the information about L1 and L2 caches on FVP RevC platform.
+Though the cache size is configurable through the model parameters,
+having default values in the device tree helps to exercise and debug
+any code utilising the cache information without the need of real
+hardware.
+
+Link: https://lore.kernel.org/r/20221118151017.704716-1-sudeep.holla@arm.com
+Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
+
+Signed-off-by: Jon Mason <jon.mason@arm.com>
+Upstream-Status: Backport
+---
+ arch/arm64/boot/dts/arm/fvp-base-revc.dts | 73 +++++++++++++++++++++++
+ 1 file changed, 73 insertions(+)
+
+diff --git a/arch/arm64/boot/dts/arm/fvp-base-revc.dts b/arch/arm64/boot/dts/arm/fvp-base-revc.dts
+index 5f6f30c801a7..60472d65a355 100644
+--- a/arch/arm64/boot/dts/arm/fvp-base-revc.dts
++++ b/arch/arm64/boot/dts/arm/fvp-base-revc.dts
+@@ -47,48 +47,121 @@ cpu0: cpu@0 {
+ 			compatible = "arm,armv8";
+ 			reg = <0x0 0x000>;
+ 			enable-method = "psci";
++			i-cache-size = <0x8000>;
++			i-cache-line-size = <64>;
++			i-cache-sets = <256>;
++			d-cache-size = <0x8000>;
++			d-cache-line-size = <64>;
++			d-cache-sets = <256>;
++			next-level-cache = <&C0_L2>;
+ 		};
+ 		cpu1: cpu@100 {
+ 			device_type = "cpu";
+ 			compatible = "arm,armv8";
+ 			reg = <0x0 0x100>;
+ 			enable-method = "psci";
++			i-cache-size = <0x8000>;
++			i-cache-line-size = <64>;
++			i-cache-sets = <256>;
++			d-cache-size = <0x8000>;
++			d-cache-line-size = <64>;
++			d-cache-sets = <256>;
++			next-level-cache = <&C0_L2>;
+ 		};
+ 		cpu2: cpu@200 {
+ 			device_type = "cpu";
+ 			compatible = "arm,armv8";
+ 			reg = <0x0 0x200>;
+ 			enable-method = "psci";
++			i-cache-size = <0x8000>;
++			i-cache-line-size = <64>;
++			i-cache-sets = <256>;
++			d-cache-size = <0x8000>;
++			d-cache-line-size = <64>;
++			d-cache-sets = <256>;
++			next-level-cache = <&C0_L2>;
+ 		};
+ 		cpu3: cpu@300 {
+ 			device_type = "cpu";
+ 			compatible = "arm,armv8";
+ 			reg = <0x0 0x300>;
+ 			enable-method = "psci";
++			i-cache-size = <0x8000>;
++			i-cache-line-size = <64>;
++			i-cache-sets = <256>;
++			d-cache-size = <0x8000>;
++			d-cache-line-size = <64>;
++			d-cache-sets = <256>;
++			next-level-cache = <&C0_L2>;
+ 		};
+ 		cpu4: cpu@10000 {
+ 			device_type = "cpu";
+ 			compatible = "arm,armv8";
+ 			reg = <0x0 0x10000>;
+ 			enable-method = "psci";
++			i-cache-size = <0x8000>;
++			i-cache-line-size = <64>;
++			i-cache-sets = <256>;
++			d-cache-size = <0x8000>;
++			d-cache-line-size = <64>;
++			d-cache-sets = <256>;
++			next-level-cache = <&C1_L2>;
+ 		};
+ 		cpu5: cpu@10100 {
+ 			device_type = "cpu";
+ 			compatible = "arm,armv8";
+ 			reg = <0x0 0x10100>;
+ 			enable-method = "psci";
++			i-cache-size = <0x8000>;
++			i-cache-line-size = <64>;
++			i-cache-sets = <256>;
++			d-cache-size = <0x8000>;
++			d-cache-line-size = <64>;
++			d-cache-sets = <256>;
++			next-level-cache = <&C1_L2>;
+ 		};
+ 		cpu6: cpu@10200 {
+ 			device_type = "cpu";
+ 			compatible = "arm,armv8";
+ 			reg = <0x0 0x10200>;
+ 			enable-method = "psci";
++			i-cache-size = <0x8000>;
++			i-cache-line-size = <64>;
++			i-cache-sets = <256>;
++			d-cache-size = <0x8000>;
++			d-cache-line-size = <64>;
++			d-cache-sets = <256>;
++			next-level-cache = <&C1_L2>;
+ 		};
+ 		cpu7: cpu@10300 {
+ 			device_type = "cpu";
+ 			compatible = "arm,armv8";
+ 			reg = <0x0 0x10300>;
+ 			enable-method = "psci";
++			i-cache-size = <0x8000>;
++			i-cache-line-size = <64>;
++			i-cache-sets = <256>;
++			d-cache-size = <0x8000>;
++			d-cache-line-size = <64>;
++			d-cache-sets = <256>;
++			next-level-cache = <&C1_L2>;
++		};
++		C0_L2: l2-cache0 {
++			compatible = "cache";
++			cache-size = <0x80000>;
++			cache-line-size = <64>;
++			cache-sets = <512>;
++			cache-level = <2>;
++			cache-unified;
++		};
++
++		C1_L2: l2-cache1 {
++			compatible = "cache";
++			cache-size = <0x80000>;
++			cache-line-size = <64>;
++			cache-sets = <512>;
++			cache-level = <2>;
++			cache-unified;
+ 		};
+ 	};
+ 
+-- 
+2.30.2
+
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/juno/0005-ARM-dts-vexpress-align-LED-node-names-with-dtschema.patch b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/juno/0005-ARM-dts-vexpress-align-LED-node-names-with-dtschema.patch
new file mode 100644
index 0000000..c551250
--- /dev/null
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/juno/0005-ARM-dts-vexpress-align-LED-node-names-with-dtschema.patch
@@ -0,0 +1,84 @@
+From e15031539490733279c41ba87f4ef2b440a685f5 Mon Sep 17 00:00:00 2001
+From: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Date: Fri, 25 Nov 2022 15:41:12 +0100
+Subject: [PATCH] ARM: dts: vexpress: align LED node names with dtschema
+
+The node names should be generic and DT schema expects certain pattern.
+
+  vexpress-v2p-ca9.dtb: leds: 'user1', 'user2', 'user3', 'user4', 'user5', 'user6', 'user7', 'user8' do not match any of the regexes: '(^led-[0-9a-f]$|led)', 'pinctrl-[0-9]+'
+
+Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
+Link: https://lore.kernel.org/r/20221125144112.476817-1-krzysztof.kozlowski@linaro.org
+Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
+
+Signed-off-by: Jon Mason <jon.mason@arm.com>
+Upstream-Status: Backport
+---
+ arch/arm/boot/dts/vexpress-v2m.dtsi | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/arch/arm/boot/dts/vexpress-v2m.dtsi b/arch/arm/boot/dts/vexpress-v2m.dtsi
+index f434fe5cf4a1..def538ce8769 100644
+--- a/arch/arm/boot/dts/vexpress-v2m.dtsi
++++ b/arch/arm/boot/dts/vexpress-v2m.dtsi
+@@ -383,49 +383,49 @@ v2m_refclk32khz: refclk32khz {
+ 			leds {
+ 				compatible = "gpio-leds";
+ 
+-				user1 {
++				led-user1 {
+ 					label = "v2m:green:user1";
+ 					gpios = <&v2m_led_gpios 0 0>;
+ 					linux,default-trigger = "heartbeat";
+ 				};
+ 
+-				user2 {
++				led-user2 {
+ 					label = "v2m:green:user2";
+ 					gpios = <&v2m_led_gpios 1 0>;
+ 					linux,default-trigger = "mmc0";
+ 				};
+ 
+-				user3 {
++				led-user3 {
+ 					label = "v2m:green:user3";
+ 					gpios = <&v2m_led_gpios 2 0>;
+ 					linux,default-trigger = "cpu0";
+ 				};
+ 
+-				user4 {
++				led-user4 {
+ 					label = "v2m:green:user4";
+ 					gpios = <&v2m_led_gpios 3 0>;
+ 					linux,default-trigger = "cpu1";
+ 				};
+ 
+-				user5 {
++				led-user5 {
+ 					label = "v2m:green:user5";
+ 					gpios = <&v2m_led_gpios 4 0>;
+ 					linux,default-trigger = "cpu2";
+ 				};
+ 
+-				user6 {
++				led-user6 {
+ 					label = "v2m:green:user6";
+ 					gpios = <&v2m_led_gpios 5 0>;
+ 					linux,default-trigger = "cpu3";
+ 				};
+ 
+-				user7 {
++				led-user7 {
+ 					label = "v2m:green:user7";
+ 					gpios = <&v2m_led_gpios 6 0>;
+ 					linux,default-trigger = "cpu4";
+ 				};
+ 
+-				user8 {
++				led-user8 {
+ 					label = "v2m:green:user8";
+ 					gpios = <&v2m_led_gpios 7 0>;
+ 					linux,default-trigger = "cpu5";
+-- 
+2.30.2
+
diff --git a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc
index df90610..4f9bcfd 100644
--- a/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc
+++ b/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-arm-platforms.inc
@@ -100,6 +100,13 @@
 KBUILD_DEFCONFIG:juno = "defconfig"
 KCONFIG_MODE:juno = "--alldefconfig"
 FILESEXTRAPATHS:prepend:juno := "${ARMBSPFILESPATHS}"
+SRC_URI:append:juno = " \
+    file://0001-arm64-dts-juno-Add-thermal-critical-trip-points.patch \
+    file://0002-arm64-dts-Update-cache-properties-for-Arm-Ltd-platfo.patch \
+    file://0003-arm64-dts-fvp-Add-SPE-to-Foundation-FVP.patch \
+    file://0004-arm64-dts-fvp-Add-information-about-L1-and-L2-caches.patch \
+    file://0005-ARM-dts-vexpress-align-LED-node-names-with-dtschema.patch \
+    "
 
 #
 # Musca B1/S2 can't run Linux
