Commit 3e2186e0 authored by Florian Fainelli's avatar Florian Fainelli Committed by David S. Miller

net: phy: Add state machine state transitions debug prints

It can be useful to debug the PHY state machine, add dynamic debug
prints of the old and new PHY devices state under a friendly format.
Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 4133fc09
...@@ -58,6 +58,31 @@ static const char *phy_speed_to_str(int speed) ...@@ -58,6 +58,31 @@ static const char *phy_speed_to_str(int speed)
} }
} }
#define PHY_STATE_STR(_state) \
case PHY_##_state: \
return __stringify(_state); \
static const char *phy_state_to_str(enum phy_state st)
{
switch (st) {
PHY_STATE_STR(DOWN)
PHY_STATE_STR(STARTING)
PHY_STATE_STR(READY)
PHY_STATE_STR(PENDING)
PHY_STATE_STR(UP)
PHY_STATE_STR(AN)
PHY_STATE_STR(RUNNING)
PHY_STATE_STR(NOLINK)
PHY_STATE_STR(FORCING)
PHY_STATE_STR(CHANGELINK)
PHY_STATE_STR(HALTED)
PHY_STATE_STR(RESUMING)
}
return NULL;
}
/** /**
* phy_print_status - Convenience function to print out the current phy status * phy_print_status - Convenience function to print out the current phy status
* @phydev: the phy_device struct * @phydev: the phy_device struct
...@@ -770,10 +795,13 @@ void phy_state_machine(struct work_struct *work) ...@@ -770,10 +795,13 @@ void phy_state_machine(struct work_struct *work)
struct phy_device *phydev = struct phy_device *phydev =
container_of(dwork, struct phy_device, state_queue); container_of(dwork, struct phy_device, state_queue);
bool needs_aneg = false, do_suspend = false, do_resume = false; bool needs_aneg = false, do_suspend = false, do_resume = false;
enum phy_state old_state;
int err = 0; int err = 0;
mutex_lock(&phydev->lock); mutex_lock(&phydev->lock);
old_state = phydev->state;
if (phydev->drv->link_change_notify) if (phydev->drv->link_change_notify)
phydev->drv->link_change_notify(phydev); phydev->drv->link_change_notify(phydev);
...@@ -949,6 +977,9 @@ void phy_state_machine(struct work_struct *work) ...@@ -949,6 +977,9 @@ void phy_state_machine(struct work_struct *work)
if (err < 0) if (err < 0)
phy_error(phydev); phy_error(phydev);
dev_dbg(&phydev->dev, "PHY state change %s -> %s\n",
phy_state_to_str(old_state), phy_state_to_str(phydev->state));
queue_delayed_work(system_power_efficient_wq, &phydev->state_queue, queue_delayed_work(system_power_efficient_wq, &phydev->state_queue,
PHY_STATE_TIME * HZ); PHY_STATE_TIME * HZ);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment