board: st: stpmic1: add function stpmic1_init
authorPatrick Delaunay <patrick.delaunay@st.com>
Mon, 25 May 2020 10:19:46 +0000 (12:19 +0200)
committerPatrick Delaunay <patrick.delaunay@st.com>
Tue, 7 Jul 2020 14:01:23 +0000 (16:01 +0200)
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@st.com>
Reviewed-by: Patrice Chotard <patrice.chotard@st.com>
arch/arm/mach-stm32mp/Kconfig
board/dhelectronics/dh_stm32mp1/Makefile
board/dhelectronics/dh_stm32mp1/board.c
board/st/common/stpmic1.c
board/st/common/stpmic1.h [new file with mode: 0644]
board/st/stm32mp1/spl.c
board/st/stm32mp1/stm32mp1.c
configs/stm32mp15_basic_defconfig

index 6c995ed..ea7d574 100644 (file)
@@ -1,7 +1,6 @@
 if ARCH_STM32MP
 
 config SPL
-       select SPL_BOARD_INIT
        select SPL_CLK
        select SPL_DM
        select SPL_DM_SEQ_ALIAS
index 5758d98..b368b39 100644 (file)
@@ -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
index 26e827b..0e745ec 100644 (file)
@@ -41,6 +41,7 @@
 #include <usb.h>
 #include <usb/dwc2_udc.h>
 #include <watchdog.h>
+#include "../../st/common/stpmic1.h"
 
 /* SYSCFG registers */
 #define SYSCFG_BOOTR           0x00
@@ -198,6 +199,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;
index 41111c5..85f9505 100644 (file)
@@ -5,6 +5,7 @@
 
 #include <common.h>
 #include <dm.h>
+#include <asm/io.h>
 #include <asm/arch/ddr.h>
 #include <linux/bitops.h>
 #include <linux/delay.h>
@@ -162,3 +163,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 (file)
index 0000000..ecc3276
--- /dev/null
@@ -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);
index e65ff28..fa25cef 100644 (file)
@@ -5,41 +5,14 @@
 
 #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 <init.h>
+#include <asm/arch/sys_proto.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;
 }
index 4553329..4cea5bd 100644 (file)
@@ -84,6 +84,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;
index ecdbac6..28363e9 100644 (file)
@@ -18,6 +18,7 @@ CONFIG_DEFAULT_DEVICE_TREE="stm32mp157c-ev1"
 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