All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] arm64: dts: renesas: r8a779a0: Add INTC-EX support
@ 2021-06-23 15:02 Geert Uytterhoeven
  2021-06-23 15:02 ` [PATCH 1/2] dt-bindings: irqchip: renesas-irqc: Add R-Car V3U support Geert Uytterhoeven
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Geert Uytterhoeven @ 2021-06-23 15:02 UTC (permalink / raw)
  To: Yoshihiro Shimoda, Kieran Bingham; +Cc: linux-renesas-soc, Geert Uytterhoeven

	Hi all,

This patch series adds support for the Interrupt Controller for External
Devices (INT-EC) in the Renesas R-Car V3U (r8a779a0) SoC.

As there are two known issues, I'm posting this to a limited audience:

  1. External interrupts have not been tested.

     Kieran: perhaps IRQ0 can be tested on Falcon with the MIPI DSI/eDP
     bridge, by changing

	 -    interrupt-parent = <&gpio1>;
	 -    interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
	 +    interrupt-parent = <&intc_ex>;
	 +    interrupts = <0 IRQ_TYPE_LEVEL_HIGH>;

     ? The "ti,sn65dsi86" driver doesn't seem to use interrupts, though,
     so I don't know how feasible this is.

     Alternatively, with physical access, IRQ0 is available on test
     point CP47, and IRQ2 on the GPIO CN.

  2. As recent revisions of R-Car Gen3 Hardware User's Manuals stopped
     documenting module clocks for interrupt controllers, I don't know
     which Module Stop bits control it.  Hence I could not add the intc-ex
     module clock to the R-Car V3U clock driver, but have used the CP
     clock instead in DTS.  Alternatively, as the driver doesn't really
     use the clock (except implicitly through Runtime PM), we can drop
     it, but that would need an update to the DT bindings.

This series been boot-tested on a remote Falcon development board.

Thanks for your comments!

Geert Uytterhoeven (2):
  dt-bindings: irqchip: renesas-irqc: Add R-Car V3U support
  arm64: dts: renesas: r8a779a0: Add INTC-EX device node

 .../interrupt-controller/renesas,irqc.yaml        |  1 +
 arch/arm64/boot/dts/renesas/r8a779a0.dtsi         | 15 +++++++++++++++
 2 files changed, 16 insertions(+)

-- 
2.25.1

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/2] dt-bindings: irqchip: renesas-irqc: Add R-Car V3U support
  2021-06-23 15:02 [PATCH 0/2] arm64: dts: renesas: r8a779a0: Add INTC-EX support Geert Uytterhoeven
@ 2021-06-23 15:02 ` Geert Uytterhoeven
  2021-06-23 15:02 ` [PATCH 2/2] arm64: dts: renesas: r8a779a0: Add INTC-EX device node Geert Uytterhoeven
  2021-06-23 16:13 ` [PATCH 0/2] arm64: dts: renesas: r8a779a0: Add INTC-EX support Kieran Bingham
  2 siblings, 0 replies; 8+ messages in thread
From: Geert Uytterhoeven @ 2021-06-23 15:02 UTC (permalink / raw)
  To: Yoshihiro Shimoda, Kieran Bingham; +Cc: linux-renesas-soc, Geert Uytterhoeven

Document support for the Interrupt Controller for External Devices
(INT-EC) in the Renesas R-Car V3U (r8a779a0) SoC.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
 .../devicetree/bindings/interrupt-controller/renesas,irqc.yaml   | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.yaml b/Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.yaml
index 79d0358e2f612f24..620f01775e429c3e 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.yaml
+++ b/Documentation/devicetree/bindings/interrupt-controller/renesas,irqc.yaml
@@ -36,6 +36,7 @@ properties:
           - renesas,intc-ex-r8a77980    # R-Car V3H
           - renesas,intc-ex-r8a77990    # R-Car E3
           - renesas,intc-ex-r8a77995    # R-Car D3
