netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ioana Ciornei <ciorneiioana@gmail.com>
To: Andrew Lunn <andrew@lunn.ch>,
	Heiner Kallweit <hkallweit1@gmail.com>,
	Russell King <linux@armlinux.org.uk>,
	Jakub Kicinski <kuba@kernel.org>,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: Ioana Ciornei <ioana.ciornei@nxp.com>,
	Alexandru Ardelean <alexandru.ardelean@analog.com>,
	Andre Edich <andre.edich@microchip.com>,
	Antoine Tenart <atenart@kernel.org>,
	Baruch Siach <baruch@tkos.co.il>,
	Christophe Leroy <christophe.leroy@c-s.fr>,
	Dan Murphy <dmurphy@ti.com>,
	Divya Koppera <Divya.Koppera@microchip.com>,
	Florian Fainelli <f.fainelli@gmail.com>,
	Hauke Mehrtens <hauke@hauke-m.de>,
	Jerome Brunet <jbrunet@baylibre.com>,
	Kavya Sree Kotagiri <kavyasree.kotagiri@microchip.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Marco Felsch <m.felsch@pengutronix.de>,
	Marek Vasut <marex@denx.de>,
	Martin Blumenstingl <martin.blumenstingl@googlemail.com>,
	Mathias Kresin <dev@kresin.me>,
	Maxim Kochetkov <fido_max@inbox.ru>,
	Michael Walle <michael@walle.cc>,
	Neil Armstrong <narmstrong@baylibre.com>,
	Nisar Sayed <Nisar.Sayed@microchip.com>,
	Oleksij Rempel <o.rempel@pengutronix.de>,
	Philippe Schenker <philippe.schenker@toradex.com>,
	Willy Liu <willy.liu@realtek.com>,
	Yuiko Oshino <yuiko.oshino@microchip.com>
Subject: [PATCH net-next 00/19] net: phy: add support for shared interrupts (part 1)
Date: Thu, 29 Oct 2020 12:07:22 +0200	[thread overview]
Message-ID: <20201029100741.462818-1-ciorneiioana@gmail.com> (raw)

From: Ioana Ciornei <ioana.ciornei@nxp.com>

This patch set aims to actually add support for shared interrupts in
phylib and not only for multi-PHY devices. While we are at it,
streamline the interrupt handling in phylib.

For a bit of context, at the moment, there are multiple phy_driver ops
that deal with this subject:

- .config_intr() - Enable/disable the interrupt line.

- .ack_interrupt() - Should quiesce any interrupts that may have been
  fired.  It's also used by phylib in conjunction with .config_intr() to
  clear any pending interrupts after the line was disabled, and before
  it is going to be enabled.

- .did_interrupt() - Intended for multi-PHY devices with a shared IRQ
  line and used by phylib to discern which PHY from the package was the
  one that actually fired the interrupt.

- .handle_interrupt() - Completely overrides the default interrupt
  handling logic from phylib. The PHY driver is responsible for checking
  if any interrupt was fired by the respective PHY and choose
  accordingly if it's the one that should trigger the link state machine.

From my point of view, the interrupt handling in phylib has become
somewhat confusing with all these callbacks that actually read the same
PHY register - the interrupt status.  A more streamlined approach would
be to just move the responsibility to write an interrupt handler to the
driver (as any other device driver does) and make .handle_interrupt()
the only way to deal with interrupts.

Another advantage with this approach would be that phylib would gain
support for shared IRQs between different PHY (not just multi-PHY
devices), something which at the moment would require extending every
PHY driver anyway in order to implement their .did_interrupt() callback
and duplicate the same logic as in .ack_interrupt(). The disadvantage
of making .did_interrupt() mandatory would be that we are slightly
changing the semantics of the phylib API and that would increase
confusion instead of reducing it.

What I am proposing is the following:

- As a first step, make the .ack_interrupt() callback optional so that
  we do not break any PHY driver amid the transition.

- Every PHY driver gains a .handle_interrupt() implementation that, for
  the most part, would look like below:

	irq_status = phy_read(phydev, INTR_STATUS);
	if (irq_status < 0) {
		phy_error(phydev);
		return IRQ_NONE;
	}

	if (irq_status == 0)
		return IRQ_NONE;

	phy_trigger_machine(phydev);

	return IRQ_HANDLED;

