ARM: imx: do not use regmap_read for ANADIG_DIGPROG
authorShawn Guo <shawn.guo@linaro.org>
Sun, 31 Mar 2013 14:39:22 +0000 (22:39 +0800)
committerShawn Guo <shawn.guo@linaro.org>
Fri, 12 Apr 2013 11:28:13 +0000 (19:28 +0800)
Function imx_anatop_get_digprog() that reads register ANADIG_DIGPROG is
called to identify silicon version.  Users might query silicon version
earlier than regmap subsystem is ready.  For example, imx6q clock driver
query revision in mx6q_clocks_init(), where regmap is not initialized
yet.

Change imx_anatop_get_digprog() to map anatop block and read
ANADIG_DIGPROG in the native way, so that the function can work at very
early stage.

While at it, let's move imx_print_silicon_rev() back to
imx6q_timer_init() to have the message show up a little earlier.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
arch/arm/mach-imx/anatop.c
arch/arm/mach-imx/mach-imx6q.c

index 472beee9cd98663fc8611710a2f84897d8545d91..0cfa07dd9aa422aa6a5cb1b245dd3a07c4d4498d 100644 (file)
@@ -78,10 +78,19 @@ void imx_anatop_usb_chrg_detect_disable(void)
 
 u32 imx_anatop_get_digprog(void)
 {
-       u32  val;
+       struct device_node *np;
+       void __iomem *anatop_base;
+       static u32 digprog;
 
-       regmap_read(anatop, ANADIG_DIGPROG, &val);
-       return val;
+       if (digprog)
+               return digprog;
+
+       np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-anatop");
+       anatop_base = of_iomap(np, 0);
+       WARN_ON(!anatop_base);
+       digprog = readl_relaxed(anatop_base + ANADIG_DIGPROG);
+
+       return digprog;
 }
 
 void __init imx_anatop_init(void)
index 0af330d7e5921953a59b812deea3d235884126d2..221f3199193983a8e3ae373d2bd5398a53858507 100644 (file)
@@ -164,7 +164,6 @@ static void __init imx6q_init_machine(void)
        imx6q_pm_init();
        imx6q_usb_init();
        imx6q_1588_init();
-       imx_print_silicon_rev("i.MX6Q", imx6q_revision());
 }
 
 #define OCOTP_CFG3                     0x440
@@ -258,6 +257,7 @@ static void __init imx6q_timer_init(void)
 {
        mx6q_clocks_init();
        twd_local_timer_of_register();
+       imx_print_silicon_rev("i.MX6Q", imx6q_revision());
 }
 
 static const char *imx6q_dt_compat[] __initdata = {