+          - renesas,intc-ex-r8a779a0    # R-Car V3U
       - const: renesas,irqc
 
   '#interrupt-cells':
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] arm64: dts: renesas: r8a779a0: Add INTC-EX device node
  2021-06-23 15:02 [PATCH 0/2] arm64: dts: renesas: r8a779a0: Add INTC-EX support Geert Uytterhoeven
  2021-06-23 15:02 ` [PATCH 1/2] dt-bindings: irqchip: renesas-irqc: Add R-Car V3U support Geert Uytterhoeven
@ 2021-06-23 15:02 ` Geert Uytterhoeven
  2021-06-23 16:13 ` [PATCH 0/2] arm64: dts: renesas: r8a779a0: Add INTC-EX support Kieran Bingham
  2 siblings, 0 replies; 8+ messages in thread
From: Geert Uytterhoeven @ 2021-06-23 15:02 UTC (permalink / raw)
  To: Yoshihiro Shimoda, Kieran Bingham; +Cc: linux-renesas-soc, Geert Uytterhoeven

Populate the device node for the Interrupt Controller for External
Devices (INTC-EX) on R-Car V3U, which serves external IRQ pins IRQ[0-5].

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
 arch/arm64/boot/dts/renesas/r8a779a0.dtsi | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/arch/arm64/boot/dts/renesas/r8a779a0.dtsi b/arch/arm64/boot/dts/renesas/r8a779a0.dtsi
index 3676b2bd3d646cdb..eeb49a3287bccb2a 100644
--- a/arch/arm64/boot/dts/renesas/r8a779a0.dtsi
+++ b/arch/arm64/boot/dts/renesas/r8a779a0.dtsi
@@ -340,6 +340,21 @@ tsc: thermal@e6190000 {
 			#thermal-sensor-cells = <1>;
 		};
 
+		intc_ex: interrupt-controller@e61c0000 {
+			compatible = "renesas,intc-ex-r8a779a0", "renesas,irqc";
+			#interrupt-cells = <2>;
+			interrupt-controller;
+			reg = <0 0xe61c0000 0 0x200>;
+			interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 4 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&cpg CPG_CORE R8A779A0_CLK_CP>;
+			power-domains = <&sysc R8A779A0_PD_ALWAYS_ON>;
+		};
+
 		tmu0: timer@e61e0000 {
 			compatible = "renesas,tmu-r8a779a0", "renesas,tmu";
 			reg = <0 0xe61e0000 0 0x30>;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/2] arm64: dts: renesas: r8a779a0: Add INTC-EX support
  2021-06-23 15:02 [PATCH 0/2] arm64: dts: renesas: r8a779a0: Add INTC-EX support Geert Uytterhoeven
  2021-06-23 15:02 ` [PATCH 1/2] dt-bindings: irqchip: renesas-irqc: Add R-Car V3U support Geert Uytterhoeven
  2021-06-23 15:02 ` [PATCH 2/2] arm64: dts: renesas: r8a779a0: Add INTC-EX device node Geert Uytterhoeven
@ 2021-06-23 16:13 ` Kieran Bingham
  2021-06-24  8:07   ` Geert Uytterhoeven
  2 siblings, 1 reply; 8+ messages in thread
From: Kieran Bingham @ 2021-06-23 16:13 UTC (permalink / raw)
  To: Geert Uytterhoeven, Yoshihiro Shimoda, Kieran Bingham; +Cc: linux-renesas-soc

Hi Geert,

On 23/06/2021 16:02, Geert Uytterhoeven wrote:
> 	Hi all,
> 
> This patch series adds support for the Interrupt Controller for External
> Devices (INT-EC) in the Renesas R-Car V3U (r8a779a0) SoC.
> 
> As there are two known issues, I'm posting this to a limited audience:
> 
>   1. External interrupts have not been tested.
> 
>      Kieran: perhaps IRQ0 can be tested on Falcon with the MIPI DSI/eDP
>      bridge, by changing
> 
> 	 -    interrupt-parent = <&gpio1>;
> 	 -    interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
> 	 +    interrupt-parent = <&intc_ex>;
> 	 +    interrupts = <0 IRQ_TYPE_LEVEL_HIGH>;
> 
>      ? The "ti,sn65dsi86" driver doesn't seem to use interrupts, though,
>      so I don't know how feasible this is.

I can add an interrupt handler if that's what you need, but I suspect
that the change here simply 're-routes' the interrupt through the
intc_ex so that it still needs an interrupt to be generated by the
SN65DSI86? is that right?



>      Alternatively, with physical access, IRQ0 is available on test
>      point CP47, and IRQ2 on the GPIO CN.

I do have physical access, so I can trigger this - Is there a suitable
voltage or condition I can apply? (I.e. take a signal from a nearby pin
to short it?)

--
Kieran



>   2. As recent revisions of R-Car Gen3 Hardware User's Manuals stopped
>      documenting module clocks for interrupt controllers, I don't know
>      which Module Stop bits control it.  Hence I could not add the intc-ex
>      module clock to the R-Car V3U clock driver, but have used the CP
>      clock instead in DTS.  Alternatively, as the driver doesn't really
>      use the clock (except implicitly through Runtime PM), we can drop
>      it, but that would need an update to the DT bindings.
> 
> This series been boot-tested on a remote Falcon development board.
> 
> Thanks for your comments!
> 
> Geert Uytterhoeven (2):
>   dt-bindings: irqchip: renesas-irqc: Add R-Car V3U support
>   arm64: dts: renesas: r8a779a0: Add INTC-EX device node
> 
>  .../interrupt-controller/renesas,irqc.yaml        |  1 +
>  arch/arm64/boot/dts/renesas/r8a779a0.dtsi         | 15 +++++++++++++++
>  2 files changed, 16 insertions(+)
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/2] arm64: dts: renesas: r8a779a0: Add INTC-EX support
  2021-06-23 16:13 ` [PATCH 0/2] arm64: dts: renesas: r8a779a0: Add INTC-EX support Kieran Bingham
