All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Lunn <andrew@lunn.ch>
To: Arun.Ramadoss@microchip.com
Cc: olteanv@gmail.com, linux-kernel@vger.kernel.org,
	UNGLinuxDriver@microchip.com, vivien.didelot@gmail.com,
	linux@armlinux.org.uk, Tristram.Ha@microchip.com,
	f.fainelli@gmail.com, kuba@kernel.org, edumazet@google.com,
	pabeni@redhat.com, netdev@vger.kernel.org,
	Woojung.Huh@microchip.com, davem@davemloft.net
Subject: Re: [RFC Patch net-next v2] net: dsa: microchip: lan937x: enable interrupt for internal phy link detection
Date: Tue, 23 Aug 2022 16:33:14 +0200	[thread overview]
Message-ID: <YwTlKnpgMRp2Nugm@lunn.ch> (raw)
In-Reply-To: <b1e66b49e8006bd7dcb3fd74d5185db807e5a9f6.camel@microchip.com>

> I used the same gpio line number of switch as the interrupt for
> internal phy. And when phy link up/down happens, it triggers both the
> switch and phy interrupt routine.

Ah, shared interrupt. O.K.

> I have not used irq_domain before. Can you please brief on how phy
> interrupt handler is called from chip.c & global2.

There are two different ways this can all be glued together.

Using irq_domain, each interrupt source becomes a full interrupt in
Linux. You can see these individual interrupt sources in
/proc/interrupts. You can use request_threaded_irq() on it. The
mv88e6xxx driver is also an interrupt controller as well as an
Ethernet switch.

> The dts file I used for testing,
> spi1: spi@f8008000 {
> 	cs-gpios = <0>, <0>, <0>, <&pioC 28 0>;
> 	id = <1>;
> 	status = "okay";
> 	
> 	lan9370: lan9370@3 {
> 		compatible = "microchip,lan9370";
> 		reg = <3>;
> 		spi-max-frequency = <44000000>;
> 		interrupt-parent = <&pioB>;
> 		interrupts = <28 IRQ_TYPE_LEVEL_LOW>;
> 		interrupt-controller;
> 		status = "okay";
> 		ports {
> 			#address-cells = <1>;
> 			#size-cells = <0>;
> 			port@0 {
> 				reg = <0x0>;
> 				phy-handle = <&t1phy0>;
> 				phy-mode = "internal";
> 				label = "lan1";
> 			};
> 			port@1 {
> 				reg = <0x1>;
> 				phy-handle = <&t1phy1>;
> 				phy-mode = "internal";
> 				label = "lan2";
> 			};
> 		}
> 	}
> 
> 	mdio {
> 		#address-cells = <1>;
> 		#size-cells = <0>;
> 		compatible = "microchip,lan937x-mdio";
> 		
> 		t1phy0: ethernet-phy@0{
> 			interrupt-parent = <&lan9370>;
> 			interrupts = <28 IRQ_TYPE_LEVEL_LOW>;

So here you would use the interrupt number within the domain. Ideally
you want port 0 to use interrupt 0.


> 			reg = <0x0>;
> 		};
> 		t1phy1: ethernet-phy@1{
> 			interrupt-parent = <&lan9370>;
> 			interrupts = <28 IRQ_TYPE_LEVEL_LOW>;

and here port 1 uses interrupt 1.

> 			reg = <0x1>;
> 		};
> 	}
> }
 
You can see this for an Marvell switch here:

https://elixir.bootlin.com/linux/latest/source/arch/arm/boot/dts/vf610-zii-dev-rev-b.dts#L93

Doing it this way is however very verbose. I later discovered a short
cut:

https://elixir.bootlin.com/linux/latest/source/drivers/net/dsa/mv88e6xxx/global2.c#L1164

by setting mdiobus->irq[] to the interrupt number, phylib will
automatically use the correct interrupt without needing an DT.

	Andrew

  reply	other threads:[~2022-08-23 16:47 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-22  9:20 [RFC Patch net-next v2] net: dsa: microchip: lan937x: enable interrupt for internal phy link detection Arun Ramadoss
2022-08-22 12:56 ` Andrew Lunn
2022-08-22 13:12 ` Andrew Lunn
2022-08-23 10:45   ` Arun.Ramadoss
2022-08-23 14:33     ` Andrew Lunn [this message]
2022-08-26 16:21       ` Arun.Ramadoss
2022-08-26 19:11         ` Andrew Lunn

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YwTlKnpgMRp2Nugm@lunn.ch \
    --to=andrew@lunn.ch \
    --cc=Arun.Ramadoss@microchip.com \
    --cc=Tristram.Ha@microchip.com \
    --cc=UNGLinuxDriver@microchip.com \
    --cc=Woojung.Huh@microchip.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=f.fainelli@gmail.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=netdev@vger.kernel.org \
    --cc=olteanv@gmail.com \
    --cc=pabeni@redhat.com \
    --cc=vivien.didelot@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.