public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: Vladimir Oltean <vladimir.oltean@nxp.com>
To: linux-phy@lists.infradead.org
Cc: Vinod Koul <vkoul@kernel.org>,
	Neil Armstrong <neil.armstrong@linaro.org>,
	dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org,
	linux-arm-kernel@lists.infradead.org,
	linux-arm-msm@vger.kernel.org, linux-can@vger.kernel.org,
	linux-gpio@vger.kernel.org, linux-ide@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
	linux-pci@vger.kernel.org, linux-renesas-soc@vger.kernel.org,
	linux-riscv@lists.infradead.org,
	linux-rockchip@lists.infradead.org,
	linux-samsung-soc@vger.kernel.org, linux-scsi@vger.kernel.org,
	linux-sunxi@lists.linux.dev, linux-tegra@vger.kernel.org,
	linux-usb@vger.kernel.org, netdev@vger.kernel.org,
	spacemit@lists.linux.dev, UNGLinuxDriver@microchip.com,
	Geert Uytterhoeven <geert+renesas@glider.be>,
	Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>,
	Michael Dege <michael.dege@renesas.com>,
	Andrew Lunn <andrew+netdev@lunn.ch>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	"Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
Subject: [PATCH v5 phy-next 21/27] net: renesas: rswitch: include PHY provider header
Date: Fri, 20 Mar 2026 00:32:35 +0200	[thread overview]
Message-ID: <20260319223241.1351137-22-vladimir.oltean@nxp.com> (raw)
In-Reply-To: <20260319223241.1351137-1-vladimir.oltean@nxp.com>

As a PHY consumer driver, the Renesas rswitch dereferences internal
fields of struct phy, something which shouldn't be done, as that is
going to be made an opaque pointer.

It is quite clearly visible that the driver is tightly coupled with the
drivers/phy/renesas/r8a779f0-ether-serdes.c, which puts heavy pressure
on the Generic PHY subsystem.

This was discussed before here:
https://lore.kernel.org/linux-phy/20260211194541.cdmibrpfn6ej6e74@skbuf/

but to summarize, it is generally expected that when a Generic PHY
function is called, it takes effect immediately. When this doesn't
happen, the PHY provider driver must change its implementation rather
than the consumer be made to work around it. PHY providers which rely on
a hardcoded call sequence in the consumer are just lazy and wrong.

The most obvious example is commit 5cb630925b49 ("net: renesas: rswitch:
Add phy_power_{on,off}() calling"). Problem description:
- Ethernet PHYs may change phydev->interface. When this happens, the
  SerDes must learn of the new phydev->interface using phy_set_mode_ext().
- drivers/phy/renesas/r8a779f0-ether-serdes.c implements phy_set_mode_ext(),
  but this only caches the mode and submode into channel->phy_interface
  and applies this to hardware during phy_power_on().

The commit author decided to work around this at the consumer site, by
power cycling the PHY for the configuration to take effect.

This had a worse implication from an API perspective in subsequent
commit 053f13f67be6 ("rswitch: Fix imbalance phy_power_off() calling").
It was observed that phy_power_on() and phy_power_off() calls need to be
balanced, and so, the consumer decided to start looking at the struct
phy :: power_count (the technical reason why I'm making this change).

This is also wrong from an API perspective because
- a consumer should only care about its own vote on the PHY power state.
  If this is a multi-port submode like QSGMII, a single phy_power_off()
  call will not actually turn the PHY off (nor should it).
- the power_count is written under the &phy->mutex, but read unlocked
  here.

The rswitch and r8a779f0-ether-serdes drivers both need to be completely
rethought in terms of Generic PHY API call sequence. There is no quick
fix to apply. Just include the PHY provider API along with the consumer
one, to keep working as before when struct phy will be made an opaque
pointer to normal PHY consumers. But this is a bad offender (and it's
not even a provider) so add a FIXME.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
Cc: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Cc: Michael Dege <michael.dege@renesas.com>
Cc: Andrew Lunn <andrew+netdev@lunn.ch>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
Cc: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>

v2->v5: none
v1->v2: collect tag
---
 drivers/net/ethernet/renesas/rswitch_main.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/ethernet/renesas/rswitch_main.c b/drivers/net/ethernet/renesas/rswitch_main.c
index 6fe964816322..132be5f15073 100644
--- a/drivers/net/ethernet/renesas/rswitch_main.c
+++ b/drivers/net/ethernet/renesas/rswitch_main.c
@@ -27,6 +27,7 @@
 #include <linux/spinlock.h>
 #include <linux/sys_soc.h>
 
+#include "../../../phy/phy-provider.h" /* FIXME */
 #include "rswitch.h"
 #include "rswitch_l2.h"
 
-- 
2.43.0


  parent reply	other threads:[~2026-03-19 22:33 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-19 22:32 [PATCH v5 phy-next 00/27] Split Generic PHY consumer and provider API Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 01/27] ata: add <linux/pm_runtime.h> where missing Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 02/27] PCI: Add missing headers transitively included by <linux/phy/phy.h> Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 03/27] usb: add " Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 04/27] drm: add <linux/pm_runtime.h> where missing Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 05/27] phy: " Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 06/27] phy: spacemit: include missing <linux/phy/phy.h> Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 07/27] net: lan969x: include missing <linux/of.h> Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 08/27] PCI: Remove device links to PHY Vladimir Oltean
