* [PATCH v5 1/5] arm: psci: Add API to check for support of specific PSCI function
2026-01-13 10:38 [PATCH v5 0/5] Implement reset to EDL for qcs9100 Varadarajan Narayanan
@ 2026-01-13 10:38 ` Varadarajan Narayanan
2026-01-13 10:38 ` [PATCH v5 2/5] drivers: sysreset: Add sysreset op that can take arguments Varadarajan Narayanan
` (5 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Varadarajan Narayanan @ 2026-01-13 10:38 UTC (permalink / raw)
To: trini, casey.connolly, neil.armstrong, sumit.garg,
varadarajan.narayanan, ilias.apalodimas, jerome,
marek.vasut+renesas, christopher.obbard, me, michal.simek,
clamor95, u-boot, u-boot-qcom
Add an API to check if a specific PSCI function is supported or not.
This is based on the psci_features() function present in Linux kernel
(drivers/firmware/psci/psci.c).
Reviewed-by: Casey Connolly <casey.connolly@linaro.org>
Signed-off-by: Varadarajan Narayanan <varadarajan.narayanan@oss.qualcomm.com>
---
arch/arm/cpu/armv8/fwcall.c | 15 +++++++++++++++
arch/arm/include/asm/system.h | 1 +
2 files changed, 16 insertions(+)
diff --git a/arch/arm/cpu/armv8/fwcall.c b/arch/arm/cpu/armv8/fwcall.c
index 87de09979b1..f834d770dd6 100644
--- a/arch/arm/cpu/armv8/fwcall.c
+++ b/arch/arm/cpu/armv8/fwcall.c
@@ -129,3 +129,18 @@ void __noreturn psci_system_off(void)
while (1)
;
}
+
+int psci_features(u32 psci_func_id)
+{
+ struct pt_regs regs;
+
+ regs.regs[0] = ARM_PSCI_1_0_FN_PSCI_FEATURES;
+ regs.regs[1] = psci_func_id;
+
+ if (use_smc_for_psci)
+ smc_call(®s);
+ else
+ hvc_call(®s);
+
+ return regs.regs[0];
+}
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h
index 4c1b81483c9..0b788bcf0e5 100644
--- a/arch/arm/include/asm/system.h
+++ b/arch/arm/include/asm/system.h
@@ -336,6 +336,7 @@ void smc_call(struct pt_regs *args);
void __noreturn psci_system_reset(void);
void __noreturn psci_system_reset2(u32 reset_level, u32 cookie);
void __noreturn psci_system_off(void);
+int psci_features(u32 psci_func_id);
#ifdef CONFIG_ARMV8_PSCI
extern char __secure_start[];
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH v5 2/5] drivers: sysreset: Add sysreset op that can take arguments
2026-01-13 10:38 [PATCH v5 0/5] Implement reset to EDL for qcs9100 Varadarajan Narayanan
2026-01-13 10:38 ` [PATCH v5 1/5] arm: psci: Add API to check for support of specific PSCI function Varadarajan Narayanan
@ 2026-01-13 10:38 ` Varadarajan Narayanan
2026-01-13 10:38 ` [PATCH v5 3/5] sysreset: Implement PSCI based reset to EDL mode for QCOM SoCs Varadarajan Narayanan
` (4 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Varadarajan Narayanan @ 2026-01-13 10:38 UTC (permalink / raw)
To: trini, casey.connolly, neil.armstrong, sumit.garg,
varadarajan.narayanan, ilias.apalodimas, jerome,
marek.vasut+renesas, christopher.obbard, me, michal.simek,
clamor95, u-boot, u-boot-qcom
Add a 'request_arg' op to struct sysreset_ops to enable sysreset drivers
to receive arguments given to the 'reset' command. Process the
request_arg() op before the usual request() op.
Reviewed-by: Casey Connolly <casey.connolly@linaro.org>
Signed-off-by: Varadarajan Narayanan <varadarajan.narayanan@oss.qualcomm.com>
---
drivers/sysreset/sysreset-uclass.c | 32 ++++++++++++++++++++++++++++++
include/sysreset.h | 18 +++++++++++++++++
2 files changed, 50 insertions(+)
diff --git a/drivers/sysreset/sysreset-uclass.c b/drivers/sysreset/sysreset-uclass.c
index 536ac727142..6eb090a37aa 100644
--- a/drivers/sysreset/sysreset-uclass.c
+++ b/drivers/sysreset/sysreset-uclass.c
@@ -32,6 +32,16 @@ int sysreset_request(struct udevice *dev, enum sysreset_t type)
return ops->request(dev, type);
}
+int sysreset_request_arg(struct udevice *dev, int argc, char * const argv[])
+{
+ struct sysreset_ops *ops = sysreset_get_ops(dev);
+
+ if (!ops->request_arg)
+ return -ENOSYS;
+
+ return ops->request_arg(dev, argc, argv);
+}
+
int sysreset_get_status(struct udevice *dev, char *buf, int size)
{
struct sysreset_ops *ops = sysreset_get_ops(dev);
@@ -71,6 +81,24 @@ int sysreset_walk(enum sysreset_t type)
return ret;
}
+int sysreset_walk_arg(int argc, char * const argv[])
+{
+ struct udevice *dev;
+ int ret = -ENOSYS;
+
+ while (ret != -EINPROGRESS && ret != -EPROTONOSUPPORT) {
+ for (uclass_first_device(UCLASS_SYSRESET, &dev);
+ dev;
+ uclass_next_device(&dev)) {
+ ret = sysreset_request_arg(dev, argc, argv);
+ if (ret == -EINPROGRESS || ret == -EPROTONOSUPPORT)
+ break;
+ }
+ }
+
+ return ret;
+}
+
int sysreset_get_last_walk(void)
{
struct udevice *dev;
@@ -132,6 +160,10 @@ int do_reset(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
printf("resetting ...\n");
mdelay(100);
+ if (argc > 1)
+ if (sysreset_walk_arg(argc, argv) == -EINPROGRESS)
+ return 0;
+
sysreset_walk_halt(reset_type);
return 0;
diff --git a/include/sysreset.h b/include/sysreset.h
index ff20abdeed3..d1cc9ebc542 100644
--- a/include/sysreset.h
+++ b/include/sysreset.h
@@ -43,6 +43,24 @@ struct sysreset_ops {
* (in which case this method will not actually return)
*/
int (*request)(struct udevice *dev, enum sysreset_t type);
+
+ /**
+ * @request_arg: Reset handler implementations that might need to process
+ * arguments given to the 'reset' command.
+ *
+ * Note that this function may return before the reset takes effect.
+ *
+ * @dev: Device to be used for system reset
+ * @argc: No. of items in @argv
+ * @argv: Arguments given to 'reset' command
+ * Return:
+ * -EINPROGRESS if the reset has started and will complete soon
+ * -EPROTONOSUPPORT if not supported by this device
+ * 0 if the reset has already happened
+ * (in which case this method will not actually return)
+ */
+ int (*request_arg)(struct udevice *dev, int argc, char * const argv[]);
+
/**
* @get_status: get printable reset status information
*
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH v5 3/5] sysreset: Implement PSCI based reset to EDL mode for QCOM SoCs
2026-01-13 10:38 [PATCH v5 0/5] Implement reset to EDL for qcs9100 Varadarajan Narayanan
2026-01-13 10:38 ` [PATCH v5 1/5] arm: psci: Add API to check for support of specific PSCI function Varadarajan Narayanan
2026-01-13 10:38 ` [PATCH v5 2/5] drivers: sysreset: Add sysreset op that can take arguments Varadarajan Narayanan
@ 2026-01-13 10:38 ` Varadarajan Narayanan
2026-01-13 10:38 ` [PATCH v5 4/5] cmd: boot: Add '-edl' option to reset command documentation Varadarajan Narayanan
` (3 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Varadarajan Narayanan @ 2026-01-13 10:38 UTC (permalink / raw)
To: trini, casey.connolly, neil.armstrong, sumit.garg,
varadarajan.narayanan, ilias.apalodimas, jerome,
marek.vasut+renesas, christopher.obbard, me, michal.simek,
clamor95, u-boot, u-boot-qcom
Implement request_arg() sysreset_op for QCOM SoCs that use
PSCI to reset to EDL (Emergency Download) mode.
Reviewed-by: Casey Connolly <casey.connolly@linaro.org>
Signed-off-by: Varadarajan Narayanan <varadarajan.narayanan@oss.qualcomm.com>
---
v4: * Check if ARM_PSCI_1_1_FN64_SYSTEM_RESET2 is supported before
issuing it
v3: * Move argument handling to a separate function and pass the
arguments to the actual handler to process
* Drop Qcom specific SYSRESET_EDL from the common enum
v2: * Update commit message
* Elaborate Kconfig help text
* Use '-edl' instead of 'edl' for consistency with other arguments of reset
command
* Remove 'weak' for qcom_psci_sysreset_get_status() and make it static
* Mention 'SYSRESET_EDL' is Qcom specific in the enum's comments
---
drivers/firmware/psci.c | 4 +++
drivers/sysreset/Kconfig | 6 ++++
drivers/sysreset/Makefile | 1 +
drivers/sysreset/sysreset_qcom-psci.c | 45 +++++++++++++++++++++++++++
4 files changed, 56 insertions(+)
create mode 100644 drivers/sysreset/sysreset_qcom-psci.c
diff --git a/drivers/firmware/psci.c b/drivers/firmware/psci.c
index 2e3223e1c32..b6838a244d2 100644
--- a/drivers/firmware/psci.c
+++ b/drivers/firmware/psci.c
@@ -186,6 +186,10 @@ static int psci_bind(struct udevice *dev)
NULL);
if (ret)
pr_debug("PSCI System Reset was not bound.\n");
+ if (IS_ENABLED(CONFIG_SYSRESET_QCOM_PSCI) &&
+ device_bind_driver(dev, "qcom_psci-sysreset",
+ "qcom_psci-sysreset", NULL))
+ pr_debug("QCOM PSCI System Reset was not bound.\n");
}
/* From PSCI v1.0 onward we can discover services through ARM_SMCCC_FEATURE */
diff --git a/drivers/sysreset/Kconfig b/drivers/sysreset/Kconfig
index 0181f6cd581..8e010bf1ccc 100644
--- a/drivers/sysreset/Kconfig
+++ b/drivers/sysreset/Kconfig
@@ -293,6 +293,12 @@ config SYSRESET_RAA215300
help
Add support for the system reboot via the Renesas RAA215300 PMIC.
+config SYSRESET_QCOM_PSCI
+ bool "Support reset to EDL for Qualcomm SoCs via PSCI"
+ help
+ Add support for the reset to EDL (Emergency Download) on Qualcomm
+ SoCs via PSCI.
+
config SYSRESET_QCOM_PSHOLD
bool "Support sysreset for Qualcomm SoCs via PSHOLD"
help
diff --git a/drivers/sysreset/Makefile b/drivers/sysreset/Makefile
index f5c78b25896..8bb1eabd48e 100644
--- a/drivers/sysreset/Makefile
+++ b/drivers/sysreset/Makefile
@@ -30,5 +30,6 @@ obj-$(CONFIG_SYSRESET_RESETCTL) += sysreset_resetctl.o
obj-$(CONFIG_$(PHASE_)SYSRESET_AT91) += sysreset_at91.o
obj-$(CONFIG_$(PHASE_)SYSRESET_X86) += sysreset_x86.o
obj-$(CONFIG_SYSRESET_RAA215300) += sysreset_raa215300.o
+obj-$(CONFIG_SYSRESET_QCOM_PSCI) += sysreset_qcom-psci.o
obj-$(CONFIG_SYSRESET_QCOM_PSHOLD) += sysreset_qcom-pshold.o
obj-$(CONFIG_TARGET_XTFPGA) += sysreset_xtfpga.o
diff --git a/drivers/sysreset/sysreset_qcom-psci.c b/drivers/sysreset/sysreset_qcom-psci.c
new file mode 100644
index 00000000000..3627bbf5c82
--- /dev/null
+++ b/drivers/sysreset/sysreset_qcom-psci.c
@@ -0,0 +1,45 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2017 Masahiro Yamada <yamada.masahiro@socionext.com>
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
+ */
+
+#include <dm.h>
+#include <sysreset.h>
+#include <asm/system.h>
+#include <linux/errno.h>
+#include <linux/psci.h>
+#include <asm/psci.h>
+
+static int qcom_psci_sysreset_get_status(struct udevice *dev, char *buf, int size)
+{
+ return -EOPNOTSUPP;
+}
+
+static int qcom_psci_sysreset_request_arg(struct udevice *dev, int argc,
+ char * const argv[])
+{
+ if (!strncasecmp(argv[1], "-edl", 4)) {
+ /* Supported in qcs9100, qcs8300, sc7280, qcs615 */
+ if (psci_features(ARM_PSCI_1_1_FN64_SYSTEM_RESET2) ==
+ ARM_PSCI_RET_SUCCESS) {
+ psci_system_reset2(0, 1);
+ return -EINPROGRESS;
+ }
+ printf("PSCI SYSTEM_RESET2 not supported\n");
+ }
+
+ return -EPROTONOSUPPORT;
+}
+
+static struct sysreset_ops qcom_psci_sysreset_ops = {
+ .request_arg = qcom_psci_sysreset_request_arg,
+ .get_status = qcom_psci_sysreset_get_status,
+};
+
+U_BOOT_DRIVER(qcom_psci_sysreset) = {
+ .name = "qcom_psci-sysreset",
+ .id = UCLASS_SYSRESET,
+ .ops = &qcom_psci_sysreset_ops,
+ .flags = DM_FLAG_PRE_RELOC,
+};
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH v5 4/5] cmd: boot: Add '-edl' option to reset command documentation
2026-01-13 10:38 [PATCH v5 0/5] Implement reset to EDL for qcs9100 Varadarajan Narayanan
` (2 preceding siblings ...)
2026-01-13 10:38 ` [PATCH v5 3/5] sysreset: Implement PSCI based reset to EDL mode for QCOM SoCs Varadarajan Narayanan
@ 2026-01-13 10:38 ` Varadarajan Narayanan
2026-01-13 10:38 ` [PATCH v5 5/5] qcom_defconfig: enable psci based sysreset Varadarajan Narayanan
` (2 subsequent siblings)
6 siblings, 0 replies; 13+ messages in thread
From: Varadarajan Narayanan @ 2026-01-13 10:38 UTC (permalink / raw)
To: trini, casey.connolly, neil.armstrong, sumit.garg,
varadarajan.narayanan, ilias.apalodimas, jerome,
marek.vasut+renesas, christopher.obbard, me, michal.simek,
clamor95, u-boot, u-boot-qcom
Add help text about '-edl' option to reset command definition and
related documentation.
Reviewed-by: Casey Connolly <casey.connolly@linaro.org>
Signed-off-by: Varadarajan Narayanan <varadarajan.narayanan@oss.qualcomm.com>
---
cmd/boot.c | 3 +++
doc/usage/cmd/reset.rst | 2 ++
2 files changed, 5 insertions(+)
diff --git a/cmd/boot.c b/cmd/boot.c
index 23496cafdf5..d80f9d8c05d 100644
--- a/cmd/boot.c
+++ b/cmd/boot.c
@@ -60,6 +60,9 @@ U_BOOT_CMD(
reset, 2, 0, do_reset,
"Perform RESET of the CPU",
"- cold boot without level specifier\n"
+#ifdef CONFIG_SYSRESET_QCOM_PSCI
+ "reset -edl - Boot to Emergency DownLoad mode\n"
+#endif
"reset -w - warm reset if implemented"
);
diff --git a/doc/usage/cmd/reset.rst b/doc/usage/cmd/reset.rst
index 126db21cdb8..366b17eea16 100644
--- a/doc/usage/cmd/reset.rst
+++ b/doc/usage/cmd/reset.rst
@@ -22,6 +22,8 @@ DDR and peripherals, on some boards also resets external PMIC.
-w
Do warm WARM, reset CPU but keep peripheral/DDR/PMIC active.
+-edl
+ Boot to Emergency DownLoad mode on supported Qualcomm platforms.
Return value
------------
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* [PATCH v5 5/5] qcom_defconfig: enable psci based sysreset
2026-01-13 10:38 [PATCH v5 0/5] Implement reset to EDL for qcs9100 Varadarajan Narayanan
` (3 preceding siblings ...)
2026-01-13 10:38 ` [PATCH v5 4/5] cmd: boot: Add '-edl' option to reset command documentation Varadarajan Narayanan
@ 2026-01-13 10:38 ` Varadarajan Narayanan
2026-01-13 14:42 ` [PATCH v5 0/5] Implement reset to EDL for qcs9100 Tom Rini
2026-01-16 9:20 ` Sumit Garg
6 siblings, 0 replies; 13+ messages in thread
From: Varadarajan Narayanan @ 2026-01-13 10:38 UTC (permalink / raw)
To: trini, casey.connolly, neil.armstrong, sumit.garg,
varadarajan.narayanan, ilias.apalodimas, jerome,
marek.vasut+renesas, christopher.obbard, me, michal.simek,
clamor95, u-boot, u-boot-qcom
Enable CONFIG_SYSRESET_QCOM_PSCI to allow U-Boot to reset to Emergency
Download mode.
Signed-off-by: Varadarajan Narayanan <varadarajan.narayanan@oss.qualcomm.com>
---
v5: Moved from qcs9100_defconfig to qcom_defconfig
---
configs/qcom_defconfig | 1 +
1 file changed, 1 insertion(+)
diff --git a/configs/qcom_defconfig b/configs/qcom_defconfig
index a210f4dc5e6..75b4f39c590 100644
--- a/configs/qcom_defconfig
+++ b/configs/qcom_defconfig
@@ -147,6 +147,7 @@ CONFIG_SPMI_MSM=y
CONFIG_SYSINFO=y
CONFIG_SYSINFO_SMBIOS=y
CONFIG_SYSRESET_QCOM_PSHOLD=y
+CONFIG_SYSRESET_QCOM_PSCI=y
CONFIG_USB=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_DWC3=y
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread* Re: [PATCH v5 0/5] Implement reset to EDL for qcs9100
2026-01-13 10:38 [PATCH v5 0/5] Implement reset to EDL for qcs9100 Varadarajan Narayanan
` (4 preceding siblings ...)
2026-01-13 10:38 ` [PATCH v5 5/5] qcom_defconfig: enable psci based sysreset Varadarajan Narayanan
@ 2026-01-13 14:42 ` Tom Rini
2026-01-16 7:09 ` Varadarajan Narayanan
2026-01-16 9:20 ` Sumit Garg
6 siblings, 1 reply; 13+ messages in thread
From: Tom Rini @ 2026-01-13 14:42 UTC (permalink / raw)
To: Varadarajan Narayanan
Cc: casey.connolly, neil.armstrong, sumit.garg, ilias.apalodimas,
jerome, marek.vasut+renesas, christopher.obbard, me, michal.simek,
clamor95, u-boot, u-boot-qcom
[-- Attachment #1: Type: text/plain, Size: 749 bytes --]
On Tue, Jan 13, 2026 at 04:08:35PM +0530, Varadarajan Narayanan wrote:
> Using the 'reboot edl' command in Linux, the platform can reboot to the
> Emergency Download mode. Implement the same for U-Boot.
Have you used buildman's size checking options before? If not,
https://source.denx.de/u-boot/u-boot-extras/-/blob/master/contrib/trini/u-boot-size-test.sh?ref_type=heads
may be helpful to you, as it can be a bit tricky at first (but IMHO is
better than the linux kernel bloat-o-meter). I ask because, what is the
size impact of these changes on things like say qemu_arm64 and qemu_arm?
I saw the cmd/ portion is guarded by a new CONFIG option which is good,
but I wonder about the more generic sysreset changes. Thanks!
--
Tom
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH v5 0/5] Implement reset to EDL for qcs9100
2026-01-13 14:42 ` [PATCH v5 0/5] Implement reset to EDL for qcs9100 Tom Rini
@ 2026-01-16 7:09 ` Varadarajan Narayanan
2026-01-16 14:43 ` Tom Rini
0 siblings, 1 reply; 13+ messages in thread
From: Varadarajan Narayanan @ 2026-01-16 7:09 UTC (permalink / raw)
To: Tom Rini
Cc: casey.connolly, neil.armstrong, sumit.garg, ilias.apalodimas,
jerome, marek.vasut+renesas, christopher.obbard, me, michal.simek,
clamor95, u-boot, u-boot-qcom
On Tue, Jan 13, 2026 at 08:42:44AM -0600, Tom Rini wrote:
> On Tue, Jan 13, 2026 at 04:08:35PM +0530, Varadarajan Narayanan wrote:
>
> > Using the 'reboot edl' command in Linux, the platform can reboot to the
> > Emergency Download mode. Implement the same for U-Boot.
>
> Have you used buildman's size checking options before? If not,
No.
> https://source.denx.de/u-boot/u-boot-extras/-/blob/master/contrib/trini/u-boot-size-test.sh?ref_type=heads
> may be helpful to you, as it can be a bit tricky at first (but IMHO is
> better than the linux kernel bloat-o-meter). I ask because, what is the
> size impact of these changes on things like say qemu_arm64 and qemu_arm?
> I saw the cmd/ portion is guarded by a new CONFIG option which is good,
> but I wonder about the more generic sysreset changes. Thanks!
Please see below for u-boot-size-test.sh output
$ ./u-boot-size-test.sh --board qcom_ipq9574_mmc
Generating board list...Processing #include to produce configs/socfpga_agilex5_vab_defconfig
Processing #include to produce configs/r8a78000_ironhide_defconfig
.
.
.
Processing #include to produce configs/am69_sk_a72_defconfig
Building 2 commits for 1 boards (1 thread, 16 jobs per thread)
01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
06: qcom_defconfig: enable psci based sysreset
2 0 0 /2 qcom_ipq9574_mmc
Completed: 2 total built, 2 newly), duration 0:00:13, rate 0.15
/tmp/qcom_ipq9574_mmc/edl5/boards.cfg is up to date. Nothing to do.
Summary of 2 commits for 1 boards (1 thread, 16 jobs per thread)
01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
06: qcom_defconfig: enable psci based sysreset
aarch64: (for 1/1 boards) all +224.0 data +8.0 text +216.0
qcom_ipq9574_mmc: all +224 data +8 text +216
u-boot: add: 2/0, grow: 2/0 bytes: 224/0 (224)
function old new delta
sysreset_walk_arg - 124 +124
do_reset 100 160 +60
sysreset_request_arg - 32 +32
psci_sysreset_ops 24 32 +8
(no errors to report)
Thanks
Varada
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH v5 0/5] Implement reset to EDL for qcs9100
2026-01-16 7:09 ` Varadarajan Narayanan
@ 2026-01-16 14:43 ` Tom Rini
2026-01-19 5:39 ` Varadarajan Narayanan
0 siblings, 1 reply; 13+ messages in thread
From: Tom Rini @ 2026-01-16 14:43 UTC (permalink / raw)
To: Varadarajan Narayanan
Cc: casey.connolly, neil.armstrong, sumit.garg, ilias.apalodimas,
jerome, marek.vasut+renesas, christopher.obbard, me, michal.simek,
clamor95, u-boot, u-boot-qcom
[-- Attachment #1: Type: text/plain, Size: 2753 bytes --]
On Fri, Jan 16, 2026 at 12:39:47PM +0530, Varadarajan Narayanan wrote:
> On Tue, Jan 13, 2026 at 08:42:44AM -0600, Tom Rini wrote:
> > On Tue, Jan 13, 2026 at 04:08:35PM +0530, Varadarajan Narayanan wrote:
> >
> > > Using the 'reboot edl' command in Linux, the platform can reboot to the
> > > Emergency Download mode. Implement the same for U-Boot.
> >
> > Have you used buildman's size checking options before? If not,
>
> No.
>
> > https://source.denx.de/u-boot/u-boot-extras/-/blob/master/contrib/trini/u-boot-size-test.sh?ref_type=heads
> > may be helpful to you, as it can be a bit tricky at first (but IMHO is
> > better than the linux kernel bloat-o-meter). I ask because, what is the
> > size impact of these changes on things like say qemu_arm64 and qemu_arm?
> > I saw the cmd/ portion is guarded by a new CONFIG option which is good,
> > but I wonder about the more generic sysreset changes. Thanks!
>
> Please see below for u-boot-size-test.sh output
>
> $ ./u-boot-size-test.sh --board qcom_ipq9574_mmc
> Generating board list...Processing #include to produce configs/socfpga_agilex5_vab_defconfig
> Processing #include to produce configs/r8a78000_ironhide_defconfig
> .
> .
> .
> Processing #include to produce configs/am69_sk_a72_defconfig
> Building 2 commits for 1 boards (1 thread, 16 jobs per thread)
> 01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
> 06: qcom_defconfig: enable psci based sysreset
> 2 0 0 /2 qcom_ipq9574_mmc
> Completed: 2 total built, 2 newly), duration 0:00:13, rate 0.15
> /tmp/qcom_ipq9574_mmc/edl5/boards.cfg is up to date. Nothing to do.
> Summary of 2 commits for 1 boards (1 thread, 16 jobs per thread)
> 01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
> 06: qcom_defconfig: enable psci based sysreset
> aarch64: (for 1/1 boards) all +224.0 data +8.0 text +216.0
> qcom_ipq9574_mmc: all +224 data +8 text +216
> u-boot: add: 2/0, grow: 2/0 bytes: 224/0 (224)
> function old new delta
> sysreset_walk_arg - 124 +124
> do_reset 100 160 +60
> sysreset_request_arg - 32 +32
> psci_sysreset_ops 24 32 +8
> (no errors to report)
OK, so minimal growth on the platforms that would use it. How about
platforms which don't? qemu_arm and qemu_arm64 should build the sysreset
code in general and that's where I'm most concerned, platforms which
aren't using this feature. Thanks.
--
Tom
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v5 0/5] Implement reset to EDL for qcs9100
2026-01-16 14:43 ` Tom Rini
@ 2026-01-19 5:39 ` Varadarajan Narayanan
2026-01-19 17:07 ` Tom Rini
0 siblings, 1 reply; 13+ messages in thread
From: Varadarajan Narayanan @ 2026-01-19 5:39 UTC (permalink / raw)
To: Tom Rini
Cc: casey.connolly, neil.armstrong, sumit.garg, ilias.apalodimas,
jerome, marek.vasut+renesas, christopher.obbard, me, michal.simek,
clamor95, u-boot, u-boot-qcom
On Fri, Jan 16, 2026 at 08:43:55AM -0600, Tom Rini wrote:
> On Fri, Jan 16, 2026 at 12:39:47PM +0530, Varadarajan Narayanan wrote:
> > On Tue, Jan 13, 2026 at 08:42:44AM -0600, Tom Rini wrote:
> > > On Tue, Jan 13, 2026 at 04:08:35PM +0530, Varadarajan Narayanan wrote:
> > >
> > > > Using the 'reboot edl' command in Linux, the platform can reboot to the
> > > > Emergency Download mode. Implement the same for U-Boot.
> > >
> > > Have you used buildman's size checking options before? If not,
> >
> > No.
> >
> > > https://source.denx.de/u-boot/u-boot-extras/-/blob/master/contrib/trini/u-boot-size-test.sh?ref_type=heads
> > > may be helpful to you, as it can be a bit tricky at first (but IMHO is
> > > better than the linux kernel bloat-o-meter). I ask because, what is the
> > > size impact of these changes on things like say qemu_arm64 and qemu_arm?
> > > I saw the cmd/ portion is guarded by a new CONFIG option which is good,
> > > but I wonder about the more generic sysreset changes. Thanks!
> >
> > Please see below for u-boot-size-test.sh output
> >
> > $ ./u-boot-size-test.sh --board qcom_ipq9574_mmc
> > Generating board list...Processing #include to produce configs/socfpga_agilex5_vab_defconfig
> > Processing #include to produce configs/r8a78000_ironhide_defconfig
> > .
> > .
> > .
> > Processing #include to produce configs/am69_sk_a72_defconfig
> > Building 2 commits for 1 boards (1 thread, 16 jobs per thread)
> > 01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
> > 06: qcom_defconfig: enable psci based sysreset
> > 2 0 0 /2 qcom_ipq9574_mmc
> > Completed: 2 total built, 2 newly), duration 0:00:13, rate 0.15
> > /tmp/qcom_ipq9574_mmc/edl5/boards.cfg is up to date. Nothing to do.
> > Summary of 2 commits for 1 boards (1 thread, 16 jobs per thread)
> > 01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
> > 06: qcom_defconfig: enable psci based sysreset
> > aarch64: (for 1/1 boards) all +224.0 data +8.0 text +216.0
> > qcom_ipq9574_mmc: all +224 data +8 text +216
> > u-boot: add: 2/0, grow: 2/0 bytes: 224/0 (224)
> > function old new delta
> > sysreset_walk_arg - 124 +124
> > do_reset 100 160 +60
> > sysreset_request_arg - 32 +32
> > psci_sysreset_ops 24 32 +8
> > (no errors to report)
>
> OK, so minimal growth on the platforms that would use it. How about
> platforms which don't? qemu_arm and qemu_arm64 should build the sysreset
> code in general and that's where I'm most concerned, platforms which
> aren't using this feature. Thanks.
Please see below for u-boot-size-test.sh output
$ ./u-boot-size-test.sh --board qemu_arm
Generating board list...Processing #include to produce configs/socfpga_agilex5_vab_defconfig
Processing #include to produce configs/imx6ulz_smm_m2_defconfig
.
.
.
Processing #include to produce configs/am69_sk_a72_defconfig
Building 2 commits for 1 boards (1 thread, 16 jobs per thread)
01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
06: qcom_defconfig: enable psci based sysreset
2 0 0 /2 qemu_arm
Completed: 2 total built, 2 newly), duration 0:00:18, rate 0.11
/tmp/qemu_arm/edl5/boards.cfg is up to date. Nothing to do.
Summary of 2 commits for 1 boards (1 thread, 16 jobs per thread)
01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
06: qcom_defconfig: enable psci based sysreset
arm: (for 1/1 boards) all +184.0 text +184.0
qemu_arm : all +184 text +184
u-boot: add: 2/0, grow: 2/0 bytes: 184/0 (184)
function old new delta
sysreset_walk_arg - 104 +104
do_reset 92 136 +44
sysreset_request_arg - 32 +32
psci_sysreset_ops 12 16 +4
(no errors to report)
$ ./u-boot-size-test.sh --board qemu_arm64
Generating board list...Processing #include to produce configs/socfpga_agilex5_vab_defconfig
Processing #include to produce configs/imx6ulz_smm_m2_defconfig
.
.
.
Processing #include to produce configs/genmai_defconfig
Building 2 commits for 1 boards (1 thread, 16 jobs per thread)
01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
06: qcom_defconfig: enable psci based sysreset
2 0 0 /2 qemu_arm64
Completed: 2 total built, 2 newly), duration 0:00:19, rate 0.11
/tmp/qemu_arm64/edl5/boards.cfg is up to date. Nothing to do.
Summary of 2 commits for 1 boards (1 thread, 16 jobs per thread)
01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
06: qcom_defconfig: enable psci based sysreset
aarch64: (for 1/1 boards) all +216.0 data +8.0 rodata -8.0 text +216.0
qemu_arm64 : all +216 data +8 rodata -8 text +216
u-boot: add: 2/0, grow: 2/0 bytes: 224/0 (224)
function old new delta
sysreset_walk_arg - 124 +124
do_reset 100 160 +60
sysreset_request_arg - 32 +32
psci_sysreset_ops 24 32 +8
(no errors to report)
Thanks
Varada
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [PATCH v5 0/5] Implement reset to EDL for qcs9100
2026-01-19 5:39 ` Varadarajan Narayanan
@ 2026-01-19 17:07 ` Tom Rini
2026-01-21 6:42 ` Varadarajan Narayanan
0 siblings, 1 reply; 13+ messages in thread
From: Tom Rini @ 2026-01-19 17:07 UTC (permalink / raw)
To: Varadarajan Narayanan
Cc: casey.connolly, neil.armstrong, sumit.garg, ilias.apalodimas,
jerome, marek.vasut+renesas, christopher.obbard, me, michal.simek,
clamor95, u-boot, u-boot-qcom
[-- Attachment #1: Type: text/plain, Size: 6277 bytes --]
On Mon, Jan 19, 2026 at 11:09:26AM +0530, Varadarajan Narayanan wrote:
> On Fri, Jan 16, 2026 at 08:43:55AM -0600, Tom Rini wrote:
> > On Fri, Jan 16, 2026 at 12:39:47PM +0530, Varadarajan Narayanan wrote:
> > > On Tue, Jan 13, 2026 at 08:42:44AM -0600, Tom Rini wrote:
> > > > On Tue, Jan 13, 2026 at 04:08:35PM +0530, Varadarajan Narayanan wrote:
> > > >
> > > > > Using the 'reboot edl' command in Linux, the platform can reboot to the
> > > > > Emergency Download mode. Implement the same for U-Boot.
> > > >
> > > > Have you used buildman's size checking options before? If not,
> > >
> > > No.
> > >
> > > > https://source.denx.de/u-boot/u-boot-extras/-/blob/master/contrib/trini/u-boot-size-test.sh?ref_type=heads
> > > > may be helpful to you, as it can be a bit tricky at first (but IMHO is
> > > > better than the linux kernel bloat-o-meter). I ask because, what is the
> > > > size impact of these changes on things like say qemu_arm64 and qemu_arm?
> > > > I saw the cmd/ portion is guarded by a new CONFIG option which is good,
> > > > but I wonder about the more generic sysreset changes. Thanks!
> > >
> > > Please see below for u-boot-size-test.sh output
> > >
> > > $ ./u-boot-size-test.sh --board qcom_ipq9574_mmc
> > > Generating board list...Processing #include to produce configs/socfpga_agilex5_vab_defconfig
> > > Processing #include to produce configs/r8a78000_ironhide_defconfig
> > > .
> > > .
> > > .
> > > Processing #include to produce configs/am69_sk_a72_defconfig
> > > Building 2 commits for 1 boards (1 thread, 16 jobs per thread)
> > > 01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
> > > 06: qcom_defconfig: enable psci based sysreset
> > > 2 0 0 /2 qcom_ipq9574_mmc
> > > Completed: 2 total built, 2 newly), duration 0:00:13, rate 0.15
> > > /tmp/qcom_ipq9574_mmc/edl5/boards.cfg is up to date. Nothing to do.
> > > Summary of 2 commits for 1 boards (1 thread, 16 jobs per thread)
> > > 01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
> > > 06: qcom_defconfig: enable psci based sysreset
> > > aarch64: (for 1/1 boards) all +224.0 data +8.0 text +216.0
> > > qcom_ipq9574_mmc: all +224 data +8 text +216
> > > u-boot: add: 2/0, grow: 2/0 bytes: 224/0 (224)
> > > function old new delta
> > > sysreset_walk_arg - 124 +124
> > > do_reset 100 160 +60
> > > sysreset_request_arg - 32 +32
> > > psci_sysreset_ops 24 32 +8
> > > (no errors to report)
> >
> > OK, so minimal growth on the platforms that would use it. How about
> > platforms which don't? qemu_arm and qemu_arm64 should build the sysreset
> > code in general and that's where I'm most concerned, platforms which
> > aren't using this feature. Thanks.
>
> Please see below for u-boot-size-test.sh output
>
> $ ./u-boot-size-test.sh --board qemu_arm
> Generating board list...Processing #include to produce configs/socfpga_agilex5_vab_defconfig
> Processing #include to produce configs/imx6ulz_smm_m2_defconfig
> .
> .
> .
> Processing #include to produce configs/am69_sk_a72_defconfig
> Building 2 commits for 1 boards (1 thread, 16 jobs per thread)
> 01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
> 06: qcom_defconfig: enable psci based sysreset
> 2 0 0 /2 qemu_arm
> Completed: 2 total built, 2 newly), duration 0:00:18, rate 0.11
> /tmp/qemu_arm/edl5/boards.cfg is up to date. Nothing to do.
> Summary of 2 commits for 1 boards (1 thread, 16 jobs per thread)
> 01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
> 06: qcom_defconfig: enable psci based sysreset
> arm: (for 1/1 boards) all +184.0 text +184.0
> qemu_arm : all +184 text +184
> u-boot: add: 2/0, grow: 2/0 bytes: 184/0 (184)
> function old new delta
> sysreset_walk_arg - 104 +104
> do_reset 92 136 +44
> sysreset_request_arg - 32 +32
> psci_sysreset_ops 12 16 +4
> (no errors to report)
>
> $ ./u-boot-size-test.sh --board qemu_arm64
> Generating board list...Processing #include to produce configs/socfpga_agilex5_vab_defconfig
> Processing #include to produce configs/imx6ulz_smm_m2_defconfig
> .
> .
> .
> Processing #include to produce configs/genmai_defconfig
> Building 2 commits for 1 boards (1 thread, 16 jobs per thread)
> 01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
> 06: qcom_defconfig: enable psci based sysreset
> 2 0 0 /2 qemu_arm64
> Completed: 2 total built, 2 newly), duration 0:00:19, rate 0.11
> /tmp/qemu_arm64/edl5/boards.cfg is up to date. Nothing to do.
> Summary of 2 commits for 1 boards (1 thread, 16 jobs per thread)
> 01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
> 06: qcom_defconfig: enable psci based sysreset
> aarch64: (for 1/1 boards) all +216.0 data +8.0 rodata -8.0 text +216.0
> qemu_arm64 : all +216 data +8 rodata -8 text +216
> u-boot: add: 2/0, grow: 2/0 bytes: 224/0 (224)
> function old new delta
> sysreset_walk_arg - 124 +124
> do_reset 100 160 +60
> sysreset_request_arg - 32 +32
> psci_sysreset_ops 24 32 +8
> (no errors to report)
That's not great. Can you please look at if you can cleanly rework your
changes to have less, or ideally no, size growth on the 700+ other
platforms that enable SYSRESET? Thanks.
--
Tom
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v5 0/5] Implement reset to EDL for qcs9100
2026-01-19 17:07 ` Tom Rini
@ 2026-01-21 6:42 ` Varadarajan Narayanan
0 siblings, 0 replies; 13+ messages in thread
From: Varadarajan Narayanan @ 2026-01-21 6:42 UTC (permalink / raw)
To: Tom Rini
Cc: casey.connolly, neil.armstrong, sumit.garg, ilias.apalodimas,
jerome, marek.vasut+renesas, christopher.obbard, me, michal.simek,
clamor95, u-boot, u-boot-qcom
On Mon, Jan 19, 2026 at 11:07:01AM -0600, Tom Rini wrote:
[ . . .]
> > $ ./u-boot-size-test.sh --board qemu_arm64
> > Generating board list...Processing #include to produce configs/socfpga_agilex5_vab_defconfig
> > Processing #include to produce configs/imx6ulz_smm_m2_defconfig
> > .
> > .
> > .
> > Processing #include to produce configs/genmai_defconfig
> > Building 2 commits for 1 boards (1 thread, 16 jobs per thread)
> > 01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
> > 06: qcom_defconfig: enable psci based sysreset
> > 2 0 0 /2 qemu_arm64
> > Completed: 2 total built, 2 newly), duration 0:00:19, rate 0.11
> > /tmp/qemu_arm64/edl5/boards.cfg is up to date. Nothing to do.
> > Summary of 2 commits for 1 boards (1 thread, 16 jobs per thread)
> > 01: configs: am57xx_hs_evm_defconfig: Reserve EMIF memory used by PPA
> > 06: qcom_defconfig: enable psci based sysreset
> > aarch64: (for 1/1 boards) all +216.0 data +8.0 rodata -8.0 text +216.0
> > qemu_arm64 : all +216 data +8 rodata -8 text +216
> > u-boot: add: 2/0, grow: 2/0 bytes: 224/0 (224)
> > function old new delta
> > sysreset_walk_arg - 124 +124
> > do_reset 100 160 +60
> > sysreset_request_arg - 32 +32
> > psci_sysreset_ops 24 32 +8
> > (no errors to report)
>
> That's not great. Can you please look at if you can cleanly rework your
> changes to have less, or ideally no, size growth on the 700+ other
> platforms that enable SYSRESET? Thanks.
Have posted v6 [1] addressing this, please take a look
-Varada
1 - https://lore.kernel.org/u-boot/20260121063920.1500293-1-varadarajan.narayanan@oss.qualcomm.com/#t
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v5 0/5] Implement reset to EDL for qcs9100
2026-01-13 10:38 [PATCH v5 0/5] Implement reset to EDL for qcs9100 Varadarajan Narayanan
` (5 preceding siblings ...)
2026-01-13 14:42 ` [PATCH v5 0/5] Implement reset to EDL for qcs9100 Tom Rini
@ 2026-01-16 9:20 ` Sumit Garg
6 siblings, 0 replies; 13+ messages in thread
From: Sumit Garg @ 2026-01-16 9:20 UTC (permalink / raw)
To: Varadarajan Narayanan
Cc: trini, casey.connolly, neil.armstrong, ilias.apalodimas, jerome,
marek.vasut+renesas, christopher.obbard, me, michal.simek,
clamor95, u-boot, u-boot-qcom
On Tue, Jan 13, 2026 at 04:08:35PM +0530, Varadarajan Narayanan wrote:
> Using the 'reboot edl' command in Linux, the platform can reboot to the
> Emergency Download mode. Implement the same for U-Boot.
>
> v5: * Update author and signed-off-by email id from quicinc.com to oss.qualcomm.com
> * Add r-b tags
> * Enable CONFIG_SYSRESET_QCOM_PSCI in qcom_defconfig instead of qcs9100_defconfig
Thanks for the patience with this patch-set.
Feel free to add:
Reviewed-by: Sumit Garg <sumit.garg@oss.qualcomm.com>
-Sumit
>
> v4: * Update documentation about '-edl' option
> * Add API to check for support of PSCI functions
> * Check if RESET2 is supported before issuing the command
> * Fix compiler warnings
>
> v3: * Introduce a sysreset op that will pass down the 'reset' command
> arguments to registered handlers
> * Handle 'reset to edl' alone in qcom-psci driver
>
> v2: * Rebased to recent sources
> * Dropped the first patch as it is not applicable anymore
> * Bind the new driver from psci driver
>
> Varadarajan Narayanan (5):
> arm: psci: Add API to check for support of specific PSCI function
> drivers: sysreset: Add sysreset op that can take arguments
> sysreset: Implement PSCI based reset to EDL mode for QCOM SoCs
> cmd: boot: Add '-edl' option to reset command documentation
> qcom_defconfig: enable psci based sysreset
>
> arch/arm/cpu/armv8/fwcall.c | 15 +++++++++
> arch/arm/include/asm/system.h | 1 +
> cmd/boot.c | 3 ++
> configs/qcom_defconfig | 1 +
> doc/usage/cmd/reset.rst | 2 ++
> drivers/firmware/psci.c | 4 +++
> drivers/sysreset/Kconfig | 6 ++++
> drivers/sysreset/Makefile | 1 +
> drivers/sysreset/sysreset-uclass.c | 32 +++++++++++++++++++
> drivers/sysreset/sysreset_qcom-psci.c | 45 +++++++++++++++++++++++++++
> include/sysreset.h | 18 +++++++++++
> 11 files changed, 128 insertions(+)
> create mode 100644 drivers/sysreset/sysreset_qcom-psci.c
>
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 13+ messages in thread