diff options
Diffstat (limited to 'board/st')
-rw-r--r-- | board/st/common/stpmic1.c | 23 | ||||
-rw-r--r-- | board/st/common/stpmic1.h | 2 | ||||
-rw-r--r-- | board/st/stm32mp1/spl.c | 11 |
3 files changed, 33 insertions, 3 deletions
diff --git a/board/st/common/stpmic1.c b/board/st/common/stpmic1.c index 85f950575f..3aa379e8a5 100644 --- a/board/st/common/stpmic1.c +++ b/board/st/common/stpmic1.c @@ -164,8 +164,25 @@ int board_ddr_power_init(enum ddr_type ddr_type) return 0; } +static int stmpic_buck1_set(struct udevice *dev, u32 voltage_mv) +{ + u32 value; + + /* VDDCORE= STMPCI1 BUCK1 ramp=+25mV, 5 => 725mV, 36 => 1500mV */ + value = ((voltage_mv - 725) / 25) + 5; + if (value < 5) + value = 5; + if (value > 36) + value = 36; + + return pmic_clrsetbits(dev, + STPMIC1_BUCKX_MAIN_CR(STPMIC1_BUCK1), + STPMIC1_BUCK_VOUT_MASK, + STPMIC1_BUCK_VOUT(value)); +} + /* early init of PMIC */ -void stpmic1_init(void) +void stpmic1_init(u32 voltage_mv) { struct udevice *dev; @@ -173,6 +190,10 @@ void stpmic1_init(void) DM_GET_DRIVER(pmic_stpmic1), &dev)) return; + /* update VDDCORE = BUCK1 */ + if (voltage_mv) + stmpic_buck1_set(dev, voltage_mv); + /* Keep vdd on during the reset cycle */ pmic_clrsetbits(dev, STPMIC1_BUCKS_MRST_CR, diff --git a/board/st/common/stpmic1.h b/board/st/common/stpmic1.h index ecc3276697..b17d6f1633 100644 --- a/board/st/common/stpmic1.h +++ b/board/st/common/stpmic1.h @@ -3,4 +3,4 @@ * Copyright (C) 2020, STMicroelectronics - All Rights Reserved */ -void stpmic1_init(void); +void stpmic1_init(u32 voltage_mv); diff --git a/board/st/stm32mp1/spl.c b/board/st/stm32mp1/spl.c index fa25cefd28..9a83da8fd3 100644 --- a/board/st/stm32mp1/spl.c +++ b/board/st/stm32mp1/spl.c @@ -9,10 +9,19 @@ #include <asm/arch/sys_proto.h> #include "../common/stpmic1.h" +/* board early initialisation in board_f: need to use global variable */ +static u32 opp_voltage_mv __section(".data"); + +void board_vddcore_init(u32 voltage_mv) +{ + if (IS_ENABLED(CONFIG_PMIC_STPMIC1) && CONFIG_IS_ENABLED(POWER_SUPPORT)) + opp_voltage_mv = voltage_mv; +} + int board_early_init_f(void) { if (IS_ENABLED(CONFIG_PMIC_STPMIC1) && CONFIG_IS_ENABLED(POWER_SUPPORT)) - stpmic1_init(); + stpmic1_init(opp_voltage_mv); return 0; } |