@ 2021-06-24  8:07   ` Geert Uytterhoeven
  2021-09-22 14:14     ` Kieran Bingham
  2022-01-05 22:27     ` Kieran Bingham
  0 siblings, 2 replies; 8+ messages in thread
From: Geert Uytterhoeven @ 2021-06-24  8:07 UTC (permalink / raw)
  To: Kieran Bingham; +Cc: Yoshihiro Shimoda, Kieran Bingham, Linux-Renesas

Hi Kieran,

On Wed, Jun 23, 2021 at 6:13 PM Kieran Bingham
<kieran.bingham@ideasonboard.com> wrote:
> On 23/06/2021 16:02, Geert Uytterhoeven wrote:
> > This patch series adds support for the Interrupt Controller for External
> > Devices (INT-EC) in the Renesas R-Car V3U (r8a779a0) SoC.
> >
> > As there are two known issues, I'm posting this to a limited audience:
> >
> >   1. External interrupts have not been tested.
> >
> >      Kieran: perhaps IRQ0 can be tested on Falcon with the MIPI DSI/eDP
> >      bridge, by changing
> >
> >        -    interrupt-parent = <&gpio1>;
> >        -    interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
> >        +    interrupt-parent = <&intc_ex>;
> >        +    interrupts = <0 IRQ_TYPE_LEVEL_HIGH>;
> >
> >      ? The "ti,sn65dsi86" driver doesn't seem to use interrupts, though,
> >      so I don't know how feasible this is.
>
> I can add an interrupt handler if that's what you need, but I suspect
> that the change here simply 're-routes' the interrupt through the
> intc_ex so that it still needs an interrupt to be generated by the
> SN65DSI86? is that right?

Correct, you need to make the SN65DSI86 generate an interrupt, too.
No idea how to do that...

> >      Alternatively, with physical access, IRQ0 is available on test
> >      point CP47, and IRQ2 on the GPIO CN.
>
> I do have physical access, so I can trigger this - Is there a suitable
> voltage or condition I can apply? (I.e. take a signal from a nearby pin
> to short it?)

As IRQ0 is driven by the single gate U59, you better don't cause logic
conflicts, and play with IRQ2 instead.

Note that high level is SPI_D1.8V/3.3V, which is 1.8V by default!
The GPIO CN connector carries a.o. SPI_D1.8V/3.3V and GND.
Internal pull-up should be enabled for IRQ2 by reset state, but you
may want to measure the pin's voltage to be sure.

To configure pin control, you need to add the following, and hook it
up to the pfc node:

        irq2_pins: irq2 {
                groups = "intc_ex_irq2";
                function = "intc_ex";
        };

You should be able to test this using gpio-keys, with a key subnode that
has an interrupts instead of a gpios property.

This might be a good opportunity to wire up the slide and push switches
(SW46-49) as gpio-keys, too...

Thanks!

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/2] arm64: dts: renesas: r8a779a0: Add INTC-EX support
  2021-06-24  8:07   ` Geert Uytterhoeven
@ 2021-09-22 14:14     ` Kieran Bingham
  2021-09-22 17:33       ` Geert Uytterhoeven
  2022-01-05 22:27     ` Kieran Bingham
  1 sibling, 1 reply; 8+ messages in thread
From: Kieran Bingham @ 2021-09-22 14:14 UTC (permalink / raw)
  To: Geert Uytterhoeven; +Cc: Yoshihiro Shimoda, Kieran Bingham, Linux-Renesas

Hi Geert,

I've been trying to test this on the Falcon-V3U


On 24/06/2021 09:07, Geert Uytterhoeven wrote:
> Hi Kieran,
> 
> On Wed, Jun 23, 2021 at 6:13 PM Kieran Bingham
> <kieran.bingham@ideasonboard.com> wrote:
>> On 23/06/2021 16:02, Geert Uytterhoeven wrote:
>>> This patch series adds support for the Interrupt Controller for External
>>> Devices (INT-EC) in the Renesas R-Car V3U (r8a779a0) SoC.
>>>
>>> As there are two known issues, I'm posting this to a limited audience:
>>>
>>>   1. External interrupts have not been tested.
>>>
>>>      Kieran: perhaps IRQ0 can be tested on Falcon with the MIPI DSI/eDP
>>>      bridge, by changing
>>>
>>>        -    interrupt-parent = <&gpio1>;
>>>        -    interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
>>>        +    interrupt-parent = <&intc_ex>;
>>>        +    interrupts = <0 IRQ_TYPE_LEVEL_HIGH>;
>>>
>>>      ? The "ti,sn65dsi86" driver doesn't seem to use interrupts, though,
>>>      so I don't know how feasible this is.
>>
>> I can add an interrupt handler if that's what you need, but I suspect
>> that the change here simply 're-routes' the interrupt through the
>> intc_ex so that it still needs an interrupt to be generated by the
>> SN65DSI86? is that right?
> 
> Correct, you need to make the SN65DSI86 generate an interrupt, too.
> No idea how to do that...

I'm going to ignore the SN65DSI86, and go with a route that I can
explicitly control ... so IRQ2 it is.



> 
>>>      Alternatively, with physical access, IRQ0 is available on test
>>>      point CP47, and IRQ2 on the GPIO CN.
>>
>> I do have physical access, so I can trigger this - Is there a suitable
>> voltage or condition I can apply? (I.e. take a signal from a nearby pin
>> to short it?)
> 
> As IRQ0 is driven by the single gate U59, you better don't cause logic
> conflicts, and play with IRQ2 instead.
> 
> Note that high level is SPI_D1.8V/3.3V, which is 1.8V by default!
> The GPIO CN connector carries a.o. SPI_D1.8V/3.3V and GND.
> Internal pull-up should be enabled for IRQ2 by reset state, but you
> may want to measure the pin's voltage to be sure.

Pin7 appears to be IRQ2. It is reading at 1.8v.
Pin 5 (SPI_D1.8v/3.3v) is reading at 1.8v
Pin 3 (D3.3v) no prizes for guessing here.

And of course pin 1 is ground.

So I have some wires I can play with.


> To configure pin control, you need to add the following, and hook it
> up to the pfc node:
> 
>         irq2_pins: irq2 {
>                 groups = "intc_ex_irq2";
>                 function = "intc_ex";
>         };
> 
> You should be able to test this using gpio-keys, with a key subnode that
> has an interrupts instead of a gpios property.


I'm afraid I haven't been able to successfully test this. I have this
series applied and have tried the following:



diff --git a/arch/arm64/boot/dts/renesas/r8a779a0-falcon.dts
b/arch/arm64/boot/dts/renesas/r8a779a0-falcon.dts
index dc671ff57ec7..1286b553e370 100644
--- a/arch/arm64/boot/dts/renesas/r8a779a0-falcon.dts
+++ b/arch/arm64/boot/dts/renesas/r8a779a0-falcon.dts
@@ -10,6 +10,10 @@
 #include "r8a779a0-falcon-csi-dsi.dtsi"
 #include "r8a779a0-falcon-ethernet.dtsi"

+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/gpio-keys.h>
+#include <dt-bindings/input/input.h>
+
 / {
 	model = "Renesas Falcon CPU and Breakout boards based on r8a779a0";
 	compatible = "renesas,falcon-breakout", "renesas,falcon-cpu",
"renesas,r8a779a0";
@@ -17,6 +21,23 @@ / {
 	aliases {
 		ethernet0 = &avb0;
 	};
+
+	gpio_keys {
+		compatible = "gpio-keys";
+
+		btn1 {
+			pinctrl-0 = <&irq2_pins>;
+			pinctrl-names = "default";
+
+			debounce-interval = <50>;
+			label = "button1";
+			linux,code = <KEY_1>;
+			interrupt-parent = <&intc_ex>;
+			interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
+
+			//gpios = <&gpio1 26 GPIO_ACTIVE_LOW>;
+		};
+	};
 };

 &avb0 {
@@ -45,6 +66,14 @@ eeprom@51 {
 };

 &pfc {
+	// Intc_ex testing
+	irq2_pins: irq2 {
+		groups = "intc_ex_irq2";
+		function = "intc_ex";
+
+		bias-pull-up;
+	};
+
 	avb0_pins: avb0 {
 		mux {
 			groups = "avb0_link", "avb0_mdio", "avb0_rgmii",
diff --git a/drivers/pinctrl/renesas/core.c b/drivers/pinctrl/renesas/core.c
index ef8ef05ba930..966883c6c64c 100644
--- a/drivers/pinctrl/renesas/core.c
+++ b/drivers/pinctrl/renesas/core.c
@@ -228,7 +228,7 @@ static void sh_pfc_write_config_reg(struct sh_pfc *pfc,

 	sh_pfc_config_reg_helper(pfc, crp, field, &mapped_reg, &mask, &pos);

-	dev_dbg(pfc->dev, "write_reg addr = %x, value = 0x%x, field = %u, "
+	dev_err(pfc->dev, "KB: write_reg addr = %x, value = 0x%x, field = %u, "
 		"r_width = %u, f_width = %u\n",
 		crp->reg, value, field, crp->reg_width, hweight32(mask));





And I have ribbon cable with the pitch for cn4 now which allows me to
connect pin 7 to pin 1 to ground it.


I use
 sudo evtest /dev/input/event0

to monitor the line for changes, and grounding pin7 has no effect in
this configuration.


However, to try to sanity check my test, I changed the gpio-keys to use
gpio1 26 directly - disabling the pinctrl, and using the gpios reference
directly instead :


diff --git a/arch/arm64/boot/dts/renesas/r8a779a0-falcon.dts
b/arch/arm64/boot/dts/renesas/r8a779a0-falcon.dts
index 1286b553e370..af85881de2c4 100644
--- a/arch/arm64/boot/dts/renesas/r8a779a0-falcon.dts
+++ b/arch/arm64/boot/dts/renesas/r8a779a0-falcon.dts
@@ -26,16 +26,11 @@ gpio_keys {
                compatible = "gpio-keys";

                btn1 {
-                       pinctrl-0 = <&irq2_pins>;
-                       pinctrl-names = "default";
-
                        debounce-interval = <50>;
                        label = "button1";
                        linux,code = <KEY_1>;
-                       interrupt-parent = <&intc_ex>;
-                       interrupts = <2 IRQ_TYPE_LEVEL_LOW>;

-                       //gpios = <&gpio1 26 GPIO_ACTIVE_LOW>;
+                       gpios = <&gpio1 26 GPIO_ACTIVE_LOW>;
                };
        };
 };


This shows active key events when grounding pin 7 to pin 1...
> kbingham@falcon-v3u:~$ sudo evtest /dev/input/event0
> Input driver version is 1.0.1
> Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
> Input device name: "gpio_keys"
> Supported events:
>   Event type 0 (EV_SYN)
>   Event type 1 (EV_KEY)
>     Event code 2 (KEY_1)
> Properties:
> Testing ... (interrupt to exit)
> Event: time 1632319971.126234, type 1 (EV_KEY), code 2 (KEY_1), value 1
> Event: time 1632319971.126234, -------------- SYN_REPORT ------------
> Event: time 1632319971.579966, type 1 (EV_KEY), code 2 (KEY_1), value 0
> Event: time 1632319971.579966, -------------- SYN_REPORT ------------
> Event: time 1632319981.461018, type 1 (EV_KEY), code 2 (KEY_1), value 1
> Event: time 1632319981.461018, -------------- SYN_REPORT ------------
> Event: time 1632319981.835693, type 1 (EV_KEY), code 2 (KEY_1), value 0
> Event: time 1632319981.835693, -------------- SYN_REPORT ------------
> Event: time 1632319982.112104, type 1 (EV_KEY), code 2 (KEY_1), value 1
> Event: time 1632319982.112104, -------------- SYN_REPORT ------------



If there's anything else you'd like me to test or change let me know.

--
Kieran





> 
> This might be a good opportunity to wire up the slide and push switches
> (SW46-49) as gpio-keys, too...
> 
> Thanks!
> 
> Gr{oetje,eeting}s,
> 
>                         Geert
> 
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
> 
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
>                                 -- Linus Torvalds
> 

-- 
--
Kieran

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/2] arm64: dts: renesas: r8a779a0: Add INTC-EX support
  2021-09-22 14:14     ` Kieran Bingham
