mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH v2 1/1] ARM: i.MX8M: add PCA9450 PMIC on rev-b EVK
@ 2023-01-11 10:01 Johannes Schneider
  2023-01-11 10:01 ` [PATCH v2 1/1] ARM: i.MX8M: fix typo in function call Johannes Schneider
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Johannes Schneider @ 2023-01-11 10:01 UTC (permalink / raw)
  To: barebox; +Cc: Johannes Schneider

Configure and setup the PMIC found on rev-b EVKs.
The code is algiend with how imx8mn-evk handles both
PMIC variants: pca9450 vs bd71837

Signed-off-by: Johannes Schneider <johannes.schneider@leica-geosystems.com>
---
 arch/arm/boards/nxp-imx8mm-evk/lowlevel.c | 51 +++++++++++++++--------
 1 file changed, 34 insertions(+), 17 deletions(-)

diff --git a/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c b/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
index 6132df53ec..409554c2d5 100644
--- a/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
+++ b/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
@@ -16,6 +16,7 @@
 #include <mach/iomux-mx8mm.h>
 #include <mach/imx8m-ccm-regs.h>
 #include <mfd/bd71837.h>
+#include <mfd/pca9450.h>
 #include <mach/xload.h>
 #include <soc/imx8m/ddr.h>
 #include <image-metadata.h>
@@ -38,6 +39,25 @@ static void setup_uart(void)
 	putc_ll('>');
 }
 
+static struct pmic_config pca9450_cfg[] = {
+	/* BUCKxOUT_DVS0/1 control BUCK123 output */
+	{ PCA9450_BUCK123_DVS, 0x29 },
+	/*
+	 * increase VDD_SOC to typical value 0.95V before first
+	 * DRAM access, set DVS1 to 0.85v for suspend.
+	 * Enable DVS control through PMIC_STBY_REQ and
+	 * set B1_ENMODE=1 (ON by PMIC_ON_REQ=H)
+	 */
+	{ PCA9450_BUCK1OUT_DVS0, 0x1C },
+	/* Set DVS1 to 0.85v for suspend */
+	/* Enable DVS control through PMIC_STBY_REQ and set B1_ENMODE=1 (ON by PMIC_ON_REQ=H) */
+	{ PCA9450_BUCK1OUT_DVS1, 0x14 },
+	{ PCA9450_BUCK1CTRL, 0x59 },
+
+	/* set WDOG_B_CFG to cold reset */
+	{ PCA9450_RESET_CTRL, 0xA1 },
+};
+
 static struct pmic_config bd71837_cfg[] = {
 	/* decrease RESET key long push time from the default 10s to 10ms */
 	{ BD718XX_PWRONCONFIG1, 0x0 },
@@ -51,21 +71,6 @@ static struct pmic_config bd71837_cfg[] = {
 	{ BD718XX_REGLOCK, 0x11 },
 };
 
-static void power_init_board(void)
-{
-	struct pbl_i2c *i2c;
-
-	imx8mm_setup_pad(IMX8MM_PAD_I2C1_SCL_I2C1_SCL);
-	imx8mm_setup_pad(IMX8MM_PAD_I2C1_SDA_I2C1_SDA);
-
-	imx8mm_early_clock_init();
-	imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
-
-	i2c = imx8m_i2c_early_init(IOMEM(MX8MQ_I2C1_BASE_ADDR));
-
-	pmic_configure(i2c, 0x4b, bd71837_cfg, ARRAY_SIZE(bd71837_cfg));
-}
-
 extern struct dram_timing_info imx8mm_evk_dram_timing;
 
 static void start_atf(void)
@@ -78,8 +83,20 @@ static void start_atf(void)
 	if (current_el() != 3)
 		return;
 
-	power_init_board();
-	imx8mm_ddr_init(&imx8mm_evk_dram_timing, DRAM_TYPE_LPDDR4);
+	imx8mm_setup_pad(IMX8MM_PAD_I2C1_SCL_I2C1_SCL);
+	imx8mm_setup_pad(IMX8MM_PAD_I2C1_SDA_I2C1_SDA);
+
+	imx8mm_early_clock_init();
+	imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
+
+	i2c = imx8m_i2c_early_init(IOMEM(MX8MM_I2C1_BASE_ADDR));
+
+	imx8mm_ddr_init(&imx8mm_evk_lpddr4_timing, DRAM_TYPE_LPDDR4);
+	if (i2c_dev_probe(i2c, 0x25, true) == 0) {
+		pmic_configure(i2c, 0x25, pca9450_cfg, ARRAY_SIZE(pca9450_cfg));
+	} else {
+		pmic_configure(i2c, 0x4b, bd71837_cfg, ARRAY_SIZE(bd71837_cfg));
+	}
 
 	imx8mm_load_and_start_image_via_tfa();
 }
-- 
2.25.1




^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v2 1/1] ARM: i.MX8M: fix typo in function call
  2023-01-11 10:01 [PATCH v2 1/1] ARM: i.MX8M: add PCA9450 PMIC on rev-b EVK Johannes Schneider
@ 2023-01-11 10:01 ` Johannes Schneider
  2023-01-11 10:20   ` Ahmad Fatoum
  2023-01-11 10:01 ` [PATCH v2 1/1] ARM: i.MX8M: smccc: fix firmware_atf check Johannes Schneider
  2023-01-11 10:17 ` [PATCH v2 1/1] ARM: i.MX8M: add PCA9450 PMIC on rev-b EVK Ahmad Fatoum
  2 siblings, 1 reply; 9+ messages in thread
From: Johannes Schneider @ 2023-01-11 10:01 UTC (permalink / raw)
  To: barebox; +Cc: Johannes Schneider

Signed-off-by: Johannes Schneider <johannes.schneider@leica-geosystems.com>
---
 arch/arm/boards/nxp-imx8mp-evk/lowlevel.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/boards/nxp-imx8mp-evk/lowlevel.c b/arch/arm/boards/nxp-imx8mp-evk/lowlevel.c
index 4f24dd4cd4..3cb24df1ca 100644
--- a/arch/arm/boards/nxp-imx8mp-evk/lowlevel.c
+++ b/arch/arm/boards/nxp-imx8mp-evk/lowlevel.c
@@ -72,7 +72,7 @@ static void power_init_board(void)
 	imx8mp_setup_pad(MX8MP_PAD_I2C1_SCL__I2C1_SCL | I2C_PAD_CTRL);
 	imx8mp_setup_pad(MX8MP_PAD_I2C1_SDA__I2C1_SDA | I2C_PAD_CTRL);
 
-	imx8mm_early_clock_init();
+	imx8mp_early_clock_init();
 	imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
 
 	i2c = imx8m_i2c_early_init(IOMEM(MX8MP_I2C1_BASE_ADDR));
-- 
2.25.1




^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v2 1/1] ARM: i.MX8M: smccc: fix firmware_atf check
  2023-01-11 10:01 [PATCH v2 1/1] ARM: i.MX8M: add PCA9450 PMIC on rev-b EVK Johannes Schneider
  2023-01-11 10:01 ` [PATCH v2 1/1] ARM: i.MX8M: fix typo in function call Johannes Schneider