- Remove each PHY driver's implementation of the .ack_interrupt() by
  actually taking care of quiescing any pending interrupts before
  enabling/after disabling the interrupt line.

- Finally, after all drivers have been ported, remove the
  .ack_interrupt() and .did_interrupt() callbacks from phy_driver.

This patch set is part 1 and it addresses the changes needed in phylib
and 7 PHY drivers. The rest can be found on my Github branch here:
https://github.com/IoanaCiornei/linux/commits/phylib-shared-irq

I do not have access to most of these PHY's, therefore I Cc-ed the
latest contributors to the individual PHY drivers in order to have
access, hopefully, to more regression testing.

Ioana Ciornei (19):
  net: phy: export phy_error and phy_trigger_machine
  net: phy: add a shutdown procedure
  net: phy: make .ack_interrupt() optional
  net: phy: at803x: implement generic .handle_interrupt() callback
  net: phy: at803x: remove the use of .ack_interrupt()
  net: phy: mscc: use phy_trigger_machine() to notify link change
  net: phy: mscc: implement generic .handle_interrupt() callback
  net: phy: mscc: remove the use of .ack_interrupt()
  net: phy: aquantia: implement generic .handle_interrupt() callback
  net: phy: aquantia: remove the use of .ack_interrupt()
  net: phy: broadcom: implement generic .handle_interrupt() callback
  net: phy: broadcom: remove use of ack_interrupt()
  net: phy: cicada: implement the generic .handle_interrupt() callback
  net: phy: cicada: remove the use of .ack_interrupt()
  net: phy: davicom: implement generic .handle_interrupt() calback
  net: phy: davicom: remove the use of .ack_interrupt()
  net: phy: add genphy_handle_interrupt_no_ack()
  net: phy: realtek: implement generic .handle_interrupt() callback
  net: phy: realtek: remove the use of .ack_interrupt()

 drivers/net/phy/aquantia_main.c  |  57 ++++++++++----
 drivers/net/phy/at803x.c         |  42 ++++++++--
 drivers/net/phy/bcm-cygnus.c     |   2 +-
 drivers/net/phy/bcm-phy-lib.c    |  37 ++++++++-
 drivers/net/phy/bcm-phy-lib.h    |   1 +
 drivers/net/phy/bcm54140.c       |  39 +++++++---
 drivers/net/phy/bcm63xx.c        |  20 +++--
 drivers/net/phy/bcm87xx.c        |  50 ++++++------
 drivers/net/phy/broadcom.c       |  70 ++++++++++++-----
 drivers/net/phy/cicada.c         |  35 ++++++++-
 drivers/net/phy/davicom.c        |  59 ++++++++++----
 drivers/net/phy/mscc/mscc_main.c |  70 +++++++++--------
 drivers/net/phy/phy.c            |   6 +-
 drivers/net/phy/phy_device.c     |  23 +++++-
 drivers/net/phy/realtek.c        | 128 +++++++++++++++++++++++++++----
 include/linux/phy.h              |   3 +
 16 files changed, 484 insertions(+), 158 deletions(-)

Cc: Alexandru Ardelean <alexandru.ardelean@analog.com>
Cc: Andre Edich <andre.edich@microchip.com>
Cc: Antoine Tenart <atenart@kernel.org>
Cc: Baruch Siach <baruch@tkos.co.il>
Cc: Christophe Leroy <christophe.leroy@c-s.fr>
Cc: Dan Murphy <dmurphy@ti.com>
Cc: Divya Koppera <Divya.Koppera@microchip.com>
Cc: Florian Fainelli <f.fainelli@gmail.com>
Cc: Hauke Mehrtens <hauke@hauke-m.de>
Cc: Heiner Kallweit <hkallweit1@gmail.com>
Cc: Jerome Brunet <jbrunet@baylibre.com>
Cc: Kavya Sree Kotagiri <kavyasree.kotagiri@microchip.com>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Marco Felsch <m.felsch@pengutronix.de>
Cc: Marek Vasut <marex@denx.de>
Cc: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Cc: Mathias Kresin <dev@kresin.me>
Cc: Maxim Kochetkov <fido_max@inbox.ru>
Cc: Michael Walle <michael@walle.cc>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Nisar Sayed <Nisar.Sayed@microchip.com>
Cc: Oleksij Rempel <o.rempel@pengutronix.de>
Cc: Philippe Schenker <philippe.schenker@toradex.com>
Cc: Willy Liu <willy.liu@realtek.com>
Cc: Yuiko Oshino <yuiko.oshino@microchip.com>

-- 
2.28.0


             reply	other threads:[~2020-10-29 10:08 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-29 10:07 Ioana Ciornei [this message]
2020-10-29 10:07 ` [PATCH net-next 01/19] net: phy: export phy_error and phy_trigger_machine Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 02/19] net: phy: add a shutdown procedure Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 03/19] net: phy: make .ack_interrupt() optional Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 04/19] net: phy: at803x: implement generic .handle_interrupt() callback Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 05/19] net: phy: at803x: remove the use of .ack_interrupt() Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 06/19] net: phy: mscc: use phy_trigger_machine() to notify link change Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 07/19] net: phy: mscc: implement generic .handle_interrupt() callback Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 08/19] net: phy: mscc: remove the use of .ack_interrupt() Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 09/19] net: phy: aquantia: implement generic .handle_interrupt() callback Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 10/19] net: phy: aquantia: remove the use of .ack_interrupt() Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 11/19] net: phy: broadcom: implement generic .handle_interrupt() callback Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 12/19] net: phy: broadcom: remove use of ack_interrupt() Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 13/19] net: phy: cicada: implement the generic .handle_interrupt() callback Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 14/19] net: phy: cicada: remove the use of .ack_interrupt() Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 15/19] net: phy: davicom: implement generic .handle_interrupt() calback Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 16/19] net: phy: davicom: remove the use of .ack_interrupt() Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 17/19] net: phy: add genphy_handle_interrupt_no_ack() Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 18/19] net: phy: realtek: implement generic .handle_interrupt() callback Ioana Ciornei
2020-10-29 10:07 ` [PATCH net-next 19/19] net: phy: realtek: remove the use of .ack_interrupt() Ioana Ciornei
2020-10-30 21:56 ` [PATCH net-next 00/19] net: phy: add support for shared interrupts (part 1) Heiner Kallweit
2020-10-30 22:06   ` Vladimir Oltean
2020-10-30 22:33     ` Heiner Kallweit
2020-10-30 22:46     ` Vladimir Oltean
2020-10-31  5:27   ` Ioana Ciornei
2020-10-30 22:42 ` Heiner Kallweit
2020-10-30 23:36   ` Andrew Lunn
2020-10-31  5:22     ` Ioana Ciornei
2020-10-31 10:18     ` Heiner Kallweit
2020-10-31 10:57       ` Ioana Ciornei
2020-10-31 14:32       ` Andrew Lunn
2020-10-31 14:51         ` Ioana Ciornei

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=20201029100741.462818-1-ciorneiioana@gmail.com \
    --to=ciorneiioana@gmail.com \
    --cc=Divya.Koppera@microchip.com \
    --cc=Nisar.Sayed@microchip.com \
    --cc=alexandru.ardelean@analog.com \
    --cc=andre.edich@microchip.com \
    --cc=andrew@lunn.ch \
    --cc=atenart@kernel.org \
    --cc=baruch@tkos.co.il \
    --cc=christophe.leroy@c-s.fr \
    --cc=dev@kresin.me \
    --cc=dmurphy@ti.com \
    --cc=f.fainelli@gmail.com \
    --cc=fido_max@inbox.ru \
    --cc=hauke@hauke-m.de \
    --cc=hkallweit1@gmail.com \
    --cc=ioana.ciornei@nxp.com \
    --cc=jbrunet@baylibre.com \
    --cc=kavyasree.kotagiri@microchip.com \
    --cc=kuba@kernel.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=m.felsch@pengutronix.de \
    --cc=marex@denx.de \
    --cc=martin.blumenstingl@googlemail.com \
    --cc=michael@walle.cc \
    --cc=narmstrong@baylibre.com \
    --cc=netdev@vger.kernel.org \
    --cc=o.rempel@pengutronix.de \
    --cc=philippe.schenker@toradex.com \
    --cc=willy.liu@realtek.com \
    --cc=yuiko.oshino@microchip.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).