tg3: Split APE driver state change out of boot reset signature update
authorNithin Sujir <nsujir@broadcom.com>
Thu, 23 May 2013 11:11:22 +0000 (11:11 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 25 May 2013 05:23:29 +0000 (22:23 -0700)
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: Nithin Nayak Sujir <nsujir@broadcom.com>
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/tg3.c

index c15a92d012efb16327e700ac81ba237813a030ae..ae808b03affeaa63e9322d112e72bc4fd95b8b6f 100644 (file)
@@ -965,9 +965,6 @@ static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
 
                event = APE_EVENT_STATUS_STATE_UNLOAD;
                break;
-       case RESET_KIND_SUSPEND:
-               event = APE_EVENT_STATUS_STATE_SUSPEND;
-               break;
        default:
                return;
        }
@@ -1739,10 +1736,6 @@ static void tg3_write_sig_pre_reset(struct tg3 *tp, int kind)
                        break;
                }
        }
-
-       if (kind == RESET_KIND_INIT ||
-           kind == RESET_KIND_SUSPEND)
-               tg3_ape_driver_state_change(tp, kind);
 }
 
 /* tp->lock is held. */
@@ -1764,9 +1757,6 @@ static void tg3_write_sig_post_reset(struct tg3 *tp, int kind)
                        break;
                }
        }
-
-       if (kind == RESET_KIND_SHUTDOWN)
-               tg3_ape_driver_state_change(tp, kind);
 }
 
 /* tp->lock is held. */
@@ -4206,6 +4196,8 @@ static int tg3_power_down_prepare(struct tg3 *tp)
 
        tg3_write_sig_post_reset(tp, RESET_KIND_SHUTDOWN);
 
+       tg3_ape_driver_state_change(tp, RESET_KIND_SHUTDOWN);
+
        return 0;
 }
 
@@ -11244,6 +11236,9 @@ static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq,
 
        tg3_full_lock(tp, 0);
 
+       if (init)
+               tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
+
        err = tg3_init_hw(tp, reset_phy);
        if (err) {
                tg3_halt(tp, RESET_KIND_SHUTDOWN, 1);
@@ -13360,11 +13355,13 @@ static void tg3_self_test(struct net_device *dev, struct ethtool_test *etest,
        struct tg3 *tp = netdev_priv(dev);
        bool doextlpbk = etest->flags & ETH_TEST_FL_EXTERNAL_LB;
 
-       if ((tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) &&
-           tg3_power_up(tp)) {
-               etest->flags |= ETH_TEST_FL_FAILED;
-               memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
-               return;
+       if (tp->phy_flags & TG3_PHYFLG_IS_LOW_POWER) {
+               if (tg3_power_up(tp)) {
+                       etest->flags |= ETH_TEST_FL_FAILED;
+                       memset(data, 1, sizeof(u64) * TG3_NUM_TEST);
+                       return;
+               }
+               tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
        }
 
        memset(data, 0, sizeof(u64) * TG3_NUM_TEST);
@@ -17670,6 +17667,8 @@ static int tg3_resume(struct device *device)
 
        tg3_full_lock(tp, 0);
 
+       tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
+
        tg3_flag_set(tp, INIT_COMPLETE);
        err = tg3_restart_hw(tp,
                             !(tp->phy_flags & TG3_PHYFLG_KEEP_LINK_ON_PWRDN));
@@ -17804,6 +17803,7 @@ static void tg3_io_resume(struct pci_dev *pdev)
                goto done;
 
        tg3_full_lock(tp, 0);
+       tg3_ape_driver_state_change(tp, RESET_KIND_INIT);
        tg3_flag_set(tp, INIT_COMPLETE);
        err = tg3_restart_hw(tp, true);
        if (err) {