of: Add NVIDIA Tegra Legacy Interrupt Controller binding
Subsystems (5)
PATCH v2 1/4 of: Add NVIDIA Tegra Legacy Interrupt Controller binding
From: Thierry Reding <[email protected]>
The Legacy Interrupt Controller found on NVIDIA Tegra SoCs is used by the AVP coprocessor and can also serve as a backup for the ARM Cortex CPU's local interrupt controller (GIC).
The LIC is subdivided into multiple identical units, each handling 32 possible interrupt sources.
---
Changes in v2:
- new patch
.../interrupt-controller/nvidia,tegra20-ictlr.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Documentation/devicetree/bindings/interrupt-controller/nvidia,tegra20-ictlr.txt
Documentation/devicetree/bindings/interrupt-controller/nvidia,tegra20-ictlr.txt new file +19 -0
@@ -0,0 +1,19 @@ +NVIDIA Tegra Legacy Interrupt Controller + +The legacy interrupt controller is divided into units that serve 32 interrupts +each. Tegra20 implements four units, whereas Tegra30 and later implement five. + +Required properties: +- compatible: "nvidia,tegra<chip>-ictlr" +- reg: Physical base address and length of the controller's registers. There + should be one entry for each unit. + +Example: + + interrupt-controller at 60004000 { + compatible = "nvidia,tegra20-ictlr"; + reg = <0x60004000 0x40 /* primary controller */ + 0x60004100 0x40 /* secondary controller */ + 0x60004200 0x40 /* tertiary controller */ + 0x60004300 0x40>; /* quaternary controller */ + };
Signature · 1 line
2.0.0
PATCH v2 2/4 ARM: tegra: Add legacy interrupt controller nodes
From: Thierry Reding <[email protected]>
Add device tree nodes for the legacy interrupt controller so that the driver can get the register ranges from device tree rather than hard- coding them.
---
Changes in v2:
- add chip-specific compatible string
- drop quinary controller on Tegra20
arch/arm/boot/dts/tegra114.dtsi | 9 +++++++++ arch/arm/boot/dts/tegra124.dtsi | 9 +++++++++ arch/arm/boot/dts/tegra20.dtsi | 8 ++++++++ arch/arm/boot/dts/tegra30.dtsi | 9 +++++++++ 4 files changed, 35 insertions(+)
arch/arm/boot/dts/tegra114.dtsi +9 -0
@@ -138,6 +138,15 @@ (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>; }; + interrupt-controller at 60004000 { + compatible = "nvidia,tegra114-ictlr", "nvidia,tegra30-ictlr"; + reg = <0x60004000 0x40 /* primary controller */ + 0x60004100 0x40 /* secondary controller */ + 0x60004200 0x40 /* tertiary controller */ + 0x60004300 0x40 /* quaternary controller */ + 0x60004400 0x40>; /* quinary controller */ + }; + timer at 60005000 { compatible = "nvidia,tegra114-timer", "nvidia,tegra20-timer"; reg = <0x60005000 0x400>;
arch/arm/boot/dts/tegra124.dtsi +9 -0
@@ -102,6 +102,15 @@ (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>; }; + interrupt-controller at 0,60004000 { + compatible = "nvidia,tegra124-ictlr", "nvidia,tegra30-ictlr"; + reg = <0x0 0x60004000 0x0 0x40 /* primary controller */ + 0x0 0x60004100 0x0 0x40 /* secondary controller */ + 0x0 0x60004200 0x0 0x40 /* tertiary controller */ + 0x0 0x60004300 0x0 0x40 /* quaternary controller */ + 0x0 0x60004400 0x0 0x40>; /* quinary controller */ + }; + timer at 0,60005000 { compatible = "nvidia,tegra124-timer", "nvidia,tegra20-timer"; reg = <0x0 0x60005000 0x0 0x400>;
arch/arm/boot/dts/tegra20.dtsi +8 -0
@@ -173,6 +173,14 @@ cache-level = <2>; }; + interrupt-controller at 60004000 { + compatible = "nvidia,tegra20-ictlr"; + reg = <0x60004000 0x40 /* primary controller */ + 0x60004100 0x40 /* secondary controller */ + 0x60004200 0x40 /* tertiary controller */ + 0x60004300 0x40>; /* quaternary controller */ + }; + timer at 60005000 { compatible = "nvidia,tegra20-timer"; reg = <0x60005000 0x60>;
arch/arm/boot/dts/tegra30.dtsi +9 -0
@@ -253,6 +253,15 @@ cache-level = <2>; }; + interrupt-controller at 60004000 { + compatible = "nvidia,tegra30-ictlr"; + reg = <0x60004000 0x40 /* primary controller */ + 0x60004100 0x40 /* secondary controller */ + 0x60004200 0x40 /* tertiary controller */ + 0x60004300 0x40 /* quaternary controller */ + 0x60004400 0x40>; /* quinary controller */ + }; + timer at 60005000 { compatible = "nvidia,tegra30-timer", "nvidia,tegra20-timer"; reg = <0x60005000 0x400>;
Signature · 1 line
2.0.0
PATCH v2 3/4 soc/tegra: Initialize interrupt controller from DT
In reply to Thierry RedingFrom: Thierry Reding <[email protected]>
Obtains the register ranges for the legacy interrupt controller from DT and provide hard-coded values as fallback.
---
Changes in v2:
- check for the exact number of controllers expected
- fallback to tegra_chip_id for non-DT
- warn on parsing errors
arch/arm/mach-tegra/iomap.h | 18 ------- arch/arm/mach-tegra/irq.c | 123 ++++++++++++++++++++++++++++++++++++-------- 2 files changed, 101 insertions(+), 40 deletions(-)
arch/arm/mach-tegra/iomap.h +0 -18
@@ -28,24 +28,6 @@#define TEGRA_ARM_PERIF_BASE 0x50040000#define TEGRA_ARM_PERIF_SIZE SZ_8K -#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
arch/arm/mach-tegra/irq.c +101 -22
166 lines not on this page · raw message
Signature · 1 line
2.0.0
PATCH v2 3/4 soc/tegra: Initialize interrupt controller from DT
arch/arm/mach-tegra/irq.c static void tegra114_gic_cpu_pm_registration(void) · line 342
Quoted 13 lines · Thierry Reding
From: Thierry Reding <[email protected]>
Obtains the register ranges for the legacy interrupt controller from DT and provide hard-coded values as fallback.
arch/arm/mach-tegra/irq.c +3
-4-if (num_ictlrs >ARRAY_SIZE (ictlr_reg_base)) { -WARN (1 ,"Too many (%d) interrupt controllers found. Maximum is %d." , - num_ictlrs,ARRAY_SIZE (ictlr_reg_base)); - num_ictlrs =ARRAY_SIZE (ictlr_reg_base); +if (num_ictlrs != max_ictlrs) { +WARN (1 ,"Too many (%d) interrupt controllers found. Maximum is %u." , + num_ictlrs, max_ictlrs);
We should change that message to something more like:
Wrong number (%d) interrupt controllers found. Expected %u.
Feel free to make that a separate patch though.
arch/arm/mach-tegra/irq.c void __init tegra_init_irq(void) · line 371
Quoted 7 lines
arch/arm/mach-tegra/irq.c +4
-3-if (!of_have_populated_dt ()) -gic_init (0 ,29 , distbase, -IO_ADDRESS (TEGRA_ARM_PERIF_BASE +0x100 )); +if (!of_have_populated_dt ()) { +void __iomem *cpubase =ioremap_nocache (0x50040000 ,0x2000 ); +gic_init (0 ,29 , distbase, cpubase); + }
That if will never fire these days. We should rip out that block sometime.
PATCH v2 4/4 soc/tegra: Remove unused defines
In reply to Thierry RedingFrom: Thierry Reding <[email protected]>
Eventually the aim is to get rid of this file because it cannot be built on ARM64. Until it can be completely removed, eliminate unused entries to make it easier to see which are still used.
--- arch/arm/mach-tegra/iomap.h | 30 ------------------------------ 1 file changed, 30 deletions(-)
arch/arm/mach-tegra/iomap.h +0 -30
@@ -28,21 +28,9 @@#define TEGRA_ARM_PERIF_BASE 0x50040000#define TEGRA_ARM_PERIF_SIZE SZ_8K -#define TEGRA_TMR1_BASE 0x60005000 -#define TEGRA_TMR1_SIZE SZ_8 - -#define TEGRA_TMR2_BASE 0x60005008 -#define TEGRA_TMR2_SIZE SZ_8 -#define TEGRA_TMRUS_BASE 0x60005010#define TEGRA_TMRUS_SIZE SZ_64 -#define TEGRA_TMR3_BASE 0x60005050 -#define TEGRA_TMR3_SIZE SZ_8 - -#define TEGRA_TMR4_BASE 0x60005058 -#define TEGRA_TMR4_SIZE SZ_8 -#define TEGRA_CLK_RESET_BASE 0x60006000#define TEGRA_CLK_RESET_SIZE SZ_4K
@@ -58,21 +46,6 @@#define TEGRA_APB_MISC_BASE 0x70000000#define TEGRA_APB_MISC_SIZE SZ_4K -#define TEGRA_UARTA_BASE 0x70006000 -#define TEGRA_UARTA_SIZE SZ_64 - -#define TEGRA_UARTB_BASE 0x70006040 -#define TEGRA_UARTB_SIZE SZ_64 - -#define TEGRA_UARTC_BASE 0x70006200 -#define TEGRA_UARTC_SIZE SZ_256 - -#define TEGRA_UARTD_BASE 0x70006300 -#define TEGRA_UARTD_SIZE SZ_256 - -#define TEGRA_UARTE_BASE 0x70006400 -#define TEGRA_UARTE_SIZE SZ_256 -#define TEGRA_PMC_BASE 0x7000E400#define TEGRA_PMC_SIZE SZ_256
@@ -91,9 +64,6 @@#define TEGRA124_EMC_BASE 0x7001B000#define TEGRA124_EMC_SIZE SZ_2K -#define TEGRA_CSITE_BASE 0x70040000 -#define TEGRA_CSITE_SIZE SZ_256K -/* On TEGRA, many peripherals are very closely packed in * two 256MB io windows (that actually only use about 64KB * at the start of each).
Signature · 1 line
2.0.0
PATCH v2 1/4 of: Add NVIDIA Tegra Legacy Interrupt Controller binding
In reply to Thierry RedingQuoted 24 lines · Thierry Reding
From: Thierry Reding <[email protected]>
The Legacy Interrupt Controller found on NVIDIA Tegra SoCs is used by the AVP coprocessor and can also serve as a backup for the ARM Cortex CPU's local interrupt controller (GIC).
The LIC is subdivided into multiple identical units, each handling 32 possible interrupt sources.
Signed-off-by Thierry Reding <[email protected]>---
Changes in v2:
- new patch.../interrupt-controller/nvidia,tegra20-ictlr.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Documentation/devicetree/bindings/interrupt-controller/nvidia,tegra20-ictlr.txtDocumentation/devicetree/bindings/interrupt-controller/nvidia,tegra20-ictlr.txt new file +0
-0
Documentation/devicetree/bindings/interrupt-controller/nvidia,tegra20-ictlr.txt line 7
Quoted 7 lines
Documentation/devicetree/bindings/interrupt-controller/nvidia,tegra20-ictlr.txt new file +7
-0@@ -0,0 +1,19 @@ +NVIDIA Tegra Legacy Interrupt Controller + +The legacy interrupt controller is divided into units that serve 32 interrupts +each. Tegra20 implements four units, whereas Tegra30 and later implement five. + +Required properties: +- compatible: "nvidia,tegra<chip>-ictlr"
And valid <chip> values are?
Documentation/devicetree/bindings/interrupt-controller/nvidia,tegra20-ictlr.txt line 18
Quoted 11 lines
Documentation/devicetree/bindings/interrupt-controller/nvidia,tegra20-ictlr.txt new file +11
-0+- reg: Physical base address and length of the controller's registers. There + should be one entry for each unit. + +Example: + + interrupt-controller at 60004000 { + compatible = "nvidia,tegra20-ictlr"; + reg = <0x60004000 0x40 /* primary controller */ + 0x60004100 0x40 /* secondary controller */ + 0x60004200 0x40 /* tertiary controller */ + 0x60004300 0x40>; /* quaternary controller */
Could we please bracket the entries individually, e.g.
reg = <0x60004000 0x40>, <0x60004100 0x40>, <0x60004200 0x40>, <0x60004300 0x40>;
How do the interrupt lines correspond to those of the GIC?
Cheers,
Mark.
PATCH v2 1/4 of: Add NVIDIA Tegra Legacy Interrupt Controller binding
Quoted 19 lines · Mark Rutland
Quoted 18 lines · Thierry Reding
From: Thierry Reding <[email protected]>
The Legacy Interrupt Controller found on NVIDIA Tegra SoCs is used by the AVP coprocessor and can also serve as a backup for the ARM Cortex CPU's local interrupt controller (GIC).
The LIC is subdivided into multiple identical units, each handling 32 possible interrupt sources.
Signed-off-by Thierry Reding <[email protected]>---
Changes in v2:
- new patch.../interrupt-controller/nvidia,tegra20-ictlr.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Documentation/devicetree/bindings/interrupt-controller/nvidia,tegra20-ictlr.txt
Quoted 15 lines
Documentation/devicetree/bindings/interrupt-controller/nvidia,tegra20-ictlr.txt line 7
Quoted 13 lines
Documentation/devicetree/bindings/interrupt-controller/nvidia,tegra20-ictlr.txt new file +7
-0@@ -0,0 +1,19 @@ +NVIDIA Tegra Legacy Interrupt Controller + +The legacy interrupt controller is divided into units that serve 32 interrupts +each. Tegra20 implements four units, whereas Tegra30 and later implement five. + +Required properties: +- compatible: "nvidia,tegra<chip>-ictlr"And valid <chip> values are?
Do you really want us to edit every single binding every time a new chip comes out? Surely just relying NVIDIA's published chip names is fine?
PATCH v2 1/4 of: Add NVIDIA Tegra Legacy Interrupt Controller binding
Quoted 36 lines · Stephen Warren
Quoted 19 lines · Mark Rutland
Quoted 18 lines · Thierry Reding
From: Thierry Reding <[email protected]>
The Legacy Interrupt Controller found on NVIDIA Tegra SoCs is used by the AVP coprocessor and can also serve as a backup for the ARM Cortex CPU's local interrupt controller (GIC).
The LIC is subdivided into multiple identical units, each handling 32 possible interrupt sources.
Signed-off-by Thierry Reding <[email protected]>---
Changes in v2:
- new patch.../interrupt-controller/nvidia,tegra20-ictlr.txt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Documentation/devicetree/bindings/interrupt-controller/nvidia,tegra20-ictlr.txtQuoted 15 lines
Documentation/devicetree/bindings/interrupt-controller/nvidia,tegra20-ictlr.txt line 7
Quoted 13 lines
Documentation/devicetree/bindings/interrupt-controller/nvidia,tegra20-ictlr.txt new file +7
-0@@ -0,0 +1,19 @@ +NVIDIA Tegra Legacy Interrupt Controller + +The legacy interrupt controller is divided into units that serve 32 interrupts +each. Tegra20 implements four units, whereas Tegra30 and later implement five. + +Required properties: +- compatible: "nvidia,tegra<chip>-ictlr"And valid <chip> values are?
Quoted 3 lines
Do you really want us to edit every single binding every time a new chip comes out? Surely just relying NVIDIA's published chip names is fine?
While I am not a fan of wildcards in documentation, if you feel this is clear as is then feel free to leave it as-is. The example is probably sufficient.
Mark.
PATCH v2 1/4 of: Add NVIDIA Tegra Legacy Interrupt Controller binding
In reply to Thierry RedingQuoted 8 lines · Thierry Reding
From: Thierry Reding <[email protected]>
The Legacy Interrupt Controller found on NVIDIA Tegra SoCs is used by the AVP coprocessor and can also serve as a backup for the ARM Cortex CPU's local interrupt controller (GIC).
The LIC is subdivided into multiple identical units, each handling 32 possible interrupt sources.
The series looks OK to me, although I guess there will be a V3 to address Mark's comments?
PATCH v2 1/4 of: Add NVIDIA Tegra Legacy Interrupt Controller binding
Quoted 7 lines · Stephen Warren
Quoted 6 lines · Thierry Reding
From: Thierry Reding <[email protected]>
The Legacy Interrupt Controller found on NVIDIA Tegra SoCs is used by the AVP coprocessor and can also serve as a backup for the ARM Cortex CPU's local interrupt controller (GIC).
Quoted 5 lines
Quoted 2 lines
The LIC is subdivided into multiple identical units, each handling 32 possible interrupt sources.
The series looks OK to me, although I guess there will be a V3 to address Mark's comments?
Thierry, do you still want this series applied? I'm not sure if it's required by or conflicts with any of your later patches to move code out of arch/arm/mach-tegra/?
If this series should still be applied, I guess I can fix up Mark's remaining comment (the bracketing of the multiple reg entries in the DT) when applying it, at least if you don't want to repost it yourself.
PATCH v2 1/4 of: Add NVIDIA Tegra Legacy Interrupt Controller binding
Quoted 14 lines · Stephen Warren
Quoted 7 lines · Stephen Warren
Quoted 6 lines · Thierry Reding
From: Thierry Reding <[email protected]>
The Legacy Interrupt Controller found on NVIDIA Tegra SoCs is used by the AVP coprocessor and can also serve as a backup for the ARM Cortex CPU's local interrupt controller (GIC).
Quoted 5 lines
Quoted 2 lines
The LIC is subdivided into multiple identical units, each handling 32 possible interrupt sources.
The series looks OK to me, although I guess there will be a V3 to address Mark's comments?
Quoted 7 lines
Thierry, do you still want this series applied? I'm not sure if it's required by or conflicts with any of your later patches to move code out of
arch/arm/mach-tegra/?If this series should still be applied, I guess I can fix up Mark's remaining comment (the bracketing of the multiple reg entries in the DT) when applying it, at least if you don't want to repost it yourself.
This was originally meant to be moved out of arch/arm/mach-tegra and shared for upcoming 64-bit SoCs, but it seems like we may not need this code for 64-bit at all.
On the other hand the series is an improvement over what we've had before, so there may still be some value in merging it. I'll respin v3.
Thierry
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20140826/2a86af89/attachment.sig>