@ 2023-01-11 10:01 ` Johannes Schneider
  2023-01-11 10:21   ` Ahmad Fatoum
  2023-01-11 10:17 ` [PATCH v2 1/1] ARM: i.MX8M: add PCA9450 PMIC on rev-b EVK Ahmad Fatoum
  2 siblings, 1 reply; 9+ messages in thread
From: Johannes Schneider @ 2023-01-11 10:01 UTC (permalink / raw)
  To: barebox; +Cc: Johannes Schneider

Replace the config-switch check with a check for the current execution
level.

Signed-off-by: Johannes Schneider <johannes.schneider@leica-geosystems.com>
---
 arch/arm/mach-imx/imx8m.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/mach-imx/imx8m.c b/arch/arm/mach-imx/imx8m.c
index 9758525b54..bb2733f2ab 100644
--- a/arch/arm/mach-imx/imx8m.c
+++ b/arch/arm/mach-imx/imx8m.c
@@ -61,7 +61,7 @@ static int imx8m_init(const char *cputypestr)
 	pr_info("%s unique ID: %llx\n", cputypestr, imx8m_uid());
 
 	if (IS_ENABLED(CONFIG_ARM_SMCCC) &&
-	    IS_ENABLED(CONFIG_FIRMWARE_IMX8MQ_ATF)) {
+	    (current_el() == 2)) {
 		arm_smccc_smc(IMX_SIP_BUILDINFO,
 			      IMX_SIP_BUILDINFO_GET_COMMITHASH,
 			      0, 0, 0, 0, 0, 0, &res);
-- 
2.25.1




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 1/1] ARM: i.MX8M: add PCA9450 PMIC on rev-b EVK
  2023-01-11 10:01 [PATCH v2 1/1] ARM: i.MX8M: add PCA9450 PMIC on rev-b EVK Johannes Schneider
  2023-01-11 10:01 ` [PATCH v2 1/1] ARM: i.MX8M: fix typo in function call Johannes Schneider
  2023-01-11 10:01 ` [PATCH v2 1/1] ARM: i.MX8M: smccc: fix firmware_atf check Johannes Schneider
@ 2023-01-11 10:17 ` Ahmad Fatoum
  2023-01-11 10:26   ` Ahmad Fatoum
  2023-01-19  8:59   ` Marco Felsch
  2 siblings, 2 replies; 9+ messages in thread
From: Ahmad Fatoum @ 2023-01-11 10:17 UTC (permalink / raw)
  To: Johannes Schneider, barebox

Hi,

How do you generate your patches? Easiest is:

  git config sendemail.to barebox@lists.infradead.org
  git send-email -3 --annotate

This will take care to number the patches correctly.

On 11.01.23 11:01, Johannes Schneider wrote:
> Configure and setup the PMIC found on rev-b EVKs.
> The code is algiend with how imx8mn-evk handles both

aligned*

> PMIC variants: pca9450 vs bd71837

Please note which Boards you tested this on.

