aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-imx/cpu-imx5.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-imx/cpu-imx5.c')
-rw-r--r--arch/arm/mach-imx/cpu-imx5.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/arch/arm/mach-imx/cpu-imx5.c b/arch/arm/mach-imx/cpu-imx5.c
index c1c99a72c6a1..3403bac94a31 100644
--- a/arch/arm/mach-imx/cpu-imx5.c
+++ b/arch/arm/mach-imx/cpu-imx5.c
@@ -16,6 +16,8 @@
16#include <linux/init.h> 16#include <linux/init.h>
17#include <linux/module.h> 17#include <linux/module.h>
18#include <linux/io.h> 18#include <linux/io.h>
19#include <linux/of.h>
20#include <linux/of_address.h>
19 21
20#include "hardware.h" 22#include "hardware.h"
21#include "common.h" 23#include "common.h"
@@ -24,10 +26,26 @@ static int mx5_cpu_rev = -1;
24 26
25#define IIM_SREV 0x24 27#define IIM_SREV 0x24
26 28
29static u32 imx5_read_srev_reg(const char *compat)
30{
31 void __iomem *iim_base;
32 struct device_node *np;
33 u32 srev;
34
35 np = of_find_compatible_node(NULL, NULL, compat);
36 iim_base = of_iomap(np, 0);
37 WARN_ON(!iim_base);
38
39 srev = readl(iim_base + IIM_SREV) & 0xff;
40
41 iounmap(iim_base);
42
43 return srev;
44}
45
27static int get_mx51_srev(void) 46static int get_mx51_srev(void)
28{ 47{
29 void __iomem *iim_base = MX51_IO_ADDRESS(MX51_IIM_BASE_ADDR); 48 u32 rev = imx5_read_srev_reg("fsl,imx51-iim");
30 u32 rev = readl(iim_base + IIM_SREV) & 0xff;
31 49
32 switch (rev) { 50 switch (rev) {
33 case 0x0: 51 case 0x0:
@@ -77,8 +95,7 @@ int __init mx51_neon_fixup(void)
77 95
78static int get_mx53_srev(void) 96static int get_mx53_srev(void)
79{ 97{
80 void __iomem *iim_base = MX51_IO_ADDRESS(MX53_IIM_BASE_ADDR); 98 u32 rev = imx5_read_srev_reg("fsl,imx53-iim");
81 u32 rev = readl(iim_base + IIM_SREV) & 0xff;
82 99
83 switch (rev) { 100 switch (rev) {
84 case 0x0: 101 case 0x0: