701-mdio-bus-dont-use-managed-reset-controller.patch 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. From 32085f25d7b68404055f3525c780142fc72e543f Mon Sep 17 00:00:00 2001
  2. From: David Bauer <[email protected]>
  3. Date: Fri, 22 Nov 2019 22:44:51 +0100
  4. Subject: [PATCH] mdio_bus: don't use managed reset-controller
  5. Geert Uytterhoeven reported that using devm_reset_controller_get leads
  6. to a WARNING when probing a reset-controlled PHY. This is because the
  7. device devm_reset_controller_get gets supplied is not actually the
  8. one being probed.
  9. Acquire an unmanaged reset-control as well as free the reset_control on
  10. unregister to fix this.
  11. Reported-by: Geert Uytterhoeven <[email protected]>
  12. CC: Andrew Lunn <[email protected]>
  13. Signed-off-by: David Bauer <[email protected]>
  14. Reviewed-by: Andrew Lunn <[email protected]>
  15. Signed-off-by: David S. Miller <[email protected]>
  16. ---
  17. drivers/net/phy/mdio_bus.c | 6 ++++--
  18. 1 file changed, 4 insertions(+), 2 deletions(-)
  19. --- a/drivers/net/phy/mdio_bus.c
  20. +++ b/drivers/net/phy/mdio_bus.c
  21. @@ -74,8 +74,8 @@ static int mdiobus_register_reset(struct
  22. struct reset_control *reset = NULL;
  23. if (mdiodev->dev.of_node)
  24. - reset = devm_reset_control_get_exclusive(&mdiodev->dev,
  25. - "phy");
  26. + reset = of_reset_control_get_exclusive(mdiodev->dev.of_node,
  27. + "phy");
  28. if (PTR_ERR(reset) == -ENOENT ||
  29. PTR_ERR(reset) == -ENOTSUPP)
  30. reset = NULL;
  31. @@ -118,6 +118,8 @@ int mdiobus_unregister_device(struct mdi
  32. if (mdiodev->bus->mdio_map[mdiodev->addr] != mdiodev)
  33. return -EINVAL;
  34. + reset_control_put(mdiodev->reset_ctrl);
  35. +
  36. mdiodev->bus->mdio_map[mdiodev->addr] = NULL;
  37. return 0;