Commit 4552e1198a08198ce0b42e856845b5394c82c59c

Authored by David S. Miller

Merge branch 'davem-fixes' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6

Showing 11 changed files Side-by-side Diff

drivers/net/atlx/atl1.c
... ... @@ -471,7 +471,6 @@
471 471 memcpy(hw->perm_mac_addr, eth_addr, ETH_ALEN);
472 472 return 0;
473 473 }
474   - return 1;
475 474 }
476 475  
477 476 /* see if SPI FLAGS exist ? */
drivers/net/enc28j60.c
... ... @@ -400,29 +400,34 @@
400 400 mutex_unlock(&priv->lock);
401 401 }
402 402  
403   -/*
404   - * Wait until the PHY operation is complete.
405   - */
406   -static int wait_phy_ready(struct enc28j60_net *priv)
  403 +static unsigned long msec20_to_jiffies;
  404 +
  405 +static int poll_ready(struct enc28j60_net *priv, u8 reg, u8 mask, u8 val)
407 406 {
408   - unsigned long timeout = jiffies + 20 * HZ / 1000;
409   - int ret = 1;
  407 + unsigned long timeout = jiffies + msec20_to_jiffies;
410 408  
411 409 /* 20 msec timeout read */
412   - while (nolock_regb_read(priv, MISTAT) & MISTAT_BUSY) {
  410 + while ((nolock_regb_read(priv, reg) & mask) != val) {
413 411 if (time_after(jiffies, timeout)) {
414 412 if (netif_msg_drv(priv))
415   - printk(KERN_DEBUG DRV_NAME
416   - ": PHY ready timeout!\n");
417   - ret = 0;
418   - break;
  413 + dev_dbg(&priv->spi->dev,
  414 + "reg %02x ready timeout!\n", reg);
  415 + return -ETIMEDOUT;
419 416 }
420 417 cpu_relax();
421 418 }
422   - return ret;
  419 + return 0;
423 420 }
424 421  
425 422 /*
  423 + * Wait until the PHY operation is complete.
  424 + */
  425 +static int wait_phy_ready(struct enc28j60_net *priv)
  426 +{
  427 + return poll_ready(priv, MISTAT, MISTAT_BUSY, 0) ? 0 : 1;
  428 +}
  429 +
  430 +/*
426 431 * PHY register read
427 432 * PHY registers are not accessed directly, but through the MII
428 433 */
... ... @@ -594,6 +599,32 @@
594 599 nolock_regw_write(priv, ETXNDL, end);
595 600 }
596 601  
  602 +/*
  603 + * Low power mode shrinks power consumption about 100x, so we'd like
  604 + * the chip to be in that mode whenever it's inactive. (However, we
  605 + * can't stay in lowpower mode during suspend with WOL active.)
  606 + */
  607 +static void enc28j60_lowpower(struct enc28j60_net *priv, bool is_low)
  608 +{
  609 + if (netif_msg_drv(priv))
  610 + dev_dbg(&priv->spi->dev, "%s power...\n",
  611 + is_low ? "low" : "high");
  612 +
  613 + mutex_lock(&priv->lock);
  614 + if (is_low) {
  615 + nolock_reg_bfclr(priv, ECON1, ECON1_RXEN);
  616 + poll_ready(priv, ESTAT, ESTAT_RXBUSY, 0);
  617 + poll_ready(priv, ECON1, ECON1_TXRTS, 0);
  618 + /* ECON2_VRPS was set during initialization */
  619 + nolock_reg_bfset(priv, ECON2, ECON2_PWRSV);
  620 + } else {
  621 + nolock_reg_bfclr(priv, ECON2, ECON2_PWRSV);
  622 + poll_ready(priv, ESTAT, ESTAT_CLKRDY, ESTAT_CLKRDY);
  623 + /* caller sets ECON1_RXEN */
  624 + }
  625 + mutex_unlock(&priv->lock);
  626 +}
  627 +
