xref: /rk3399_rockchip-uboot/arch/arm/mach-rockchip/hotkey.c (revision 5e8564cf419797f9095431e6eb6f0c00dfa423d2)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd
4  */
5 
6 #include <common.h>
7 #include <bidram.h>
8 #include <cli.h>
9 #include <console.h>
10 #include <sysmem.h>
11 #include <asm/arch/hotkey.h>
12 
13 DECLARE_GLOBAL_DATA_PTR;
14 
15 #define CTRL_B		0x02	/* bootrom mode */
16 #define CTRL_D		0x04	/* download mde */
17 #define CTRL_F		0x06	/* fastboot mode */
18 #define CTRL_I		0x09	/* inicall debug for kernel */
19 #define CTRL_M		0x0d	/* memory(sysmem/bidram) */
20 #define CTRL_P		0x10	/* parameter(cmdline) dump */
21 #define CTRL_S		0x13	/* shell(cli) */
22 
23 bool is_hotkey(enum hotkey_t id)
24 {
25 	switch (id) {
26 	case HK_BROM_DNL:
27 		return gd->console_evt == CTRL_B;
28 	case HK_CMDLINE:
29 		return gd->console_evt == CTRL_P;
30 	case HK_FASTBOOT:
31 		return gd->console_evt == CTRL_F;
32 	case HK_INITCALL:
33 		return gd->console_evt == CTRL_I;
34 	case HK_ROCKUSB_DNL:
35 		return gd->console_evt == CTRL_D;
36 	case HK_SYSMEM:
37 		return gd->console_evt == CTRL_M;
38 	default:
39 		break;
40 	}
41 
42 	return false;
43 }
44 
45 void hotkey_run(enum hotkey_t id)
46 {
47 	switch ((id)) {
48 	case HK_SYSMEM:
49 		if (gd->console_evt == CTRL_M) {
50 			bidram_dump();
51 			sysmem_dump();
52 		}
53 		break;
54 	case HK_CMDLINE:
55 		if (gd->console_evt == CTRL_P)
56 			printf("cmdline: %s\n", env_get("bootargs"));
57 		break;
58 	case HK_INITCALL:
59 		if (gd->console_evt == CTRL_I)
60 			env_update("bootargs", "initcall_debug debug");
61 		break;
62 	case HK_CLI:
63 		/* Disable enter cli by hotkey*/
64 #if defined(CONFIG_CONSOLE_DISABLE_CTRLC) && \
65     defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY <= 0)
66 		break;
67 #endif
68 		if (gd->console_evt == CTRL_S)
69 			cli_loop();
70 		break;
71 	default:
72 		break;
73 	}
74 }
75