[PATCH 03/26] imx8mm_evk: Switch to new imx8mm evk board

Peng Fan (OSS) peng.fan at oss.nxp.com
Mon May 17 02:34:45 CEST 2021



On 2021/5/13 5:47, ZHIZHIKIN Andrey wrote:
> Hello Peng,
> 
>> -----Original Message-----
>> From: U-Boot <u-boot-bounces at lists.denx.de> On Behalf Of Peng Fan (OSS)
>> Sent: Friday, March 19, 2021 8:57 AM
>> To: sbabic at denx.de; festevam at gmail.com
>> Cc: u-boot at lists.denx.de; uboot-imx at nxp.com; Ye Li <ye.li at nxp.com>
>> Subject: [PATCH 03/26] imx8mm_evk: Switch to new imx8mm evk board
>>
>> From: Ye Li <ye.li at nxp.com>
>>
>> Update PMIC to use PCA9540, the legacy board not supported by NXP
> 
> This commit seems rather a "nuclear" to me, as de-facto it drops the initialization of ROMH PMIC in
> favor of PCA one, leaving all the previous board revisions not to be properly sourced.
> 
> I know that there might be no intention to provide a support for earlier revisions of i.MX8M Mini
> EVKs from NXP, but providing no backward compatibility to those boards which are still in use by
> a lot of people for development purposes is highly undesirable either.
> 
> TBH, I've tested this patch on the old EVK where ROMH PMIC is present, and apart from having some
> error messages in SPL regarding the register writes - it does boots. What worries me the most though
> is that DTS changes some voltage settings, which I'm not sure how the SOC would react on.
> 
> To my opinion, this patch should either be complemented with the mechanism to provide a
> level of backward compatibility (where the PMIC can be dynamically identified and instantiated),
> or the separate implementation should be presented which would make the old board type not to
> be bootable at all if it is considered not to be supported any longer. Or this patch should be reverted
> in an effort to come up with a solution which covers new revision without "damaging" the currently
> integrated one.

The old evk board was no longer supported by NXP, all new boards using 
new PMIC. No damage, just some default voltage settings different.

It is ok to add back the old pmic, but it finally will retire and no one 
will use it in production I think.

Regards,
Peng.

