[Uboot-stm32] [PATCH v2 7/9] board: stm32mp1: update vddcore in SPL

Patrice CHOTARD patrice.chotard at st.com
Fri Jul 3 09:05:56 CEST 2020


Hi Patrick

On 5/25/20 12:19 PM, Patrick Delaunay wrote:
> For board using STPMIC1, the vddcore is provided by BUCK1 of STPMIC1
> and need to be updated for 800MHz support and only after the clock
> tree initialization.
>
> The VDDCORE voltage value is provided by clock driver, saved in global
> variable opp_voltage_mv and udpated in SPL board_early_init_f(),
> just after clock tree initialization.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay at st.com>
> ---
>
> Changes in v2:
> - stmpic_buck1_set is a static function called in stpmic1_init
>   (with new parameter for vddcore value)
> - update also dh_stm32mp1 board
>
>  board/dhelectronics/dh_stm32mp1/board.c |  9 ++++++++-
>  board/st/common/stpmic1.c               | 23 ++++++++++++++++++++++-
>  board/st/common/stpmic1.h               |  2 +-
>  board/st/stm32mp1/spl.c                 | 11 ++++++++++-
>  4 files changed, 41 insertions(+), 4 deletions(-)
>
> diff --git a/board/dhelectronics/dh_stm32mp1/board.c b/board/dhelectronics/dh_stm32mp1/board.c
> index df0810dbda..2ae97f677b 100644
> --- a/board/dhelectronics/dh_stm32mp1/board.c
> +++ b/board/dhelectronics/dh_stm32mp1/board.c
> @@ -136,6 +136,7 @@ int checkboard(void)
>  static u8 brdcode __section("data");
>  static u8 ddr3code __section("data");
>  static u8 somcode __section("data");
> +static u32 opp_voltage_mv __section(".data");
>  
>  static void board_get_coding_straps(void)
>  {
> @@ -193,10 +194,16 @@ int board_stm32mp1_ddr_config_name_match(struct udevice *dev,
>  	return -EINVAL;
>  }
>  
> +void board_vddcore_init(u32 voltage_mv)
> +{
> +	if (IS_ENABLED(CONFIG_SPL_BUILD))
> +		opp_voltage_mv = voltage_mv;
> +}
> +
>  int board_early_init_f(void)
>  {
>  	if (IS_ENABLED(CONFIG_SPL_BUILD))
> -		stpmic1_init();
> +		stpmic1_init(opp_voltage_mv);
>  	board_get_coding_straps();
>  
>  	return 0;
> diff --git a/board/st/common/stpmic1.c b/board/st/common/stpmic1.c
> index 64f24f1f6f..47f9d95c29 100644
> --- a/board/st/common/stpmic1.c
> +++ b/board/st/common/stpmic1.c
> @@ -162,8 +162,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;
>  
> @@ -171,6 +188,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 28efc5c0ae..96ab671169 100644
> --- a/board/st/stm32mp1/spl.c
> +++ b/board/st/stm32mp1/spl.c
> @@ -7,10 +7,19 @@
>  #include <common.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;
>  }

Reviewed-by: Patrice Chotard <patrice.chotard at st.com>

Thanks


More information about the U-Boot mailing list