> 
> Signed-off-by: Johannes Schneider <johannes.schneider@leica-geosystems.com>
> ---
>  arch/arm/boards/nxp-imx8mm-evk/lowlevel.c | 51 +++++++++++++++--------
>  1 file changed, 34 insertions(+), 17 deletions(-)
> 
> diff --git a/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c b/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
> index 6132df53ec..409554c2d5 100644
> --- a/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
> +++ b/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
> @@ -16,6 +16,7 @@
>  #include <mach/iomux-mx8mm.h>
>  #include <mach/imx8m-ccm-regs.h>
>  #include <mfd/bd71837.h>
> +#include <mfd/pca9450.h>
>  #include <mach/xload.h>
>  #include <soc/imx8m/ddr.h>
>  #include <image-metadata.h>
> @@ -38,6 +39,25 @@ static void setup_uart(void)
>  	putc_ll('>');
>  }
>  
> +static struct pmic_config pca9450_cfg[] = {
> +	/* BUCKxOUT_DVS0/1 control BUCK123 output */
> +	{ PCA9450_BUCK123_DVS, 0x29 },
> +	/*
> +	 * increase VDD_SOC to typical value 0.95V before first
> +	 * DRAM access, set DVS1 to 0.85v for suspend.
> +	 * Enable DVS control through PMIC_STBY_REQ and
> +	 * set B1_ENMODE=1 (ON by PMIC_ON_REQ=H)
> +	 */
> +	{ PCA9450_BUCK1OUT_DVS0, 0x1C },
> +	/* Set DVS1 to 0.85v for suspend */
> +	/* Enable DVS control through PMIC_STBY_REQ and set B1_ENMODE=1 (ON by PMIC_ON_REQ=H) */
> +	{ PCA9450_BUCK1OUT_DVS1, 0x14 },
> +	{ PCA9450_BUCK1CTRL, 0x59 },
> +
> +	/* set WDOG_B_CFG to cold reset */
> +	{ PCA9450_RESET_CTRL, 0xA1 },
> +};
> +
>  static struct pmic_config bd71837_cfg[] = {
>  	/* decrease RESET key long push time from the default 10s to 10ms */
>  	{ BD718XX_PWRONCONFIG1, 0x0 },
> @@ -51,21 +71,6 @@ static struct pmic_config bd71837_cfg[] = {
>  	{ BD718XX_REGLOCK, 0x11 },
>  };
>  
> -static void power_init_board(void)
> -{

Can you leave this function as-is? This will make the diff more
readable.

> -	struct pbl_i2c *i2c;
> -
> -	imx8mm_setup_pad(IMX8MM_PAD_I2C1_SCL_I2C1_SCL);
> -	imx8mm_setup_pad(IMX8MM_PAD_I2C1_SDA_I2C1_SDA);
> -
> -	imx8mm_early_clock_init();
> -	imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
> -
> -	i2c = imx8m_i2c_early_init(IOMEM(MX8MQ_I2C1_BASE_ADDR));
> -
> -	pmic_configure(i2c, 0x4b, bd71837_cfg, ARRAY_SIZE(bd71837_cfg));
> -}
> -
>  extern struct dram_timing_info imx8mm_evk_dram_timing;
>  
>  static void start_atf(void)
> @@ -78,8 +83,20 @@ static void start_atf(void)
>  	if (current_el() != 3)
>  		return;
>  
> -	power_init_board();
> -	imx8mm_ddr_init(&imx8mm_evk_dram_timing, DRAM_TYPE_LPDDR4);
> +	imx8mm_setup_pad(IMX8MM_PAD_I2C1_SCL_I2C1_SCL);
> +	imx8mm_setup_pad(IMX8MM_PAD_I2C1_SDA_I2C1_SDA);
> +
> +	imx8mm_early_clock_init();
> +	imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
> +
> +	i2c = imx8m_i2c_early_init(IOMEM(MX8MM_I2C1_BASE_ADDR));
> +
> +	imx8mm_ddr_init(&imx8mm_evk_lpddr4_timing, DRAM_TYPE_LPDDR4);
> +	if (i2c_dev_probe(i2c, 0x25, true) == 0) {
> +		pmic_configure(i2c, 0x25, pca9450_cfg, ARRAY_SIZE(pca9450_cfg));
> +	} else {
> +		pmic_configure(i2c, 0x4b, bd71837_cfg, ARRAY_SIZE(bd71837_cfg));
> +	}

Nitpick: You can drop the braces (Kernel coding style).

>  
>  	imx8mm_load_and_start_image_via_tfa();
>  }

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 1/1] ARM: i.MX8M: fix typo in function call
  2023-01-11 10:01 ` [PATCH v2 1/1] ARM: i.MX8M: fix typo in function call Johannes Schneider
@ 2023-01-11 10:20   ` Ahmad Fatoum
  0 siblings, 0 replies; 9+ messages in thread
From: Ahmad Fatoum @ 2023-01-11 10:20 UTC (permalink / raw)
  To: Johannes Schneider, barebox

On 11.01.23 11:01, Johannes Schneider wrote:
> Signed-off-by: Johannes Schneider <johannes.schneider@leica-geosystems.com>

Please add commit messages. Even for seemingly trivial changes, there
is always something that can be explained, e.g.

"While both functions are equivalent, it looks out-of-place to use
 the imx8mm_ variant in an i.MX8MN board's code and in future we may
 elect to configure clocking differently on the i.MX8MP."

Which brings us to:

> -	imx8mm_early_clock_init();
> +	imx8mp_early_clock_init();

Did you compile-test this? There's no imx8mp_early_clock_init defined..

>  	imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
>  
>  	i2c = imx8m_i2c_early_init(IOMEM(MX8MP_I2C1_BASE_ADDR));

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 1/1] ARM: i.MX8M: smccc: fix firmware_atf check
  2023-01-11 10:01 ` [PATCH v2 1/1] ARM: i.MX8M: smccc: fix firmware_atf check Johannes Schneider
@ 2023-01-11 10:21   ` Ahmad Fatoum
  0 siblings, 0 replies; 9+ messages in thread
From: Ahmad Fatoum @ 2023-01-11 10:21 UTC (permalink / raw)
  To: Johannes Schneider, barebox

On 11.01.23 11:01, Johannes Schneider wrote:
> Replace the config-switch check with a check for the current execution
> level.

Please describe your reasoning behind changes (e.g. IMX8MQ_ATF may be
deselected when building solely non-MQ boards). It's not evident otherwise,
why this is a fix.

