Commit 2e460fc0 authored by Nithin Sujir's avatar Nithin Sujir Committed by David S. Miller

tg3: Split APE driver state change out of boot reset signature update

Unlike the boot signature that needs to be set before every reset, the
ape state only needs to be updated to tell the firmware that the driver
is now taking/releasing control of the hardware. Move the calls to
tg3_ape_driver_state_change() to better, more appropriate places.

Also, the firmware does not distinguish between SUSPEND and START states
anymore. Remove the SUSPEND case in the switch.
Signed-off-by: default avatarNithin Nayak Sujir <nsujir@broadcom.com>
Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e6ff4c75
...@@ -965,9 +965,6 @@ static void tg3_ape_driver_state_change(struct tg3 *tp, int kind) ...@@ -965,9 +965,6 @@ static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
event = APE_EVENT_STATUS_STATE_UNLOAD; event = APE_EVENT_STATUS_STATE_UNLOAD;
break; break;
case RESET_KIND_SUSPEND:
event = APE_EVENT_STATUS_STATE_SUSPEND;
break;
default: default:
return; return;
} }
...@@ -1739,10 +1736,6 @@ static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind) ...@@ -1739,10 +1736,6 @@ static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
break; break;
} }
} }
if (kind == RESET_KIND_INIT ||
kind == RESET_KIND_SUSPEND)
tg3_ape_driver_state_change(tp, kind);
} }
/* tp->lock is held. */ /* tp->lock is held. */
...@@ -1764,9 +1757,6 @@ static void tg3_write_sig_post_reset(struct tg3 *tp, int kind) ...@@ -1764,9 +1757,6 @@ static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
break; break;
} }
} }
if (kind == RESET_KIND_SHUTDOWN)
tg3_ape_driver_state_change(tp, kind);
} }
/* tp->lock is held. */ /* tp->lock is held. */
...@@ -4206,6 +4196,8 @@ static int tg3_power_down_prepare(struct tg3 *tp) ...@@ -4206,6 +4196,8 @@ static int tg3_power_down_prepare(struct tg3 *tp)
tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN); tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
tg3_ape_driver_state_change(tp, RESET_KIND_SHUTDOWN);
return 0; return 0;
} }
...@@ -11244,6 +11236,9 @@ static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq, ...@@ -11244,6 +11236,9 @@ static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq,
tg3_full_lock(tp, 0); tg3_full_lock(tp, 0);
if (init)
tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
err = tg3_init_hw(tp, reset_phy); err = tg3_init_hw(tp, reset_phy);
if (err) { if (err) {
tg3_halt(tp, RESET_KIND_SHUTDOWN, 1); tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
...@@ -13360,11 +13355,13 @@ static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest, ...@@ -13360,11 +13355,13 @@ static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
struct tg3 *tp = netdev_priv(dev); struct tg3 *tp = netdev_priv(dev);
bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB; bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) && if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
tg3_power_up(tp)) { if (tg3_power_up(tp)) {
etest->flags |= ETH_TEST_FL_FAILED; etest->flags |= ETH_TEST_FL_FAILED;
memset(data, 1, sizeof(u64) * TG3_NUM_TEST); memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
return; return;
}
tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
} }
memset(data, 0, sizeof(u64) * TG3_NUM_TEST); memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
...@@ -17670,6 +17667,8 @@ static int tg3_resume(struct device *device) ...@@ -17670,6 +17667,8 @@ static int tg3_resume(struct device *device)
tg3_full_lock(tp, 0); tg3_full_lock(tp, 0);
tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
tg3_flag_set(tp, INIT_COMPLETE); tg3_flag_set(tp, INIT_COMPLETE);
err = tg3_restart_hw(tp, err = tg3_restart_hw(tp,
!(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN)); !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN));
...@@ -17804,6 +17803,7 @@ static void tg3_io_resume(struct pci_dev *pdev) ...@@ -17804,6 +17803,7 @@ static void tg3_io_resume(struct pci_dev *pdev)
goto done; goto done;
tg3_full_lock(tp, 0); tg3_full_lock(tp, 0);
tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
tg3_flag_set(tp, INIT_COMPLETE); tg3_flag_set(tp, INIT_COMPLETE);
err = tg3_restart_hw(tp, true); err = tg3_restart_hw(tp, true);
if (err) { if (err) {
......
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