|
@@ -12464,6 +12464,28 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
|
|
goto err_out_iounmap;
|
|
|
}
|
|
|
|
|
|
+ if (tp->tg3_flags3 & TG3_FLG3_ENABLE_APE) {
|
|
|
+ if (!(pci_resource_flags(pdev, 2) & IORESOURCE_MEM)) {
|
|
|
+ printk(KERN_ERR PFX "Cannot find proper PCI device "
|
|
|
+ "base address for APE, aborting.\n");
|
|
|
+ err = -ENODEV;
|
|
|
+ goto err_out_iounmap;
|
|
|
+ }
|
|
|
+
|
|
|
+ tg3reg_base = pci_resource_start(pdev, 2);
|
|
|
+ tg3reg_len = pci_resource_len(pdev, 2);
|
|
|
+
|
|
|
+ tp->aperegs = ioremap_nocache(tg3reg_base, tg3reg_len);
|
|
|
+ if (tp->aperegs == 0UL) {
|
|
|
+ printk(KERN_ERR PFX "Cannot map APE registers, "
|
|
|
+ "aborting.\n");
|
|
|
+ err = -ENOMEM;
|
|
|
+ goto err_out_iounmap;
|
|
|
+ }
|
|
|
+
|
|
|
+ tg3_ape_lock_init(tp);
|
|
|
+ }
|
|
|
+
|
|
|
/*
|
|
|
* Reset chip in case UNDI or EFI driver did not shutdown
|
|
|
* DMA self test will enable WDMAC and we'll see (spurious)
|
|
@@ -12478,7 +12500,7 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
|
|
err = tg3_test_dma(tp);
|
|
|
if (err) {
|
|
|
printk(KERN_ERR PFX "DMA engine test failed, aborting.\n");
|
|
|
- goto err_out_iounmap;
|
|
|
+ goto err_out_apeunmap;
|
|
|
}
|
|
|
|
|
|
/* Tigon3 can do ipv4 only... and some chips have buggy
|
|
@@ -12501,28 +12523,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
|
|
|
|
|
tg3_init_coal(tp);
|
|
|
|
|
|
- if (tp->tg3_flags3 & TG3_FLG3_ENABLE_APE) {
|
|
|
- if (!(pci_resource_flags(pdev, 2) & IORESOURCE_MEM)) {
|
|
|
- printk(KERN_ERR PFX "Cannot find proper PCI device "
|
|
|
- "base address for APE, aborting.\n");
|
|
|
- err = -ENODEV;
|
|
|
- goto err_out_iounmap;
|
|
|
- }
|
|
|
-
|
|
|
- tg3reg_base = pci_resource_start(pdev, 2);
|
|
|
- tg3reg_len = pci_resource_len(pdev, 2);
|
|
|
-
|
|
|
- tp->aperegs = ioremap_nocache(tg3reg_base, tg3reg_len);
|
|
|
- if (tp->aperegs == 0UL) {
|
|
|
- printk(KERN_ERR PFX "Cannot map APE registers, "
|
|
|
- "aborting.\n");
|
|
|
- err = -ENOMEM;
|
|
|
- goto err_out_iounmap;
|
|
|
- }
|
|
|
-
|
|
|
- tg3_ape_lock_init(tp);
|
|
|
- }
|
|
|
-
|
|
|
pci_set_drvdata(pdev, dev);
|
|
|
|
|
|
err = register_netdev(dev);
|