Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5698c50d authored by James Hogan's avatar James Hogan
Browse files

metag: Internal and external irqchips



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: default avatarJames 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
parent 63047ea3
Loading
Loading
Loading
Loading
+82 −0
Original line number Diff line number Diff line
* 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 −0
Original line number Diff line number Diff line
@@ -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>
+5 −0
Original line number Diff line number Diff line
@@ -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>

@@ -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();
}
+2 −0
Original line number Diff line number Diff line
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
+868 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading