aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/tg3.c
diff options
context:
space:
mode:
authorMatt Carlson <mcarlson@broadcom.com>2010-09-15 04:59:55 -0400
committerDavid S. Miller <davem@davemloft.net>2010-09-15 17:16:12 -0400
commitdc6d074457f1551f9357f773a4eda09a3d5ef150 (patch)
tree568214d55023728b219dde4077be35ea1ed562ac /drivers/net/tg3.c
parentf0392d24485e4c144d2741a5424f069b8b5f30e7 (diff)
tg3: Don't send APE events for NCSI firmware
NCSI firmware does not accept APE events. It relies on a "driver state" location in shared memory to tell it what the driver's current state is. This patch pivots the code to use the new driver state scheme. Reviewed-by: Benjamin Li <benli@broadcom.com> Reviewed-by: Michael Chan <mchan@broadcom.com> Signed-off-by: Matt Carlson <mcarlson@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/tg3.c')
-rw-r--r--drivers/net/tg3.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index 38f1b19b776b..fc9706c8e3c6 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -6596,6 +6596,10 @@ static void tg3_ape_send_event(struct tg3 *tp, u32 event)
6596 int i; 6596 int i;
6597 u32 apedata; 6597 u32 apedata;
6598 6598
6599 /* NCSI does not support APE events */
6600 if (tp->tg3_flags3 & TG3_FLG3_APE_HAS_NCSI)
6601 return;
6602
6599 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG); 6603 apedata = tg3_ape_read32(tp, TG3_APE_SEG_SIG);
6600 if (apedata != APE_SEG_SIG_MAGIC) 6604 if (apedata != APE_SEG_SIG_MAGIC)
6601 return; 6605 return;
@@ -6647,6 +6651,8 @@ static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
6647 APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM)); 6651 APE_HOST_DRIVER_ID_MAGIC(TG3_MAJ_NUM, TG3_MIN_NUM));
6648 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR, 6652 tg3_ape_write32(tp, TG3_APE_HOST_BEHAVIOR,
6649 APE_HOST_BEHAV_NO_PHYLOCK); 6653 APE_HOST_BEHAV_NO_PHYLOCK);
6654 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE,
6655 TG3_APE_HOST_DRVR_STATE_START);
6650 6656
6651 event = APE_EVENT_STATUS_STATE_START; 6657 event = APE_EVENT_STATUS_STATE_START;
6652 break; 6658 break;
@@ -6658,6 +6664,16 @@ static void tg3_ape_driver_state_change(struct tg3 *tp, int kind)
6658 */ 6664 */
6659 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 0x0); 6665 tg3_ape_write32(tp, TG3_APE_HOST_SEG_SIG, 0x0);
6660 6666
6667 if (device_may_wakeup(&tp->pdev->dev) &&
6668 (tp->tg3_flags & TG3_FLAG_WOL_ENABLE)) {
6669 tg3_ape_write32(tp, TG3_APE_HOST_WOL_SPEED,
6670 TG3_APE_HOST_WOL_SPEED_AUTO);
6671 apedata = TG3_APE_HOST_DRVR_STATE_WOL;
6672 } else
6673 apedata = TG3_APE_HOST_DRVR_STATE_UNLOAD;
6674
6675 tg3_ape_write32(tp, TG3_APE_HOST_DRVR_STATE, apedata);
6676
6661 event = APE_EVENT_STATUS_STATE_UNLOAD; 6677 event = APE_EVENT_STATUS_STATE_UNLOAD;
6662 break; 6678 break;
6663 case RESET_KIND_SUSPEND: 6679 case RESET_KIND_SUSPEND:
@@ -12739,10 +12755,12 @@ static void __devinit tg3_read_dash_ver(struct tg3 *tp)
12739 12755
12740 apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION); 12756 apedata = tg3_ape_read32(tp, TG3_APE_FW_VERSION);
12741 12757
12742 if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI) 12758 if (tg3_ape_read32(tp, TG3_APE_FW_FEATURES) & TG3_APE_FW_FEATURE_NCSI) {
12759 tp->tg3_flags3 |= TG3_FLG3_APE_HAS_NCSI;
12743 fwtype = "NCSI"; 12760 fwtype = "NCSI";
12744 else 12761 } else {
12745 fwtype = "DASH"; 12762 fwtype = "DASH";
12763 }
12746 12764
12747 vlen = strlen(tp->fw_ver); 12765 vlen = strlen(tp->fw_ver);
12748 12766