Skip to content

Commit

Permalink
metag: Internal and external irqchips
Browse files Browse the repository at this point in the history
Meta core internal interrupts (from HWSTATMETA and friends) are vectored
onto the TR1 core trigger for the current thread. This is demultiplexed
in irq-metag.c to individual Linux IRQs for each internal interrupt.

External SoC interrupts (from HWSTATEXT and friends) are vectored onto
the TR2 core trigger for the current thread. This is demultiplexed in
irq-metag-ext.c to individual Linux IRQs for each external SoC interrupt.
The external irqchip has devicetree bindings for configuring the number
of irq banks and the type of masking available.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Grant Likely <grant.likely@secretlab.ca>
Cc: Rob Herring <rob.herring@calxeda.com>
Cc: Rob Landley <rob@landley.net>
Cc: Dom Cobley <popcornmix@gmail.com>
Cc: Simon Arlott <simon@fire.lp0.eu>
Cc: Viresh Kumar <viresh.kumar@linaro.org>
Cc: Maxime Ripard <maxime.ripard@free-electrons.com>
Cc: devicetree-discuss@lists.ozlabs.org
Cc: linux-doc@vger.kernel.org
  • Loading branch information
James Hogan committed Mar 2, 2013
1 parent 63047ea commit 5698c50
Show file tree
Hide file tree
Showing 8 changed files with 1,359 additions and 0 deletions.
82 changes: 82 additions & 0 deletions Documentation/devicetree/bindings/metag/meta-intc.txt
@@ -0,0 +1,82 @@
* Meta External Trigger Controller Binding

This binding specifies what properties must be available in the device tree
representation of a Meta external trigger controller.

Required properties:

- compatible: Specifies the compatibility list for the interrupt controller.
The type shall be <string> and the value shall include "img,meta-intc".

- num-banks: Specifies the number of interrupt banks (each of which can
handle 32 interrupt sources).

- interrupt-controller: The presence of this property identifies the node
as an interupt controller. No property value shall be defined.

- #interrupt-cells: Specifies the number of cells needed to encode an
interrupt source. The type shall be a <u32> and the value shall be 2.

- #address-cells: Specifies the number of cells needed to encode an
address. The type shall be <u32> and the value shall be 0. As such,
'interrupt-map' nodes do not have to specify a parent unit address.

Optional properties:

- no-mask: The controller doesn't have any mask registers.

* Interrupt Specifier Definition

Interrupt specifiers consists of 2 cells encoded as follows:

- <1st-cell>: The interrupt-number that identifies the interrupt source.

- <2nd-cell>: The Linux interrupt flags containing level-sense information,
encoded as follows:
1 = edge triggered
4 = level-sensitive

* Examples

Example 1:

/*
* Meta external trigger block
*/
intc: intc {
// This is an interrupt controller node.
interrupt-controller;

// No address cells so that 'interrupt-map' nodes which
// reference this interrupt controller node do not need a parent
// address specifier.
#address-cells = <0>;

// Two cells to encode interrupt sources.
#interrupt-cells = <2>;

// Number of interrupt banks
num-banks = <2>;

// No HWMASKEXT is available (specify on Chorus2 and Comet ES1)
no-mask;

// Compatible with Meta hardware trigger block.
compatible = "img,meta-intc";
};

Example 2:

/*
* An interrupt generating device that is wired to a Meta external
* trigger block.
*/
uart1: uart@0x02004c00 {
// Interrupt source '5' that is level-sensitive.
// Note that there are only two cells as specified in the
// interrupt parent's '#interrupt-cells' property.
interrupts = <5 4 /* level */>;

// The interrupt controller that this device is wired to.
interrupt-parent = <&intc>;
};
2 changes: 2 additions & 0 deletions MAINTAINERS
Expand Up @@ -5040,6 +5040,8 @@ F: arch/metag/
F: Documentation/metag/
F: Documentation/devicetree/bindings/metag/
F: drivers/clocksource/metag_generic.c
F: drivers/irqchip/irq-metag.c
F: drivers/irqchip/irq-metag-ext.c

MICROBLAZE ARCHITECTURE
M: Michal Simek <monstr@monstr.eu>
Expand Down
5 changes: 5 additions & 0 deletions arch/metag/kernel/irq.c
Expand Up @@ -6,6 +6,8 @@
#include <linux/kernel.h>
#include <linux/interrupt.h>
#include <linux/init.h>
#include <linux/irqchip/metag-ext.h>
#include <linux/irqchip/metag.h>
#include <linux/irqdomain.h>
#include <linux/ratelimit.h>

Expand Down Expand Up @@ -258,6 +260,9 @@ void __init init_IRQ(void)

irq_ctx_init(smp_processor_id());

init_internal_IRQ();
init_external_IRQ();

if (machine_desc->init_irq)
machine_desc->init_irq();
}
Expand Down
2 changes: 2 additions & 0 deletions drivers/irqchip/Makefile
@@ -1,4 +1,6 @@
obj-$(CONFIG_ARCH_BCM2835) += irq-bcm2835.o
obj-$(CONFIG_METAG) += irq-metag-ext.o
obj-$(CONFIG_METAG_PERFCOUNTER_IRQS) += irq-metag.o
obj-$(CONFIG_ARCH_SUNXI) += irq-sunxi.o
obj-$(CONFIG_VERSATILE_FPGA_IRQ) += irq-versatile-fpga.o
obj-$(CONFIG_ARCH_SPEAR3XX) += spear-shirq.o

0 comments on commit 5698c50

Please sign in to comment.