@ 2021-09-22 17:33       ` Geert Uytterhoeven
  0 siblings, 0 replies; 8+ messages in thread
From: Geert Uytterhoeven @ 2021-09-22 17:33 UTC (permalink / raw)
  To: Kieran Bingham; +Cc: Yoshihiro Shimoda, Linux-Renesas

Hi Kieran,

On Wed, Sep 22, 2021 at 4:14 PM Kieran Bingham
<kieran.bingham+renesas@ideasonboard.com> wrote:
> I've been trying to test this on the Falcon-V3U

Thanks for testing!

> On 24/06/2021 09:07, Geert Uytterhoeven wrote:
> > On Wed, Jun 23, 2021 at 6:13 PM Kieran Bingham
> > <kieran.bingham@ideasonboard.com> wrote:
> >> On 23/06/2021 16:02, Geert Uytterhoeven wrote:
> >>> This patch series adds support for the Interrupt Controller for External
> >>> Devices (INT-EC) in the Renesas R-Car V3U (r8a779a0) SoC.
> >>>
> >>> As there are two known issues, I'm posting this to a limited audience:
> >>>
> >>>   1. External interrupts have not been tested.

> >>>      Alternatively, with physical access, IRQ0 is available on test
> >>>      point CP47, and IRQ2 on the GPIO CN.
> >>
> >> I do have physical access, so I can trigger this - Is there a suitable
> >> voltage or condition I can apply? (I.e. take a signal from a nearby pin
> >> to short it?)
> >
> > As IRQ0 is driven by the single gate U59, you better don't cause logic
> > conflicts, and play with IRQ2 instead.
> >
> > Note that high level is SPI_D1.8V/3.3V, which is 1.8V by default!
> > The GPIO CN connector carries a.o. SPI_D1.8V/3.3V and GND.
> > Internal pull-up should be enabled for IRQ2 by reset state, but you
> > may want to measure the pin's voltage to be sure.
>
> Pin7 appears to be IRQ2. It is reading at 1.8v.
> Pin 5 (SPI_D1.8v/3.3v) is reading at 1.8v
> Pin 3 (D3.3v) no prizes for guessing here.
>
> And of course pin 1 is ground.
>
> So I have some wires I can play with.
>
> > To configure pin control, you need to add the following, and hook it
> > up to the pfc node:
> >
> >         irq2_pins: irq2 {
> >                 groups = "intc_ex_irq2";
> >                 function = "intc_ex";
> >         };
> >
> > You should be able to test this using gpio-keys, with a key subnode that
> > has an interrupts instead of a gpios property.
>
> I'm afraid I haven't been able to successfully test this. I have this
> series applied and have tried the following:

> --- a/arch/arm64/boot/dts/renesas/r8a779a0-falcon.dts
> +++ b/arch/arm64/boot/dts/renesas/r8a779a0-falcon.dts
> @@ -10,6 +10,10 @@
>  #include "r8a779a0-falcon-csi-dsi.dtsi"
>  #include "r8a779a0-falcon-ethernet.dtsi"
>
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/input/gpio-keys.h>
> +#include <dt-bindings/input/input.h>
> +
>  / {
>         model = "Renesas Falcon CPU and Breakout boards based on r8a779a0";
>         compatible = "renesas,falcon-breakout", "renesas,falcon-cpu",
> "renesas,r8a779a0";
> @@ -17,6 +21,23 @@ / {
>         aliases {
>                 ethernet0 = &avb0;
>         };
> +
> +       gpio_keys {
> +               compatible = "gpio-keys";
> +
> +               btn1 {
> +                       pinctrl-0 = <&irq2_pins>;
> +                       pinctrl-names = "default";
> +
> +                       debounce-interval = <50>;
> +                       label = "button1";
> +                       linux,code = <KEY_1>;
> +                       interrupt-parent = <&intc_ex>;
> +                       interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
> +
> +                       //gpios = <&gpio1 26 GPIO_ACTIVE_LOW>;
> +               };
> +       };
>  };
>
>  &avb0 {
> @@ -45,6 +66,14 @@ eeprom@51 {
>  };
>
>  &pfc {
> +       // Intc_ex testing
> +       irq2_pins: irq2 {
> +               groups = "intc_ex_irq2";
> +               function = "intc_ex";
> +
> +               bias-pull-up;
> +       };
> +
>         avb0_pins: avb0 {
>                 mux {
>                         groups = "avb0_link", "avb0_mdio", "avb0_rgmii",

Looks good to me.

> diff --git a/drivers/pinctrl/renesas/core.c b/drivers/pinctrl/renesas/core.c
> index ef8ef05ba930..966883c6c64c 100644
> --- a/drivers/pinctrl/renesas/core.c
> +++ b/drivers/pinctrl/renesas/core.c
> @@ -228,7 +228,7 @@ static void sh_pfc_write_config_reg(struct sh_pfc *pfc,
>
>         sh_pfc_config_reg_helper(pfc, crp, field, &mapped_reg, &mask, &pos);
>
> -       dev_dbg(pfc->dev, "write_reg addr = %x, value = 0x%x, field = %u, "
> +       dev_err(pfc->dev, "KB: write_reg addr = %x, value = 0x%x, field = %u, "
>                 "r_width = %u, f_width = %u\n",
>                 crp->reg, value, field, crp->reg_width, hweight32(mask));
>
> And I have ribbon cable with the pitch for cn4 now which allows me to
> connect pin 7 to pin 1 to ground it.
>
>
> I use
>  sudo evtest /dev/input/event0
>
> to monitor the line for changes, and grounding pin7 has no effect in
> this configuration.
>
>
> However, to try to sanity check my test, I changed the gpio-keys to use
> gpio1 26 directly - disabling the pinctrl, and using the gpios reference
> directly instead :
>
>
> diff --git a/arch/arm64/boot/dts/renesas/r8a779a0-falcon.dts
> b/arch/arm64/boot/dts/renesas/r8a779a0-falcon.dts
> index 1286b553e370..af85881de2c4 100644
> --- a/arch/arm64/boot/dts/renesas/r8a779a0-falcon.dts
> +++ b/arch/arm64/boot/dts/renesas/r8a779a0-falcon.dts
> @@ -26,16 +26,11 @@ gpio_keys {
>                 compatible = "gpio-keys";
>
>                 btn1 {
> -                       pinctrl-0 = <&irq2_pins>;
> -                       pinctrl-names = "default";
> -
>                         debounce-interval = <50>;
>                         label = "button1";
>                         linux,code = <KEY_1>;
> -                       interrupt-parent = <&intc_ex>;
> -                       interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
>
> -                       //gpios = <&gpio1 26 GPIO_ACTIVE_LOW>;
> +                       gpios = <&gpio1 26 GPIO_ACTIVE_LOW>;
>                 };
>         };
>  };

Looks almost good to me.
You probably still want to enable bias-pull-up for GP1_26, but as
it works without...

> This shows active key events when grounding pin 7 to pin 1...
> > kbingham@falcon-v3u:~$ sudo evtest /dev/input/event0
> > Input driver version is 1.0.1
> > Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
> > Input device name: "gpio_keys"
> > Supported events:
> >   Event type 0 (EV_SYN)
> >   Event type 1 (EV_KEY)
> >     Event code 2 (KEY_1)
> > Properties:
> > Testing ... (interrupt to exit)
> > Event: time 1632319971.126234, type 1 (EV_KEY), code 2 (KEY_1), value 1
> > Event: time 1632319971.126234, -------------- SYN_REPORT ------------
> > Event: time 1632319971.579966, type 1 (EV_KEY), code 2 (KEY_1), value 0
> > Event: time 1632319971.579966, -------------- SYN_REPORT ------------
> > Event: time 1632319981.461018, type 1 (EV_KEY), code 2 (KEY_1), value 1
> > Event: time 1632319981.461018, -------------- SYN_REPORT ------------
> > Event: time 1632319981.835693, type 1 (EV_KEY), code 2 (KEY_1), value 0
> > Event: time 1632319981.835693, -------------- SYN_REPORT ------------
> > Event: time 1632319982.112104, type 1 (EV_KEY), code 2 (KEY_1), value 1
> > Event: time 1632319982.112104, -------------- SYN_REPORT ------------

Good!

> If there's anything else you'd like me to test or change let me know.

There are still several things that could be wrong:
  - Bug in the pin control tables,
  - Wrong parent interrupt description,
  - Undocumented INTC-EX module clock is turned off
    (does it retain register values?),
  - Wrong initial values in INTC-EX registers the driver doesn't touch,
  - ...

Can you print the value of the INTC-EX MONITOR register?
It should match the state of the external pins.

> > This might be a good opportunity to wire up the slide and push switches
> > (SW46-49) as gpio-keys, too...

Any chance with these? ;-)

Thanks again!

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/2] arm64: dts: renesas: r8a779a0: Add INTC-EX support
  2021-06-24  8:07   ` Geert Uytterhoeven
  2021-09-22 14:14     ` Kieran Bingham
@ 2022-01-05 22:27     ` Kieran Bingham
  1 sibling, 0 replies; 8+ messages in thread
