1
0
Fork 0

net: phy: start interrupts in phy_start

Interrupts don't have to be enabled before calling phy_start().
Therefore let's enable them in phy_start(). In a subsequent step
we'll remove enabling interrupts from phy_connect_direct().

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
hifive-unleashed-5.1
Heiner Kallweit 2019-01-23 07:31:23 +01:00 committed by David S. Miller
parent 2179626156
commit 9e573cfc35
1 changed files with 15 additions and 21 deletions

View File

@ -852,7 +852,7 @@ EXPORT_SYMBOL(phy_stop);
*/
void phy_start(struct phy_device *phydev)
{
int err = 0;
int err;
mutex_lock(&phydev->lock);
@ -862,28 +862,22 @@ void phy_start(struct phy_device *phydev)
goto out;
}
switch (phydev->state) {
case PHY_READY:
phydev->state = PHY_UP;
phy_start_machine(phydev);
break;
case PHY_HALTED:
/* if phy was suspended, bring the physical link up again */
__phy_resume(phydev);
/* if phy was suspended, bring the physical link up again */
__phy_resume(phydev);
/* make sure interrupts are re-enabled for the PHY */
if (phy_interrupt_is_valid(phydev)) {
err = phy_enable_interrupts(phydev);
if (err < 0)
break;
}
phydev->state = PHY_RESUMING;
phy_start_machine(phydev);
break;
default:
break;
/* make sure interrupts are enabled for the PHY */
if (phy_interrupt_is_valid(phydev)) {
err = phy_enable_interrupts(phydev);
if (err < 0)
goto out;
}
if (phydev->state == PHY_READY)
phydev->state = PHY_UP;
else
phydev->state = PHY_RESUMING;
phy_start_machine(phydev);
out:
mutex_unlock(&phydev->lock);
}