layerscape: add linux 4.9 support
[oweals/openwrt.git] / target / linux / layerscape / patches-4.9 / 813-qe-support-layerscape.patch
1 From adb377019768396f339010ebb9e80fa8384992f7 Mon Sep 17 00:00:00 2001
2 From: Yangbo Lu <yangbo.lu@nxp.com>
3 Date: Mon, 25 Sep 2017 12:20:30 +0800
4 Subject: [PATCH] qe: support layerscape
5
6 This is a integrated patch for layerscape qe support.
7
8 Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
9 Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
10 ---
11  drivers/{soc/fsl/qe/qe_ic.c => irqchip/irq-qeic.c} | 389 +++++++++++++--------
12  drivers/net/wan/fsl_ucc_hdlc.c                     |   4 +-
13  drivers/soc/fsl/qe/Kconfig                         |   2 +-
14  drivers/soc/fsl/qe/Makefile                        |   2 +-
15  drivers/soc/fsl/qe/qe.c                            |  80 +++--
16  drivers/soc/fsl/qe/qe_ic.h                         | 103 ------
17  drivers/soc/fsl/qe/qe_io.c                         |  42 +--
18  drivers/soc/fsl/qe/qe_tdm.c                        |   8 +-
19  drivers/soc/fsl/qe/ucc.c                           |  10 +-
20  drivers/soc/fsl/qe/ucc_fast.c                      |  74 ++--
21  drivers/tty/serial/ucc_uart.c                      |   1 +
22  include/soc/fsl/qe/qe.h                            |   1 -
23  include/soc/fsl/qe/qe_ic.h                         | 139 --------
24  13 files changed, 359 insertions(+), 496 deletions(-)
25  rename drivers/{soc/fsl/qe/qe_ic.c => irqchip/irq-qeic.c} (54%)
26  delete mode 100644 drivers/soc/fsl/qe/qe_ic.h
27  delete mode 100644 include/soc/fsl/qe/qe_ic.h
28
29 diff --git a/drivers/soc/fsl/qe/qe_ic.c b/drivers/irqchip/irq-qeic.c
30 similarity index 54%
31 rename from drivers/soc/fsl/qe/qe_ic.c
32 rename to drivers/irqchip/irq-qeic.c
33 index ec2ca864..21e3b43c 100644
34 --- a/drivers/soc/fsl/qe/qe_ic.c
35 +++ b/drivers/irqchip/irq-qeic.c
36 @@ -1,7 +1,7 @@
37  /*
38 - * arch/powerpc/sysdev/qe_lib/qe_ic.c
39 + * drivers/irqchip/irq-qeic.c
40   *
41 - * Copyright (C) 2006 Freescale Semiconductor, Inc.  All rights reserved.
42 + * Copyright (C) 2016 Freescale Semiconductor, Inc.  All rights reserved.
43   *
44   * Author: Li Yang <leoli@freescale.com>
45   * Based on code from Shlomi Gridish <gridish@freescale.com>
46 @@ -18,7 +18,11 @@
47  #include <linux/of_address.h>
48  #include <linux/kernel.h>
49  #include <linux/init.h>
50 +#include <linux/irqdomain.h>
51 +#include <linux/irqchip.h>
52  #include <linux/errno.h>
53 +#include <linux/of_address.h>
54 +#include <linux/of_irq.h>
55  #include <linux/reboot.h>
56  #include <linux/slab.h>
57  #include <linux/stddef.h>
58 @@ -26,11 +30,136 @@
59  #include <linux/signal.h>
60  #include <linux/device.h>
61  #include <linux/spinlock.h>
62 -#include <asm/irq.h>
63 +#include <linux/irq.h>
64  #include <asm/io.h>
65 -#include <soc/fsl/qe/qe_ic.h>
66  
67 -#include "qe_ic.h"
68 +#define NR_QE_IC_INTS          64
69 +
70 +/* QE IC registers offset */
71 +#define QEIC_CICR              0x00
72 +#define QEIC_CIVEC             0x04
73 +#define QEIC_CRIPNR            0x08
74 +#define QEIC_CIPNR             0x0c
75 +#define QEIC_CIPXCC            0x10
76 +#define QEIC_CIPYCC            0x14
77 +#define QEIC_CIPWCC            0x18
78 +#define QEIC_CIPZCC            0x1c
79 +#define QEIC_CIMR              0x20
80 +#define QEIC_CRIMR             0x24
81 +#define QEIC_CICNR             0x28
82 +#define QEIC_CIPRTA            0x30
83 +#define QEIC_CIPRTB            0x34
84 +#define QEIC_CRICR             0x3c
85 +#define QEIC_CHIVEC            0x60
86 +
87 +/* Interrupt priority registers */
88 +#define CIPCC_SHIFT_PRI0       29
89 +#define CIPCC_SHIFT_PRI1       26
90 +#define CIPCC_SHIFT_PRI2       23
91 +#define CIPCC_SHIFT_PRI3       20
92 +#define CIPCC_SHIFT_PRI4       13
93 +#define CIPCC_SHIFT_PRI5       10
94 +#define CIPCC_SHIFT_PRI6       7
95 +#define CIPCC_SHIFT_PRI7       4
96 +
97 +/* CICR priority modes */
98 +#define CICR_GWCC              0x00040000
99 +#define CICR_GXCC              0x00020000
100 +#define CICR_GYCC              0x00010000
101 +#define CICR_GZCC              0x00080000
102 +#define CICR_GRTA              0x00200000
103 +#define CICR_GRTB              0x00400000
104 +#define CICR_HPIT_SHIFT                8
105 +#define CICR_HPIT_MASK         0x00000300
106 +#define CICR_HP_SHIFT          24
107 +#define CICR_HP_MASK           0x3f000000
108 +
109 +/* CICNR */
110 +#define CICNR_WCC1T_SHIFT      20
111 +#define CICNR_ZCC1T_SHIFT      28
112 +#define CICNR_YCC1T_SHIFT      12
113 +#define CICNR_XCC1T_SHIFT      4
114 +
115 +/* CRICR */
116 +#define CRICR_RTA1T_SHIFT      20
117 +#define CRICR_RTB1T_SHIFT      28
118 +
119 +/* Signal indicator */
120 +#define SIGNAL_MASK            3
121 +#define SIGNAL_HIGH            2
122 +#define SIGNAL_LOW             0
123 +
124 +#define NUM_OF_QE_IC_GROUPS    6
125 +
126 +/* Flags when we init the QE IC */
127 +#define QE_IC_SPREADMODE_GRP_W                 0x00000001
128 +#define QE_IC_SPREADMODE_GRP_X                 0x00000002
129 +#define QE_IC_SPREADMODE_GRP_Y                 0x00000004
130 +#define QE_IC_SPREADMODE_GRP_Z                 0x00000008
131 +#define QE_IC_SPREADMODE_GRP_RISCA             0x00000010
132 +#define QE_IC_SPREADMODE_GRP_RISCB             0x00000020
133 +
134 +#define QE_IC_LOW_SIGNAL                       0x00000100
135 +#define QE_IC_HIGH_SIGNAL                      0x00000200
136 +
137 +#define QE_IC_GRP_W_PRI0_DEST_SIGNAL_HIGH      0x00001000
138 +#define QE_IC_GRP_W_PRI1_DEST_SIGNAL_HIGH      0x00002000
139 +#define QE_IC_GRP_X_PRI0_DEST_SIGNAL_HIGH      0x00004000
140 +#define QE_IC_GRP_X_PRI1_DEST_SIGNAL_HIGH      0x00008000
141 +#define QE_IC_GRP_Y_PRI0_DEST_SIGNAL_HIGH      0x00010000
142 +#define QE_IC_GRP_Y_PRI1_DEST_SIGNAL_HIGH      0x00020000
143 +#define QE_IC_GRP_Z_PRI0_DEST_SIGNAL_HIGH      0x00040000
144 +#define QE_IC_GRP_Z_PRI1_DEST_SIGNAL_HIGH      0x00080000
145 +#define QE_IC_GRP_RISCA_PRI0_DEST_SIGNAL_HIGH  0x00100000
146 +#define QE_IC_GRP_RISCA_PRI1_DEST_SIGNAL_HIGH  0x00200000
147 +#define QE_IC_GRP_RISCB_PRI0_DEST_SIGNAL_HIGH  0x00400000
148 +#define QE_IC_GRP_RISCB_PRI1_DEST_SIGNAL_HIGH  0x00800000
149 +#define QE_IC_GRP_W_DEST_SIGNAL_SHIFT          (12)
150 +
151 +/* QE interrupt sources groups */
152 +enum qe_ic_grp_id {
153 +       QE_IC_GRP_W = 0,        /* QE interrupt controller group W */
154 +       QE_IC_GRP_X,            /* QE interrupt controller group X */
155 +       QE_IC_GRP_Y,            /* QE interrupt controller group Y */
156 +       QE_IC_GRP_Z,            /* QE interrupt controller group Z */
157 +       QE_IC_GRP_RISCA,        /* QE interrupt controller RISC group A */
158 +       QE_IC_GRP_RISCB         /* QE interrupt controller RISC group B */
159 +};
160 +
161 +struct qe_ic {
162 +       /* Control registers offset */
163 +       u32 __iomem *regs;
164 +
165 +       /* The remapper for this QEIC */
166 +       struct irq_domain *irqhost;
167 +
168 +       /* The "linux" controller struct */
169 +       struct irq_chip hc_irq;
170 +
171 +       /* VIRQ numbers of QE high/low irqs */
172 +       unsigned int virq_high;
173 +       unsigned int virq_low;
174 +};
175 +
176 +/*
177 + * QE interrupt controller internal structure
178 + */
179 +struct qe_ic_info {
180 +       /* location of this source at the QIMR register. */
181 +       u32     mask;
182 +
183 +       /* Mask register offset */
184 +       u32     mask_reg;
185 +
186 +       /*
187 +        * for grouped interrupts sources - the interrupt
188 +        * code as appears at the group priority register
189 +        */
190 +       u8      pri_code;
191 +
192 +       /* Group priority register offset */
193 +       u32     pri_reg;
194 +};
195  
196  static DEFINE_RAW_SPINLOCK(qe_ic_lock);
197  
198 @@ -175,15 +304,15 @@ static struct qe_ic_info qe_ic_info[] = {
199                 },
200  };
201  
202 -static inline u32 qe_ic_read(volatile __be32  __iomem * base, unsigned int reg)
203 +static inline u32 qe_ic_read(__be32  __iomem *base, unsigned int reg)
204  {
205 -       return in_be32(base + (reg >> 2));
206 +       return ioread32be(base + (reg >> 2));
207  }
208  
209 -static inline void qe_ic_write(volatile __be32  __iomem * base, unsigned int reg,
210 +static inline void qe_ic_write(__be32  __iomem *base, unsigned int reg,
211                                u32 value)
212  {
213 -       out_be32(base + (reg >> 2), value);
214 +       iowrite32be(value, base + (reg >> 2));
215  }
216  
217  static inline struct qe_ic *qe_ic_from_irq(unsigned int virq)
218 @@ -285,8 +414,8 @@ static const struct irq_domain_ops qe_ic_host_ops = {
219         .xlate = irq_domain_xlate_onetwocell,
220  };
221  
222 -/* Return an interrupt vector or NO_IRQ if no interrupt is pending. */
223 -unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic)
224 +/* Return an interrupt vector or 0 if no interrupt is pending. */
225 +static unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic)
226  {
227         int irq;
228  
229 @@ -296,13 +425,13 @@ unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic)
230         irq = qe_ic_read(qe_ic->regs, QEIC_CIVEC) >> 26;
231  
232         if (irq == 0)
233 -               return NO_IRQ;
234 +               return 0;
235  
236         return irq_linear_revmap(qe_ic->irqhost, irq);
237  }
238  
239 -/* Return an interrupt vector or NO_IRQ if no interrupt is pending. */
240 -unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic)
241 +/* Return an interrupt vector or 0 if no interrupt is pending. */
242 +static unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic)
243  {
244         int irq;
245  
246 @@ -312,32 +441,96 @@ unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic)
247         irq = qe_ic_read(qe_ic->regs, QEIC_CHIVEC) >> 26;
248  
249         if (irq == 0)
250 -               return NO_IRQ;
251 +               return 0;
252  
253         return irq_linear_revmap(qe_ic->irqhost, irq);
254  }
255  
256 -void __init qe_ic_init(struct device_node *node, unsigned int flags,
257 -                      void (*low_handler)(struct irq_desc *desc),
258 -                      void (*high_handler)(struct irq_desc *desc))
259 +static inline void qe_ic_cascade_low_ipic(struct irq_desc *desc)
260 +{
261 +       struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
262 +       unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic);
263 +
264 +       if (cascade_irq != 0)
265 +               generic_handle_irq(cascade_irq);
266 +}
267 +
268 +static inline void qe_ic_cascade_high_ipic(struct irq_desc *desc)
269 +{
270 +       struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
271 +       unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic);
272 +
273 +       if (cascade_irq != 0)
274 +               generic_handle_irq(cascade_irq);
275 +}
276 +
277 +static inline void qe_ic_cascade_low_mpic(struct irq_desc *desc)
278 +{
279 +       struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
280 +       unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic);
281 +       struct irq_chip *chip = irq_desc_get_chip(desc);
282 +
283 +       if (cascade_irq != 0)
284 +               generic_handle_irq(cascade_irq);
285 +
286 +       chip->irq_eoi(&desc->irq_data);
287 +}
288 +
289 +static inline void qe_ic_cascade_high_mpic(struct irq_desc *desc)
290 +{
291 +       struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
292 +       unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic);
293 +       struct irq_chip *chip = irq_desc_get_chip(desc);
294 +
295 +       if (cascade_irq != 0)
296 +               generic_handle_irq(cascade_irq);
297 +
298 +       chip->irq_eoi(&desc->irq_data);
299 +}
300 +
301 +static inline void qe_ic_cascade_muxed_mpic(struct irq_desc *desc)
302 +{
303 +       struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
304 +       unsigned int cascade_irq;
305 +       struct irq_chip *chip = irq_desc_get_chip(desc);
306 +
307 +       cascade_irq = qe_ic_get_high_irq(qe_ic);
308 +       if (cascade_irq == 0)
309 +               cascade_irq = qe_ic_get_low_irq(qe_ic);
310 +
311 +       if (cascade_irq != 0)
312 +               generic_handle_irq(cascade_irq);
313 +
314 +       chip->irq_eoi(&desc->irq_data);
315 +}
316 +
317 +static int __init qe_ic_init(struct device_node *node, unsigned int flags)
318  {
319         struct qe_ic *qe_ic;
320         struct resource res;
321 -       u32 temp = 0, ret, high_active = 0;
322 +       u32 temp = 0, high_active = 0;
323 +       int ret = 0;
324 +
325 +       if (!node)
326 +               return -ENODEV;
327  
328         ret = of_address_to_resource(node, 0, &res);
329 -       if (ret)
330 -               return;
331 +       if (ret) {
332 +               ret = -ENODEV;
333 +               goto err_put_node;
334 +       }
335  
336         qe_ic = kzalloc(sizeof(*qe_ic), GFP_KERNEL);
337 -       if (qe_ic == NULL)
338 -               return;
339 +       if (qe_ic == NULL) {
340 +               ret = -ENOMEM;
341 +               goto err_put_node;
342 +       }
343  
344         qe_ic->irqhost = irq_domain_add_linear(node, NR_QE_IC_INTS,
345                                                &qe_ic_host_ops, qe_ic);
346         if (qe_ic->irqhost == NULL) {
347 -               kfree(qe_ic);
348 -               return;
349 +               ret = -ENOMEM;
350 +               goto err_free_qe_ic;
351         }
352  
353         qe_ic->regs = ioremap(res.start, resource_size(&res));
354 @@ -347,10 +540,10 @@ void __init qe_ic_init(struct device_node *node, unsigned int flags,
355         qe_ic->virq_high = irq_of_parse_and_map(node, 0);
356         qe_ic->virq_low = irq_of_parse_and_map(node, 1);
357  
358 -       if (qe_ic->virq_low == NO_IRQ) {
359 -               printk(KERN_ERR "Failed to map QE_IC low IRQ\n");
360 -               kfree(qe_ic);
361 -               return;
362 +       if (qe_ic->virq_low == 0) {
363 +               pr_err("Failed to map QE_IC low IRQ\n");
364 +               ret = -ENOMEM;
365 +               goto err_domain_remove;
366         }
367  
368         /* default priority scheme is grouped. If spread mode is    */
369 @@ -377,136 +570,36 @@ void __init qe_ic_init(struct device_node *node, unsigned int flags,
370         qe_ic_write(qe_ic->regs, QEIC_CICR, temp);
371  
372         irq_set_handler_data(qe_ic->virq_low, qe_ic);
373 -       irq_set_chained_handler(qe_ic->virq_low, low_handler);
374 +       irq_set_chained_handler(qe_ic->virq_low, qe_ic_cascade_low_mpic);
375  
376 -       if (qe_ic->virq_high != NO_IRQ &&
377 +       if (qe_ic->virq_high != 0 &&
378                         qe_ic->virq_high != qe_ic->virq_low) {
379                 irq_set_handler_data(qe_ic->virq_high, qe_ic);
380 -               irq_set_chained_handler(qe_ic->virq_high, high_handler);
381 -       }
382 -}
383 -
384 -void qe_ic_set_highest_priority(unsigned int virq, int high)
385 -{
386 -       struct qe_ic *qe_ic = qe_ic_from_irq(virq);
387 -       unsigned int src = virq_to_hw(virq);
388 -       u32 temp = 0;
389 -
390 -       temp = qe_ic_read(qe_ic->regs, QEIC_CICR);
391 -
392 -       temp &= ~CICR_HP_MASK;
393 -       temp |= src << CICR_HP_SHIFT;
394 -
395 -       temp &= ~CICR_HPIT_MASK;
396 -       temp |= (high ? SIGNAL_HIGH : SIGNAL_LOW) << CICR_HPIT_SHIFT;
397 -
398 -       qe_ic_write(qe_ic->regs, QEIC_CICR, temp);
399 -}
400 -
401 -/* Set Priority level within its group, from 1 to 8 */
402 -int qe_ic_set_priority(unsigned int virq, unsigned int priority)
403 -{
404 -       struct qe_ic *qe_ic = qe_ic_from_irq(virq);
405 -       unsigned int src = virq_to_hw(virq);
406 -       u32 temp;
407 -
408 -       if (priority > 8 || priority == 0)
409 -               return -EINVAL;
410 -       if (WARN_ONCE(src >= ARRAY_SIZE(qe_ic_info),
411 -                     "%s: Invalid hw irq number for QEIC\n", __func__))
412 -               return -EINVAL;
413 -       if (qe_ic_info[src].pri_reg == 0)
414 -               return -EINVAL;
415 -
416 -       temp = qe_ic_read(qe_ic->regs, qe_ic_info[src].pri_reg);
417 -
418 -       if (priority < 4) {
419 -               temp &= ~(0x7 << (32 - priority * 3));
420 -               temp |= qe_ic_info[src].pri_code << (32 - priority * 3);
421 -       } else {
422 -               temp &= ~(0x7 << (24 - priority * 3));
423 -               temp |= qe_ic_info[src].pri_code << (24 - priority * 3);
424 +               irq_set_chained_handler(qe_ic->virq_high,
425 +                                       qe_ic_cascade_high_mpic);
426         }
427 -
428 -       qe_ic_write(qe_ic->regs, qe_ic_info[src].pri_reg, temp);
429 -
430 +       of_node_put(node);
431         return 0;
432 -}
433 -
434 -/* Set a QE priority to use high irq, only priority 1~2 can use high irq */
435 -int qe_ic_set_high_priority(unsigned int virq, unsigned int priority, int high)
436 -{
437 -       struct qe_ic *qe_ic = qe_ic_from_irq(virq);
438 -       unsigned int src = virq_to_hw(virq);
439 -       u32 temp, control_reg = QEIC_CICNR, shift = 0;
440 -
441 -       if (priority > 2 || priority == 0)
442 -               return -EINVAL;
443 -       if (WARN_ONCE(src >= ARRAY_SIZE(qe_ic_info),
444 -                     "%s: Invalid hw irq number for QEIC\n", __func__))
445 -               return -EINVAL;
446 -
447 -       switch (qe_ic_info[src].pri_reg) {
448 -       case QEIC_CIPZCC:
449 -               shift = CICNR_ZCC1T_SHIFT;
450 -               break;
451 -       case QEIC_CIPWCC:
452 -               shift = CICNR_WCC1T_SHIFT;
453 -               break;
454 -       case QEIC_CIPYCC:
455 -               shift = CICNR_YCC1T_SHIFT;
456 -               break;
457 -       case QEIC_CIPXCC:
458 -               shift = CICNR_XCC1T_SHIFT;
459 -               break;
460 -       case QEIC_CIPRTA:
461 -               shift = CRICR_RTA1T_SHIFT;
462 -               control_reg = QEIC_CRICR;
463 -               break;
464 -       case QEIC_CIPRTB:
465 -               shift = CRICR_RTB1T_SHIFT;
466 -               control_reg = QEIC_CRICR;
467 -               break;
468 -       default:
469 -               return -EINVAL;
470 -       }
471 -
472 -       shift += (2 - priority) * 2;
473 -       temp = qe_ic_read(qe_ic->regs, control_reg);
474 -       temp &= ~(SIGNAL_MASK << shift);
475 -       temp |= (high ? SIGNAL_HIGH : SIGNAL_LOW) << shift;
476 -       qe_ic_write(qe_ic->regs, control_reg, temp);
477  
478 -       return 0;
479 +err_domain_remove:
480 +       irq_domain_remove(qe_ic->irqhost);
481 +err_free_qe_ic:
482 +       kfree(qe_ic);
483 +err_put_node:
484 +       of_node_put(node);
485 +       return ret;
486  }
487  
488 -static struct bus_type qe_ic_subsys = {
489 -       .name = "qe_ic",
490 -       .dev_name = "qe_ic",
491 -};
492 -
493 -static struct device device_qe_ic = {
494 -       .id = 0,
495 -       .bus = &qe_ic_subsys,
496 -};
497 -
498 -static int __init init_qe_ic_sysfs(void)
499 +static int __init init_qe_ic(struct device_node *node,
500 +                            struct device_node *parent)
501  {
502 -       int rc;
503 +       int ret;
504  
505 -       printk(KERN_DEBUG "Registering qe_ic with sysfs...\n");
506 +       ret = qe_ic_init(node, 0);
507 +       if (ret)
508 +               return ret;
509  
510 -       rc = subsys_system_register(&qe_ic_subsys, NULL);
511 -       if (rc) {
512 -               printk(KERN_ERR "Failed registering qe_ic sys class\n");
513 -               return -ENODEV;
514 -       }
515 -       rc = device_register(&device_qe_ic);
516 -       if (rc) {
517 -               printk(KERN_ERR "Failed registering qe_ic sys device\n");
518 -               return -ENODEV;
519 -       }
520         return 0;
521  }
522  
523 -subsys_initcall(init_qe_ic_sysfs);
524 +IRQCHIP_DECLARE(qeic, "fsl,qe-ic", init_qe_ic);
525 diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c
526 index 65647533..27e11404 100644
527 --- a/drivers/net/wan/fsl_ucc_hdlc.c
528 +++ b/drivers/net/wan/fsl_ucc_hdlc.c
529 @@ -381,8 +381,8 @@ static netdev_tx_t ucc_hdlc_tx(struct sk_buff *skb, struct net_device *dev)
530         /* set bd status and length */
531         bd_status = (bd_status & T_W_S) | T_R_S | T_I_S | T_L_S | T_TC_S;
532  
533 -       iowrite16be(bd_status, &bd->status);
534         iowrite16be(skb->len, &bd->length);
535 +       iowrite16be(bd_status, &bd->status);
536  
537         /* Move to next BD in the ring */
538         if (!(bd_status & T_W_S))
539 @@ -457,7 +457,7 @@ static int hdlc_rx_done(struct ucc_hdlc_private *priv, int rx_work_limit)
540         struct sk_buff *skb;
541         hdlc_device *hdlc = dev_to_hdlc(dev);
542         struct qe_bd *bd;
543 -       u32 bd_status;
544 +       u16 bd_status;
545         u16 length, howmany = 0;
546         u8 *bdbuffer;
547         int i;
548 diff --git a/drivers/soc/fsl/qe/Kconfig b/drivers/soc/fsl/qe/Kconfig
549 index 73a2e08b..b26b6431 100644
550 --- a/drivers/soc/fsl/qe/Kconfig
551 +++ b/drivers/soc/fsl/qe/Kconfig
552 @@ -4,7 +4,7 @@
553  
554  config QUICC_ENGINE
555         bool "Freescale QUICC Engine (QE) Support"
556 -       depends on FSL_SOC && PPC32
557 +       depends on OF && HAS_IOMEM
558         select GENERIC_ALLOCATOR
559         select CRC32
560         help
561 diff --git a/drivers/soc/fsl/qe/Makefile b/drivers/soc/fsl/qe/Makefile
562 index 2031d385..51e47264 100644
563 --- a/drivers/soc/fsl/qe/Makefile
564 +++ b/drivers/soc/fsl/qe/Makefile
565 @@ -1,7 +1,7 @@
566  #
567  # Makefile for the linux ppc-specific parts of QE
568  #
569 -obj-$(CONFIG_QUICC_ENGINE)+= qe.o qe_common.o qe_ic.o qe_io.o
570 +obj-$(CONFIG_QUICC_ENGINE)+= qe.o qe_common.o qe_io.o
571  obj-$(CONFIG_CPM)      += qe_common.o
572  obj-$(CONFIG_UCC)      += ucc.o
573  obj-$(CONFIG_UCC_SLOW) += ucc_slow.o
574 diff --git a/drivers/soc/fsl/qe/qe.c b/drivers/soc/fsl/qe/qe.c
575 index 2707a827..2b53e852 100644
576 --- a/drivers/soc/fsl/qe/qe.c
577 +++ b/drivers/soc/fsl/qe/qe.c
578 @@ -33,8 +33,6 @@
579  #include <asm/pgtable.h>
580  #include <soc/fsl/qe/immap_qe.h>
581  #include <soc/fsl/qe/qe.h>
582 -#include <asm/prom.h>
583 -#include <asm/rheap.h>
584  
585  static void qe_snums_init(void);
586  static int qe_sdma_init(void);
587 @@ -109,15 +107,27 @@ void qe_reset(void)
588                 panic("sdma init failed!");
589  }
590  
591 +/* issue commands to QE, return 0 on success while -EIO on error
592 + *
593 + * @cmd: the command code, should be QE_INIT_TX_RX, QE_STOP_TX and so on
594 + * @device: which sub-block will run the command, QE_CR_SUBBLOCK_UCCFAST1 - 8
595 + * , QE_CR_SUBBLOCK_UCCSLOW1 - 8, QE_CR_SUBBLOCK_MCC1 - 3,
596 + * QE_CR_SUBBLOCK_IDMA1 - 4 and such on.
597 + * @mcn_protocol: specifies mode for the command for non-MCC, should be
598 + * QE_CR_PROTOCOL_HDLC_TRANSPARENT, QE_CR_PROTOCOL_QMC, QE_CR_PROTOCOL_UART
599 + * and such on.
600 + * @cmd_input: command related data.
601 + */
602  int qe_issue_cmd(u32 cmd, u32 device, u8 mcn_protocol, u32 cmd_input)
603  {
604         unsigned long flags;
605         u8 mcn_shift = 0, dev_shift = 0;
606 -       u32 ret;
607 +       int ret;
608 +       int i;
609  
610         spin_lock_irqsave(&qe_lock, flags);
611         if (cmd == QE_RESET) {
612 -               out_be32(&qe_immr->cp.cecr, (u32) (cmd | QE_CR_FLG));
613 +               iowrite32be((cmd | QE_CR_FLG), &qe_immr->cp.cecr);
614         } else {
615                 if (cmd == QE_ASSIGN_PAGE) {
616                         /* Here device is the SNUM, not sub-block */
617 @@ -134,20 +144,26 @@ int qe_issue_cmd(u32 cmd, u32 device, u8 mcn_protocol, u32 cmd_input)
618                                 mcn_shift = QE_CR_MCN_NORMAL_SHIFT;
619                 }
620  
621 -               out_be32(&qe_immr->cp.cecdr, cmd_input);
622 -               out_be32(&qe_immr->cp.cecr,
623 -                        (cmd | QE_CR_FLG | ((u32) device << dev_shift) | (u32)
624 -                         mcn_protocol << mcn_shift));
625 +               iowrite32be(cmd_input, &qe_immr->cp.cecdr);
626 +               iowrite32be((cmd | QE_CR_FLG | ((u32)device << dev_shift) |
627 +                           (u32)mcn_protocol << mcn_shift), &qe_immr->cp.cecr);
628         }
629  
630         /* wait for the QE_CR_FLG to clear */
631 -       ret = spin_event_timeout((in_be32(&qe_immr->cp.cecr) & QE_CR_FLG) == 0,
632 -                          100, 0);
633 +       ret = -EIO;
634 +       for (i = 0; i < 100; i++) {
635 +               if ((ioread32be(&qe_immr->cp.cecr) & QE_CR_FLG) == 0) {
636 +                       ret = 0;
637 +                       break;
638 +               }
639 +               udelay(1);
640 +       }
641 +
642         /* On timeout (e.g. failure), the expression will be false (ret == 0),
643            otherwise it will be true (ret == 1). */
644         spin_unlock_irqrestore(&qe_lock, flags);
645  
646 -       return ret == 1;
647 +       return ret;
648  }
649  EXPORT_SYMBOL(qe_issue_cmd);
650  
651 @@ -166,8 +182,8 @@ static unsigned int brg_clk = 0;
652  unsigned int qe_get_brg_clk(void)
653  {
654         struct device_node *qe;
655 -       int size;
656 -       const u32 *prop;
657 +       u32 val;
658 +       int ret;
659  
660         if (brg_clk)
661                 return brg_clk;
662 @@ -179,9 +195,9 @@ unsigned int qe_get_brg_clk(void)
663                         return brg_clk;
664         }
665  
666 -       prop = of_get_property(qe, "brg-frequency", &size);
667 -       if (prop && size == sizeof(*prop))
668 -               brg_clk = *prop;
669 +       ret = of_property_read_u32(qe, "brg-frequency", &val);
670 +       if (!ret)
671 +               brg_clk = val;
672  
673         of_node_put(qe);
674  
675 @@ -221,7 +237,7 @@ int qe_setbrg(enum qe_clock brg, unsigned int rate, unsigned int multiplier)
676         tempval = ((divisor - 1) << QE_BRGC_DIVISOR_SHIFT) |
677                 QE_BRGC_ENABLE | div16;
678  
679 -       out_be32(&qe_immr->brg.brgc[brg - QE_BRG1], tempval);
680 +       iowrite32be(tempval, &qe_immr->brg.brgc[brg - QE_BRG1]);
681  
682         return 0;
683  }
684 @@ -355,9 +371,9 @@ static int qe_sdma_init(void)
685                         return -ENOMEM;
686         }
687  
688 -       out_be32(&sdma->sdebcr, (u32) sdma_buf_offset & QE_SDEBCR_BA_MASK);
689 -       out_be32(&sdma->sdmr, (QE_SDMR_GLB_1_MSK |
690 -                                       (0x1 << QE_SDMR_CEN_SHIFT)));
691 +       iowrite32be((u32)sdma_buf_offset & QE_SDEBCR_BA_MASK, &sdma->sdebcr);
692 +       iowrite32be((QE_SDMR_GLB_1_MSK | (0x1 << QE_SDMR_CEN_SHIFT)),
693 +                   &sdma->sdmr);
694  
695         return 0;
696  }
697 @@ -395,14 +411,14 @@ static void qe_upload_microcode(const void *base,
698                         "uploading microcode '%s'\n", ucode->id);
699  
700         /* Use auto-increment */
701 -       out_be32(&qe_immr->iram.iadd, be32_to_cpu(ucode->iram_offset) |
702 -               QE_IRAM_IADD_AIE | QE_IRAM_IADD_BADDR);
703 +       iowrite32be(be32_to_cpu(ucode->iram_offset) | QE_IRAM_IADD_AIE |
704 +                   QE_IRAM_IADD_BADDR, &qe_immr->iram.iadd);
705  
706         for (i = 0; i < be32_to_cpu(ucode->count); i++)
707 -               out_be32(&qe_immr->iram.idata, be32_to_cpu(code[i]));
708 +               iowrite32be(be32_to_cpu(code[i]), &qe_immr->iram.idata);
709         
710         /* Set I-RAM Ready Register */
711 -       out_be32(&qe_immr->iram.iready, be32_to_cpu(QE_IRAM_READY));
712 +       iowrite32be(be32_to_cpu(QE_IRAM_READY), &qe_immr->iram.iready);
713  }
714  
715  /*
716 @@ -487,7 +503,7 @@ int qe_upload_firmware(const struct qe_firmware *firmware)
717          * If the microcode calls for it, split the I-RAM.
718          */
719         if (!firmware->split)
720 -               setbits16(&qe_immr->cp.cercr, QE_CP_CERCR_CIR);
721 +               qe_setbits16(&qe_immr->cp.cercr, QE_CP_CERCR_CIR);
722  
723         if (firmware->soc.model)
724                 printk(KERN_INFO
725 @@ -521,11 +537,11 @@ int qe_upload_firmware(const struct qe_firmware *firmware)
726                         u32 trap = be32_to_cpu(ucode->traps[j]);
727  
728                         if (trap)
729 -                               out_be32(&qe_immr->rsp[i].tibcr[j], trap);
730 +                               iowrite32be(trap, &qe_immr->rsp[i].tibcr[j]);
731                 }
732  
733                 /* Enable traps */
734 -               out_be32(&qe_immr->rsp[i].eccr, be32_to_cpu(ucode->eccr));
735 +               iowrite32be(be32_to_cpu(ucode->eccr), &qe_immr->rsp[i].eccr);
736         }
737  
738         qe_firmware_uploaded = 1;
739 @@ -644,9 +660,9 @@ EXPORT_SYMBOL(qe_get_num_of_risc);
740  unsigned int qe_get_num_of_snums(void)
741  {
742         struct device_node *qe;
743 -       int size;
744         unsigned int num_of_snums;
745 -       const u32 *prop;
746 +       u32 val;
747 +       int ret;
748  
749         num_of_snums = 28; /* The default number of snum for threads is 28 */
750         qe = of_find_compatible_node(NULL, NULL, "fsl,qe");
751 @@ -660,9 +676,9 @@ unsigned int qe_get_num_of_snums(void)
752                         return num_of_snums;
753         }
754  
755 -       prop = of_get_property(qe, "fsl,qe-num-snums", &size);
756 -       if (prop && size == sizeof(*prop)) {
757 -               num_of_snums = *prop;
758 +       ret = of_property_read_u32(qe, "fsl,qe-num-snums", &val);
759 +       if (!ret) {
760 +               num_of_snums = val;
761                 if ((num_of_snums < 28) || (num_of_snums > QE_NUM_OF_SNUM)) {
762                         /* No QE ever has fewer than 28 SNUMs */
763                         pr_err("QE: number of snum is invalid\n");
764 diff --git a/drivers/soc/fsl/qe/qe_ic.h b/drivers/soc/fsl/qe/qe_ic.h
765 deleted file mode 100644
766 index 926a2ed4..00000000
767 --- a/drivers/soc/fsl/qe/qe_ic.h
768 +++ /dev/null
769 @@ -1,103 +0,0 @@
770 -/*
771 - * drivers/soc/fsl/qe/qe_ic.h
772 - *
773 - * QUICC ENGINE Interrupt Controller Header
774 - *
775 - * Copyright (C) 2006 Freescale Semiconductor, Inc. All rights reserved.
776 - *
777 - * Author: Li Yang <leoli@freescale.com>
778 - * Based on code from Shlomi Gridish <gridish@freescale.com>
779 - *
780 - * This program is free software; you can redistribute  it and/or modify it
781 - * under  the terms of  the GNU General  Public License as published by the
782 - * Free Software Foundation;  either version 2 of the  License, or (at your
783 - * option) any later version.
784 - */
785 -#ifndef _POWERPC_SYSDEV_QE_IC_H
786 -#define _POWERPC_SYSDEV_QE_IC_H
787 -
788 -#include <soc/fsl/qe/qe_ic.h>
789 -
790 -#define NR_QE_IC_INTS          64
791 -
792 -/* QE IC registers offset */
793 -#define QEIC_CICR              0x00
794 -#define QEIC_CIVEC             0x04
795 -#define QEIC_CRIPNR            0x08
796 -#define QEIC_CIPNR             0x0c
797 -#define QEIC_CIPXCC            0x10
798 -#define QEIC_CIPYCC            0x14
799 -#define QEIC_CIPWCC            0x18
800 -#define QEIC_CIPZCC            0x1c
801 -#define QEIC_CIMR              0x20
802 -#define QEIC_CRIMR             0x24
803 -#define QEIC_CICNR             0x28
804 -#define QEIC_CIPRTA            0x30
805 -#define QEIC_CIPRTB            0x34
806 -#define QEIC_CRICR             0x3c
807 -#define QEIC_CHIVEC            0x60
808 -
809 -/* Interrupt priority registers */
810 -#define CIPCC_SHIFT_PRI0       29
811 -#define CIPCC_SHIFT_PRI1       26
812 -#define CIPCC_SHIFT_PRI2       23
813 -#define CIPCC_SHIFT_PRI3       20
814 -#define CIPCC_SHIFT_PRI4       13
815 -#define CIPCC_SHIFT_PRI5       10
816 -#define CIPCC_SHIFT_PRI6       7
817 -#define CIPCC_SHIFT_PRI7       4
818 -
819 -/* CICR priority modes */
820 -#define CICR_GWCC              0x00040000
821 -#define CICR_GXCC              0x00020000
822 -#define CICR_GYCC              0x00010000
823 -#define CICR_GZCC              0x00080000
824 -#define CICR_GRTA              0x00200000
825 -#define CICR_GRTB              0x00400000
826 -#define CICR_HPIT_SHIFT                8
827 -#define CICR_HPIT_MASK         0x00000300
828 -#define CICR_HP_SHIFT          24
829 -#define CICR_HP_MASK           0x3f000000
830 -
831 -/* CICNR */
832 -#define CICNR_WCC1T_SHIFT      20
833 -#define CICNR_ZCC1T_SHIFT      28
834 -#define CICNR_YCC1T_SHIFT      12
835 -#define CICNR_XCC1T_SHIFT      4
836 -
837 -/* CRICR */
838 -#define CRICR_RTA1T_SHIFT      20
839 -#define CRICR_RTB1T_SHIFT      28
840 -
841 -/* Signal indicator */
842 -#define SIGNAL_MASK            3
843 -#define SIGNAL_HIGH            2
844 -#define SIGNAL_LOW             0
845 -
846 -struct qe_ic {
847 -       /* Control registers offset */
848 -       volatile u32 __iomem *regs;
849 -
850 -       /* The remapper for this QEIC */
851 -       struct irq_domain *irqhost;
852 -
853 -       /* The "linux" controller struct */
854 -       struct irq_chip hc_irq;
855 -
856 -       /* VIRQ numbers of QE high/low irqs */
857 -       unsigned int virq_high;
858 -       unsigned int virq_low;
859 -};
860 -
861 -/*
862 - * QE interrupt controller internal structure
863 - */
864 -struct qe_ic_info {
865 -       u32     mask;     /* location of this source at the QIMR register. */
866 -       u32     mask_reg; /* Mask register offset */
867 -       u8      pri_code; /* for grouped interrupts sources - the interrupt
868 -                            code as appears at the group priority register */
869 -       u32     pri_reg;  /* Group priority register offset */
870 -};
871 -
872 -#endif /* _POWERPC_SYSDEV_QE_IC_H */
873 diff --git a/drivers/soc/fsl/qe/qe_io.c b/drivers/soc/fsl/qe/qe_io.c
874 index 7ae59abc..8966e8b6 100644
875 --- a/drivers/soc/fsl/qe/qe_io.c
876 +++ b/drivers/soc/fsl/qe/qe_io.c
877 @@ -22,8 +22,6 @@
878  
879  #include <asm/io.h>
880  #include <soc/fsl/qe/qe.h>
881 -#include <asm/prom.h>
882 -#include <sysdev/fsl_soc.h>
883  
884  #undef DEBUG
885  
886 @@ -61,16 +59,16 @@ void __par_io_config_pin(struct qe_pio_regs __iomem *par_io, u8 pin, int dir,
887         pin_mask1bit = (u32) (1 << (QE_PIO_PINS - (pin + 1)));
888  
889         /* Set open drain, if required */
890 -       tmp_val = in_be32(&par_io->cpodr);
891 +       tmp_val = ioread32be(&par_io->cpodr);
892         if (open_drain)
893 -               out_be32(&par_io->cpodr, pin_mask1bit | tmp_val);
894 +               iowrite32be(pin_mask1bit | tmp_val, &par_io->cpodr);
895         else
896 -               out_be32(&par_io->cpodr, ~pin_mask1bit & tmp_val);
897 +               iowrite32be(~pin_mask1bit & tmp_val, &par_io->cpodr);
898  
899         /* define direction */
900         tmp_val = (pin > (QE_PIO_PINS / 2) - 1) ?
901 -               in_be32(&par_io->cpdir2) :
902 -               in_be32(&par_io->cpdir1);
903 +               ioread32be(&par_io->cpdir2) :
904 +               ioread32be(&par_io->cpdir1);
905  
906         /* get all bits mask for 2 bit per port */
907         pin_mask2bits = (u32) (0x3 << (QE_PIO_PINS -
908 @@ -82,34 +80,30 @@ void __par_io_config_pin(struct qe_pio_regs __iomem *par_io, u8 pin, int dir,
909  
910         /* clear and set 2 bits mask */
911         if (pin > (QE_PIO_PINS / 2) - 1) {
912 -               out_be32(&par_io->cpdir2,
913 -                        ~pin_mask2bits & tmp_val);
914 +               iowrite32be(~pin_mask2bits & tmp_val, &par_io->cpdir2);
915                 tmp_val &= ~pin_mask2bits;
916 -               out_be32(&par_io->cpdir2, new_mask2bits | tmp_val);
917 +               iowrite32be(new_mask2bits | tmp_val, &par_io->cpdir2);
918         } else {
919 -               out_be32(&par_io->cpdir1,
920 -                        ~pin_mask2bits & tmp_val);
921 +               iowrite32be(~pin_mask2bits & tmp_val, &par_io->cpdir1);
922                 tmp_val &= ~pin_mask2bits;
923 -               out_be32(&par_io->cpdir1, new_mask2bits | tmp_val);
924 +               iowrite32be(new_mask2bits | tmp_val, &par_io->cpdir1);
925         }
926         /* define pin assignment */
927         tmp_val = (pin > (QE_PIO_PINS / 2) - 1) ?
928 -               in_be32(&par_io->cppar2) :
929 -               in_be32(&par_io->cppar1);
930 +               ioread32be(&par_io->cppar2) :
931 +               ioread32be(&par_io->cppar1);
932  
933         new_mask2bits = (u32) (assignment << (QE_PIO_PINS -
934                         (pin % (QE_PIO_PINS / 2) + 1) * 2));
935         /* clear and set 2 bits mask */
936         if (pin > (QE_PIO_PINS / 2) - 1) {
937 -               out_be32(&par_io->cppar2,
938 -                        ~pin_mask2bits & tmp_val);
939 +               iowrite32be(~pin_mask2bits & tmp_val, &par_io->cppar2);
940                 tmp_val &= ~pin_mask2bits;
941 -               out_be32(&par_io->cppar2, new_mask2bits | tmp_val);
942 +               iowrite32be(new_mask2bits | tmp_val, &par_io->cppar2);
943         } else {
944 -               out_be32(&par_io->cppar1,
945 -                        ~pin_mask2bits & tmp_val);
946 +               iowrite32be(~pin_mask2bits & tmp_val, &par_io->cppar1);
947                 tmp_val &= ~pin_mask2bits;
948 -               out_be32(&par_io->cppar1, new_mask2bits | tmp_val);
949 +               iowrite32be(new_mask2bits | tmp_val, &par_io->cppar1);
950         }
951  }
952  EXPORT_SYMBOL(__par_io_config_pin);
953 @@ -137,12 +131,12 @@ int par_io_data_set(u8 port, u8 pin, u8 val)
954         /* calculate pin location */
955         pin_mask = (u32) (1 << (QE_PIO_PINS - 1 - pin));
956  
957 -       tmp_val = in_be32(&par_io[port].cpdata);
958 +       tmp_val = ioread32be(&par_io[port].cpdata);
959  
960         if (val == 0)           /* clear */
961 -               out_be32(&par_io[port].cpdata, ~pin_mask & tmp_val);
962 +               iowrite32be(~pin_mask & tmp_val, &par_io[port].cpdata);
963         else                    /* set */
964 -               out_be32(&par_io[port].cpdata, pin_mask | tmp_val);
965 +               iowrite32be(pin_mask | tmp_val, &par_io[port].cpdata);
966  
967         return 0;
968  }
969 diff --git a/drivers/soc/fsl/qe/qe_tdm.c b/drivers/soc/fsl/qe/qe_tdm.c
970 index a1048b44..818e6798 100644
971 --- a/drivers/soc/fsl/qe/qe_tdm.c
972 +++ b/drivers/soc/fsl/qe/qe_tdm.c
973 @@ -227,10 +227,10 @@ void ucc_tdm_init(struct ucc_tdm *utdm, struct ucc_tdm_info *ut_info)
974                                     &siram[siram_entry_id * 32 + 0x200 +  i]);
975         }
976  
977 -       setbits16(&siram[(siram_entry_id * 32) + (utdm->num_of_ts - 1)],
978 -                 SIR_LAST);
979 -       setbits16(&siram[(siram_entry_id * 32) + 0x200 + (utdm->num_of_ts - 1)],
980 -                 SIR_LAST);
981 +       qe_setbits16(&siram[(siram_entry_id * 32) + (utdm->num_of_ts - 1)],
982 +                    SIR_LAST);
983 +       qe_setbits16(&siram[(siram_entry_id * 32) + 0x200 +
984 +                    (utdm->num_of_ts - 1)], SIR_LAST);
985  
986         /* Set SIxMR register */
987         sixmr = SIMR_SAD(siram_entry_id);
988 diff --git a/drivers/soc/fsl/qe/ucc.c b/drivers/soc/fsl/qe/ucc.c
989 index c646d871..bc64b834 100644
990 --- a/drivers/soc/fsl/qe/ucc.c
991 +++ b/drivers/soc/fsl/qe/ucc.c
992 @@ -39,7 +39,7 @@ int ucc_set_qe_mux_mii_mng(unsigned int ucc_num)
993                 return -EINVAL;
994  
995         spin_lock_irqsave(&cmxgcr_lock, flags);
996 -       clrsetbits_be32(&qe_immr->qmx.cmxgcr, QE_CMXGCR_MII_ENET_MNG,
997 +       qe_clrsetbits32(&qe_immr->qmx.cmxgcr, QE_CMXGCR_MII_ENET_MNG,
998                 ucc_num << QE_CMXGCR_MII_ENET_MNG_SHIFT);
999         spin_unlock_irqrestore(&cmxgcr_lock, flags);
1000  
1001 @@ -84,7 +84,7 @@ int ucc_set_type(unsigned int ucc_num, enum ucc_speed_type speed)
1002                 return -EINVAL;
1003         }
1004  
1005 -       clrsetbits_8(guemr, UCC_GUEMR_MODE_MASK,
1006 +       qe_clrsetbits8(guemr, UCC_GUEMR_MODE_MASK,
1007                 UCC_GUEMR_SET_RESERVED3 | speed);
1008  
1009         return 0;
1010 @@ -113,9 +113,9 @@ int ucc_mux_set_grant_tsa_bkpt(unsigned int ucc_num, int set, u32 mask)
1011         get_cmxucr_reg(ucc_num, &cmxucr, &reg_num, &shift);
1012  
1013         if (set)
1014 -               setbits32(cmxucr, mask << shift);
1015 +               qe_setbits32(cmxucr, mask << shift);
1016         else
1017 -               clrbits32(cmxucr, mask << shift);
1018 +               qe_clrbits32(cmxucr, mask << shift);
1019  
1020         return 0;
1021  }
1022 @@ -211,7 +211,7 @@ int ucc_set_qe_mux_rxtx(unsigned int ucc_num, enum qe_clock clock,
1023         if (mode == COMM_DIR_RX)
1024                 shift += 4;
1025  
1026 -       clrsetbits_be32(cmxucr, QE_CMXUCR_TX_CLK_SRC_MASK << shift,
1027 +       qe_clrsetbits32(cmxucr, QE_CMXUCR_TX_CLK_SRC_MASK << shift,
1028                 clock_bits << shift);
1029  
1030         return 0;
1031 diff --git a/drivers/soc/fsl/qe/ucc_fast.c b/drivers/soc/fsl/qe/ucc_fast.c
1032 index 83d8d16e..5115e935 100644
1033 --- a/drivers/soc/fsl/qe/ucc_fast.c
1034 +++ b/drivers/soc/fsl/qe/ucc_fast.c
1035 @@ -33,41 +33,41 @@ void ucc_fast_dump_regs(struct ucc_fast_private * uccf)
1036         printk(KERN_INFO "Base address: 0x%p\n", uccf->uf_regs);
1037  
1038         printk(KERN_INFO "gumr  : addr=0x%p, val=0x%08x\n",
1039 -                 &uccf->uf_regs->gumr, in_be32(&uccf->uf_regs->gumr));
1040 +              &uccf->uf_regs->gumr, ioread32be(&uccf->uf_regs->gumr));
1041         printk(KERN_INFO "upsmr : addr=0x%p, val=0x%08x\n",
1042 -                 &uccf->uf_regs->upsmr, in_be32(&uccf->uf_regs->upsmr));
1043 +                 &uccf->uf_regs->upsmr, ioread32be(&uccf->uf_regs->upsmr));
1044         printk(KERN_INFO "utodr : addr=0x%p, val=0x%04x\n",
1045 -                 &uccf->uf_regs->utodr, in_be16(&uccf->uf_regs->utodr));
1046 +                 &uccf->uf_regs->utodr, ioread16be(&uccf->uf_regs->utodr));
1047         printk(KERN_INFO "udsr  : addr=0x%p, val=0x%04x\n",
1048 -                 &uccf->uf_regs->udsr, in_be16(&uccf->uf_regs->udsr));
1049 +                 &uccf->uf_regs->udsr, ioread16be(&uccf->uf_regs->udsr));
1050         printk(KERN_INFO "ucce  : addr=0x%p, val=0x%08x\n",
1051 -                 &uccf->uf_regs->ucce, in_be32(&uccf->uf_regs->ucce));
1052 +                 &uccf->uf_regs->ucce, ioread32be(&uccf->uf_regs->ucce));
1053         printk(KERN_INFO "uccm  : addr=0x%p, val=0x%08x\n",
1054 -                 &uccf->uf_regs->uccm, in_be32(&uccf->uf_regs->uccm));
1055 +                 &uccf->uf_regs->uccm, ioread32be(&uccf->uf_regs->uccm));
1056         printk(KERN_INFO "uccs  : addr=0x%p, val=0x%02x\n",
1057 -                 &uccf->uf_regs->uccs, in_8(&uccf->uf_regs->uccs));
1058 +                 &uccf->uf_regs->uccs, ioread8(&uccf->uf_regs->uccs));
1059         printk(KERN_INFO "urfb  : addr=0x%p, val=0x%08x\n",
1060 -                 &uccf->uf_regs->urfb, in_be32(&uccf->uf_regs->urfb));
1061 +                 &uccf->uf_regs->urfb, ioread32be(&uccf->uf_regs->urfb));
1062         printk(KERN_INFO "urfs  : addr=0x%p, val=0x%04x\n",
1063 -                 &uccf->uf_regs->urfs, in_be16(&uccf->uf_regs->urfs));
1064 +                 &uccf->uf_regs->urfs, ioread16be(&uccf->uf_regs->urfs));
1065         printk(KERN_INFO "urfet : addr=0x%p, val=0x%04x\n",
1066 -                 &uccf->uf_regs->urfet, in_be16(&uccf->uf_regs->urfet));
1067 +                 &uccf->uf_regs->urfet, ioread16be(&uccf->uf_regs->urfet));
1068         printk(KERN_INFO "urfset: addr=0x%p, val=0x%04x\n",
1069 -                 &uccf->uf_regs->urfset, in_be16(&uccf->uf_regs->urfset));
1070 +                 &uccf->uf_regs->urfset, ioread16be(&uccf->uf_regs->urfset));
1071         printk(KERN_INFO "utfb  : addr=0x%p, val=0x%08x\n",
1072 -                 &uccf->uf_regs->utfb, in_be32(&uccf->uf_regs->utfb));
1073 +                 &uccf->uf_regs->utfb, ioread32be(&uccf->uf_regs->utfb));
1074         printk(KERN_INFO "utfs  : addr=0x%p, val=0x%04x\n",
1075 -                 &uccf->uf_regs->utfs, in_be16(&uccf->uf_regs->utfs));
1076 +                 &uccf->uf_regs->utfs, ioread16be(&uccf->uf_regs->utfs));
1077         printk(KERN_INFO "utfet : addr=0x%p, val=0x%04x\n",
1078 -                 &uccf->uf_regs->utfet, in_be16(&uccf->uf_regs->utfet));
1079 +                 &uccf->uf_regs->utfet, ioread16be(&uccf->uf_regs->utfet));
1080         printk(KERN_INFO "utftt : addr=0x%p, val=0x%04x\n",
1081 -                 &uccf->uf_regs->utftt, in_be16(&uccf->uf_regs->utftt));
1082 +                 &uccf->uf_regs->utftt, ioread16be(&uccf->uf_regs->utftt));
1083         printk(KERN_INFO "utpt  : addr=0x%p, val=0x%04x\n",
1084 -                 &uccf->uf_regs->utpt, in_be16(&uccf->uf_regs->utpt));
1085 +                 &uccf->uf_regs->utpt, ioread16be(&uccf->uf_regs->utpt));
1086         printk(KERN_INFO "urtry : addr=0x%p, val=0x%08x\n",
1087 -                 &uccf->uf_regs->urtry, in_be32(&uccf->uf_regs->urtry));
1088 +                 &uccf->uf_regs->urtry, ioread32be(&uccf->uf_regs->urtry));
1089         printk(KERN_INFO "guemr : addr=0x%p, val=0x%02x\n",
1090 -                 &uccf->uf_regs->guemr, in_8(&uccf->uf_regs->guemr));
1091 +                 &uccf->uf_regs->guemr, ioread8(&uccf->uf_regs->guemr));
1092  }
1093  EXPORT_SYMBOL(ucc_fast_dump_regs);
1094  
1095 @@ -89,7 +89,7 @@ EXPORT_SYMBOL(ucc_fast_get_qe_cr_subblock);
1096  
1097  void ucc_fast_transmit_on_demand(struct ucc_fast_private * uccf)
1098  {
1099 -       out_be16(&uccf->uf_regs->utodr, UCC_FAST_TOD);
1100 +       iowrite16be(UCC_FAST_TOD, &uccf->uf_regs->utodr);
1101  }
1102  EXPORT_SYMBOL(ucc_fast_transmit_on_demand);
1103  
1104 @@ -101,7 +101,7 @@ void ucc_fast_enable(struct ucc_fast_private * uccf, enum comm_dir mode)
1105         uf_regs = uccf->uf_regs;
1106  
1107         /* Enable reception and/or transmission on this UCC. */
1108 -       gumr = in_be32(&uf_regs->gumr);
1109 +       gumr = ioread32be(&uf_regs->gumr);
1110         if (mode & COMM_DIR_TX) {
1111                 gumr |= UCC_FAST_GUMR_ENT;
1112                 uccf->enabled_tx = 1;
1113 @@ -110,7 +110,7 @@ void ucc_fast_enable(struct ucc_fast_private * uccf, enum comm_dir mode)
1114                 gumr |= UCC_FAST_GUMR_ENR;
1115                 uccf->enabled_rx = 1;
1116         }
1117 -       out_be32(&uf_regs->gumr, gumr);
1118 +       iowrite32be(gumr, &uf_regs->gumr);
1119  }
1120  EXPORT_SYMBOL(ucc_fast_enable);
1121  
1122 @@ -122,7 +122,7 @@ void ucc_fast_disable(struct ucc_fast_private * uccf, enum comm_dir mode)
1123         uf_regs = uccf->uf_regs;
1124  
1125         /* Disable reception and/or transmission on this UCC. */
1126 -       gumr = in_be32(&uf_regs->gumr);
1127 +       gumr = ioread32be(&uf_regs->gumr);
1128         if (mode & COMM_DIR_TX) {
1129                 gumr &= ~UCC_FAST_GUMR_ENT;
1130                 uccf->enabled_tx = 0;
1131 @@ -131,7 +131,7 @@ void ucc_fast_disable(struct ucc_fast_private * uccf, enum comm_dir mode)
1132                 gumr &= ~UCC_FAST_GUMR_ENR;
1133                 uccf->enabled_rx = 0;
1134         }
1135 -       out_be32(&uf_regs->gumr, gumr);
1136 +       iowrite32be(gumr, &uf_regs->gumr);
1137  }
1138  EXPORT_SYMBOL(ucc_fast_disable);
1139  
1140 @@ -263,12 +263,13 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
1141         gumr |= uf_info->tenc;
1142         gumr |= uf_info->tcrc;
1143         gumr |= uf_info->mode;
1144 -       out_be32(&uf_regs->gumr, gumr);
1145 +       iowrite32be(gumr, &uf_regs->gumr);
1146  
1147         /* Allocate memory for Tx Virtual Fifo */
1148         uccf->ucc_fast_tx_virtual_fifo_base_offset =
1149             qe_muram_alloc(uf_info->utfs, UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT);
1150 -       if (IS_ERR_VALUE(uccf->ucc_fast_tx_virtual_fifo_base_offset)) {
1151 +       if (IS_ERR_VALUE((unsigned long)uccf->
1152 +                        ucc_fast_tx_virtual_fifo_base_offset)) {
1153                 printk(KERN_ERR "%s: cannot allocate MURAM for TX FIFO\n",
1154                         __func__);
1155                 uccf->ucc_fast_tx_virtual_fifo_base_offset = 0;
1156 @@ -281,7 +282,8 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
1157                 qe_muram_alloc(uf_info->urfs +
1158                            UCC_FAST_RECEIVE_VIRTUAL_FIFO_SIZE_FUDGE_FACTOR,
1159                            UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT);
1160 -       if (IS_ERR_VALUE(uccf->ucc_fast_rx_virtual_fifo_base_offset)) {
1161 +       if (IS_ERR_VALUE((unsigned long)uccf->
1162 +                        ucc_fast_rx_virtual_fifo_base_offset)) {
1163                 printk(KERN_ERR "%s: cannot allocate MURAM for RX FIFO\n",
1164                         __func__);
1165                 uccf->ucc_fast_rx_virtual_fifo_base_offset = 0;
1166 @@ -290,15 +292,15 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
1167         }
1168  
1169         /* Set Virtual Fifo registers */
1170 -       out_be16(&uf_regs->urfs, uf_info->urfs);
1171 -       out_be16(&uf_regs->urfet, uf_info->urfet);
1172 -       out_be16(&uf_regs->urfset, uf_info->urfset);
1173 -       out_be16(&uf_regs->utfs, uf_info->utfs);
1174 -       out_be16(&uf_regs->utfet, uf_info->utfet);
1175 -       out_be16(&uf_regs->utftt, uf_info->utftt);
1176 +       iowrite16be(uf_info->urfs, &uf_regs->urfs);
1177 +       iowrite16be(uf_info->urfet, &uf_regs->urfet);
1178 +       iowrite16be(uf_info->urfset, &uf_regs->urfset);
1179 +       iowrite16be(uf_info->utfs, &uf_regs->utfs);
1180 +       iowrite16be(uf_info->utfet, &uf_regs->utfet);
1181 +       iowrite16be(uf_info->utftt, &uf_regs->utftt);
1182         /* utfb, urfb are offsets from MURAM base */
1183 -       out_be32(&uf_regs->utfb, uccf->ucc_fast_tx_virtual_fifo_base_offset);
1184 -       out_be32(&uf_regs->urfb, uccf->ucc_fast_rx_virtual_fifo_base_offset);
1185 +       iowrite32be(uccf->ucc_fast_tx_virtual_fifo_base_offset, &uf_regs->utfb);
1186 +       iowrite32be(uccf->ucc_fast_rx_virtual_fifo_base_offset, &uf_regs->urfb);
1187  
1188         /* Mux clocking */
1189         /* Grant Support */
1190 @@ -366,14 +368,14 @@ int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** ucc
1191         }
1192  
1193         /* Set interrupt mask register at UCC level. */
1194 -       out_be32(&uf_regs->uccm, uf_info->uccm_mask);
1195 +       iowrite32be(uf_info->uccm_mask, &uf_regs->uccm);
1196  
1197         /* First, clear anything pending at UCC level,
1198          * otherwise, old garbage may come through
1199          * as soon as the dam is opened. */
1200  
1201         /* Writing '1' clears */
1202 -       out_be32(&uf_regs->ucce, 0xffffffff);
1203 +       iowrite32be(0xffffffff, &uf_regs->ucce);
1204  
1205         *uccf_ret = uccf;
1206         return 0;
1207 diff --git a/drivers/tty/serial/ucc_uart.c b/drivers/tty/serial/ucc_uart.c
1208 index 481eb298..ee409fdf 100644
1209 --- a/drivers/tty/serial/ucc_uart.c
1210 +++ b/drivers/tty/serial/ucc_uart.c
1211 @@ -34,6 +34,7 @@
1212  #include <soc/fsl/qe/ucc_slow.h>
1213  
1214  #include <linux/firmware.h>
1215 +#include <asm/cpm.h>
1216  #include <asm/reg.h>
1217  
1218  /*
1219 diff --git a/include/soc/fsl/qe/qe.h b/include/soc/fsl/qe/qe.h
1220 index 70339d79..f7a14f2d 100644
1221 --- a/include/soc/fsl/qe/qe.h
1222 +++ b/include/soc/fsl/qe/qe.h
1223 @@ -21,7 +21,6 @@
1224  #include <linux/spinlock.h>
1225  #include <linux/errno.h>
1226  #include <linux/err.h>
1227 -#include <asm/cpm.h>
1228  #include <soc/fsl/qe/immap_qe.h>
1229  #include <linux/of.h>
1230  #include <linux/of_address.h>
1231 diff --git a/include/soc/fsl/qe/qe_ic.h b/include/soc/fsl/qe/qe_ic.h
1232 deleted file mode 100644
1233 index 1e155ca6..00000000
1234 --- a/include/soc/fsl/qe/qe_ic.h
1235 +++ /dev/null
1236 @@ -1,139 +0,0 @@
1237 -/*
1238 - * Copyright (C) 2006 Freescale Semiconductor, Inc. All rights reserved.
1239 - *
1240 - * Authors:    Shlomi Gridish <gridish@freescale.com>
1241 - *             Li Yang <leoli@freescale.com>
1242 - *
1243 - * Description:
1244 - * QE IC external definitions and structure.
1245 - *
1246 - * This program is free software; you can redistribute  it and/or modify it
1247 - * under  the terms of  the GNU General  Public License as published by the
1248 - * Free Software Foundation;  either version 2 of the  License, or (at your
1249 - * option) any later version.
1250 - */
1251 -#ifndef _ASM_POWERPC_QE_IC_H
1252 -#define _ASM_POWERPC_QE_IC_H
1253 -
1254 -#include <linux/irq.h>
1255 -
1256 -struct device_node;
1257 -struct qe_ic;
1258 -
1259 -#define NUM_OF_QE_IC_GROUPS    6
1260 -
1261 -/* Flags when we init the QE IC */
1262 -#define QE_IC_SPREADMODE_GRP_W                 0x00000001
1263 -#define QE_IC_SPREADMODE_GRP_X                 0x00000002
1264 -#define QE_IC_SPREADMODE_GRP_Y                 0x00000004
1265 -#define QE_IC_SPREADMODE_GRP_Z                 0x00000008
1266 -#define QE_IC_SPREADMODE_GRP_RISCA             0x00000010
1267 -#define QE_IC_SPREADMODE_GRP_RISCB             0x00000020
1268 -
1269 -#define QE_IC_LOW_SIGNAL                       0x00000100
1270 -#define QE_IC_HIGH_SIGNAL                      0x00000200
1271 -
1272 -#define QE_IC_GRP_W_PRI0_DEST_SIGNAL_HIGH      0x00001000
1273 -#define QE_IC_GRP_W_PRI1_DEST_SIGNAL_HIGH      0x00002000
1274 -#define QE_IC_GRP_X_PRI0_DEST_SIGNAL_HIGH      0x00004000
1275 -#define QE_IC_GRP_X_PRI1_DEST_SIGNAL_HIGH      0x00008000
1276 -#define QE_IC_GRP_Y_PRI0_DEST_SIGNAL_HIGH      0x00010000
1277 -#define QE_IC_GRP_Y_PRI1_DEST_SIGNAL_HIGH      0x00020000
1278 -#define QE_IC_GRP_Z_PRI0_DEST_SIGNAL_HIGH      0x00040000
1279 -#define QE_IC_GRP_Z_PRI1_DEST_SIGNAL_HIGH      0x00080000
1280 -#define QE_IC_GRP_RISCA_PRI0_DEST_SIGNAL_HIGH  0x00100000
1281 -#define QE_IC_GRP_RISCA_PRI1_DEST_SIGNAL_HIGH  0x00200000
1282 -#define QE_IC_GRP_RISCB_PRI0_DEST_SIGNAL_HIGH  0x00400000
1283 -#define QE_IC_GRP_RISCB_PRI1_DEST_SIGNAL_HIGH  0x00800000
1284 -#define QE_IC_GRP_W_DEST_SIGNAL_SHIFT          (12)
1285 -
1286 -/* QE interrupt sources groups */
1287 -enum qe_ic_grp_id {
1288 -       QE_IC_GRP_W = 0,        /* QE interrupt controller group W */
1289 -       QE_IC_GRP_X,            /* QE interrupt controller group X */
1290 -       QE_IC_GRP_Y,            /* QE interrupt controller group Y */
1291 -       QE_IC_GRP_Z,            /* QE interrupt controller group Z */
1292 -       QE_IC_GRP_RISCA,        /* QE interrupt controller RISC group A */
1293 -       QE_IC_GRP_RISCB         /* QE interrupt controller RISC group B */
1294 -};
1295 -
1296 -#ifdef CONFIG_QUICC_ENGINE
1297 -void qe_ic_init(struct device_node *node, unsigned int flags,
1298 -               void (*low_handler)(struct irq_desc *desc),
1299 -               void (*high_handler)(struct irq_desc *desc));
1300 -unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic);
1301 -unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic);
1302 -#else
1303 -static inline void qe_ic_init(struct device_node *node, unsigned int flags,
1304 -               void (*low_handler)(struct irq_desc *desc),
1305 -               void (*high_handler)(struct irq_desc *desc))
1306 -{}
1307 -static inline unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic)
1308 -{ return 0; }
1309 -static inline unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic)
1310 -{ return 0; }
1311 -#endif /* CONFIG_QUICC_ENGINE */
1312 -
1313 -void qe_ic_set_highest_priority(unsigned int virq, int high);
1314 -int qe_ic_set_priority(unsigned int virq, unsigned int priority);
1315 -int qe_ic_set_high_priority(unsigned int virq, unsigned int priority, int high);
1316 -
1317 -static inline void qe_ic_cascade_low_ipic(struct irq_desc *desc)
1318 -{
1319 -       struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
1320 -       unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic);
1321 -
1322 -       if (cascade_irq != NO_IRQ)
1323 -               generic_handle_irq(cascade_irq);
1324 -}
1325 -
1326 -static inline void qe_ic_cascade_high_ipic(struct irq_desc *desc)
1327 -{
1328 -       struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
1329 -       unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic);
1330 -
1331 -       if (cascade_irq != NO_IRQ)
1332 -               generic_handle_irq(cascade_irq);
1333 -}
1334 -
1335 -static inline void qe_ic_cascade_low_mpic(struct irq_desc *desc)
1336 -{
1337 -       struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
1338 -       unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic);
1339 -       struct irq_chip *chip = irq_desc_get_chip(desc);
1340 -
1341 -       if (cascade_irq != NO_IRQ)
1342 -               generic_handle_irq(cascade_irq);
1343 -
1344 -       chip->irq_eoi(&desc->irq_data);
1345 -}
1346 -
1347 -static inline void qe_ic_cascade_high_mpic(struct irq_desc *desc)
1348 -{
1349 -       struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
1350 -       unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic);
1351 -       struct irq_chip *chip = irq_desc_get_chip(desc);
1352 -
1353 -       if (cascade_irq != NO_IRQ)
1354 -               generic_handle_irq(cascade_irq);
1355 -
1356 -       chip->irq_eoi(&desc->irq_data);
1357 -}
1358 -
1359 -static inline void qe_ic_cascade_muxed_mpic(struct irq_desc *desc)
1360 -{
1361 -       struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
1362 -       unsigned int cascade_irq;
1363 -       struct irq_chip *chip = irq_desc_get_chip(desc);
1364 -
1365 -       cascade_irq = qe_ic_get_high_irq(qe_ic);
1366 -       if (cascade_irq == NO_IRQ)
1367 -               cascade_irq = qe_ic_get_low_irq(qe_ic);
1368 -
1369 -       if (cascade_irq != NO_IRQ)
1370 -               generic_handle_irq(cascade_irq);
1371 -
1372 -       chip->irq_eoi(&desc->irq_data);
1373 -}
1374 -
1375 -#endif /* _ASM_POWERPC_QE_IC_H */
1376 -- 
1377 2.14.1
1378