From patchwork Tue Sep 2 15:21:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 186 Return-Path: X-Original-To: u-boot-concept@u-boot.org Delivered-To: u-boot-concept@u-boot.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1756826567; bh=12Zy5DRpd61OQrKn6X8hlHyeXRFji6wvyb6Wi6ZnUZ8=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=BvndKgdHHYiuMejZ1rRvvW1cuAie7/lh7Y85RPEWQwHSjNJhPHhJ85OnM6Lu61BIZ 8UvAm7HNhJ8xwCKATH01pdngGkVUhW0cIP80H7lii4wPlMbEahOpZYnmRfUVMWhY5r OX0iteV55uQ71rnhgbDzuN6775jaEj8quf6qjRXGQwQNN4wpgrcvCkPj3mbZMn5I1e rdnuo28HgO1YdJeUYrNEf1CHcXEepou3vw9rwk5yrCHu0JmB+q6oiBvxFN6g70GTsQ 0ZB8WRnF60XDsCigXvXKiC2t9Bq4bEmMxwJ32FSvYCe0BDkCDiTxVasPRYI9ftFVMY Szp33lRqAsZwQ== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 2E71167867 for ; Tue, 2 Sep 2025 09:22:47 -0600 (MDT) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id 1szJbPUiu9Fv for ; Tue, 2 Sep 2025 09:22:47 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1756826566; bh=12Zy5DRpd61OQrKn6X8hlHyeXRFji6wvyb6Wi6ZnUZ8=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=ZLD/TY1KTfOxwxui0tmnnE5OlVMlDWiP5fj5BHpmQ/ALgh5ZnkQmASwypUgxXK+d6 iKxlCpRPVx/DU7ssShzAsaeSd4hScz9L00ecRpCNKRzpmehlcsbrG/Le1YU5aWNink aLdO8ZW8S8Zf89EAMXxBJd90s6Ulm1Gzaq8aYE3uGapj+B3wyzto3hiyDSjWH49oVC TndKXwXq1KHIoBAqhZv9Z6VnAqPXS5HsGaZ8WSK4LPW7U/IBzD0/nWj35PwFh7vV++ lMtaxN/KmgdE4audgV6xr8NU1RbXIENCXBR3IQJatv40eIjsVjc/9dNX3LTIGf7MLJ pMMjAez196iTQ== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 7AC45678F8 for ; Tue, 2 Sep 2025 09:22:46 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1756826563; bh=eGn7OwEDWbzoW7odkFIMXxcWuoSZ7pAfR+9jIu+NFos=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ekRC3v6Rtd2bKLPfEwFyHk6K194KWzovh2mrXXCKsQ48h0YHleyi5mzb69LTjpUVs SEJjdqJj3OdLQDvUWLdxUBT7V5U9VSot2u7rt+gYOaZEH1U7fMrDk91gDxH/h6PMqA ixcOUSb4Kc8ZRIi+wlK5HLdY9f7EEZTMyPK+ulZTY6OC+krPPT39rDbrkiRNH39MRw E/6gYQkiQsaXk5r2kSoOHwMIzdOhjQUYlaQY3GkpD20PVYWu+GDGlDf67O3+AQV3lz x7xcSJywJ+176ZWQBXfx2vzeA5HC8Ef/OE710xRDRWqpA5RcO1rlNNv72Va9Ns+h66 Vc2sLo0EDBm3A== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 08E7A677F7; Tue, 2 Sep 2025 09:22:43 -0600 (MDT) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10026) with ESMTP id coYKTuN3SAH8; Tue, 2 Sep 2025 09:22:42 -0600 (MDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1756826562; bh=SN6RnLJNHvLUAnzumxjVgkEOirwUeeb73jexAtEgDiw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=nRqdwToJnfPZsbXKrab5TdmIrsVuPZpq6pc8/jVeUAcMJAz+GmTi2bHLOj3EWxglM 2LMvKXtmxbl33wlQCGR3WXQ07nXlsGn55n2BPzQwwXi4CpbQivzl4bjYxut9KNoGI6 A9pNL6a12edaX/0KIiTVz4jZd8qK0SH7UoS+2Qt3H32SgA6/s2KuWI37Ws5yc+hWoa yKaJKzgqR7B9gGrfs4BxzBHmOeDuTvMXwFxFQnzbitvMcmjt60g3TvrqM0XEZNoT6c a4mtY5pz7BR1kb+DsETchHJe5PDBXihP9oEaRRGVOfspCs3y5C1gdEhcpmo17hx35S 9vMgBjdwhbfCw== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 6B4CE5FE1B; Tue, 2 Sep 2025 09:22:42 -0600 (MDT) From: Simon Glass To: U-Boot Concept Date: Tue, 2 Sep 2025 09:21:47 -0600 Message-ID: <20250902152158.2285264-16-sjg@u-boot.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250902152158.2285264-1-sjg@u-boot.org> References: <20250902152158.2285264-1-sjg@u-boot.org> MIME-Version: 1.0 Message-ID-Hash: 6OGIKUXCG4MS4AU35GP574WIEDOZWUYM X-Message-ID-Hash: 6OGIKUXCG4MS4AU35GP574WIEDOZWUYM X-MailFrom: sjg@u-boot.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Heinrich Schuchardt , Simon Glass X-Mailman-Version: 3.3.10 Precedence: list Subject: [Concept] [PATCH 15/18] sysreset: Support a hot reset List-Id: Discussion and patches related to U-Boot Concept Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Simon Glass In some cases we may wish to return back to the program which started U-Boot. Add the concept of a 'hot' reset, to support this. Signed-off-by: Simon Glass --- cmd/boot.c | 1 + doc/usage/cmd/reset.rst | 3 +++ drivers/sysreset/sysreset-uclass.c | 15 +++++++++++++-- drivers/sysreset/sysreset_sandbox.c | 1 + include/sysreset.h | 3 +++ test/dm/sysreset.c | 2 ++ 6 files changed, 23 insertions(+), 2 deletions(-) diff --git a/cmd/boot.c b/cmd/boot.c index 23496cafdf5..832ad08c319 100644 --- a/cmd/boot.c +++ b/cmd/boot.c @@ -60,6 +60,7 @@ U_BOOT_CMD( reset, 2, 0, do_reset, "Perform RESET of the CPU", "- cold boot without level specifier\n" + "reset -h - hotreset if implemented\n" "reset -w - warm reset if implemented" ); diff --git a/doc/usage/cmd/reset.rst b/doc/usage/cmd/reset.rst index 126db21cdb8..3a43db204e5 100644 --- a/doc/usage/cmd/reset.rst +++ b/doc/usage/cmd/reset.rst @@ -22,6 +22,9 @@ DDR and peripherals, on some boards also resets external PMIC. -w Do warm WARM, reset CPU but keep peripheral/DDR/PMIC active. +-h + Do a hot reset, if supported, which returns back to the program which + started U-Boot. Return value ------------ diff --git a/drivers/sysreset/sysreset-uclass.c b/drivers/sysreset/sysreset-uclass.c index 536ac727142..db81c9b5779 100644 --- a/drivers/sysreset/sysreset-uclass.c +++ b/drivers/sysreset/sysreset-uclass.c @@ -125,8 +125,19 @@ int do_reset(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) if (argc > 2) return CMD_RET_USAGE; - if (argc == 2 && argv[1][0] == '-' && argv[1][1] == 'w') { - reset_type = SYSRESET_WARM; + if (argc == 2 && argv[1][0] == '-') { + int type = argv[1][1]; + + switch (type) { + case 'h': + reset_type = SYSRESET_HOT; + break; + case 'w': + reset_type = SYSRESET_WARM; + break; + default: + return CMD_RET_USAGE; + } } printf("resetting ...\n"); diff --git a/drivers/sysreset/sysreset_sandbox.c b/drivers/sysreset/sysreset_sandbox.c index 93179f90bbb..522050eb4bf 100644 --- a/drivers/sysreset/sysreset_sandbox.c +++ b/drivers/sysreset/sysreset_sandbox.c @@ -65,6 +65,7 @@ static int sandbox_sysreset_request(struct udevice *dev, enum sysreset_t type) return -EACCES; sandbox_exit(); case SYSRESET_POWER: + case SYSRESET_HOT: if (!state->sysreset_allowed[type]) return -EACCES; sandbox_exit(); diff --git a/include/sysreset.h b/include/sysreset.h index ff20abdeed3..f231d4e8bc4 100644 --- a/include/sysreset.h +++ b/include/sysreset.h @@ -21,6 +21,9 @@ enum sysreset_t { SYSRESET_POWER, /** @SYSRESET_POWER_OFF: turn off power */ SYSRESET_POWER_OFF, + /** @SYSRESET_HOT: exit out of U-Boot (e.g. from EFI app) */ + SYSRESET_HOT, + /** @SYSRESET_COUNT: number of available reset types */ SYSRESET_COUNT, }; diff --git a/test/dm/sysreset.c b/test/dm/sysreset.c index 8431aaa0a9e..a30d035b9a6 100644 --- a/test/dm/sysreset.c +++ b/test/dm/sysreset.c @@ -76,10 +76,12 @@ static int dm_test_sysreset_walk(struct unit_test_state *uts) state->sysreset_allowed[SYSRESET_COLD] = false; state->sysreset_allowed[SYSRESET_POWER] = false; state->sysreset_allowed[SYSRESET_POWER_OFF] = false; + state->sysreset_allowed[SYSRESET_HOT] = false; ut_asserteq(-EACCES, sysreset_walk(SYSRESET_WARM)); ut_asserteq(-EACCES, sysreset_walk(SYSRESET_COLD)); ut_asserteq(-EACCES, sysreset_walk(SYSRESET_POWER)); ut_asserteq(-EACCES, sysreset_walk(SYSRESET_POWER_OFF)); + ut_asserteq(-EACCES, sysreset_walk(SYSRESET_HOT)); /* * Enable cold system reset - this should make cold system reset work,