597 628 static int enc28j60_hw_init(struct enc28j60_net *priv)
598 629 {
599 630 u8 reg;
... ... @@ -612,8 +643,8 @@
612 643 priv->tx_retry_count = 0;
613 644 priv->max_pk_counter = 0;
614 645 priv->rxfilter = RXFILTER_NORMAL;
615   - /* enable address auto increment */
616   - nolock_regb_write(priv, ECON2, ECON2_AUTOINC);
  646 + /* enable address auto increment and voltage regulator powersave */
  647 + nolock_regb_write(priv, ECON2, ECON2_AUTOINC | ECON2_VRPS);
617 648  
618 649 nolock_rxfifo_init(priv, RXSTART_INIT, RXEND_INIT);
619 650 nolock_txfifo_init(priv, TXSTART_INIT, TXEND_INIT);
... ... @@ -690,7 +721,7 @@
690 721  
691 722 static void enc28j60_hw_enable(struct enc28j60_net *priv)
692 723 {
693   - /* enable interrutps */
  724 + /* enable interrupts */
694 725 if (netif_msg_hw(priv))
695 726 printk(KERN_DEBUG DRV_NAME ": %s() enabling interrupts.\n",
696 727 __FUNCTION__);
697 728  
... ... @@ -726,15 +757,12 @@
726 757 int ret = 0;
727 758  
728 759 if (!priv->hw_enable) {
729   - if (autoneg == AUTONEG_DISABLE && speed == SPEED_10) {
  760 + /* link is in low power mode now; duplex setting
  761 + * will take effect on next enc28j60_hw_init().
  762 + */
  763 + if (autoneg == AUTONEG_DISABLE && speed == SPEED_10)
730 764 priv->full_duplex = (duplex == DUPLEX_FULL);
731   - if (!enc28j60_hw_init(priv)) {
732   - if (netif_msg_drv(priv))
733   - dev_err(&ndev->dev,
734   - "hw_reset() failed\n");
735   - ret = -EINVAL;
736   - }
737   - } else {
  765 + else {
738 766 if (netif_msg_link(priv))
739 767 dev_warn(&ndev->dev,
740 768 "unsupported link setting\n");
... ... @@ -1307,7 +1335,8 @@
1307 1335 }
1308 1336 return -EADDRNOTAVAIL;
1309 1337 }
1310   - /* Reset the hardware here */
  1338 + /* Reset the hardware here (and take it out of low power mode) */
  1339 + enc28j60_lowpower(priv, false);
1311 1340 enc28j60_hw_disable(priv);
1312 1341 if (!enc28j60_hw_init(priv)) {
1313 1342 if (netif_msg_ifup(priv))
... ... @@ -1337,6 +1366,7 @@
1337 1366 printk(KERN_DEBUG DRV_NAME ": %s() enter\n", __FUNCTION__);
1338 1367  
1339 1368 enc28j60_hw_disable(priv);
  1369 + enc28j60_lowpower(priv, true);
1340 1370 netif_stop_queue(dev);
1341 1371  
1342 1372 return 0;
... ... @@ -1537,6 +1567,8 @@
1537 1567 dev->watchdog_timeo = TX_TIMEOUT;
1538 1568 SET_ETHTOOL_OPS(dev, &enc28j60_ethtool_ops);
1539 1569  
  1570 + enc28j60_lowpower(priv, true);
  1571 +
1540 1572 ret = register_netdev(dev);
1541 1573 if (ret) {
1542 1574 if (netif_msg_probe(priv))
... ... @@ -1556,7 +1588,7 @@
1556 1588 return ret;
1557 1589 }
1558 1590  
1559   -static int enc28j60_remove(struct spi_device *spi)
  1591 +static int __devexit enc28j60_remove(struct spi_device *spi)
1560 1592 {
1561 1593 struct enc28j60_net *priv = dev_get_drvdata(&spi->dev);
1562 1594  
1563 1595  
1564 1596  
... ... @@ -1573,15 +1605,16 @@
1573 1605 static struct spi_driver enc28j60_driver = {
1574 1606 .driver = {
1575 1607 .name = DRV_NAME,
1576   - .bus = &spi_bus_type,
1577 1608 .owner = THIS_MODULE,
1578   - },
  1609 + },
1579 1610 .probe = enc28j60_probe,
1580 1611 .remove = __devexit_p(enc28j60_remove),
1581 1612 };
1582 1613  
1583 1614 static int __init enc28j60_init(void)
1584 1615 {
  1616 + msec20_to_jiffies = msecs_to_jiffies(20);
  1617 +
1585 1618 return spi_register_driver(&enc28j60_driver);
1586 1619 }
1587 1620  
drivers/net/ibm_newemac/Kconfig
1 1 config IBM_NEW_EMAC
2 2 tristate "IBM EMAC Ethernet support"
3 3 depends on PPC_DCR && PPC_MERGE
  4 + select CRC32
4 5 help
5 6 This driver supports the IBM EMAC family of Ethernet controllers
6 7 typically found on 4xx embedded PowerPC chips, but also on the
drivers/net/netxen/netxen_nic.h
... ... @@ -776,7 +776,6 @@
776 776  
777 777 u8 revision_id;
778 778 u16 board_type;
779   - u16 max_ports;
780 779 struct netxen_board_info boardcfg;
781 780 u32 xg_linkup;
782 781 u32 qg_linksup;
... ... @@ -863,6 +862,7 @@
863 862 unsigned char mac_addr[ETH_ALEN];
864 863 int mtu;
865 864 int portnum;
  865 + u8 physical_port;
866 866  
867 867 struct work_struct watchdog_task;
868 868 struct timer_list watchdog_timer;
... ... @@ -1034,7 +1034,6 @@
1034 1034  
1035 1035 /* Functions from netxen_nic_isr.c */
1036 1036 void netxen_initialize_adapter_sw(struct netxen_adapter *adapter);
1037   -void netxen_initialize_adapter_hw(struct netxen_adapter *adapter);
1038 1037 void *netxen_alloc(struct pci_dev *pdev, size_t sz, dma_addr_t * ptr,
1039 1038 struct pci_dev **used_dev);
1040 1039 void netxen_initialize_adapter_ops(struct netxen_adapter *adapter);
... ... @@ -1077,20 +1076,6 @@
1077 1076  
1078 1077 #define NUM_SUPPORTED_BOARDS ARRAY_SIZE(netxen_boards)
1079 1078  
1080   -static inline void get_brd_port_by_type(u32 type, int *ports)
1081   -{
1082   - int i, found = 0;
1083   - for (i = 0; i < NUM_SUPPORTED_BOARDS; ++i) {
1084   - if (netxen_boards[i].brdtype == type) {
1085   - *ports = netxen_boards[i].ports;
1086   - found = 1;
1087   - break;
1088   - }
1089   - }
1090   - if (!found)
1091   - *ports = 0;
1092   -}
1093   -
1094 1079 static inline void get_brd_name_by_type(u32 type, char *name)
1095 1080 {
1096 1081 int i, found = 0;
... ... @@ -1169,6 +1154,5 @@
1169 1154  
1170 1155 extern struct ethtool_ops netxen_nic_ethtool_ops;
1171 1156  
1172   -extern int physical_port[]; /* physical port # from virtual port.*/
1173 1157 #endif /* __NETXEN_NIC_H_ */
drivers/net/netxen/netxen_nic_ethtool.c
... ... @@ -369,7 +369,7 @@
369 369 for (i = 3; niu_registers[mode].reg[i - 3] != -1; i++) {
370 370 /* GB: port specific registers */
371 371 if (mode == 0 && i >= 19)
372   - window = physical_port[adapter->portnum] *
  372 + window = adapter->physical_port *
373 373 NETXEN_NIC_PORT_WINDOW;
374 374  
375 375 NETXEN_NIC_LOCKED_READ_REG(niu_registers[mode].
... ... @@ -527,7 +527,7 @@
527 527 {
528 528 struct netxen_adapter *adapter = netdev_priv(dev);
529 529 __u32 val;
530   - int port = physical_port[adapter->portnum];
  530 + int port = adapter->physical_port;
531 531  
532 532 if (adapter->ahw.board_type == NETXEN_NIC_GBE) {
533 533 if ((port < 0) || (port > NETXEN_NIU_MAX_GBE_PORTS))
... ... @@ -573,7 +573,7 @@
573 573 {
574 574 struct netxen_adapter *adapter = netdev_priv(dev);
575 575 __u32 val;
576   - int port = physical_port[adapter->portnum];
  576 + int port = adapter->physical_port;
577 577 /* read mode */
578 578 if (adapter->ahw.board_type == NETXEN_NIC_GBE) {
579 579 if ((port < 0) || (port > NETXEN_NIU_MAX_GBE_PORTS))
drivers/net/netxen/netxen_nic_hw.c
... ... @@ -396,11 +396,8 @@
396 396 }
397 397 adapter->intr_scheme = readl(
398 398 NETXEN_CRB_NORMALIZE(adapter, CRB_NIC_CAPABILITIES_FW));
399   - printk(KERN_NOTICE "%s: FW capabilities:0x%x\n", netxen_nic_driver_name,
400   - adapter->intr_scheme);
401 399 adapter->msi_mode = readl(
402 400 NETXEN_CRB_NORMALIZE(adapter, CRB_NIC_MSI_MODE_FW));
403   - DPRINTK(INFO, "Receive Peg ready too. starting stuff\n");
404 401  
405 402 addr = netxen_alloc(adapter->ahw.pdev,
406 403 sizeof(struct netxen_ring_ctx) +
... ... @@ -408,8 +405,6 @@
408 405 (dma_addr_t *) & adapter->ctx_desc_phys_addr,
409 406 &adapter->ctx_desc_pdev);
410 407  
411   - printk(KERN_INFO "ctx_desc_phys_addr: 0x%llx\n",
412   - (unsigned long long) adapter->ctx_desc_phys_addr);
413 408 if (addr == NULL) {
414 409 DPRINTK(ERR, "bad return from pci_alloc_consistent\n");
415 410 err = -ENOMEM;
... ... @@ -429,8 +424,6 @@
429 424 adapter->max_tx_desc_count,
430 425 (dma_addr_t *) & hw->cmd_desc_phys_addr,
431 426 &adapter->ahw.cmd_desc_pdev);
432   - printk(KERN_INFO "cmd_desc_phys_addr: 0x%llx\n",
433   - (unsigned long long) hw->cmd_desc_phys_addr);
434 427  
435 428 if (addr == NULL) {
436 429 DPRINTK(ERR, "bad return from pci_alloc_consistent\n");
437 430  
... ... @@ -1032,15 +1025,15 @@
1032 1025 int netxen_nic_set_mtu_gb(struct netxen_adapter *adapter, int new_mtu)
1033 1026 {
1034 1027 netxen_nic_write_w0(adapter,
1035   - NETXEN_NIU_GB_MAX_FRAME_SIZE(
1036   - physical_port[adapter->portnum]), new_mtu);
  1028 + NETXEN_NIU_GB_MAX_FRAME_SIZE(adapter->physical_port),
  1029 + new_mtu);
1037 1030 return 0;
1038 1031 }
1039 1032  
1040 1033 int netxen_nic_set_mtu_xgb(struct netxen_adapter *adapter, int new_mtu)
1041 1034 {
1042 1035 new_mtu += NETXEN_NIU_HDRSIZE + NETXEN_NIU_TLRSIZE;
1043   - if (physical_port[adapter->portnum] == 0)
  1036 + if (adapter->physical_port == 0)
1044 1037 netxen_nic_write_w0(adapter, NETXEN_NIU_XGE_MAX_FRAME_SIZE,
1045 1038 new_mtu);
1046 1039 else
... ... @@ -1051,7 +1044,7 @@
1051 1044  
1052 1045 void netxen_nic_init_niu_gb(struct netxen_adapter *adapter)
1053 1046 {
1054   - netxen_niu_gbe_init_port(adapter, physical_port[adapter->portnum]);
  1047 + netxen_niu_gbe_init_port(adapter, adapter->physical_port);
1055 1048 }
1056 1049  
1057 1050 void
... ... @@ -1127,7 +1120,6 @@
1127 1120  
1128 1121 void netxen_nic_flash_print(struct netxen_adapter *adapter)
1129 1122 {
1130   - int valid = 1;
1131 1123 u32 fw_major = 0;
1132 1124 u32 fw_minor = 0;
1133 1125 u32 fw_build = 0;
1134 1126  
1135 1127  
1136 1128  
1137 1129  
1138 1130  
1139 1131  
1140 1132  
... ... @@ -1137,70 +1129,62 @@
1137 1129 __le32 *ptr32;
1138 1130  
1139 1131 struct netxen_board_info *board_info = &(adapter->ahw.boardcfg);
1140   - if (board_info->magic != NETXEN_BDINFO_MAGIC) {
1141   - printk
1142   - ("NetXen Unknown board config, Read 0x%x expected as 0x%x\n",
1143   - board_info->magic, NETXEN_BDINFO_MAGIC);
1144   - valid = 0;
1145   - }
1146   - if (board_info->header_version != NETXEN_BDINFO_VERSION) {
1147   - printk("NetXen Unknown board config version."
1148   - " Read %x, expected %x\n",
1149   - board_info->header_version, NETXEN_BDINFO_VERSION);
1150   - valid = 0;
1151   - }
1152   - if (valid) {
1153   - ptr32 = (u32 *)&serial_num;
1154   - addr = NETXEN_USER_START +
1155   - offsetof(struct netxen_new_user_info, serial_num);
1156   - for (i = 0; i < 8; i++) {
1157   - if (netxen_rom_fast_read(adapter, addr, ptr32) == -1) {
1158   - printk("%s: ERROR reading %s board userarea.\n",
1159   - netxen_nic_driver_name,
1160   - netxen_nic_driver_name);
1161   - return;
1162   - }
1163   - ptr32++;
1164   - addr += sizeof(u32);
  1132 +
  1133 + adapter->driver_mismatch = 0;
  1134 +
  1135 + ptr32 = (u32 *)&serial_num;
  1136 + addr = NETXEN_USER_START +
  1137 + offsetof(struct netxen_new_user_info, serial_num);
  1138 + for (i = 0; i < 8; i++) {
  1139 + if (netxen_rom_fast_read(adapter, addr, ptr32) == -1) {
  1140 + printk("%s: ERROR reading %s board userarea.\n",
  1141 + netxen_nic_driver_name,
  1142 + netxen_nic_driver_name);
  1143 + adapter->driver_mismatch = 1;
  1144 + return;
1165 1145 }
  1146 + ptr32++;
  1147 + addr += sizeof(u32);
  1148 + }
1166 1149  
  1150 + fw_major = readl(NETXEN_CRB_NORMALIZE(adapter,
  1151 + NETXEN_FW_VERSION_MAJOR));
  1152 + fw_minor = readl(NETXEN_CRB_NORMALIZE(adapter,
  1153 + NETXEN_FW_VERSION_MINOR));
  1154 + fw_build =
  1155 + readl(NETXEN_CRB_NORMALIZE(adapter, NETXEN_FW_VERSION_SUB));
  1156 +
  1157 + if (adapter->portnum == 0) {
1167 1158 get_brd_name_by_type(board_info->board_type, brd_name);
1168 1159  
1169 1160 printk("NetXen %s Board S/N %s Chip id 0x%x\n",
1170   - brd_name, serial_num, board_info->chip_id);
1171   -
1172   - printk("NetXen %s Board #%d, Chip id 0x%x\n",
1173   - board_info->board_type == 0x0b ? "XGB" : "GBE",
1174   - board_info->board_num, board_info->chip_id);
1175   - fw_major = readl(NETXEN_CRB_NORMALIZE(adapter,
1176   - NETXEN_FW_VERSION_MAJOR));
1177   - fw_minor = readl(NETXEN_CRB_NORMALIZE(adapter,
1178   - NETXEN_FW_VERSION_MINOR));
1179   - fw_build =
1180   - readl(NETXEN_CRB_NORMALIZE(adapter, NETXEN_FW_VERSION_SUB));
1181   -
1182   - printk("NetXen Firmware version %d.%d.%d\n", fw_major, fw_minor,
1183   - fw_build);
  1161 + brd_name, serial_num, board_info->chip_id);
  1162 + printk("NetXen Firmware version %d.%d.%d\n", fw_major,
  1163 + fw_minor, fw_build);
1184 1164 }
  1165 +
1185 1166 if (fw_major != _NETXEN_NIC_LINUX_MAJOR) {
1186   - printk(KERN_ERR "The mismatch in driver version and firmware "
1187   - "version major number\n"
1188   - "Driver version major number = %d \t"
1189   - "Firmware version major number = %d \n",
1190   - _NETXEN_NIC_LINUX_MAJOR, fw_major);
1191 1167 adapter->driver_mismatch = 1;
1192 1168 }
1193 1169 if (fw_minor != _NETXEN_NIC_LINUX_MINOR &&
1194 1170 fw_minor != (_NETXEN_NIC_LINUX_MINOR + 1)) {
1195   - printk(KERN_ERR "The mismatch in driver version and firmware "
1196   - "version minor number\n"
1197   - "Driver version minor number = %d \t"
1198   - "Firmware version minor number = %d \n",
1199   - _NETXEN_NIC_LINUX_MINOR, fw_minor);
1200 1171 adapter->driver_mismatch = 1;
1201 1172 }
1202   - if (adapter->driver_mismatch)
1203   - printk(KERN_INFO "Use the driver with version no %d.%d.xxx\n",
1204   - fw_major, fw_minor);
  1173 + if (adapter->driver_mismatch) {
  1174 + printk(KERN_ERR "%s: driver and firmware version mismatch\n",
  1175 + adapter->netdev->name);
  1176 + return;
  1177 + }
  1178 +
  1179 + switch (adapter->ahw.board_type) {
  1180 + case NETXEN_NIC_GBE:
  1181 + dev_info(&adapter->pdev->dev, "%s: GbE port initialized\n",
  1182 + adapter->netdev->name);
  1183 + break;
  1184 + case NETXEN_NIC_XGBE:
  1185 + dev_info(&adapter->pdev->dev, "%s: XGbE port initialized\n",
  1186 + adapter->netdev->name);
  1187 + break;
  1188 + }
1205 1189 }
drivers/net/netxen/netxen_nic_init.c
... ... @@ -203,21 +203,6 @@
203 203 }
204 204 }
205 205  
206   -void netxen_initialize_adapter_hw(struct netxen_adapter *adapter)
207   -{
208   - int ports = 0;
209   - struct netxen_board_info *board_info = &(adapter->ahw.boardcfg);
210   -
211   - if (netxen_nic_get_board_info(adapter) != 0)
212   - printk("%s: Error getting board config info.\n",
213   - netxen_nic_driver_name);
214   - get_brd_port_by_type(board_info->board_type, &ports);
215   - if (ports == 0)
216   - printk(KERN_ERR "%s: Unknown board type\n",
217   - netxen_nic_driver_name);
218   - adapter->ahw.max_ports = ports;
219   -}
220   -
221 206 void netxen_initialize_adapter_ops(struct netxen_adapter *adapter)
222 207 {
223 208 switch (adapter->ahw.board_type) {
224 209  
... ... @@ -765,18 +750,13 @@
765 750  
766 751 int netxen_pinit_from_rom(struct netxen_adapter *adapter, int verbose)
767 752 {
768   - int addr, val, status;
  753 + int addr, val;
769 754 int n, i;
770 755 int init_delay = 0;
771 756 struct crb_addr_pair *buf;
772 757 u32 off;
773 758  
774 759 /* resetall */
775   - status = netxen_nic_get_board_info(adapter);
776   - if (status)
777   - printk("%s: netxen_pinit_from_rom: Error getting board info\n",
778   - netxen_nic_driver_name);
779   -
780 760 netxen_crb_writelit_adapter(adapter, NETXEN_ROMUSB_GLB_SW_RESET,
781 761 NETXEN_ROMBUS_RESET);
782 762  
783 763  
... ... @@ -860,10 +840,10 @@
860 840 netxen_nic_pci_change_crbwindow(adapter, 1);
861 841 }
862 842 if (init_delay == 1) {
863   - msleep(2000);
  843 + msleep(1000);
864 844 init_delay = 0;
865 845 }
866   - msleep(20);
  846 + msleep(1);
867 847 }
868 848 kfree(buf);
869 849  
870 850  
871 851  
... ... @@ -938,12 +918,28 @@
938 918  
939 919 void netxen_free_adapter_offload(struct netxen_adapter *adapter)
940 920 {
  921 + int i;
  922 +
941 923 if (adapter->dummy_dma.addr) {
942   - pci_free_consistent(adapter->ahw.pdev,
  924 + i = 100;
  925 + do {
  926 + if (dma_watchdog_shutdown_request(adapter) == 1)
  927 + break;
  928 + msleep(50);
  929 + if (dma_watchdog_shutdown_poll_result(adapter) == 1)
  930 + break;
  931 + } while (--i);
  932 +
  933 + if (i) {
  934 + pci_free_consistent(adapter->ahw.pdev,
943 935 NETXEN_HOST_DUMMY_DMA_SIZE,
944 936 adapter->dummy_dma.addr,
945 937 adapter->dummy_dma.phys_addr);
946   - adapter->dummy_dma.addr = NULL;
  938 + adapter->dummy_dma.addr = NULL;
  939 + } else {
  940 + printk(KERN_ERR "%s: dma_watchdog_shutdown failed\n",
  941 + adapter->netdev->name);
  942 + }
947 943 }
948 944 }
949 945  
drivers/net/netxen/netxen_nic_isr.c
... ... @@ -145,7 +145,7 @@
145 145  
146 146 /* verify the offset */
147 147 val = readl(NETXEN_CRB_NORMALIZE(adapter, CRB_XG_STATE));
148   - val = val >> physical_port[adapter->portnum];
  148 + val = val >> adapter->physical_port;
149 149 if (val == adapter->ahw.qg_linksup)
150 150 return;
151 151  
... ... @@ -199,7 +199,7 @@
199 199  
200 200 /* WINDOW = 1 */
201 201 val = readl(NETXEN_CRB_NORMALIZE(adapter, CRB_XG_STATE));
202   - val >>= (physical_port[adapter->portnum] * 8);
  202 + val >>= (adapter->physical_port * 8);
203 203 val &= 0xff;
204 204  
205 205 if (adapter->ahw.xg_linkup == 1 && val != XG_LINK_UP) {
drivers/net/netxen/netxen_nic_main.c
... ... @@ -70,17 +70,15 @@
70 70 static irqreturn_t netxen_intr(int irq, void *data);
71 71 static irqreturn_t netxen_msi_intr(int irq, void *data);
72 72  
73   -int physical_port[] = {0, 1, 2, 3};
74   -
75 73 /* PCI Device ID Table */
76 74 static struct pci_device_id netxen_pci_tbl[] __devinitdata = {
77   - {PCI_DEVICE(0x4040, 0x0001)},
78   - {PCI_DEVICE(0x4040, 0x0002)},
79   - {PCI_DEVICE(0x4040, 0x0003)},
80   - {PCI_DEVICE(0x4040, 0x0004)},
81   - {PCI_DEVICE(0x4040, 0x0005)},
82   - {PCI_DEVICE(0x4040, 0x0024)},
83   - {PCI_DEVICE(0x4040, 0x0025)},
  75 + {PCI_DEVICE(0x4040, 0x0001), PCI_DEVICE_CLASS(0x020000, ~0)},
  76 + {PCI_DEVICE(0x4040, 0x0002), PCI_DEVICE_CLASS(0x020000, ~0)},
  77 + {PCI_DEVICE(0x4040, 0x0003), PCI_DEVICE_CLASS(0x020000, ~0)},
  78 + {PCI_DEVICE(0x4040, 0x0004), PCI_DEVICE_CLASS(0x020000, ~0)},
  79 + {PCI_DEVICE(0x4040, 0x0005), PCI_DEVICE_CLASS(0x020000, ~0)},
  80 + {PCI_DEVICE(0x4040, 0x0024), PCI_DEVICE_CLASS(0x020000, ~0)},
  81 + {PCI_DEVICE(0x4040, 0x0025), PCI_DEVICE_CLASS(0x020000, ~0)},
84 82 {0,}
85 83 };
86 84  
87 85  
... ... @@ -288,10 +286,11 @@
288 286 int pci_func_id = PCI_FUNC(pdev->devfn);
289 287 DECLARE_MAC_BUF(mac);
290 288  
291   - printk(KERN_INFO "%s \n", netxen_nic_driver_string);
  289 + if (pci_func_id == 0)
  290 + printk(KERN_INFO "%s \n", netxen_nic_driver_string);
292 291  
293 292 if (pdev->class != 0x020000) {
294   - printk(KERN_ERR"NetXen function %d, class %x will not "
  293 + printk(KERN_DEBUG "NetXen function %d, class %x will not "
295 294 "be enabled.\n",pci_func_id, pdev->class);
296 295 return -ENODEV;
297 296 }
... ... @@ -450,8 +449,12 @@
450 449 */
451 450 adapter->curr_window = 255;
452 451  
453   - /* initialize the adapter */
454   - netxen_initialize_adapter_hw(adapter);
  452 + if (netxen_nic_get_board_info(adapter) != 0) {
  453 + printk("%s: Error getting board config info.\n",
  454 + netxen_nic_driver_name);
  455 + err = -EIO;
  456 + goto err_out_iounmap;
  457 + }
455 458  
456 459 /*
457 460 * Adapter in our case is quad port so initialize it before
458 461  
459 462  
... ... @@ -530,17 +533,15 @@
530 533 netxen_initialize_adapter_sw(adapter); /* initialize the buffers in adapter */
531 534  
532 535 /* Mezz cards have PCI function 0,2,3 enabled */
533   - if ((adapter->ahw.boardcfg.board_type == NETXEN_BRDTYPE_P2_SB31_10G_IMEZ)
534   - && (pci_func_id >= 2))
  536 + switch (adapter->ahw.boardcfg.board_type) {
  537 + case NETXEN_BRDTYPE_P2_SB31_10G_IMEZ:
  538 + case NETXEN_BRDTYPE_P2_SB31_10G_HMEZ:
  539 + if (pci_func_id >= 2)
535 540 adapter->portnum = pci_func_id - 2;
536   -
537   -#ifdef CONFIG_IA64
538   - if(adapter->portnum == 0) {
539   - netxen_pinit_from_rom(adapter, 0);
540   - udelay(500);
541   - netxen_load_firmware(adapter);
  541 + break;
  542 + default:
  543 + break;
542 544 }
543   -#endif
544 545  
545 546 init_timer(&adapter->watchdog_timer);
546 547 adapter->ahw.xg_linkup = 0;
547 548  
... ... @@ -613,11 +614,18 @@
613 614 err = -ENODEV;
614 615 goto err_out_free_dev;
615 616 }
  617 + } else {
  618 + writel(0, NETXEN_CRB_NORMALIZE(adapter,
  619 + CRB_CMDPEG_STATE));
  620 + netxen_pinit_from_rom(adapter, 0);
  621 + msleep(1);
  622 + netxen_load_firmware(adapter);
  623 + netxen_phantom_init(adapter, NETXEN_NIC_PEG_TUNE);
616 624 }
617 625  
618 626 /* clear the register for future unloads/loads */
619 627 writel(0, NETXEN_CRB_NORMALIZE(adapter, NETXEN_CAM_RAM(0x1fc)));
620   - printk(KERN_INFO "State: 0x%0x\n",
  628 + dev_info(&pdev->dev, "cmdpeg state: 0x%0x\n",
621 629 readl(NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE)));
622 630  
623 631 /*
624 632  
... ... @@ -639,9 +647,10 @@
639 647 /*
640 648 * See if the firmware gave us a virtual-physical port mapping.
641 649 */
  650 + adapter->physical_port = adapter->portnum;
642 651 i = readl(NETXEN_CRB_NORMALIZE(adapter, CRB_V2P(adapter->portnum)));
643 652 if (i != 0x55555555)
644   - physical_port[adapter->portnum] = i;
  653 + adapter->physical_port = i;
645 654  
646 655 netif_carrier_off(netdev);
647 656 netif_stop_queue(netdev);
648 657  
... ... @@ -654,22 +663,9 @@
654 663 goto err_out_free_dev;
655 664 }
656 665  
  666 + netxen_nic_flash_print(adapter);
657 667 pci_set_drvdata(pdev, adapter);
658 668  
659   - switch (adapter->ahw.board_type) {
660   - case NETXEN_NIC_GBE:
661   - printk(KERN_INFO "%s: QUAD GbE board initialized\n",
662   - netxen_nic_driver_name);
663   - break;
664   -
665   - case NETXEN_NIC_XGBE:
666   - printk(KERN_INFO "%s: XGbE board initialized\n",
667   - netxen_nic_driver_name);
668   - break;
669   - }
670   -
671   - adapter->driver_mismatch = 0;
672   -
673 669 return 0;
674 670  
675 671 err_out_free_dev:
676 672  
... ... @@ -760,56 +756,9 @@
760 756  
761 757 vfree(adapter->cmd_buf_arr);
762 758  
763   - if (adapter->portnum == 0) {
764   - if (init_firmware_done) {
765   - i = 100;
766   - do {
767   - if (dma_watchdog_shutdown_request(adapter) == 1)
768   - break;
769   - msleep(100);
770   - if (dma_watchdog_shutdown_poll_result(adapter) == 1)
771   - break;
772   - } while (--i);
  759 + if (adapter->portnum == 0)
  760 + netxen_free_adapter_offload(adapter);
773 761  
774   - if (i == 0)
775   - printk(KERN_ERR "%s: dma_watchdog_shutdown failed\n",
776   - netdev->name);
777   -
778   - /* clear the register for future unloads/loads */
779   - writel(0, NETXEN_CRB_NORMALIZE(adapter, NETXEN_CAM_RAM(0x1fc)));
780   - printk(KERN_INFO "State: 0x%0x\n",
781   - readl(NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE)));
782   -
783   - /* leave the hw in the same state as reboot */
784   - writel(0, NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE));
785   - netxen_pinit_from_rom(adapter, 0);
786   - msleep(1);
787   - netxen_load_firmware(adapter);
788   - netxen_phantom_init(adapter, NETXEN_NIC_PEG_TUNE);
789   - }
790   -
791   - /* clear the register for future unloads/loads */
792   - writel(0, NETXEN_CRB_NORMALIZE(adapter, NETXEN_CAM_RAM(0x1fc)));
793   - printk(KERN_INFO "State: 0x%0x\n",
794   - readl(NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE)));
795   -
796   - i = 100;
797   - do {
798   - if (dma_watchdog_shutdown_request(adapter) == 1)
799   - break;
800   - msleep(100);
801   - if (dma_watchdog_shutdown_poll_result(adapter) == 1)
802   - break;
803   - } while (--i);
804   -
805   - if (i) {
806   - netxen_free_adapter_offload(adapter);
807   - } else {
808   - printk(KERN_ERR "%s: dma_watchdog_shutdown failed\n",
809   - netdev->name);
810   - }
811   - }
812   -
813 762 if (adapter->irq)
814 763 free_irq(adapter->irq, adapter);
815 764  
816 765  
... ... @@ -840,13 +789,15 @@
840 789 irq_handler_t handler;
841 790 unsigned long flags = IRQF_SAMPLE_RANDOM;
842 791  
  792 + if (adapter->driver_mismatch)
  793 + return -EIO;
  794 +
843 795 if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC) {
844 796 err = netxen_init_firmware(adapter);
845 797 if (err != 0) {
846 798 printk(KERN_ERR "Failed to init firmware\n");
847 799 return -EIO;
848 800 }
849   - netxen_nic_flash_print(adapter);
850 801  
851 802 /* setup all the resources for the Phantom... */
852 803 /* this include the descriptors for rcv, tx, and status */
853 804  
... ... @@ -895,14 +846,12 @@
895 846 if (adapter->set_mtu)
896 847 adapter->set_mtu(adapter, netdev->mtu);
897 848  
898   - if (!adapter->driver_mismatch)
899   - mod_timer(&adapter->watchdog_timer, jiffies);
  849 + mod_timer(&adapter->watchdog_timer, jiffies);
900 850  
901 851 napi_enable(&adapter->napi);
902 852 netxen_nic_enable_int(adapter);
903 853  
904   - if (!adapter->driver_mismatch)
905   - netif_start_queue(netdev);
  854 + netif_start_queue(netdev);
906 855  
907 856 return 0;
908 857 }
drivers/net/netxen/netxen_nic_niu.c
... ... @@ -94,7 +94,7 @@
94 94 long timeout = 0;
95 95 long result = 0;
96 96 long restore = 0;
97   - long phy = physical_port[adapter->portnum];
  97 + long phy = adapter->physical_port;
98 98 __u32 address;
99 99 __u32 command;
100 100 __u32 status;
... ... @@ -190,7 +190,7 @@
190 190 long timeout = 0;
191 191 long result = 0;
192 192 long restore = 0;
193   - long phy = physical_port[adapter->portnum];
  193 + long phy = adapter->physical_port;
194 194 __u32 address;
195 195 __u32 command;
196 196 __u32 status;
... ... @@ -456,7 +456,7 @@
456 456  
457 457 int netxen_niu_xg_init_port(struct netxen_adapter *adapter, int port)
458 458 {
459   - u32 portnum = physical_port[adapter->portnum];
  459 + u32 portnum = adapter->physical_port;
460 460  
461 461 netxen_crb_writelit_adapter(adapter,
462 462 NETXEN_NIU_XGE_CONFIG_1+(0x10000*portnum), 0x1447);
... ... @@ -573,7 +573,7 @@
573 573 {
574 574 u32 stationhigh;
575 575 u32 stationlow;
576   - int phy = physical_port[adapter->portnum];
  576 + int phy = adapter->physical_port;
577 577 u8 val[8];
578 578  
579 579 if (addr == NULL)
... ... @@ -604,7 +604,7 @@
604 604 {
605 605 u8 temp[4];
606 606 u32 val;
607   - int phy = physical_port[adapter->portnum];
  607 + int phy = adapter->physical_port;
608 608 unsigned char mac_addr[6];
609 609 int i;
610 610 DECLARE_MAC_BUF(mac);
... ... @@ -724,7 +724,7 @@
724 724 int netxen_niu_disable_gbe_port(struct netxen_adapter *adapter)
725 725 {
726 726 __u32 mac_cfg0;
727   - u32 port = physical_port[adapter->portnum];
  727 + u32 port = adapter->physical_port;
728 728  
729 729 if (port > NETXEN_NIU_MAX_GBE_PORTS)
730 730 return -EINVAL;
... ... @@ -740,7 +740,7 @@
740 740 int netxen_niu_disable_xg_port(struct netxen_adapter *adapter)
741 741 {
742 742 __u32 mac_cfg;
743   - u32 port = physical_port[adapter->portnum];
  743 + u32 port = adapter->physical_port;
744 744  
745 745 if (port > NETXEN_NIU_MAX_XG_PORTS)
746 746 return -EINVAL;
... ... @@ -757,7 +757,7 @@
757 757 netxen_niu_prom_mode_t mode)
758 758 {
759 759 __u32 reg;
760   - u32 port = physical_port[adapter->portnum];
  760 + u32 port = adapter->physical_port;
761 761  
762 762 if (port > NETXEN_NIU_MAX_GBE_PORTS)
763 763 return -EINVAL;
... ... @@ -814,7 +814,7 @@
814 814 int netxen_niu_xg_macaddr_set(struct netxen_adapter *adapter,
815 815 netxen_ethernet_macaddr_t addr)
816 816 {
817   - int phy = physical_port[adapter->portnum];
  817 + int phy = adapter->physical_port;
818 818 u8 temp[4];
819 819 u32 val;
820 820  
... ... @@ -867,7 +867,7 @@
867 867 int netxen_niu_xg_macaddr_get(struct netxen_adapter *adapter,
868 868 netxen_ethernet_macaddr_t * addr)
869 869 {
870   - int phy = physical_port[adapter->portnum];
  870 + int phy = adapter->physical_port;
871 871 u32 stationhigh;
872 872 u32 stationlow;
873 873 u8 val[8];
... ... @@ -896,7 +896,7 @@
896 896 netxen_niu_prom_mode_t mode)
897 897 {
898 898 __u32 reg;
899   - u32 port = physical_port[adapter->portnum];
  899 + u32 port = adapter->physical_port;
900 900  
901 901 if (port > NETXEN_NIU_MAX_XG_PORTS)
902 902 return -EINVAL;
... ... @@ -118,6 +118,7 @@
118 118 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4352) }, /* 88E8038 */
119 119 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4353) }, /* 88E8039 */
120 120 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4354) }, /* 88E8040 */
  121 + { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4355) }, /* 88E8040T */
121 122 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4356) }, /* 88EC033 */
122 123 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x4357) }, /* 88E8042 */
123 124 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x435A) }, /* 88E8048 */