From: Kieran Bingham @ 2022-01-05 22:27 UTC (permalink / raw)
  To: Geert Uytterhoeven; +Cc: Yoshihiro Shimoda, Linux-Renesas

Hi Geert,

Quoting Geert Uytterhoeven (2021-06-24 09:07:30)
> Hi Kieran,
> 
> On Wed, Jun 23, 2021 at 6:13 PM Kieran Bingham
> <kieran.bingham@ideasonboard.com> wrote:
> > On 23/06/2021 16:02, Geert Uytterhoeven wrote:
> > > This patch series adds support for the Interrupt Controller for External
> > > Devices (INT-EC) in the Renesas R-Car V3U (r8a779a0) SoC.
> > >
> > > As there are two known issues, I'm posting this to a limited audience:
> > >
> > >   1. External interrupts have not been tested.
> > >
> > >      Kieran: perhaps IRQ0 can be tested on Falcon with the MIPI DSI/eDP
> > >      bridge, by changing
> > >
> > >        -    interrupt-parent = <&gpio1>;
> > >        -    interrupts = <24 IRQ_TYPE_LEVEL_HIGH>;
> > >        +    interrupt-parent = <&intc_ex>;
> > >        +    interrupts = <0 IRQ_TYPE_LEVEL_HIGH>;
> > >
> > >      ? The "ti,sn65dsi86" driver doesn't seem to use interrupts, though,
> > >      so I don't know how feasible this is.
> >
> > I can add an interrupt handler if that's what you need, but I suspect
> > that the change here simply 're-routes' the interrupt through the
> > intc_ex so that it still needs an interrupt to be generated by the
> > SN65DSI86? is that right?
> 
> Correct, you need to make the SN65DSI86 generate an interrupt, too.
> No idea how to do that...

   o/ Oh oh I do I do ... (now).

