Commit 644caeef authored by dhananjay.phadke@gmail.com's avatar dhananjay.phadke@gmail.com Committed by Jeff Garzik

RESEND [PATCH 1/3] NetXen: Fix issue of MSI not working correctly

NetXen driver uses PCI function 0 to provide the functionality of MSI.
The patch makes driver check the bus master bit for function 0 and
enable it after the card initialization.

Signed-off-by: Dhananjay Phadke<dhananjay@netxen.com>
Signed-off-by: default avatarMilan Bag <mbag@netxen.com>
Signed-off-by: default avatarWen Xiong <wenxiong@us.ibm.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent b8f59586
...@@ -336,11 +336,9 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -336,11 +336,9 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
if (pci_using_dac) if (pci_using_dac)
netdev->features |= NETIF_F_HIGHDMA; netdev->features |= NETIF_F_HIGHDMA;
if (pci_enable_msi(pdev)) { if (pci_enable_msi(pdev))
adapter->flags &= ~NETXEN_NIC_MSI_ENABLED; adapter->flags &= ~NETXEN_NIC_MSI_ENABLED;
printk(KERN_WARNING "%s: unable to allocate MSI interrupt" else
" error\n", netxen_nic_driver_name);
} else
adapter->flags |= NETXEN_NIC_MSI_ENABLED; adapter->flags |= NETXEN_NIC_MSI_ENABLED;
netdev->irq = pdev->irq; netdev->irq = pdev->irq;
...@@ -355,13 +353,6 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -355,13 +353,6 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
/* initialize the adapter */ /* initialize the adapter */
netxen_initialize_adapter_hw(adapter); netxen_initialize_adapter_hw(adapter);
#ifdef CONFIG_PPC
if ((adapter->ahw.boardcfg.board_type ==
NETXEN_BRDTYPE_P2_SB31_10G_IMEZ) &&
(pci_func_id == 2))
goto err_out_free_adapter;
#endif /* CONFIG_PPC */
/* /*
* Adapter in our case is quad port so initialize it before * Adapter in our case is quad port so initialize it before
* initializing the ports * initializing the ports
...@@ -509,16 +500,22 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -509,16 +500,22 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
NETXEN_CAM_RAM(0x1fc))); NETXEN_CAM_RAM(0x1fc)));
if (val == 0x55555555) { if (val == 0x55555555) {
/* This is the first boot after power up */ /* This is the first boot after power up */
netxen_nic_read_w0(adapter, NETXEN_PCIE_REG(0x4), &val);
if (!(val & 0x4)) {
val |= 0x4;
netxen_nic_write_w0(adapter, NETXEN_PCIE_REG(0x4), val);
netxen_nic_read_w0(adapter, NETXEN_PCIE_REG(0x4), &val);
}
val = readl(NETXEN_CRB_NORMALIZE(adapter, val = readl(NETXEN_CRB_NORMALIZE(adapter,
NETXEN_ROMUSB_GLB_SW_RESET)); NETXEN_ROMUSB_GLB_SW_RESET));
printk(KERN_INFO"NetXen: read 0x%08x for reset reg.\n",val); printk(KERN_INFO"NetXen: read 0x%08x for reset reg.\n",val);
if (val != 0x80000f) { if (val != 0x80000f) {
/* clear the register for future unloads/loads */ /* clear the register for future unloads/loads */
writel(0, NETXEN_CRB_NORMALIZE(adapter, writel(0, NETXEN_CRB_NORMALIZE(adapter,
NETXEN_CAM_RAM(0x1fc))); NETXEN_CAM_RAM(0x1fc)));
printk(KERN_ERR "ERROR in NetXen HW init sequence.\n"); printk(KERN_ERR "ERROR in NetXen HW init sequence.\n");
err = -ENODEV; err = -ENODEV;
goto err_out_free_dev; goto err_out_free_dev;
} }
/* clear the register for future unloads/loads */ /* clear the register for future unloads/loads */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment