Files
OpenBMC/meta-luxshare/meta-common/recipes-bsp/u-boot/files/0003-Enable-FMC-WDT2.patch
T
2026-04-23 17:07:55 +08:00

98 lines
2.6 KiB
Diff
Executable File

From b3de8eb1967673d858fee96531698d8aab436a78 Mon Sep 17 00:00:00 2001
From: roly <Rolyli.Li@luxshare-ict.com>
Date: Wed, 27 Nov 2024 17:45:08 +0800
Subject: [PATCH] Enable FMC WDT2
---
board/aspeed/evb_ast2600/evb_ast2600.c | 42 ++++++++++++++++++++++++++
common/autoboot.c | 5 +++
2 files changed, 47 insertions(+)
diff --git a/board/aspeed/evb_ast2600/evb_ast2600.c b/board/aspeed/evb_ast2600/evb_ast2600.c
index 668ae5c855..dfb4c7c7ef 100644
--- a/board/aspeed/evb_ast2600/evb_ast2600.c
+++ b/board/aspeed/evb_ast2600/evb_ast2600.c
@@ -13,6 +13,11 @@
#define LPC_SNPWADR (LPC_BASE + 0x90)
#define LPC_HICRB (LPC_BASE + 0x100)
#define GPIO_BASE 0x1e780000
+#define FMC_BASE 0x1e620000
+#define FMC_WDT2_CTRL (FMC_BASE + 0x64)
+#define FMC_WDT2_TIMER_RELOAD_VALUE (FMC_BASE + 0x68)
+#define FMC_WDT2_TIMER_RESTART (FMC_BASE + 0x6c)
+#define WDT2_CTRL_ENABLE_WDT (1 << 0)
/* HICR5 Bits */
#define HICR5_EN_SIOGIO (1 << 31) /* Enable SIOGIO */
@@ -124,8 +129,37 @@ static void __maybe_unused espi_init(void)
writel(reg, ESPI_BASE + 0x000);
}
+static void __maybe_unused enable_fmc_wdt2(uint16_t expire_time)
+{
+ const u16 max_expire_time = 0x1fff;
+ const u16 timer_restart_cmd = 0x4755;
+ u32 reg;
+
+ if (expire_time > max_expire_time) {
+ expire_time = max_expire_time;
+ }
+
+ // The time unit is 0.1 second. The range is 0 to 0x1fff.
+ writel(expire_time, FMC_WDT2_TIMER_RELOAD_VALUE);
+ // Write 0x4755 value to load the reload value into watchdog counter
+ writel(timer_restart_cmd, FMC_WDT2_TIMER_RESTART);
+ // Enable FMC WDT2
+ reg = readl(FMC_WDT2_CTRL) | (WDT2_CTRL_ENABLE_WDT);
+ writel(reg, FMC_WDT2_CTRL);
+}
+
+void __maybe_unused disable_fmc_wdt2(void)
+{
+ u32 reg;
+
+ reg = readl(FMC_WDT2_CTRL) & ~(WDT2_CTRL_ENABLE_WDT);
+ writel(reg, FMC_WDT2_CTRL);
+}
+
int board_early_init_f(void)
{
+ disable_fmc_wdt2();
+ enable_fmc_wdt2(7800); // expire time: 13 minutes
#if 0
port80h_snoop_init();
sgpio_init();
@@ -220,4 +254,12 @@ int update_system_reset_event(void)
env_set("system_reset_event", str_value);
env_save();
return 0;
+}
+
+void board_preboot_os(void)
+{
+ const u16 expire_time = 780; // 13 minutes
+
+ enable_fmc_wdt2(expire_time * 10);
+ printf("Enable FMC WDT2: expire time is %d seconds.", expire_time);
}
\ No newline at end of file
diff --git a/common/autoboot.c b/common/autoboot.c
index 94133eaeda..d54f1c431f 100644
--- a/common/autoboot.c
+++ b/common/autoboot.c
@@ -267,6 +267,11 @@ static int abortboot(int bootdelay)
gd->flags &= ~GD_FLG_SILENT;
#endif
+#ifdef CONFIG_ASPEED_AST2600
+ if (abort)
+ disable_fmc_wdt2();
+#endif
+
return abort;
}
--
2.25.1