2026-03-24  5:35   ` Manivannan Sadhasivam
2026-03-19 22:32 ` [PATCH v5 phy-next 09/27] scsi: ufs: exynos: stop poking into struct phy guts Vladimir Oltean
2026-03-20  2:15   ` Martin K. Petersen
2026-03-20  8:22     ` Vladimir Oltean
2026-03-23 11:58     ` Vladimir Oltean
2026-03-23 12:35       ` Alim Akhtar
2026-03-23 22:41         ` Vladimir Oltean
2026-03-23 17:26   ` Alim Akhtar
2026-03-19 22:32 ` [PATCH v5 phy-next 10/27] scsi: ufs: qcom: keep parallel track of PHY power state Vladimir Oltean
2026-03-24  5:30   ` Manivannan Sadhasivam
2026-03-25 11:43     ` Vladimir Oltean
2026-03-25 11:51       ` Manivannan Sadhasivam
2026-03-25 11:57         ` Vladimir Oltean
2026-03-26  8:04           ` Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 11/27] drm/rockchip: dw_hdmi: avoid direct dereference of phy->dev.of_node Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 12/27] usb: host: tegra: " Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 13/27] usb: gadget: tegra-xudc: " Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 14/27] drm/msm/dp: remove debugging prints with internal struct phy state Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 15/27] phy: move provider API out of public <linux/phy/phy.h> Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 16/27] phy: make phy_get_mode(), phy_(get|set)_bus_width() NULL tolerant Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 17/27] phy: introduce phy_get_max_link_rate() helper for consumers Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 18/27] drm/rockchip: dsi: include PHY provider header Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 19/27] drm: bridge: cdns-mhdp8546: use consumer API for getting PHY bus width Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 20/27] media: sunxi: a83-mips-csi2: include PHY provider header Vladimir Oltean
2026-03-19 22:32 ` Vladimir Oltean [this message]
2026-03-19 22:32 ` [PATCH v5 phy-next 22/27] pinctrl: tegra-xusb: " Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 23/27] power: supply: cpcap-charger: include missing <linux/property.h> Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 24/27] phy: include PHY provider header (1/2) Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 25/27] phy: include PHY provider header (2/2) Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 26/27] phy: remove temporary provider compatibility from consumer header Vladimir Oltean
2026-03-19 22:32 ` [PATCH v5 phy-next 27/27] MAINTAINERS: add regexes for linux-phy Vladimir Oltean

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=20260319223241.1351137-22-vladimir.oltean@nxp.com \
    --to=vladimir.oltean@nxp.com \
    --cc=UNGLinuxDriver@microchip.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=edumazet@google.com \
    --cc=freedreno@lists.freedesktop.org \
    --cc=geert+renesas@glider.be \
    --cc=kuba@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-can@vger.kernel.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux-phy@lists.infradead.org \
    --cc=linux-renesas-soc@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=linux-sunxi@lists.linux.dev \
    --cc=linux-tegra@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=michael.dege@renesas.com \
    --cc=neil.armstrong@linaro.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=rmk+kernel@armlinux.org.uk \
    --cc=spacemit@lists.linux.dev \
    --cc=vkoul@kernel.org \
    --cc=yoshihiro.shimoda.uh@renesas.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