> 
> Fabio / Stefano,
> Do you have any thoughts here on how this should be handled further, considering the fact that the
> backward compatibility of 2021.07 release is not kept for this board type across multiple revisions?
> 
> I'd really like to get your opinion here as I do have those boards in development and would need to
> come up with the idea on what to do with them.
> 
> Also, this should be taken care of in the Yocto, since there is only one definition of the i.MX8MM EVK
> machine which does not make any distinction regarding the revision.
> 
> Thanks a lot!
> 
>>
>> Signed-off-by: Ye Li <ye.li at nxp.com>
>> ---
>>   arch/arm/dts/imx8mm-evk-u-boot.dtsi |   4 +-
>>   arch/arm/dts/imx8mm-evk.dtsi        | 127 +++++++++++++++-------------
>>   board/freescale/imx8mm_evk/spl.c    |  33 ++++----
>>   configs/imx8mm_evk_defconfig        |   2 +-
>>   4 files changed, 86 insertions(+), 80 deletions(-)
>>
>> diff --git a/arch/arm/dts/imx8mm-evk-u-boot.dtsi b/arch/arm/dts/imx8mm-evk-
>> u-boot.dtsi
>> index e843a5648e..7f48912b49 100644
>> --- a/arch/arm/dts/imx8mm-evk-u-boot.dtsi
>> +++ b/arch/arm/dts/imx8mm-evk-u-boot.dtsi
>> @@ -114,11 +114,11 @@
>>          u-boot,dm-spl;
>>   };
>>
>> -&{/soc at 0/bus at 30800000/i2c at 30a20000/pmic at 4b} {
>> +&{/soc at 0/bus at 30800000/i2c at 30a20000/pca9450 at 25} {
>>          u-boot,dm-spl;
>>   };
>>
>> -&{/soc at 0/bus at 30800000/i2c at 30a20000/pmic at 4b/regulators} {
>> +&{/soc at 0/bus at 30800000/i2c at 30a20000/pca9450 at 25/regulators} {
>>          u-boot,dm-spl;
>>   };
>>
>> diff --git a/arch/arm/dts/imx8mm-evk.dtsi b/arch/arm/dts/imx8mm-evk.dtsi
>> index 6518f088b2..60179e006d 100644
>> --- a/arch/arm/dts/imx8mm-evk.dtsi
>> +++ b/arch/arm/dts/imx8mm-evk.dtsi
>> @@ -126,115 +126,120 @@
>>          pinctrl-0 = <&pinctrl_i2c1>;
>>          status = "okay";
>>
>> -       pmic at 4b {
>> -               compatible = "rohm,bd71847";
>> -               reg = <0x4b>;
>> -               pinctrl-names = "default";
>> +       pmic: pca9450 at 25 {
>> +               reg = <0x25>;
>> +               compatible = "nxp,pca9450a";
>> +               /* PMIC PCA9450 PMIC_nINT GPIO1_IO3 */
>>                  pinctrl-0 = <&pinctrl_pmic>;
>> -               interrupt-parent = <&gpio1>;
>> -               interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
>> -               rohm,reset-snvs-powered;
>> -
>> -               #clock-cells = <0>;
>> -               clocks = <&osc_32k 0>;
>> -               clock-output-names = "clk-32k-out";
>> +               gpio_intr = <&gpio1 3 GPIO_ACTIVE_LOW>;
>>
>>                  regulators {
>> -                       buck1_reg: BUCK1 {
>> -                               regulator-name = "buck1";
>> -                               regulator-min-microvolt = <700000>;
>> -                               regulator-max-microvolt = <1300000>;
>> +                       #address-cells = <1>;
>> +                       #size-cells = <0>;
>> +
>> +                       pca9450,pmic-buck2-uses-i2c-dvs;
>> +                       /* Run/Standby voltage */
>> +                       pca9450,pmic-buck2-dvs-voltage = <950000>,
>> + <850000>;
>> +
>> +                       buck1_reg: regulator at 0 {
>> +                               reg = <0>;
>> +                               regulator-compatible = "buck1";
>> +                               regulator-min-microvolt = <600000>;
>> +                               regulator-max-microvolt = <2187500>;
>>                                  regulator-boot-on;
>>                                  regulator-always-on;
>> -                               regulator-ramp-delay = <1250>;
>> +                               regulator-ramp-delay = <3125>;
>>                          };
>>
>> -                       buck2_reg: BUCK2 {
>> -                               regulator-name = "buck2";
>> -                               regulator-min-microvolt = <700000>;
>> -                               regulator-max-microvolt = <1300000>;
>> +                       buck2_reg: regulator at 1 {
>> +                               reg = <1>;
>> +                               regulator-compatible = "buck2";
>> +                               regulator-min-microvolt = <600000>;
>> +                               regulator-max-microvolt = <2187500>;
>>                                  regulator-boot-on;
>>                                  regulator-always-on;
>> -                               regulator-ramp-delay = <1250>;
>> -                               rohm,dvs-run-voltage = <1000000>;
>> -                               rohm,dvs-idle-voltage = <900000>;
>> +                               regulator-ramp-delay = <3125>;
>>                          };
>>
>> -                       buck3_reg: BUCK3 {
>> -                               // BUCK5 in datasheet
>> -                               regulator-name = "buck3";
>> -                               regulator-min-microvolt = <700000>;
>> -                               regulator-max-microvolt = <1350000>;
>> +                       buck3_reg: regulator at 2 {
>> +                               reg = <2>;
>> +                               regulator-compatible = "buck3";
>> +                               regulator-min-microvolt = <600000>;
>> +                               regulator-max-microvolt = <2187500>;
>>                                  regulator-boot-on;
>>                                  regulator-always-on;
>>                          };
>>
>> -                       buck4_reg: BUCK4 {
>> -                               // BUCK6 in datasheet
>> -                               regulator-name = "buck4";
>> -                               regulator-min-microvolt = <3000000>;
>> -                               regulator-max-microvolt = <3300000>;
>> +                       buck4_reg: regulator at 3 {
>> +                               reg = <3>;
>> +                               regulator-compatible = "buck4";
>> +                               regulator-min-microvolt = <600000>;
>> +                               regulator-max-microvolt = <3400000>;
>>                                  regulator-boot-on;
>>                                  regulator-always-on;
>>                          };
>>
>> -                       buck5_reg: BUCK5 {
>> -                               // BUCK7 in datasheet
>> -                               regulator-name = "buck5";
>> -                               regulator-min-microvolt = <1605000>;
>> -                               regulator-max-microvolt = <1995000>;
>> +                       buck5_reg: regulator at 4 {
>> +                               reg = <4>;
>> +                               regulator-compatible = "buck5";
>> +                               regulator-min-microvolt = <600000>;
>> +                               regulator-max-microvolt = <3400000>;
>>                                  regulator-boot-on;
>>                                  regulator-always-on;
>>                          };
>>
>> -                       buck6_reg: BUCK6 {
>> -                               // BUCK8 in datasheet
>> -                               regulator-name = "buck6";
>> -                               regulator-min-microvolt = <800000>;
>> -                               regulator-max-microvolt = <1400000>;
>> +                       buck6_reg: regulator at 5 {
>> +                               reg = <5>;
>> +                               regulator-compatible = "buck6";
>> +                               regulator-min-microvolt = <600000>;
>> +                               regulator-max-microvolt = <3400000>;
>>                                  regulator-boot-on;
>>                                  regulator-always-on;
>>                          };
>>
>> -                       ldo1_reg: LDO1 {
>> -                               regulator-name = "ldo1";
>> +                       ldo1_reg: regulator at 6 {
>> +                               reg = <6>;
>> +                               regulator-compatible = "ldo1";
>>                                  regulator-min-microvolt = <1600000>;
>>                                  regulator-max-microvolt = <3300000>;
>>                                  regulator-boot-on;
>>                                  regulator-always-on;
>>                          };
>>
>> -                       ldo2_reg: LDO2 {
>> -                               regulator-name = "ldo2";
>> +                       ldo2_reg: regulator at 7 {
>> +                               reg = <7>;
>> +                               regulator-compatible = "ldo2";
>>                                  regulator-min-microvolt = <800000>;
>> -                               regulator-max-microvolt = <900000>;
>> +                               regulator-max-microvolt = <1150000>;
>>                                  regulator-boot-on;
>>                                  regulator-always-on;
>>                          };
>>
>> -                       ldo3_reg: LDO3 {
>> -                               regulator-name = "ldo3";
>> -                               regulator-min-microvolt = <1800000>;
>> +                       ldo3_reg: regulator at 8 {
>> +                               reg = <8>;
>> +                               regulator-compatible = "ldo3";
>> +                               regulator-min-microvolt = <800000>;
>>                                  regulator-max-microvolt = <3300000>;
>>                                  regulator-boot-on;
>>                                  regulator-always-on;
>>                          };
>>
>> -                       ldo4_reg: LDO4 {
>> -                               regulator-name = "ldo4";
>> -                               regulator-min-microvolt = <900000>;
>> -                               regulator-max-microvolt = <1800000>;
>> +                       ldo4_reg: regulator at 9 {
>> +                               reg = <9>;
>> +                               regulator-compatible = "ldo4";
>> +                               regulator-min-microvolt = <800000>;
>> +                               regulator-max-microvolt = <3300000>;
>>                                  regulator-boot-on;
>>                                  regulator-always-on;
>>                          };
>>
>> -                       ldo6_reg: LDO6 {
>> -                               regulator-name = "ldo6";
>> -                               regulator-min-microvolt = <900000>;
>> -                               regulator-max-microvolt = <1800000>;
>> -                               regulator-boot-on;
>> -                               regulator-always-on;
>> +                       ldo5_reg: regulator at 10 {
>> +                               reg = <10>;
>> +                               regulator-compatible = "ldo5";
>> +                               regulator-min-microvolt = <1800000>;
>> +                               regulator-max-microvolt = <3300000>;
>>                          };
>> +
>>                  };
>>          };
>>   };
>> diff --git a/board/freescale/imx8mm_evk/spl.c
>> b/board/freescale/imx8mm_evk/spl.c
>> index 64bc60651d..4ef7f6f180 100644
>> --- a/board/freescale/imx8mm_evk/spl.c
>> +++ b/board/freescale/imx8mm_evk/spl.c
>> @@ -26,7 +26,7 @@
>>   #include <dm/device-internal.h>
>>
>>   #include <power/pmic.h>
>> -#include <power/bd71837.h>
>> +#include <power/pca9450.h>
>>
>>   DECLARE_GLOBAL_DATA_PTR;
>>
>> @@ -94,7 +94,7 @@ static int power_init_board(void)
>>          struct udevice *dev;
>>          int ret;
>>
>> -       ret = pmic_get("pmic at 4b", &dev);
>> +       ret = pmic_get("pca9450 at 25", &dev);
>>          if (ret == -ENODEV) {
>>                  puts("No pmic\n");
>>                  return 0;
>> @@ -102,25 +102,26 @@ static int power_init_board(void)
>>          if (ret != 0)
>>                  return ret;
>>
>> -       /* decrease RESET key long push time from the default 10s to 10ms */
>> -       pmic_reg_write(dev, BD718XX_PWRONCONFIG1, 0x0);
>> +       /* BUCKxOUT_DVS0/1 control BUCK123 output */
>> +       pmic_reg_write(dev, PCA9450_BUCK123_DVS, 0x29);
>>
>> -       /* unlock the PMIC regs */
>> -       pmic_reg_write(dev, BD718XX_REGLOCK, 0x1);
>> +       /* Buck 1 DVS control through PMIC_STBY_REQ */
>> +       pmic_reg_write(dev, PCA9450_BUCK1CTRL, 0x59);
>>
>> -       /* increase VDD_SOC to typical value 0.85v before first DRAM access */
>> -       pmic_reg_write(dev, BD718XX_BUCK1_VOLT_RUN, 0x0f);
>> +       /* Set DVS1 to 0.8v for suspend */
>> +       pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS1, 0x10);
>>
>> -       /* increase VDD_DRAM to 0.975v for 3Ghz DDR */
>> -       pmic_reg_write(dev, BD718XX_1ST_NODVS_BUCK_VOLT, 0x83);
>> +       /* increase VDD_DRAM to 0.95v for 3Ghz DDR */
>> +       pmic_reg_write(dev, PCA9450_BUCK3OUT_DVS0, 0x1C);
>>
>> -#ifndef CONFIG_IMX8M_LPDDR4
>> -       /* increase NVCC_DRAM_1V2 to 1.2v for DDR4 */
>> -       pmic_reg_write(dev, BD718XX_4TH_NODVS_BUCK_VOLT, 0x28);
>> -#endif
>> +       /* VDD_DRAM needs off in suspend, set B1_ENMODE=10 (ON by
>> PMIC_ON_REQ = H && PMIC_STBY_REQ = L) */
>> +       pmic_reg_write(dev, PCA9450_BUCK3CTRL, 0x4a);
>> +
>> +       /* set VDD_SNVS_0V8 from default 0.85V */
>> +       pmic_reg_write(dev, PCA9450_LDO2CTRL, 0xC0);
>>
>> -       /* lock the PMIC regs */
>> -       pmic_reg_write(dev, BD718XX_REGLOCK, 0x11);
>> +       /* set WDOG_B_CFG to cold reset */
>> +       pmic_reg_write(dev, PCA9450_RESET_CTRL, 0xA1);
>>
>>          return 0;
>>   }
>> diff --git a/configs/imx8mm_evk_defconfig b/configs/imx8mm_evk_defconfig
>> index e22b7de56f..ae9e0626dd 100644
>> --- a/configs/imx8mm_evk_defconfig
>> +++ b/configs/imx8mm_evk_defconfig
>> @@ -83,7 +83,7 @@ CONFIG_PINCTRL=y
>>   CONFIG_SPL_PINCTRL=y
>>   CONFIG_PINCTRL_IMX8M=y
>>   CONFIG_DM_PMIC=y
>> -CONFIG_SPL_DM_PMIC_BD71837=y
>> +CONFIG_SPL_DM_PMIC_PCA9450=y
>>   CONFIG_DM_REGULATOR=y
>>   CONFIG_DM_REGULATOR_FIXED=y
>>   CONFIG_DM_REGULATOR_GPIO=y
>> --
>> 2.30.0
> 
> -- andrey
> 


More information about the U-Boot mailing list