Merge branch 'stmmac-next'
Andy Shevchenko says: ==================== stmmac: pci: various cleanups and fixes There are few cleanups and fixes regarding to stmmac PCI driver. This has been tested on Intel Galileo board with recent net-next tree. Since v2: - drop patch 5/5 since it will be part of a big change across entire subsystem Since v1: - remove already applied patch - append patch 1/5 - rework patch 3/5 to be functional compatible with original code ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
17007aa53a
1 changed files with 26 additions and 54 deletions
|
@ -71,64 +71,46 @@ static void stmmac_default_data(void)
|
|||
static int stmmac_pci_probe(struct pci_dev *pdev,
|
||||
const struct pci_device_id *id)
|
||||
{
|
||||
int ret = 0;
|
||||
void __iomem *addr = NULL;
|
||||
struct stmmac_priv *priv = NULL;
|
||||
struct stmmac_priv *priv;
|
||||
int i;
|
||||
int ret;
|
||||
|
||||
/* Enable pci device */
|
||||
ret = pci_enable_device(pdev);
|
||||
ret = pcim_enable_device(pdev);
|
||||
if (ret) {
|
||||
pr_err("%s : ERROR: failed to enable %s device\n", __func__,
|
||||
pci_name(pdev));
|
||||
dev_err(&pdev->dev, "%s: ERROR: failed to enable device\n",
|
||||
__func__);
|
||||
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 */
|
||||
for (i = 0; i <= 5; i++) {
|
||||
for (i = 0; i <= PCI_STD_RESOURCE_END; i++) {
|
||||
if (pci_resource_len(pdev, i) == 0)
|
||||
continue;
|
||||
addr = pci_iomap(pdev, i, 0);
|
||||
if (addr == NULL) {
|
||||
pr_err("%s: ERROR: cannot map register memory aborting",
|
||||
__func__);
|
||||
ret = -EIO;
|
||||
goto err_out_map_failed;
|
||||
}
|
||||
ret = pcim_iomap_regions(pdev, BIT(i), pci_name(pdev));
|
||||
if (ret)
|
||||
return ret;
|
||||
break;
|
||||
}
|
||||
|
||||
pci_set_master(pdev);
|
||||
|
||||
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)) {
|
||||
pr_err("%s: main driver probe failed", __func__);
|
||||
ret = PTR_ERR(priv);
|
||||
goto err_out;
|
||||
dev_err(&pdev->dev, "%s: main driver probe failed\n", __func__);
|
||||
return PTR_ERR(priv);
|
||||
}
|
||||
priv->dev->irq = pdev->irq;
|
||||
priv->wol_irq = pdev->irq;
|
||||
|
||||
pci_set_drvdata(pdev, priv->dev);
|
||||
|
||||
pr_debug("STMMAC platform driver registration completed");
|
||||
dev_dbg(&pdev->dev, "STMMAC PCI driver registration completed\n");
|
||||
|
||||
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,39 +123,30 @@ static int stmmac_pci_probe(struct pci_dev *pdev,
|
|||
static void stmmac_pci_remove(struct pci_dev *pdev)
|
||||
{
|
||||
struct net_device *ndev = pci_get_drvdata(pdev);
|
||||
struct stmmac_priv *priv = netdev_priv(ndev);
|
||||
|
||||
stmmac_dvr_remove(ndev);
|
||||
|
||||
pci_iounmap(pdev, priv->ioaddr);
|
||||
pci_release_regions(pdev);
|
||||
pci_disable_device(pdev);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static int stmmac_pci_suspend(struct pci_dev *pdev, pm_message_t state)
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int stmmac_pci_suspend(struct device *dev)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(dev);
|
||||
struct net_device *ndev = pci_get_drvdata(pdev);
|
||||
int ret;
|
||||
|
||||
ret = stmmac_suspend(ndev);
|
||||
pci_save_state(pdev);
|
||||
pci_set_power_state(pdev, pci_choose_state(pdev, state));
|
||||
|
||||
return ret;
|
||||
return stmmac_suspend(ndev);
|
||||
}
|
||||
|
||||
static int stmmac_pci_resume(struct pci_dev *pdev)
|
||||
static int stmmac_pci_resume(struct device *dev)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(dev);
|
||||
struct net_device *ndev = pci_get_drvdata(pdev);
|
||||
|
||||
pci_set_power_state(pdev, PCI_D0);
|
||||
pci_restore_state(pdev);
|
||||
|
||||
return stmmac_resume(ndev);
|
||||
}
|
||||
#endif
|
||||
|
||||
static SIMPLE_DEV_PM_OPS(stmmac_pm_ops, stmmac_pci_suspend, stmmac_pci_resume);
|
||||
|
||||
#define STMMAC_VENDOR_ID 0x700
|
||||
#define STMMAC_DEVICE_ID 0x1108
|
||||
|
||||
|
@ -190,10 +163,9 @@ struct pci_driver stmmac_pci_driver = {
|
|||
.id_table = stmmac_id_table,
|
||||
.probe = stmmac_pci_probe,
|
||||
.remove = stmmac_pci_remove,
|
||||
#ifdef CONFIG_PM
|
||||
.suspend = stmmac_pci_suspend,
|
||||
.resume = stmmac_pci_resume,
|
||||
#endif
|
||||
.driver = {
|
||||
.pm = &stmmac_pm_ops,
|
||||
},
|
||||
};
|
||||
|
||||
MODULE_DESCRIPTION("STMMAC 10/100/1000 Ethernet PCI driver");
|
||||
|
|
Loading…
Reference in a new issue