Skip to content

Commit

Permalink
Merge branch 'irqchip/stacked-tegra' into irqchip/core
Browse files Browse the repository at this point in the history
  • Loading branch information
Jason Cooper committed Apr 10, 2015
2 parents 7822335 + 1eec582 commit 37b25ff
Show file tree
Hide file tree
Showing 11 changed files with 488 additions and 227 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
NVIDIA Legacy Interrupt Controller

All Tegra SoCs contain a legacy interrupt controller that routes
interrupts to the GIC, and also serves as a wakeup source. It is also
referred to as "ictlr", hence the name of the binding.

The HW block exposes a number of interrupt controllers, each
implementing a set of 32 interrupts.

Required properties:

- compatible : should be: "nvidia,tegra<chip>-ictlr". The LIC on
subsequent SoCs remained backwards-compatible with Tegra30, so on
Tegra generations later than Tegra30 the compatible value should
include "nvidia,tegra30-ictlr".
- reg : Specifies base physical address and size of the registers.
Each controller must be described separately (Tegra20 has 4 of them,
whereas Tegra30 and later have 5"
- interrupt-controller : Identifies the node as an interrupt controller.
- #interrupt-cells : Specifies the number of cells needed to encode an
interrupt source. The value must be 3.
- interrupt-parent : a phandle to the GIC these interrupts are routed
to.

Notes:

- Because this HW ultimately routes interrupts to the GIC, the
interrupt specifier must be that of the GIC.
- Only SPIs can use the ictlr as an interrupt parent. SGIs and PPIs
are explicitly forbidden.

Example:

ictlr: interrupt-controller@60004000 {
compatible = "nvidia,tegra20-ictlr", "nvidia,tegra-ictlr";
reg = <0x60004000 64>,
<0x60004100 64>,
<0x60004200 64>,
<0x60004300 64>;
interrupt-controller;
#interrupt-cells = <3>;
interrupt-parent = <&intc>;
};
16 changes: 15 additions & 1 deletion arch/arm/boot/dts/tegra114.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

/ {
compatible = "nvidia,tegra114";
interrupt-parent = <&gic>;
interrupt-parent = <&lic>;

host1x@50000000 {
compatible = "nvidia,tegra114-host1x", "simple-bus";
Expand Down Expand Up @@ -134,6 +134,19 @@
<0x50046000 0x2000>;
interrupts = <GIC_PPI 9
(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
interrupt-parent = <&gic>;
};

lic: interrupt-controller@60004000 {
compatible = "nvidia,tegra114-ictlr", "nvidia,tegra30-ictlr";
reg = <0x60004000 0x100>,
<0x60004100 0x50>,
<0x60004200 0x50>,
<0x60004300 0x50>,
<0x60004400 0x50>;
interrupt-controller;
#interrupt-cells = <3>;
interrupt-parent = <&gic>;
};

timer@60005000 {
Expand Down Expand Up @@ -766,5 +779,6 @@
(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
<GIC_PPI 10
(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
interrupt-parent = <&gic>;
};
};
16 changes: 15 additions & 1 deletion arch/arm/boot/dts/tegra124.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

/ {
compatible = "nvidia,tegra124";
interrupt-parent = <&gic>;
interrupt-parent = <&lic>;
#address-cells = <2>;
#size-cells = <2>;

Expand Down Expand Up @@ -173,6 +173,7 @@
<0x0 0x50046000 0x0 0x2000>;
interrupts = <GIC_PPI 9
(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
interrupt-parent = <&gic>;
};

gpu@0,57000000 {
Expand All @@ -190,6 +191,18 @@
status = "disabled";
};

lic: interrupt-controller@60004000 {
compatible = "nvidia,tegra124-ictlr", "nvidia,tegra30-ictlr";
reg = <0x0 0x60004000 0x0 0x100>,
<0x0 0x60004100 0x0 0x100>,
<0x0 0x60004200 0x0 0x100>,
<0x0 0x60004300 0x0 0x100>,
<0x0 0x60004400 0x0 0x100>;
interrupt-controller;
#interrupt-cells = <3>;
interrupt-parent = <&gic>;
};

timer@0,60005000 {
compatible = "nvidia,tegra124-timer", "nvidia,tegra20-timer";
reg = <0x0 0x60005000 0x0 0x400>;
Expand Down Expand Up @@ -955,5 +968,6 @@
(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
<GIC_PPI 10
(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
interrupt-parent = <&gic>;
};
};
15 changes: 14 additions & 1 deletion arch/arm/boot/dts/tegra20.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

/ {
compatible = "nvidia,tegra20";
interrupt-parent = <&intc>;
interrupt-parent = <&lic>;

host1x@50000000 {
compatible = "nvidia,tegra20-host1x", "simple-bus";
Expand Down Expand Up @@ -142,6 +142,7 @@

timer@50040600 {
compatible = "arm,cortex-a9-twd-timer";
interrupt-parent = <&intc>;
reg = <0x50040600 0x20>;
interrupts = <GIC_PPI 13
(GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_HIGH)>;
Expand All @@ -154,6 +155,7 @@
0x50040100 0x0100>;
interrupt-controller;
#interrupt-cells = <3>;
interrupt-parent = <&intc>;
};

cache-controller@50043000 {
Expand All @@ -165,6 +167,17 @@
cache-level = <2>;
};

lic: interrupt-controller@60004000 {
compatible = "nvidia,tegra20-ictlr";
reg = <0x60004000 0x100>,
<0x60004100 0x50>,
<0x60004200 0x50>,
<0x60004300 0x50>;
interrupt-controller;
#interrupt-cells = <3>;
interrupt-parent = <&intc>;
};

timer@60005000 {
compatible = "nvidia,tegra20-timer";
reg = <0x60005000 0x60>;
Expand Down
16 changes: 15 additions & 1 deletion arch/arm/boot/dts/tegra30.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

/ {
compatible = "nvidia,tegra30";
interrupt-parent = <&intc>;
interrupt-parent = <&lic>;

pcie-controller@00003000 {
compatible = "nvidia,tegra30-pcie";
Expand Down Expand Up @@ -228,6 +228,7 @@
timer@50040600 {
compatible = "arm,cortex-a9-twd-timer";
reg = <0x50040600 0x20>;
interrupt-parent = <&intc>;
interrupts = <GIC_PPI 13
(GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
clocks = <&tegra_car TEGRA30_CLK_TWD>;
Expand All @@ -239,6 +240,7 @@
0x50040100 0x0100>;
interrupt-controller;
#interrupt-cells = <3>;
interrupt-parent = <&intc>;
};

cache-controller@50043000 {
Expand All @@ -250,6 +252,18 @@
cache-level = <2>;
};

lic: interrupt-controller@60004000 {
compatible = "nvidia,tegra30-ictlr";
reg = <0x60004000 0x100>,
<0x60004100 0x50>,
<0x60004200 0x50>,
<0x60004300 0x50>,
<0x60004400 0x50>;
interrupt-controller;
#interrupt-cells = <3>;
interrupt-parent = <&intc>;
};

timer@60005000 {
compatible = "nvidia,tegra30-timer", "nvidia,tegra20-timer";
reg = <0x60005000 0x400>;
Expand Down
15 changes: 0 additions & 15 deletions arch/arm/mach-tegra/iomap.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,21 +31,6 @@
#define TEGRA_ARM_INT_DIST_BASE 0x50041000
#define TEGRA_ARM_INT_DIST_SIZE SZ_4K

#define TEGRA_PRIMARY_ICTLR_BASE 0x60004000
#define TEGRA_PRIMARY_ICTLR_SIZE SZ_64

#define TEGRA_SECONDARY_ICTLR_BASE 0x60004100
#define TEGRA_SECONDARY_ICTLR_SIZE SZ_64

#define TEGRA_TERTIARY_ICTLR_BASE 0x60004200
#define TEGRA_TERTIARY_ICTLR_SIZE SZ_64

#define TEGRA_QUATERNARY_ICTLR_BASE 0x60004300
#define TEGRA_QUATERNARY_ICTLR_SIZE SZ_64

#define TEGRA_QUINARY_ICTLR_BASE 0x60004400
#define TEGRA_QUINARY_ICTLR_SIZE SZ_64

#define TEGRA_TMR1_BASE 0x60005000
#define TEGRA_TMR1_SIZE SZ_8

Expand Down
Loading

0 comments on commit 37b25ff

Please sign in to comment.