Commit 2a3e8e93 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by David S. Miller

stmmac: pci: use managed resources

Migrate pci driver to managed resources to reduce boilerplate error handling
code.
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3be3d81b
...@@ -71,46 +71,37 @@ static void stmmac_default_data(void) ...@@ -71,46 +71,37 @@ static void stmmac_default_data(void)
static int stmmac_pci_probe(struct pci_dev *pdev, static int stmmac_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *id) const struct pci_device_id *id)
{ {
int ret = 0; struct stmmac_priv *priv;
void __iomem *addr = NULL;
struct stmmac_priv *priv = NULL;
int i; int i;
int ret;
/* Enable pci device */ /* Enable pci device */
ret = pci_enable_device(pdev); ret = pcim_enable_device(pdev);
if (ret) { if (ret) {
pr_err("%s : ERROR: failed to enable %s device\n", __func__, pr_err("%s : ERROR: failed to enable %s device\n", __func__,
pci_name(pdev)); pci_name(pdev));
return ret; return ret;
} }
if (pci_request_regions(pdev, STMMAC_RESOURCE_NAME)) {
pr_err("%s: ERROR: failed to get PCI region\n", __func__);
ret = -ENODEV;
goto err_out_req_reg_failed;
}
/* Get the base address of device */ /* Get the base address of device */
for (i = 0; i <= PCI_STD_RESOURCE_END; i++) { for (i = 0; i <= PCI_STD_RESOURCE_END; i++) {
if (pci_resource_len(pdev, i) == 0) if (pci_resource_len(pdev, i) == 0)
continue; continue;
addr = pci_iomap(pdev, i, 0); ret = pcim_iomap_regions(pdev, BIT(i), pci_name(pdev));
if (addr == NULL) { if (ret)
pr_err("%s: ERROR: cannot map register memory aborting", return ret;
__func__);
ret = -EIO;
goto err_out_map_failed;
}
break; break;
} }
pci_set_master(pdev); pci_set_master(pdev);
stmmac_default_data(); stmmac_default_data();
priv = stmmac_dvr_probe(&(pdev->dev), &plat_dat, addr); priv = stmmac_dvr_probe(&pdev->dev, &plat_dat,
pcim_iomap_table(pdev)[i]);
if (IS_ERR(priv)) { if (IS_ERR(priv)) {
pr_err("%s: main driver probe failed", __func__); pr_err("%s: main driver probe failed", __func__);
ret = PTR_ERR(priv); return PTR_ERR(priv);
goto err_out;
} }
priv->dev->irq = pdev->irq; priv->dev->irq = pdev->irq;
priv->wol_irq = pdev->irq; priv->wol_irq = pdev->irq;
...@@ -120,15 +111,6 @@ static int stmmac_pci_probe(struct pci_dev *pdev, ...@@ -120,15 +111,6 @@ static int stmmac_pci_probe(struct pci_dev *pdev,
pr_debug("STMMAC platform driver registration completed"); pr_debug("STMMAC platform driver registration completed");
return 0; return 0;
err_out:
pci_clear_master(pdev);
err_out_map_failed:
pci_release_regions(pdev);
err_out_req_reg_failed:
pci_disable_device(pdev);
return ret;
} }
/** /**
...@@ -141,13 +123,8 @@ static int stmmac_pci_probe(struct pci_dev *pdev, ...@@ -141,13 +123,8 @@ static int stmmac_pci_probe(struct pci_dev *pdev,
static void stmmac_pci_remove(struct pci_dev *pdev) static void stmmac_pci_remove(struct pci_dev *pdev)
{ {
struct net_device *ndev = pci_get_drvdata(pdev); struct net_device *ndev = pci_get_drvdata(pdev);
struct stmmac_priv *priv = netdev_priv(ndev);
stmmac_dvr_remove(ndev); stmmac_dvr_remove(ndev);
pci_iounmap(pdev, priv->ioaddr);
pci_release_regions(pdev);
pci_disable_device(pdev);
} }
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP
......
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