You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
4.7 KiB
Diff
167 lines
4.7 KiB
Diff
The Armada XP GPIO controller has two ways of notifying interrupts:
|
|
using global interrupts or using per-CPU interrupts. In an attempt to
|
|
use the best available features, the 'marvell,armadaxp-gpio'
|
|
compatible string selects a variant of the gpio-mvebu driver that
|
|
makes use of the per-CPU interrupts.
|
|
|
|
Unfortunately, this doesn't work properly in a SMP context, because we
|
|
fall into cases where the GPIO interrupt is enabled on CPU X at the
|
|
GPIO controller level, but on CPU Y at the interrupt controller
|
|
level. It is not yet clear how to fix that easily.
|
|
|
|
So for 3.8, our approach is to switch to global interrupts for GPIOs,
|
|
so that we do not fall into this per-CPU interrupts problem.
|
|
|
|
This patch therefore fixes GPIO interrupts on Armada XP
|
|
platforms. Without this patch, GPIO interrupts simply do not work
|
|
reliably, because their proper operation depends on which CPU the code
|
|
requesting the interrupt is running.
|
|
|
|
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
|
---
|
|
This is 3.8-rc material.
|
|
---
|
|
arch/arm/boot/dts/armada-xp-mv78230.dtsi | 14 ++++++--------
|
|
arch/arm/boot/dts/armada-xp-mv78260.dtsi | 21 +++++++++------------
|
|
arch/arm/boot/dts/armada-xp-mv78460.dtsi | 21 +++++++++------------
|
|
3 files changed, 24 insertions(+), 32 deletions(-)
|
|
|
|
--- a/arch/arm/boot/dts/armada-xp-mv78230.dtsi
|
|
+++ b/arch/arm/boot/dts/armada-xp-mv78230.dtsi
|
|
@@ -50,27 +50,25 @@
|
|
};
|
|
|
|
gpio0: gpio@d0018100 {
|
|
- compatible = "marvell,armadaxp-gpio";
|
|
- reg = <0xd0018100 0x40>,
|
|
- <0xd0018800 0x30>;
|
|
+ compatible = "marvell,orion-gpio";
|
|
+ reg = <0xd0018100 0x40>;
|
|
ngpios = <32>;
|
|
gpio-controller;
|
|
#gpio-cells = <2>;
|
|
interrupt-controller;
|
|
#interrupts-cells = <2>;
|
|
- interrupts = <16>, <17>, <18>, <19>;
|
|
+ interrupts = <82>, <83>, <84>, <85>;
|
|
};
|
|
|
|
gpio1: gpio@d0018140 {
|
|
- compatible = "marvell,armadaxp-gpio";
|
|
- reg = <0xd0018140 0x40>,
|
|
- <0xd0018840 0x30>;
|
|
+ compatible = "marvell,orion-gpio";
|
|
+ reg = <0xd0018140 0x40>;
|
|
ngpios = <17>;
|
|
gpio-controller;
|
|
#gpio-cells = <2>;
|
|
interrupt-controller;
|
|
#interrupts-cells = <2>;
|
|
- interrupts = <20>, <21>, <22>;
|
|
+ interrupts = <87>, <88>, <89>;
|
|
};
|
|
};
|
|
};
|
|
--- a/arch/arm/boot/dts/armada-xp-mv78260.dtsi
|
|
+++ b/arch/arm/boot/dts/armada-xp-mv78260.dtsi
|
|
@@ -51,39 +51,36 @@
|
|
};
|
|
|
|
gpio0: gpio@d0018100 {
|
|
- compatible = "marvell,armadaxp-gpio";
|
|
- reg = <0xd0018100 0x40>,
|
|
- <0xd0018800 0x30>;
|
|
+ compatible = "marvell,orion-gpio";
|
|
+ reg = <0xd0018100 0x40>;
|
|
ngpios = <32>;
|
|
gpio-controller;
|
|
#gpio-cells = <2>;
|
|
interrupt-controller;
|
|
#interrupts-cells = <2>;
|
|
- interrupts = <16>, <17>, <18>, <19>;
|
|
+ interrupts = <82>, <83>, <84>, <85>;
|
|
};
|
|
|
|
gpio1: gpio@d0018140 {
|
|
- compatible = "marvell,armadaxp-gpio";
|
|
- reg = <0xd0018140 0x40>,
|
|
- <0xd0018840 0x30>;
|
|
+ compatible = "marvell,orion-gpio";
|
|
+ reg = <0xd0018140 0x40>;
|
|
ngpios = <32>;
|
|
gpio-controller;
|
|
#gpio-cells = <2>;
|
|
interrupt-controller;
|
|
#interrupts-cells = <2>;
|
|
- interrupts = <20>, <21>, <22>, <23>;
|
|
+ interrupts = <87>, <88>, <89>, <90>;
|
|
};
|
|
|
|
gpio2: gpio@d0018180 {
|
|
- compatible = "marvell,armadaxp-gpio";
|
|
- reg = <0xd0018180 0x40>,
|
|
- <0xd0018870 0x30>;
|
|
+ compatible = "marvell,orion-gpio";
|
|
+ reg = <0xd0018180 0x40>;
|
|
ngpios = <3>;
|
|
gpio-controller;
|
|
#gpio-cells = <2>;
|
|
interrupt-controller;
|
|
#interrupts-cells = <2>;
|
|
- interrupts = <24>;
|
|
+ interrupts = <91>;
|
|
};
|
|
|
|
ethernet@d0034000 {
|
|
--- a/arch/arm/boot/dts/armada-xp-mv78460.dtsi
|
|
+++ b/arch/arm/boot/dts/armada-xp-mv78460.dtsi
|
|
@@ -66,39 +66,36 @@
|
|
};
|
|
|
|
gpio0: gpio@d0018100 {
|
|
- compatible = "marvell,armadaxp-gpio";
|
|
- reg = <0xd0018100 0x40>,
|
|
- <0xd0018800 0x30>;
|
|
+ compatible = "marvell,orion-gpio";
|
|
+ reg = <0xd0018100 0x40>;
|
|
ngpios = <32>;
|
|
gpio-controller;
|
|
#gpio-cells = <2>;
|
|
interrupt-controller;
|
|
#interrupts-cells = <2>;
|
|
- interrupts = <16>, <17>, <18>, <19>;
|
|
+ interrupts = <82>, <83>, <84>, <85>;
|
|
};
|
|
|
|
gpio1: gpio@d0018140 {
|
|
- compatible = "marvell,armadaxp-gpio";
|
|
- reg = <0xd0018140 0x40>,
|
|
- <0xd0018840 0x30>;
|
|
+ compatible = "marvell,orion-gpio";
|
|
+ reg = <0xd0018140 0x40>;
|
|
ngpios = <32>;
|
|
gpio-controller;
|
|
#gpio-cells = <2>;
|
|
interrupt-controller;
|
|
#interrupts-cells = <2>;
|
|
- interrupts = <20>, <21>, <22>, <23>;
|
|
+ interrupts = <87>, <88>, <89>, <90>;
|
|
};
|
|
|
|
gpio2: gpio@d0018180 {
|
|
- compatible = "marvell,armadaxp-gpio";
|
|
- reg = <0xd0018180 0x40>,
|
|
- <0xd0018870 0x30>;
|
|
+ compatible = "marvell,orion-gpio";
|
|
+ reg = <0xd0018180 0x40>;
|
|
ngpios = <3>;
|
|
gpio-controller;
|
|
#gpio-cells = <2>;
|
|
interrupt-controller;
|
|
#interrupts-cells = <2>;
|
|
- interrupts = <24>;
|
|
+ interrupts = <91>;
|
|
};
|
|
|
|
ethernet@d0034000 {
|