Commit 4552e1198a08198ce0b42e856845b5394c82c59c
Exists in
master
and in
7 other branches
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
- drivers/net/enc28j60.c
- drivers/net/ibm_newemac/Kconfig
- drivers/net/netxen/netxen_nic.h
- drivers/net/netxen/netxen_nic_ethtool.c
- drivers/net/netxen/netxen_nic_hw.c
- drivers/net/netxen/netxen_nic_init.c
- drivers/net/netxen/netxen_nic_isr.c
- drivers/net/netxen/netxen_nic_main.c
- drivers/net/netxen/netxen_nic_niu.c
- drivers/net/sky2.c
drivers/net/atlx/atl1.c
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
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; |
drivers/net/sky2.c
... | ... | @@ -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 */ |