diff options
-rw-r--r-- | arch/arm/mach-mx3/Makefile | 2 | ||||
-rw-r--r-- | arch/arm/mach-mx3/clock.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-mx3/cpu.c | 57 | ||||
-rw-r--r-- | arch/arm/plat-mxc/include/mach/mx3x.h | 5 |
4 files changed, 63 insertions, 3 deletions
diff --git a/arch/arm/mach-mx3/Makefile b/arch/arm/mach-mx3/Makefile index ed492d32b664..940035cacae8 100644 --- a/arch/arm/mach-mx3/Makefile +++ b/arch/arm/mach-mx3/Makefile | |||
@@ -4,7 +4,7 @@ | |||
4 | 4 | ||
5 | # Object file lists. | 5 | # Object file lists. |
6 | 6 | ||
7 | obj-y := mm.o devices.o | 7 | obj-y := mm.o devices.o cpu.o |
8 | obj-$(CONFIG_ARCH_MX31) += clock.o iomux.o | 8 | obj-$(CONFIG_ARCH_MX31) += clock.o iomux.o |
9 | obj-$(CONFIG_ARCH_MX35) += clock-imx35.o | 9 | obj-$(CONFIG_ARCH_MX35) += clock-imx35.o |
10 | obj-$(CONFIG_MACH_MX31ADS) += mx31ads.o | 10 | obj-$(CONFIG_MACH_MX31ADS) += mx31ads.o |
diff --git a/arch/arm/mach-mx3/clock.c b/arch/arm/mach-mx3/clock.c index b2a3bcf8266e..bec097d176e6 100644 --- a/arch/arm/mach-mx3/clock.c +++ b/arch/arm/mach-mx3/clock.c | |||
@@ -616,6 +616,8 @@ int __init mx31_clocks_init(unsigned long fref) | |||
616 | 616 | ||
617 | clk_enable(&serial_pll_clk); | 617 | clk_enable(&serial_pll_clk); |
618 | 618 | ||
619 | mx31_read_cpu_rev(); | ||
620 | |||
619 | if (mx31_revision() >= CHIP_REV_2_0) { | 621 | if (mx31_revision() >= CHIP_REV_2_0) { |
620 | reg = __raw_readl(MXC_CCM_PMCR1); | 622 | reg = __raw_readl(MXC_CCM_PMCR1); |
621 | /* No PLL restart on DVFS switch; enable auto EMI handshake */ | 623 | /* No PLL restart on DVFS switch; enable auto EMI handshake */ |
diff --git a/arch/arm/mach-mx3/cpu.c b/arch/arm/mach-mx3/cpu.c new file mode 100644 index 000000000000..db828809c675 --- /dev/null +++ b/arch/arm/mach-mx3/cpu.c | |||
@@ -0,0 +1,57 @@ | |||
1 | /* | ||
2 | * MX3 CPU type detection | ||
3 | * | ||
4 | * Copyright (c) 2009 Daniel Mack <daniel@caiaq.de> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License, or | ||
9 | * (at your option) any later version. | ||
10 | */ | ||
11 | |||
12 | #include <linux/module.h> | ||
13 | #include <linux/io.h> | ||
14 | #include <mach/hardware.h> | ||
15 | #include <mach/iim.h> | ||
16 | |||
17 | unsigned int mx31_cpu_rev; | ||
18 | EXPORT_SYMBOL(mx31_cpu_rev); | ||
19 | |||
20 | struct mx3_cpu_type { | ||
21 | u8 srev; | ||
22 | const char *name; | ||
23 | const char *v; | ||
24 | unsigned int rev; | ||
25 | }; | ||
26 | |||
27 | static struct mx3_cpu_type mx31_cpu_type[] __initdata = { | ||
28 | { .srev = 0x00, .name = "i.MX31(L)", .v = "1.0", .rev = CHIP_REV_1_0 }, | ||
29 | { .srev = 0x10, .name = "i.MX31", .v = "1.1", .rev = CHIP_REV_1_1 }, | ||
30 | { .srev = 0x11, .name = "i.MX31L", .v = "1.1", .rev = CHIP_REV_1_1 }, | ||
31 | { .srev = 0x12, .name = "i.MX31", .v = "1.15", .rev = CHIP_REV_1_1 }, | ||
32 | { .srev = 0x13, .name = "i.MX31L", .v = "1.15", .rev = CHIP_REV_1_1 }, | ||
33 | { .srev = 0x14, .name = "i.MX31", .v = "1.2", .rev = CHIP_REV_1_2 }, | ||
34 | { .srev = 0x15, .name = "i.MX31L", .v = "1.2", .rev = CHIP_REV_1_2 }, | ||
35 | { .srev = 0x28, .name = "i.MX31", .v = "2.0", .rev = CHIP_REV_2_0 }, | ||
36 | { .srev = 0x29, .name = "i.MX31L", .v = "2.0", .rev = CHIP_REV_2_0 }, | ||
37 | }; | ||
38 | |||
39 | void __init mx31_read_cpu_rev(void) | ||
40 | { | ||
41 | u32 i, srev; | ||
42 | |||
43 | /* read SREV register from IIM module */ | ||
44 | srev = __raw_readl(IO_ADDRESS(IIM_BASE_ADDR) + MXC_IIMSREV); | ||
45 | |||
46 | for (i = 0; i < ARRAY_SIZE(mx31_cpu_type); i++) | ||
47 | if (srev == mx31_cpu_type[i].srev) { | ||
48 | printk(KERN_INFO | ||
49 | "CPU identified as %s, silicon rev %s\n", | ||
50 | mx31_cpu_type[i].name, mx31_cpu_type[i].v); | ||
51 | |||
52 | mx31_cpu_rev = mx31_cpu_type[i].rev; | ||
53 | return; | ||
54 | } | ||
55 | |||
56 | printk(KERN_WARNING "Unknown CPU identifier. srev = %02x\n", srev); | ||
57 | } | ||
diff --git a/arch/arm/plat-mxc/include/mach/mx3x.h b/arch/arm/plat-mxc/include/mach/mx3x.h index 8cedf29eee16..be69272407ad 100644 --- a/arch/arm/plat-mxc/include/mach/mx3x.h +++ b/arch/arm/plat-mxc/include/mach/mx3x.h | |||
@@ -260,11 +260,12 @@ | |||
260 | 260 | ||
261 | #if !defined(__ASSEMBLY__) && !defined(__MXC_BOOT_UNCOMPRESS) | 261 | #if !defined(__ASSEMBLY__) && !defined(__MXC_BOOT_UNCOMPRESS) |
262 | 262 | ||
263 | extern unsigned int system_rev; | 263 | extern unsigned int mx31_cpu_rev; |
264 | extern void mx31_read_cpu_rev(void); | ||
264 | 265 | ||
265 | static inline int mx31_revision(void) | 266 | static inline int mx31_revision(void) |
266 | { | 267 | { |
267 | return system_rev; | 268 | return mx31_cpu_rev; |
268 | } | 269 | } |
269 | #endif | 270 | #endif |
270 | 271 | ||