[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250220-marvell-88q2xxx-hwmon-enable-at-probe-v2-2-78b2838a62da@gmail.com>
Date: Thu, 20 Feb 2025 09:11:12 +0100
From: Dimitri Fedrau <dima.fedrau@...il.com>
To: Andrew Lunn <andrew@...n.ch>, Heiner Kallweit <hkallweit1@...il.com>,
Russell King <linux@...linux.org.uk>,
"David S. Miller" <davem@...emloft.net>, Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>,
Niklas Söderlund <niklas.soderlund+renesas@...natech.se>,
Gregor Herburger <gregor.herburger@...tq-group.com>,
Stefan Eichenberger <eichest@...il.com>,
Geert Uytterhoeven <geert@...ux-m68k.org>
Cc: netdev@...r.kernel.org, linux-kernel@...r.kernel.org,
Dimitri Fedrau <dima.fedrau@...il.com>
Subject: [PATCH net-next v2 2/2] net: phy: marvell-88q2xxx: Prevent hwmon
access with asserted reset
If the PHYs reset is asserted it returns 0xffff for any read operation.
This might happen if the user admins down the interface and wants to read
the temperature. Prevent reading the temperature in this case and return
with an network is down error. Write operations are ignored by the device
when reset is asserted, still return a network is down error in this
case to make the user aware of the operation gone wrong.
Signed-off-by: Dimitri Fedrau <dima.fedrau@...il.com>
---
drivers/net/phy/marvell-88q2xxx.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/drivers/net/phy/marvell-88q2xxx.c b/drivers/net/phy/marvell-88q2xxx.c
index 342a909a12a2785ad579656eb369c69acaace9d1..ea9a2a923146bf432a33ff46b606c08debb69a4f 100644
--- a/drivers/net/phy/marvell-88q2xxx.c
+++ b/drivers/net/phy/marvell-88q2xxx.c
@@ -698,6 +698,12 @@ static int mv88q2xxx_hwmon_read(struct device *dev,
struct phy_device *phydev = dev_get_drvdata(dev);
int ret;
+ /* If the PHYs reset is asserted it returns 0xffff for any read
+ * operation. Return with an network is down error in this case.
+ */
+ if (phydev->mdio.reset_state == 1)
+ return -ENETDOWN;
+
switch (attr) {
case hwmon_temp_input:
ret = phy_read_mmd(phydev, MDIO_MMD_PCS,
@@ -737,6 +743,14 @@ static int mv88q2xxx_hwmon_write(struct device *dev,
{
struct phy_device *phydev = dev_get_drvdata(dev);
+ /* If the PHYs reset is asserted it ignores any write operation, return
+ * with an network is down error in this case. Without returning an
+ * error the user would not know that writing the temperature threshold
+ * has gone wrong.
+ */
+ if (phydev->mdio.reset_state == 1)
+ return -ENETDOWN;
+
switch (attr) {
case hwmon_temp_max:
clamp_val(val, -75000, 180000);
--
2.39.5
Powered by blists - more mailing lists