98 lines
2.6 KiB
Diff
Executable File
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
|
|
|