diff options
author | Matt Carlson <mcarlson@broadcom.com> | 2009-09-01 09:19:53 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-09-02 03:44:01 -0400 |
commit | f6eb9b1fc1411d22c073f5264e5630a541d0f7df (patch) | |
tree | 8966482a7874e3087301fc3b9c0a5a2e9870eed8 /drivers/net/tg3.c | |
parent | 8d9d7cfc0ec2fe37ff9afd74326d03f38f96ad1b (diff) |
tg3: Add 5717 asic rev
This patch adds the 5717 asic rev.
Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
Reviewed-by: Benjamin Li <benli@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 | 130 |
1 files changed, 101 insertions, 29 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index f71ea462ca41..f8bb5b737eb8 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -111,7 +111,8 @@ | |||
111 | * replace things like '% foo' with '& (foo - 1)'. | 111 | * replace things like '% foo' with '& (foo - 1)'. |
112 | */ | 112 | */ |
113 | #define TG3_RX_RCB_RING_SIZE(tp) \ | 113 | #define TG3_RX_RCB_RING_SIZE(tp) \ |
114 | ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) ? 512 : 1024) | 114 | (((tp->tg3_flags & TG3_FLAG_JUMBO_CAPABLE) && \ |
115 | !(tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) ? 512 : 1024) | ||
115 | 116 | ||
116 | #define TG3_TX_RING_SIZE 512 | 117 | #define TG3_TX_RING_SIZE 512 |
117 | #define TG3_DEF_TX_RING_PENDING (TG3_TX_RING_SIZE - 1) | 118 | #define TG3_DEF_TX_RING_PENDING (TG3_TX_RING_SIZE - 1) |
@@ -733,13 +734,15 @@ static inline void tg3_netif_start(struct tg3 *tp) | |||
733 | 734 | ||
734 | static void tg3_switch_clocks(struct tg3 *tp) | 735 | static void tg3_switch_clocks(struct tg3 *tp) |
735 | { | 736 | { |
736 | u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); | 737 | u32 clock_ctrl; |
737 | u32 orig_clock_ctrl; | 738 | u32 orig_clock_ctrl; |
738 | 739 | ||
739 | if ((tp->tg3_flags & TG3_FLAG_CPMU_PRESENT) || | 740 | if ((tp->tg3_flags & TG3_FLAG_CPMU_PRESENT) || |
740 | (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) | 741 | (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) |
741 | return; | 742 | return; |
742 | 743 | ||
744 | clock_ctrl = tr32(TG3PCI_CLOCK_CTRL); | ||
745 | |||
743 | orig_clock_ctrl = clock_ctrl; | 746 | orig_clock_ctrl = clock_ctrl; |
744 | clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN | | 747 | clock_ctrl &= (CLOCK_CTRL_FORCE_CLKRUN | |
745 | CLOCK_CTRL_CLKRUN_OENABLE | | 748 | CLOCK_CTRL_CLKRUN_OENABLE | |
@@ -1993,8 +1996,9 @@ static void tg3_frob_aux_power(struct tg3 *tp) | |||
1993 | if ((tp->tg3_flags2 & TG3_FLG2_IS_NIC) == 0) | 1996 | if ((tp->tg3_flags2 & TG3_FLG2_IS_NIC) == 0) |
1994 | return; | 1997 | return; |
1995 | 1998 | ||
1996 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) || | 1999 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || |
1997 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)) { | 2000 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714 || |
2001 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) { | ||
1998 | struct net_device *dev_peer; | 2002 | struct net_device *dev_peer; |
1999 | 2003 | ||
2000 | dev_peer = pci_get_drvdata(tp->pdev_peer); | 2004 | dev_peer = pci_get_drvdata(tp->pdev_peer); |
@@ -5211,6 +5215,7 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, | |||
5211 | mss = 0; | 5215 | mss = 0; |
5212 | if ((mss = skb_shinfo(skb)->gso_size) != 0) { | 5216 | if ((mss = skb_shinfo(skb)->gso_size) != 0) { |
5213 | int tcp_opt_len, ip_tcp_len; | 5217 | int tcp_opt_len, ip_tcp_len; |
5218 | u32 hdrlen; | ||
5214 | 5219 | ||
5215 | if (skb_header_cloned(skb) && | 5220 | if (skb_header_cloned(skb) && |
5216 | pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) { | 5221 | pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) { |
@@ -5219,7 +5224,7 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, | |||
5219 | } | 5224 | } |
5220 | 5225 | ||
5221 | if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6) | 5226 | if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6) |
5222 | mss |= (skb_headlen(skb) - ETH_HLEN) << 9; | 5227 | hdrlen = skb_headlen(skb) - ETH_HLEN; |
5223 | else { | 5228 | else { |
5224 | struct iphdr *iph = ip_hdr(skb); | 5229 | struct iphdr *iph = ip_hdr(skb); |
5225 | 5230 | ||
@@ -5228,9 +5233,17 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, | |||
5228 | 5233 | ||
5229 | iph->check = 0; | 5234 | iph->check = 0; |
5230 | iph->tot_len = htons(mss + ip_tcp_len + tcp_opt_len); | 5235 | iph->tot_len = htons(mss + ip_tcp_len + tcp_opt_len); |
5231 | mss |= (ip_tcp_len + tcp_opt_len) << 9; | 5236 | hdrlen = ip_tcp_len + tcp_opt_len; |
5232 | } | 5237 | } |
5233 | 5238 | ||
5239 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) { | ||
5240 | mss |= (hdrlen & 0xc) << 12; | ||
5241 | if (hdrlen & 0x10) | ||
5242 | base_flags |= 0x00000010; | ||
5243 | base_flags |= (hdrlen & 0x3e0) << 5; | ||
5244 | } else | ||
5245 | mss |= hdrlen << 9; | ||
5246 | |||
5234 | base_flags |= (TXD_FLAG_CPU_PRE_DMA | | 5247 | base_flags |= (TXD_FLAG_CPU_PRE_DMA | |
5235 | TXD_FLAG_CPU_POST_DMA); | 5248 | TXD_FLAG_CPU_POST_DMA); |
5236 | 5249 | ||
@@ -5258,6 +5271,10 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, | |||
5258 | 5271 | ||
5259 | len = skb_headlen(skb); | 5272 | len = skb_headlen(skb); |
5260 | 5273 | ||
5274 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 && | ||
5275 | !mss && skb->len > ETH_DATA_LEN) | ||
5276 | base_flags |= TXD_FLAG_JMB_PKT; | ||
5277 | |||
5261 | tg3_set_txd(tnapi, entry, mapping, len, base_flags, | 5278 | tg3_set_txd(tnapi, entry, mapping, len, base_flags, |
5262 | (skb_shinfo(skb)->nr_frags == 0) | (mss << 1)); | 5279 | (skb_shinfo(skb)->nr_frags == 0) | (mss << 1)); |
5263 | 5280 | ||
@@ -6564,7 +6581,9 @@ static int tg3_chip_reset(struct tg3 *tp) | |||
6564 | tg3_mdio_start(tp); | 6581 | tg3_mdio_start(tp); |
6565 | 6582 | ||
6566 | if ((tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) && | 6583 | if ((tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) && |
6567 | tp->pci_chip_rev_id != CHIPREV_ID_5750_A0) { | 6584 | tp->pci_chip_rev_id != CHIPREV_ID_5750_A0 && |
6585 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && | ||
6586 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717) { | ||
6568 | val = tr32(0x7c00); | 6587 | val = tr32(0x7c00); |
6569 | 6588 | ||
6570 | tw32(0x7c00, val | (1 << 25)); | 6589 | tw32(0x7c00, val | (1 << 25)); |
@@ -6993,7 +7012,9 @@ static void tg3_rings_reset(struct tg3 *tp) | |||
6993 | 7012 | ||
6994 | 7013 | ||
6995 | /* Disable all receive return rings but the first. */ | 7014 | /* Disable all receive return rings but the first. */ |
6996 | if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) | 7015 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) |
7016 | limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 17; | ||
7017 | else if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS)) | ||
6997 | limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16; | 7018 | limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 16; |
6998 | else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) | 7019 | else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755) |
6999 | limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4; | 7020 | limit = NIC_SRAM_RCV_RET_RCB + TG3_BDINFO_SIZE * 4; |
@@ -7197,7 +7218,8 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
7197 | return err; | 7218 | return err; |
7198 | 7219 | ||
7199 | if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 && | 7220 | if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5784 && |
7200 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761) { | 7221 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5761 && |
7222 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717) { | ||
7201 | /* This value is determined during the probe time DMA | 7223 | /* This value is determined during the probe time DMA |
7202 | * engine test, tg3_test_dma. | 7224 | * engine test, tg3_test_dma. |
7203 | */ | 7225 | */ |
@@ -7351,7 +7373,11 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
7351 | BDINFO_FLAGS_DISABLED); | 7373 | BDINFO_FLAGS_DISABLED); |
7352 | } | 7374 | } |
7353 | 7375 | ||
7354 | val = RX_STD_MAX_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT; | 7376 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) |
7377 | val = (RX_STD_MAX_SIZE_5705 << BDINFO_FLAGS_MAXLEN_SHIFT) | | ||
7378 | (RX_STD_MAX_SIZE << 2); | ||
7379 | else | ||
7380 | val = RX_STD_MAX_SIZE << BDINFO_FLAGS_MAXLEN_SHIFT; | ||
7355 | } else | 7381 | } else |
7356 | val = RX_STD_MAX_SIZE_5705 << BDINFO_FLAGS_MAXLEN_SHIFT; | 7382 | val = RX_STD_MAX_SIZE_5705 << BDINFO_FLAGS_MAXLEN_SHIFT; |
7357 | 7383 | ||
@@ -7366,6 +7392,11 @@ static int tg3_reset_hw(struct tg3 *tp, int reset_phy) | |||
7366 | tw32_rx_mbox(MAILBOX_RCV_JUMBO_PROD_IDX + TG3_64BIT_REG_LOW, | 7392 | tw32_rx_mbox(MAILBOX_RCV_JUMBO_PROD_IDX + TG3_64BIT_REG_LOW, |
7367 | tpr->rx_jmb_ptr); | 7393 | tpr->rx_jmb_ptr); |
7368 | 7394 | ||
7395 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) { | ||
7396 | tw32(STD_REPLENISH_LWM, 32); | ||
7397 | tw32(JMB_REPLENISH_LWM, 16); | ||
7398 | } | ||
7399 | |||
7369 | tg3_rings_reset(tp); | 7400 | tg3_rings_reset(tp); |
7370 | 7401 | ||
7371 | /* Initialize MAC address and backoff seed. */ | 7402 | /* Initialize MAC address and backoff seed. */ |
@@ -8021,6 +8052,7 @@ static int tg3_test_interrupt(struct tg3 *tp) | |||
8021 | struct tg3_napi *tnapi = &tp->napi[0]; | 8052 | struct tg3_napi *tnapi = &tp->napi[0]; |
8022 | struct net_device *dev = tp->dev; | 8053 | struct net_device *dev = tp->dev; |
8023 | int err, i, intr_ok = 0; | 8054 | int err, i, intr_ok = 0; |
8055 | u32 val; | ||
8024 | 8056 | ||
8025 | if (!netif_running(dev)) | 8057 | if (!netif_running(dev)) |
8026 | return -ENODEV; | 8058 | return -ENODEV; |
@@ -8029,6 +8061,16 @@ static int tg3_test_interrupt(struct tg3 *tp) | |||
8029 | 8061 | ||
8030 | free_irq(tnapi->irq_vec, tnapi); | 8062 | free_irq(tnapi->irq_vec, tnapi); |
8031 | 8063 | ||
8064 | /* | ||
8065 | * Turn off MSI one shot mode. Otherwise this test has no | ||
8066 | * observable way to know whether the interrupt was delivered. | ||
8067 | */ | ||
8068 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 && | ||
8069 | (tp->tg3_flags2 & TG3_FLG2_USING_MSI)) { | ||
8070 | val = tr32(MSGINT_MODE) | MSGINT_MODE_ONE_SHOT_DISABLE; | ||
8071 | tw32(MSGINT_MODE, val); | ||
8072 | } | ||
8073 | |||
8032 | err = request_irq(tnapi->irq_vec, tg3_test_isr, | 8074 | err = request_irq(tnapi->irq_vec, tg3_test_isr, |
8033 | IRQF_SHARED | IRQF_SAMPLE_RANDOM, dev->name, tnapi); | 8075 | IRQF_SHARED | IRQF_SAMPLE_RANDOM, dev->name, tnapi); |
8034 | if (err) | 8076 | if (err) |
@@ -8064,8 +8106,15 @@ static int tg3_test_interrupt(struct tg3 *tp) | |||
8064 | if (err) | 8106 | if (err) |
8065 | return err; | 8107 | return err; |
8066 | 8108 | ||
8067 | if (intr_ok) | 8109 | if (intr_ok) { |
8110 | /* Reenable MSI one shot mode. */ | ||
8111 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717 && | ||
8112 | (tp->tg3_flags2 & TG3_FLG2_USING_MSI)) { | ||
8113 | val = tr32(MSGINT_MODE) & ~MSGINT_MODE_ONE_SHOT_DISABLE; | ||
8114 | tw32(MSGINT_MODE, val); | ||
8115 | } | ||
8068 | return 0; | 8116 | return 0; |
8117 | } | ||
8069 | 8118 | ||
8070 | return -EIO; | 8119 | return -EIO; |
8071 | } | 8120 | } |
@@ -8350,13 +8399,13 @@ static int tg3_open(struct net_device *dev) | |||
8350 | goto err_out2; | 8399 | goto err_out2; |
8351 | } | 8400 | } |
8352 | 8401 | ||
8353 | if (tp->tg3_flags2 & TG3_FLG2_USING_MSI) { | 8402 | if (GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717 && |
8354 | if (tp->tg3_flags2 & TG3_FLG2_1SHOT_MSI) { | 8403 | (tp->tg3_flags2 & TG3_FLG2_USING_MSI) && |
8355 | u32 val = tr32(PCIE_TRANSACTION_CFG); | 8404 | (tp->tg3_flags2 & TG3_FLG2_1SHOT_MSI)) { |
8405 | u32 val = tr32(PCIE_TRANSACTION_CFG); | ||
8356 | 8406 | ||
8357 | tw32(PCIE_TRANSACTION_CFG, | 8407 | tw32(PCIE_TRANSACTION_CFG, |
8358 | val | PCIE_TRANS_CFG_1SHOT_MSI); | 8408 | val | PCIE_TRANS_CFG_1SHOT_MSI); |
8359 | } | ||
8360 | } | 8409 | } |
8361 | } | 8410 | } |
8362 | 8411 | ||
@@ -9392,7 +9441,8 @@ static int tg3_set_tso(struct net_device *dev, u32 value) | |||
9392 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && | 9441 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && |
9393 | GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) || | 9442 | GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) || |
9394 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || | 9443 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || |
9395 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) | 9444 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || |
9445 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) | ||
9396 | dev->features |= NETIF_F_TSO_ECN; | 9446 | dev->features |= NETIF_F_TSO_ECN; |
9397 | } else | 9447 | } else |
9398 | dev->features &= ~(NETIF_F_TSO6 | NETIF_F_TSO_ECN); | 9448 | dev->features &= ~(NETIF_F_TSO6 | NETIF_F_TSO_ECN); |
@@ -12291,8 +12341,17 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
12291 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_USE_PROD_ID_REG) { | 12341 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_USE_PROD_ID_REG) { |
12292 | u32 prod_id_asic_rev; | 12342 | u32 prod_id_asic_rev; |
12293 | 12343 | ||
12294 | pci_read_config_dword(tp->pdev, TG3PCI_PRODID_ASICREV, | 12344 | if (tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717C || |
12295 | &prod_id_asic_rev); | 12345 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5717S || |
12346 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718C || | ||
12347 | tp->pdev->device == TG3PCI_DEVICE_TIGON3_5718S) | ||
12348 | pci_read_config_dword(tp->pdev, | ||
12349 | TG3PCI_GEN2_PRODID_ASICREV, | ||
12350 | &prod_id_asic_rev); | ||
12351 | else | ||
12352 | pci_read_config_dword(tp->pdev, TG3PCI_PRODID_ASICREV, | ||
12353 | &prod_id_asic_rev); | ||
12354 | |||
12296 | tp->pci_chip_rev_id = prod_id_asic_rev; | 12355 | tp->pci_chip_rev_id = prod_id_asic_rev; |
12297 | } | 12356 | } |
12298 | 12357 | ||
@@ -12430,8 +12489,9 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
12430 | pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, | 12489 | pci_write_config_dword(tp->pdev, TG3PCI_MISC_HOST_CTRL, |
12431 | tp->misc_host_ctrl); | 12490 | tp->misc_host_ctrl); |
12432 | 12491 | ||
12433 | if ((GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704) || | 12492 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5704 || |
12434 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714)) | 12493 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5714 || |
12494 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) | ||
12435 | tp->pdev_peer = tg3_find_peer(tp); | 12495 | tp->pdev_peer = tg3_find_peer(tp); |
12436 | 12496 | ||
12437 | /* Intentionally exclude ASIC_REV_5906 */ | 12497 | /* Intentionally exclude ASIC_REV_5906 */ |
@@ -12440,7 +12500,8 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
12440 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || | 12500 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || |
12441 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || | 12501 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || |
12442 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || | 12502 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || |
12443 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) | 12503 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || |
12504 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) | ||
12444 | tp->tg3_flags3 |= TG3_FLG3_5755_PLUS; | 12505 | tp->tg3_flags3 |= TG3_FLG3_5755_PLUS; |
12445 | 12506 | ||
12446 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || | 12507 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750 || |
@@ -12490,8 +12551,16 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
12490 | 12551 | ||
12491 | tp->irq_max = 1; | 12552 | tp->irq_max = 1; |
12492 | 12553 | ||
12554 | #ifdef TG3_NAPI | ||
12555 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) { | ||
12556 | tp->tg3_flags |= TG3_FLAG_SUPPORT_MSIX; | ||
12557 | tp->irq_max = TG3_IRQ_MAX_VECS; | ||
12558 | } | ||
12559 | #endif | ||
12560 | |||
12493 | if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS) || | 12561 | if (!(tp->tg3_flags2 & TG3_FLG2_5705_PLUS) || |
12494 | (tp->tg3_flags2 & TG3_FLG2_5780_CLASS)) | 12562 | (tp->tg3_flags2 & TG3_FLG2_5780_CLASS) || |
12563 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) | ||
12495 | tp->tg3_flags |= TG3_FLAG_JUMBO_CAPABLE; | 12564 | tp->tg3_flags |= TG3_FLAG_JUMBO_CAPABLE; |
12496 | 12565 | ||
12497 | pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, | 12566 | pci_read_config_dword(tp->pdev, TG3PCI_PCISTATE, |
@@ -12625,7 +12694,6 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
12625 | tp->write32 = tg3_write_flush_reg32; | 12694 | tp->write32 = tg3_write_flush_reg32; |
12626 | } | 12695 | } |
12627 | 12696 | ||
12628 | |||
12629 | if ((tp->tg3_flags & TG3_FLAG_TXD_MBOX_HWBUG) || | 12697 | if ((tp->tg3_flags & TG3_FLAG_TXD_MBOX_HWBUG) || |
12630 | (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER)) { | 12698 | (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER)) { |
12631 | tp->write32_tx_mbox = tg3_write32_tx_mbox; | 12699 | tp->write32_tx_mbox = tg3_write32_tx_mbox; |
@@ -12684,7 +12752,8 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
12684 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || | 12752 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || |
12685 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || | 12753 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5761 || |
12686 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || | 12754 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || |
12687 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) | 12755 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || |
12756 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) | ||
12688 | tp->tg3_flags |= TG3_FLAG_CPMU_PRESENT; | 12757 | tp->tg3_flags |= TG3_FLAG_CPMU_PRESENT; |
12689 | 12758 | ||
12690 | /* Set up tp->grc_local_ctrl before calling tg3_set_power_state(). | 12759 | /* Set up tp->grc_local_ctrl before calling tg3_set_power_state(). |
@@ -12762,7 +12831,8 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) | |||
12762 | if ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) && | 12831 | if ((tp->tg3_flags2 & TG3_FLG2_5705_PLUS) && |
12763 | !(tp->tg3_flags3 & TG3_FLG3_PHY_IS_FET) && | 12832 | !(tp->tg3_flags3 & TG3_FLG3_PHY_IS_FET) && |
12764 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && | 12833 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5785 && |
12765 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_57780) { | 12834 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_57780 && |
12835 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717) { | ||
12766 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || | 12836 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5755 || |
12767 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 || | 12837 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5787 || |
12768 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || | 12838 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 || |
@@ -13486,7 +13556,8 @@ static void __devinit tg3_init_link_config(struct tg3 *tp) | |||
13486 | 13556 | ||
13487 | static void __devinit tg3_init_bufmgr_config(struct tg3 *tp) | 13557 | static void __devinit tg3_init_bufmgr_config(struct tg3 *tp) |
13488 | { | 13558 | { |
13489 | if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS) { | 13559 | if (tp->tg3_flags2 & TG3_FLG2_5705_PLUS && |
13560 | GET_ASIC_REV(tp->pci_chip_rev_id) != ASIC_REV_5717) { | ||
13490 | tp->bufmgr_config.mbuf_read_dma_low_water = | 13561 | tp->bufmgr_config.mbuf_read_dma_low_water = |
13491 | DEFAULT_MB_RDMA_LOW_WATER_5705; | 13562 | DEFAULT_MB_RDMA_LOW_WATER_5705; |
13492 | tp->bufmgr_config.mbuf_mac_rx_low_water = | 13563 | tp->bufmgr_config.mbuf_mac_rx_low_water = |
@@ -13925,7 +13996,8 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, | |||
13925 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && | 13996 | (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5784 && |
13926 | GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) || | 13997 | GET_CHIP_REV(tp->pci_chip_rev_id) != CHIPREV_5784_AX) || |
13927 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || | 13998 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5785 || |
13928 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) | 13999 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780 || |
14000 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) | ||
13929 | dev->features |= NETIF_F_TSO_ECN; | 14001 | dev->features |= NETIF_F_TSO_ECN; |
13930 | } | 14002 | } |
13931 | 14003 | ||