| From a825318a44eb772e7c06433412f5d20735b287f7 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 25 Jun 2020 17:42:09 +0200 |
| Subject: net: phy: mscc: restore the base page in vsc8514/8584_config_init |
| |
| From: Antoine Tenart <antoine.tenart@bootlin.com> |
| |
| [ Upstream commit 6119dda34e5d0821959e37641b287576826b6378 ] |
| |
| In the vsc8584_config_init and vsc8514_config_init, the base page is set |
| to 'GPIO', configuration is done, and the page is never explicitly |
| restored to the standard page. No bug was triggered as it turns out |
| helpers called in those config_init functions do modify the base page, |
| and set it back to standard. But that is dangerous and any modification |
| to those functions would introduce bugs. This patch fixes this, to |
| improve maintenance, by restoring the base page to 'standard' once |
| 'GPIO' accesses are completed. |
| |
| Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/phy/mscc/mscc_main.c | 9 +++++++++ |
| 1 file changed, 9 insertions(+) |
| |
| diff --git a/drivers/net/phy/mscc/mscc_main.c b/drivers/net/phy/mscc/mscc_main.c |
| index 485a4f8a6a9a6..95bd2d277ba42 100644 |
| --- a/drivers/net/phy/mscc/mscc_main.c |
| +++ b/drivers/net/phy/mscc/mscc_main.c |
| @@ -1413,6 +1413,11 @@ static int vsc8584_config_init(struct phy_device *phydev) |
| if (ret) |
| goto err; |
| |
| + ret = phy_base_write(phydev, MSCC_EXT_PAGE_ACCESS, |
| + MSCC_PHY_PAGE_STANDARD); |
| + if (ret) |
| + goto err; |
| + |
| if (!phy_interface_is_rgmii(phydev)) { |
| val = PROC_CMD_MCB_ACCESS_MAC_CONF | PROC_CMD_RST_CONF_PORT | |
| PROC_CMD_READ_MOD_WRITE_PORT; |
| @@ -1799,7 +1804,11 @@ static int vsc8514_config_init(struct phy_device *phydev) |
| val &= ~MAC_CFG_MASK; |
| val |= MAC_CFG_QSGMII; |
| ret = phy_base_write(phydev, MSCC_PHY_MAC_CFG_FASTLINK, val); |
| + if (ret) |
| + goto err; |
| |
| + ret = phy_base_write(phydev, MSCC_EXT_PAGE_ACCESS, |
| + MSCC_PHY_PAGE_STANDARD); |
| if (ret) |
| goto err; |
| |
| -- |
| 2.25.1 |
| |