xref: /rk3399_rockchip-uboot/arch/arm/mach-rockchip/hotkey.c (revision c51f2c54fcc3462bbd0c74b27723e598b3af8b14)
1c664909eSJoseph Chen // SPDX-License-Identifier: GPL-2.0
2c664909eSJoseph Chen /*
3c664909eSJoseph Chen  * Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd
4c664909eSJoseph Chen  */
5c664909eSJoseph Chen 
6c664909eSJoseph Chen #include <common.h>
7c664909eSJoseph Chen #include <bidram.h>
89b78eaa4SJoseph Chen #include <cli.h>
9c664909eSJoseph Chen #include <console.h>
10c664909eSJoseph Chen #include <sysmem.h>
11c664909eSJoseph Chen #include <asm/arch/hotkey.h>
12c664909eSJoseph Chen 
13c664909eSJoseph Chen DECLARE_GLOBAL_DATA_PTR;
14c664909eSJoseph Chen 
15665be4b0SJoseph Chen #define CTRL_A		0x01	/* shell(cli) on BOOTM_STATE_OS_PREP */
164fe75b5bSJoseph Chen #define CTRL_B		0x02	/* bootrom mode */
174fe75b5bSJoseph Chen #define CTRL_D		0x04	/* download mde */
184fe75b5bSJoseph Chen #define CTRL_F		0x06	/* fastboot mode */
194fe75b5bSJoseph Chen #define CTRL_I		0x09	/* inicall debug for kernel */
20*c51f2c54SJoseph Chen #define CTRL_L		0x0c	/* late shell(cli) on BOOTM_STATE_OS_GO */
214fe75b5bSJoseph Chen #define CTRL_M		0x0d	/* memory(sysmem/bidram) */
224fe75b5bSJoseph Chen #define CTRL_P		0x10	/* parameter(cmdline) dump */
23dba9c9e5SJoseph Chen #define CTRL_R		0x12	/* regulator initial state dump */
24b173f38eSJoseph Chen #define CTRL_T		0x14	/* print fdt */
25c664909eSJoseph Chen 
is_hotkey(enum hotkey_t id)26c664909eSJoseph Chen bool is_hotkey(enum hotkey_t id)
27c664909eSJoseph Chen {
28c664909eSJoseph Chen 	switch (id) {
29866ecb69SJoseph Chen 	case HK_CMDLINE:
30866ecb69SJoseph Chen 		return gd->console_evt == CTRL_P;
31866ecb69SJoseph Chen 	case HK_INITCALL:
32866ecb69SJoseph Chen 		return gd->console_evt == CTRL_I;
33dba9c9e5SJoseph Chen 	case HK_REGULATOR:
34dba9c9e5SJoseph Chen 		return gd->console_evt == CTRL_R;
35c664909eSJoseph Chen 	case HK_SYSMEM:
36c664909eSJoseph Chen 		return gd->console_evt == CTRL_M;
379beff106SJoseph Chen 	case HK_BROM_DNL:
389beff106SJoseph Chen 		return gd->console_evt == CTRL_B;
399889a0e0SJoseph Chen #ifndef CONFIG_CONSOLE_DISABLE_CLI
409beff106SJoseph Chen 	case HK_ROCKUSB_DNL:
419beff106SJoseph Chen 		return gd->console_evt == CTRL_D;
429beff106SJoseph Chen 	case HK_FASTBOOT:
439beff106SJoseph Chen 		return gd->console_evt == CTRL_F;
449beff106SJoseph Chen #endif
45c664909eSJoseph Chen 	default:
46c664909eSJoseph Chen 		break;
47c664909eSJoseph Chen 	}
48c664909eSJoseph Chen 
49c664909eSJoseph Chen 	return false;
50c664909eSJoseph Chen }
51c664909eSJoseph Chen 
hotkey_run(enum hotkey_t id)52c664909eSJoseph Chen void hotkey_run(enum hotkey_t id)
53c664909eSJoseph Chen {
54c664909eSJoseph Chen 	switch ((id)) {
55c664909eSJoseph Chen 	case HK_SYSMEM:
56c664909eSJoseph Chen 		if (gd->console_evt == CTRL_M) {
57c664909eSJoseph Chen 			bidram_dump();
58c664909eSJoseph Chen 			sysmem_dump();
59c664909eSJoseph Chen 		}
60c664909eSJoseph Chen 		break;
61866ecb69SJoseph Chen 	case HK_CMDLINE:
62866ecb69SJoseph Chen 		if (gd->console_evt == CTRL_P)
63866ecb69SJoseph Chen 			printf("cmdline: %s\n", env_get("bootargs"));
64866ecb69SJoseph Chen 		break;
65866ecb69SJoseph Chen 	case HK_INITCALL:
66866ecb69SJoseph Chen 		if (gd->console_evt == CTRL_I)
67866ecb69SJoseph Chen 			env_update("bootargs", "initcall_debug debug");
68866ecb69SJoseph Chen 		break;
69b173f38eSJoseph Chen 	case HK_FDT:
70b173f38eSJoseph Chen 		if (gd->console_evt == CTRL_T)
71b173f38eSJoseph Chen 			run_command("fdt print", 0);
72b173f38eSJoseph Chen 		break;
73665be4b0SJoseph Chen 	case HK_CLI_OS_PRE:
74665be4b0SJoseph Chen 		if (gd->console_evt == CTRL_A)
75665be4b0SJoseph Chen 			cli_loop();
76665be4b0SJoseph Chen 		break;
77665be4b0SJoseph Chen 	case HK_CLI_OS_GO:
78*c51f2c54SJoseph Chen 		if (gd->console_evt == CTRL_L)
799b78eaa4SJoseph Chen 			cli_loop();
809b78eaa4SJoseph Chen 		break;
81c664909eSJoseph Chen 	default:
82c664909eSJoseph Chen 		break;
83c664909eSJoseph Chen 	}
84c664909eSJoseph Chen }
85