> 
> Signed-off-by: Johannes Schneider <johannes.schneider@leica-geosystems.com>
> ---
>  arch/arm/mach-imx/imx8m.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/arm/mach-imx/imx8m.c b/arch/arm/mach-imx/imx8m.c
> index 9758525b54..bb2733f2ab 100644
> --- a/arch/arm/mach-imx/imx8m.c
> +++ b/arch/arm/mach-imx/imx8m.c
> @@ -61,7 +61,7 @@ static int imx8m_init(const char *cputypestr)
>  	pr_info("%s unique ID: %llx\n", cputypestr, imx8m_uid());
>  
>  	if (IS_ENABLED(CONFIG_ARM_SMCCC) &&
> -	    IS_ENABLED(CONFIG_FIRMWARE_IMX8MQ_ATF)) {
> +	    (current_el() == 2)) {
>  		arm_smccc_smc(IMX_SIP_BUILDINFO,
>  			      IMX_SIP_BUILDINFO_GET_COMMITHASH,
>  			      0, 0, 0, 0, 0, 0, &res);

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 1/1] ARM: i.MX8M: add PCA9450 PMIC on rev-b EVK
  2023-01-11 10:17 ` [PATCH v2 1/1] ARM: i.MX8M: add PCA9450 PMIC on rev-b EVK Ahmad Fatoum
@ 2023-01-11 10:26   ` Ahmad Fatoum
  2023-01-19  8:59   ` Marco Felsch
  1 sibling, 0 replies; 9+ messages in thread
From: Ahmad Fatoum @ 2023-01-11 10:26 UTC (permalink / raw)
  To: Johannes Schneider, barebox

On 11.01.23 11:17, Ahmad Fatoum wrote:
> Hi,
> 
> How do you generate your patches? Easiest is:
> 
>   git config sendemail.to barebox@lists.infradead.org
>   git send-email -3 --annotate
> 
> This will take care to number the patches correctly.
> 
> On 11.01.23 11:01, Johannes Schneider wrote:
>> Configure and setup the PMIC found on rev-b EVKs.
>> The code is algiend with how imx8mn-evk handles both
> 
> aligned*
> 
>> PMIC variants: pca9450 vs bd71837
> 
> Please note which Boards you tested this on.

Also be aware that while you now do correct PMIC setup in PBL, you still
unconditionally use a DT with only Rohm PMIC. Given that you now have
a kernel DT for evkb. Can you add it to arch/arm/dts, enable it in the
Makefile and choose one or the other DT in PBL like i.MX8MN does?

Don't forget to add fsl,imx8mm-evkb to the match list in the board.c file.

>> Signed-off-by: Johannes Schneider <johannes.schneider@leica-geosystems.com>
>> ---
>>  arch/arm/boards/nxp-imx8mm-evk/lowlevel.c | 51 +++++++++++++++--------
>>  1 file changed, 34 insertions(+), 17 deletions(-)
>>
>> diff --git a/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c b/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
>> index 6132df53ec..409554c2d5 100644
>> --- a/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
>> +++ b/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
>> @@ -16,6 +16,7 @@
>>  #include <mach/iomux-mx8mm.h>
>>  #include <mach/imx8m-ccm-regs.h>
>>  #include <mfd/bd71837.h>
>> +#include <mfd/pca9450.h>
>>  #include <mach/xload.h>
>>  #include <soc/imx8m/ddr.h>
>>  #include <image-metadata.h>
>> @@ -38,6 +39,25 @@ static void setup_uart(void)
>>  	putc_ll('>');
>>  }
>>  
>> +static struct pmic_config pca9450_cfg[] = {
>> +	/* BUCKxOUT_DVS0/1 control BUCK123 output */
>> +	{ PCA9450_BUCK123_DVS, 0x29 },
>> +	/*
>> +	 * increase VDD_SOC to typical value 0.95V before first
>> +	 * DRAM access, set DVS1 to 0.85v for suspend.
>> +	 * Enable DVS control through PMIC_STBY_REQ and
>> +	 * set B1_ENMODE=1 (ON by PMIC_ON_REQ=H)
>> +	 */
>> +	{ PCA9450_BUCK1OUT_DVS0, 0x1C },
>> +	/* Set DVS1 to 0.85v for suspend */
>> +	/* Enable DVS control through PMIC_STBY_REQ and set B1_ENMODE=1 (ON by PMIC_ON_REQ=H) */
>> +	{ PCA9450_BUCK1OUT_DVS1, 0x14 },
>> +	{ PCA9450_BUCK1CTRL, 0x59 },
>> +
>> +	/* set WDOG_B_CFG to cold reset */
>> +	{ PCA9450_RESET_CTRL, 0xA1 },
>> +};
>> +
>>  static struct pmic_config bd71837_cfg[] = {
>>  	/* decrease RESET key long push time from the default 10s to 10ms */
>>  	{ BD718XX_PWRONCONFIG1, 0x0 },
>> @@ -51,21 +71,6 @@ static struct pmic_config bd71837_cfg[] = {
>>  	{ BD718XX_REGLOCK, 0x11 },
>>  };
>>  
>> -static void power_init_board(void)
>> -{
> 
> Can you leave this function as-is? This will make the diff more
> readable.
> 
>> -	struct pbl_i2c *i2c;
>> -
>> -	imx8mm_setup_pad(IMX8MM_PAD_I2C1_SCL_I2C1_SCL);
>> -	imx8mm_setup_pad(IMX8MM_PAD_I2C1_SDA_I2C1_SDA);
>> -
>> -	imx8mm_early_clock_init();
>> -	imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
>> -
>> -	i2c = imx8m_i2c_early_init(IOMEM(MX8MQ_I2C1_BASE_ADDR));
>> -
>> -	pmic_configure(i2c, 0x4b, bd71837_cfg, ARRAY_SIZE(bd71837_cfg));
>> -}
>> -
>>  extern struct dram_timing_info imx8mm_evk_dram_timing;
>>  
>>  static void start_atf(void)
>> @@ -78,8 +83,20 @@ static void start_atf(void)
>>  	if (current_el() != 3)
>>  		return;
>>  
>> -	power_init_board();
>> -	imx8mm_ddr_init(&imx8mm_evk_dram_timing, DRAM_TYPE_LPDDR4);
>> +	imx8mm_setup_pad(IMX8MM_PAD_I2C1_SCL_I2C1_SCL);
>> +	imx8mm_setup_pad(IMX8MM_PAD_I2C1_SDA_I2C1_SDA);
>> +
>> +	imx8mm_early_clock_init();
>> +	imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
>> +
>> +	i2c = imx8m_i2c_early_init(IOMEM(MX8MM_I2C1_BASE_ADDR));
>> +
>> +	imx8mm_ddr_init(&imx8mm_evk_lpddr4_timing, DRAM_TYPE_LPDDR4);
>> +	if (i2c_dev_probe(i2c, 0x25, true) == 0) {
>> +		pmic_configure(i2c, 0x25, pca9450_cfg, ARRAY_SIZE(pca9450_cfg));
>> +	} else {
>> +		pmic_configure(i2c, 0x4b, bd71837_cfg, ARRAY_SIZE(bd71837_cfg));
>> +	}
> 
> Nitpick: You can drop the braces (Kernel coding style).
> 
>>  
>>  	imx8mm_load_and_start_image_via_tfa();
>>  }
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |




^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 1/1] ARM: i.MX8M: add PCA9450 PMIC on rev-b EVK
  2023-01-11 10:17 ` [PATCH v2 1/1] ARM: i.MX8M: add PCA9450 PMIC on rev-b EVK Ahmad Fatoum
  2023-01-11 10:26   ` Ahmad Fatoum
@ 2023-01-19  8:59   ` Marco Felsch
  2023-01-23  6:07     ` SCHNEIDER Johannes
  1 sibling, 1 reply; 9+ messages in thread
From: Marco Felsch @ 2023-01-19  8:59 UTC (permalink / raw)
  To: Ahmad Fatoum; +Cc: Johannes Schneider, barebox

On 23-01-11, Ahmad Fatoum wrote:
> Hi,
> 
> How do you generate your patches? Easiest is:
> 
>   git config sendemail.to barebox@lists.infradead.org
>   git send-email -3 --annotate
> 
> This will take care to number the patches correctly.
> 
> On 11.01.23 11:01, Johannes Schneider wrote:
> > Configure and setup the PMIC found on rev-b EVKs.
> > The code is algiend with how imx8mn-evk handles both
> 
> aligned*
> 
> > PMIC variants: pca9450 vs bd71837
> 
> Please note which Boards you tested this on.
> 
> > 
> > Signed-off-by: Johannes Schneider <johannes.schneider@leica-geosystems.com>
> > ---
> >  arch/arm/boards/nxp-imx8mm-evk/lowlevel.c | 51 +++++++++++++++--------
> >  1 file changed, 34 insertions(+), 17 deletions(-)
> > 
> > diff --git a/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c b/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
> > index 6132df53ec..409554c2d5 100644
> > --- a/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
> > +++ b/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
> > @@ -16,6 +16,7 @@
> >  #include <mach/iomux-mx8mm.h>
> >  #include <mach/imx8m-ccm-regs.h>
> >  #include <mfd/bd71837.h>
> > +#include <mfd/pca9450.h>
> >  #include <mach/xload.h>
> >  #include <soc/imx8m/ddr.h>
> >  #include <image-metadata.h>
> > @@ -38,6 +39,25 @@ static void setup_uart(void)
> >  	putc_ll('>');
> >  }
> >  
> > +static struct pmic_config pca9450_cfg[] = {
> > +	/* BUCKxOUT_DVS0/1 control BUCK123 output */
> > +	{ PCA9450_BUCK123_DVS, 0x29 },
> > +	/*
> > +	 * increase VDD_SOC to typical value 0.95V before first
> > +	 * DRAM access, set DVS1 to 0.85v for suspend.
> > +	 * Enable DVS control through PMIC_STBY_REQ and
> > +	 * set B1_ENMODE=1 (ON by PMIC_ON_REQ=H)
> > +	 */
> > +	{ PCA9450_BUCK1OUT_DVS0, 0x1C },
> > +	/* Set DVS1 to 0.85v for suspend */
> > +	/* Enable DVS control through PMIC_STBY_REQ and set B1_ENMODE=1 (ON by PMIC_ON_REQ=H) */
> > +	{ PCA9450_BUCK1OUT_DVS1, 0x14 },
> > +	{ PCA9450_BUCK1CTRL, 0x59 },
> > +
> > +	/* set WDOG_B_CFG to cold reset */
> > +	{ PCA9450_RESET_CTRL, 0xA1 },
> > +};

While picking this patch I noticed that you're configuring the PMIC
differently compared to upstream u-boot. What is the reason for this?

Regards,
  Marco

> > +
> >  static struct pmic_config bd71837_cfg[] = {
> >  	/* decrease RESET key long push time from the default 10s to 10ms */
> >  	{ BD718XX_PWRONCONFIG1, 0x0 },
> > @@ -51,21 +71,6 @@ static struct pmic_config bd71837_cfg[] = {
> >  	{ BD718XX_REGLOCK, 0x11 },
> >  };
> >  
> > -static void power_init_board(void)
> > -{
> 
> Can you leave this function as-is? This will make the diff more
> readable.
> 
> > -	struct pbl_i2c *i2c;
> > -
> > -	imx8mm_setup_pad(IMX8MM_PAD_I2C1_SCL_I2C1_SCL);
> > -	imx8mm_setup_pad(IMX8MM_PAD_I2C1_SDA_I2C1_SDA);
> > -
> > -	imx8mm_early_clock_init();
> > -	imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
> > -
> > -	i2c = imx8m_i2c_early_init(IOMEM(MX8MQ_I2C1_BASE_ADDR));
> > -
> > -	pmic_configure(i2c, 0x4b, bd71837_cfg, ARRAY_SIZE(bd71837_cfg));
> > -}
> > -
> >  extern struct dram_timing_info imx8mm_evk_dram_timing;
> >  
> >  static void start_atf(void)
> > @@ -78,8 +83,20 @@ static void start_atf(void)
> >  	if (current_el() != 3)
> >  		return;
> >  
> > -	power_init_board();
> > -	imx8mm_ddr_init(&imx8mm_evk_dram_timing, DRAM_TYPE_LPDDR4);
> > +	imx8mm_setup_pad(IMX8MM_PAD_I2C1_SCL_I2C1_SCL);
> > +	imx8mm_setup_pad(IMX8MM_PAD_I2C1_SDA_I2C1_SDA);
> > +
> > +	imx8mm_early_clock_init();
> > +	imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
> > +
> > +	i2c = imx8m_i2c_early_init(IOMEM(MX8MM_I2C1_BASE_ADDR));
> > +
> > +	imx8mm_ddr_init(&imx8mm_evk_lpddr4_timing, DRAM_TYPE_LPDDR4);
> > +	if (i2c_dev_probe(i2c, 0x25, true) == 0) {
> > +		pmic_configure(i2c, 0x25, pca9450_cfg, ARRAY_SIZE(pca9450_cfg));
> > +	} else {
> > +		pmic_configure(i2c, 0x4b, bd71837_cfg, ARRAY_SIZE(bd71837_cfg));
> > +	}
> 
> Nitpick: You can drop the braces (Kernel coding style).
> 
> >  
> >  	imx8mm_load_and_start_image_via_tfa();
> >  }
> 
> -- 
> Pengutronix e.K.                           |                             |
> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> 
> 
> 



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2 1/1] ARM: i.MX8M: add PCA9450 PMIC on rev-b EVK
  2023-01-19  8:59   ` Marco Felsch
