|
@@ -2215,7 +2215,6 @@ static void sh_eth_tsu_init(struct sh_eth_private *mdp)
|
|
|
/* MDIO bus release function */
|
|
|
static int sh_mdio_release(struct net_device *ndev)
|
|
|
{
|
|
|
- struct sh_eth_private *mdp = netdev_priv(ndev);
|
|
|
struct mii_bus *bus = dev_get_drvdata(&ndev->dev);
|
|
|
|
|
|
/* unregister mdio bus */
|
|
@@ -2224,15 +2223,9 @@ static int sh_mdio_release(struct net_device *ndev)
|
|
|
/* remove mdio bus info from net_device */
|
|
|
dev_set_drvdata(&ndev->dev, NULL);
|
|
|
|
|
|
- /* free interrupts memory */
|
|
|
- kfree(bus->irq);
|
|
|
-
|
|
|
/* free bitbang info */
|
|
|
free_mdio_bitbang(bus);
|
|
|
|
|
|
- /* free bitbang memory */
|
|
|
- kfree(mdp->bitbang);
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -2245,7 +2238,8 @@ static int sh_mdio_init(struct net_device *ndev, int id,
|
|
|
struct sh_eth_private *mdp = netdev_priv(ndev);
|
|
|
|
|
|
/* create bit control struct for PHY */
|
|
|
- bitbang = kzalloc(sizeof(struct bb_info), GFP_KERNEL);
|
|
|
+ bitbang = devm_kzalloc(&ndev->dev, sizeof(struct bb_info),
|
|
|
+ GFP_KERNEL);
|
|
|
if (!bitbang) {
|
|
|
ret = -ENOMEM;
|
|
|
goto out;
|
|
@@ -2261,11 +2255,10 @@ static int sh_mdio_init(struct net_device *ndev, int id,
|
|
|
bitbang->ctrl.ops = &bb_ops;
|
|
|
|
|
|
/* MII controller setting */
|
|
|
- mdp->bitbang = bitbang;
|
|
|
mdp->mii_bus = alloc_mdio_bitbang(&bitbang->ctrl);
|
|
|
if (!mdp->mii_bus) {
|
|
|
ret = -ENOMEM;
|
|
|
- goto out_free_bitbang;
|
|
|
+ goto out;
|
|
|
}
|
|
|
|
|
|
/* Hook up MII support for ethtool */
|
|
@@ -2275,7 +2268,9 @@ static int sh_mdio_init(struct net_device *ndev, int id,
|
|
|
mdp->pdev->name, id);
|
|
|
|
|
|
/* PHY IRQ */
|
|
|
- mdp->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
|
|
|
+ mdp->mii_bus->irq = devm_kzalloc(&ndev->dev,
|
|
|
+ sizeof(int) * PHY_MAX_ADDR,
|
|
|
+ GFP_KERNEL);
|
|
|
if (!mdp->mii_bus->irq) {
|
|
|
ret = -ENOMEM;
|
|
|
goto out_free_bus;
|
|
@@ -2287,21 +2282,15 @@ static int sh_mdio_init(struct net_device *ndev, int id,
|
|
|
/* register mdio bus */
|
|
|
ret = mdiobus_register(mdp->mii_bus);
|
|
|
if (ret)
|
|
|
- goto out_free_irq;
|
|
|
+ goto out_free_bus;
|
|
|
|
|
|
dev_set_drvdata(&ndev->dev, mdp->mii_bus);
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
-out_free_irq:
|
|
|
- kfree(mdp->mii_bus->irq);
|
|
|
-
|
|
|
out_free_bus:
|
|
|
free_mdio_bitbang(mdp->mii_bus);
|
|
|
|
|
|
-out_free_bitbang:
|
|
|
- kfree(bitbang);
|
|
|
-
|
|
|
out:
|
|
|
return ret;
|
|
|
}
|
|
@@ -2389,10 +2378,9 @@ static int sh_eth_drv_probe(struct platform_device *pdev)
|
|
|
mdp = netdev_priv(ndev);
|
|
|
mdp->num_tx_ring = TX_RING_SIZE;
|
|
|
mdp->num_rx_ring = RX_RING_SIZE;
|
|
|
- mdp->addr = ioremap(res->start, resource_size(res));
|
|
|
- if (mdp->addr == NULL) {
|
|
|
- ret = -ENOMEM;
|
|
|
- dev_err(&pdev->dev, "ioremap failed.\n");
|
|
|
+ mdp->addr = devm_ioremap_resource(&pdev->dev, res);
|
|
|
+ if (IS_ERR(mdp->addr)) {
|
|
|
+ ret = PTR_ERR(mdp->addr);
|
|
|
goto out_release;
|
|
|
}
|
|
|
|
|
@@ -2438,11 +2426,9 @@ static int sh_eth_drv_probe(struct platform_device *pdev)
|
|
|
ret = -ENODEV;
|
|
|
goto out_release;
|
|
|
}
|
|
|
- mdp->tsu_addr = ioremap(rtsu->start,
|
|
|
- resource_size(rtsu));
|
|
|
- if (mdp->tsu_addr == NULL) {
|
|
|
- ret = -ENOMEM;
|
|
|
- dev_err(&pdev->dev, "TSU ioremap failed.\n");
|
|
|
+ mdp->tsu_addr = devm_ioremap_resource(&pdev->dev, rtsu);
|
|
|
+ if (IS_ERR(mdp->tsu_addr)) {
|
|
|
+ ret = PTR_ERR(mdp->tsu_addr);
|
|
|
goto out_release;
|
|
|
}
|
|
|
mdp->port = devno % 2;
|
|
@@ -2483,10 +2469,6 @@ out_unregister:
|
|
|
|
|
|
out_release:
|
|
|
/* net_dev free */
|
|
|
- if (mdp && mdp->addr)
|
|
|
- iounmap(mdp->addr);
|
|
|
- if (mdp && mdp->tsu_addr)
|
|
|
- iounmap(mdp->tsu_addr);
|
|
|
if (ndev)
|
|
|
free_netdev(ndev);
|
|
|
|
|
@@ -2499,12 +2481,9 @@ static int sh_eth_drv_remove(struct platform_device *pdev)
|
|
|
struct net_device *ndev = platform_get_drvdata(pdev);
|
|
|
struct sh_eth_private *mdp = netdev_priv(ndev);
|
|
|
|
|
|
- if (mdp->cd->tsu)
|
|
|
- iounmap(mdp->tsu_addr);
|
|
|
sh_mdio_release(ndev);
|
|
|
unregister_netdev(ndev);
|
|
|
pm_runtime_disable(&pdev->dev);
|
|
|
- iounmap(mdp->addr);
|
|
|
free_netdev(ndev);
|
|
|
platform_set_drvdata(pdev, NULL);
|
|
|
|