[PATCH v2 6/9] board: st: stpmic1: add function stpmic1_init

Patrice CHOTARD patrice.chotard at st.com
Fri Jul 3 09:01:52 CEST 2020


Hi Patrick

On 5/25/20 12:19 PM, Patrick Delaunay wrote:
> Add a function stmpic_init to early initialize the PMIC STPMIC1
> - keep vdd on during the reset cycle (to avoid issue when backup battery
>   is absent)
> - Check if debug is enabled to program PMIC according to the bit
>
> This patch allows to remove the compilation of spl.c file from stm32mp1
> board in dh_stm32mp1.
>
> CONFIG_SPL_BOARD_INIT is removed as the new function is called earlier
> in SPL, in the function board_early_init_f.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay at st.com>
> ---
>
> Changes in v2:
> - add stpmic1_init function, called in board_early_init_f for
>   dh_stm32mp1 board support (and no more use spl.c from stm32mp1)
> - remove CONFIG_SPL_BOARD_INIT
>
>  arch/arm/mach-stm32mp/Kconfig            |  1 -
>  board/dhelectronics/dh_stm32mp1/Makefile |  4 ---
>  board/dhelectronics/dh_stm32mp1/board.c  |  3 ++
>  board/st/common/stpmic1.c                | 31 +++++++++++++++++++
>  board/st/common/stpmic1.h                |  6 ++++
>  board/st/stm32mp1/spl.c                  | 39 +++---------------------
>  board/st/stm32mp1/stm32mp1.c             |  6 ++++
>  configs/stm32mp15_basic_defconfig        |  1 +
>  8 files changed, 52 insertions(+), 39 deletions(-)
>  create mode 100644 board/st/common/stpmic1.h
>
> diff --git a/arch/arm/mach-stm32mp/Kconfig b/arch/arm/mach-stm32mp/Kconfig
> index 6c995ed8d8..ea7d57477b 100644
> --- a/arch/arm/mach-stm32mp/Kconfig
> +++ b/arch/arm/mach-stm32mp/Kconfig
> @@ -1,7 +1,6 @@
>  if ARCH_STM32MP
>  
>  config SPL
> -	select SPL_BOARD_INIT
>  	select SPL_CLK
>  	select SPL_DM
>  	select SPL_DM_SEQ_ALIAS
> diff --git a/board/dhelectronics/dh_stm32mp1/Makefile b/board/dhelectronics/dh_stm32mp1/Makefile
> index 5758d9816b..b368b396a4 100644
> --- a/board/dhelectronics/dh_stm32mp1/Makefile
> +++ b/board/dhelectronics/dh_stm32mp1/Makefile
> @@ -3,10 +3,6 @@
>  # Copyright (C) 2018, STMicroelectronics - All Rights Reserved
>  #
>  
> -ifdef CONFIG_SPL_BUILD
> -obj-y += ../../st/stm32mp1/spl.o
> -endif
> -
>  obj-y += ../../st/common/stpmic1.o board.o
>  
>  obj-$(CONFIG_SYS_MTDPARTS_RUNTIME) += ../../st/common/stm32mp_mtdparts.o
> diff --git a/board/dhelectronics/dh_stm32mp1/board.c b/board/dhelectronics/dh_stm32mp1/board.c
> index 85d56f6082..df0810dbda 100644
> --- a/board/dhelectronics/dh_stm32mp1/board.c
> +++ b/board/dhelectronics/dh_stm32mp1/board.c
> @@ -37,6 +37,7 @@
>  #include <usb.h>
>  #include <usb/dwc2_udc.h>
>  #include <watchdog.h>
> +#include "../../st/common/stpmic1.h"
>  
>  /* SYSCFG registers */
>  #define SYSCFG_BOOTR		0x00
> @@ -194,6 +195,8 @@ int board_stm32mp1_ddr_config_name_match(struct udevice *dev,
>  
>  int board_early_init_f(void)
>  {
> +	if (IS_ENABLED(CONFIG_SPL_BUILD))
> +		stpmic1_init();
>  	board_get_coding_straps();
>  
>  	return 0;
> diff --git a/board/st/common/stpmic1.c b/board/st/common/stpmic1.c
> index ca10a2246b..64f24f1f6f 100644
> --- a/board/st/common/stpmic1.c
> +++ b/board/st/common/stpmic1.c
> @@ -5,6 +5,7 @@
>  
>  #include <common.h>
>  #include <dm.h>
> +#include <asm/io.h>
>  #include <asm/arch/ddr.h>
>  #include <power/pmic.h>
>  #include <power/stpmic1.h>
> @@ -160,3 +161,33 @@ int board_ddr_power_init(enum ddr_type ddr_type)
>  
>  	return 0;
>  }
> +
> +/* early init of PMIC */
> +void stpmic1_init(void)
> +{
> +	struct udevice *dev;
> +
> +	if (uclass_get_device_by_driver(UCLASS_PMIC,
> +					DM_GET_DRIVER(pmic_stpmic1), &dev))
> +		return;
> +
> +	/* Keep vdd on during the reset cycle */
> +	pmic_clrsetbits(dev,
> +			STPMIC1_BUCKS_MRST_CR,
> +			STPMIC1_MRST_BUCK(STPMIC1_BUCK3),
> +			STPMIC1_MRST_BUCK(STPMIC1_BUCK3));
> +
> +	/* Check if debug is enabled to program PMIC according to the bit */
> +	if (readl(TAMP_BOOT_CONTEXT) & TAMP_BOOT_DEBUG_ON) {
> +		printf("Keep debug unit ON\n");
> +
> +		pmic_clrsetbits(dev, STPMIC1_BUCKS_MRST_CR,
> +				STPMIC1_MRST_BUCK_DEBUG,
> +				STPMIC1_MRST_BUCK_DEBUG);
> +
> +		if (STPMIC1_MRST_LDO_DEBUG)
> +			pmic_clrsetbits(dev, STPMIC1_LDOS_MRST_CR,
> +					STPMIC1_MRST_LDO_DEBUG,
> +					STPMIC1_MRST_LDO_DEBUG);
> +	}
> +}
> diff --git a/board/st/common/stpmic1.h b/board/st/common/stpmic1.h
> new file mode 100644
> index 0000000000..ecc3276697
> --- /dev/null
> +++ b/board/st/common/stpmic1.h
> @@ -0,0 +1,6 @@
> +/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
> +/*
> + * Copyright (C) 2020, STMicroelectronics - All Rights Reserved
> + */
> +
> +void stpmic1_init(void);
> diff --git a/board/st/stm32mp1/spl.c b/board/st/stm32mp1/spl.c
> index e65ff288ea..28efc5c0ae 100644
> --- a/board/st/stm32mp1/spl.c
> +++ b/board/st/stm32mp1/spl.c
> @@ -5,41 +5,12 @@
>  
>  #include <config.h>
>  #include <common.h>
> -#include <spl.h>
> -#include <dm.h>
> -#include <ram.h>
> -#include <asm/io.h>
> -#include <power/pmic.h>
> -#include <power/stpmic1.h>
> -#include <asm/arch/ddr.h>
> +#include "../common/stpmic1.h"
>  
> -void spl_board_init(void)
> +int board_early_init_f(void)
>  {
> -	/* Keep vdd on during the reset cycle */
> -#if defined(CONFIG_PMIC_STPMIC1) && defined(CONFIG_SPL_POWER_SUPPORT)
> -	struct udevice *dev;
> -	int ret;
> +	if (IS_ENABLED(CONFIG_PMIC_STPMIC1) && CONFIG_IS_ENABLED(POWER_SUPPORT))
> +		stpmic1_init();
>  
> -	ret = uclass_get_device_by_driver(UCLASS_PMIC,
> -					  DM_GET_DRIVER(pmic_stpmic1), &dev);
> -	if (!ret)
> -		pmic_clrsetbits(dev,
> -				STPMIC1_BUCKS_MRST_CR,
> -				STPMIC1_MRST_BUCK(STPMIC1_BUCK3),
> -				STPMIC1_MRST_BUCK(STPMIC1_BUCK3));
> -
> -	/* Check if debug is enabled to program PMIC according to the bit */
> -	if ((readl(TAMP_BOOT_CONTEXT) & TAMP_BOOT_DEBUG_ON) && !ret) {
> -		printf("Keep debug unit ON\n");
> -
> -		pmic_clrsetbits(dev, STPMIC1_BUCKS_MRST_CR,
> -				STPMIC1_MRST_BUCK_DEBUG,
> -				STPMIC1_MRST_BUCK_DEBUG);
> -
> -		if (STPMIC1_MRST_LDO_DEBUG)
> -			pmic_clrsetbits(dev, STPMIC1_LDOS_MRST_CR,
> -					STPMIC1_MRST_LDO_DEBUG,
> -					STPMIC1_MRST_LDO_DEBUG);
> -	}
> -#endif
> +	return 0;
>  }
> diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c
> index 33cb7f6c4d..22ad2dba9a 100644
> --- a/board/st/stm32mp1/stm32mp1.c
> +++ b/board/st/stm32mp1/stm32mp1.c
> @@ -79,6 +79,12 @@ DECLARE_GLOBAL_DATA_PTR;
>  #define USB_START_LOW_THRESHOLD_UV	1230000
>  #define USB_START_HIGH_THRESHOLD_UV	2150000
>  
> +int board_early_init_f(void)
> +{
> +	/* nothing to do, only used in SPL */
> +	return 0;
> +}
> +
>  int checkboard(void)
>  {
>  	int ret;
> diff --git a/configs/stm32mp15_basic_defconfig b/configs/stm32mp15_basic_defconfig
> index c7dd2926c9..628cde6cda 100644
> --- a/configs/stm32mp15_basic_defconfig
> +++ b/configs/stm32mp15_basic_defconfig
> @@ -16,6 +16,7 @@ CONFIG_SPL_TEXT_BASE=0x2FFC2500
>  CONFIG_DISTRO_DEFAULTS=y
>  CONFIG_FIT=y
>  CONFIG_BOOTCOMMAND="run bootcmd_stm32mp"
> +CONFIG_BOARD_EARLY_INIT_F=y
>  CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION=y
>  CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION=3
>  CONFIG_SPL_I2C_SUPPORT=y

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

Thanks


More information about the U-Boot mailing list