diff options
author | Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | 2012-04-09 07:36:36 -0400 |
---|---|---|
committer | Nicolas Ferre <nicolas.ferre@atmel.com> | 2012-07-02 08:26:58 -0400 |
commit | c65739437045c351a2a0ddb834719b9d616d4d47 (patch) | |
tree | 826ed94708ffb268b978dfe65c7d3b8fe2d29832 /arch/arm | |
parent | 42a859daaf6af4d234fcf964a421666d5cca3f6a (diff) |
ARM: at91: aic add dt support for external irqs
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/boot/dts/at91sam9260.dtsi | 1 | ||||
-rw-r--r-- | arch/arm/boot/dts/at91sam9263.dtsi | 1 | ||||
-rw-r--r-- | arch/arm/boot/dts/at91sam9g45.dtsi | 1 | ||||
-rw-r--r-- | arch/arm/boot/dts/at91sam9x5.dtsi | 1 | ||||
-rw-r--r-- | arch/arm/mach-at91/at91sam9x5.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-at91/irq.c | 12 |
6 files changed, 16 insertions, 2 deletions
diff --git a/arch/arm/boot/dts/at91sam9260.dtsi b/arch/arm/boot/dts/at91sam9260.dtsi index f449efc9825f..f2c96430f9cb 100644 --- a/arch/arm/boot/dts/at91sam9260.dtsi +++ b/arch/arm/boot/dts/at91sam9260.dtsi | |||
@@ -56,6 +56,7 @@ | |||
56 | compatible = "atmel,at91rm9200-aic"; | 56 | compatible = "atmel,at91rm9200-aic"; |
57 | interrupt-controller; | 57 | interrupt-controller; |
58 | reg = <0xfffff000 0x200>; | 58 | reg = <0xfffff000 0x200>; |
59 | atmel,external-irqs = <29 30 31>; | ||
59 | }; | 60 | }; |
60 | 61 | ||
61 | ramc0: ramc@ffffea00 { | 62 | ramc0: ramc@ffffea00 { |
diff --git a/arch/arm/boot/dts/at91sam9263.dtsi b/arch/arm/boot/dts/at91sam9263.dtsi index 0209913a65a2..c803636ca9f5 100644 --- a/arch/arm/boot/dts/at91sam9263.dtsi +++ b/arch/arm/boot/dts/at91sam9263.dtsi | |||
@@ -52,6 +52,7 @@ | |||
52 | compatible = "atmel,at91rm9200-aic"; | 52 | compatible = "atmel,at91rm9200-aic"; |
53 | interrupt-controller; | 53 | interrupt-controller; |
54 | reg = <0xfffff000 0x200>; | 54 | reg = <0xfffff000 0x200>; |
55 | atmel,external-irqs = <30 31>; | ||
55 | }; | 56 | }; |
56 | 57 | ||
57 | pmc: pmc@fffffc00 { | 58 | pmc: pmc@fffffc00 { |
diff --git a/arch/arm/boot/dts/at91sam9g45.dtsi b/arch/arm/boot/dts/at91sam9g45.dtsi index 7dbccaf199f7..2d01ce2a023f 100644 --- a/arch/arm/boot/dts/at91sam9g45.dtsi +++ b/arch/arm/boot/dts/at91sam9g45.dtsi | |||
@@ -57,6 +57,7 @@ | |||
57 | compatible = "atmel,at91rm9200-aic"; | 57 | compatible = "atmel,at91rm9200-aic"; |
58 | interrupt-controller; | 58 | interrupt-controller; |
59 | reg = <0xfffff000 0x200>; | 59 | reg = <0xfffff000 0x200>; |
60 | atmel,external-irqs = <31>; | ||
60 | }; | 61 | }; |
61 | 62 | ||
62 | ramc0: ramc@ffffe400 { | 63 | ramc0: ramc@ffffe400 { |
diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi index 6b3ef4339ae7..6a0a0fbb6283 100644 --- a/arch/arm/boot/dts/at91sam9x5.dtsi +++ b/arch/arm/boot/dts/at91sam9x5.dtsi | |||
@@ -55,6 +55,7 @@ | |||
55 | compatible = "atmel,at91rm9200-aic"; | 55 | compatible = "atmel,at91rm9200-aic"; |
56 | interrupt-controller; | 56 | interrupt-controller; |
57 | reg = <0xfffff000 0x200>; | 57 | reg = <0xfffff000 0x200>; |
58 | atmel,external-irqs = <31>; | ||
58 | }; | 59 | }; |
59 | 60 | ||
60 | ramc0: ramc@ffffe800 { | 61 | ramc0: ramc@ffffe800 { |
diff --git a/arch/arm/mach-at91/at91sam9x5.c b/arch/arm/mach-at91/at91sam9x5.c index 1b144b4d3ce1..537710b68982 100644 --- a/arch/arm/mach-at91/at91sam9x5.c +++ b/arch/arm/mach-at91/at91sam9x5.c | |||
@@ -312,8 +312,6 @@ static void __init at91sam9x5_map_io(void) | |||
312 | 312 | ||
313 | void __init at91sam9x5_initialize(void) | 313 | void __init at91sam9x5_initialize(void) |
314 | { | 314 | { |
315 | at91_extern_irq = (1 << AT91SAM9X5_ID_IRQ0); | ||
316 | |||
317 | /* Register GPIO subsystem (using DT) */ | 315 | /* Register GPIO subsystem (using DT) */ |
318 | at91_gpio_init(NULL, 0); | 316 | at91_gpio_init(NULL, 0); |
319 | } | 317 | } |
diff --git a/arch/arm/mach-at91/irq.c b/arch/arm/mach-at91/irq.c index 2d5d4c88a527..df8605fd7bad 100644 --- a/arch/arm/mach-at91/irq.c +++ b/arch/arm/mach-at91/irq.c | |||
@@ -194,6 +194,10 @@ static struct irq_domain_ops at91_aic_irq_ops = { | |||
194 | int __init at91_aic_of_init(struct device_node *node, | 194 | int __init at91_aic_of_init(struct device_node *node, |
195 | struct device_node *parent) | 195 | struct device_node *parent) |
196 | { | 196 | { |
197 | struct property *prop; | ||
198 | const __be32 *p; | ||
199 | u32 val; | ||
200 | |||
197 | at91_aic_base = of_iomap(node, 0); | 201 | at91_aic_base = of_iomap(node, 0); |
198 | at91_aic_np = node; | 202 | at91_aic_np = node; |
199 | 203 | ||
@@ -202,6 +206,14 @@ int __init at91_aic_of_init(struct device_node *node, | |||
202 | if (!at91_aic_domain) | 206 | if (!at91_aic_domain) |
203 | panic("Unable to add AIC irq domain (DT)\n"); | 207 | panic("Unable to add AIC irq domain (DT)\n"); |
204 | 208 | ||
209 | at91_extern_irq = 0; | ||
210 | of_property_for_each_u32(node, "atmel,external-irqs", prop, p, val) { | ||
211 | if (val > 31) | ||
212 | pr_warn("AIC: external irq %d > 31 skip it\n", val); | ||
213 | else | ||
214 | at91_extern_irq |= (1 << val); | ||
215 | } | ||
216 | |||
205 | irq_set_default_host(at91_aic_domain); | 217 | irq_set_default_host(at91_aic_domain); |
206 | 218 | ||
207 | at91_aic_hw_init(NR_AIC_IRQS); | 219 | at91_aic_hw_init(NR_AIC_IRQS); |