@ 2023-01-23  6:07     ` SCHNEIDER Johannes
  0 siblings, 0 replies; 9+ messages in thread
From: SCHNEIDER Johannes @ 2023-01-23  6:07 UTC (permalink / raw)
  To: Marco Felsch, Ahmad Fatoum; +Cc: barebox

Hoi

> > Hi,
> >
> > How do you generate your patches? Easiest is:
> >
> >   git config sendemail.to barebox@lists.infradead.org
> >   git send-email -3 --annotate
> >
> > This will take care to number the patches correctly.
> >
> > On 11.01.23 11:01, Johannes Schneider wrote:
> > > Configure and setup the PMIC found on rev-b EVKs.
> > > The code is algiend with how imx8mn-evk handles both
> >
> > aligned*
> >
> > > PMIC variants: pca9450 vs bd71837
> >
> > Please note which Boards you tested this on.
> >
> > >
> > > Signed-off-by: Johannes Schneider <johannes.schneider@leica-geosystems.com>
> > > ---
> > >  arch/arm/boards/nxp-imx8mm-evk/lowlevel.c | 51 +++++++++++++++--------
> > >  1 file changed, 34 insertions(+), 17 deletions(-)
> > >
> > > diff --git a/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c b/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
> > > index 6132df53ec..409554c2d5 100644
> > > --- a/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
> > > +++ b/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
> > > @@ -16,6 +16,7 @@
> > >  #include <mach/iomux-mx8mm.h>
> > >  #include <mach/imx8m-ccm-regs.h>
> > >  #include <mfd/bd71837.h>
> > > +#include <mfd/pca9450.h>
> > >  #include <mach/xload.h>
> > >  #include <soc/imx8m/ddr.h>
> > >  #include <image-metadata.h>
> > > @@ -38,6 +39,25 @@ static void setup_uart(void)
> > >     putc_ll('>');
> > >  }
> > >
> > > +static struct pmic_config pca9450_cfg[] = {
> > > +   /* BUCKxOUT_DVS0/1 control BUCK123 output */
> > > +   { PCA9450_BUCK123_DVS, 0x29 },
> > > +   /*
> > > +    * increase VDD_SOC to typical value 0.95V before first
> > > +    * DRAM access, set DVS1 to 0.85v for suspend.
> > > +    * Enable DVS control through PMIC_STBY_REQ and
> > > +    * set B1_ENMODE=1 (ON by PMIC_ON_REQ=H)
> > > +    */
> > > +   { PCA9450_BUCK1OUT_DVS0, 0x1C },
> > > +   /* Set DVS1 to 0.85v for suspend */
> > > +   /* Enable DVS control through PMIC_STBY_REQ and set B1_ENMODE=1 (ON by PMIC_ON_REQ=H) */
> > > +   { PCA9450_BUCK1OUT_DVS1, 0x14 },
> > > +   { PCA9450_BUCK1CTRL, 0x59 },
> > > +
> > > +   /* set WDOG_B_CFG to cold reset */
> > > +   { PCA9450_RESET_CTRL, 0xA1 },
> > > +};
>
> While picking this patch I noticed that you're configuring the PMIC
> differently compared to upstream u-boot. What is the reason for this?
>
> Regards,
>   Marco
>

very observant, the init sequence matches the 8mp and 8mn already in barebox.
uboot 8mn and barebox 8mn differ too

as far as i can see the "only" differences are related to standby?
PCA9450_BUCK1OUT_DVS1 0x10  vs  0x1c

on our project hardware the settings seemed to work fine - but standby was not tested :-s

-> should i "blindly" adopt the upstream u-boot settings?
or is it preferable to keep all three boards (mp, mn and now mm) the same?


> > > +
> > >  static struct pmic_config bd71837_cfg[] = {
> > >     /* decrease RESET key long push time from the default 10s to 10ms */
> > >     { BD718XX_PWRONCONFIG1, 0x0 },
> > > @@ -51,21 +71,6 @@ static struct pmic_config bd71837_cfg[] = {
> > >     { BD718XX_REGLOCK, 0x11 },
> > >  };
> > >
> > > -static void power_init_board(void)
> > > -{
> >
> > Can you leave this function as-is? This will make the diff more
> > readable.
> >
> > > -   struct pbl_i2c *i2c;
> > > -
> > > -   imx8mm_setup_pad(IMX8MM_PAD_I2C1_SCL_I2C1_SCL);
> > > -   imx8mm_setup_pad(IMX8MM_PAD_I2C1_SDA_I2C1_SDA);
> > > -
> > > -   imx8mm_early_clock_init();
> > > -   imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
> > > -
> > > -   i2c = imx8m_i2c_early_init(IOMEM(MX8MQ_I2C1_BASE_ADDR));
> > > -
> > > -   pmic_configure(i2c, 0x4b, bd71837_cfg, ARRAY_SIZE(bd71837_cfg));
> > > -}
> > > -
> > >  extern struct dram_timing_info imx8mm_evk_dram_timing;
> > >
> > >  static void start_atf(void)
> > > @@ -78,8 +83,20 @@ static void start_atf(void)
> > >     if (current_el() != 3)
> > >             return;
> > >
> > > -   power_init_board();
> > > -   imx8mm_ddr_init(&imx8mm_evk_dram_timing, DRAM_TYPE_LPDDR4);
> > > +   imx8mm_setup_pad(IMX8MM_PAD_I2C1_SCL_I2C1_SCL);
> > > +   imx8mm_setup_pad(IMX8MM_PAD_I2C1_SDA_I2C1_SDA);
> > > +
> > > +   imx8mm_early_clock_init();
> > > +   imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
> > > +
> > > +   i2c = imx8m_i2c_early_init(IOMEM(MX8MM_I2C1_BASE_ADDR));
> > > +
> > > +   imx8mm_ddr_init(&imx8mm_evk_lpddr4_timing, DRAM_TYPE_LPDDR4);
> > > +   if (i2c_dev_probe(i2c, 0x25, true) == 0) {
> > > +           pmic_configure(i2c, 0x25, pca9450_cfg, ARRAY_SIZE(pca9450_cfg));
> > > +   } else {
> > > +           pmic_configure(i2c, 0x4b, bd71837_cfg, ARRAY_SIZE(bd71837_cfg));
> > > +   }
> >
> > Nitpick: You can drop the braces (Kernel coding style).
> >
> > >
> > >     imx8mm_load_and_start_image_via_tfa();
> > >  }
> >

gruß
Johannes

________________________________________
From: Marco Felsch <m.felsch@pengutronix.de>
Sent: Thursday, January 19, 2023 09:59
To: Ahmad Fatoum
Cc: SCHNEIDER Johannes; barebox@lists.infradead.org
Subject: Re: [PATCH v2 1/1] ARM: i.MX8M: add PCA9450 PMIC on rev-b EVK

This email is not from Hexagon’s Office 365 instance. Please be careful while clicking links, opening attachments, or replying to this email.


On 23-01-11, Ahmad Fatoum wrote:
> Hi,
>
> How do you generate your patches? Easiest is:
>
>   git config sendemail.to barebox@lists.infradead.org
>   git send-email -3 --annotate
>
> This will take care to number the patches correctly.
>
> On 11.01.23 11:01, Johannes Schneider wrote:
> > Configure and setup the PMIC found on rev-b EVKs.
> > The code is algiend with how imx8mn-evk handles both
>
> aligned*
>
> > PMIC variants: pca9450 vs bd71837
>
> Please note which Boards you tested this on.
>
> >
> > Signed-off-by: Johannes Schneider <johannes.schneider@leica-geosystems.com>
> > ---
> >  arch/arm/boards/nxp-imx8mm-evk/lowlevel.c | 51 +++++++++++++++--------
> >  1 file changed, 34 insertions(+), 17 deletions(-)
> >
> > diff --git a/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c b/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
> > index 6132df53ec..409554c2d5 100644
> > --- a/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
> > +++ b/arch/arm/boards/nxp-imx8mm-evk/lowlevel.c
> > @@ -16,6 +16,7 @@
> >  #include <mach/iomux-mx8mm.h>
> >  #include <mach/imx8m-ccm-regs.h>
> >  #include <mfd/bd71837.h>
> > +#include <mfd/pca9450.h>
> >  #include <mach/xload.h>
> >  #include <soc/imx8m/ddr.h>
> >  #include <image-metadata.h>
> > @@ -38,6 +39,25 @@ static void setup_uart(void)
> >     putc_ll('>');
> >  }
> >
> > +static struct pmic_config pca9450_cfg[] = {
> > +   /* BUCKxOUT_DVS0/1 control BUCK123 output */
> > +   { PCA9450_BUCK123_DVS, 0x29 },
> > +   /*
> > +    * increase VDD_SOC to typical value 0.95V before first
> > +    * DRAM access, set DVS1 to 0.85v for suspend.
> > +    * Enable DVS control through PMIC_STBY_REQ and
> > +    * set B1_ENMODE=1 (ON by PMIC_ON_REQ=H)
> > +    */
> > +   { PCA9450_BUCK1OUT_DVS0, 0x1C },
> > +   /* Set DVS1 to 0.85v for suspend */
> > +   /* Enable DVS control through PMIC_STBY_REQ and set B1_ENMODE=1 (ON by PMIC_ON_REQ=H) */
> > +   { PCA9450_BUCK1OUT_DVS1, 0x14 },
> > +   { PCA9450_BUCK1CTRL, 0x59 },
> > +
> > +   /* set WDOG_B_CFG to cold reset */
> > +   { PCA9450_RESET_CTRL, 0xA1 },
> > +};

While picking this patch I noticed that you're configuring the PMIC
differently compared to upstream u-boot. What is the reason for this?

Regards,
  Marco

> > +
> >  static struct pmic_config bd71837_cfg[] = {
> >     /* decrease RESET key long push time from the default 10s to 10ms */
> >     { BD718XX_PWRONCONFIG1, 0x0 },
> > @@ -51,21 +71,6 @@ static struct pmic_config bd71837_cfg[] = {
> >     { BD718XX_REGLOCK, 0x11 },
> >  };
> >
> > -static void power_init_board(void)
> > -{
>
> Can you leave this function as-is? This will make the diff more
> readable.
>
> > -   struct pbl_i2c *i2c;
> > -
> > -   imx8mm_setup_pad(IMX8MM_PAD_I2C1_SCL_I2C1_SCL);
> > -   imx8mm_setup_pad(IMX8MM_PAD_I2C1_SDA_I2C1_SDA);
> > -
> > -   imx8mm_early_clock_init();
> > -   imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
> > -
> > -   i2c = imx8m_i2c_early_init(IOMEM(MX8MQ_I2C1_BASE_ADDR));
> > -
> > -   pmic_configure(i2c, 0x4b, bd71837_cfg, ARRAY_SIZE(bd71837_cfg));
> > -}
> > -
> >  extern struct dram_timing_info imx8mm_evk_dram_timing;
> >
> >  static void start_atf(void)
> > @@ -78,8 +83,20 @@ static void start_atf(void)
> >     if (current_el() != 3)
> >             return;
> >
> > -   power_init_board();
> > -   imx8mm_ddr_init(&imx8mm_evk_dram_timing, DRAM_TYPE_LPDDR4);
> > +   imx8mm_setup_pad(IMX8MM_PAD_I2C1_SCL_I2C1_SCL);
> > +   imx8mm_setup_pad(IMX8MM_PAD_I2C1_SDA_I2C1_SDA);
> > +
> > +   imx8mm_early_clock_init();
> > +   imx8m_ccgr_clock_enable(IMX8M_CCM_CCGR_I2C1);
> > +
> > +   i2c = imx8m_i2c_early_init(IOMEM(MX8MM_I2C1_BASE_ADDR));
> > +
> > +   imx8mm_ddr_init(&imx8mm_evk_lpddr4_timing, DRAM_TYPE_LPDDR4);
> > +   if (i2c_dev_probe(i2c, 0x25, true) == 0) {
> > +           pmic_configure(i2c, 0x25, pca9450_cfg, ARRAY_SIZE(pca9450_cfg));
> > +   } else {
> > +           pmic_configure(i2c, 0x4b, bd71837_cfg, ARRAY_SIZE(bd71837_cfg));
> > +   }
>
> Nitpick: You can drop the braces (Kernel coding style).
>
> >
> >     imx8mm_load_and_start_image_via_tfa();
> >  }
>
> --
> Pengutronix e.K.                           |                             |
> Steuerwalder Str. 21                       | https://eur02.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.pengutronix.de%2F&data=05%7C01%7C%7C15dee1b2d380432d7f6908daf9fb861f%7C1b16ab3eb8f64fe39f3e2db7fe549f6a%7C0%7C0%7C638097155931579086%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=xtHVBfBVx5T1eSva9cJhzjNm90XisJl7Gf4hUraDUjc%3D&reserved=0  |
> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
>
>
>



^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2023-01-23  6:10 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-11 10:01 [PATCH v2 1/1] ARM: i.MX8M: add PCA9450 PMIC on rev-b EVK Johannes Schneider
2023-01-11 10:01 ` [PATCH v2 1/1] ARM: i.MX8M: fix typo in function call Johannes Schneider
2023-01-11 10:20   ` Ahmad Fatoum
2023-01-11 10:01 ` [PATCH v2 1/1] ARM: i.MX8M: smccc: fix firmware_atf check Johannes Schneider
2023-01-11 10:21   ` Ahmad Fatoum
2023-01-11 10:17 ` [PATCH v2 1/1] ARM: i.MX8M: add PCA9450 PMIC on rev-b EVK Ahmad Fatoum
2023-01-11 10:26   ` Ahmad Fatoum
2023-01-19  8:59   ` Marco Felsch
2023-01-23  6:07     ` SCHNEIDER Johannes

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox