diff mbox series

mx6: peripheral clock from oscillator

Message ID 20201019142329.2103-1-jorge@foundries.io
State Superseded
Delegated to: Stefano Babic
Headers show
Series mx6: peripheral clock from oscillator | expand

Commit Message

Jorge Ramirez-Ortiz, Foundries Oct. 19, 2020, 2:23 p.m. UTC
In order to be able to run the I2C bus at 400Khz, the chip errata[1]
recommends that the peripheral clock runs out of the 24MHz oscillator.

[1] Rev 2, 10/2019, ERR007805

Signed-off-by: Jorge Ramirez-Ortiz <jorge@foundries.io>
---
 arch/arm/mach-imx/mx6/soc.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Jorge Ramirez-Ortiz, Foundries Oct. 22, 2020, 3:18 p.m. UTC | #1
On 19/10/20, Jorge Ramirez-Ortiz wrote:
> In order to be able to run the I2C bus at 400Khz, the chip errata[1]
> recommends that the peripheral clock runs out of the 24MHz oscillator.
> 
> [1] Rev 2, 10/2019, ERR007805
> 
> Signed-off-by: Jorge Ramirez-Ortiz <jorge@foundries.io>
> ---
>  arch/arm/mach-imx/mx6/soc.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/mach-imx/mx6/soc.c b/arch/arm/mach-imx/mx6/soc.c
> index e129286065..f498c93b00 100644
> --- a/arch/arm/mach-imx/mx6/soc.c
> +++ b/arch/arm/mach-imx/mx6/soc.c
> @@ -26,6 +26,8 @@
>  #include <imx_thermal.h>
>  #include <mmc.h>
>  
> +#define ERRATA_ERR007805 (is_mx6dl() || is_mx6solo() || is_mx6ull())
> +
>  struct scu_regs {
>  	u32	ctrl;
>  	u32	config;
> @@ -469,7 +471,7 @@ int arch_cpu_init(void)
>  	}
>  
>  	/* Set perclk to source from OSC 24MHz */
> -	if (is_mx6sl())
> +	if (is_mx6sl() || ERRATA_ERR007805)
>  		setbits_le32(&ccm->cscmr1, MXC_CCM_CSCMR1_PER_CLK_SEL_MASK);
>  
>  	imx_wdog_disable_powerdown(); /* Disable PDE bit of WMCR register */
> --


all ok with this ?

> 2.17.1
>
Fabio Estevam Oct. 22, 2020, 8:51 p.m. UTC | #2
On Mon, Oct 19, 2020 at 11:23 AM Jorge Ramirez-Ortiz <jorge@foundries.io> wrote:
>
> In order to be able to run the I2C bus at 400Khz, the chip errata[1]
> recommends that the peripheral clock runs out of the 24MHz oscillator.

I would suggest adding the optee related motivation that you explained
earlier here in the commit log too.

> [1] Rev 2, 10/2019, ERR007805

Not clear what document this refers to.

>         /* Set perclk to source from OSC 24MHz */
> -       if (is_mx6sl())
> +       if (is_mx6sl() || ERRATA_ERR007805)

This gives the impression that imx6sl is not affected by the erratum,
but in fact it is:
https://www.nxp.com/docs/en/errata/IMX6SLCE.pdf

You could define it like this:

#define has_err007805() (is_mx6sl() || is_mx6dl() || is_mx6solo() ||
is_mx6ull())
Jorge Ramirez-Ortiz, Foundries Oct. 22, 2020, 9:24 p.m. UTC | #3
On 22/10/20, Fabio Estevam wrote:
> On Mon, Oct 19, 2020 at 11:23 AM Jorge Ramirez-Ortiz <jorge@foundries.io> wrote:
> >
> > In order to be able to run the I2C bus at 400Khz, the chip errata[1]
> > recommends that the peripheral clock runs out of the 24MHz oscillator.
> 
> I would suggest adding the optee related motivation that you explained
> earlier here in the commit log too.

sure, will do.

> 
> > [1] Rev 2, 10/2019, ERR007805
> 
> Not clear what document this refers to.

um, weird, I just googled "imx Rev 2, 10/2019, ERR007805" and it showed
the document and a link to the errata.

