aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/tg3.c
diff options
context:
space:
mode:
authorMichael Chan <mchan@broadcom.com>2005-09-27 15:13:10 -0400
committerDavid S. Miller <davem@davemloft.net>2005-09-27 15:13:10 -0400
commitf9804ddbeec2ea709255830a8822bfb4e7584f6a (patch)
tree09aad8dd07b795540a718bb48f6f1c1a7f1c496d /drivers/net/tg3.c
parentc94e39418ab6eccf863581f4e0d847da0080b2d3 (diff)
[TG3]: misc. fixes
Fix interrupt test handler by adding check for IRQ assertion in PCI_STATE register in addition to the status block updated bit. Add test for valid ethernet address in tg3_set_mac_addr(). Add tg3_bus_string() to setup the PCI bus speed/width string for all PCI/PCIX/PCI Express devices. This is used to print the bus type during init_one(). Signed-off-by: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/tg3.c')
-rw-r--r--drivers/net/tg3.c53
1 files changed, 46 insertions, 7 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c
index ef2f1fdd6f64..0ac8db25a657 100644
--- a/drivers/net/tg3.c
+++ b/drivers/net/tg3.c
@@ -3389,7 +3389,8 @@ static irqreturn_t tg3_test_isr(int irq, void *dev_id,
3389 struct tg3 *tp = netdev_priv(dev); 3389 struct tg3 *tp = netdev_priv(dev);
3390 struct tg3_hw_status *sblk = tp->hw_status; 3390 struct tg3_hw_status *sblk = tp->hw_status;
3391 3391
3392 if (sblk->status & SD_STATUS_UPDATED) { 3392 if ((sblk->status & SD_STATUS_UPDATED) ||
3393 !(tr32(TG3PCI_PCISTATE) & PCISTATE_INT_NOT_ACTIVE)) {
3393 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW, 3394 tw32_mailbox(MAILBOX_INTERRUPT_0 + TG3_64BIT_REG_LOW,
3394 0x00000001); 3395 0x00000001);
3395 return IRQ_RETVAL(1); 3396 return IRQ_RETVAL(1);
@@ -5395,6 +5396,9 @@ static int tg3_set_mac_addr(struct net_device *dev, void *p)
5395 struct tg3 *tp = netdev_priv(dev); 5396 struct tg3 *tp = netdev_priv(dev);
5396 struct sockaddr *addr = p; 5397 struct sockaddr *addr = p;
5397 5398
5399 if (!is_valid_ether_addr(addr->sa_data))
5400 return -EINVAL;
5401
5398 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); 5402 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
5399 5403
5400 spin_lock_bh(&tp->lock); 5404 spin_lock_bh(&tp->lock);
@@ -10349,6 +10353,44 @@ static char * __devinit tg3_phy_string(struct tg3 *tp)
10349 }; 10353 };
10350} 10354}
10351 10355
10356static char * __devinit tg3_bus_string(struct tg3 *tp, char *str)
10357{
10358 if (tp->tg3_flags2 & TG3_FLG2_PCI_EXPRESS) {
10359 strcpy(str, "PCI Express");
10360 return str;
10361 } else if (tp->tg3_flags & TG3_FLAG_PCIX_MODE) {
10362 u32 clock_ctrl = tr32(TG3PCI_CLOCK_CTRL) & 0x1f;
10363
10364 strcpy(str, "PCIX:");
10365
10366 if ((clock_ctrl == 7) ||
10367 ((tr32(GRC_MISC_CFG) & GRC_MISC_CFG_BOARD_ID_MASK) ==
10368 GRC_MISC_CFG_BOARD_ID_5704CIOBE))
10369 strcat(str, "133MHz");
10370 else if (clock_ctrl == 0)
10371 strcat(str, "33MHz");
10372 else if (clock_ctrl == 2)
10373 strcat(str, "50MHz");
10374 else if (clock_ctrl == 4)
10375 strcat(str, "66MHz");
10376 else if (clock_ctrl == 6)
10377 strcat(str, "100MHz");
10378 else if (clock_ctrl == 7)
10379 strcat(str, "133MHz");
10380 } else {
10381 strcpy(str, "PCI:");
10382 if (tp->tg3_flags & TG3_FLAG_PCI_HIGH_SPEED)
10383 strcat(str, "66MHz");
10384 else
10385 strcat(str, "33MHz");
10386 }
10387 if (tp->tg3_flags & TG3_FLAG_PCI_32BIT)
10388 strcat(str, ":32-bit");
10389 else
10390 strcat(str, ":64-bit");
10391 return str;
10392}
10393
10352static struct pci_dev * __devinit tg3_find_5704_peer(struct tg3 *tp) 10394static struct pci_dev * __devinit tg3_find_5704_peer(struct tg3 *tp)
10353{ 10395{
10354 struct pci_dev *peer; 10396 struct pci_dev *peer;
@@ -10411,6 +10453,7 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
10411 struct net_device *dev; 10453 struct net_device *dev;
10412 struct tg3 *tp; 10454 struct tg3 *tp;
10413 int i, err, pci_using_dac, pm_cap; 10455 int i, err, pci_using_dac, pm_cap;
10456 char str[40];
10414 10457
10415 if (tg3_version_printed++ == 0) 10458 if (tg3_version_printed++ == 0)
10416 printk(KERN_INFO "%s", version); 10459 printk(KERN_INFO "%s", version);
@@ -10656,16 +10699,12 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
10656 10699
10657 pci_set_drvdata(pdev, dev); 10700 pci_set_drvdata(pdev, dev);
10658 10701
10659 printk(KERN_INFO "%s: Tigon3 [partno(%s) rev %04x PHY(%s)] (PCI%s:%s:%s) %sBaseT Ethernet ", 10702 printk(KERN_INFO "%s: Tigon3 [partno(%s) rev %04x PHY(%s)] (%s) %sBaseT Ethernet ",
10660 dev->name, 10703 dev->name,
10661 tp->board_part_number, 10704 tp->board_part_number,
10662 tp->pci_chip_rev_id, 10705 tp->pci_chip_rev_id,
10663 tg3_phy_string(tp), 10706 tg3_phy_string(tp),
10664 ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) ? "X" : ""), 10707 tg3_bus_string(tp, str),
10665 ((tp->tg3_flags & TG3_FLAG_PCI_HIGH_SPEED) ?
10666 ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) ? "133MHz" : "66MHz") :
10667 ((tp->tg3_flags & TG3_FLAG_PCIX_MODE) ? "100MHz" : "33MHz")),
10668 ((tp->tg3_flags & TG3_FLAG_PCI_32BIT) ? "32-bit" : "64-bit"),
10669 (tp->tg3_flags & TG3_FLAG_10_100_ONLY) ? "10/100" : "10/100/1000"); 10708 (tp->tg3_flags & TG3_FLAG_10_100_ONLY) ? "10/100" : "10/100/1000");
10670 10709
10671 for (i = 0; i < 6; i++) 10710 for (i = 0; i < 6; i++)