From ca9b46d341daa59109f327b32029d57f44abb02e Mon Sep 17 00:00:00 2001 From: Yidi Lin Date: Wed, 25 Feb 2026 19:00:41 +0800 Subject: [PATCH] soc/mediatek: Add common low battery poweroff handling Add a common low battery poweroff implementation in soc/mediatek/common/low_battery.c. This implementation checks if a low battery shutdown is needed and triggers a poweroff via Chrome EC if necessary. Also enable this for mt8196 in ramstage. BUG=b:424707341 TEST=The FW draws low battery indicator and powers off the DUT after 5 seconds. TEST=Use `elogtool list` and see `Low Battery boot | Power Off` Change-Id: I2fcd242fbf26bdebc4acfb477c95c381adf645f5 Signed-off-by: Yidi Lin Reviewed-on: https://review.coreboot.org/c/coreboot/+/91431 Reviewed-by: Yu-Ping Wu Tested-by: build bot (Jenkins) Reviewed-by: Subrata Banik Reviewed-by: Chen-Tsung Hsieh --- src/soc/mediatek/common/low_battery.c | 28 +++++++++++++++++++++++++++ src/soc/mediatek/mt8196/Makefile.mk | 1 + 2 files changed, 29 insertions(+) create mode 100644 src/soc/mediatek/common/low_battery.c diff --git a/src/soc/mediatek/common/low_battery.c b/src/soc/mediatek/common/low_battery.c new file mode 100644 index 0000000000..7a00341d8e --- /dev/null +++ b/src/soc/mediatek/common/low_battery.c @@ -0,0 +1,28 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include +#include +#include +#include +#include +#include + +void __weak poweroff(void) +{ + if (!CONFIG(EC_GOOGLE_CHROMEEC)) + return; + google_chromeec_ap_poweroff(); +} + +static void low_battery_poweroff(void *unused) +{ + if (!platform_is_low_battery_shutdown_needed()) + return; + + printk(BIOS_INFO, "%s: powering off...\n", __func__); + + platform_handle_emergency_low_battery(); + poweroff(); +} + +BOOT_STATE_INIT_ENTRY(BS_POST_DEVICE, BS_ON_EXIT, low_battery_poweroff, NULL); diff --git a/src/soc/mediatek/mt8196/Makefile.mk b/src/soc/mediatek/mt8196/Makefile.mk index 47f9592bc8..1a6159079e 100644 --- a/src/soc/mediatek/mt8196/Makefile.mk +++ b/src/soc/mediatek/mt8196/Makefile.mk @@ -69,6 +69,7 @@ ramstage-y += ../common/early_init.c ramstage-y += ../common/emi.c ramstage-y += gpueb.c ramstage-y += l2c_ops.c +ramstage-y += ../common/low_battery.c ramstage-y += ../common/mcu.c mcupm.c ramstage-y += ../common/mmu_operations.c ramstage-y += ../common/mtk_mipi_dphy.c mtk_mipi_dphy.c