kernel: bump 4.14 to 4.14.103
[openwrt/staging/dedeckeh.git] / target / linux / layerscape / patches-4.14 / 805-qe-support-layerscape.patch
1 From cfa7e6ed5a6ba529097ae8a50ed2c8fa12b4cad0 Mon Sep 17 00:00:00 2001
2 From: Biwen Li <biwen.li@nxp.com>
3 Date: Tue, 30 Oct 2018 18:27:13 +0800
4 Subject: [PATCH 22/40] qe: support layerscape
5 This is an integrated patch of qe for layerscape
6
7 Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com
8 Signed-off-by: Biwen Li <biwen.li@nxp.com>
9 ---
10 .../fsl/qe/qe_ic.c => irqchip/irq-qeic.c} | 389 +++++++++++-------
11 drivers/soc/fsl/qe/Kconfig | 2 +-
12 drivers/soc/fsl/qe/Makefile | 2 +-
13 drivers/soc/fsl/qe/qe.c | 78 ++--
14 drivers/soc/fsl/qe/qe_ic.h | 103 -----
15 drivers/soc/fsl/qe/qe_io.c | 42 +-
16 drivers/soc/fsl/qe/qe_tdm.c | 8 +-
17 drivers/soc/fsl/qe/ucc.c | 10 +-
18 drivers/soc/fsl/qe/ucc_fast.c | 74 ++--
19 drivers/tty/serial/ucc_uart.c | 1 +
20 include/soc/fsl/qe/qe.h | 1 -
21 include/soc/fsl/qe/qe_ic.h | 139 -------
22 12 files changed, 357 insertions(+), 492 deletions(-)
23 rename drivers/{soc/fsl/qe/qe_ic.c => irqchip/irq-qeic.c} (54%)
24 delete mode 100644 drivers/soc/fsl/qe/qe_ic.h
25 delete mode 100644 include/soc/fsl/qe/qe_ic.h
26
27 --- a/drivers/soc/fsl/qe/qe_ic.c
28 +++ /dev/null
29 @@ -1,512 +0,0 @@
30 -/*
31 - * arch/powerpc/sysdev/qe_lib/qe_ic.c
32 - *
33 - * Copyright (C) 2006 Freescale Semiconductor, Inc. All rights reserved.
34 - *
35 - * Author: Li Yang <leoli@freescale.com>
36 - * Based on code from Shlomi Gridish <gridish@freescale.com>
37 - *
38 - * QUICC ENGINE Interrupt Controller
39 - *
40 - * This program is free software; you can redistribute it and/or modify it
41 - * under the terms of the GNU General Public License as published by the
42 - * Free Software Foundation; either version 2 of the License, or (at your
43 - * option) any later version.
44 - */
45 -
46 -#include <linux/of_irq.h>
47 -#include <linux/of_address.h>
48 -#include <linux/kernel.h>
49 -#include <linux/init.h>
50 -#include <linux/errno.h>
51 -#include <linux/reboot.h>
52 -#include <linux/slab.h>
53 -#include <linux/stddef.h>
54 -#include <linux/sched.h>
55 -#include <linux/signal.h>
56 -#include <linux/device.h>
57 -#include <linux/spinlock.h>
58 -#include <asm/irq.h>
59 -#include <asm/io.h>
60 -#include <soc/fsl/qe/qe_ic.h>
61 -
62 -#include "qe_ic.h"
63 -
64 -static DEFINE_RAW_SPINLOCK(qe_ic_lock);
65 -
66 -static struct qe_ic_info qe_ic_info[] = {
67 - [1] = {
68 - .mask = 0x00008000,
69 - .mask_reg = QEIC_CIMR,
70 - .pri_code = 0,
71 - .pri_reg = QEIC_CIPWCC,
72 - },
73 - [2] = {
74 - .mask = 0x00004000,
75 - .mask_reg = QEIC_CIMR,
76 - .pri_code = 1,
77 - .pri_reg = QEIC_CIPWCC,
78 - },
79 - [3] = {
80 - .mask = 0x00002000,
81 - .mask_reg = QEIC_CIMR,
82 - .pri_code = 2,
83 - .pri_reg = QEIC_CIPWCC,
84 - },
85 - [10] = {
86 - .mask = 0x00000040,
87 - .mask_reg = QEIC_CIMR,
88 - .pri_code = 1,
89 - .pri_reg = QEIC_CIPZCC,
90 - },
91 - [11] = {
92 - .mask = 0x00000020,
93 - .mask_reg = QEIC_CIMR,
94 - .pri_code = 2,
95 - .pri_reg = QEIC_CIPZCC,
96 - },
97 - [12] = {
98 - .mask = 0x00000010,
99 - .mask_reg = QEIC_CIMR,
100 - .pri_code = 3,
101 - .pri_reg = QEIC_CIPZCC,
102 - },
103 - [13] = {
104 - .mask = 0x00000008,
105 - .mask_reg = QEIC_CIMR,
106 - .pri_code = 4,
107 - .pri_reg = QEIC_CIPZCC,
108 - },
109 - [14] = {
110 - .mask = 0x00000004,
111 - .mask_reg = QEIC_CIMR,
112 - .pri_code = 5,
113 - .pri_reg = QEIC_CIPZCC,
114 - },
115 - [15] = {
116 - .mask = 0x00000002,
117 - .mask_reg = QEIC_CIMR,
118 - .pri_code = 6,
119 - .pri_reg = QEIC_CIPZCC,
120 - },
121 - [20] = {
122 - .mask = 0x10000000,
123 - .mask_reg = QEIC_CRIMR,
124 - .pri_code = 3,
125 - .pri_reg = QEIC_CIPRTA,
126 - },
127 - [25] = {
128 - .mask = 0x00800000,
129 - .mask_reg = QEIC_CRIMR,
130 - .pri_code = 0,
131 - .pri_reg = QEIC_CIPRTB,
132 - },
133 - [26] = {
134 - .mask = 0x00400000,
135 - .mask_reg = QEIC_CRIMR,
136 - .pri_code = 1,
137 - .pri_reg = QEIC_CIPRTB,
138 - },
139 - [27] = {
140 - .mask = 0x00200000,
141 - .mask_reg = QEIC_CRIMR,
142 - .pri_code = 2,
143 - .pri_reg = QEIC_CIPRTB,
144 - },
145 - [28] = {
146 - .mask = 0x00100000,
147 - .mask_reg = QEIC_CRIMR,
148 - .pri_code = 3,
149 - .pri_reg = QEIC_CIPRTB,
150 - },
151 - [32] = {
152 - .mask = 0x80000000,
153 - .mask_reg = QEIC_CIMR,
154 - .pri_code = 0,
155 - .pri_reg = QEIC_CIPXCC,
156 - },
157 - [33] = {
158 - .mask = 0x40000000,
159 - .mask_reg = QEIC_CIMR,
160 - .pri_code = 1,
161 - .pri_reg = QEIC_CIPXCC,
162 - },
163 - [34] = {
164 - .mask = 0x20000000,
165 - .mask_reg = QEIC_CIMR,
166 - .pri_code = 2,
167 - .pri_reg = QEIC_CIPXCC,
168 - },
169 - [35] = {
170 - .mask = 0x10000000,
171 - .mask_reg = QEIC_CIMR,
172 - .pri_code = 3,
173 - .pri_reg = QEIC_CIPXCC,
174 - },
175 - [36] = {
176 - .mask = 0x08000000,
177 - .mask_reg = QEIC_CIMR,
178 - .pri_code = 4,
179 - .pri_reg = QEIC_CIPXCC,
180 - },
181 - [40] = {
182 - .mask = 0x00800000,
183 - .mask_reg = QEIC_CIMR,
184 - .pri_code = 0,
185 - .pri_reg = QEIC_CIPYCC,
186 - },
187 - [41] = {
188 - .mask = 0x00400000,
189 - .mask_reg = QEIC_CIMR,
190 - .pri_code = 1,
191 - .pri_reg = QEIC_CIPYCC,
192 - },
193 - [42] = {
194 - .mask = 0x00200000,
195 - .mask_reg = QEIC_CIMR,
196 - .pri_code = 2,
197 - .pri_reg = QEIC_CIPYCC,
198 - },
199 - [43] = {
200 - .mask = 0x00100000,
201 - .mask_reg = QEIC_CIMR,
202 - .pri_code = 3,
203 - .pri_reg = QEIC_CIPYCC,
204 - },
205 -};
206 -
207 -static inline u32 qe_ic_read(volatile __be32 __iomem * base, unsigned int reg)
208 -{
209 - return in_be32(base + (reg >> 2));
210 -}
211 -
212 -static inline void qe_ic_write(volatile __be32 __iomem * base, unsigned int reg,
213 - u32 value)
214 -{
215 - out_be32(base + (reg >> 2), value);
216 -}
217 -
218 -static inline struct qe_ic *qe_ic_from_irq(unsigned int virq)
219 -{
220 - return irq_get_chip_data(virq);
221 -}
222 -
223 -static inline struct qe_ic *qe_ic_from_irq_data(struct irq_data *d)
224 -{
225 - return irq_data_get_irq_chip_data(d);
226 -}
227 -
228 -static void qe_ic_unmask_irq(struct irq_data *d)
229 -{
230 - struct qe_ic *qe_ic = qe_ic_from_irq_data(d);
231 - unsigned int src = irqd_to_hwirq(d);
232 - unsigned long flags;
233 - u32 temp;
234 -
235 - raw_spin_lock_irqsave(&qe_ic_lock, flags);
236 -
237 - temp = qe_ic_read(qe_ic->regs, qe_ic_info[src].mask_reg);
238 - qe_ic_write(qe_ic->regs, qe_ic_info[src].mask_reg,
239 - temp | qe_ic_info[src].mask);
240 -
241 - raw_spin_unlock_irqrestore(&qe_ic_lock, flags);
242 -}
243 -
244 -static void qe_ic_mask_irq(struct irq_data *d)
245 -{
246 - struct qe_ic *qe_ic = qe_ic_from_irq_data(d);
247 - unsigned int src = irqd_to_hwirq(d);
248 - unsigned long flags;
249 - u32 temp;
250 -
251 - raw_spin_lock_irqsave(&qe_ic_lock, flags);
252 -
253 - temp = qe_ic_read(qe_ic->regs, qe_ic_info[src].mask_reg);
254 - qe_ic_write(qe_ic->regs, qe_ic_info[src].mask_reg,
255 - temp & ~qe_ic_info[src].mask);
256 -
257 - /* Flush the above write before enabling interrupts; otherwise,
258 - * spurious interrupts will sometimes happen. To be 100% sure
259 - * that the write has reached the device before interrupts are
260 - * enabled, the mask register would have to be read back; however,
261 - * this is not required for correctness, only to avoid wasting
262 - * time on a large number of spurious interrupts. In testing,
263 - * a sync reduced the observed spurious interrupts to zero.
264 - */
265 - mb();
266 -
267 - raw_spin_unlock_irqrestore(&qe_ic_lock, flags);
268 -}
269 -
270 -static struct irq_chip qe_ic_irq_chip = {
271 - .name = "QEIC",
272 - .irq_unmask = qe_ic_unmask_irq,
273 - .irq_mask = qe_ic_mask_irq,
274 - .irq_mask_ack = qe_ic_mask_irq,
275 -};
276 -
277 -static int qe_ic_host_match(struct irq_domain *h, struct device_node *node,
278 - enum irq_domain_bus_token bus_token)
279 -{
280 - /* Exact match, unless qe_ic node is NULL */
281 - struct device_node *of_node = irq_domain_get_of_node(h);
282 - return of_node == NULL || of_node == node;
283 -}
284 -
285 -static int qe_ic_host_map(struct irq_domain *h, unsigned int virq,
286 - irq_hw_number_t hw)
287 -{
288 - struct qe_ic *qe_ic = h->host_data;
289 - struct irq_chip *chip;
290 -
291 - if (hw >= ARRAY_SIZE(qe_ic_info)) {
292 - pr_err("%s: Invalid hw irq number for QEIC\n", __func__);
293 - return -EINVAL;
294 - }
295 -
296 - if (qe_ic_info[hw].mask == 0) {
297 - printk(KERN_ERR "Can't map reserved IRQ\n");
298 - return -EINVAL;
299 - }
300 - /* Default chip */
301 - chip = &qe_ic->hc_irq;
302 -
303 - irq_set_chip_data(virq, qe_ic);
304 - irq_set_status_flags(virq, IRQ_LEVEL);
305 -
306 - irq_set_chip_and_handler(virq, chip, handle_level_irq);
307 -
308 - return 0;
309 -}
310 -
311 -static const struct irq_domain_ops qe_ic_host_ops = {
312 - .match = qe_ic_host_match,
313 - .map = qe_ic_host_map,
314 - .xlate = irq_domain_xlate_onetwocell,
315 -};
316 -
317 -/* Return an interrupt vector or NO_IRQ if no interrupt is pending. */
318 -unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic)
319 -{
320 - int irq;
321 -
322 - BUG_ON(qe_ic == NULL);
323 -
324 - /* get the interrupt source vector. */
325 - irq = qe_ic_read(qe_ic->regs, QEIC_CIVEC) >> 26;
326 -
327 - if (irq == 0)
328 - return NO_IRQ;
329 -
330 - return irq_linear_revmap(qe_ic->irqhost, irq);
331 -}
332 -
333 -/* Return an interrupt vector or NO_IRQ if no interrupt is pending. */
334 -unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic)
335 -{
336 - int irq;
337 -
338 - BUG_ON(qe_ic == NULL);
339 -
340 - /* get the interrupt source vector. */
341 - irq = qe_ic_read(qe_ic->regs, QEIC_CHIVEC) >> 26;
342 -
343 - if (irq == 0)
344 - return NO_IRQ;
345 -
346 - return irq_linear_revmap(qe_ic->irqhost, irq);
347 -}
348 -
349 -void __init qe_ic_init(struct device_node *node, unsigned int flags,
350 - void (*low_handler)(struct irq_desc *desc),
351 - void (*high_handler)(struct irq_desc *desc))
352 -{
353 - struct qe_ic *qe_ic;
354 - struct resource res;
355 - u32 temp = 0, ret, high_active = 0;
356 -
357 - ret = of_address_to_resource(node, 0, &res);
358 - if (ret)
359 - return;
360 -
361 - qe_ic = kzalloc(sizeof(*qe_ic), GFP_KERNEL);
362 - if (qe_ic == NULL)
363 - return;
364 -
365 - qe_ic->irqhost = irq_domain_add_linear(node, NR_QE_IC_INTS,
366 - &qe_ic_host_ops, qe_ic);
367 - if (qe_ic->irqhost == NULL) {
368 - kfree(qe_ic);
369 - return;
370 - }
371 -
372 - qe_ic->regs = ioremap(res.start, resource_size(&res));
373 -
374 - qe_ic->hc_irq = qe_ic_irq_chip;
375 -
376 - qe_ic->virq_high = irq_of_parse_and_map(node, 0);
377 - qe_ic->virq_low = irq_of_parse_and_map(node, 1);
378 -
379 - if (qe_ic->virq_low == NO_IRQ) {
380 - printk(KERN_ERR "Failed to map QE_IC low IRQ\n");
381 - kfree(qe_ic);
382 - return;
383 - }
384 -
385 - /* default priority scheme is grouped. If spread mode is */
386 - /* required, configure cicr accordingly. */
387 - if (flags & QE_IC_SPREADMODE_GRP_W)
388 - temp |= CICR_GWCC;
389 - if (flags & QE_IC_SPREADMODE_GRP_X)
390 - temp |= CICR_GXCC;
391 - if (flags & QE_IC_SPREADMODE_GRP_Y)
392 - temp |= CICR_GYCC;
393 - if (flags & QE_IC_SPREADMODE_GRP_Z)
394 - temp |= CICR_GZCC;
395 - if (flags & QE_IC_SPREADMODE_GRP_RISCA)
396 - temp |= CICR_GRTA;
397 - if (flags & QE_IC_SPREADMODE_GRP_RISCB)
398 - temp |= CICR_GRTB;
399 -
400 - /* choose destination signal for highest priority interrupt */
401 - if (flags & QE_IC_HIGH_SIGNAL) {
402 - temp |= (SIGNAL_HIGH << CICR_HPIT_SHIFT);
403 - high_active = 1;
404 - }
405 -
406 - qe_ic_write(qe_ic->regs, QEIC_CICR, temp);
407 -
408 - irq_set_handler_data(qe_ic->virq_low, qe_ic);
409 - irq_set_chained_handler(qe_ic->virq_low, low_handler);
410 -
411 - if (qe_ic->virq_high != NO_IRQ &&
412 - qe_ic->virq_high != qe_ic->virq_low) {
413 - irq_set_handler_data(qe_ic->virq_high, qe_ic);
414 - irq_set_chained_handler(qe_ic->virq_high, high_handler);
415 - }
416 -}
417 -
418 -void qe_ic_set_highest_priority(unsigned int virq, int high)
419 -{
420 - struct qe_ic *qe_ic = qe_ic_from_irq(virq);
421 - unsigned int src = virq_to_hw(virq);
422 - u32 temp = 0;
423 -
424 - temp = qe_ic_read(qe_ic->regs, QEIC_CICR);
425 -
426 - temp &= ~CICR_HP_MASK;
427 - temp |= src << CICR_HP_SHIFT;
428 -
429 - temp &= ~CICR_HPIT_MASK;
430 - temp |= (high ? SIGNAL_HIGH : SIGNAL_LOW) << CICR_HPIT_SHIFT;
431 -
432 - qe_ic_write(qe_ic->regs, QEIC_CICR, temp);
433 -}
434 -
435 -/* Set Priority level within its group, from 1 to 8 */
436 -int qe_ic_set_priority(unsigned int virq, unsigned int priority)
437 -{
438 - struct qe_ic *qe_ic = qe_ic_from_irq(virq);
439 - unsigned int src = virq_to_hw(virq);
440 - u32 temp;
441 -
442 - if (priority > 8 || priority == 0)
443 - return -EINVAL;
444 - if (WARN_ONCE(src >= ARRAY_SIZE(qe_ic_info),
445 - "%s: Invalid hw irq number for QEIC\n", __func__))
446 - return -EINVAL;
447 - if (qe_ic_info[src].pri_reg == 0)
448 - return -EINVAL;
449 -
450 - temp = qe_ic_read(qe_ic->regs, qe_ic_info[src].pri_reg);
451 -
452 - if (priority < 4) {
453 - temp &= ~(0x7 << (32 - priority * 3));
454 - temp |= qe_ic_info[src].pri_code << (32 - priority * 3);
455 - } else {
456 - temp &= ~(0x7 << (24 - priority * 3));
457 - temp |= qe_ic_info[src].pri_code << (24 - priority * 3);
458 - }
459 -
460 - qe_ic_write(qe_ic->regs, qe_ic_info[src].pri_reg, temp);
461 -
462 - return 0;
463 -}
464 -
465 -/* Set a QE priority to use high irq, only priority 1~2 can use high irq */
466 -int qe_ic_set_high_priority(unsigned int virq, unsigned int priority, int high)
467 -{
468 - struct qe_ic *qe_ic = qe_ic_from_irq(virq);
469 - unsigned int src = virq_to_hw(virq);
470 - u32 temp, control_reg = QEIC_CICNR, shift = 0;
471 -
472 - if (priority > 2 || priority == 0)
473 - return -EINVAL;
474 - if (WARN_ONCE(src >= ARRAY_SIZE(qe_ic_info),
475 - "%s: Invalid hw irq number for QEIC\n", __func__))
476 - return -EINVAL;
477 -
478 - switch (qe_ic_info[src].pri_reg) {
479 - case QEIC_CIPZCC:
480 - shift = CICNR_ZCC1T_SHIFT;
481 - break;
482 - case QEIC_CIPWCC:
483 - shift = CICNR_WCC1T_SHIFT;
484 - break;
485 - case QEIC_CIPYCC:
486 - shift = CICNR_YCC1T_SHIFT;
487 - break;
488 - case QEIC_CIPXCC:
489 - shift = CICNR_XCC1T_SHIFT;
490 - break;
491 - case QEIC_CIPRTA:
492 - shift = CRICR_RTA1T_SHIFT;
493 - control_reg = QEIC_CRICR;
494 - break;
495 - case QEIC_CIPRTB:
496 - shift = CRICR_RTB1T_SHIFT;
497 - control_reg = QEIC_CRICR;
498 - break;
499 - default:
500 - return -EINVAL;
501 - }
502 -
503 - shift += (2 - priority) * 2;
504 - temp = qe_ic_read(qe_ic->regs, control_reg);
505 - temp &= ~(SIGNAL_MASK << shift);
506 - temp |= (high ? SIGNAL_HIGH : SIGNAL_LOW) << shift;
507 - qe_ic_write(qe_ic->regs, control_reg, temp);
508 -
509 - return 0;
510 -}
511 -
512 -static struct bus_type qe_ic_subsys = {
513 - .name = "qe_ic",
514 - .dev_name = "qe_ic",
515 -};
516 -
517 -static struct device device_qe_ic = {
518 - .id = 0,
519 - .bus = &qe_ic_subsys,
520 -};
521 -
522 -static int __init init_qe_ic_sysfs(void)
523 -{
524 - int rc;
525 -
526 - printk(KERN_DEBUG "Registering qe_ic with sysfs...\n");
527 -
528 - rc = subsys_system_register(&qe_ic_subsys, NULL);
529 - if (rc) {
530 - printk(KERN_ERR "Failed registering qe_ic sys class\n");
531 - return -ENODEV;
532 - }
533 - rc = device_register(&device_qe_ic);
534 - if (rc) {
535 - printk(KERN_ERR "Failed registering qe_ic sys device\n");
536 - return -ENODEV;
537 - }
538 - return 0;
539 -}
540 -
541 -subsys_initcall(init_qe_ic_sysfs);
542 --- /dev/null
543 +++ b/drivers/irqchip/irq-qeic.c
544 @@ -0,0 +1,605 @@
545 +/*
546 + * drivers/irqchip/irq-qeic.c
547 + *
548 + * Copyright (C) 2016 Freescale Semiconductor, Inc. All rights reserved.
549 + *
550 + * Author: Li Yang <leoli@freescale.com>
551 + * Based on code from Shlomi Gridish <gridish@freescale.com>
552 + *
553 + * QUICC ENGINE Interrupt Controller
554 + *
555 + * This program is free software; you can redistribute it and/or modify it
556 + * under the terms of the GNU General Public License as published by the
557 + * Free Software Foundation; either version 2 of the License, or (at your
558 + * option) any later version.
559 + */
560 +
561 +#include <linux/of_irq.h>
562 +#include <linux/of_address.h>
563 +#include <linux/kernel.h>
564 +#include <linux/init.h>
565 +#include <linux/irqdomain.h>
566 +#include <linux/irqchip.h>
567 +#include <linux/errno.h>
568 +#include <linux/of_address.h>
569 +#include <linux/of_irq.h>
570 +#include <linux/reboot.h>
571 +#include <linux/slab.h>
572 +#include <linux/stddef.h>
573 +#include <linux/sched.h>
574 +#include <linux/signal.h>
575 +#include <linux/device.h>
576 +#include <linux/spinlock.h>
577 +#include <linux/irq.h>
578 +#include <asm/io.h>
579 +
580 +#define NR_QE_IC_INTS 64
581 +
582 +/* QE IC registers offset */
583 +#define QEIC_CICR 0x00
584 +#define QEIC_CIVEC 0x04
585 +#define QEIC_CRIPNR 0x08
586 +#define QEIC_CIPNR 0x0c
587 +#define QEIC_CIPXCC 0x10
588 +#define QEIC_CIPYCC 0x14
589 +#define QEIC_CIPWCC 0x18
590 +#define QEIC_CIPZCC 0x1c
591 +#define QEIC_CIMR 0x20
592 +#define QEIC_CRIMR 0x24
593 +#define QEIC_CICNR 0x28
594 +#define QEIC_CIPRTA 0x30
595 +#define QEIC_CIPRTB 0x34
596 +#define QEIC_CRICR 0x3c
597 +#define QEIC_CHIVEC 0x60
598 +
599 +/* Interrupt priority registers */
600 +#define CIPCC_SHIFT_PRI0 29
601 +#define CIPCC_SHIFT_PRI1 26
602 +#define CIPCC_SHIFT_PRI2 23
603 +#define CIPCC_SHIFT_PRI3 20
604 +#define CIPCC_SHIFT_PRI4 13
605 +#define CIPCC_SHIFT_PRI5 10
606 +#define CIPCC_SHIFT_PRI6 7
607 +#define CIPCC_SHIFT_PRI7 4
608 +
609 +/* CICR priority modes */
610 +#define CICR_GWCC 0x00040000
611 +#define CICR_GXCC 0x00020000
612 +#define CICR_GYCC 0x00010000
613 +#define CICR_GZCC 0x00080000
614 +#define CICR_GRTA 0x00200000
615 +#define CICR_GRTB 0x00400000
616 +#define CICR_HPIT_SHIFT 8
617 +#define CICR_HPIT_MASK 0x00000300
618 +#define CICR_HP_SHIFT 24
619 +#define CICR_HP_MASK 0x3f000000
620 +
621 +/* CICNR */
622 +#define CICNR_WCC1T_SHIFT 20
623 +#define CICNR_ZCC1T_SHIFT 28
624 +#define CICNR_YCC1T_SHIFT 12
625 +#define CICNR_XCC1T_SHIFT 4
626 +
627 +/* CRICR */
628 +#define CRICR_RTA1T_SHIFT 20
629 +#define CRICR_RTB1T_SHIFT 28
630 +
631 +/* Signal indicator */
632 +#define SIGNAL_MASK 3
633 +#define SIGNAL_HIGH 2
634 +#define SIGNAL_LOW 0
635 +
636 +#define NUM_OF_QE_IC_GROUPS 6
637 +
638 +/* Flags when we init the QE IC */
639 +#define QE_IC_SPREADMODE_GRP_W 0x00000001
640 +#define QE_IC_SPREADMODE_GRP_X 0x00000002
641 +#define QE_IC_SPREADMODE_GRP_Y 0x00000004
642 +#define QE_IC_SPREADMODE_GRP_Z 0x00000008
643 +#define QE_IC_SPREADMODE_GRP_RISCA 0x00000010
644 +#define QE_IC_SPREADMODE_GRP_RISCB 0x00000020
645 +
646 +#define QE_IC_LOW_SIGNAL 0x00000100
647 +#define QE_IC_HIGH_SIGNAL 0x00000200
648 +
649 +#define QE_IC_GRP_W_PRI0_DEST_SIGNAL_HIGH 0x00001000
650 +#define QE_IC_GRP_W_PRI1_DEST_SIGNAL_HIGH 0x00002000
651 +#define QE_IC_GRP_X_PRI0_DEST_SIGNAL_HIGH 0x00004000
652 +#define QE_IC_GRP_X_PRI1_DEST_SIGNAL_HIGH 0x00008000
653 +#define QE_IC_GRP_Y_PRI0_DEST_SIGNAL_HIGH 0x00010000
654 +#define QE_IC_GRP_Y_PRI1_DEST_SIGNAL_HIGH 0x00020000
655 +#define QE_IC_GRP_Z_PRI0_DEST_SIGNAL_HIGH 0x00040000
656 +#define QE_IC_GRP_Z_PRI1_DEST_SIGNAL_HIGH 0x00080000
657 +#define QE_IC_GRP_RISCA_PRI0_DEST_SIGNAL_HIGH 0x00100000
658 +#define QE_IC_GRP_RISCA_PRI1_DEST_SIGNAL_HIGH 0x00200000
659 +#define QE_IC_GRP_RISCB_PRI0_DEST_SIGNAL_HIGH 0x00400000
660 +#define QE_IC_GRP_RISCB_PRI1_DEST_SIGNAL_HIGH 0x00800000
661 +#define QE_IC_GRP_W_DEST_SIGNAL_SHIFT (12)
662 +
663 +/* QE interrupt sources groups */
664 +enum qe_ic_grp_id {
665 + QE_IC_GRP_W = 0, /* QE interrupt controller group W */
666 + QE_IC_GRP_X, /* QE interrupt controller group X */
667 + QE_IC_GRP_Y, /* QE interrupt controller group Y */
668 + QE_IC_GRP_Z, /* QE interrupt controller group Z */
669 + QE_IC_GRP_RISCA, /* QE interrupt controller RISC group A */
670 + QE_IC_GRP_RISCB /* QE interrupt controller RISC group B */
671 +};
672 +
673 +struct qe_ic {
674 + /* Control registers offset */
675 + u32 __iomem *regs;
676 +
677 + /* The remapper for this QEIC */
678 + struct irq_domain *irqhost;
679 +
680 + /* The "linux" controller struct */
681 + struct irq_chip hc_irq;
682 +
683 + /* VIRQ numbers of QE high/low irqs */
684 + unsigned int virq_high;
685 + unsigned int virq_low;
686 +};
687 +
688 +/*
689 + * QE interrupt controller internal structure
690 + */
691 +struct qe_ic_info {
692 + /* location of this source at the QIMR register. */
693 + u32 mask;
694 +
695 + /* Mask register offset */
696 + u32 mask_reg;
697 +
698 + /*
699 + * for grouped interrupts sources - the interrupt
700 + * code as appears at the group priority register
701 + */
702 + u8 pri_code;
703 +
704 + /* Group priority register offset */
705 + u32 pri_reg;
706 +};
707 +
708 +static DEFINE_RAW_SPINLOCK(qe_ic_lock);
709 +
710 +static struct qe_ic_info qe_ic_info[] = {
711 + [1] = {
712 + .mask = 0x00008000,
713 + .mask_reg = QEIC_CIMR,
714 + .pri_code = 0,
715 + .pri_reg = QEIC_CIPWCC,
716 + },
717 + [2] = {
718 + .mask = 0x00004000,
719 + .mask_reg = QEIC_CIMR,
720 + .pri_code = 1,
721 + .pri_reg = QEIC_CIPWCC,
722 + },
723 + [3] = {
724 + .mask = 0x00002000,
725 + .mask_reg = QEIC_CIMR,
726 + .pri_code = 2,
727 + .pri_reg = QEIC_CIPWCC,
728 + },
729 + [10] = {
730 + .mask = 0x00000040,
731 + .mask_reg = QEIC_CIMR,
732 + .pri_code = 1,
733 + .pri_reg = QEIC_CIPZCC,
734 + },
735 + [11] = {
736 + .mask = 0x00000020,
737 + .mask_reg = QEIC_CIMR,
738 + .pri_code = 2,
739 + .pri_reg = QEIC_CIPZCC,
740 + },
741 + [12] = {
742 + .mask = 0x00000010,
743 + .mask_reg = QEIC_CIMR,
744 + .pri_code = 3,
745 + .pri_reg = QEIC_CIPZCC,
746 + },
747 + [13] = {
748 + .mask = 0x00000008,
749 + .mask_reg = QEIC_CIMR,
750 + .pri_code = 4,
751 + .pri_reg = QEIC_CIPZCC,
752 + },
753 + [14] = {
754 + .mask = 0x00000004,
755 + .mask_reg = QEIC_CIMR,
756 + .pri_code = 5,
757 + .pri_reg = QEIC_CIPZCC,
758 + },
759 + [15] = {
760 + .mask = 0x00000002,
761 + .mask_reg = QEIC_CIMR,
762 + .pri_code = 6,
763 + .pri_reg = QEIC_CIPZCC,
764 + },
765 + [20] = {
766 + .mask = 0x10000000,
767 + .mask_reg = QEIC_CRIMR,
768 + .pri_code = 3,
769 + .pri_reg = QEIC_CIPRTA,
770 + },
771 + [25] = {
772 + .mask = 0x00800000,
773 + .mask_reg = QEIC_CRIMR,
774 + .pri_code = 0,
775 + .pri_reg = QEIC_CIPRTB,
776 + },
777 + [26] = {
778 + .mask = 0x00400000,
779 + .mask_reg = QEIC_CRIMR,
780 + .pri_code = 1,
781 + .pri_reg = QEIC_CIPRTB,
782 + },
783 + [27] = {
784 + .mask = 0x00200000,
785 + .mask_reg = QEIC_CRIMR,
786 + .pri_code = 2,
787 + .pri_reg = QEIC_CIPRTB,
788 + },
789 + [28] = {
790 + .mask = 0x00100000,
791 + .mask_reg = QEIC_CRIMR,
792 + .pri_code = 3,
793 + .pri_reg = QEIC_CIPRTB,
794 + },
795 + [32] = {
796 + .mask = 0x80000000,
797 + .mask_reg = QEIC_CIMR,
798 + .pri_code = 0,
799 + .pri_reg = QEIC_CIPXCC,
800 + },
801 + [33] = {
802 + .mask = 0x40000000,
803 + .mask_reg = QEIC_CIMR,
804 + .pri_code = 1,
805 + .pri_reg = QEIC_CIPXCC,
806 + },
807 + [34] = {
808 + .mask = 0x20000000,
809 + .mask_reg = QEIC_CIMR,
810 + .pri_code = 2,
811 + .pri_reg = QEIC_CIPXCC,
812 + },
813 + [35] = {
814 + .mask = 0x10000000,
815 + .mask_reg = QEIC_CIMR,
816 + .pri_code = 3,
817 + .pri_reg = QEIC_CIPXCC,
818 + },
819 + [36] = {
820 + .mask = 0x08000000,
821 + .mask_reg = QEIC_CIMR,
822 + .pri_code = 4,
823 + .pri_reg = QEIC_CIPXCC,
824 + },
825 + [40] = {
826 + .mask = 0x00800000,
827 + .mask_reg = QEIC_CIMR,
828 + .pri_code = 0,
829 + .pri_reg = QEIC_CIPYCC,
830 + },
831 + [41] = {
832 + .mask = 0x00400000,
833 + .mask_reg = QEIC_CIMR,
834 + .pri_code = 1,
835 + .pri_reg = QEIC_CIPYCC,
836 + },
837 + [42] = {
838 + .mask = 0x00200000,
839 + .mask_reg = QEIC_CIMR,
840 + .pri_code = 2,
841 + .pri_reg = QEIC_CIPYCC,
842 + },
843 + [43] = {
844 + .mask = 0x00100000,
845 + .mask_reg = QEIC_CIMR,
846 + .pri_code = 3,
847 + .pri_reg = QEIC_CIPYCC,
848 + },
849 +};
850 +
851 +static inline u32 qe_ic_read(__be32 __iomem *base, unsigned int reg)
852 +{
853 + return ioread32be(base + (reg >> 2));
854 +}
855 +
856 +static inline void qe_ic_write(__be32 __iomem *base, unsigned int reg,
857 + u32 value)
858 +{
859 + iowrite32be(value, base + (reg >> 2));
860 +}
861 +
862 +static inline struct qe_ic *qe_ic_from_irq(unsigned int virq)
863 +{
864 + return irq_get_chip_data(virq);
865 +}
866 +
867 +static inline struct qe_ic *qe_ic_from_irq_data(struct irq_data *d)
868 +{
869 + return irq_data_get_irq_chip_data(d);
870 +}
871 +
872 +static void qe_ic_unmask_irq(struct irq_data *d)
873 +{
874 + struct qe_ic *qe_ic = qe_ic_from_irq_data(d);
875 + unsigned int src = irqd_to_hwirq(d);
876 + unsigned long flags;
877 + u32 temp;
878 +
879 + raw_spin_lock_irqsave(&qe_ic_lock, flags);
880 +
881 + temp = qe_ic_read(qe_ic->regs, qe_ic_info[src].mask_reg);
882 + qe_ic_write(qe_ic->regs, qe_ic_info[src].mask_reg,
883 + temp | qe_ic_info[src].mask);
884 +
885 + raw_spin_unlock_irqrestore(&qe_ic_lock, flags);
886 +}
887 +
888 +static void qe_ic_mask_irq(struct irq_data *d)
889 +{
890 + struct qe_ic *qe_ic = qe_ic_from_irq_data(d);
891 + unsigned int src = irqd_to_hwirq(d);
892 + unsigned long flags;
893 + u32 temp;
894 +
895 + raw_spin_lock_irqsave(&qe_ic_lock, flags);
896 +
897 + temp = qe_ic_read(qe_ic->regs, qe_ic_info[src].mask_reg);
898 + qe_ic_write(qe_ic->regs, qe_ic_info[src].mask_reg,
899 + temp & ~qe_ic_info[src].mask);
900 +
901 + /* Flush the above write before enabling interrupts; otherwise,
902 + * spurious interrupts will sometimes happen. To be 100% sure
903 + * that the write has reached the device before interrupts are
904 + * enabled, the mask register would have to be read back; however,
905 + * this is not required for correctness, only to avoid wasting
906 + * time on a large number of spurious interrupts. In testing,
907 + * a sync reduced the observed spurious interrupts to zero.
908 + */
909 + mb();
910 +
911 + raw_spin_unlock_irqrestore(&qe_ic_lock, flags);
912 +}
913 +
914 +static struct irq_chip qe_ic_irq_chip = {
915 + .name = "QEIC",
916 + .irq_unmask = qe_ic_unmask_irq,
917 + .irq_mask = qe_ic_mask_irq,
918 + .irq_mask_ack = qe_ic_mask_irq,
919 +};
920 +
921 +static int qe_ic_host_match(struct irq_domain *h, struct device_node *node,
922 + enum irq_domain_bus_token bus_token)
923 +{
924 + /* Exact match, unless qe_ic node is NULL */
925 + struct device_node *of_node = irq_domain_get_of_node(h);
926 + return of_node == NULL || of_node == node;
927 +}
928 +
929 +static int qe_ic_host_map(struct irq_domain *h, unsigned int virq,
930 + irq_hw_number_t hw)
931 +{
932 + struct qe_ic *qe_ic = h->host_data;
933 + struct irq_chip *chip;
934 +
935 + if (hw >= ARRAY_SIZE(qe_ic_info)) {
936 + pr_err("%s: Invalid hw irq number for QEIC\n", __func__);
937 + return -EINVAL;
938 + }
939 +
940 + if (qe_ic_info[hw].mask == 0) {
941 + printk(KERN_ERR "Can't map reserved IRQ\n");
942 + return -EINVAL;
943 + }
944 + /* Default chip */
945 + chip = &qe_ic->hc_irq;
946 +
947 + irq_set_chip_data(virq, qe_ic);
948 + irq_set_status_flags(virq, IRQ_LEVEL);
949 +
950 + irq_set_chip_and_handler(virq, chip, handle_level_irq);
951 +
952 + return 0;
953 +}
954 +
955 +static const struct irq_domain_ops qe_ic_host_ops = {
956 + .match = qe_ic_host_match,
957 + .map = qe_ic_host_map,
958 + .xlate = irq_domain_xlate_onetwocell,
959 +};
960 +
961 +/* Return an interrupt vector or 0 if no interrupt is pending. */
962 +static unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic)
963 +{
964 + int irq;
965 +
966 + BUG_ON(qe_ic == NULL);
967 +
968 + /* get the interrupt source vector. */
969 + irq = qe_ic_read(qe_ic->regs, QEIC_CIVEC) >> 26;
970 +
971 + if (irq == 0)
972 + return 0;
973 +
974 + return irq_linear_revmap(qe_ic->irqhost, irq);
975 +}
976 +
977 +/* Return an interrupt vector or 0 if no interrupt is pending. */
978 +static unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic)
979 +{
980 + int irq;
981 +
982 + BUG_ON(qe_ic == NULL);
983 +
984 + /* get the interrupt source vector. */
985 + irq = qe_ic_read(qe_ic->regs, QEIC_CHIVEC) >> 26;
986 +
987 + if (irq == 0)
988 + return 0;
989 +
990 + return irq_linear_revmap(qe_ic->irqhost, irq);
991 +}
992 +
993 +static inline void qe_ic_cascade_low_ipic(struct irq_desc *desc)
994 +{
995 + struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
996 + unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic);
997 +
998 + if (cascade_irq != 0)
999 + generic_handle_irq(cascade_irq);
1000 +}
1001 +
1002 +static inline void qe_ic_cascade_high_ipic(struct irq_desc *desc)
1003 +{
1004 + struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
1005 + unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic);
1006 +
1007 + if (cascade_irq != 0)
1008 + generic_handle_irq(cascade_irq);
1009 +}
1010 +
1011 +static inline void qe_ic_cascade_low_mpic(struct irq_desc *desc)
1012 +{
1013 + struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
1014 + unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic);
1015 + struct irq_chip *chip = irq_desc_get_chip(desc);
1016 +
1017 + if (cascade_irq != 0)
1018 + generic_handle_irq(cascade_irq);
1019 +
1020 + chip->irq_eoi(&desc->irq_data);
1021 +}
1022 +
1023 +static inline void qe_ic_cascade_high_mpic(struct irq_desc *desc)
1024 +{
1025 + struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
1026 + unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic);
1027 + struct irq_chip *chip = irq_desc_get_chip(desc);
1028 +
1029 + if (cascade_irq != 0)
1030 + generic_handle_irq(cascade_irq);
1031 +
1032 + chip->irq_eoi(&desc->irq_data);
1033 +}
1034 +
1035 +static inline void qe_ic_cascade_muxed_mpic(struct irq_desc *desc)
1036 +{
1037 + struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
1038 + unsigned int cascade_irq;
1039 + struct irq_chip *chip = irq_desc_get_chip(desc);
1040 +
1041 + cascade_irq = qe_ic_get_high_irq(qe_ic);
1042 + if (cascade_irq == 0)
1043 + cascade_irq = qe_ic_get_low_irq(qe_ic);
1044 +
1045 + if (cascade_irq != 0)
1046 + generic_handle_irq(cascade_irq);
1047 +
1048 + chip->irq_eoi(&desc->irq_data);
1049 +}
1050 +
1051 +static int __init qe_ic_init(struct device_node *node, unsigned int flags)
1052 +{
1053 + struct qe_ic *qe_ic;
1054 + struct resource res;
1055 + u32 temp = 0, high_active = 0;
1056 + int ret = 0;
1057 +
1058 + if (!node)
1059 + return -ENODEV;
1060 +
1061 + ret = of_address_to_resource(node, 0, &res);
1062 + if (ret) {
1063 + ret = -ENODEV;
1064 + goto err_put_node;
1065 + }
1066 +
1067 + qe_ic = kzalloc(sizeof(*qe_ic), GFP_KERNEL);
1068 + if (qe_ic == NULL) {
1069 + ret = -ENOMEM;
1070 + goto err_put_node;
1071 + }
1072 +
1073 + qe_ic->irqhost = irq_domain_add_linear(node, NR_QE_IC_INTS,
1074 + &qe_ic_host_ops, qe_ic);
1075 + if (qe_ic->irqhost == NULL) {
1076 + ret = -ENOMEM;
1077 + goto err_free_qe_ic;
1078 + }
1079 +
1080 + qe_ic->regs = ioremap(res.start, resource_size(&res));
1081 +
1082 + qe_ic->hc_irq = qe_ic_irq_chip;
1083 +
1084 + qe_ic->virq_high = irq_of_parse_and_map(node, 0);
1085 + qe_ic->virq_low = irq_of_parse_and_map(node, 1);
1086 +
1087 + if (qe_ic->virq_low == 0) {
1088 + pr_err("Failed to map QE_IC low IRQ\n");
1089 + ret = -ENOMEM;
1090 + goto err_domain_remove;
1091 + }
1092 +
1093 + /* default priority scheme is grouped. If spread mode is */
1094 + /* required, configure cicr accordingly. */
1095 + if (flags & QE_IC_SPREADMODE_GRP_W)
1096 + temp |= CICR_GWCC;
1097 + if (flags & QE_IC_SPREADMODE_GRP_X)
1098 + temp |= CICR_GXCC;
1099 + if (flags & QE_IC_SPREADMODE_GRP_Y)
1100 + temp |= CICR_GYCC;
1101 + if (flags & QE_IC_SPREADMODE_GRP_Z)
1102 + temp |= CICR_GZCC;
1103 + if (flags & QE_IC_SPREADMODE_GRP_RISCA)
1104 + temp |= CICR_GRTA;
1105 + if (flags & QE_IC_SPREADMODE_GRP_RISCB)
1106 + temp |= CICR_GRTB;
1107 +
1108 + /* choose destination signal for highest priority interrupt */
1109 + if (flags & QE_IC_HIGH_SIGNAL) {
1110 + temp |= (SIGNAL_HIGH << CICR_HPIT_SHIFT);
1111 + high_active = 1;
1112 + }
1113 +
1114 + qe_ic_write(qe_ic->regs, QEIC_CICR, temp);
1115 +
1116 + irq_set_handler_data(qe_ic->virq_low, qe_ic);
1117 + irq_set_chained_handler(qe_ic->virq_low, qe_ic_cascade_low_mpic);
1118 +
1119 + if (qe_ic->virq_high != 0 &&
1120 + qe_ic->virq_high != qe_ic->virq_low) {
1121 + irq_set_handler_data(qe_ic->virq_high, qe_ic);
1122 + irq_set_chained_handler(qe_ic->virq_high,
1123 + qe_ic_cascade_high_mpic);
1124 + }
1125 + of_node_put(node);
1126 + return 0;
1127 +
1128 +err_domain_remove:
1129 + irq_domain_remove(qe_ic->irqhost);
1130 +err_free_qe_ic:
1131 + kfree(qe_ic);
1132 +err_put_node:
1133 + of_node_put(node);
1134 + return ret;
1135 +}
1136 +
1137 +static int __init init_qe_ic(struct device_node *node,
1138 + struct device_node *parent)
1139 +{
1140 + int ret;
1141 +
1142 + ret = qe_ic_init(node, 0);
1143 + if (ret)
1144 + return ret;
1145 +
1146 + return 0;
1147 +}
1148 +
1149 +IRQCHIP_DECLARE(qeic, "fsl,qe-ic", init_qe_ic);
1150 --- a/drivers/soc/fsl/qe/Kconfig
1151 +++ b/drivers/soc/fsl/qe/Kconfig
1152 @@ -4,7 +4,7 @@
1153
1154 config QUICC_ENGINE
1155 bool "Freescale QUICC Engine (QE) Support"
1156 - depends on FSL_SOC && PPC32
1157 + depends on OF && HAS_IOMEM
1158 select GENERIC_ALLOCATOR
1159 select CRC32
1160 help
1161 --- a/drivers/soc/fsl/qe/Makefile
1162 +++ b/drivers/soc/fsl/qe/Makefile
1163 @@ -2,7 +2,7 @@
1164 #
1165 # Makefile for the linux ppc-specific parts of QE
1166 #
1167 -obj-$(CONFIG_QUICC_ENGINE)+= qe.o qe_common.o qe_ic.o qe_io.o
1168 +obj-$(CONFIG_QUICC_ENGINE)+= qe.o qe_common.o qe_io.o
1169 obj-$(CONFIG_CPM) += qe_common.o
1170 obj-$(CONFIG_UCC) += ucc.o
1171 obj-$(CONFIG_UCC_SLOW) += ucc_slow.o
1172 --- a/drivers/soc/fsl/qe/qe.c
1173 +++ b/drivers/soc/fsl/qe/qe.c
1174 @@ -33,8 +33,6 @@
1175 #include <asm/pgtable.h>
1176 #include <soc/fsl/qe/immap_qe.h>
1177 #include <soc/fsl/qe/qe.h>
1178 -#include <asm/prom.h>
1179 -#include <asm/rheap.h>
1180
1181 static void qe_snums_init(void);
1182 static int qe_sdma_init(void);
1183 @@ -107,15 +105,27 @@ void qe_reset(void)
1184 panic("sdma init failed!");
1185 }
1186
1187 +/* issue commands to QE, return 0 on success while -EIO on error
1188 + *
1189 + * @cmd: the command code, should be QE_INIT_TX_RX, QE_STOP_TX and so on
1190 + * @device: which sub-block will run the command, QE_CR_SUBBLOCK_UCCFAST1 - 8
1191 + * , QE_CR_SUBBLOCK_UCCSLOW1 - 8, QE_CR_SUBBLOCK_MCC1 - 3,
1192 + * QE_CR_SUBBLOCK_IDMA1 - 4 and such on.
1193 + * @mcn_protocol: specifies mode for the command for non-MCC, should be
1194 + * QE_CR_PROTOCOL_HDLC_TRANSPARENT, QE_CR_PROTOCOL_QMC, QE_CR_PROTOCOL_UART
1195 + * and such on.
1196 + * @cmd_input: command related data.
1197 + */
1198 int qe_issue_cmd(u32 cmd, u32 device, u8 mcn_protocol, u32 cmd_input)
1199 {
1200 unsigned long flags;
1201 u8 mcn_shift = 0, dev_shift = 0;
1202 - u32 ret;
1203 + int ret;
1204 + int i;
1205
1206 spin_lock_irqsave(&qe_lock, flags);
1207 if (cmd == QE_RESET) {
1208 - out_be32(&qe_immr->cp.cecr, (u32) (cmd | QE_CR_FLG));
1209 + iowrite32be((cmd | QE_CR_FLG), &qe_immr->cp.cecr);
1210 } else {
1211 if (cmd == QE_ASSIGN_PAGE) {
1212 /* Here device is the SNUM, not sub-block */
1213 @@ -132,20 +142,26 @@ int qe_issue_cmd(u32 cmd, u32 device, u8
1214 mcn_shift = QE_CR_MCN_NORMAL_SHIFT;
1215 }
1216
1217 - out_be32(&qe_immr->cp.cecdr, cmd_input);
1218 - out_be32(&qe_immr->cp.cecr,
1219 - (cmd | QE_CR_FLG | ((u32) device << dev_shift) | (u32)
1220 - mcn_protocol << mcn_shift));
1221 + iowrite32be(cmd_input, &qe_immr->cp.cecdr);
1222 + iowrite32be((cmd | QE_CR_FLG | ((u32)device << dev_shift) |
1223 + (u32)mcn_protocol << mcn_shift), &qe_immr->cp.cecr);
1224 }
1225
1226 /* wait for the QE_CR_FLG to clear */
1227 - ret = spin_event_timeout((in_be32(&qe_immr->cp.cecr) & QE_CR_FLG) == 0,
1228 - 100, 0);
1229 + ret = -EIO;
1230 + for (i = 0; i < 100; i++) {
1231 + if ((ioread32be(&qe_immr->cp.cecr) & QE_CR_FLG) == 0) {
1232 + ret = 0;
1233 + break;
1234 + }
1235 + udelay(1);
1236 + }
1237 +
1238 /* On timeout (e.g. failure), the expression will be false (ret == 0),
1239 otherwise it will be true (ret == 1). */
1240 spin_unlock_irqrestore(&qe_lock, flags);
1241
1242 - return ret == 1;
1243 + return ret;
1244 }
1245 EXPORT_SYMBOL(qe_issue_cmd);
1246
1247 @@ -170,6 +186,8 @@ unsigned int qe_get_brg_clk(void)
1248 int size;
1249 const u32 *prop;
1250 unsigned int mod;
1251 + u32 val;
1252 + int ret;
1253
1254 if (brg_clk)
1255 return brg_clk;
1256 @@ -181,9 +199,9 @@ unsigned int qe_get_brg_clk(void)
1257 return brg_clk;
1258 }
1259
1260 - prop = of_get_property(qe, "brg-frequency", &size);
1261 - if (prop && size == sizeof(*prop))
1262 - brg_clk = *prop;
1263 + ret = of_property_read_u32(qe, "brg-frequency", &val);
1264 + if (!ret)
1265 + brg_clk = val;
1266
1267 of_node_put(qe);
1268
1269 @@ -236,7 +254,7 @@ int qe_setbrg(enum qe_clock brg, unsigne
1270 tempval = ((divisor - 1) << QE_BRGC_DIVISOR_SHIFT) |
1271 QE_BRGC_ENABLE | div16;
1272
1273 - out_be32(&qe_immr->brg.brgc[brg - QE_BRG1], tempval);
1274 + iowrite32be(tempval, &qe_immr->brg.brgc[brg - QE_BRG1]);
1275
1276 return 0;
1277 }
1278 @@ -370,9 +388,9 @@ static int qe_sdma_init(void)
1279 return -ENOMEM;
1280 }
1281
1282 - out_be32(&sdma->sdebcr, (u32) sdma_buf_offset & QE_SDEBCR_BA_MASK);
1283 - out_be32(&sdma->sdmr, (QE_SDMR_GLB_1_MSK |
1284 - (0x1 << QE_SDMR_CEN_SHIFT)));
1285 + iowrite32be((u32)sdma_buf_offset & QE_SDEBCR_BA_MASK, &sdma->sdebcr);
1286 + iowrite32be((QE_SDMR_GLB_1_MSK | (0x1 << QE_SDMR_CEN_SHIFT)),
1287 + &sdma->sdmr);
1288
1289 return 0;
1290 }
1291 @@ -410,14 +428,14 @@ static void qe_upload_microcode(const vo
1292 "uploading microcode '%s'\n", ucode->id);
1293
1294 /* Use auto-increment */
1295 - out_be32(&qe_immr->iram.iadd, be32_to_cpu(ucode->iram_offset) |
1296 - QE_IRAM_IADD_AIE | QE_IRAM_IADD_BADDR);
1297 + iowrite32be(be32_to_cpu(ucode->iram_offset) | QE_IRAM_IADD_AIE |
1298 + QE_IRAM_IADD_BADDR, &qe_immr->iram.iadd);
1299
1300 for (i = 0; i < be32_to_cpu(ucode->count); i++)
1301 - out_be32(&qe_immr->iram.idata, be32_to_cpu(code[i]));
1302 + iowrite32be(be32_to_cpu(code[i]), &qe_immr->iram.idata);
1303
1304 /* Set I-RAM Ready Register */
1305 - out_be32(&qe_immr->iram.iready, be32_to_cpu(QE_IRAM_READY));
1306 + iowrite32be(be32_to_cpu(QE_IRAM_READY), &qe_immr->iram.iready);
1307 }
1308
1309 /*
1310 @@ -502,7 +520,7 @@ int qe_upload_firmware(const struct qe_f
1311 * If the microcode calls for it, split the I-RAM.
1312 */
1313 if (!firmware->split)
1314 - setbits16(&qe_immr->cp.cercr, QE_CP_CERCR_CIR);
1315 + qe_setbits16(&qe_immr->cp.cercr, QE_CP_CERCR_CIR);
1316
1317 if (firmware->soc.model)
1318 printk(KERN_INFO
1319 @@ -536,11 +554,11 @@ int qe_upload_firmware(const struct qe_f
1320 u32 trap = be32_to_cpu(ucode->traps[j]);
1321
1322 if (trap)
1323 - out_be32(&qe_immr->rsp[i].tibcr[j], trap);
1324 + iowrite32be(trap, &qe_immr->rsp[i].tibcr[j]);
1325 }
1326
1327 /* Enable traps */
1328 - out_be32(&qe_immr->rsp[i].eccr, be32_to_cpu(ucode->eccr));
1329 + iowrite32be(be32_to_cpu(ucode->eccr), &qe_immr->rsp[i].eccr);
1330 }
1331
1332 qe_firmware_uploaded = 1;
1333 @@ -659,9 +677,9 @@ EXPORT_SYMBOL(qe_get_num_of_risc);
1334 unsigned int qe_get_num_of_snums(void)
1335 {
1336 struct device_node *qe;
1337 - int size;
1338 unsigned int num_of_snums;
1339 - const u32 *prop;
1340 + u32 val;
1341 + int ret;
1342
1343 num_of_snums = 28; /* The default number of snum for threads is 28 */
1344 qe = of_find_compatible_node(NULL, NULL, "fsl,qe");
1345 @@ -675,9 +693,9 @@ unsigned int qe_get_num_of_snums(void)
1346 return num_of_snums;
1347 }
1348
1349 - prop = of_get_property(qe, "fsl,qe-num-snums", &size);
1350 - if (prop && size == sizeof(*prop)) {
1351 - num_of_snums = *prop;
1352 + ret = of_property_read_u32(qe, "fsl,qe-num-snums", &val);
1353 + if (!ret) {
1354 + num_of_snums = val;
1355 if ((num_of_snums < 28) || (num_of_snums > QE_NUM_OF_SNUM)) {
1356 /* No QE ever has fewer than 28 SNUMs */
1357 pr_err("QE: number of snum is invalid\n");
1358 --- a/drivers/soc/fsl/qe/qe_ic.h
1359 +++ /dev/null
1360 @@ -1,103 +0,0 @@
1361 -/*
1362 - * drivers/soc/fsl/qe/qe_ic.h
1363 - *
1364 - * QUICC ENGINE Interrupt Controller Header
1365 - *
1366 - * Copyright (C) 2006 Freescale Semiconductor, Inc. All rights reserved.
1367 - *
1368 - * Author: Li Yang <leoli@freescale.com>
1369 - * Based on code from Shlomi Gridish <gridish@freescale.com>
1370 - *
1371 - * This program is free software; you can redistribute it and/or modify it
1372 - * under the terms of the GNU General Public License as published by the
1373 - * Free Software Foundation; either version 2 of the License, or (at your
1374 - * option) any later version.
1375 - */
1376 -#ifndef _POWERPC_SYSDEV_QE_IC_H
1377 -#define _POWERPC_SYSDEV_QE_IC_H
1378 -
1379 -#include <soc/fsl/qe/qe_ic.h>
1380 -
1381 -#define NR_QE_IC_INTS 64
1382 -
1383 -/* QE IC registers offset */
1384 -#define QEIC_CICR 0x00
1385 -#define QEIC_CIVEC 0x04
1386 -#define QEIC_CRIPNR 0x08
1387 -#define QEIC_CIPNR 0x0c
1388 -#define QEIC_CIPXCC 0x10
1389 -#define QEIC_CIPYCC 0x14
1390 -#define QEIC_CIPWCC 0x18
1391 -#define QEIC_CIPZCC 0x1c
1392 -#define QEIC_CIMR 0x20
1393 -#define QEIC_CRIMR 0x24
1394 -#define QEIC_CICNR 0x28
1395 -#define QEIC_CIPRTA 0x30
1396 -#define QEIC_CIPRTB 0x34
1397 -#define QEIC_CRICR 0x3c
1398 -#define QEIC_CHIVEC 0x60
1399 -
1400 -/* Interrupt priority registers */
1401 -#define CIPCC_SHIFT_PRI0 29
1402 -#define CIPCC_SHIFT_PRI1 26
1403 -#define CIPCC_SHIFT_PRI2 23
1404 -#define CIPCC_SHIFT_PRI3 20
1405 -#define CIPCC_SHIFT_PRI4 13
1406 -#define CIPCC_SHIFT_PRI5 10
1407 -#define CIPCC_SHIFT_PRI6 7
1408 -#define CIPCC_SHIFT_PRI7 4
1409 -
1410 -/* CICR priority modes */
1411 -#define CICR_GWCC 0x00040000
1412 -#define CICR_GXCC 0x00020000
1413 -#define CICR_GYCC 0x00010000
1414 -#define CICR_GZCC 0x00080000
1415 -#define CICR_GRTA 0x00200000
1416 -#define CICR_GRTB 0x00400000
1417 -#define CICR_HPIT_SHIFT 8
1418 -#define CICR_HPIT_MASK 0x00000300
1419 -#define CICR_HP_SHIFT 24
1420 -#define CICR_HP_MASK 0x3f000000
1421 -
1422 -/* CICNR */
1423 -#define CICNR_WCC1T_SHIFT 20
1424 -#define CICNR_ZCC1T_SHIFT 28
1425 -#define CICNR_YCC1T_SHIFT 12
1426 -#define CICNR_XCC1T_SHIFT 4
1427 -
1428 -/* CRICR */
1429 -#define CRICR_RTA1T_SHIFT 20
1430 -#define CRICR_RTB1T_SHIFT 28
1431 -
1432 -/* Signal indicator */
1433 -#define SIGNAL_MASK 3
1434 -#define SIGNAL_HIGH 2
1435 -#define SIGNAL_LOW 0
1436 -
1437 -struct qe_ic {
1438 - /* Control registers offset */
1439 - volatile u32 __iomem *regs;
1440 -
1441 - /* The remapper for this QEIC */
1442 - struct irq_domain *irqhost;
1443 -
1444 - /* The "linux" controller struct */
1445 - struct irq_chip hc_irq;
1446 -
1447 - /* VIRQ numbers of QE high/low irqs */
1448 - unsigned int virq_high;
1449 - unsigned int virq_low;
1450 -};
1451 -
1452 -/*
1453 - * QE interrupt controller internal structure
1454 - */
1455 -struct qe_ic_info {
1456 - u32 mask; /* location of this source at the QIMR register. */
1457 - u32 mask_reg; /* Mask register offset */
1458 - u8 pri_code; /* for grouped interrupts sources - the interrupt
1459 - code as appears at the group priority register */
1460 - u32 pri_reg; /* Group priority register offset */
1461 -};
1462 -
1463 -#endif /* _POWERPC_SYSDEV_QE_IC_H */
1464 --- a/drivers/soc/fsl/qe/qe_io.c
1465 +++ b/drivers/soc/fsl/qe/qe_io.c
1466 @@ -22,8 +22,6 @@
1467
1468 #include <asm/io.h>
1469 #include <soc/fsl/qe/qe.h>
1470 -#include <asm/prom.h>
1471 -#include <sysdev/fsl_soc.h>
1472
1473 #undef DEBUG
1474
1475 @@ -61,16 +59,16 @@ void __par_io_config_pin(struct qe_pio_r
1476 pin_mask1bit = (u32) (1 << (QE_PIO_PINS - (pin + 1)));
1477
1478 /* Set open drain, if required */
1479 - tmp_val = in_be32(&par_io->cpodr);
1480 + tmp_val = ioread32be(&par_io->cpodr);
1481 if (open_drain)
1482 - out_be32(&par_io->cpodr, pin_mask1bit | tmp_val);
1483 + iowrite32be(pin_mask1bit | tmp_val, &par_io->cpodr);
1484 else
1485 - out_be32(&par_io->cpodr, ~pin_mask1bit & tmp_val);
1486 + iowrite32be(~pin_mask1bit & tmp_val, &par_io->cpodr);
1487
1488 /* define direction */
1489 tmp_val = (pin > (QE_PIO_PINS / 2) - 1) ?
1490 - in_be32(&par_io->cpdir2) :
1491 - in_be32(&par_io->cpdir1);
1492 + ioread32be(&par_io->cpdir2) :
1493 + ioread32be(&par_io->cpdir1);
1494
1495 /* get all bits mask for 2 bit per port */
1496 pin_mask2bits = (u32) (0x3 << (QE_PIO_PINS -
1497 @@ -82,34 +80,30 @@ void __par_io_config_pin(struct qe_pio_r
1498
1499 /* clear and set 2 bits mask */
1500 if (pin > (QE_PIO_PINS / 2) - 1) {
1501 - out_be32(&par_io->cpdir2,
1502 - ~pin_mask2bits & tmp_val);
1503 + iowrite32be(~pin_mask2bits & tmp_val, &par_io->cpdir2);
1504 tmp_val &= ~pin_mask2bits;
1505 - out_be32(&par_io->cpdir2, new_mask2bits | tmp_val);
1506 + iowrite32be(new_mask2bits | tmp_val, &par_io->cpdir2);
1507 } else {
1508 - out_be32(&par_io->cpdir1,
1509 - ~pin_mask2bits & tmp_val);
1510 + iowrite32be(~pin_mask2bits & tmp_val, &par_io->cpdir1);
1511 tmp_val &= ~pin_mask2bits;
1512 - out_be32(&par_io->cpdir1, new_mask2bits | tmp_val);
1513 + iowrite32be(new_mask2bits | tmp_val, &par_io->cpdir1);
1514 }
1515 /* define pin assignment */
1516 tmp_val = (pin > (QE_PIO_PINS / 2) - 1) ?
1517 - in_be32(&par_io->cppar2) :
1518 - in_be32(&par_io->cppar1);
1519 + ioread32be(&par_io->cppar2) :
1520 + ioread32be(&par_io->cppar1);
1521
1522 new_mask2bits = (u32) (assignment << (QE_PIO_PINS -
1523 (pin % (QE_PIO_PINS / 2) + 1) * 2));
1524 /* clear and set 2 bits mask */
1525 if (pin > (QE_PIO_PINS / 2) - 1) {
1526 - out_be32(&par_io->cppar2,
1527 - ~pin_mask2bits & tmp_val);
1528 + iowrite32be(~pin_mask2bits & tmp_val, &par_io->cppar2);
1529 tmp_val &= ~pin_mask2bits;
1530 - out_be32(&par_io->cppar2, new_mask2bits | tmp_val);
1531 + iowrite32be(new_mask2bits | tmp_val, &par_io->cppar2);
1532 } else {
1533 - out_be32(&par_io->cppar1,
1534 - ~pin_mask2bits & tmp_val);
1535 + iowrite32be(~pin_mask2bits & tmp_val, &par_io->cppar1);
1536 tmp_val &= ~pin_mask2bits;
1537 - out_be32(&par_io->cppar1, new_mask2bits | tmp_val);
1538 + iowrite32be(new_mask2bits | tmp_val, &par_io->cppar1);
1539 }
1540 }
1541 EXPORT_SYMBOL(__par_io_config_pin);
1542 @@ -137,12 +131,12 @@ int par_io_data_set(u8 port, u8 pin, u8
1543 /* calculate pin location */
1544 pin_mask = (u32) (1 << (QE_PIO_PINS - 1 - pin));
1545
1546 - tmp_val = in_be32(&par_io[port].cpdata);
1547 + tmp_val = ioread32be(&par_io[port].cpdata);
1548
1549 if (val == 0) /* clear */
1550 - out_be32(&par_io[port].cpdata, ~pin_mask & tmp_val);
1551 + iowrite32be(~pin_mask & tmp_val, &par_io[port].cpdata);
1552 else /* set */
1553 - out_be32(&par_io[port].cpdata, pin_mask | tmp_val);
1554 + iowrite32be(pin_mask | tmp_val, &par_io[port].cpdata);
1555
1556 return 0;
1557 }
1558 --- a/drivers/soc/fsl/qe/qe_tdm.c
1559 +++ b/drivers/soc/fsl/qe/qe_tdm.c
1560 @@ -228,10 +228,10 @@ void ucc_tdm_init(struct ucc_tdm *utdm,
1561 &siram[siram_entry_id * 32 + 0x200 + i]);
1562 }
1563
1564 - setbits16(&siram[(siram_entry_id * 32) + (utdm->num_of_ts - 1)],
1565 - SIR_LAST);
1566 - setbits16(&siram[(siram_entry_id * 32) + 0x200 + (utdm->num_of_ts - 1)],
1567 - SIR_LAST);
1568 + qe_setbits16(&siram[(siram_entry_id * 32) + (utdm->num_of_ts - 1)],
1569 + SIR_LAST);
1570 + qe_setbits16(&siram[(siram_entry_id * 32) + 0x200 +
1571 + (utdm->num_of_ts - 1)], SIR_LAST);
1572
1573 /* Set SIxMR register */
1574 sixmr = SIMR_SAD(siram_entry_id);
1575 --- a/drivers/soc/fsl/qe/ucc.c
1576 +++ b/drivers/soc/fsl/qe/ucc.c
1577 @@ -39,7 +39,7 @@ int ucc_set_qe_mux_mii_mng(unsigned int
1578 return -EINVAL;
1579
1580 spin_lock_irqsave(&cmxgcr_lock, flags);
1581 - clrsetbits_be32(&qe_immr->qmx.cmxgcr, QE_CMXGCR_MII_ENET_MNG,
1582 + qe_clrsetbits32(&qe_immr->qmx.cmxgcr, QE_CMXGCR_MII_ENET_MNG,
1583 ucc_num << QE_CMXGCR_MII_ENET_MNG_SHIFT);
1584 spin_unlock_irqrestore(&cmxgcr_lock, flags);
1585
1586 @@ -84,7 +84,7 @@ int ucc_set_type(unsigned int ucc_num, e
1587 return -EINVAL;
1588 }
1589
1590 - clrsetbits_8(guemr, UCC_GUEMR_MODE_MASK,
1591 + qe_clrsetbits8(guemr, UCC_GUEMR_MODE_MASK,
1592 UCC_GUEMR_SET_RESERVED3 | speed);
1593
1594 return 0;
1595 @@ -113,9 +113,9 @@ int ucc_mux_set_grant_tsa_bkpt(unsigned
1596 get_cmxucr_reg(ucc_num, &cmxucr, &reg_num, &shift);
1597
1598 if (set)
1599 - setbits32(cmxucr, mask << shift);
1600 + qe_setbits32(cmxucr, mask << shift);
1601 else
1602 - clrbits32(cmxucr, mask << shift);
1603 + qe_clrbits32(cmxucr, mask << shift);
1604
1605 return 0;
1606 }
1607 @@ -211,7 +211,7 @@ int ucc_set_qe_mux_rxtx(unsigned int ucc
1608 if (mode == COMM_DIR_RX)
1609 shift += 4;
1610
1611 - clrsetbits_be32(cmxucr, QE_CMXUCR_TX_CLK_SRC_MASK << shift,
1612 + qe_clrsetbits32(cmxucr, QE_CMXUCR_TX_CLK_SRC_MASK << shift,
1613 clock_bits << shift);
1614
1615 return 0;
1616 --- a/drivers/soc/fsl/qe/ucc_fast.c
1617 +++ b/drivers/soc/fsl/qe/ucc_fast.c
1618 @@ -33,41 +33,41 @@ void ucc_fast_dump_regs(struct ucc_fast_
1619 printk(KERN_INFO "Base address: 0x%p\n", uccf->uf_regs);
1620
1621 printk(KERN_INFO "gumr : addr=0x%p, val=0x%08x\n",
1622 - &uccf->uf_regs->gumr, in_be32(&uccf->uf_regs->gumr));
1623 + &uccf->uf_regs->gumr, ioread32be(&uccf->uf_regs->gumr));
1624 printk(KERN_INFO "upsmr : addr=0x%p, val=0x%08x\n",
1625 - &uccf->uf_regs->upsmr, in_be32(&uccf->uf_regs->upsmr));
1626 + &uccf->uf_regs->upsmr, ioread32be(&uccf->uf_regs->upsmr));
1627 printk(KERN_INFO "utodr : addr=0x%p, val=0x%04x\n",
1628 - &uccf->uf_regs->utodr, in_be16(&uccf->uf_regs->utodr));
1629 + &uccf->uf_regs->utodr, ioread16be(&uccf->uf_regs->utodr));
1630 printk(KERN_INFO "udsr : addr=0x%p, val=0x%04x\n",
1631 - &uccf->uf_regs->udsr, in_be16(&uccf->uf_regs->udsr));
1632 + &uccf->uf_regs->udsr, ioread16be(&uccf->uf_regs->udsr));
1633 printk(KERN_INFO "ucce : addr=0x%p, val=0x%08x\n",
1634 - &uccf->uf_regs->ucce, in_be32(&uccf->uf_regs->ucce));
1635 + &uccf->uf_regs->ucce, ioread32be(&uccf->uf_regs->ucce));
1636 printk(KERN_INFO "uccm : addr=0x%p, val=0x%08x\n",
1637 - &uccf->uf_regs->uccm, in_be32(&uccf->uf_regs->uccm));
1638 + &uccf->uf_regs->uccm, ioread32be(&uccf->uf_regs->uccm));
1639 printk(KERN_INFO "uccs : addr=0x%p, val=0x%02x\n",
1640 - &uccf->uf_regs->uccs, in_8(&uccf->uf_regs->uccs));
1641 + &uccf->uf_regs->uccs, ioread8(&uccf->uf_regs->uccs));
1642 printk(KERN_INFO "urfb : addr=0x%p, val=0x%08x\n",
1643 - &uccf->uf_regs->urfb, in_be32(&uccf->uf_regs->urfb));
1644 + &uccf->uf_regs->urfb, ioread32be(&uccf->uf_regs->urfb));
1645 printk(KERN_INFO "urfs : addr=0x%p, val=0x%04x\n",
1646 - &uccf->uf_regs->urfs, in_be16(&uccf->uf_regs->urfs));
1647 + &uccf->uf_regs->urfs, ioread16be(&uccf->uf_regs->urfs));
1648 printk(KERN_INFO "urfet : addr=0x%p, val=0x%04x\n",
1649 - &uccf->uf_regs->urfet, in_be16(&uccf->uf_regs->urfet));
1650 + &uccf->uf_regs->urfet, ioread16be(&uccf->uf_regs->urfet));
1651 printk(KERN_INFO "urfset: addr=0x%p, val=0x%04x\n",
1652 - &uccf->uf_regs->urfset, in_be16(&uccf->uf_regs->urfset));
1653 + &uccf->uf_regs->urfset, ioread16be(&uccf->uf_regs->urfset));
1654 printk(KERN_INFO "utfb : addr=0x%p, val=0x%08x\n",
1655 - &uccf->uf_regs->utfb, in_be32(&uccf->uf_regs->utfb));
1656 + &uccf->uf_regs->utfb, ioread32be(&uccf->uf_regs->utfb));
1657 printk(KERN_INFO "utfs : addr=0x%p, val=0x%04x\n",
1658 - &uccf->uf_regs->utfs, in_be16(&uccf->uf_regs->utfs));
1659 + &uccf->uf_regs->utfs, ioread16be(&uccf->uf_regs->utfs));
1660 printk(KERN_INFO "utfet : addr=0x%p, val=0x%04x\n",
1661 - &uccf->uf_regs->utfet, in_be16(&uccf->uf_regs->utfet));
1662 + &uccf->uf_regs->utfet, ioread16be(&uccf->uf_regs->utfet));
1663 printk(KERN_INFO "utftt : addr=0x%p, val=0x%04x\n",
1664 - &uccf->uf_regs->utftt, in_be16(&uccf->uf_regs->utftt));
1665 + &uccf->uf_regs->utftt, ioread16be(&uccf->uf_regs->utftt));
1666 printk(KERN_INFO "utpt : addr=0x%p, val=0x%04x\n",
1667 - &uccf->uf_regs->utpt, in_be16(&uccf->uf_regs->utpt));
1668 + &uccf->uf_regs->utpt, ioread16be(&uccf->uf_regs->utpt));
1669 printk(KERN_INFO "urtry : addr=0x%p, val=0x%08x\n",
1670 - &uccf->uf_regs->urtry, in_be32(&uccf->uf_regs->urtry));
1671 + &uccf->uf_regs->urtry, ioread32be(&uccf->uf_regs->urtry));
1672 printk(KERN_INFO "guemr : addr=0x%p, val=0x%02x\n",
1673 - &uccf->uf_regs->guemr, in_8(&uccf->uf_regs->guemr));
1674 + &uccf->uf_regs->guemr, ioread8(&uccf->uf_regs->guemr));
1675 }
1676 EXPORT_SYMBOL(ucc_fast_dump_regs);
1677
1678 @@ -89,7 +89,7 @@ EXPORT_SYMBOL(ucc_fast_get_qe_cr_subbloc
1679
1680 void ucc_fast_transmit_on_demand(struct ucc_fast_private * uccf)
1681 {
1682 - out_be16(&uccf->uf_regs->utodr, UCC_FAST_TOD);
1683 + iowrite16be(UCC_FAST_TOD, &uccf->uf_regs->utodr);
1684 }
1685 EXPORT_SYMBOL(ucc_fast_transmit_on_demand);
1686
1687 @@ -101,7 +101,7 @@ void ucc_fast_enable(struct ucc_fast_pri
1688 uf_regs = uccf->uf_regs;
1689
1690 /* Enable reception and/or transmission on this UCC. */
1691 - gumr = in_be32(&uf_regs->gumr);
1692 + gumr = ioread32be(&uf_regs->gumr);
1693 if (mode & COMM_DIR_TX) {
1694 gumr |= UCC_FAST_GUMR_ENT;
1695 uccf->enabled_tx = 1;
1696 @@ -110,7 +110,7 @@ void ucc_fast_enable(struct ucc_fast_pri
1697 gumr |= UCC_FAST_GUMR_ENR;
1698 uccf->enabled_rx = 1;
1699 }
1700 - out_be32(&uf_regs->gumr, gumr);
1701 + iowrite32be(gumr, &uf_regs->gumr);
1702 }
1703 EXPORT_SYMBOL(ucc_fast_enable);
1704
1705 @@ -122,7 +122,7 @@ void ucc_fast_disable(struct ucc_fast_pr
1706 uf_regs = uccf->uf_regs;
1707
1708 /* Disable reception and/or transmission on this UCC. */
1709 - gumr = in_be32(&uf_regs->gumr);
1710 + gumr = ioread32be(&uf_regs->gumr);
1711 if (mode & COMM_DIR_TX) {
1712 gumr &= ~UCC_FAST_GUMR_ENT;
1713 uccf->enabled_tx = 0;
1714 @@ -131,7 +131,7 @@ void ucc_fast_disable(struct ucc_fast_pr
1715 gumr &= ~UCC_FAST_GUMR_ENR;
1716 uccf->enabled_rx = 0;
1717 }
1718 - out_be32(&uf_regs->gumr, gumr);
1719 + iowrite32be(gumr, &uf_regs->gumr);
1720 }
1721 EXPORT_SYMBOL(ucc_fast_disable);
1722
1723 @@ -263,12 +263,13 @@ int ucc_fast_init(struct ucc_fast_info *
1724 gumr |= uf_info->tenc;
1725 gumr |= uf_info->tcrc;
1726 gumr |= uf_info->mode;
1727 - out_be32(&uf_regs->gumr, gumr);
1728 + iowrite32be(gumr, &uf_regs->gumr);
1729
1730 /* Allocate memory for Tx Virtual Fifo */
1731 uccf->ucc_fast_tx_virtual_fifo_base_offset =
1732 qe_muram_alloc(uf_info->utfs, UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT);
1733 - if (IS_ERR_VALUE(uccf->ucc_fast_tx_virtual_fifo_base_offset)) {
1734 + if (IS_ERR_VALUE((unsigned long)uccf->
1735 + ucc_fast_tx_virtual_fifo_base_offset)) {
1736 printk(KERN_ERR "%s: cannot allocate MURAM for TX FIFO\n",
1737 __func__);
1738 uccf->ucc_fast_tx_virtual_fifo_base_offset = 0;
1739 @@ -281,7 +282,8 @@ int ucc_fast_init(struct ucc_fast_info *
1740 qe_muram_alloc(uf_info->urfs +
1741 UCC_FAST_RECEIVE_VIRTUAL_FIFO_SIZE_FUDGE_FACTOR,
1742 UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT);
1743 - if (IS_ERR_VALUE(uccf->ucc_fast_rx_virtual_fifo_base_offset)) {
1744 + if (IS_ERR_VALUE((unsigned long)uccf->
1745 + ucc_fast_rx_virtual_fifo_base_offset)) {
1746 printk(KERN_ERR "%s: cannot allocate MURAM for RX FIFO\n",
1747 __func__);
1748 uccf->ucc_fast_rx_virtual_fifo_base_offset = 0;
1749 @@ -290,15 +292,15 @@ int ucc_fast_init(struct ucc_fast_info *
1750 }
1751
1752 /* Set Virtual Fifo registers */
1753 - out_be16(&uf_regs->urfs, uf_info->urfs);
1754 - out_be16(&uf_regs->urfet, uf_info->urfet);
1755 - out_be16(&uf_regs->urfset, uf_info->urfset);
1756 - out_be16(&uf_regs->utfs, uf_info->utfs);
1757 - out_be16(&uf_regs->utfet, uf_info->utfet);
1758 - out_be16(&uf_regs->utftt, uf_info->utftt);
1759 + iowrite16be(uf_info->urfs, &uf_regs->urfs);
1760 + iowrite16be(uf_info->urfet, &uf_regs->urfet);
1761 + iowrite16be(uf_info->urfset, &uf_regs->urfset);
1762 + iowrite16be(uf_info->utfs, &uf_regs->utfs);
1763 + iowrite16be(uf_info->utfet, &uf_regs->utfet);
1764 + iowrite16be(uf_info->utftt, &uf_regs->utftt);
1765 /* utfb, urfb are offsets from MURAM base */
1766 - out_be32(&uf_regs->utfb, uccf->ucc_fast_tx_virtual_fifo_base_offset);
1767 - out_be32(&uf_regs->urfb, uccf->ucc_fast_rx_virtual_fifo_base_offset);
1768 + iowrite32be(uccf->ucc_fast_tx_virtual_fifo_base_offset, &uf_regs->utfb);
1769 + iowrite32be(uccf->ucc_fast_rx_virtual_fifo_base_offset, &uf_regs->urfb);
1770
1771 /* Mux clocking */
1772 /* Grant Support */
1773 @@ -366,14 +368,14 @@ int ucc_fast_init(struct ucc_fast_info *
1774 }
1775
1776 /* Set interrupt mask register at UCC level. */
1777 - out_be32(&uf_regs->uccm, uf_info->uccm_mask);
1778 + iowrite32be(uf_info->uccm_mask, &uf_regs->uccm);
1779
1780 /* First, clear anything pending at UCC level,
1781 * otherwise, old garbage may come through
1782 * as soon as the dam is opened. */
1783
1784 /* Writing '1' clears */
1785 - out_be32(&uf_regs->ucce, 0xffffffff);
1786 + iowrite32be(0xffffffff, &uf_regs->ucce);
1787
1788 *uccf_ret = uccf;
1789 return 0;
1790 --- a/drivers/tty/serial/ucc_uart.c
1791 +++ b/drivers/tty/serial/ucc_uart.c
1792 @@ -34,6 +34,7 @@
1793 #include <soc/fsl/qe/ucc_slow.h>
1794
1795 #include <linux/firmware.h>
1796 +#include <asm/cpm.h>
1797 #include <asm/reg.h>
1798
1799 /*
1800 --- a/include/soc/fsl/qe/qe.h
1801 +++ b/include/soc/fsl/qe/qe.h
1802 @@ -21,7 +21,6 @@
1803 #include <linux/spinlock.h>
1804 #include <linux/errno.h>
1805 #include <linux/err.h>
1806 -#include <asm/cpm.h>
1807 #include <soc/fsl/qe/immap_qe.h>
1808 #include <linux/of.h>
1809 #include <linux/of_address.h>
1810 --- a/include/soc/fsl/qe/qe_ic.h
1811 +++ /dev/null
1812 @@ -1,139 +0,0 @@
1813 -/*
1814 - * Copyright (C) 2006 Freescale Semiconductor, Inc. All rights reserved.
1815 - *
1816 - * Authors: Shlomi Gridish <gridish@freescale.com>
1817 - * Li Yang <leoli@freescale.com>
1818 - *
1819 - * Description:
1820 - * QE IC external definitions and structure.
1821 - *
1822 - * This program is free software; you can redistribute it and/or modify it
1823 - * under the terms of the GNU General Public License as published by the
1824 - * Free Software Foundation; either version 2 of the License, or (at your
1825 - * option) any later version.
1826 - */
1827 -#ifndef _ASM_POWERPC_QE_IC_H
1828 -#define _ASM_POWERPC_QE_IC_H
1829 -
1830 -#include <linux/irq.h>
1831 -
1832 -struct device_node;
1833 -struct qe_ic;
1834 -
1835 -#define NUM_OF_QE_IC_GROUPS 6
1836 -
1837 -/* Flags when we init the QE IC */
1838 -#define QE_IC_SPREADMODE_GRP_W 0x00000001
1839 -#define QE_IC_SPREADMODE_GRP_X 0x00000002
1840 -#define QE_IC_SPREADMODE_GRP_Y 0x00000004
1841 -#define QE_IC_SPREADMODE_GRP_Z 0x00000008
1842 -#define QE_IC_SPREADMODE_GRP_RISCA 0x00000010
1843 -#define QE_IC_SPREADMODE_GRP_RISCB 0x00000020
1844 -
1845 -#define QE_IC_LOW_SIGNAL 0x00000100
1846 -#define QE_IC_HIGH_SIGNAL 0x00000200
1847 -
1848 -#define QE_IC_GRP_W_PRI0_DEST_SIGNAL_HIGH 0x00001000
1849 -#define QE_IC_GRP_W_PRI1_DEST_SIGNAL_HIGH 0x00002000
1850 -#define QE_IC_GRP_X_PRI0_DEST_SIGNAL_HIGH 0x00004000
1851 -#define QE_IC_GRP_X_PRI1_DEST_SIGNAL_HIGH 0x00008000
1852 -#define QE_IC_GRP_Y_PRI0_DEST_SIGNAL_HIGH 0x00010000
1853 -#define QE_IC_GRP_Y_PRI1_DEST_SIGNAL_HIGH 0x00020000
1854 -#define QE_IC_GRP_Z_PRI0_DEST_SIGNAL_HIGH 0x00040000
1855 -#define QE_IC_GRP_Z_PRI1_DEST_SIGNAL_HIGH 0x00080000
1856 -#define QE_IC_GRP_RISCA_PRI0_DEST_SIGNAL_HIGH 0x00100000
1857 -#define QE_IC_GRP_RISCA_PRI1_DEST_SIGNAL_HIGH 0x00200000
1858 -#define QE_IC_GRP_RISCB_PRI0_DEST_SIGNAL_HIGH 0x00400000
1859 -#define QE_IC_GRP_RISCB_PRI1_DEST_SIGNAL_HIGH 0x00800000
1860 -#define QE_IC_GRP_W_DEST_SIGNAL_SHIFT (12)
1861 -
1862 -/* QE interrupt sources groups */
1863 -enum qe_ic_grp_id {
1864 - QE_IC_GRP_W = 0, /* QE interrupt controller group W */
1865 - QE_IC_GRP_X, /* QE interrupt controller group X */
1866 - QE_IC_GRP_Y, /* QE interrupt controller group Y */
1867 - QE_IC_GRP_Z, /* QE interrupt controller group Z */
1868 - QE_IC_GRP_RISCA, /* QE interrupt controller RISC group A */
1869 - QE_IC_GRP_RISCB /* QE interrupt controller RISC group B */
1870 -};
1871 -
1872 -#ifdef CONFIG_QUICC_ENGINE
1873 -void qe_ic_init(struct device_node *node, unsigned int flags,
1874 - void (*low_handler)(struct irq_desc *desc),
1875 - void (*high_handler)(struct irq_desc *desc));
1876 -unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic);
1877 -unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic);
1878 -#else
1879 -static inline void qe_ic_init(struct device_node *node, unsigned int flags,
1880 - void (*low_handler)(struct irq_desc *desc),
1881 - void (*high_handler)(struct irq_desc *desc))
1882 -{}
1883 -static inline unsigned int qe_ic_get_low_irq(struct qe_ic *qe_ic)
1884 -{ return 0; }
1885 -static inline unsigned int qe_ic_get_high_irq(struct qe_ic *qe_ic)
1886 -{ return 0; }
1887 -#endif /* CONFIG_QUICC_ENGINE */
1888 -
1889 -void qe_ic_set_highest_priority(unsigned int virq, int high);
1890 -int qe_ic_set_priority(unsigned int virq, unsigned int priority);
1891 -int qe_ic_set_high_priority(unsigned int virq, unsigned int priority, int high);
1892 -
1893 -static inline void qe_ic_cascade_low_ipic(struct irq_desc *desc)
1894 -{
1895 - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
1896 - unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic);
1897 -
1898 - if (cascade_irq != NO_IRQ)
1899 - generic_handle_irq(cascade_irq);
1900 -}
1901 -
1902 -static inline void qe_ic_cascade_high_ipic(struct irq_desc *desc)
1903 -{
1904 - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
1905 - unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic);
1906 -
1907 - if (cascade_irq != NO_IRQ)
1908 - generic_handle_irq(cascade_irq);
1909 -}
1910 -
1911 -static inline void qe_ic_cascade_low_mpic(struct irq_desc *desc)
1912 -{
1913 - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
1914 - unsigned int cascade_irq = qe_ic_get_low_irq(qe_ic);
1915 - struct irq_chip *chip = irq_desc_get_chip(desc);
1916 -
1917 - if (cascade_irq != NO_IRQ)
1918 - generic_handle_irq(cascade_irq);
1919 -
1920 - chip->irq_eoi(&desc->irq_data);
1921 -}
1922 -
1923 -static inline void qe_ic_cascade_high_mpic(struct irq_desc *desc)
1924 -{
1925 - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
1926 - unsigned int cascade_irq = qe_ic_get_high_irq(qe_ic);
1927 - struct irq_chip *chip = irq_desc_get_chip(desc);
1928 -
1929 - if (cascade_irq != NO_IRQ)
1930 - generic_handle_irq(cascade_irq);
1931 -
1932 - chip->irq_eoi(&desc->irq_data);
1933 -}
1934 -
1935 -static inline void qe_ic_cascade_muxed_mpic(struct irq_desc *desc)
1936 -{
1937 - struct qe_ic *qe_ic = irq_desc_get_handler_data(desc);
1938 - unsigned int cascade_irq;
1939 - struct irq_chip *chip = irq_desc_get_chip(desc);
1940 -
1941 - cascade_irq = qe_ic_get_high_irq(qe_ic);
1942 - if (cascade_irq == NO_IRQ)
1943 - cascade_irq = qe_ic_get_low_irq(qe_ic);
1944 -
1945 - if (cascade_irq != NO_IRQ)
1946 - generic_handle_irq(cascade_irq);
1947 -
1948 - chip->irq_eoi(&desc->irq_data);
1949 -}
1950 -
1951 -#endif /* _ASM_POWERPC_QE_IC_H */