aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/tg3.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/tg3.c')
-rw-r--r--drivers/net/tg3.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index eaed2aa09e1f..7195bdec17f3 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -4,7 +4,7 @@
4 * Copyright (C) 2001, 2002, 2003, 2004 David S. Miller (davem@redhat.com) 4 * Copyright (C) 2001, 2002, 2003, 2004 David S. Miller (davem@redhat.com)
5 * Copyright (C) 2001, 2002, 2003 Jeff Garzik (jgarzik@pobox.com) 5 * Copyright (C) 2001, 2002, 2003 Jeff Garzik (jgarzik@pobox.com)
6 * Copyright (C) 2004 Sun Microsystems Inc. 6 * Copyright (C) 2004 Sun Microsystems Inc.
7 * Copyright (C) 2005-2009 Broadcom Corporation. 7 * Copyright (C) 2005-2010 Broadcom Corporation.
8 * 8 *
9 * Firmware is: 9 * Firmware is:
10 * Derived from proprietary unpublished source code, 10 * Derived from proprietary unpublished source code,
@@ -68,8 +68,8 @@
68 68
69#define DRV_MODULE_NAME "tg3" 69#define DRV_MODULE_NAME "tg3"
70#define PFX DRV_MODULE_NAME ": " 70#define PFX DRV_MODULE_NAME ": "
71#define DRV_MODULE_VERSION "3.105" 71#define DRV_MODULE_VERSION "3.106"
72#define DRV_MODULE_RELDATE "December 2, 2009" 72#define DRV_MODULE_RELDATE "January 12, 2010"
73 73
74#define TG3_DEF_MAC_MODE 0 74#define TG3_DEF_MAC_MODE 0
75#define TG3_DEF_RX_MODE 0 75#define TG3_DEF_RX_MODE 0
@@ -1043,7 +1043,11 @@ static void tg3_mdio_start(struct tg3 *tp)
1043 else 1043 else
1044 tp->phy_addr = 1; 1044 tp->phy_addr = 1;
1045 1045
1046 is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES; 1046 if (tp->pci_chip_rev_id != CHIPREV_ID_5717_A0)
1047 is_serdes = tr32(SG_DIG_STATUS) & SG_DIG_IS_SERDES;
1048 else
1049 is_serdes = tr32(TG3_CPMU_PHY_STRAP) &
1050 TG3_CPMU_PHY_STRAP_IS_SERDES;
1047 if (is_serdes) 1051 if (is_serdes)
1048 tp->phy_addr += 7; 1052 tp->phy_addr += 7;
1049 } else 1053 } else
@@ -4707,8 +4711,9 @@ next_pkt:
4707 (*post_ptr)++; 4711 (*post_ptr)++;
4708 4712
4709 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) { 4713 if (unlikely(rx_std_posted >= tp->rx_std_max_post)) {
4710 u32 idx = *post_ptr % TG3_RX_RING_SIZE; 4714 tpr->rx_std_prod_idx = std_prod_idx % TG3_RX_RING_SIZE;
4711 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG, idx); 4715 tw32_rx_mbox(TG3_RX_STD_PROD_IDX_REG,
4716 tpr->rx_std_prod_idx);
4712 work_mask &= ~RXD_OPAQUE_RING_STD; 4717 work_mask &= ~RXD_OPAQUE_RING_STD;
4713 rx_std_posted = 0; 4718 rx_std_posted = 0;
4714 } 4719 }
@@ -7773,7 +7778,7 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy)
7773 ((u64) tpr->rx_std_mapping >> 32)); 7778 ((u64) tpr->rx_std_mapping >> 32));
7774 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW, 7779 tw32(RCVDBDI_STD_BD + TG3_BDINFO_HOST_ADDR + TG3_64BIT_REG_LOW,
7775 ((u64) tpr->rx_std_mapping & 0xffffffff)); 7780 ((u64) tpr->rx_std_mapping & 0xffffffff));
7776 if (!(tp->tg3_flags3 & TG3_FLG3_5755_PLUS)) 7781 if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717)
7777 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR, 7782 tw32(RCVDBDI_STD_BD + TG3_BDINFO_NIC_ADDR,
7778 NIC_SRAM_RX_BUFFER_DESC); 7783 NIC_SRAM_RX_BUFFER_DESC);
7779 7784
@@ -12172,7 +12177,8 @@ static void __devinit tg3_get_eeprom_hw_cfg(struct tg3 *tp)
12172 12177
12173 tp->phy_id = eeprom_phy_id; 12178 tp->phy_id = eeprom_phy_id;
12174 if (eeprom_phy_serdes) { 12179 if (eeprom_phy_serdes) {
12175 if (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) 12180 if ((tp->tg3_flags2 & TG3_FLG2_5780_CLASS) ||
12181 GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717)
12176 tp->tg3_flags2 |= TG3_FLG2_MII_SERDES; 12182 tp->tg3_flags2 |= TG3_FLG2_MII_SERDES;
12177 else 12183 else
12178 tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES; 12184 tp->tg3_flags2 |= TG3_FLG2_PHY_SERDES;
@@ -13437,6 +13443,11 @@ static int __devinit tg3_get_invariants(struct tg3 *tp)
13437 if (err) 13443 if (err)
13438 return err; 13444 return err;
13439 13445
13446 if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 &&
13447 (tp->pci_chip_rev_id != CHIPREV_ID_5717_A0 ||
13448 (tp->tg3_flags2 & TG3_FLG2_MII_SERDES)))
13449 return -ENOTSUPP;
13450
13440 /* Initialize data/descriptor byte/word swapping. */ 13451 /* Initialize data/descriptor byte/word swapping. */
13441 val = tr32(GRC_MODE); 13452 val = tr32(GRC_MODE);
13442 val &= GRC_MODE_HOST_STACKUP; 13453 val &= GRC_MODE_HOST_STACKUP;