netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Divya Koppera <Divya.Koppera@microchip.com>
To: <netdev@vger.kernel.org>, <andrew@lunn.ch>,
	<hkallweit1@gmail.com>, <linux@armlinux.org.uk>,
	<davem@davemloft.net>, <kuba@kernel.org>, <robh+dt@kernel.org>,
	<devicetree@vger.kernel.org>, <richardcochran@gmail.com>
Cc: <linux-kernel@vger.kernel.org>, <UNGLinuxDriver@microchip.com>,
	<madhuri.sripada@microchip.com>, <manohar.puri@microchip.com>
Subject: [PATCH net-next 1/3] net: phy: micrel: Fix concurrent register access
Date: Fri, 4 Mar 2022 15:04:16 +0530	[thread overview]
Message-ID: <20220304093418.31645-2-Divya.Koppera@microchip.com> (raw)
In-Reply-To: <20220304093418.31645-1-Divya.Koppera@microchip.com>

Make Extended page register accessing atomic,
to overcome unexpected output from register
reads/writes.

Fixes: 7c2dcfa295b1 ("net: phy: micrel: Add support for LAN8804 PHY")
Signed-off-by: Divya Koppera<Divya.Koppera@microchip.com>
---
 drivers/net/phy/micrel.c | 30 ++++++++++++++++--------------
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
index a7ebcdab415b..281cebc3d00c 100644
--- a/drivers/net/phy/micrel.c
+++ b/drivers/net/phy/micrel.c
@@ -1596,11 +1596,13 @@ static int lanphy_read_page_reg(struct phy_device *phydev, int page, u32 addr)
 {
 	u32 data;
 
-	phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL, page);
-	phy_write(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA, addr);
-	phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL,
-		  (page | LAN_EXT_PAGE_ACCESS_CTRL_EP_FUNC));
-	data = phy_read(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA);
+	phy_lock_mdio_bus(phydev);
+	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL, page);
+	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA, addr);
+	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL,
+		    (page | LAN_EXT_PAGE_ACCESS_CTRL_EP_FUNC));
+	data = __phy_read(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA);
+	phy_unlock_mdio_bus(phydev);
 
 	return data;
 }
@@ -1608,18 +1610,18 @@ static int lanphy_read_page_reg(struct phy_device *phydev, int page, u32 addr)
 static int lanphy_write_page_reg(struct phy_device *phydev, int page, u16 addr,
 				 u16 val)
 {
-	phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL, page);
-	phy_write(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA, addr);
-	phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL,
-		  (page | LAN_EXT_PAGE_ACCESS_CTRL_EP_FUNC));
+	phy_lock_mdio_bus(phydev);
+	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL, page);
+	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA, addr);
+	__phy_write(phydev, LAN_EXT_PAGE_ACCESS_CONTROL,
+		    page | LAN_EXT_PAGE_ACCESS_CTRL_EP_FUNC);
 
-	val = phy_write(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA, val);
-	if (val) {
+	val = __phy_write(phydev, LAN_EXT_PAGE_ACCESS_ADDRESS_DATA, val);
+	if (val != 0)
 		phydev_err(phydev, "Error: phy_write has returned error %d\n",
 			   val);
-		return val;
-	}
-	return 0;
+	phy_unlock_mdio_bus(phydev);
+	return val;
 }
 
 static int lan8814_config_init(struct phy_device *phydev)
-- 
2.17.1


  reply	other threads:[~2022-03-04  9:36 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-04  9:34 [PATCH net-next 0/3] Add support for 1588 in LAN8814 Divya Koppera
2022-03-04  9:34 ` Divya Koppera [this message]
2022-03-04  9:34 ` [PATCH net-next 2/3] dt-bindings: net: micrel: Configure latency values and timestamping check for LAN8814 phy Divya Koppera
2022-03-04 12:50   ` Andrew Lunn
2022-03-04 13:55     ` Richard Cochran
2022-03-07  5:02       ` Divya.Koppera
2022-03-07  4:40     ` Divya.Koppera
2022-03-07 13:08       ` Andrew Lunn
2022-03-08 10:05         ` Divya.Koppera
2022-03-08 13:54           ` Andrew Lunn
2022-03-08 14:54             ` Richard Cochran
2022-03-08 15:43             ` Horatiu Vultur
2022-03-08 18:10               ` Andrew Lunn
2022-03-08 22:14                 ` Horatiu Vultur
2022-03-08 23:36                   ` Andrew Lunn
2022-03-09  1:46                     ` Richard Cochran
2022-03-09  1:58                       ` Richard Cochran
2022-03-09 13:24                     ` Horatiu Vultur
2022-03-09 14:55                       ` Russell King (Oracle)
2022-03-09 19:52                         ` Richard Cochran
2022-03-11 14:28                           ` Horatiu Vultur
2022-03-11 15:08                             ` Richard Cochran
2022-03-12 19:36                               ` Allan W. Nielsen
2022-03-13  2:41                                 ` Richard Cochran
2022-03-13  4:04                                 ` Richard Cochran
2022-03-11 15:21                           ` Woojung.Huh
2022-03-12  2:48                             ` Richard Cochran
2022-03-12 20:04                               ` Andrew Lunn
2022-03-13  2:46                                 ` Richard Cochran
2022-03-13 15:07                                   ` Andrew Lunn
2022-03-13 19:37                                     ` Allan W. Nielsen
2022-03-13 20:03                                       ` Richard Cochran
2022-03-13 20:07                                     ` Richard Cochran
2022-03-11 14:07                         ` Horatiu Vultur
2022-03-07 21:33   ` Rob Herring
2022-03-04  9:34 ` [PATCH net-next 3/3] net: phy: micrel: 1588 support " Divya Koppera
2022-03-04 13:06   ` Andrew Lunn
2022-03-07  4:58     ` Divya.Koppera
2022-03-07 13:19       ` Andrew Lunn
2022-03-04 13:46   ` Kurt Kanzenbach
2022-03-04 13:57     ` Richard Cochran
2022-03-04 12:50 ` [PATCH net-next 0/3] Add support for 1588 in LAN8814 patchwork-bot+netdevbpf
2022-03-04 13:06   ` Andrew Lunn
2022-03-04 13:21     ` David Miller
2022-03-04 13:47       ` Andrew Lunn
2022-03-04 14:37         ` David Miller
2022-03-04 14:06       ` Richard Cochran
2022-03-04 14:17         ` Andrew Lunn
2022-03-04 15:42           ` Richard Cochran
2022-03-17 12:16   ` Michael Walle
2022-03-17 14:05     ` Allan W. Nielsen
2022-03-17 14:38       ` Andrew Lunn
2022-03-17 19:30         ` Allan W. Nielsen

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=20220304093418.31645-2-Divya.Koppera@microchip.com \
    --to=divya.koppera@microchip.com \
    --cc=UNGLinuxDriver@microchip.com \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=devicetree@vger.kernel.org \
    --cc=hkallweit1@gmail.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=madhuri.sripada@microchip.com \
    --cc=manohar.puri@microchip.com \
    --cc=netdev@vger.kernel.org \
    --cc=richardcochran@gmail.com \
    --cc=robh+dt@kernel.org \
    /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).