Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 17007aa5 authored by David S. Miller's avatar David S. Miller
Browse files

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: default avatarDavid S. Miller <davem@davemloft.net>
parents 915af656 7627fc07
Loading
Loading
Loading
Loading
+26 −54
Original line number Diff line number Diff line
@@ -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");