I've added a handler, enabled all interrupts on the device and given
myself an interrupt storm:

 95:       3203      irqc   0 Level     sn65dsi86-irq

So I believe I can now (finally) add a 

Tested-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>

here.

And I'll continue working on the interrupt handling for the SN65DSI86 to
see if I can add hotplug detection over interrupts.



> 
> > >      Alternatively, with physical access, IRQ0 is available on test
> > >      point CP47, and IRQ2 on the GPIO CN.
> >
> > I do have physical access, so I can trigger this - Is there a suitable
> > voltage or condition I can apply? (I.e. take a signal from a nearby pin
> > to short it?)
> 
> As IRQ0 is driven by the single gate U59, you better don't cause logic
> conflicts, and play with IRQ2 instead.
> 
> Note that high level is SPI_D1.8V/3.3V, which is 1.8V by default!
> The GPIO CN connector carries a.o. SPI_D1.8V/3.3V and GND.
> Internal pull-up should be enabled for IRQ2 by reset state, but you
> may want to measure the pin's voltage to be sure.
> 
> To configure pin control, you need to add the following, and hook it
> up to the pfc node:
> 
>         irq2_pins: irq2 {
>                 groups = "intc_ex_irq2";
>                 function = "intc_ex";
>         };
> 
> You should be able to test this using gpio-keys, with a key subnode that
> has an interrupts instead of a gpios property.
> 
> This might be a good opportunity to wire up the slide and push switches
> (SW46-49) as gpio-keys, too...
> 
> Thanks!
> 
> Gr{oetje,eeting}s,
> 
>                         Geert
> 
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
> 
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
>                                 -- Linus Torvalds

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2022-01-05 22:27 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-23 15:02 [PATCH 0/2] arm64: dts: renesas: r8a779a0: Add INTC-EX support Geert Uytterhoeven
2021-06-23 15:02 ` [PATCH 1/2] dt-bindings: irqchip: renesas-irqc: Add R-Car V3U support Geert Uytterhoeven
2021-06-23 15:02 ` [PATCH 2/2] arm64: dts: renesas: r8a779a0: Add INTC-EX device node Geert Uytterhoeven
2021-06-23 16:13 ` [PATCH 0/2] arm64: dts: renesas: r8a779a0: Add INTC-EX support Kieran Bingham
2021-06-24  8:07   ` Geert Uytterhoeven
2021-09-22 14:14     ` Kieran Bingham
2021-09-22 17:33       ` Geert Uytterhoeven
2022-01-05 22:27     ` Kieran Bingham

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.