OSDN Git Service

net: phy: dp83867: Disable IRQs on suspend
authorAlexander Stein <alexander.stein@ew.tq-group.com>
Fri, 10 Mar 2023 07:45:00 +0000 (08:45 +0100)
committerJakub Kicinski <kuba@kernel.org>
Mon, 13 Mar 2023 22:56:13 +0000 (15:56 -0700)
Before putting the PHY into IEEE power down mode, disable IRQs to
prevent accessing the PHY once MDIO has already been shutdown.

Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/20230310074500.3472858-1-alexander.stein@ew.tq-group.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/dp83867.c

index 89cd821..5821f04 100644 (file)
@@ -693,6 +693,30 @@ static int dp83867_of_init(struct phy_device *phydev)
 }
 #endif /* CONFIG_OF_MDIO */
 
+static int dp83867_suspend(struct phy_device *phydev)
+{
+       /* Disable PHY Interrupts */
+       if (phy_interrupt_is_valid(phydev)) {
+               phydev->interrupts = PHY_INTERRUPT_DISABLED;
+               dp83867_config_intr(phydev);
+       }
+
+       return genphy_suspend(phydev);
+}
+
+static int dp83867_resume(struct phy_device *phydev)
+{
+       /* Enable PHY Interrupts */
+       if (phy_interrupt_is_valid(phydev)) {
+               phydev->interrupts = PHY_INTERRUPT_ENABLED;
+               dp83867_config_intr(phydev);
+       }
+
+       genphy_resume(phydev);
+
+       return 0;
+}
+
 static int dp83867_probe(struct phy_device *phydev)
 {
        struct dp83867_private *dp83867;
@@ -968,8 +992,8 @@ static struct phy_driver dp83867_driver[] = {
                .config_intr    = dp83867_config_intr,
                .handle_interrupt = dp83867_handle_interrupt,
 
-               .suspend        = genphy_suspend,
-               .resume         = genphy_resume,
+               .suspend        = dp83867_suspend,
+               .resume         = dp83867_resume,
 
                .link_change_notify = dp83867_link_change_notify,
                .set_loopback   = dp83867_loopback,