Merge branch 'core/urgent' into x86/urgent, to pick up objtool fix
[sfrench/cifs-2.6.git] / arch / arm / mach-imx / anatop.c
index 61f3d94f16336a85b707850d8977a0351792b81a..45d618abf26b77fda2572346d0329cfb1e2dc3d2 100644 (file)
@@ -31,6 +31,8 @@
 #define ANADIG_DIGPROG_IMX6SL  0x280
 #define ANADIG_DIGPROG_IMX7D   0x800
 
+#define SRC_SBMR2              0x1c
+
 #define BM_ANADIG_REG_2P5_ENABLE_WEAK_LINREG   0x40000
 #define BM_ANADIG_REG_2P5_ENABLE_PULLDOWN      0x8
 #define BM_ANADIG_REG_CORE_FET_ODRIVE          0x20000000
@@ -148,6 +150,24 @@ void __init imx_init_revision_from_anatop(void)
                major_part = (digprog >> 8) & 0xf;
                minor_part = digprog & 0xf;
                revision = ((major_part + 1) << 4) | minor_part;
+
+               if ((digprog >> 16) == MXC_CPU_IMX6ULL) {
+                       void __iomem *src_base;
+                       u32 sbmr2;
+
+                       np = of_find_compatible_node(NULL, NULL,
+                                                    "fsl,imx6ul-src");
+                       src_base = of_iomap(np, 0);
+                       WARN_ON(!src_base);
+                       sbmr2 = readl_relaxed(src_base + SRC_SBMR2);
+                       iounmap(src_base);
+
+                       /* src_sbmr2 bit 6 is to identify if it is i.MX6ULZ */
+                       if (sbmr2 & (1 << 6)) {
+                               digprog &= ~(0xff << 16);
+                               digprog |= (MXC_CPU_IMX6ULZ << 16);
+                       }
+               }
        }
 
        mxc_set_cpu_type(digprog >> 16 & 0xff);