i.MX51: determine silicon revision dynamically

Previous thread: ARM mach-mx3: duplicated include by Linux Kernel Mailing List on Monday, April 12, 2010 - 7:59 pm. (1 message)

Next thread: MXC: mach-mx31_3ds: Add SPI1 device support. by Linux Kernel Mailing List on Monday, April 12, 2010 - 7:59 pm. (1 message)
From: Linux Kernel Mailing List
Date: Monday, April 12, 2010 - 7:59 pm

Gitweb:     http://git.kernel.org/linus/5443856cadac7faaaeefeed9d769f497a8c6fa4b
Commit:     5443856cadac7faaaeefeed9d769f497a8c6fa4b
Parent:     3d1bc8626c7b17facfcb7fb5dee4686f47a1e75d
Author:     Sascha Hauer <s.hauer@pengutronix.de>
AuthorDate: Fri Mar 19 10:50:55 2010 +0100
Committer:  Sascha Hauer <s.hauer@pengutronix.de>
CommitDate: Fri Mar 19 11:18:20 2010 +0100

    i.MX51: determine silicon revision dynamically
    
    Freescale redboot passes the silicon revision via
    ATAG_REVISION. Remove this bootloader dependency by
    doing the same as redboot does in the Kernel.
    
    Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 arch/arm/mach-mx5/cpu.c               |   53 +++++++++++++++++++++++++++++++++
 arch/arm/plat-mxc/include/mach/mx51.h |   13 ++++----
 2 files changed, 60 insertions(+), 6 deletions(-)

diff --git a/arch/arm/mach-mx5/cpu.c b/arch/arm/mach-mx5/cpu.c
index 41c769f..2d37785 100644
--- a/arch/arm/mach-mx5/cpu.c
+++ b/arch/arm/mach-mx5/cpu.c
@@ -14,9 +14,62 @@
 #include <linux/types.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
+#include <linux/module.h>
 #include <mach/hardware.h>
 #include <asm/io.h>
 
+static int cpu_silicon_rev = -1;
+
+#define SI_REV 0x48
+
+static void query_silicon_parameter(void)
+{
+	void __iomem *rom = ioremap(MX51_IROM_BASE_ADDR, MX51_IROM_SIZE);
+	u32 rev;
+
+	if (!rom) {
+		cpu_silicon_rev = -EINVAL;
+		return;
+	}
+
+	rev = readl(rom + SI_REV);
+	switch (rev) {
+	case 0x1:
+		cpu_silicon_rev = MX51_CHIP_REV_1_0;
+		break;
+	case 0x2:
+		cpu_silicon_rev = MX51_CHIP_REV_1_1;
+		break;
+	case 0x10:
+		cpu_silicon_rev = MX51_CHIP_REV_2_0;
+		break;
+	case 0x20:
+		cpu_silicon_rev = MX51_CHIP_REV_3_0;
+		break;
+	default:
+		cpu_silicon_rev = 0;
+	}
+
+	iounmap(rom);
+}
+
+/*
+ * Returns:
+ *	the silicon revision of the cpu
+ *	-EINVAL - not a mx51
+ */
+int mx51_revision(void)
+{
+	if (!cpu_is_mx51())
+		return -EINVAL;
+
+	if (cpu_silicon_rev == ...
Previous thread: ARM mach-mx3: duplicated include by Linux Kernel Mailing List on Monday, April 12, 2010 - 7:59 pm. (1 message)

Next thread: MXC: mach-mx31_3ds: Add SPI1 device support. by Linux Kernel Mailing List on Monday, April 12, 2010 - 7:59 pm. (1 message)