mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 1/3] ARM: i.MX8MQ: Invert the logic in imx8mq_cpu_revision()
@ 2019-02-12  2:27 Andrey Smirnov
  2019-02-12  2:27 ` [PATCH 2/3] ARM: i.MX8MQ: Read only ROM version major Andrey Smirnov
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Andrey Smirnov @ 2019-02-12  2:27 UTC (permalink / raw)
  To: barebox; +Cc: Andrey Smirnov

Invert the logic in imx8mq_cpu_revision() and convert it to use early
return. This is done in perparation for more corner case logic added
in the following commits. No functional change intended.

Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
---
 arch/arm/mach-imx/include/mach/imx8mq.h | 26 ++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/arch/arm/mach-imx/include/mach/imx8mq.h b/arch/arm/mach-imx/include/mach/imx8mq.h
index f4a537d2b..2a7cf9977 100644
--- a/arch/arm/mach-imx/include/mach/imx8mq.h
+++ b/arch/arm/mach-imx/include/mach/imx8mq.h
@@ -22,19 +22,19 @@ static inline int imx8mq_cpu_revision(void)
 	void __iomem *anatop = IOMEM(MX8MQ_ANATOP_BASE_ADDR);
 	uint32_t revision = FIELD_GET(DIGPROG_MINOR,
 				      readl(anatop + MX8MQ_ANATOP_DIGPROG));
-
-	if (revision == IMX_CHIP_REV_1_0) {
-		uint32_t rom_version;
-		/*
-		 * For B0 chip, the DIGPROG is not updated, still TO1.0.
-		 * we have to check ROM version further
-		 */
-		rom_version = readl(IOMEM(IMX8MQ_ROM_VERSION_A0));
-		if (rom_version != IMX_CHIP_REV_1_0) {
-			rom_version = readl(IOMEM(IMX8MQ_ROM_VERSION_B0));
-			if (rom_version >= IMX_CHIP_REV_2_0)
-				revision = IMX_CHIP_REV_2_0;
-		}
+	uint32_t rom_version;
+
+	if (revision != IMX_CHIP_REV_1_0)
+		return revision;
+	/*
+	 * For B0 chip, the DIGPROG is not updated, still TO1.0.
+	 * we have to check ROM version further
+	 */
+	rom_version = readl(IOMEM(IMX8MQ_ROM_VERSION_A0));
+	if (rom_version != IMX_CHIP_REV_1_0) {
+		rom_version = readl(IOMEM(IMX8MQ_ROM_VERSION_B0));
+		if (rom_version >= IMX_CHIP_REV_2_0)
+			revision = IMX_CHIP_REV_2_0;
 	}
 
 	return revision;
-- 
2.20.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 2/3] ARM: i.MX8MQ: Read only ROM version major
  2019-02-12  2:27 [PATCH 1/3] ARM: i.MX8MQ: Invert the logic in imx8mq_cpu_revision() Andrey Smirnov
@ 2019-02-12  2:27 ` Andrey Smirnov
  2019-02-12  2:27 ` [PATCH 3/3] ARM: i.MX8MQ: Add corner case for Rev 2.1 silicon Andrey Smirnov
  2019-02-12 20:38 ` [PATCH 1/3] ARM: i.MX8MQ: Invert the logic in imx8mq_cpu_revision() Sascha Hauer
  2 siblings, 0 replies; 4+ messages in thread
From: Andrey Smirnov @ 2019-02-12  2:27 UTC (permalink / raw)
  To: barebox; +Cc: Andrey Smirnov

Don't read all 32-bits located at IMX8MQ_ROM_VERSION_*0 since that,
besides ROM version major in LSB, willl also contain minor components
which we don't account for in the following checks. Change the code to
only read LSB instead.

