From 8d25cf3ae719f8a4e85ec945ab9016feb023f02e Mon Sep 17 00:00:00 2001 From: "hailong.fan" Date: Wed, 9 Apr 2025 10:17:00 +0800 Subject: [PATCH] soc/mediatek/mt8189: Add SSPM loader Secure System Power Manager (SSPM) provides power control in secure domain. The initialization flow is to load SSPM firmware to its SRAM space and then enable it. It takes 19 ms to load sspm.bin. coreboot logs: CBFS: Found 'sspm.bin' @0x26740 size 0x645b in mcache @0xfffdd1ec mtk_init_mcu: Loaded (and reset) sspm.bin in 19 msecs (59392 bytes) BUG=b:379008996 BRANCH=none TEST=build pass and see SSPM firmware loading log Signed-off-by: Hailong Fan Change-Id: I9be0e7ee3d003b5ee9e07e4f136795755a11c5bc Reviewed-on: https://review.coreboot.org/c/coreboot/+/87761 Reviewed-by: Yu-Ping Wu Reviewed-by: Yidi Lin Tested-by: build bot (Jenkins) --- src/soc/mediatek/mt8189/Kconfig | 6 ++++++ src/soc/mediatek/mt8189/Makefile.mk | 4 +++- src/soc/mediatek/mt8189/include/soc/addressmap.h | 2 ++ src/soc/mediatek/mt8189/include/soc/spm.h | 1 + src/soc/mediatek/mt8189/soc.c | 2 ++ 5 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/soc/mediatek/mt8189/Kconfig b/src/soc/mediatek/mt8189/Kconfig index 430b868582..f8ba8e4d26 100644 --- a/src/soc/mediatek/mt8189/Kconfig +++ b/src/soc/mediatek/mt8189/Kconfig @@ -48,4 +48,10 @@ config SPM_FIRMWARE help The file name of the MediaTek SPM firmware. +config SSPM_FIRMWARE + string + default "sspm.bin" + help + The file name of the MediaTek SSPM firmware. + endif diff --git a/src/soc/mediatek/mt8189/Makefile.mk b/src/soc/mediatek/mt8189/Makefile.mk index fc1f8ff8f9..b8ff8bff29 100644 --- a/src/soc/mediatek/mt8189/Makefile.mk +++ b/src/soc/mediatek/mt8189/Makefile.mk @@ -46,6 +46,7 @@ ramstage-y += ../common/pmif_spmi.c pmif_spmi.c ramstage-y += ../common/rtc.c ../common/rtc_mt6359p.c ../common/rtc_osc_init.c ramstage-y += soc.c ramstage-y += ../common/spm.c ../common/spm_v2.c spm.c +ramstage-y += ../common/sspm.c ../common/sspm_sram.c ramstage-y += ../common/usb.c usb.c BL31_MAKEARGS += PLAT=mt8189 @@ -59,7 +60,8 @@ firmware-files := \ $(CONFIG_DPM_DM_FIRMWARE) \ $(CONFIG_DPM_PM_FIRMWARE) \ $(CONFIG_MCUPM_FIRMWARE) \ - $(CONFIG_SPM_FIRMWARE) + $(CONFIG_SPM_FIRMWARE) \ + $(CONFIG_SSPM_FIRMWARE) $(foreach fw, $(call strip_quotes,$(firmware-files)), \ $(eval $(fw)-file := $(MT8189_BLOB_DIR)/$(fw)) \ diff --git a/src/soc/mediatek/mt8189/include/soc/addressmap.h b/src/soc/mediatek/mt8189/include/soc/addressmap.h index 41d6557c7d..61999e03b0 100644 --- a/src/soc/mediatek/mt8189/include/soc/addressmap.h +++ b/src/soc/mediatek/mt8189/include/soc/addressmap.h @@ -117,6 +117,8 @@ enum { VLP_CK_BASE = IO_PHYS + 0x0C012000, PMICSPI_MST_BASE = IO_PHYS + 0x0C013000, DEVAPC_VLP_AO_BASE = IO_PHYS + 0x0C018000, + SSPM_SRAM_BASE = IO_PHYS + 0x0C300000, + SSPM_CFG_BASE = IO_PHYS + 0x0C340000, SCP_IIC_BASE = IO_PHYS + 0x0C80A000, SCP_BASE = IO_PHYS + 0x0CB21000, SPMI_MST_BASE = IO_PHYS + 0x0CC00000, diff --git a/src/soc/mediatek/mt8189/include/soc/spm.h b/src/soc/mediatek/mt8189/include/soc/spm.h index 1e47d3a21c..2dea849ddf 100644 --- a/src/soc/mediatek/mt8189/include/soc/spm.h +++ b/src/soc/mediatek/mt8189/include/soc/spm.h @@ -1030,6 +1030,7 @@ check_member(mtk_spm_regs, ssusb_pwr_con, 0x0EA8); check_member(mtk_spm_regs, cpueb_pwr_con, 0x0EB0); check_member(mtk_spm_regs, mfg0_pwr_con, 0x0EB4); check_member(mtk_spm_regs, mfg3_pwr_con, 0x0EC0); +check_member(mtk_spm_regs, sspm_sram_con, 0x0F04); check_member(mtk_spm_regs, pwr_status, 0x0F40); check_member(mtk_spm_regs, edp_tx_pwr_con, 0x0F70); diff --git a/src/soc/mediatek/mt8189/soc.c b/src/soc/mediatek/mt8189/soc.c index 93f6a4264c..697f4ddcf1 100644 --- a/src/soc/mediatek/mt8189/soc.c +++ b/src/soc/mediatek/mt8189/soc.c @@ -5,6 +5,7 @@ #include #include #include +#include #include void bootmem_platform_add_ranges(void) @@ -20,6 +21,7 @@ static void soc_read_resources(struct device *dev) static void soc_init(struct device *dev) { mcupm_init(); + sspm_init(); } static struct device_operations soc_ops = {