[PATCH 5/6] Revert "sysreset: Implement PSCI based reset to EDL mode for QCOM SoCs"

Quentin Schulz foss+uboot at 0leil.net
Thu Jul 2 20:27:35 CEST 2026


From: Quentin Schulz <quentin.schulz at cherry.de>

This reverts commit 32825eaddc37670bb87f98b338aef8238e259e72.

The args support for the sysreset uclass contains a logic bug. The first
sysreset device implementing the request_arg callback will consume the
args, not support the specified arg and thus return -EPROTONOSUPPORT
which will stop the iteration over all sysreset devices.

This is an issue if one has multiple sysreset devices and each with
support for different (valid) args. If a sysreset device implements a
-dummy argument and another -foo and one calls reset -dummy on the
U-Boot CLI, it'll depend on which sysreset device will be attempted
first. If it is the one implementing -foo, it'll return it doesn't
support the argument with -EPROTONOSUPPORT in which case the device
implementing -dummy will never be attempted and instead we'll do a cold
reset which is very likely not what's expected.

Signed-off-by: Quentin Schulz <quentin.schulz at cherry.de>
---
 drivers/firmware/psci.c               |  4 ----
 drivers/sysreset/Kconfig              |  7 ------
 drivers/sysreset/Makefile             |  1 -
 drivers/sysreset/sysreset_qcom-psci.c | 45 -----------------------------------
 4 files changed, 57 deletions(-)

diff --git a/drivers/firmware/psci.c b/drivers/firmware/psci.c
index b6838a244d2b..2e3223e1c32a 100644
--- a/drivers/firmware/psci.c
+++ b/drivers/firmware/psci.c
@@ -186,10 +186,6 @@ 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 90f740f51d42..f589ad154186 100644
--- a/drivers/sysreset/Kconfig
+++ b/drivers/sysreset/Kconfig
@@ -301,13 +301,6 @@ 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"
-	depends on ARM_SMCCC
-	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 b5b99235b6ef..d18a5d523605 100644
--- a/drivers/sysreset/Makefile
+++ b/drivers/sysreset/Makefile
@@ -30,7 +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
 obj-$(CONFIG_SYSRESET_QEMU_VIRT_CTRL) += sysreset_qemu_virt_ctrl.o
diff --git a/drivers/sysreset/sysreset_qcom-psci.c b/drivers/sysreset/sysreset_qcom-psci.c
deleted file mode 100644
index 3627bbf5c820..000000000000
--- a/drivers/sysreset/sysreset_qcom-psci.c
+++ /dev/null
@@ -1,45 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (C) 2017 Masahiro Yamada <yamada.masahiro at 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.55.0



More information about the U-Boot mailing list