summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/soc/mediatek/common/include/soc/wdt.h5
-rw-r--r--src/soc/mediatek/mt8186/bootblock.c1
-rw-r--r--src/soc/mediatek/mt8186/wdt.c10
3 files changed, 15 insertions, 1 deletions
diff --git a/src/soc/mediatek/common/include/soc/wdt.h b/src/soc/mediatek/common/include/soc/wdt.h
index cd43134078..ebf7f490f5 100644
--- a/src/soc/mediatek/common/include/soc/wdt.h
+++ b/src/soc/mediatek/common/include/soc/wdt.h
@@ -14,7 +14,9 @@ struct mtk_wdt_regs {
u32 wdt_interval;
u32 wdt_swrst;
u32 wdt_swsysrst;
- u32 reserved[9];
+ u32 reserved0[5];
+ u32 wdt_req_mode;
+ u32 reserved1[3];
u32 wdt_debug_ctrl;
};
@@ -38,6 +40,7 @@ enum {
static struct mtk_wdt_regs *const mtk_wdt = (void *)RGU_BASE;
+void mtk_wdt_preinit(void);
int mtk_wdt_init(void);
void mtk_wdt_clr_status(void);
diff --git a/src/soc/mediatek/mt8186/bootblock.c b/src/soc/mediatek/mt8186/bootblock.c
index e5d1e73047..29de7fbe77 100644
--- a/src/soc/mediatek/mt8186/bootblock.c
+++ b/src/soc/mediatek/mt8186/bootblock.c
@@ -12,6 +12,7 @@ void bootblock_soc_init(void)
{
mtk_mmu_init();
bustracker_init();
+ mtk_wdt_preinit();
mtk_wdt_init();
mt_pll_init();
unmask_eint_event_mask();
diff --git a/src/soc/mediatek/mt8186/wdt.c b/src/soc/mediatek/mt8186/wdt.c
index fbc9bb9989..f9e0d8a3d7 100644
--- a/src/soc/mediatek/mt8186/wdt.c
+++ b/src/soc/mediatek/mt8186/wdt.c
@@ -10,8 +10,18 @@
#include <soc/wdt.h>
#define MTK_WDT_CLR_STATUS_VAL 0x22
+#define MTK_WDT_REQ_MOD_KEY_VAL 0x33
DEFINE_BITFIELD(MTK_WDT_CLR_STATUS, 31, 24)
+DEFINE_BITFIELD(MTK_WDT_REQ_MOD_KEY, 31, 24)
+DEFINE_BIT(MTK_WDT_SPM_THERMAL_EN, 0)
+
+void mtk_wdt_preinit(void)
+{
+ SET32_BITFIELDS(&mtk_wdt->wdt_req_mode,
+ MTK_WDT_SPM_THERMAL_EN, 0,
+ MTK_WDT_REQ_MOD_KEY, MTK_WDT_REQ_MOD_KEY_VAL);
+}
void mtk_wdt_clr_status(void)
{