From 80149f55f7c9fac8fab03c307fbc0a7fc293fd57 Mon Sep 17 00:00:00 2001 From: Vince Liu Date: Thu, 10 Apr 2025 13:15:29 +0800 Subject: [PATCH] soc/mediatek/common: Convert spmi_dev_cnt to a function In some SoCs, such as MT8189G/H, different numbers of PMICs are required. To ensure code reusability and compatibility, it is necessary to dynamically set this variable. Therefore, spmi_dev_cnt is changed to a function. BUG=b:379008996 BRANCH=none TEST=build passed Signed-off-by: Vince Liu Change-Id: Ib8d6306a81c276dceb021ddadec40803fd85019b Reviewed-on: https://review.coreboot.org/c/coreboot/+/87853 Reviewed-by: Yu-Ping Wu Tested-by: build bot (Jenkins) Reviewed-by: Yidi Lin --- src/soc/mediatek/common/include/soc/pmif_spmi.h | 2 +- src/soc/mediatek/common/mt6315.c | 2 +- src/soc/mediatek/common/pmif_spmi.c | 2 +- src/soc/mediatek/mt8186/pmif_spmi.c | 7 +++++-- src/soc/mediatek/mt8188/pmif_spmi.c | 7 +++++-- src/soc/mediatek/mt8189/pmif_spmi.c | 9 +++++---- src/soc/mediatek/mt8192/pmif_spmi.c | 7 +++++-- src/soc/mediatek/mt8195/pmif_spmi.c | 7 +++++-- src/soc/mediatek/mt8196/pmif_spmi.c | 9 ++++++--- 9 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/soc/mediatek/common/include/soc/pmif_spmi.h b/src/soc/mediatek/common/include/soc/pmif_spmi.h index 8610c54e3b..2160e9edca 100644 --- a/src/soc/mediatek/common/include/soc/pmif_spmi.h +++ b/src/soc/mediatek/common/include/soc/pmif_spmi.h @@ -90,10 +90,10 @@ enum { #define MT6315_DEFAULT_VALUE_READ 0x15 extern const struct spmi_device spmi_dev[]; -extern const size_t spmi_dev_cnt; int pmif_spmi_init(struct pmif *arb); int spmi_config_master(void); +size_t spmi_dev_cnt(void); void pmif_spmi_iocfg(void); void pmif_spmi_config(struct pmif *arb); #endif /* __SOC_MEDIATEK_PMIF_SPMI_H__ */ diff --git a/src/soc/mediatek/common/mt6315.c b/src/soc/mediatek/common/mt6315.c index 35567d1316..a9efb0c975 100644 --- a/src/soc/mediatek/common/mt6315.c +++ b/src/soc/mediatek/common/mt6315.c @@ -101,7 +101,7 @@ void mt6315_init(void) init_pmif_arb(); - for (i = 0; i < spmi_dev_cnt; i++) + for (i = 0; i < spmi_dev_cnt(); i++) mt6315_wdt_enable(spmi_dev[i].slvid); mt6315_init_setting(); diff --git a/src/soc/mediatek/common/pmif_spmi.c b/src/soc/mediatek/common/pmif_spmi.c index e4c4e82daa..b39103aa4a 100644 --- a/src/soc/mediatek/common/pmif_spmi.c +++ b/src/soc/mediatek/common/pmif_spmi.c @@ -63,7 +63,7 @@ static int spmi_cali_rd_clock_polarity(struct pmif *pmif_arb) bool success = true; SET32_BITFIELDS(&mtk_spmi_mst->mst_sampl, SAMPL_CK_DLY, cali_data[i].dly, SAMPL_CK_POL, cali_data[i].pol); - for (j = 0; j < spmi_dev_cnt; j++) { + for (j = 0; j < spmi_dev_cnt(); j++) { if (spmi_read_check(pmif_arb, spmi_dev[j].slvid) != 0) { success = false; break; diff --git a/src/soc/mediatek/mt8186/pmif_spmi.c b/src/soc/mediatek/mt8186/pmif_spmi.c index 614985b94d..7a93784c4c 100644 --- a/src/soc/mediatek/mt8186/pmif_spmi.c +++ b/src/soc/mediatek/mt8186/pmif_spmi.c @@ -37,8 +37,6 @@ const struct spmi_device spmi_dev[] = { }, }; -const size_t spmi_dev_cnt = ARRAY_SIZE(spmi_dev); - int spmi_config_master(void) { /* Software reset */ @@ -59,3 +57,8 @@ int spmi_config_master(void) return 0; } + +size_t spmi_dev_cnt(void) +{ + return ARRAY_SIZE(spmi_dev); +} diff --git a/src/soc/mediatek/mt8188/pmif_spmi.c b/src/soc/mediatek/mt8188/pmif_spmi.c index 006f74424f..4167e3e776 100644 --- a/src/soc/mediatek/mt8188/pmif_spmi.c +++ b/src/soc/mediatek/mt8188/pmif_spmi.c @@ -38,8 +38,6 @@ const struct spmi_device spmi_dev[] = { }, }; -const size_t spmi_dev_cnt = ARRAY_SIZE(spmi_dev); - int spmi_config_master(void) { /* Software reset */ @@ -97,3 +95,8 @@ void pmif_spmi_iocfg(void) SET32_BITFIELDS(&mtk_iocfg_lt->drv_cfg3_clr, SPMI_DRI, 0x07); SET32_BITFIELDS(&mtk_iocfg_lt->drv_cfg3_set, SPMI_DRI, 0x02); } + +size_t spmi_dev_cnt(void) +{ + return ARRAY_SIZE(spmi_dev); +} diff --git a/src/soc/mediatek/mt8189/pmif_spmi.c b/src/soc/mediatek/mt8189/pmif_spmi.c index 1b0005947a..2cc4e114a3 100644 --- a/src/soc/mediatek/mt8189/pmif_spmi.c +++ b/src/soc/mediatek/mt8189/pmif_spmi.c @@ -1,7 +1,5 @@ /* SPDX-License-Identifier: GPL-2.0-only OR MIT */ -#include -#include #include #include #include @@ -20,8 +18,6 @@ const struct spmi_device spmi_dev[] = { }, }; -const size_t spmi_dev_cnt = ARRAY_SIZE(spmi_dev); - int spmi_config_master(void) { /* Enable SPMI */ @@ -44,3 +40,8 @@ void pmif_spmi_iocfg(void) gpio_set_driving(GPIO(SPMI_P_SCL), GPIO_DRV_10_MA); gpio_set_driving(GPIO(SPMI_P_SDA), GPIO_DRV_10_MA); } + +size_t spmi_dev_cnt(void) +{ + return ARRAY_SIZE(spmi_dev); +} diff --git a/src/soc/mediatek/mt8192/pmif_spmi.c b/src/soc/mediatek/mt8192/pmif_spmi.c index fb1dad0396..f1dec6d5be 100644 --- a/src/soc/mediatek/mt8192/pmif_spmi.c +++ b/src/soc/mediatek/mt8192/pmif_spmi.c @@ -34,8 +34,6 @@ const struct spmi_device spmi_dev[] = { }, }; -const size_t spmi_dev_cnt = ARRAY_SIZE(spmi_dev); - int spmi_config_master(void) { /* Software reset */ @@ -81,3 +79,8 @@ void pmif_spmi_iocfg(void) { SET32_BITFIELDS(&mtk_iocfg_bm->drv_cfg2, SPMI_SCL, 0x2, SPMI_SDA, 0x2); } + +size_t spmi_dev_cnt(void) +{ + return ARRAY_SIZE(spmi_dev); +} diff --git a/src/soc/mediatek/mt8195/pmif_spmi.c b/src/soc/mediatek/mt8195/pmif_spmi.c index 4d5f06f734..15eaf80921 100644 --- a/src/soc/mediatek/mt8195/pmif_spmi.c +++ b/src/soc/mediatek/mt8195/pmif_spmi.c @@ -43,8 +43,6 @@ const struct spmi_device spmi_dev[] = { }, }; -const size_t spmi_dev_cnt = ARRAY_SIZE(spmi_dev); - int spmi_config_master(void) { /* Software reset */ @@ -103,3 +101,8 @@ void pmif_spmi_iocfg(void) SET32_BITFIELDS(&mtk_iocfg_bm->drv_cfg3_clr, SPMI_DRI, 0x2D); SET32_BITFIELDS(&mtk_iocfg_bm->drv_cfg3_set, SPMI_DRI, 0x12); } + +size_t spmi_dev_cnt(void) +{ + return ARRAY_SIZE(spmi_dev); +} diff --git a/src/soc/mediatek/mt8196/pmif_spmi.c b/src/soc/mediatek/mt8196/pmif_spmi.c index 665c64c7f6..8baff6ac99 100644 --- a/src/soc/mediatek/mt8196/pmif_spmi.c +++ b/src/soc/mediatek/mt8196/pmif_spmi.c @@ -114,8 +114,6 @@ static const uint32_t lat_limit[2][23] = { 0x1e, 0x0, 0x3e6 }, }; -const size_t spmi_dev_cnt = ARRAY_SIZE(spmi_dev); - static struct mtk_spmi_mst_reg *get_mst_reg(struct pmif *arb) { if (arb->mstid == SPMI_MASTER_1) @@ -256,7 +254,7 @@ static int spmi_mst_init(struct pmif *arb) if (pmif_spmi_config_master(arb)) return -1; - for (i = 0; i < spmi_dev_cnt; i++) { + for (i = 0; i < spmi_dev_cnt(); i++) { if ((arb->mstid % 2) == spmi_dev[i].mstid) { spmi_cali_rd_clock_polarity(arb, &spmi_dev[i]); /* spmi_cali */ spmi_config_slave(arb, &spmi_dev[i]); @@ -351,3 +349,8 @@ int pmif_spmi_init(struct pmif *arb) return 0; } + +size_t spmi_dev_cnt(void) +{ + return ARRAY_SIZE(spmi_dev); +}