Attention is currently required from: Xi Chen, Hung-Te Lin. Rex-BC Chen has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/64676 )
Change subject: soc/mediatek/mt8192: Enable thermal hardware reset ......................................................................
soc/mediatek/mt8192: Enable thermal hardware reset
System will not trigger rebooting when heat is high because thermal control is irq mode for current setting. To enable thermal hardware reset, we need to enable thermal control request and set it to reboot mode.
This feauture will not influence the thermal control because this thermal hardware reset is only triggered if we disable thermal throttle policy. Furthermore, the mcupm also helps to control thermal. Therefore, we think it's not a normal situation to trigger thermal hardware reset.
This feature is only for new hardware structure for thermal. Therefore, we only need to take care for MT8192/MT8195/MT8186.
BUG=none TEST=build pass
Signed-off-by: Rex-BC Chen rex-bc.chen@mediatek.com Change-Id: I98b062c2070384527624c3bcf0dfded25a2c8ce4 --- M src/soc/mediatek/mt8192/Makefile.inc A src/soc/mediatek/mt8192/wdt.c 2 files changed, 25 insertions(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/76/64676/1
diff --git a/src/soc/mediatek/mt8192/Makefile.inc b/src/soc/mediatek/mt8192/Makefile.inc index aeb50a7..ac55a2f 100644 --- a/src/soc/mediatek/mt8192/Makefile.inc +++ b/src/soc/mediatek/mt8192/Makefile.inc @@ -12,7 +12,7 @@ bootblock-y += ../common/timer.c bootblock-y += ../common/tracker.c ../common/tracker_v2.c bootblock-y += ../common/uart.c -bootblock-y += ../common/wdt.c +bootblock-y += ../common/wdt.c wdt.c
verstage-y += ../common/auxadc.c verstage-y += ../common/flash_controller.c diff --git a/src/soc/mediatek/mt8192/wdt.c b/src/soc/mediatek/mt8192/wdt.c new file mode 100644 index 0000000..8aa6319 --- /dev/null +++ b/src/soc/mediatek/mt8192/wdt.c @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include <device/mmio.h> +#include <soc/addressmap.h> +#include <soc/wdt.h> + +#define MTK_WDT_CLR_STATUS 0x230001FF +#define MTK_WDT_REQ_MOD_KEY_VAL 0x33 +#define MTK_WDT_REQ_IRQ_KEY_VAL 0x44 + +DEFINE_BITFIELD(MTK_WDT_REQ_MOD_KEY, 31, 24) +DEFINE_BITFIELD(MTK_WDT_REQ_IRQ_KEY, 31, 24) +DEFINE_BIT(MTK_WDT_THERMAL_EN, 18) +DEFINE_BIT(MTK_WDT_THERMAL_IRQ, 18) + +void mtk_wdt_preinit(void) +{ + SET32_BITFIELDS(&mtk_wdt->wdt_req_mode, + MTK_WDT_THERMAL_EN, 1, + MTK_WDT_REQ_MOD_KEY, MTK_WDT_REQ_MOD_KEY_VAL); + SET32_BITFIELDS(&mtk_wdt->wdt_req_irq_en, + MTK_WDT_THERMAL_IRQ, 0, + MTK_WDT_REQ_IRQ_KEY, MTK_WDT_REQ_IRQ_KEY_VAL); +}