]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
ARM: stm32: Add STM32MP13xx PMIC initialization for DDR3 DRAM type
authorMarek Vasut <marek.vasut@mailbox.org>
Mon, 30 Jun 2025 00:10:30 +0000 (02:10 +0200)
committerPatrice Chotard <patrice.chotard@foss.st.com>
Tue, 29 Jul 2025 15:02:31 +0000 (17:02 +0200)
The STM32MP13xx PMIC initialization for DDR3 DRAM type is similar
to the STM32MP15xx PMIC initialization, except the VTT rail is not
enabled. Fill in the STM32MP13xx support.

Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
Signed-off-by: Marek Vasut <marek.vasut@mailbox.org>
board/st/common/stpmic1.c

index 45c2bb5bceacbc77989a9ddbf65ea792934d96b6..b46f89dacb973723da793652c861bd050761d803 100644 (file)
 #include <power/pmic.h>
 #include <power/stpmic1.h>
 
+static bool is_stm32mp13xx(void)
+{
+       if (!IS_ENABLED(CONFIG_STM32MP13X))
+               return false;
+
+       return of_machine_is_compatible("st,stm32mp131") ||
+              of_machine_is_compatible("st,stm32mp133") ||
+              of_machine_is_compatible("st,stm32mp135");
+}
+
 int board_ddr_power_init(enum ddr_type ddr_type)
 {
+       bool is_mp13 = is_stm32mp13xx();
        struct udevice *dev;
        bool buck3_at_1800000v = false;
        int ret;
@@ -30,18 +41,21 @@ int board_ddr_power_init(enum ddr_type ddr_type)
        switch (ddr_type) {
        case STM32MP_DDR3:
                /* VTT = Set LDO3 to sync mode */
-               ret = pmic_reg_read(dev, STPMIC1_LDOX_MAIN_CR(STPMIC1_LDO3));
-               if (ret < 0)
-                       return ret;
-
-               ret &= ~STPMIC1_LDO3_MODE;
-               ret &= ~STPMIC1_LDO12356_VOUT_MASK;
-               ret |= STPMIC1_LDO_VOUT(STPMIC1_LDO3_DDR_SEL);
-
-               ret = pmic_reg_write(dev, STPMIC1_LDOX_MAIN_CR(STPMIC1_LDO3),
-                                    ret);
-               if (ret < 0)
-                       return ret;
+               if (!is_mp13) {
+                       /* Enable VTT only on STM32MP15xx */
+                       ret = pmic_reg_read(dev, STPMIC1_LDOX_MAIN_CR(STPMIC1_LDO3));
+                       if (ret < 0)
+                               return ret;
+
+                       ret &= ~STPMIC1_LDO3_MODE;
+                       ret &= ~STPMIC1_LDO12356_VOUT_MASK;
+                       ret |= STPMIC1_LDO_VOUT(STPMIC1_LDO3_DDR_SEL);
+
+                       ret = pmic_reg_write(dev, STPMIC1_LDOX_MAIN_CR(STPMIC1_LDO3),
+                                            ret);
+                       if (ret < 0)
+                               return ret;
+               }
 
                /* VDD_DDR = Set BUCK2 to 1.35V */
                ret = pmic_clrsetbits(dev,
@@ -69,11 +83,14 @@ int board_ddr_power_init(enum ddr_type ddr_type)
                mdelay(STPMIC1_DEFAULT_START_UP_DELAY_MS);
 
                /* Enable VTT = LDO3 */
-               ret = pmic_clrsetbits(dev,
-                                     STPMIC1_LDOX_MAIN_CR(STPMIC1_LDO3),
-                                     STPMIC1_LDO_ENA, STPMIC1_LDO_ENA);
-               if (ret < 0)
-                       return ret;
+               if (!is_mp13) {
+                       /* Enable VTT only on STM32MP15xx */
+                       ret = pmic_clrsetbits(dev,
+                                             STPMIC1_LDOX_MAIN_CR(STPMIC1_LDO3),
+                                             STPMIC1_LDO_ENA, STPMIC1_LDO_ENA);
+                       if (ret < 0)
+                               return ret;
+               }
 
                mdelay(STPMIC1_DEFAULT_START_UP_DELAY_MS);