aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2016-03-02 17:30:17 -0500
committerArnd Bergmann <arnd@arndb.de>2016-03-02 17:30:17 -0500
commitf3a186fbfd413f2453c511da2dbcdc594c87dbde (patch)
tree7a35123458eb9904f8027c3bc15057e607707c2d
parente91fb3bd757569aca48785358a4adbf41334d382 (diff)
parentd2443b2e6167e80eca9a068d5ecc0e6f081b3ca4 (diff)
Merge tag 'imx-soc-4.6' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux into next/soc
Merge "i.MX SoC update for 4.6" from Shawn Guo: - Enable big endian mode support for i.MX platform - Add support for i.MX6QP SoC which is the latest i.MX6 family addition - Add basic suspend/resume support for i.MX25 - A couple of i.MX7D support updates - A few random code cleanups * tag 'imx-soc-4.6' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux: ARM: imx: Make reset_control_ops const ARM: imx: Do L2 errata only if the L2 cache isn't enabled ARM: imx: select ARM_CPU_SUSPEND only for imx6 ARM: mx25: Add basic suspend/resume support ARM: imx: Add msl code support for imx6qp ARM: imx: enable big endian mode ARM: imx: use endian-safe readl/readw/writel/writew ARM: imx7d: correct chip version information ARM: imx: select HAVE_ARM_ARCH_TIMER if selected i.MX7D ARM: imx6: fix cleanup path in imx6q_suspend_init()
-rw-r--r--arch/arm/include/debug/imx.S3
-rw-r--r--arch/arm/mach-imx/3ds_debugboard.c30
-rw-r--r--arch/arm/mach-imx/Kconfig4
-rw-r--r--arch/arm/mach-imx/Makefile2
-rw-r--r--arch/arm/mach-imx/anatop.c18
-rw-r--r--arch/arm/mach-imx/avic.c30
-rw-r--r--arch/arm/mach-imx/common.h1
-rw-r--r--arch/arm/mach-imx/cpu-imx27.c3
-rw-r--r--arch/arm/mach-imx/cpu-imx31.c2
-rw-r--r--arch/arm/mach-imx/cpu-imx35.c2
-rw-r--r--arch/arm/mach-imx/cpu.c16
-rw-r--r--arch/arm/mach-imx/epit.c22
-rw-r--r--arch/arm/mach-imx/headsmp.S2
-rw-r--r--arch/arm/mach-imx/iomux-imx31.c12
-rw-r--r--arch/arm/mach-imx/iomux-v1.c4
-rw-r--r--arch/arm/mach-imx/iomux-v3.c6
-rw-r--r--arch/arm/mach-imx/mach-armadillo5x0.c4
-rw-r--r--arch/arm/mach-imx/mach-imx25.c1
-rw-r--r--arch/arm/mach-imx/mach-imx51.c5
-rw-r--r--arch/arm/mach-imx/mach-imx6q.c8
-rw-r--r--arch/arm/mach-imx/mach-mx27ads.c6
-rw-r--r--arch/arm/mach-imx/mach-mx31ads.c16
-rw-r--r--arch/arm/mach-imx/mach-mx31moboard.c2
-rw-r--r--arch/arm/mach-imx/mach-qong.c6
-rw-r--r--arch/arm/mach-imx/mxc.h5
-rw-r--r--arch/arm/mach-imx/pm-imx25.c37
-rw-r--r--arch/arm/mach-imx/pm-imx27.c4
-rw-r--r--arch/arm/mach-imx/pm-imx3.c4
-rw-r--r--arch/arm/mach-imx/pm-imx5.c26
-rw-r--r--arch/arm/mach-imx/pm-imx6.c8
-rw-r--r--arch/arm/mach-imx/src.c2
-rw-r--r--arch/arm/mach-imx/system.c10
-rw-r--r--arch/arm/mach-imx/tzic.c34
33 files changed, 203 insertions, 132 deletions
diff --git a/arch/arm/include/debug/imx.S b/arch/arm/include/debug/imx.S
index 619d8cc1ac12..92c44760d656 100644
--- a/arch/arm/include/debug/imx.S
+++ b/arch/arm/include/debug/imx.S
@@ -11,6 +11,7 @@
11 * 11 *
12 */ 12 */
13 13
14#include <asm/assembler.h>
14#include "imx-uart.h" 15#include "imx-uart.h"
15 16
16/* 17/*
@@ -34,6 +35,7 @@
34 .endm 35 .endm
35 36
36 .macro senduart,rd,rx 37 .macro senduart,rd,rx
38 ARM_BE8(rev \rd, \rd)
37 str \rd, [\rx, #0x40] @ TXDATA 39 str \rd, [\rx, #0x40] @ TXDATA
38 .endm 40 .endm
39 41
@@ -42,6 +44,7 @@
42 44
43 .macro busyuart,rd,rx 45 .macro busyuart,rd,rx
441002: ldr \rd, [\rx, #0x98] @ SR2 461002: ldr \rd, [\rx, #0x98] @ SR2
47 ARM_BE8(rev \rd, \rd)
45 tst \rd, #1 << 3 @ TXDC 48 tst \rd, #1 << 3 @ TXDC
46 beq 1002b @ wait until transmit done 49 beq 1002b @ wait until transmit done
47 .endm 50 .endm
diff --git a/arch/arm/mach-imx/3ds_debugboard.c b/arch/arm/mach-imx/3ds_debugboard.c
index 16496a071ecb..cda330c93d61 100644
--- a/arch/arm/mach-imx/3ds_debugboard.c
+++ b/arch/arm/mach-imx/3ds_debugboard.c
@@ -94,8 +94,8 @@ static void mxc_expio_irq_handler(struct irq_desc *desc)
94 /* irq = gpio irq number */ 94 /* irq = gpio irq number */
95 desc->irq_data.chip->irq_mask(&desc->irq_data); 95 desc->irq_data.chip->irq_mask(&desc->irq_data);
96 96
97 imr_val = __raw_readw(brd_io + INTR_MASK_REG); 97 imr_val = imx_readw(brd_io + INTR_MASK_REG);
98 int_valid = __raw_readw(brd_io + INTR_STATUS_REG) & ~imr_val; 98 int_valid = imx_readw(brd_io + INTR_STATUS_REG) & ~imr_val;
99 99
100 expio_irq = 0; 100 expio_irq = 0;
101 for (; int_valid != 0; int_valid >>= 1, expio_irq++) { 101 for (; int_valid != 0; int_valid >>= 1, expio_irq++) {
@@ -117,17 +117,17 @@ static void expio_mask_irq(struct irq_data *d)
117 u16 reg; 117 u16 reg;
118 u32 expio = d->hwirq; 118 u32 expio = d->hwirq;
119 119
120 reg = __raw_readw(brd_io + INTR_MASK_REG); 120 reg = imx_readw(brd_io + INTR_MASK_REG);
121 reg |= (1 << expio); 121 reg |= (1 << expio);
122 __raw_writew(reg, brd_io + INTR_MASK_REG); 122 imx_writew(reg, brd_io + INTR_MASK_REG);
123} 123}
124 124
125static void expio_ack_irq(struct irq_data *d) 125static void expio_ack_irq(struct irq_data *d)
126{ 126{
127 u32 expio = d->hwirq; 127 u32 expio = d->hwirq;
128 128
129 __raw_writew(1 << expio, brd_io + INTR_RESET_REG); 129 imx_writew(1 << expio, brd_io + INTR_RESET_REG);
130 __raw_writew(0, brd_io + INTR_RESET_REG); 130 imx_writew(0, brd_io + INTR_RESET_REG);
131 expio_mask_irq(d); 131 expio_mask_irq(d);
132} 132}
133 133
@@ -136,9 +136,9 @@ static void expio_unmask_irq(struct irq_data *d)
136 u16 reg; 136 u16 reg;
137 u32 expio = d->hwirq; 137 u32 expio = d->hwirq;
138 138
139 reg = __raw_readw(brd_io + INTR_MASK_REG); 139 reg = imx_readw(brd_io + INTR_MASK_REG);
140 reg &= ~(1 << expio); 140 reg &= ~(1 << expio);
141 __raw_writew(reg, brd_io + INTR_MASK_REG); 141 imx_writew(reg, brd_io + INTR_MASK_REG);
142} 142}
143 143
144static struct irq_chip expio_irq_chip = { 144static struct irq_chip expio_irq_chip = {
@@ -162,9 +162,9 @@ int __init mxc_expio_init(u32 base, u32 intr_gpio)
162 if (brd_io == NULL) 162 if (brd_io == NULL)
163 return -ENOMEM; 163 return -ENOMEM;
164 164
165 if ((__raw_readw(brd_io + MAGIC_NUMBER1_REG) != 0xAAAA) || 165 if ((imx_readw(brd_io + MAGIC_NUMBER1_REG) != 0xAAAA) ||
166 (__raw_readw(brd_io + MAGIC_NUMBER2_REG) != 0x5555) || 166 (imx_readw(brd_io + MAGIC_NUMBER2_REG) != 0x5555) ||
167 (__raw_readw(brd_io + MAGIC_NUMBER3_REG) != 0xCAFE)) { 167 (imx_readw(brd_io + MAGIC_NUMBER3_REG) != 0xCAFE)) {
168 pr_info("3-Stack Debug board not detected\n"); 168 pr_info("3-Stack Debug board not detected\n");
169 iounmap(brd_io); 169 iounmap(brd_io);
170 brd_io = NULL; 170 brd_io = NULL;
@@ -181,10 +181,10 @@ int __init mxc_expio_init(u32 base, u32 intr_gpio)
181 gpio_direction_input(intr_gpio); 181 gpio_direction_input(intr_gpio);
182 182
183 /* disable the interrupt and clear the status */ 183 /* disable the interrupt and clear the status */
184 __raw_writew(0, brd_io + INTR_MASK_REG); 184 imx_writew(0, brd_io + INTR_MASK_REG);
185 __raw_writew(0xFFFF, brd_io + INTR_RESET_REG); 185 imx_writew(0xFFFF, brd_io + INTR_RESET_REG);
186 __raw_writew(0, brd_io + INTR_RESET_REG); 186 imx_writew(0, brd_io + INTR_RESET_REG);
187 __raw_writew(0x1F, brd_io + INTR_MASK_REG); 187 imx_writew(0x1F, brd_io + INTR_MASK_REG);
188 188
189 irq_base = irq_alloc_descs(-1, 0, MXC_MAX_EXP_IO_LINES, numa_node_id()); 189 irq_base = irq_alloc_descs(-1, 0, MXC_MAX_EXP_IO_LINES, numa_node_id());
190 WARN_ON(irq_base < 0); 190 WARN_ON(irq_base < 0);
diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig
index 15df34fbdf44..8973fae25436 100644
--- a/arch/arm/mach-imx/Kconfig
+++ b/arch/arm/mach-imx/Kconfig
@@ -2,7 +2,7 @@ menuconfig ARCH_MXC
2 bool "Freescale i.MX family" 2 bool "Freescale i.MX family"
3 depends on ARCH_MULTI_V4_V5 || ARCH_MULTI_V6_V7 || ARM_SINGLE_ARMV7M 3 depends on ARCH_MULTI_V4_V5 || ARCH_MULTI_V6_V7 || ARM_SINGLE_ARMV7M
4 select ARCH_REQUIRE_GPIOLIB 4 select ARCH_REQUIRE_GPIOLIB
5 select ARM_CPU_SUSPEND if PM 5 select ARCH_SUPPORTS_BIG_ENDIAN
6 select CLKSRC_IMX_GPT 6 select CLKSRC_IMX_GPT
7 select GENERIC_IRQ_CHIP 7 select GENERIC_IRQ_CHIP
8 select PINCTRL 8 select PINCTRL
@@ -511,6 +511,7 @@ config SOC_IMX53
511 511
512config SOC_IMX6 512config SOC_IMX6
513 bool 513 bool
514 select ARM_CPU_SUSPEND if PM
514 select ARM_ERRATA_754322 515 select ARM_ERRATA_754322
515 select ARM_ERRATA_775420 516 select ARM_ERRATA_775420
516 select ARM_GIC 517 select ARM_GIC
@@ -561,6 +562,7 @@ config SOC_IMX7D
561 bool "i.MX7 Dual support" 562 bool "i.MX7 Dual support"
562 select PINCTRL_IMX7D 563 select PINCTRL_IMX7D
563 select ARM_GIC 564 select ARM_GIC
565 select HAVE_ARM_ARCH_TIMER
564 select HAVE_IMX_ANATOP 566 select HAVE_IMX_ANATOP
565 select HAVE_IMX_MMDC 567 select HAVE_IMX_MMDC
566 select HAVE_IMX_SRC 568 select HAVE_IMX_SRC
diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile
index fb689d813b09..9fbe624a5ef9 100644
--- a/arch/arm/mach-imx/Makefile
+++ b/arch/arm/mach-imx/Makefile
@@ -3,7 +3,7 @@ obj-y := cpu.o system.o irq-common.o
3obj-$(CONFIG_SOC_IMX1) += mm-imx1.o 3obj-$(CONFIG_SOC_IMX1) += mm-imx1.o
4obj-$(CONFIG_SOC_IMX21) += mm-imx21.o 4obj-$(CONFIG_SOC_IMX21) += mm-imx21.o
5 5
6obj-$(CONFIG_SOC_IMX25) += cpu-imx25.o mach-imx25.o 6obj-$(CONFIG_SOC_IMX25) += cpu-imx25.o mach-imx25.o pm-imx25.o
7 7
8obj-$(CONFIG_SOC_IMX27) += cpu-imx27.o pm-imx27.o 8obj-$(CONFIG_SOC_IMX27) += cpu-imx27.o pm-imx27.o
9obj-$(CONFIG_SOC_IMX27) += mm-imx27.o ehci-imx27.o 9obj-$(CONFIG_SOC_IMX27) += mm-imx27.o ehci-imx27.o
diff --git a/arch/arm/mach-imx/anatop.c b/arch/arm/mach-imx/anatop.c
index 231bb250c571..649a84c251ad 100644
--- a/arch/arm/mach-imx/anatop.c
+++ b/arch/arm/mach-imx/anatop.c
@@ -129,7 +129,14 @@ void __init imx_init_revision_from_anatop(void)
129 129
130 switch (digprog & 0xff) { 130 switch (digprog & 0xff) {
131 case 0: 131 case 0:
132 revision = IMX_CHIP_REVISION_1_0; 132 /*
133 * For i.MX6QP, most of the code for i.MX6Q can be resued,
134 * so internally, we identify it as i.MX6Q Rev 2.0
135 */
136 if (digprog >> 8 & 0x01)
137 revision = IMX_CHIP_REVISION_2_0;
138 else
139 revision = IMX_CHIP_REVISION_1_0;
133 break; 140 break;
134 case 1: 141 case 1:
135 revision = IMX_CHIP_REVISION_1_1; 142 revision = IMX_CHIP_REVISION_1_1;
@@ -151,7 +158,14 @@ void __init imx_init_revision_from_anatop(void)
151 revision = IMX_CHIP_REVISION_1_5; 158 revision = IMX_CHIP_REVISION_1_5;
152 break; 159 break;
153 default: 160 default:
154 revision = IMX_CHIP_REVISION_UNKNOWN; 161 /*
162 * Fail back to return raw register value instead of 0xff.
163 * It will be easy to know version information in SOC if it
164 * can't be recognized by known version. And some chip's (i.MX7D)
165 * digprog value match linux version format, so it needn't map
166 * again and we can use register value directly.
167 */
168 revision = digprog & 0xff;
155 } 169 }
156 170
157 mxc_set_cpu_type(digprog >> 16 & 0xff); 171 mxc_set_cpu_type(digprog >> 16 & 0xff);
diff --git a/arch/arm/mach-imx/avic.c b/arch/arm/mach-imx/avic.c
index 1a8932335b21..7fa176e792bd 100644
--- a/arch/arm/mach-imx/avic.c
+++ b/arch/arm/mach-imx/avic.c
@@ -66,12 +66,12 @@ static int avic_set_irq_fiq(unsigned int irq, unsigned int type)
66 return -EINVAL; 66 return -EINVAL;
67 67
68 if (irq < AVIC_NUM_IRQS / 2) { 68 if (irq < AVIC_NUM_IRQS / 2) {
69 irqt = __raw_readl(avic_base + AVIC_INTTYPEL) & ~(1 << irq); 69 irqt = imx_readl(avic_base + AVIC_INTTYPEL) & ~(1 << irq);
70 __raw_writel(irqt | (!!type << irq), avic_base + AVIC_INTTYPEL); 70 imx_writel(irqt | (!!type << irq), avic_base + AVIC_INTTYPEL);
71 } else { 71 } else {
72 irq -= AVIC_NUM_IRQS / 2; 72 irq -= AVIC_NUM_IRQS / 2;
73 irqt = __raw_readl(avic_base + AVIC_INTTYPEH) & ~(1 << irq); 73 irqt = imx_readl(avic_base + AVIC_INTTYPEH) & ~(1 << irq);
74 __raw_writel(irqt | (!!type << irq), avic_base + AVIC_INTTYPEH); 74 imx_writel(irqt | (!!type << irq), avic_base + AVIC_INTTYPEH);
75 } 75 }
76 76
77 return 0; 77 return 0;
@@ -94,8 +94,8 @@ static void avic_irq_suspend(struct irq_data *d)
94 struct irq_chip_type *ct = gc->chip_types; 94 struct irq_chip_type *ct = gc->chip_types;
95 int idx = d->hwirq >> 5; 95 int idx = d->hwirq >> 5;
96 96
97 avic_saved_mask_reg[idx] = __raw_readl(avic_base + ct->regs.mask); 97 avic_saved_mask_reg[idx] = imx_readl(avic_base + ct->regs.mask);
98 __raw_writel(gc->wake_active, avic_base + ct->regs.mask); 98 imx_writel(gc->wake_active, avic_base + ct->regs.mask);
99} 99}
100 100
101static void avic_irq_resume(struct irq_data *d) 101static void avic_irq_resume(struct irq_data *d)
@@ -104,7 +104,7 @@ static void avic_irq_resume(struct irq_data *d)
104 struct irq_chip_type *ct = gc->chip_types; 104 struct irq_chip_type *ct = gc->chip_types;
105 int idx = d->hwirq >> 5; 105 int idx = d->hwirq >> 5;
106 106
107 __raw_writel(avic_saved_mask_reg[idx], avic_base + ct->regs.mask); 107 imx_writel(avic_saved_mask_reg[idx], avic_base + ct->regs.mask);
108} 108}
109 109
110#else 110#else
@@ -140,7 +140,7 @@ static void __exception_irq_entry avic_handle_irq(struct pt_regs *regs)
140 u32 nivector; 140 u32 nivector;
141 141
142 do { 142 do {
143 nivector = __raw_readl(avic_base + AVIC_NIVECSR) >> 16; 143 nivector = imx_readl(avic_base + AVIC_NIVECSR) >> 16;
144 if (nivector == 0xffff) 144 if (nivector == 0xffff)
145 break; 145 break;
146 146
@@ -164,16 +164,16 @@ void __init mxc_init_irq(void __iomem *irqbase)
164 /* put the AVIC into the reset value with 164 /* put the AVIC into the reset value with
165 * all interrupts disabled 165 * all interrupts disabled
166 */ 166 */
167 __raw_writel(0, avic_base + AVIC_INTCNTL); 167 imx_writel(0, avic_base + AVIC_INTCNTL);
168 __raw_writel(0x1f, avic_base + AVIC_NIMASK); 168 imx_writel(0x1f, avic_base + AVIC_NIMASK);
169 169
170 /* disable all interrupts */ 170 /* disable all interrupts */
171 __raw_writel(0, avic_base + AVIC_INTENABLEH); 171 imx_writel(0, avic_base + AVIC_INTENABLEH);
172 __raw_writel(0, avic_base + AVIC_INTENABLEL); 172 imx_writel(0, avic_base + AVIC_INTENABLEL);
173 173
174 /* all IRQ no FIQ */ 174 /* all IRQ no FIQ */
175 __raw_writel(0, avic_base + AVIC_INTTYPEH); 175 imx_writel(0, avic_base + AVIC_INTTYPEH);
176 __raw_writel(0, avic_base + AVIC_INTTYPEL); 176 imx_writel(0, avic_base + AVIC_INTTYPEL);
177 177
178 irq_base = irq_alloc_descs(-1, 0, AVIC_NUM_IRQS, numa_node_id()); 178 irq_base = irq_alloc_descs(-1, 0, AVIC_NUM_IRQS, numa_node_id());
179 WARN_ON(irq_base < 0); 179 WARN_ON(irq_base < 0);
@@ -188,7 +188,7 @@ void __init mxc_init_irq(void __iomem *irqbase)
188 188
189 /* Set default priority value (0) for all IRQ's */ 189 /* Set default priority value (0) for all IRQ's */
190 for (i = 0; i < 8; i++) 190 for (i = 0; i < 8; i++)
191 __raw_writel(0, avic_base + AVIC_NIPRIORITY(i)); 191 imx_writel(0, avic_base + AVIC_NIPRIORITY(i));
192 192
193 set_handle_irq(avic_handle_irq); 193 set_handle_irq(avic_handle_irq);
194 194
diff --git a/arch/arm/mach-imx/common.h b/arch/arm/mach-imx/common.h
index 32b83f09da18..58a38464480d 100644
--- a/arch/arm/mach-imx/common.h
+++ b/arch/arm/mach-imx/common.h
@@ -66,6 +66,7 @@ void imx_gpc_check_dt(void);
66void imx_gpc_set_arm_power_in_lpm(bool power_off); 66void imx_gpc_set_arm_power_in_lpm(bool power_off);
67void imx_gpc_set_arm_power_up_timing(u32 sw2iso, u32 sw); 67void imx_gpc_set_arm_power_up_timing(u32 sw2iso, u32 sw);
68void imx_gpc_set_arm_power_down_timing(u32 sw2iso, u32 sw); 68void imx_gpc_set_arm_power_down_timing(u32 sw2iso, u32 sw);
69void imx25_pm_init(void);
69 70
70enum mxc_cpu_pwr_mode { 71enum mxc_cpu_pwr_mode {
71 WAIT_CLOCKED, /* wfi only */ 72 WAIT_CLOCKED, /* wfi only */
diff --git a/arch/arm/mach-imx/cpu-imx27.c b/arch/arm/mach-imx/cpu-imx27.c
index fe8d36f7e30e..8d2ae4091465 100644
--- a/arch/arm/mach-imx/cpu-imx27.c
+++ b/arch/arm/mach-imx/cpu-imx27.c
@@ -39,8 +39,7 @@ static int mx27_read_cpu_rev(void)
39 * the silicon revision very early we read it here to 39 * the silicon revision very early we read it here to
40 * avoid any further hooks 40 * avoid any further hooks
41 */ 41 */
42 val = __raw_readl(MX27_IO_ADDRESS(MX27_SYSCTRL_BASE_ADDR 42 val = imx_readl(MX27_IO_ADDRESS(MX27_SYSCTRL_BASE_ADDR + SYS_CHIP_ID));
43 + SYS_CHIP_ID));
44 43
45 mx27_cpu_partnumber = (int)((val >> 12) & 0xFFFF); 44 mx27_cpu_partnumber = (int)((val >> 12) & 0xFFFF);
46 45
diff --git a/arch/arm/mach-imx/cpu-imx31.c b/arch/arm/mach-imx/cpu-imx31.c
index fde1860a2521..3daf1959a2f0 100644
--- a/arch/arm/mach-imx/cpu-imx31.c
+++ b/arch/arm/mach-imx/cpu-imx31.c
@@ -39,7 +39,7 @@ static int mx31_read_cpu_rev(void)
39 u32 i, srev; 39 u32 i, srev;
40 40
41 /* read SREV register from IIM module */ 41 /* read SREV register from IIM module */
42 srev = __raw_readl(MX31_IO_ADDRESS(MX31_IIM_BASE_ADDR + MXC_IIMSREV)); 42 srev = imx_readl(MX31_IO_ADDRESS(MX31_IIM_BASE_ADDR + MXC_IIMSREV));
43 srev &= 0xff; 43 srev &= 0xff;
44 44
45 for (i = 0; i < ARRAY_SIZE(mx31_cpu_type); i++) 45 for (i = 0; i < ARRAY_SIZE(mx31_cpu_type); i++)
diff --git a/arch/arm/mach-imx/cpu-imx35.c b/arch/arm/mach-imx/cpu-imx35.c
index ec3aaa098c17..8a54234df23b 100644
--- a/arch/arm/mach-imx/cpu-imx35.c
+++ b/arch/arm/mach-imx/cpu-imx35.c
@@ -20,7 +20,7 @@ static int mx35_read_cpu_rev(void)
20{ 20{
21 u32 rev; 21 u32 rev;
22 22
23 rev = __raw_readl(MX35_IO_ADDRESS(MX35_IIM_BASE_ADDR + MXC_IIMSREV)); 23 rev = imx_readl(MX35_IO_ADDRESS(MX35_IIM_BASE_ADDR + MXC_IIMSREV));
24 switch (rev) { 24 switch (rev) {
25 case 0x00: 25 case 0x00:
26 return IMX_CHIP_REVISION_1_0; 26 return IMX_CHIP_REVISION_1_0;
diff --git a/arch/arm/mach-imx/cpu.c b/arch/arm/mach-imx/cpu.c
index 5b0f752d5507..6a96b7cf468f 100644
--- a/arch/arm/mach-imx/cpu.c
+++ b/arch/arm/mach-imx/cpu.c
@@ -45,20 +45,20 @@ void __init imx_set_aips(void __iomem *base)
45 * Set all MPROTx to be non-bufferable, trusted for R/W, 45 * Set all MPROTx to be non-bufferable, trusted for R/W,
46 * not forced to user-mode. 46 * not forced to user-mode.
47 */ 47 */
48 __raw_writel(0x77777777, base + 0x0); 48 imx_writel(0x77777777, base + 0x0);
49 __raw_writel(0x77777777, base + 0x4); 49 imx_writel(0x77777777, base + 0x4);
50 50
51/* 51/*
52 * Set all OPACRx to be non-bufferable, to not require 52 * Set all OPACRx to be non-bufferable, to not require
53 * supervisor privilege level for access, allow for 53 * supervisor privilege level for access, allow for
54 * write access and untrusted master access. 54 * write access and untrusted master access.
55 */ 55 */
56 __raw_writel(0x0, base + 0x40); 56 imx_writel(0x0, base + 0x40);
57 __raw_writel(0x0, base + 0x44); 57 imx_writel(0x0, base + 0x44);
58 __raw_writel(0x0, base + 0x48); 58 imx_writel(0x0, base + 0x48);
59 __raw_writel(0x0, base + 0x4C); 59 imx_writel(0x0, base + 0x4C);
60 reg = __raw_readl(base + 0x50) & 0x00FFFFFF; 60 reg = imx_readl(base + 0x50) & 0x00FFFFFF;
61 __raw_writel(reg, base + 0x50); 61 imx_writel(reg, base + 0x50);
62} 62}
63 63
64void __init imx_aips_allow_unprivileged_access( 64void __init imx_aips_allow_unprivileged_access(
diff --git a/arch/arm/mach-imx/epit.c b/arch/arm/mach-imx/epit.c
index 08ce20771bb3..fb9a73a57d00 100644
--- a/arch/arm/mach-imx/epit.c
+++ b/arch/arm/mach-imx/epit.c
@@ -64,23 +64,23 @@ static inline void epit_irq_disable(void)
64{ 64{
65 u32 val; 65 u32 val;
66 66
67 val = __raw_readl(timer_base + EPITCR); 67 val = imx_readl(timer_base + EPITCR);
68 val &= ~EPITCR_OCIEN; 68 val &= ~EPITCR_OCIEN;
69 __raw_writel(val, timer_base + EPITCR); 69 imx_writel(val, timer_base + EPITCR);
70} 70}
71 71
72static inline void epit_irq_enable(void) 72static inline void epit_irq_enable(void)
73{ 73{
74 u32 val; 74 u32 val;
75 75
76 val = __raw_readl(timer_base + EPITCR); 76 val = imx_readl(timer_base + EPITCR);
77 val |= EPITCR_OCIEN; 77 val |= EPITCR_OCIEN;
78 __raw_writel(val, timer_base + EPITCR); 78 imx_writel(val, timer_base + EPITCR);
79} 79}
80 80
81static void epit_irq_acknowledge(void) 81static void epit_irq_acknowledge(void)
82{ 82{
83 __raw_writel(EPITSR_OCIF, timer_base + EPITSR); 83 imx_writel(EPITSR_OCIF, timer_base + EPITSR);
84} 84}
85 85
86static int __init epit_clocksource_init(struct clk *timer_clk) 86static int __init epit_clocksource_init(struct clk *timer_clk)
@@ -98,9 +98,9 @@ static int epit_set_next_event(unsigned long evt,
98{ 98{
99 unsigned long tcmp; 99 unsigned long tcmp;
100 100
101 tcmp = __raw_readl(timer_base + EPITCNR); 101 tcmp = imx_readl(timer_base + EPITCNR);
102 102
103 __raw_writel(tcmp - evt, timer_base + EPITCMPR); 103 imx_writel(tcmp - evt, timer_base + EPITCMPR);
104 104
105 return 0; 105 return 0;
106} 106}
@@ -213,11 +213,11 @@ void __init epit_timer_init(void __iomem *base, int irq)
213 /* 213 /*
214 * Initialise to a known state (all timers off, and timing reset) 214 * Initialise to a known state (all timers off, and timing reset)
215 */ 215 */
216 __raw_writel(0x0, timer_base + EPITCR); 216 imx_writel(0x0, timer_base + EPITCR);
217 217
218 __raw_writel(0xffffffff, timer_base + EPITLR); 218 imx_writel(0xffffffff, timer_base + EPITLR);
219 __raw_writel(EPITCR_EN | EPITCR_CLKSRC_REF_HIGH | EPITCR_WAITEN, 219 imx_writel(EPITCR_EN | EPITCR_CLKSRC_REF_HIGH | EPITCR_WAITEN,
220 timer_base + EPITCR); 220 timer_base + EPITCR);
221 221
222 /* init and register the timer to the framework */ 222 /* init and register the timer to the framework */
223 epit_clocksource_init(timer_clk); 223 epit_clocksource_init(timer_clk);
diff --git a/arch/arm/mach-imx/headsmp.S b/arch/arm/mach-imx/headsmp.S
index b5e976816b63..6c28d28b3c64 100644
--- a/arch/arm/mach-imx/headsmp.S
+++ b/arch/arm/mach-imx/headsmp.S
@@ -12,6 +12,7 @@
12 12
13#include <linux/linkage.h> 13#include <linux/linkage.h>
14#include <linux/init.h> 14#include <linux/init.h>
15#include <asm/assembler.h>
15 16
16diag_reg_offset: 17diag_reg_offset:
17 .word g_diag_reg - . 18 .word g_diag_reg - .
@@ -25,6 +26,7 @@ diag_reg_offset:
25 .endm 26 .endm
26 27
27ENTRY(v7_secondary_startup) 28ENTRY(v7_secondary_startup)
29ARM_BE8(setend be) @ go BE8 if entered LE
28 set_diag_reg 30 set_diag_reg
29 b secondary_startup 31 b secondary_startup
30ENDPROC(v7_secondary_startup) 32ENDPROC(v7_secondary_startup)
diff --git a/arch/arm/mach-imx/iomux-imx31.c b/arch/arm/mach-imx/iomux-imx31.c
index 0b5ba4bf572a..3982e91b2f3e 100644
--- a/arch/arm/mach-imx/iomux-imx31.c
+++ b/arch/arm/mach-imx/iomux-imx31.c
@@ -57,10 +57,10 @@ void mxc_iomux_mode(unsigned int pin_mode)
57 57
58 spin_lock(&gpio_mux_lock); 58 spin_lock(&gpio_mux_lock);
59 59
60 l = __raw_readl(reg); 60 l = imx_readl(reg);
61 l &= ~(0xff << (field * 8)); 61 l &= ~(0xff << (field * 8));
62 l |= mode << (field * 8); 62 l |= mode << (field * 8);
63 __raw_writel(l, reg); 63 imx_writel(l, reg);
64 64
65 spin_unlock(&gpio_mux_lock); 65 spin_unlock(&gpio_mux_lock);
66} 66}
@@ -82,10 +82,10 @@ void mxc_iomux_set_pad(enum iomux_pins pin, u32 config)
82 82
83 spin_lock(&gpio_mux_lock); 83 spin_lock(&gpio_mux_lock);
84 84
85 l = __raw_readl(reg); 85 l = imx_readl(reg);
86 l &= ~(0x1ff << (field * 10)); 86 l &= ~(0x1ff << (field * 10));
87 l |= config << (field * 10); 87 l |= config << (field * 10);
88 __raw_writel(l, reg); 88 imx_writel(l, reg);
89 89
90 spin_unlock(&gpio_mux_lock); 90 spin_unlock(&gpio_mux_lock);
91} 91}
@@ -163,12 +163,12 @@ void mxc_iomux_set_gpr(enum iomux_gp_func gp, bool en)
163 u32 l; 163 u32 l;
164 164
165 spin_lock(&gpio_mux_lock); 165 spin_lock(&gpio_mux_lock);
166 l = __raw_readl(IOMUXGPR); 166 l = imx_readl(IOMUXGPR);
167 if (en) 167 if (en)
168 l |= gp; 168 l |= gp;
169 else 169 else
170 l &= ~gp; 170 l &= ~gp;
171 171
172 __raw_writel(l, IOMUXGPR); 172 imx_writel(l, IOMUXGPR);
173 spin_unlock(&gpio_mux_lock); 173 spin_unlock(&gpio_mux_lock);
174} 174}
diff --git a/arch/arm/mach-imx/iomux-v1.c b/arch/arm/mach-imx/iomux-v1.c
index ecd543664644..7aa90c863ad9 100644
--- a/arch/arm/mach-imx/iomux-v1.c
+++ b/arch/arm/mach-imx/iomux-v1.c
@@ -38,12 +38,12 @@ static unsigned imx_iomuxv1_numports;
38 38
39static inline unsigned long imx_iomuxv1_readl(unsigned offset) 39static inline unsigned long imx_iomuxv1_readl(unsigned offset)
40{ 40{
41 return __raw_readl(imx_iomuxv1_baseaddr + offset); 41 return imx_readl(imx_iomuxv1_baseaddr + offset);
42} 42}
43 43
44static inline void imx_iomuxv1_writel(unsigned long val, unsigned offset) 44static inline void imx_iomuxv1_writel(unsigned long val, unsigned offset)
45{ 45{
46 __raw_writel(val, imx_iomuxv1_baseaddr + offset); 46 imx_writel(val, imx_iomuxv1_baseaddr + offset);
47} 47}
48 48
49static inline void imx_iomuxv1_rmwl(unsigned offset, 49static inline void imx_iomuxv1_rmwl(unsigned offset,
diff --git a/arch/arm/mach-imx/iomux-v3.c b/arch/arm/mach-imx/iomux-v3.c
index a53b2e64f98d..ca59d5f2ec92 100644
--- a/arch/arm/mach-imx/iomux-v3.c
+++ b/arch/arm/mach-imx/iomux-v3.c
@@ -45,13 +45,13 @@ int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad)
45 u32 pad_ctrl = (pad & MUX_PAD_CTRL_MASK) >> MUX_PAD_CTRL_SHIFT; 45 u32 pad_ctrl = (pad & MUX_PAD_CTRL_MASK) >> MUX_PAD_CTRL_SHIFT;
46 46
47 if (mux_ctrl_ofs) 47 if (mux_ctrl_ofs)
48 __raw_writel(mux_mode, base + mux_ctrl_ofs); 48 imx_writel(mux_mode, base + mux_ctrl_ofs);
49 49
50 if (sel_input_ofs) 50 if (sel_input_ofs)
51 __raw_writel(sel_input, base + sel_input_ofs); 51 imx_writel(sel_input, base + sel_input_ofs);
52 52
53 if (!(pad_ctrl & NO_PAD_CTRL) && pad_ctrl_ofs) 53 if (!(pad_ctrl & NO_PAD_CTRL) && pad_ctrl_ofs)
54 __raw_writel(pad_ctrl, base + pad_ctrl_ofs); 54 imx_writel(pad_ctrl, base + pad_ctrl_ofs);
55 55
56 return 0; 56 return 0;
57} 57}
diff --git a/arch/arm/mach-imx/mach-armadillo5x0.c b/arch/arm/mach-imx/mach-armadillo5x0.c
index f2060523ba48..eaee47a2fcc0 100644
--- a/arch/arm/mach-imx/mach-armadillo5x0.c
+++ b/arch/arm/mach-imx/mach-armadillo5x0.c
@@ -525,8 +525,8 @@ static void __init armadillo5x0_init(void)
525 imx31_add_mxc_nand(&armadillo5x0_nand_board_info); 525 imx31_add_mxc_nand(&armadillo5x0_nand_board_info);
526 526
527 /* set NAND page size to 2k if not configured via boot mode pins */ 527 /* set NAND page size to 2k if not configured via boot mode pins */
528 __raw_writel(__raw_readl(mx3_ccm_base + MXC_CCM_RCSR) | 528 imx_writel(imx_readl(mx3_ccm_base + MXC_CCM_RCSR) | (1 << 30),
529 (1 << 30), mx3_ccm_base + MXC_CCM_RCSR); 529 mx3_ccm_base + MXC_CCM_RCSR);
530 530
531 /* RTC */ 531 /* RTC */
532 /* Get RTC IRQ and register the chip */ 532 /* Get RTC IRQ and register the chip */
diff --git a/arch/arm/mach-imx/mach-imx25.c b/arch/arm/mach-imx/mach-imx25.c
index 9379fd0a7b4d..32dcb5e99e23 100644
--- a/arch/arm/mach-imx/mach-imx25.c
+++ b/arch/arm/mach-imx/mach-imx25.c
@@ -41,6 +41,7 @@ static const char * const imx25_dt_board_compat[] __initconst = {
41 41
42DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)") 42DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)")
43 .init_early = imx25_init_early, 43 .init_early = imx25_init_early,
44 .init_late = imx25_pm_init,
44 .init_irq = mx25_init_irq, 45 .init_irq = mx25_init_irq,
45 .dt_compat = imx25_dt_board_compat, 46 .dt_compat = imx25_dt_board_compat,
46MACHINE_END 47MACHINE_END
diff --git a/arch/arm/mach-imx/mach-imx51.c b/arch/arm/mach-imx/mach-imx51.c
index b015129e4045..6883fbaf9484 100644
--- a/arch/arm/mach-imx/mach-imx51.c
+++ b/arch/arm/mach-imx/mach-imx51.c
@@ -40,11 +40,10 @@ static void __init imx51_ipu_mipi_setup(void)
40 WARN_ON(!hsc_addr); 40 WARN_ON(!hsc_addr);
41 41
42 /* setup MIPI module to legacy mode */ 42 /* setup MIPI module to legacy mode */
43 __raw_writel(0xf00, hsc_addr); 43 imx_writel(0xf00, hsc_addr);
44 44
45 /* CSI mode: reserved; DI control mode: legacy (from Freescale BSP) */ 45 /* CSI mode: reserved; DI control mode: legacy (from Freescale BSP) */
46 __raw_writel(__raw_readl(hsc_addr + 0x800) | 0x30ff, 46 imx_writel(imx_readl(hsc_addr + 0x800) | 0x30ff, hsc_addr + 0x800);
47 hsc_addr + 0x800);
48 47
49 iounmap(hsc_addr); 48 iounmap(hsc_addr);
50} 49}
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c
index 3878494bd118..cb27d566d5ab 100644
--- a/arch/arm/mach-imx/mach-imx6q.c
+++ b/arch/arm/mach-imx/mach-imx6q.c
@@ -266,8 +266,11 @@ static void __init imx6q_init_machine(void)
266{ 266{
267 struct device *parent; 267 struct device *parent;
268 268
269 imx_print_silicon_rev(cpu_is_imx6dl() ? "i.MX6DL" : "i.MX6Q", 269 if (cpu_is_imx6q() && imx_get_soc_revision() == IMX_CHIP_REVISION_2_0)
270 imx_get_soc_revision()); 270 imx_print_silicon_rev("i.MX6QP", IMX_CHIP_REVISION_1_0);
271 else
272 imx_print_silicon_rev(cpu_is_imx6dl() ? "i.MX6DL" : "i.MX6Q",
273 imx_get_soc_revision());
271 274
272 parent = imx_soc_device_init(); 275 parent = imx_soc_device_init();
273 if (parent == NULL) 276 if (parent == NULL)
@@ -399,6 +402,7 @@ static void __init imx6q_init_irq(void)
399static const char * const imx6q_dt_compat[] __initconst = { 402static const char * const imx6q_dt_compat[] __initconst = {
400 "fsl,imx6dl", 403 "fsl,imx6dl",
401 "fsl,imx6q", 404 "fsl,imx6q",
405 "fsl,imx6qp",
402 NULL, 406 NULL,
403}; 407};
404 408
diff --git a/arch/arm/mach-imx/mach-mx27ads.c b/arch/arm/mach-imx/mach-mx27ads.c
index eb1c3477c48a..267fad23b225 100644
--- a/arch/arm/mach-imx/mach-mx27ads.c
+++ b/arch/arm/mach-imx/mach-mx27ads.c
@@ -202,9 +202,9 @@ static struct i2c_board_info mx27ads_i2c_devices[] = {
202static void vgpio_set(struct gpio_chip *chip, unsigned offset, int value) 202static void vgpio_set(struct gpio_chip *chip, unsigned offset, int value)
203{ 203{
204 if (value) 204 if (value)
205 __raw_writew(PBC_BCTRL1_LCDON, PBC_BCTRL1_SET_REG); 205 imx_writew(PBC_BCTRL1_LCDON, PBC_BCTRL1_SET_REG);
206 else 206 else
207 __raw_writew(PBC_BCTRL1_LCDON, PBC_BCTRL1_CLEAR_REG); 207 imx_writew(PBC_BCTRL1_LCDON, PBC_BCTRL1_CLEAR_REG);
208} 208}
209 209
210static int vgpio_dir_out(struct gpio_chip *chip, unsigned offset, int value) 210static int vgpio_dir_out(struct gpio_chip *chip, unsigned offset, int value)
@@ -364,7 +364,7 @@ static void __init mx27ads_timer_init(void)
364{ 364{
365 unsigned long fref = 26000000; 365 unsigned long fref = 26000000;
366 366
367 if ((__raw_readw(PBC_VERSION_REG) & CKIH_27MHZ_BIT_SET) == 0) 367 if ((imx_readw(PBC_VERSION_REG) & CKIH_27MHZ_BIT_SET) == 0)
368 fref = 27000000; 368 fref = 27000000;
369 369
370 mx27_clocks_init(fref); 370 mx27_clocks_init(fref);
diff --git a/arch/arm/mach-imx/mach-mx31ads.c b/arch/arm/mach-imx/mach-mx31ads.c
index 2b147e4bf9c9..4f2c56d44ba1 100644
--- a/arch/arm/mach-imx/mach-mx31ads.c
+++ b/arch/arm/mach-imx/mach-mx31ads.c
@@ -160,8 +160,8 @@ static void mx31ads_expio_irq_handler(struct irq_desc *desc)
160 u32 int_valid; 160 u32 int_valid;
161 u32 expio_irq; 161 u32 expio_irq;
162 162
163 imr_val = __raw_readw(PBC_INTMASK_SET_REG); 163 imr_val = imx_readw(PBC_INTMASK_SET_REG);
164 int_valid = __raw_readw(PBC_INTSTATUS_REG) & imr_val; 164 int_valid = imx_readw(PBC_INTSTATUS_REG) & imr_val;
165 165
166 expio_irq = 0; 166 expio_irq = 0;
167 for (; int_valid != 0; int_valid >>= 1, expio_irq++) { 167 for (; int_valid != 0; int_valid >>= 1, expio_irq++) {
@@ -180,8 +180,8 @@ static void expio_mask_irq(struct irq_data *d)
180{ 180{
181 u32 expio = d->hwirq; 181 u32 expio = d->hwirq;
182 /* mask the interrupt */ 182 /* mask the interrupt */
183 __raw_writew(1 << expio, PBC_INTMASK_CLEAR_REG); 183 imx_writew(1 << expio, PBC_INTMASK_CLEAR_REG);
184 __raw_readw(PBC_INTMASK_CLEAR_REG); 184 imx_readw(PBC_INTMASK_CLEAR_REG);
185} 185}
186 186
187/* 187/*
@@ -192,7 +192,7 @@ static void expio_ack_irq(struct irq_data *d)
192{ 192{
193 u32 expio = d->hwirq; 193 u32 expio = d->hwirq;
194 /* clear the interrupt status */ 194 /* clear the interrupt status */
195 __raw_writew(1 << expio, PBC_INTSTATUS_REG); 195 imx_writew(1 << expio, PBC_INTSTATUS_REG);
196} 196}
197 197
198/* 198/*
@@ -203,7 +203,7 @@ static void expio_unmask_irq(struct irq_data *d)
203{ 203{
204 u32 expio = d->hwirq; 204 u32 expio = d->hwirq;
205 /* unmask the interrupt */ 205 /* unmask the interrupt */
206 __raw_writew(1 << expio, PBC_INTMASK_SET_REG); 206 imx_writew(1 << expio, PBC_INTMASK_SET_REG);
207} 207}
208 208
209static struct irq_chip expio_irq_chip = { 209static struct irq_chip expio_irq_chip = {
@@ -226,8 +226,8 @@ static void __init mx31ads_init_expio(void)
226 mxc_iomux_alloc_pin(IOMUX_MODE(MX31_PIN_GPIO1_4, IOMUX_CONFIG_GPIO), "expio"); 226 mxc_iomux_alloc_pin(IOMUX_MODE(MX31_PIN_GPIO1_4, IOMUX_CONFIG_GPIO), "expio");
227 227
228 /* disable the interrupt and clear the status */ 228 /* disable the interrupt and clear the status */
229 __raw_writew(0xFFFF, PBC_INTMASK_CLEAR_REG); 229 imx_writew(0xFFFF, PBC_INTMASK_CLEAR_REG);
230 __raw_writew(0xFFFF, PBC_INTSTATUS_REG); 230 imx_writew(0xFFFF, PBC_INTSTATUS_REG);
231 231
232 irq_base = irq_alloc_descs(-1, 0, MXC_MAX_EXP_IO_LINES, numa_node_id()); 232 irq_base = irq_alloc_descs(-1, 0, MXC_MAX_EXP_IO_LINES, numa_node_id());
233 WARN_ON(irq_base < 0); 233 WARN_ON(irq_base < 0);
diff --git a/arch/arm/mach-imx/mach-mx31moboard.c b/arch/arm/mach-imx/mach-mx31moboard.c
index bb6f8a52a6b8..4f2d99888afd 100644
--- a/arch/arm/mach-imx/mach-mx31moboard.c
+++ b/arch/arm/mach-imx/mach-mx31moboard.c
@@ -509,7 +509,7 @@ static void mx31moboard_poweroff(void)
509 509
510 mxc_iomux_mode(MX31_PIN_WATCHDOG_RST__WATCHDOG_RST); 510 mxc_iomux_mode(MX31_PIN_WATCHDOG_RST__WATCHDOG_RST);
511 511
512 __raw_writew(1 << 6 | 1 << 2, MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR)); 512 imx_writew(1 << 6 | 1 << 2, MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR));
513} 513}
514 514
515static int mx31moboard_baseboard; 515static int mx31moboard_baseboard;
diff --git a/arch/arm/mach-imx/mach-qong.c b/arch/arm/mach-imx/mach-qong.c
index 5c2764604727..34df64f133ed 100644
--- a/arch/arm/mach-imx/mach-qong.c
+++ b/arch/arm/mach-imx/mach-qong.c
@@ -190,9 +190,9 @@ static struct platform_device qong_nand_device = {
190static void __init qong_init_nand_mtd(void) 190static void __init qong_init_nand_mtd(void)
191{ 191{
192 /* init CS */ 192 /* init CS */
193 __raw_writel(0x00004f00, MX31_IO_ADDRESS(MX31_WEIM_CSCRxU(3))); 193 imx_writel(0x00004f00, MX31_IO_ADDRESS(MX31_WEIM_CSCRxU(3)));
194 __raw_writel(0x20013b31, MX31_IO_ADDRESS(MX31_WEIM_CSCRxL(3))); 194 imx_writel(0x20013b31, MX31_IO_ADDRESS(MX31_WEIM_CSCRxL(3)));
195 __raw_writel(0x00020800, MX31_IO_ADDRESS(MX31_WEIM_CSCRxA(3))); 195 imx_writel(0x00020800, MX31_IO_ADDRESS(MX31_WEIM_CSCRxA(3)));
196 196
197 mxc_iomux_set_gpr(MUX_SDCTL_CSD1_SEL, true); 197 mxc_iomux_set_gpr(MUX_SDCTL_CSD1_SEL, true);
198 198
diff --git a/arch/arm/mach-imx/mxc.h b/arch/arm/mach-imx/mxc.h
index a5b1af6d7441..d32704256781 100644
--- a/arch/arm/mach-imx/mxc.h
+++ b/arch/arm/mach-imx/mxc.h
@@ -193,4 +193,9 @@ extern struct cpu_op *(*get_cpu_op)(int *op);
193#define cpu_is_mx3() (cpu_is_mx31() || cpu_is_mx35()) 193#define cpu_is_mx3() (cpu_is_mx31() || cpu_is_mx35())
194#define cpu_is_mx2() (cpu_is_mx21() || cpu_is_mx27()) 194#define cpu_is_mx2() (cpu_is_mx21() || cpu_is_mx27())
195 195
196#define imx_readl readl_relaxed
197#define imx_readw readw_relaxed
198#define imx_writel writel_relaxed
199#define imx_writew writew_relaxed
200
196#endif /* __ASM_ARCH_MXC_H__ */ 201#endif /* __ASM_ARCH_MXC_H__ */
diff --git a/arch/arm/mach-imx/pm-imx25.c b/arch/arm/mach-imx/pm-imx25.c
new file mode 100644
index 000000000000..8bba9fcd96f6
--- /dev/null
+++ b/arch/arm/mach-imx/pm-imx25.c
@@ -0,0 +1,37 @@
1/*
2 * Copyright 2016 NXP Semiconductors
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9#include <linux/kernel.h>
10#include <linux/suspend.h>
11#include <linux/io.h>
12
13static int imx25_suspend_enter(suspend_state_t state)
14{
15 if (!IS_ENABLED(CONFIG_PM))
16 return 0;
17
18 switch (state) {
19 case PM_SUSPEND_MEM:
20 cpu_do_idle();
21 break;
22 default:
23 return -EINVAL;
24 }
25
26 return 0;
27}
28
29static const struct platform_suspend_ops imx25_suspend_ops = {
30 .enter = imx25_suspend_enter,
31 .valid = suspend_valid_only_mem,
32};
33
34void __init imx25_pm_init(void)
35{
36 suspend_set_ops(&imx25_suspend_ops);
37}
diff --git a/arch/arm/mach-imx/pm-imx27.c b/arch/arm/mach-imx/pm-imx27.c
index 56d02d064fbf..43096c8990d4 100644
--- a/arch/arm/mach-imx/pm-imx27.c
+++ b/arch/arm/mach-imx/pm-imx27.c
@@ -19,9 +19,9 @@ static int mx27_suspend_enter(suspend_state_t state)
19 switch (state) { 19 switch (state) {
20 case PM_SUSPEND_MEM: 20 case PM_SUSPEND_MEM:
21 /* Clear MPEN and SPEN to disable MPLL/SPLL */ 21 /* Clear MPEN and SPEN to disable MPLL/SPLL */
22 cscr = __raw_readl(MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR)); 22 cscr = imx_readl(MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR));
23 cscr &= 0xFFFFFFFC; 23 cscr &= 0xFFFFFFFC;
24 __raw_writel(cscr, MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR)); 24 imx_writel(cscr, MX27_IO_ADDRESS(MX27_CCM_BASE_ADDR));
25 /* Executes WFI */ 25 /* Executes WFI */
26 cpu_do_idle(); 26 cpu_do_idle();
27 break; 27 break;
diff --git a/arch/arm/mach-imx/pm-imx3.c b/arch/arm/mach-imx/pm-imx3.c
index 6a07006ff0f4..94c0898751d8 100644
--- a/arch/arm/mach-imx/pm-imx3.c
+++ b/arch/arm/mach-imx/pm-imx3.c
@@ -22,14 +22,14 @@
22 */ 22 */
23void mx3_cpu_lp_set(enum mx3_cpu_pwr_mode mode) 23void mx3_cpu_lp_set(enum mx3_cpu_pwr_mode mode)
24{ 24{
25 int reg = __raw_readl(mx3_ccm_base + MXC_CCM_CCMR); 25 int reg = imx_readl(mx3_ccm_base + MXC_CCM_CCMR);
26 reg &= ~MXC_CCM_CCMR_LPM_MASK; 26 reg &= ~MXC_CCM_CCMR_LPM_MASK;
27 27
28 switch (mode) { 28 switch (mode) {
29 case MX3_WAIT: 29 case MX3_WAIT:
30 if (cpu_is_mx35()) 30 if (cpu_is_mx35())
31 reg |= MXC_CCM_CCMR_LPM_WAIT_MX35; 31 reg |= MXC_CCM_CCMR_LPM_WAIT_MX35;
32 __raw_writel(reg, mx3_ccm_base + MXC_CCM_CCMR); 32 imx_writel(reg, mx3_ccm_base + MXC_CCM_CCMR);
33 break; 33 break;
34 default: 34 default:
35 pr_err("Unknown cpu power mode: %d\n", mode); 35 pr_err("Unknown cpu power mode: %d\n", mode);
diff --git a/arch/arm/mach-imx/pm-imx5.c b/arch/arm/mach-imx/pm-imx5.c
index 532d4b08276d..868781fd460c 100644
--- a/arch/arm/mach-imx/pm-imx5.c
+++ b/arch/arm/mach-imx/pm-imx5.c
@@ -153,15 +153,15 @@ static void mx5_cpu_lp_set(enum mxc_cpu_pwr_mode mode)
153 int stop_mode = 0; 153 int stop_mode = 0;
154 154
155 /* always allow platform to issue a deep sleep mode request */ 155 /* always allow platform to issue a deep sleep mode request */
156 plat_lpc = __raw_readl(cortex_base + MXC_CORTEXA8_PLAT_LPC) & 156 plat_lpc = imx_readl(cortex_base + MXC_CORTEXA8_PLAT_LPC) &
157 ~(MXC_CORTEXA8_PLAT_LPC_DSM); 157 ~(MXC_CORTEXA8_PLAT_LPC_DSM);
158 ccm_clpcr = __raw_readl(ccm_base + MXC_CCM_CLPCR) & 158 ccm_clpcr = imx_readl(ccm_base + MXC_CCM_CLPCR) &
159 ~(MXC_CCM_CLPCR_LPM_MASK); 159 ~(MXC_CCM_CLPCR_LPM_MASK);
160 arm_srpgcr = __raw_readl(gpc_base + MXC_SRPG_ARM_SRPGCR) & 160 arm_srpgcr = imx_readl(gpc_base + MXC_SRPG_ARM_SRPGCR) &
161 ~(MXC_SRPGCR_PCR); 161 ~(MXC_SRPGCR_PCR);
162 empgc0 = __raw_readl(gpc_base + MXC_SRPG_EMPGC0_SRPGCR) & 162 empgc0 = imx_readl(gpc_base + MXC_SRPG_EMPGC0_SRPGCR) &
163 ~(MXC_SRPGCR_PCR); 163 ~(MXC_SRPGCR_PCR);
164 empgc1 = __raw_readl(gpc_base + MXC_SRPG_EMPGC1_SRPGCR) & 164 empgc1 = imx_readl(gpc_base + MXC_SRPG_EMPGC1_SRPGCR) &
165 ~(MXC_SRPGCR_PCR); 165 ~(MXC_SRPGCR_PCR);
166 166
167 switch (mode) { 167 switch (mode) {
@@ -196,17 +196,17 @@ static void mx5_cpu_lp_set(enum mxc_cpu_pwr_mode mode)
196 return; 196 return;
197 } 197 }
198 198
199 __raw_writel(plat_lpc, cortex_base + MXC_CORTEXA8_PLAT_LPC); 199 imx_writel(plat_lpc, cortex_base + MXC_CORTEXA8_PLAT_LPC);
200 __raw_writel(ccm_clpcr, ccm_base + MXC_CCM_CLPCR); 200 imx_writel(ccm_clpcr, ccm_base + MXC_CCM_CLPCR);
201 __raw_writel(arm_srpgcr, gpc_base + MXC_SRPG_ARM_SRPGCR); 201 imx_writel(arm_srpgcr, gpc_base + MXC_SRPG_ARM_SRPGCR);
202 __raw_writel(arm_srpgcr, gpc_base + MXC_SRPG_NEON_SRPGCR); 202 imx_writel(arm_srpgcr, gpc_base + MXC_SRPG_NEON_SRPGCR);
203 203
204 if (stop_mode) { 204 if (stop_mode) {
205 empgc0 |= MXC_SRPGCR_PCR; 205 empgc0 |= MXC_SRPGCR_PCR;
206 empgc1 |= MXC_SRPGCR_PCR; 206 empgc1 |= MXC_SRPGCR_PCR;
207 207
208 __raw_writel(empgc0, gpc_base + MXC_SRPG_EMPGC0_SRPGCR); 208 imx_writel(empgc0, gpc_base + MXC_SRPG_EMPGC0_SRPGCR);
209 __raw_writel(empgc1, gpc_base + MXC_SRPG_EMPGC1_SRPGCR); 209 imx_writel(empgc1, gpc_base + MXC_SRPG_EMPGC1_SRPGCR);
210 } 210 }
211} 211}
212 212
@@ -228,8 +228,8 @@ static int mx5_suspend_enter(suspend_state_t state)
228 flush_cache_all(); 228 flush_cache_all();
229 229
230 /*clear the EMPGC0/1 bits */ 230 /*clear the EMPGC0/1 bits */
231 __raw_writel(0, gpc_base + MXC_SRPG_EMPGC0_SRPGCR); 231 imx_writel(0, gpc_base + MXC_SRPG_EMPGC0_SRPGCR);
232 __raw_writel(0, gpc_base + MXC_SRPG_EMPGC1_SRPGCR); 232 imx_writel(0, gpc_base + MXC_SRPG_EMPGC1_SRPGCR);
233 233
234 if (imx5_suspend_in_ocram_fn) 234 if (imx5_suspend_in_ocram_fn)
235 imx5_suspend_in_ocram_fn(suspend_ocram_base); 235 imx5_suspend_in_ocram_fn(suspend_ocram_base);
diff --git a/arch/arm/mach-imx/pm-imx6.c b/arch/arm/mach-imx/pm-imx6.c
index 4470376af5f8..58924b3844df 100644
--- a/arch/arm/mach-imx/pm-imx6.c
+++ b/arch/arm/mach-imx/pm-imx6.c
@@ -561,13 +561,13 @@ static int __init imx6q_suspend_init(const struct imx6_pm_socdata *socdata)
561 goto put_node; 561 goto put_node;
562 562
563pl310_cache_map_failed: 563pl310_cache_map_failed:
564 iounmap(&pm_info->gpc_base.vbase); 564 iounmap(pm_info->gpc_base.vbase);
565gpc_map_failed: 565gpc_map_failed:
566 iounmap(&pm_info->iomuxc_base.vbase); 566 iounmap(pm_info->iomuxc_base.vbase);
567iomuxc_map_failed: 567iomuxc_map_failed:
568 iounmap(&pm_info->src_base.vbase); 568 iounmap(pm_info->src_base.vbase);
569src_map_failed: 569src_map_failed:
570 iounmap(&pm_info->mmdc_base.vbase); 570 iounmap(pm_info->mmdc_base.vbase);
571put_node: 571put_node:
572 of_node_put(node); 572 of_node_put(node);
573 573
diff --git a/arch/arm/mach-imx/src.c b/arch/arm/mach-imx/src.c
index 45f7f4e0a447..70b083fe934a 100644
--- a/arch/arm/mach-imx/src.c
+++ b/arch/arm/mach-imx/src.c
@@ -73,7 +73,7 @@ static int imx_src_reset_module(struct reset_controller_dev *rcdev,
73 return 0; 73 return 0;
74} 74}
75 75
76static struct reset_control_ops imx_src_ops = { 76static const struct reset_control_ops imx_src_ops = {
77 .reset = imx_src_reset_module, 77 .reset = imx_src_reset_module,
78}; 78};
79 79
diff --git a/arch/arm/mach-imx/system.c b/arch/arm/mach-imx/system.c
index 51c35013b673..105d1ce4ed9d 100644
--- a/arch/arm/mach-imx/system.c
+++ b/arch/arm/mach-imx/system.c
@@ -54,7 +54,7 @@ void mxc_restart(enum reboot_mode mode, const char *cmd)
54 wcr_enable = (1 << 2); 54 wcr_enable = (1 << 2);
55 55
56 /* Assert SRS signal */ 56 /* Assert SRS signal */
57 __raw_writew(wcr_enable, wdog_base); 57 imx_writew(wcr_enable, wdog_base);
58 /* 58 /*
59 * Due to imx6q errata ERR004346 (WDOG: WDOG SRS bit requires to be 59 * Due to imx6q errata ERR004346 (WDOG: WDOG SRS bit requires to be
60 * written twice), we add another two writes to ensure there must be at 60 * written twice), we add another two writes to ensure there must be at
@@ -62,8 +62,8 @@ void mxc_restart(enum reboot_mode mode, const char *cmd)
62 * the target check here, since the writes shouldn't be a huge burden 62 * the target check here, since the writes shouldn't be a huge burden
63 * for other platforms. 63 * for other platforms.
64 */ 64 */
65 __raw_writew(wcr_enable, wdog_base); 65 imx_writew(wcr_enable, wdog_base);
66 __raw_writew(wcr_enable, wdog_base); 66 imx_writew(wcr_enable, wdog_base);
67 67
68 /* wait for reset to assert... */ 68 /* wait for reset to assert... */
69 mdelay(500); 69 mdelay(500);
@@ -106,6 +106,9 @@ void __init imx_init_l2cache(void)
106 goto out; 106 goto out;
107 } 107 }
108 108
109 if (readl_relaxed(l2x0_base + L2X0_CTRL) & L2X0_CTRL_EN)
110 goto skip_if_enabled;
111
109 /* Configure the L2 PREFETCH and POWER registers */ 112 /* Configure the L2 PREFETCH and POWER registers */
110 val = readl_relaxed(l2x0_base + L310_PREFETCH_CTRL); 113 val = readl_relaxed(l2x0_base + L310_PREFETCH_CTRL);
111 val |= 0x70800000; 114 val |= 0x70800000;
@@ -122,6 +125,7 @@ void __init imx_init_l2cache(void)
122 val &= ~(1 << 30 | 1 << 23); 125 val &= ~(1 << 30 | 1 << 23);
123 writel_relaxed(val, l2x0_base + L310_PREFETCH_CTRL); 126 writel_relaxed(val, l2x0_base + L310_PREFETCH_CTRL);
124 127
128skip_if_enabled:
125 iounmap(l2x0_base); 129 iounmap(l2x0_base);
126 of_node_put(np); 130 of_node_put(np);
127 131
diff --git a/arch/arm/mach-imx/tzic.c b/arch/arm/mach-imx/tzic.c
index 4de65eeda1eb..ae23d50f7861 100644
--- a/arch/arm/mach-imx/tzic.c
+++ b/arch/arm/mach-imx/tzic.c
@@ -65,10 +65,10 @@ static int tzic_set_irq_fiq(unsigned int irq, unsigned int type)
65 return -EINVAL; 65 return -EINVAL;
66 mask = 1U << (irq & 0x1F); 66 mask = 1U << (irq & 0x1F);
67 67
68 value = __raw_readl(tzic_base + TZIC_INTSEC0(index)) | mask; 68 value = imx_readl(tzic_base + TZIC_INTSEC0(index)) | mask;
69 if (type) 69 if (type)
70 value &= ~mask; 70 value &= ~mask;
71 __raw_writel(value, tzic_base + TZIC_INTSEC0(index)); 71 imx_writel(value, tzic_base + TZIC_INTSEC0(index));
72 72
73 return 0; 73 return 0;
74} 74}
@@ -82,15 +82,15 @@ static void tzic_irq_suspend(struct irq_data *d)
82 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); 82 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
83 int idx = d->hwirq >> 5; 83 int idx = d->hwirq >> 5;
84 84
85 __raw_writel(gc->wake_active, tzic_base + TZIC_WAKEUP0(idx)); 85 imx_writel(gc->wake_active, tzic_base + TZIC_WAKEUP0(idx));
86} 86}
87 87
88static void tzic_irq_resume(struct irq_data *d) 88static void tzic_irq_resume(struct irq_data *d)
89{ 89{
90 int idx = d->hwirq >> 5; 90 int idx = d->hwirq >> 5;
91 91
92 __raw_writel(__raw_readl(tzic_base + TZIC_ENSET0(idx)), 92 imx_writel(imx_readl(tzic_base + TZIC_ENSET0(idx)),
93 tzic_base + TZIC_WAKEUP0(idx)); 93 tzic_base + TZIC_WAKEUP0(idx));
94} 94}
95 95
96#else 96#else
@@ -135,8 +135,8 @@ static void __exception_irq_entry tzic_handle_irq(struct pt_regs *regs)
135 handled = 0; 135 handled = 0;
136 136
137 for (i = 0; i < 4; i++) { 137 for (i = 0; i < 4; i++) {
138 stat = __raw_readl(tzic_base + TZIC_HIPND(i)) & 138 stat = imx_readl(tzic_base + TZIC_HIPND(i)) &
139 __raw_readl(tzic_base + TZIC_INTSEC0(i)); 139 imx_readl(tzic_base + TZIC_INTSEC0(i));
140 140
141 while (stat) { 141 while (stat) {
142 handled = 1; 142 handled = 1;
@@ -166,18 +166,18 @@ void __init tzic_init_irq(void)
166 /* put the TZIC into the reset value with 166 /* put the TZIC into the reset value with
167 * all interrupts disabled 167 * all interrupts disabled
168 */ 168 */
169 i = __raw_readl(tzic_base + TZIC_INTCNTL); 169 i = imx_readl(tzic_base + TZIC_INTCNTL);
170 170
171 __raw_writel(0x80010001, tzic_base + TZIC_INTCNTL); 171 imx_writel(0x80010001, tzic_base + TZIC_INTCNTL);
172 __raw_writel(0x1f, tzic_base + TZIC_PRIOMASK); 172 imx_writel(0x1f, tzic_base + TZIC_PRIOMASK);
173 __raw_writel(0x02, tzic_base + TZIC_SYNCCTRL); 173 imx_writel(0x02, tzic_base + TZIC_SYNCCTRL);
174 174
175 for (i = 0; i < 4; i++) 175 for (i = 0; i < 4; i++)
176 __raw_writel(0xFFFFFFFF, tzic_base + TZIC_INTSEC0(i)); 176 imx_writel(0xFFFFFFFF, tzic_base + TZIC_INTSEC0(i));
177 177
178 /* disable all interrupts */ 178 /* disable all interrupts */
179 for (i = 0; i < 4; i++) 179 for (i = 0; i < 4; i++)
180 __raw_writel(0xFFFFFFFF, tzic_base + TZIC_ENCLEAR0(i)); 180 imx_writel(0xFFFFFFFF, tzic_base + TZIC_ENCLEAR0(i));
181 181
182 /* all IRQ no FIQ Warning :: No selection */ 182 /* all IRQ no FIQ Warning :: No selection */
183 183
@@ -214,13 +214,13 @@ int tzic_enable_wake(void)
214{ 214{
215 unsigned int i; 215 unsigned int i;
216 216
217 __raw_writel(1, tzic_base + TZIC_DSMINT); 217 imx_writel(1, tzic_base + TZIC_DSMINT);
218 if (unlikely(__raw_readl(tzic_base + TZIC_DSMINT) == 0)) 218 if (unlikely(imx_readl(tzic_base + TZIC_DSMINT) == 0))
219 return -EAGAIN; 219 return -EAGAIN;
220 220
221 for (i = 0; i < 4; i++) 221 for (i = 0; i < 4; i++)
222 __raw_writel(__raw_readl(tzic_base + TZIC_ENSET0(i)), 222 imx_writel(imx_readl(tzic_base + TZIC_ENSET0(i)),
223 tzic_base + TZIC_WAKEUP0(i)); 223 tzic_base + TZIC_WAKEUP0(i));
224 224
225 return 0; 225 return 0;
226} 226}