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