summaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorBin Meng <bmeng.cn@gmail.com>2015-10-07 21:32:39 -0700
committerJoe Hershberger <joe.hershberger@ni.com>2015-10-29 14:05:50 -0500
commit3f616b6053517927f564fc8ed6dc4a87bd39e857 (patch)
tree161e9b0c0f5849c3146410694e7807fe03078241 /drivers/net
parent5d2459fd466ebf86c717ccb28a8f56707a29724a (diff)
downloadtalos-obmc-uboot-3f616b6053517927f564fc8ed6dc4a87bd39e857.tar.gz
talos-obmc-uboot-3f616b6053517927f564fc8ed6dc4a87bd39e857.zip
net: pch_gbe: Add driver remove support
In pch_gbe_probe(), some additional resources are allocated (eg: mdio, phy). We should free these in the driver remove phase. Add pch_gbe_remove() to clean it up. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/pch_gbe.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/net/pch_gbe.c b/drivers/net/pch_gbe.c
index 004fcf88c2..dfc01000fc 100644
--- a/drivers/net/pch_gbe.c
+++ b/drivers/net/pch_gbe.c
@@ -452,6 +452,17 @@ int pch_gbe_probe(struct udevice *dev)
return pch_gbe_phy_init(dev);
}
+int pch_gbe_remove(struct udevice *dev)
+{
+ struct pch_gbe_priv *priv = dev_get_priv(dev);
+
+ free(priv->phydev);
+ mdio_unregister(priv->bus);
+ mdio_free(priv->bus);
+
+ return 0;
+}
+
static const struct eth_ops pch_gbe_ops = {
.start = pch_gbe_start,
.send = pch_gbe_send,
@@ -470,6 +481,7 @@ U_BOOT_DRIVER(eth_pch_gbe) = {
.id = UCLASS_ETH,
.of_match = pch_gbe_ids,
.probe = pch_gbe_probe,
+ .remove = pch_gbe_remove,
.ops = &pch_gbe_ops,
.priv_auto_alloc_size = sizeof(struct pch_gbe_priv),
.platdata_auto_alloc_size = sizeof(struct eth_pdata),
OpenPOWER on IntegriCloud