This is a port of a vendor U-Boot[1] commit
0377dc881a96b46d858643dfaa5f9ef0dd4acccc ("MLK-19465 imx8mq: Fix cpu
rev issue on B0.1 chip")

[1] https://source.codeaurora.org/external/imx/uboot-imx
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
---
 arch/arm/mach-imx/include/mach/imx8mq.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-imx/include/mach/imx8mq.h b/arch/arm/mach-imx/include/mach/imx8mq.h
index 2a7cf9977..d69ec8145 100644
--- a/arch/arm/mach-imx/include/mach/imx8mq.h
+++ b/arch/arm/mach-imx/include/mach/imx8mq.h
@@ -30,9 +30,9 @@ static inline int imx8mq_cpu_revision(void)
 	 * For B0 chip, the DIGPROG is not updated, still TO1.0.
 	 * we have to check ROM version further
 	 */
-	rom_version = readl(IOMEM(IMX8MQ_ROM_VERSION_A0));
+	rom_version = readb(IOMEM(IMX8MQ_ROM_VERSION_A0));
 	if (rom_version != IMX_CHIP_REV_1_0) {
-		rom_version = readl(IOMEM(IMX8MQ_ROM_VERSION_B0));
+		rom_version = readb(IOMEM(IMX8MQ_ROM_VERSION_B0));
 		if (rom_version >= IMX_CHIP_REV_2_0)
 			revision = IMX_CHIP_REV_2_0;
 	}
-- 
2.20.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* [PATCH 3/3] ARM: i.MX8MQ: Add corner case for Rev 2.1 silicon
  2019-02-12  2:27 [PATCH 1/3] ARM: i.MX8MQ: Invert the logic in imx8mq_cpu_revision() Andrey Smirnov
  2019-02-12  2:27 ` [PATCH 2/3] ARM: i.MX8MQ: Read only ROM version major Andrey Smirnov
@ 2019-02-12  2:27 ` Andrey Smirnov
  2019-02-12 20:38 ` [PATCH 1/3] ARM: i.MX8MQ: Invert the logic in imx8mq_cpu_revision() Sascha Hauer
  2 siblings, 0 replies; 4+ messages in thread
From: Andrey Smirnov @ 2019-02-12  2:27 UTC (permalink / raw)
  To: barebox; +Cc: Andrey Smirnov

Rev 2.1 of i.MX8MQ silicon needs a special check different from
predecessor. Add all of the neccessary code to do just that (based on
similar code in vendor U-Boot tree).

Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
---
 arch/arm/mach-imx/include/mach/imx8mq.h | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/arch/arm/mach-imx/include/mach/imx8mq.h b/arch/arm/mach-imx/include/mach/imx8mq.h
index d69ec8145..08dc06fdb 100644
--- a/arch/arm/mach-imx/include/mach/imx8mq.h
+++ b/arch/arm/mach-imx/include/mach/imx8mq.h
@@ -9,6 +9,8 @@
 
 #define IMX8MQ_ROM_VERSION_A0	0x800
 #define IMX8MQ_ROM_VERSION_B0	0x83C
+#define IMX8MQ_OCOTP_VERSION_B1 0x40
+#define IMX8MQ_OCOTP_VERSION_B1_MAGIC	0xff0055aa
 
 #define MX8MQ_ANATOP_DIGPROG	0x6c
 
@@ -20,12 +22,19 @@
 static inline int imx8mq_cpu_revision(void)
 {
 	void __iomem *anatop = IOMEM(MX8MQ_ANATOP_BASE_ADDR);
+	void __iomem *ocotp = IOMEM(MX8MQ_OCOTP_BASE_ADDR);
 	uint32_t revision = FIELD_GET(DIGPROG_MINOR,
 				      readl(anatop + MX8MQ_ANATOP_DIGPROG));
 	uint32_t rom_version;
 
 	if (revision != IMX_CHIP_REV_1_0)
 		return revision;
+	/*
+	 * For B1 chip we need to check OCOTP
+	 */
+	if (readl(ocotp + IMX8MQ_OCOTP_VERSION_B1) ==
+	    IMX8MQ_OCOTP_VERSION_B1_MAGIC)
+		return IMX_CHIP_REV_2_1;
 	/*
 	 * For B0 chip, the DIGPROG is not updated, still TO1.0.
 	 * we have to check ROM version further
-- 
2.20.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

* Re: [PATCH 1/3] ARM: i.MX8MQ: Invert the logic in imx8mq_cpu_revision()
  2019-02-12  2:27 [PATCH 1/3] ARM: i.MX8MQ: Invert the logic in imx8mq_cpu_revision() Andrey Smirnov
  2019-02-12  2:27 ` [PATCH 2/3] ARM: i.MX8MQ: Read only ROM version major Andrey Smirnov
  2019-02-12  2:27 ` [PATCH 3/3] ARM: i.MX8MQ: Add corner case for Rev 2.1 silicon Andrey Smirnov
@ 2019-02-12 20:38 ` Sascha Hauer
  2 siblings, 0 replies; 4+ messages in thread
From: Sascha Hauer @ 2019-02-12 20:38 UTC (permalink / raw)
  To: Andrey Smirnov; +Cc: barebox

On Mon, Feb 11, 2019 at 06:27:47PM -0800, Andrey Smirnov wrote:
> Invert the logic in imx8mq_cpu_revision() and convert it to use early
> return. This is done in perparation for more corner case logic added
> in the following commits. No functional change intended.
> 
> Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
> ---
>  arch/arm/mach-imx/include/mach/imx8mq.h | 26 ++++++++++++-------------
>  1 file changed, 13 insertions(+), 13 deletions(-)

Applied, thanks

Sascha

> 
> diff --git a/arch/arm/mach-imx/include/mach/imx8mq.h b/arch/arm/mach-imx/include/mach/imx8mq.h
> index f4a537d2b..2a7cf9977 100644
> --- a/arch/arm/mach-imx/include/mach/imx8mq.h
> +++ b/arch/arm/mach-imx/include/mach/imx8mq.h
> @@ -22,19 +22,19 @@ static inline int imx8mq_cpu_revision(void)
>  	void __iomem *anatop = IOMEM(MX8MQ_ANATOP_BASE_ADDR);
>  	uint32_t revision = FIELD_GET(DIGPROG_MINOR,
>  				      readl(anatop + MX8MQ_ANATOP_DIGPROG));
> -
> -	if (revision == IMX_CHIP_REV_1_0) {
> -		uint32_t rom_version;
> -		/*
> -		 * For B0 chip, the DIGPROG is not updated, still TO1.0.
> -		 * we have to check ROM version further
> -		 */
> -		rom_version = readl(IOMEM(IMX8MQ_ROM_VERSION_A0));
> -		if (rom_version != IMX_CHIP_REV_1_0) {
> -			rom_version = readl(IOMEM(IMX8MQ_ROM_VERSION_B0));
> -			if (rom_version >= IMX_CHIP_REV_2_0)
> -				revision = IMX_CHIP_REV_2_0;
> -		}
> +	uint32_t rom_version;
> +
> +	if (revision != IMX_CHIP_REV_1_0)
> +		return revision;
> +	/*
> +	 * For B0 chip, the DIGPROG is not updated, still TO1.0.
> +	 * we have to check ROM version further
> +	 */
> +	rom_version = readl(IOMEM(IMX8MQ_ROM_VERSION_A0));
> +	if (rom_version != IMX_CHIP_REV_1_0) {
> +		rom_version = readl(IOMEM(IMX8MQ_ROM_VERSION_B0));
> +		if (rom_version >= IMX_CHIP_REV_2_0)
> +			revision = IMX_CHIP_REV_2_0;
>  	}
>  
>  	return revision;
> -- 
> 2.20.1
> 
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

end of thread, other threads:[~2019-02-12 20:38 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-12  2:27 [PATCH 1/3] ARM: i.MX8MQ: Invert the logic in imx8mq_cpu_revision() Andrey Smirnov
2019-02-12  2:27 ` [PATCH 2/3] ARM: i.MX8MQ: Read only ROM version major Andrey Smirnov
2019-02-12  2:27 ` [PATCH 3/3] ARM: i.MX8MQ: Add corner case for Rev 2.1 silicon Andrey Smirnov
2019-02-12 20:38 ` [PATCH 1/3] ARM: i.MX8MQ: Invert the logic in imx8mq_cpu_revision() Sascha Hauer

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