how do you tipically do this otherwise? I didnt want to depend on
links that migh break in the future.

> 
> >         /* Set perclk to source from OSC 24MHz */
> > -       if (is_mx6sl())
> > +       if (is_mx6sl() || ERRATA_ERR007805)
> 
> This gives the impression that imx6sl is not affected by the erratum,
> but in fact it is:
> https://www.nxp.com/docs/en/errata/IMX6SLCE.pdf
> 
> You could define it like this:
> 
> #define has_err007805() (is_mx6sl() || is_mx6dl() || is_mx6solo() ||
> is_mx6ull())


sounds good. will do (I didnt know the reason for the mx6sl configuring the
clock was that same errata)
Fabio Estevam Oct. 22, 2020, 9:30 p.m. UTC | #4
On Thu, Oct 22, 2020 at 6:24 PM Jorge Ramirez-Ortiz, Foundries
<jorge@foundries.io> wrote:

> um, weird, I just googled "imx Rev 2, 10/2019, ERR007805" and it showed
> the document and a link to the errata.

The errata document is specific for a SoC.

It does not help to add "Rev 2, 10/2019, ERR007805" in the commit log
as we cannot know which SoC it refers to.

Just mention the SoC errata document. For example: IMX6SLCE Rev. 5, 02/2019
Jorge Ramirez-Ortiz, Foundries Oct. 23, 2020, 6:35 a.m. UTC | #5
On 22/10/20, Fabio Estevam wrote:
> On Thu, Oct 22, 2020 at 6:24 PM Jorge Ramirez-Ortiz, Foundries
> <jorge@foundries.io> wrote:
> 
> > um, weird, I just googled "imx Rev 2, 10/2019, ERR007805" and it showed
> > the document and a link to the errata.
> 
> The errata document is specific for a SoC.

perfect. now you understand my point and why I was being generic.

> 
> It does not help to add "Rev 2, 10/2019, ERR007805" in the commit log
> as we cannot know which SoC it refers to.

um, weird....the patch indicates imx6 in the name. this should be enough no?

> 
> Just mention the SoC errata document. For example: IMX6SLCE Rev. 5, 02/2019

so you need the names and versions of the errata document for each SoC being affected?
that being the case, should it be a patch per family or a patch per SoC?
Fabio Estevam Oct. 23, 2020, 12:13 p.m. UTC | #6
On Fri, Oct 23, 2020 at 3:35 AM Jorge Ramirez-Ortiz, Foundries
<jorge@foundries.io> wrote:

> um, weird....the patch indicates imx6 in the name. this should be enough no?

imx6 is too generic. Which imx6? imx6sx, imx6sl, imx6solo, imx6dl,
imx6qp, imx6q, imx6ul, imx6ull, imx6ulz?

It is OK to keep mx6 in the Subject though.

> so you need the names and versions of the errata document for each SoC being affected?
> that being the case, should it be a patch per family or a patch per SoC?

No, my point was just to replace:

[1] Rev 2, 10/2019, ERR007805 (this is not a doc reference)

by a real errata document reference. It can be imx6ull, imx6sl or any
other SoC errata document like, for example:

IMX6SLCE Rev. 5, 02/2019
diff mbox series

Patch

diff --git a/arch/arm/mach-imx/mx6/soc.c b/arch/arm/mach-imx/mx6/soc.c
index e129286065..f498c93b00 100644
--- a/arch/arm/mach-imx/mx6/soc.c
+++ b/arch/arm/mach-imx/mx6/soc.c
@@ -26,6 +26,8 @@ 
 #include <imx_thermal.h>
 #include <mmc.h>
 
+#define ERRATA_ERR007805 (is_mx6dl() || is_mx6solo() || is_mx6ull())
+
 struct scu_regs {
 	u32	ctrl;
 	u32	config;
@@ -469,7 +471,7 @@  int arch_cpu_init(void)
 	}
 
 	/* Set perclk to source from OSC 24MHz */
-	if (is_mx6sl())
+	if (is_mx6sl() || ERRATA_ERR007805)
 		setbits_le32(&ccm->cscmr1, MXC_CCM_CSCMR1_PER_CLK_SEL_MASK);
 
 	imx_wdog_disable_powerdown(); /* Disable PDE bit of WMCR register */