From: Valentin Liu <valentinliu@icloud.com>
To: u-boot@lists.u-boot-project.org, Tom Rini <trini@konsulko.com>,
Ilias Apalodimas <ilias.apalodimas@linaro.org>,
Quentin Schulz <u-boot@0leil.net>,
Kever Yang <kever.yang@rock-chips.com>
Cc: Simon Glass <sjg@chromium.org>, Valentin Liu <valentinliu@icloud.com>
Subject: [PATCH] arm: rockchip: spl: Add hotkey detection support.
Date: Sun, 16 Aug 2026 01:08:44 +0800 [thread overview]
Message-ID: <20260815170844.1196849-1-valentinliu@icloud.com> (raw)
Add a configurable Rockchip SPL hotkey feature that checks the
serial console during SPL startup.
Ctrl+B can be used to enter BootROM download (MASKROM) mode and
be widely used. We can add more boot mode support in future.
Add CONFIG_SPL_ROCKCHIP_HOTKEY to enable the feature and wait for
the serial port to be ready to receive input before checking for
hotkeys.
Signed-off-by: Valentin Liu <valentinliu@icloud.com>
---
arch/arm/mach-rockchip/Kconfig | 15 ++++++++++++
arch/arm/mach-rockchip/spl.c | 42 ++++++++++++++++++++++++++++++++++
2 files changed, 57 insertions(+)
diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig
index 1a2e7847c9e..a5de483bbb9 100644
--- a/arch/arm/mach-rockchip/Kconfig
+++ b/arch/arm/mach-rockchip/Kconfig
@@ -743,6 +743,21 @@ config TPL_ROCKCHIP_EARLYRETURN_TO_BROM
config SPL_MMC
default y if !SPL_ROCKCHIP_BACK_TO_BROM
+config SPL_ROCKCHIP_HOTKEY
+ bool "SPL hotkey support"
+ depends on SPL
+ depends on SPL_DM_RESET
+ depends on SPL_SERIAL
+ help
+ Enable hotkey detection during SPL booting stage.
+
+ When enabled, SPL checks the serial console for a control
+ character and can execute Rockchip-specific hotkey actions,
+ such as entering BootROM download mode (MASKROM) with Ctrl+B.
+
+ The hotkey is checked after the SPL console has been
+ initialized.
+
config ROCKCHIP_SPI_IMAGE
bool "Build a SPI image for rockchip"
help
diff --git a/arch/arm/mach-rockchip/spl.c b/arch/arm/mach-rockchip/spl.c
index e989c148079..46140e5af3c 100644
--- a/arch/arm/mach-rockchip/spl.c
+++ b/arch/arm/mach-rockchip/spl.c
@@ -19,6 +19,11 @@
#include <asm/global_data.h>
#include <asm/io.h>
#include <linux/bitops.h>
+#if IS_ENABLED(CONFIG_SPL_ROCKCHIP_HOTKEY)
+#include <serial.h>
+#include <asm/arch-rockchip/boot_mode.h>
+#include <linux/delay.h>
+#endif
DECLARE_GLOBAL_DATA_PTR;
@@ -107,6 +112,40 @@ __weak int arch_cpu_init(void)
return 0;
}
+#if IS_ENABLED(CONFIG_SPL_ROCKCHIP_HOTKEY)
+static void rockchip_reset_from_hotkey(const int code)
+{
+ switch (code) {
+ case 0x02:
+ printf("SPL Hotkey: Ctrl+B: BootROM download!\n");
+ writel(BOOT_BROM_DOWNLOAD, CONFIG_ROCKCHIP_BOOT_MODE_REG);
+ do_reset(NULL, 0, 0, NULL);
+ /*NOTREACHED*/
+ default:
+ if (code <= 0x1a) /* 'z' */
+ printf("SPL Hotkey: Ctrl+%c\n", code + 'A' - 1);
+ else
+ printf("SPL Hotkey: Unknown code: 0x%x, ignore\n", code);
+ }
+}
+
+static void spl_hotkey_init(void)
+{
+ if (!gd || !(gd->flags & GD_FLG_HAVE_CONSOLE))
+ return;
+ if (gd->flags & GD_FLG_DISABLE_CONSOLE)
+ return;
+
+ /* Wait for the serial port to be ready to receive data. */
+ mdelay(100);
+
+ if (serial_tstc())
+ rockchip_reset_from_hotkey(serial_getc());
+ else
+ printf("SPL Hotkey: No key pressed, continue\n");
+}
+#endif
+
void board_init_f(ulong dummy)
{
int ret;
@@ -143,6 +182,9 @@ void board_init_f(ulong dummy)
}
#endif
preloader_console_init();
+
+ if (IS_ENABLED(CONFIG_SPL_ROCKCHIP_HOTKEY))
+ spl_hotkey_init();
}
void spl_board_prepare_for_boot(void)
--
2.53.0
next reply other threads:[~2026-08-15 17:09 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-15 17:08 Valentin Liu [this message]
2026-08-15 17:59 ` [PATCH] arm: rockchip: spl: Add hotkey detection support Tom Rini
2026-08-15 18:23 ` [PATCH v2] " Valentin Liu
2026-08-15 18:34 ` Valentin Liu
2026-08-18 16:55 ` [PATCH v3] " Valentin Liu
2026-08-20 15:37 ` Quentin Schulz
2026-08-20 16:29 ` Re:Re: " 刘垣辰
2026-08-20 16:27 ` [PATCH v4] " Valentin Liu
2026-08-20 16:36 ` Jonas Karlman
2026-08-20 16:52 ` Re:Re: " 刘垣辰
2026-08-20 17:46 ` Jonas Karlman
2026-08-20 18:31 ` 刘垣辰
2026-08-21 14:06 ` [PATCH v5] " Valentin Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260815170844.1196849-1-valentinliu@icloud.com \
--to=valentinliu@icloud.com \
--cc=ilias.apalodimas@linaro.org \
--cc=kever.yang@rock-chips.com \
--cc=sjg@chromium.org \
--cc=trini@konsulko.com \
--cc=u-boot@0leil.net \
--cc=u-boot@lists.u-boot-project.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox