diff options
-rw-r--r-- | src/soc/mediatek/common/include/soc/wdt.h | 5 | ||||
-rw-r--r-- | src/soc/mediatek/mt8186/bootblock.c | 1 | ||||
-rw-r--r-- | src/soc/mediatek/mt8186/wdt.c | 10 |
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) { |