diff options
author | Matt Carlson <mcarlson@broadcom.com> | 2010-09-15 04:59:55 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-09-15 17:16:12 -0400 |
commit | dc6d074457f1551f9357f773a4eda09a3d5ef150 (patch) | |
tree | 568214d55023728b219dde4077be35ea1ed562ac /drivers/net/tg3.c | |
parent | f0392d24485e4c144d2741a5424f069b8b5f30e7 (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.c | 22 |
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 | ||