Signed-off-by: Jonas Gorski <jogo@openwrt.org> SVN-Revision: 35478master
parent
a15e1a950d
commit
34ad8f4e75
@ -1,166 +0,0 @@ |
||||
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 {
|
Loading…
Reference in new issue