xref: /openbmc/linux/drivers/gpio/gpio-mvebu.c (revision 12eb4683)
1 /*
2  * GPIO driver for Marvell SoCs
3  *
4  * Copyright (C) 2012 Marvell
5  *
6  * Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
7  * Andrew Lunn <andrew@lunn.ch>
8  * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
9  *
10  * This file is licensed under the terms of the GNU General Public
11  * License version 2.  This program is licensed "as is" without any
12  * warranty of any kind, whether express or implied.
13  *
14  * This driver is a fairly straightforward GPIO driver for the
15  * complete family of Marvell EBU SoC platforms (Orion, Dove,
16  * Kirkwood, Discovery, Armada 370/XP). The only complexity of this
17  * driver is the different register layout that exists between the
18  * non-SMP platforms (Orion, Dove, Kirkwood, Armada 370) and the SMP
19  * platforms (MV78200 from the Discovery family and the Armada
20  * XP). Therefore, this driver handles three variants of the GPIO
21  * block:
22  * - the basic variant, called "orion-gpio", with the simplest
23  *   register set. Used on Orion, Dove, Kirkwoord, Armada 370 and
24  *   non-SMP Discovery systems
25  * - the mv78200 variant for MV78200 Discovery systems. This variant
26  *   turns the edge mask and level mask registers into CPU0 edge
27  *   mask/level mask registers, and adds CPU1 edge mask/level mask
28  *   registers.
29  * - the armadaxp variant for Armada XP systems. This variant keeps
30  *   the normal cause/edge mask/level mask registers when the global
31  *   interrupts are used, but adds per-CPU cause/edge mask/level mask
32  *   registers n a separate memory area for the per-CPU GPIO
33  *   interrupts.
34  */
35 
36 #include <linux/err.h>
37 #include <linux/module.h>
38 #include <linux/gpio.h>
39 #include <linux/irq.h>
40 #include <linux/slab.h>
41 #include <linux/irqdomain.h>
42 #include <linux/io.h>
43 #include <linux/of_irq.h>
44 #include <linux/of_device.h>
45 #include <linux/clk.h>
46 #include <linux/pinctrl/consumer.h>
47 
48 /*
49  * GPIO unit register offsets.
50  */
51 #define GPIO_OUT_OFF		0x0000
52 #define GPIO_IO_CONF_OFF	0x0004
53 #define GPIO_BLINK_EN_OFF	0x0008
54 #define GPIO_IN_POL_OFF		0x000c
55 #define GPIO_DATA_IN_OFF	0x0010
56 #define GPIO_EDGE_CAUSE_OFF	0x0014
57 #define GPIO_EDGE_MASK_OFF	0x0018
58 #define GPIO_LEVEL_MASK_OFF	0x001c
59 
60 /* The MV78200 has per-CPU registers for edge mask and level mask */
61 #define GPIO_EDGE_MASK_MV78200_OFF(cpu)   ((cpu) ? 0x30 : 0x18)
62 #define GPIO_LEVEL_MASK_MV78200_OFF(cpu)  ((cpu) ? 0x34 : 0x1C)
63 
64 /* The Armada XP has per-CPU registers for interrupt cause, interrupt
65  * mask and interrupt level mask. Those are relative to the
66  * percpu_membase. */
67 #define GPIO_EDGE_CAUSE_ARMADAXP_OFF(cpu) ((cpu) * 0x4)
68 #define GPIO_EDGE_MASK_ARMADAXP_OFF(cpu)  (0x10 + (cpu) * 0x4)
69 #define GPIO_LEVEL_MASK_ARMADAXP_OFF(cpu) (0x20 + (cpu) * 0x4)
70 
71 #define MVEBU_GPIO_SOC_VARIANT_ORION    0x1
72 #define MVEBU_GPIO_SOC_VARIANT_MV78200  0x2
73 #define MVEBU_GPIO_SOC_VARIANT_ARMADAXP 0x3
74 
75 #define MVEBU_MAX_GPIO_PER_BANK         32
76 
77 struct mvebu_gpio_chip {
78 	struct gpio_chip   chip;
79 	spinlock_t	   lock;
80 	void __iomem	  *membase;
81 	void __iomem	  *percpu_membase;
82 	int		   irqbase;
83 	struct irq_domain *domain;
84 	int                soc_variant;
85 };
86 
87 /*
88  * Functions returning addresses of individual registers for a given
89  * GPIO controller.
90  */
91 static inline void __iomem *mvebu_gpioreg_out(struct mvebu_gpio_chip *mvchip)
92 {
93 	return mvchip->membase + GPIO_OUT_OFF;
94 }
95 
96 static inline void __iomem *mvebu_gpioreg_blink(struct mvebu_gpio_chip *mvchip)
97 {
98 	return mvchip->membase + GPIO_BLINK_EN_OFF;
99 }
100 
101 static inline void __iomem *mvebu_gpioreg_io_conf(struct mvebu_gpio_chip *mvchip)
102 {
103 	return mvchip->membase + GPIO_IO_CONF_OFF;
104 }
105 
106 static inline void __iomem *mvebu_gpioreg_in_pol(struct mvebu_gpio_chip *mvchip)
107 {
108 	return mvchip->membase + GPIO_IN_POL_OFF;
109 }
110 
111 static inline void __iomem *mvebu_gpioreg_data_in(struct mvebu_gpio_chip *mvchip)
112 {
113 	return mvchip->membase + GPIO_DATA_IN_OFF;
114 }
115 
116 static inline void __iomem *mvebu_gpioreg_edge_cause(struct mvebu_gpio_chip *mvchip)
117 {
118 	int cpu;
119 
120 	switch (mvchip->soc_variant) {
121 	case MVEBU_GPIO_SOC_VARIANT_ORION:
122 	case MVEBU_GPIO_SOC_VARIANT_MV78200:
123 		return mvchip->membase + GPIO_EDGE_CAUSE_OFF;
124 	case MVEBU_GPIO_SOC_VARIANT_ARMADAXP:
125 		cpu = smp_processor_id();
126 		return mvchip->percpu_membase + GPIO_EDGE_CAUSE_ARMADAXP_OFF(cpu);
127 	default:
128 		BUG();
129 	}
130 }
131 
132 static inline void __iomem *mvebu_gpioreg_edge_mask(struct mvebu_gpio_chip *mvchip)
133 {
134 	int cpu;
135 
136 	switch (mvchip->soc_variant) {
137 	case MVEBU_GPIO_SOC_VARIANT_ORION:
138 		return mvchip->membase + GPIO_EDGE_MASK_OFF;
139 	case MVEBU_GPIO_SOC_VARIANT_MV78200:
140 		cpu = smp_processor_id();
141 		return mvchip->membase + GPIO_EDGE_MASK_MV78200_OFF(cpu);
142 	case MVEBU_GPIO_SOC_VARIANT_ARMADAXP:
143 		cpu = smp_processor_id();
144 		return mvchip->percpu_membase + GPIO_EDGE_MASK_ARMADAXP_OFF(cpu);
145 	default:
146 		BUG();
147 	}
148 }
149 
150 static void __iomem *mvebu_gpioreg_level_mask(struct mvebu_gpio_chip *mvchip)
151 {
152 	int cpu;
153 
154 	switch (mvchip->soc_variant) {
155 	case MVEBU_GPIO_SOC_VARIANT_ORION:
156 		return mvchip->membase + GPIO_LEVEL_MASK_OFF;
157 	case MVEBU_GPIO_SOC_VARIANT_MV78200:
158 		cpu = smp_processor_id();
159 		return mvchip->membase + GPIO_LEVEL_MASK_MV78200_OFF(cpu);
160 	case MVEBU_GPIO_SOC_VARIANT_ARMADAXP:
161 		cpu = smp_processor_id();
162 		return mvchip->percpu_membase + GPIO_LEVEL_MASK_ARMADAXP_OFF(cpu);
163 	default:
164 		BUG();
165 	}
166 }
167 
168 /*
169  * Functions implementing the gpio_chip methods
170  */
171 
172 static int mvebu_gpio_request(struct gpio_chip *chip, unsigned pin)
173 {
174 	return pinctrl_request_gpio(chip->base + pin);
175 }
176 
177 static void mvebu_gpio_free(struct gpio_chip *chip, unsigned pin)
178 {
179 	pinctrl_free_gpio(chip->base + pin);
180 }
181 
182 static void mvebu_gpio_set(struct gpio_chip *chip, unsigned pin, int value)
183 {
184 	struct mvebu_gpio_chip *mvchip =
185 		container_of(chip, struct mvebu_gpio_chip, chip);
186 	unsigned long flags;
187 	u32 u;
188 
189 	spin_lock_irqsave(&mvchip->lock, flags);
190 	u = readl_relaxed(mvebu_gpioreg_out(mvchip));
191 	if (value)
192 		u |= 1 << pin;
193 	else
194 		u &= ~(1 << pin);
195 	writel_relaxed(u, mvebu_gpioreg_out(mvchip));
196 	spin_unlock_irqrestore(&mvchip->lock, flags);
197 }
198 
199 static int mvebu_gpio_get(struct gpio_chip *chip, unsigned pin)
200 {
201 	struct mvebu_gpio_chip *mvchip =
202 		container_of(chip, struct mvebu_gpio_chip, chip);
203 	u32 u;
204 
205 	if (readl_relaxed(mvebu_gpioreg_io_conf(mvchip)) & (1 << pin)) {
206 		u = readl_relaxed(mvebu_gpioreg_data_in(mvchip)) ^
207 			readl_relaxed(mvebu_gpioreg_in_pol(mvchip));
208 	} else {
209 		u = readl_relaxed(mvebu_gpioreg_out(mvchip));
210 	}
211 
212 	return (u >> pin) & 1;
213 }
214 
215 static void mvebu_gpio_blink(struct gpio_chip *chip, unsigned pin, int value)
216 {
217 	struct mvebu_gpio_chip *mvchip =
218 		container_of(chip, struct mvebu_gpio_chip, chip);
219 	unsigned long flags;
220 	u32 u;
221 
222 	spin_lock_irqsave(&mvchip->lock, flags);
223 	u = readl_relaxed(mvebu_gpioreg_blink(mvchip));
224 	if (value)
225 		u |= 1 << pin;
226 	else
227 		u &= ~(1 << pin);
228 	writel_relaxed(u, mvebu_gpioreg_blink(mvchip));
229 	spin_unlock_irqrestore(&mvchip->lock, flags);
230 }
231 
232 static int mvebu_gpio_direction_input(struct gpio_chip *chip, unsigned pin)
233 {
234 	struct mvebu_gpio_chip *mvchip =
235 		container_of(chip, struct mvebu_gpio_chip, chip);
236 	unsigned long flags;
237 	int ret;
238 	u32 u;
239 
240 	/* Check with the pinctrl driver whether this pin is usable as
241 	 * an input GPIO */
242 	ret = pinctrl_gpio_direction_input(chip->base + pin);
243 	if (ret)
244 		return ret;
245 
246 	spin_lock_irqsave(&mvchip->lock, flags);
247 	u = readl_relaxed(mvebu_gpioreg_io_conf(mvchip));
248 	u |= 1 << pin;
249 	writel_relaxed(u, mvebu_gpioreg_io_conf(mvchip));
250 	spin_unlock_irqrestore(&mvchip->lock, flags);
251 
252 	return 0;
253 }
254 
255 static int mvebu_gpio_direction_output(struct gpio_chip *chip, unsigned pin,
256 				       int value)
257 {
258 	struct mvebu_gpio_chip *mvchip =
259 		container_of(chip, struct mvebu_gpio_chip, chip);
260 	unsigned long flags;
261 	int ret;
262 	u32 u;
263 
264 	/* Check with the pinctrl driver whether this pin is usable as
265 	 * an output GPIO */
266 	ret = pinctrl_gpio_direction_output(chip->base + pin);
267 	if (ret)
268 		return ret;
269 
270 	mvebu_gpio_blink(chip, pin, 0);
271 	mvebu_gpio_set(chip, pin, value);
272 
273 	spin_lock_irqsave(&mvchip->lock, flags);
274 	u = readl_relaxed(mvebu_gpioreg_io_conf(mvchip));
275 	u &= ~(1 << pin);
276 	writel_relaxed(u, mvebu_gpioreg_io_conf(mvchip));
277 	spin_unlock_irqrestore(&mvchip->lock, flags);
278 
279 	return 0;
280 }
281 
282 static int mvebu_gpio_to_irq(struct gpio_chip *chip, unsigned pin)
283 {
284 	struct mvebu_gpio_chip *mvchip =
285 		container_of(chip, struct mvebu_gpio_chip, chip);
286 	return irq_create_mapping(mvchip->domain, pin);
287 }
288 
289 /*
290  * Functions implementing the irq_chip methods
291  */
292 static void mvebu_gpio_irq_ack(struct irq_data *d)
293 {
294 	struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
295 	struct mvebu_gpio_chip *mvchip = gc->private;
296 	u32 mask = ~(1 << (d->irq - gc->irq_base));
297 
298 	irq_gc_lock(gc);
299 	writel_relaxed(mask, mvebu_gpioreg_edge_cause(mvchip));
300 	irq_gc_unlock(gc);
301 }
302 
303 static void mvebu_gpio_edge_irq_mask(struct irq_data *d)
304 {
305 	struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
306 	struct mvebu_gpio_chip *mvchip = gc->private;
307 	u32 mask = 1 << (d->irq - gc->irq_base);
308 
309 	irq_gc_lock(gc);
310 	gc->mask_cache &= ~mask;
311 	writel_relaxed(gc->mask_cache, mvebu_gpioreg_edge_mask(mvchip));
312 	irq_gc_unlock(gc);
313 }
314 
315 static void mvebu_gpio_edge_irq_unmask(struct irq_data *d)
316 {
317 	struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
318 	struct mvebu_gpio_chip *mvchip = gc->private;
319 	u32 mask = 1 << (d->irq - gc->irq_base);
320 
321 	irq_gc_lock(gc);
322 	gc->mask_cache |= mask;
323 	writel_relaxed(gc->mask_cache, mvebu_gpioreg_edge_mask(mvchip));
324 	irq_gc_unlock(gc);
325 }
326 
327 static void mvebu_gpio_level_irq_mask(struct irq_data *d)
328 {
329 	struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
330 	struct mvebu_gpio_chip *mvchip = gc->private;
331 	u32 mask = 1 << (d->irq - gc->irq_base);
332 
333 	irq_gc_lock(gc);
334 	gc->mask_cache &= ~mask;
335 	writel_relaxed(gc->mask_cache, mvebu_gpioreg_level_mask(mvchip));
336 	irq_gc_unlock(gc);
337 }
338 
339 static void mvebu_gpio_level_irq_unmask(struct irq_data *d)
340 {
341 	struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
342 	struct mvebu_gpio_chip *mvchip = gc->private;
343 	u32 mask = 1 << (d->irq - gc->irq_base);
344 
345 	irq_gc_lock(gc);
346 	gc->mask_cache |= mask;
347 	writel_relaxed(gc->mask_cache, mvebu_gpioreg_level_mask(mvchip));
348 	irq_gc_unlock(gc);
349 }
350 
351 /*****************************************************************************
352  * MVEBU GPIO IRQ
353  *
354  * GPIO_IN_POL register controls whether GPIO_DATA_IN will hold the same
355  * value of the line or the opposite value.
356  *
357  * Level IRQ handlers: DATA_IN is used directly as cause register.
358  *                     Interrupt are masked by LEVEL_MASK registers.
359  * Edge IRQ handlers:  Change in DATA_IN are latched in EDGE_CAUSE.
360  *                     Interrupt are masked by EDGE_MASK registers.
361  * Both-edge handlers: Similar to regular Edge handlers, but also swaps
362  *                     the polarity to catch the next line transaction.
363  *                     This is a race condition that might not perfectly
364  *                     work on some use cases.
365  *
366  * Every eight GPIO lines are grouped (OR'ed) before going up to main
367  * cause register.
368  *
369  *                    EDGE  cause    mask
370  *        data-in   /--------| |-----| |----\
371  *     -----| |-----                         ---- to main cause reg
372  *           X      \----------------| |----/
373  *        polarity    LEVEL          mask
374  *
375  ****************************************************************************/
376 
377 static int mvebu_gpio_irq_set_type(struct irq_data *d, unsigned int type)
378 {
379 	struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
380 	struct irq_chip_type *ct = irq_data_get_chip_type(d);
381 	struct mvebu_gpio_chip *mvchip = gc->private;
382 	int pin;
383 	u32 u;
384 
385 	pin = d->hwirq;
386 
387 	u = readl_relaxed(mvebu_gpioreg_io_conf(mvchip)) & (1 << pin);
388 	if (!u) {
389 		return -EINVAL;
390 	}
391 
392 	type &= IRQ_TYPE_SENSE_MASK;
393 	if (type == IRQ_TYPE_NONE)
394 		return -EINVAL;
395 
396 	/* Check if we need to change chip and handler */
397 	if (!(ct->type & type))
398 		if (irq_setup_alt_chip(d, type))
399 			return -EINVAL;
400 
401 	/*
402 	 * Configure interrupt polarity.
403 	 */
404 	switch (type) {
405 	case IRQ_TYPE_EDGE_RISING:
406 	case IRQ_TYPE_LEVEL_HIGH:
407 		u = readl_relaxed(mvebu_gpioreg_in_pol(mvchip));
408 		u &= ~(1 << pin);
409 		writel_relaxed(u, mvebu_gpioreg_in_pol(mvchip));
410 		break;
411 	case IRQ_TYPE_EDGE_FALLING:
412 	case IRQ_TYPE_LEVEL_LOW:
413 		u = readl_relaxed(mvebu_gpioreg_in_pol(mvchip));
414 		u |= 1 << pin;
415 		writel_relaxed(u, mvebu_gpioreg_in_pol(mvchip));
416 		break;
417 	case IRQ_TYPE_EDGE_BOTH: {
418 		u32 v;
419 
420 		v = readl_relaxed(mvebu_gpioreg_in_pol(mvchip)) ^
421 			readl_relaxed(mvebu_gpioreg_data_in(mvchip));
422 
423 		/*
424 		 * set initial polarity based on current input level
425 		 */
426 		u = readl_relaxed(mvebu_gpioreg_in_pol(mvchip));
427 		if (v & (1 << pin))
428 			u |= 1 << pin;		/* falling */
429 		else
430 			u &= ~(1 << pin);	/* rising */
431 		writel_relaxed(u, mvebu_gpioreg_in_pol(mvchip));
432 		break;
433 	}
434 	}
435 	return 0;
436 }
437 
438 static void mvebu_gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
439 {
440 	struct mvebu_gpio_chip *mvchip = irq_get_handler_data(irq);
441 	u32 cause, type;
442 	int i;
443 
444 	if (mvchip == NULL)
445 		return;
446 
447 	cause = readl_relaxed(mvebu_gpioreg_data_in(mvchip)) &
448 		readl_relaxed(mvebu_gpioreg_level_mask(mvchip));
449 	cause |= readl_relaxed(mvebu_gpioreg_edge_cause(mvchip)) &
450 		readl_relaxed(mvebu_gpioreg_edge_mask(mvchip));
451 
452 	for (i = 0; i < mvchip->chip.ngpio; i++) {
453 		int irq;
454 
455 		irq = mvchip->irqbase + i;
456 
457 		if (!(cause & (1 << i)))
458 			continue;
459 
460 		type = irq_get_trigger_type(irq);
461 		if ((type & IRQ_TYPE_SENSE_MASK) == IRQ_TYPE_EDGE_BOTH) {
462 			/* Swap polarity (race with GPIO line) */
463 			u32 polarity;
464 
465 			polarity = readl_relaxed(mvebu_gpioreg_in_pol(mvchip));
466 			polarity ^= 1 << i;
467 			writel_relaxed(polarity, mvebu_gpioreg_in_pol(mvchip));
468 		}
469 		generic_handle_irq(irq);
470 	}
471 }
472 
473 #ifdef CONFIG_DEBUG_FS
474 #include <linux/seq_file.h>
475 
476 static void mvebu_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
477 {
478 	struct mvebu_gpio_chip *mvchip =
479 		container_of(chip, struct mvebu_gpio_chip, chip);
480 	u32 out, io_conf, blink, in_pol, data_in, cause, edg_msk, lvl_msk;
481 	int i;
482 
483 	out	= readl_relaxed(mvebu_gpioreg_out(mvchip));
484 	io_conf	= readl_relaxed(mvebu_gpioreg_io_conf(mvchip));
485 	blink	= readl_relaxed(mvebu_gpioreg_blink(mvchip));
486 	in_pol	= readl_relaxed(mvebu_gpioreg_in_pol(mvchip));
487 	data_in	= readl_relaxed(mvebu_gpioreg_data_in(mvchip));
488 	cause	= readl_relaxed(mvebu_gpioreg_edge_cause(mvchip));
489 	edg_msk	= readl_relaxed(mvebu_gpioreg_edge_mask(mvchip));
490 	lvl_msk	= readl_relaxed(mvebu_gpioreg_level_mask(mvchip));
491 
492 	for (i = 0; i < chip->ngpio; i++) {
493 		const char *label;
494 		u32 msk;
495 		bool is_out;
496 
497 		label = gpiochip_is_requested(chip, i);
498 		if (!label)
499 			continue;
500 
501 		msk = 1 << i;
502 		is_out = !(io_conf & msk);
503 
504 		seq_printf(s, " gpio-%-3d (%-20.20s)", chip->base + i, label);
505 
506 		if (is_out) {
507 			seq_printf(s, " out %s %s\n",
508 				   out & msk ? "hi" : "lo",
509 				   blink & msk ? "(blink )" : "");
510 			continue;
511 		}
512 
513 		seq_printf(s, " in  %s (act %s) - IRQ",
514 			   (data_in ^ in_pol) & msk  ? "hi" : "lo",
515 			   in_pol & msk ? "lo" : "hi");
516 		if (!((edg_msk | lvl_msk) & msk)) {
517 			seq_printf(s, " disabled\n");
518 			continue;
519 		}
520 		if (edg_msk & msk)
521 			seq_printf(s, " edge ");
522 		if (lvl_msk & msk)
523 			seq_printf(s, " level");
524 		seq_printf(s, " (%s)\n", cause & msk ? "pending" : "clear  ");
525 	}
526 }
527 #else
528 #define mvebu_gpio_dbg_show NULL
529 #endif
530 
531 static struct of_device_id mvebu_gpio_of_match[] = {
532 	{
533 		.compatible = "marvell,orion-gpio",
534 		.data       = (void *) MVEBU_GPIO_SOC_VARIANT_ORION,
535 	},
536 	{
537 		.compatible = "marvell,mv78200-gpio",
538 		.data       = (void *) MVEBU_GPIO_SOC_VARIANT_MV78200,
539 	},
540 	{
541 		.compatible = "marvell,armadaxp-gpio",
542 		.data       = (void *) MVEBU_GPIO_SOC_VARIANT_ARMADAXP,
543 	},
544 	{
545 		/* sentinel */
546 	},
547 };
548 MODULE_DEVICE_TABLE(of, mvebu_gpio_of_match);
549 
550 static int mvebu_gpio_probe(struct platform_device *pdev)
551 {
552 	struct mvebu_gpio_chip *mvchip;
553 	const struct of_device_id *match;
554 	struct device_node *np = pdev->dev.of_node;
555 	struct resource *res;
556 	struct irq_chip_generic *gc;
557 	struct irq_chip_type *ct;
558 	struct clk *clk;
559 	unsigned int ngpios;
560 	int soc_variant;
561 	int i, cpu, id;
562 
563 	match = of_match_device(mvebu_gpio_of_match, &pdev->dev);
564 	if (match)
565 		soc_variant = (int) match->data;
566 	else
567 		soc_variant = MVEBU_GPIO_SOC_VARIANT_ORION;
568 
569 	mvchip = devm_kzalloc(&pdev->dev, sizeof(struct mvebu_gpio_chip), GFP_KERNEL);
570 	if (!mvchip) {
571 		dev_err(&pdev->dev, "Cannot allocate memory\n");
572 		return -ENOMEM;
573 	}
574 
575 	if (of_property_read_u32(pdev->dev.of_node, "ngpios", &ngpios)) {
576 		dev_err(&pdev->dev, "Missing ngpios OF property\n");
577 		return -ENODEV;
578 	}
579 
580 	id = of_alias_get_id(pdev->dev.of_node, "gpio");
581 	if (id < 0) {
582 		dev_err(&pdev->dev, "Couldn't get OF id\n");
583 		return id;
584 	}
585 
586 	clk = devm_clk_get(&pdev->dev, NULL);
587 	/* Not all SoCs require a clock.*/
588 	if (!IS_ERR(clk))
589 		clk_prepare_enable(clk);
590 
591 	mvchip->soc_variant = soc_variant;
592 	mvchip->chip.label = dev_name(&pdev->dev);
593 	mvchip->chip.dev = &pdev->dev;
594 	mvchip->chip.request = mvebu_gpio_request;
595 	mvchip->chip.free = mvebu_gpio_free;
596 	mvchip->chip.direction_input = mvebu_gpio_direction_input;
597 	mvchip->chip.get = mvebu_gpio_get;
598 	mvchip->chip.direction_output = mvebu_gpio_direction_output;
599 	mvchip->chip.set = mvebu_gpio_set;
600 	mvchip->chip.to_irq = mvebu_gpio_to_irq;
601 	mvchip->chip.base = id * MVEBU_MAX_GPIO_PER_BANK;
602 	mvchip->chip.ngpio = ngpios;
603 	mvchip->chip.can_sleep = 0;
604 	mvchip->chip.of_node = np;
605 	mvchip->chip.dbg_show = mvebu_gpio_dbg_show;
606 
607 	spin_lock_init(&mvchip->lock);
608 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
609 	mvchip->membase = devm_ioremap_resource(&pdev->dev, res);
610 	if (IS_ERR(mvchip->membase))
611 		return PTR_ERR(mvchip->membase);
612 
613 	/* The Armada XP has a second range of registers for the
614 	 * per-CPU registers */
615 	if (soc_variant == MVEBU_GPIO_SOC_VARIANT_ARMADAXP) {
616 		res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
617 		mvchip->percpu_membase = devm_ioremap_resource(&pdev->dev,
618 							       res);
619 		if (IS_ERR(mvchip->percpu_membase))
620 			return PTR_ERR(mvchip->percpu_membase);
621 	}
622 
623 	/*
624 	 * Mask and clear GPIO interrupts.
625 	 */
626 	switch (soc_variant) {
627 	case MVEBU_GPIO_SOC_VARIANT_ORION:
628 		writel_relaxed(0, mvchip->membase + GPIO_EDGE_CAUSE_OFF);
629 		writel_relaxed(0, mvchip->membase + GPIO_EDGE_MASK_OFF);
630 		writel_relaxed(0, mvchip->membase + GPIO_LEVEL_MASK_OFF);
631 		break;
632 	case MVEBU_GPIO_SOC_VARIANT_MV78200:
633 		writel_relaxed(0, mvchip->membase + GPIO_EDGE_CAUSE_OFF);
634 		for (cpu = 0; cpu < 2; cpu++) {
635 			writel_relaxed(0, mvchip->membase +
636 				       GPIO_EDGE_MASK_MV78200_OFF(cpu));
637 			writel_relaxed(0, mvchip->membase +
638 				       GPIO_LEVEL_MASK_MV78200_OFF(cpu));
639 		}
640 		break;
641 	case MVEBU_GPIO_SOC_VARIANT_ARMADAXP:
642 		writel_relaxed(0, mvchip->membase + GPIO_EDGE_CAUSE_OFF);
643 		writel_relaxed(0, mvchip->membase + GPIO_EDGE_MASK_OFF);
644 		writel_relaxed(0, mvchip->membase + GPIO_LEVEL_MASK_OFF);
645 		for (cpu = 0; cpu < 4; cpu++) {
646 			writel_relaxed(0, mvchip->percpu_membase +
647 				       GPIO_EDGE_CAUSE_ARMADAXP_OFF(cpu));
648 			writel_relaxed(0, mvchip->percpu_membase +
649 				       GPIO_EDGE_MASK_ARMADAXP_OFF(cpu));
650 			writel_relaxed(0, mvchip->percpu_membase +
651 				       GPIO_LEVEL_MASK_ARMADAXP_OFF(cpu));
652 		}
653 		break;
654 	default:
655 		BUG();
656 	}
657 
658 	gpiochip_add(&mvchip->chip);
659 
660 	/* Some gpio controllers do not provide irq support */
661 	if (!of_irq_count(np))
662 		return 0;
663 
664 	/* Setup the interrupt handlers. Each chip can have up to 4
665 	 * interrupt handlers, with each handler dealing with 8 GPIO
666 	 * pins. */
667 	for (i = 0; i < 4; i++) {
668 		int irq;
669 		irq = platform_get_irq(pdev, i);
670 		if (irq < 0)
671 			continue;
672 		irq_set_handler_data(irq, mvchip);
673 		irq_set_chained_handler(irq, mvebu_gpio_irq_handler);
674 	}
675 
676 	mvchip->irqbase = irq_alloc_descs(-1, 0, ngpios, -1);
677 	if (mvchip->irqbase < 0) {
678 		dev_err(&pdev->dev, "no irqs\n");
679 		return -ENOMEM;
680 	}
681 
682 	gc = irq_alloc_generic_chip("mvebu_gpio_irq", 2, mvchip->irqbase,
683 				    mvchip->membase, handle_level_irq);
684 	if (!gc) {
685 		dev_err(&pdev->dev, "Cannot allocate generic irq_chip\n");
686 		return -ENOMEM;
687 	}
688 
689 	gc->private = mvchip;
690 	ct = &gc->chip_types[0];
691 	ct->type = IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW;
692 	ct->chip.irq_mask = mvebu_gpio_level_irq_mask;
693 	ct->chip.irq_unmask = mvebu_gpio_level_irq_unmask;
694 	ct->chip.irq_set_type = mvebu_gpio_irq_set_type;
695 	ct->chip.name = mvchip->chip.label;
696 
697 	ct = &gc->chip_types[1];
698 	ct->type = IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING;
699 	ct->chip.irq_ack = mvebu_gpio_irq_ack;
700 	ct->chip.irq_mask = mvebu_gpio_edge_irq_mask;
701 	ct->chip.irq_unmask = mvebu_gpio_edge_irq_unmask;
702 	ct->chip.irq_set_type = mvebu_gpio_irq_set_type;
703 	ct->handler = handle_edge_irq;
704 	ct->chip.name = mvchip->chip.label;
705 
706 	irq_setup_generic_chip(gc, IRQ_MSK(ngpios), 0,
707 			       IRQ_NOREQUEST, IRQ_LEVEL | IRQ_NOPROBE);
708 
709 	/* Setup irq domain on top of the generic chip. */
710 	mvchip->domain = irq_domain_add_simple(np, mvchip->chip.ngpio,
711 					       mvchip->irqbase,
712 					       &irq_domain_simple_ops,
713 					       mvchip);
714 	if (!mvchip->domain) {
715 		dev_err(&pdev->dev, "couldn't allocate irq domain %s (DT).\n",
716 			mvchip->chip.label);
717 		irq_remove_generic_chip(gc, IRQ_MSK(ngpios), IRQ_NOREQUEST,
718 					IRQ_LEVEL | IRQ_NOPROBE);
719 		kfree(gc);
720 		return -ENODEV;
721 	}
722 
723 	return 0;
724 }
725 
726 static struct platform_driver mvebu_gpio_driver = {
727 	.driver		= {
728 		.name	        = "mvebu-gpio",
729 		.owner	        = THIS_MODULE,
730 		.of_match_table = mvebu_gpio_of_match,
731 	},
732 	.probe		= mvebu_gpio_probe,
733 };
734 
735 static int __init mvebu_gpio_init(void)
736 {
737 	return platform_driver_register(&mvebu_gpio_driver);
738 }
739 postcore_initcall(mvebu_gpio_init);
740