[PATCH 04/10] ARM: stm32: Add STM32MP13xx PMIC initialization for DDR3 DRAM type

Marek Vasut marek.vasut at mailbox.org
Sun Jun 29 21:27:28 CEST 2025


On 6/3/25 4:00 PM, Patrick DELAUNAY wrote:

Hi,

>> diff --git a/board/st/common/stpmic1.c b/board/st/common/stpmic1.c
>> index 45c2bb5bcea..b46f89dacb9 100644
>> --- a/board/st/common/stpmic1.c
>> +++ b/board/st/common/stpmic1.c
>> @@ -14,8 +14,19 @@
>>   #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");
> 
> 
> return true;  ?
> 
> 
> no need to check compatible if U-Boot is compiled for STM32MP13x..

The compatible check is placed in here deliberately, in case U-Boot gets 
compiled with support for both MP15 and MP13 .

>> +}
>> +
>>   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);
> 
> 
> Support of VTT is not linked to SoC but to board design...
> 
> I think all this part should be reworked / based on TF-A binding

Sorry, no. TFA is not an authoritative source for DT bindings, so I 
don't want to add such bindings into U-Boot and support them for all 
eternity. Get those bindings upstream and then this can be reworked.

In the meantime, how do you propose VTT can be enabled/disabled per board ?


More information about the U-Boot mailing list