726-net-phy-realtek-make-sure-paged-read-is-protected-by.patch 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. From 4dd2cc9b91ecb25f278a2c55e07e6455e9000e6b Mon Sep 17 00:00:00 2001
  2. From: Daniel Golle <[email protected]>
  3. Date: Sat, 22 Apr 2023 01:21:14 +0100
  4. Subject: [PATCH] net: phy: realtek: make sure paged read is protected by mutex
  5. As we cannot rely on phy_read_paged function before the PHY is
  6. identified, the paged read in rtlgen_supports_2_5gbps needs to be open
  7. coded as it is being called by the match_phy_device function, ie. before
  8. .read_page and .write_page have been populated.
  9. Make sure it is also protected by the MDIO bus mutex and use
  10. rtl821x_write_page instead of 3 individually locked MDIO bus operations.
  11. Signed-off-by: Daniel Golle <[email protected]>
  12. ---
  13. drivers/net/phy/realtek.c | 8 +++++---
  14. 1 file changed, 5 insertions(+), 3 deletions(-)
  15. --- a/drivers/net/phy/realtek.c
  16. +++ b/drivers/net/phy/realtek.c
  17. @@ -765,9 +765,11 @@ static bool rtlgen_supports_2_5gbps(stru
  18. {
  19. int val;
  20. - phy_write(phydev, RTL821x_PAGE_SELECT, 0xa61);
  21. - val = phy_read(phydev, 0x13);
  22. - phy_write(phydev, RTL821x_PAGE_SELECT, 0);
  23. + mutex_lock(&phydev->mdio.bus->mdio_lock);
  24. + rtl821x_write_page(phydev, 0xa61);
  25. + val = __phy_read(phydev, 0x13);
  26. + rtl821x_write_page(phydev, 0);
  27. + mutex_unlock(&phydev->mdio.bus->mdio_lock);
  28. return val >= 0 && val & RTL_SUPPORTS_2500FULL;
  29. }