diff options
Diffstat (limited to 'meta-ampere/meta-jade/recipes-bsp/u-boot/u-boot-aspeed/0003-aspeed-support-passing-system-reset-status-to-kernel.patch')
-rw-r--r-- | meta-ampere/meta-jade/recipes-bsp/u-boot/u-boot-aspeed/0003-aspeed-support-passing-system-reset-status-to-kernel.patch | 180 |
1 files changed, 0 insertions, 180 deletions
diff --git a/meta-ampere/meta-jade/recipes-bsp/u-boot/u-boot-aspeed/0003-aspeed-support-passing-system-reset-status-to-kernel.patch b/meta-ampere/meta-jade/recipes-bsp/u-boot/u-boot-aspeed/0003-aspeed-support-passing-system-reset-status-to-kernel.patch deleted file mode 100644 index 0381b5d84..000000000 --- a/meta-ampere/meta-jade/recipes-bsp/u-boot/u-boot-aspeed/0003-aspeed-support-passing-system-reset-status-to-kernel.patch +++ /dev/null @@ -1,180 +0,0 @@ -From af4353ab19aaf29dc68ff89a0d581102ca5be43c Mon Sep 17 00:00:00 2001 -From: "Thang Q. Nguyen" <thang@os.amperecomputing.com> -Date: Wed, 6 Jan 2021 06:33:36 +0000 -Subject: [PATCH] aspeed: support passing system reset status to kernel via - bootargs - -This is a backport of the patch file from -openbmc/meta-yadro/meta-nicole/recipes-bsp/u-boot/ -to add the Aspeed reset reason to bootargs so kernel applications -can query it. - -Test case: /proc/cmdline must contain: - - resetreason=power after cold bmc boot - - resetreason=watchdog after warm bmc reboot - -Signed-off-by: Chanh Nguyen <chanh@os.amperecomputing.com> -Signed-off-by: Thang Q. Nguyen <thang@os.amperecomputing.com> ---- - arch/arm/include/asm/arch-aspeed/ast_scu.h | 2 +- - arch/arm/mach-aspeed/ast-scu.c | 6 +- - board/aspeed/ast-g5/ast-g5.c | 81 ++++++++++++++++++++++ - 3 files changed, 87 insertions(+), 2 deletions(-) - -diff --git a/arch/arm/include/asm/arch-aspeed/ast_scu.h b/arch/arm/include/asm/arch-aspeed/ast_scu.h -index d2c010a0dc..f5c9126ec0 100644 ---- a/arch/arm/include/asm/arch-aspeed/ast_scu.h -+++ b/arch/arm/include/asm/arch-aspeed/ast_scu.h -@@ -29,7 +29,7 @@ - #define __AST_SCU_H - - extern void ast_scu_show_system_info (void); --extern void ast_scu_sys_rest_info(void); -+extern u32 ast_scu_sys_rest_info(void); - extern void ast_scu_security_info(void); - extern u32 ast_scu_revision_id(void); - extern u32 ast_scu_get_vga_memsize(void); -diff --git a/arch/arm/mach-aspeed/ast-scu.c b/arch/arm/mach-aspeed/ast-scu.c -index ef90ef3805..c7ab66415f 100644 ---- a/arch/arm/mach-aspeed/ast-scu.c -+++ b/arch/arm/mach-aspeed/ast-scu.c -@@ -494,22 +494,26 @@ void ast_scu_security_info(void) - } - } - --void ast_scu_sys_rest_info(void) -+u32 ast_scu_sys_rest_info(void) - { - u32 rest = ast_scu_read(AST_SCU_SYS_CTRL); - - if (rest & SCU_SYS_EXT_RESET_FLAG) { - printf("RST : External\n"); - ast_scu_write(SCU_SYS_EXT_RESET_FLAG, AST_SCU_SYS_CTRL); -+ rest = SCU_SYS_EXT_RESET_FLAG; - } else if (rest & SCU_SYS_WDT_RESET_FLAG) { - printf("RST : Watchdog\n"); - ast_scu_write(SCU_SYS_WDT_RESET_FLAG, AST_SCU_SYS_CTRL); -+ rest = SCU_SYS_WDT_RESET_FLAG; - } else if (rest & SCU_SYS_PWR_RESET_FLAG) { - printf("RST : Power On\n"); - ast_scu_write(SCU_SYS_PWR_RESET_FLAG, AST_SCU_SYS_CTRL); -+ rest = SCU_SYS_PWR_RESET_FLAG; - } else { - printf("RST : CLK en\n"); - } -+ return rest; - } - - u32 ast_scu_get_vga_memsize(void) -diff --git a/board/aspeed/ast-g5/ast-g5.c b/board/aspeed/ast-g5/ast-g5.c -index 9bf6c905fe..9e27bce0f5 100644 ---- a/board/aspeed/ast-g5/ast-g5.c -+++ b/board/aspeed/ast-g5/ast-g5.c -@@ -8,6 +8,8 @@ - */ - - #include <common.h> -+#include <stdlib.h> -+#include <asm/arch/regs-scu.h> - #include <netdev.h> - - #include <asm/arch/ast_scu.h> -@@ -25,9 +27,76 @@ int board_init(void) - } - - #ifdef CONFIG_BOARD_LATE_INIT -+static void update_bootargs_cmd(const char *key, const char *value) -+{ -+ int buf_len; -+ char *buf; -+ char *cmdline; -+ char *end = NULL; -+ -+ if (!key || (key[0] == '\0')) { -+ printf("%s: Empty key not allowed\n", __func__); -+ return; -+ } -+ -+ cmdline = getenv("bootargs"); -+ -+ /* Allocate space for maximum possible new command line */ -+ buf_len = (cmdline ? strlen(cmdline) : 0) -+ + 1 /* spacebar as delimiter */ -+ + strlen(key) -+ + (value ? 1 /* equal sign */ + strlen(value) : 0) -+ + 1 /* terminating null */; -+ -+ buf = calloc(buf_len, sizeof(char)); -+ if (!buf) { -+ printf("%s: out of memory\n", __func__); -+ return; -+ } -+ -+ if (cmdline) -+ { -+ char *start = strstr(cmdline, key); -+ -+ /* Check for full word match. Match should be start of cmdline -+ * or there should be space before match -+ **/ -+ if (start && ((start == cmdline) || (*(start - 1) == ' '))) { -+ strncat(buf, cmdline, (start - cmdline)); -+ -+ /* Find the end of the keyword[=value] pair, -+ * including a single training space character, if any. -+ * Skip the found substring, mark the tail of cmdline. -+ **/ -+ end = strchr(start, ' '); -+ if (end) { -+ end++; -+ } -+ } else { -+ strcat(buf, cmdline); -+ strcat(buf, " "); -+ } -+ } -+ -+ strcat(buf, key); -+ if (value) { -+ strcat(buf, "="); -+ strcat(buf, value); -+ } -+ -+ if (end) { -+ strcat(buf, " "); -+ strcat(buf, end); -+ } -+ -+ setenv("bootargs", buf); -+ free(buf); -+} -+ - int board_late_init(void) - { - u32 val; -+ u32 reset_reason = ast_scu_sys_rest_info(); - - /* Switch PWM to GPIO mode to make FAN run in max speed */ - ast_scu_switch_pwm_to_gpio_mode(); -@@ -44,6 +113,18 @@ int board_late_init(void) - writel(0xaa, AST_SCU_BASE); - #endif - -+ if (reset_reason & SCU_SYS_EXT_RESET_FLAG) { -+ update_bootargs_cmd("resetreason", "external"); -+ } else if (reset_reason & SCU_SYS_WDT_RESET_FLAG) { -+ update_bootargs_cmd("resetreason", "watchdog"); -+ } else if (reset_reason & SCU_SYS_PWR_RESET_FLAG) { -+ update_bootargs_cmd("resetreason", "power"); -+ } else { -+ char value[32]; -+ snprintf(value, sizeof(value) - 1, "0x%x", reset_reason); -+ update_bootargs_cmd("resetreason", value); -+ } -+ - return 0; - } - #endif --- -2.25.1 - |