On 2021/5/13 5:47, ZHIZHIKIN Andrey wrote:
Hello Peng,

-----Original Message-----
From: U-Boot <u-boot-boun...@lists.denx.de> On Behalf Of Peng Fan (OSS)
Sent: Friday, March 19, 2021 8:57 AM
To: sba...@denx.de; feste...@gmail.com
Cc: u-boot@lists.denx.de; uboot-...@nxp.com; Ye Li <ye...@nxp.com>
Subject: [PATCH 03/26] imx8mm_evk: Switch to new imx8mm evk board

From: Ye Li <ye...@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...@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@0/bus@30800000/i2c@30a20000/pmic@4b} {
+&{/soc@0/bus@30800000/i2c@30a20000/pca9450@25} {
         u-boot,dm-spl;
  };

-&{/soc@0/bus@30800000/i2c@30a20000/pmic@4b/regulators} {
+&{/soc@0/bus@30800000/i2c@30a20000/pca9450@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@4b {
-               compatible = "rohm,bd71847";
-               reg = <0x4b>;
-               pinctrl-names = "default";
+       pmic: pca9450@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@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@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@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@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@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@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@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@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@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@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@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@4b", &dev);
+       ret = pmic_get("pca9450@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

Reply via email to