aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRex-BC Chen <rex-bc.chen@mediatek.com>2022-03-09 20:42:56 +0800
committerFelix Held <felix-coreboot@felixheld.de>2022-03-18 15:43:45 +0000
commitbff1210f24a0588f0f6da3c0a1db45115c62080d (patch)
treea8c91872162c244da7a33a18ed12acb0a753a693
parent1e24b2047565e1ab01facb8185c06292550b3050 (diff)
soc/mediatek/mt8186: Disable unused spm_thermal
In MT8186, we need to disable spm_thermal to prevent it from influencing other wdt status. There are two hardware pathes which are used for asserting watchdog from thermal. We can disable status of path 1 because status of path 2 is used. 1. Thermal -> SPM -> WDT 2. Thermal -> WDT Spm_thermal (path 1) is a flexible option for software control, and the hardware designer suggests that we should disable it if we don't use it. BUG=none TEST=build pass Signed-off-by: Rex-BC Chen <rex-bc.chen@mediatek.com> Change-Id: I0ffde6bad3000a64e3b5782edaa72c62da034302 Reviewed-on: https://review.coreboot.org/c/coreboot/+/62890 Reviewed-by: Yu-Ping Wu <yupingso@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
-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)
{