summaryrefslogtreecommitdiffstats
path: root/drivers/net/designware.c
diff options
context:
space:
mode:
authorSteffen Trumtrar <s.trumtrar@pengutronix.de>2018-01-10 09:14:17 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2018-01-11 09:34:33 +0100
commitc1f902841ce3c759a4dddbf02ccc8012e4c50162 (patch)
tree0776271a5df71a70d39f6b2f605554cd8be2b2ed /drivers/net/designware.c
parent896894088e7de081caddb5fc8dc653bc0f5ac7bb (diff)
downloadbarebox-c1f902841ce3c759a4dddbf02ccc8012e4c50162.tar.gz
barebox-c1f902841ce3c759a4dddbf02ccc8012e4c50162.tar.xz
net: designware: move probe to generic driver
The designware ethernet core is used on multiple different SoCs. The linux kernel has a generic driver and SoC-specific drivers. Do the same here. Signed-off-by: Steffen Trumtrar <s.trumtrar@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/net/designware.c')
-rw-r--r--drivers/net/designware.c60
1 files changed, 6 insertions, 54 deletions
diff --git a/drivers/net/designware.c b/drivers/net/designware.c
index 1d3a68384e..ec20da09b3 100644
--- a/drivers/net/designware.c
+++ b/drivers/net/designware.c
@@ -32,36 +32,6 @@
#include <linux/err.h>
#include "designware.h"
-struct dw_eth_dev {
- struct eth_device netdev;
- struct mii_bus miibus;
-
- void (*fix_mac_speed)(int speed);
- u8 macaddr[6];
- u32 tx_currdescnum;
- u32 rx_currdescnum;
-
- struct dmamacdescr *tx_mac_descrtable;
- struct dmamacdescr *rx_mac_descrtable;
-
- u8 *txbuffs;
- u8 *rxbuffs;
-
- struct eth_mac_regs *mac_regs_p;
- struct eth_dma_regs *dma_regs_p;
- int phy_addr;
- phy_interface_t interface;
- int enh_desc;
-};
-
-struct dw_eth_drvdata {
- bool enh_desc;
-};
-
-static struct dw_eth_drvdata dwmac_370a_drvdata = {
- .enh_desc = 1,
-};
-
/* Speed specific definitions */
#define SPEED_10M 1
#define SPEED_100M 2
@@ -447,7 +417,7 @@ static int dwc_probe_dt(struct device_d *dev, struct dw_eth_dev *priv)
return 0;
}
-static int dwc_ether_probe(struct device_d *dev)
+struct dw_eth_dev *dwc_drv_probe(struct device_d *dev)
{
struct resource *iores;
struct dw_eth_dev *priv;
@@ -462,7 +432,7 @@ static int dwc_ether_probe(struct device_d *dev)
ret = dev_get_drvdata(dev, (const void **)&drvdata);
if (ret)
- return ret;
+ return ERR_PTR(ret);
priv->enh_desc = drvdata->enh_desc;
@@ -473,12 +443,12 @@ static int dwc_ether_probe(struct device_d *dev)
} else {
ret = dwc_probe_dt(dev, priv);
if (ret)
- return ret;
+ return ERR_PTR(ret);
}
iores = dev_request_mem_resource(dev, 0);
if (IS_ERR(iores))
- return PTR_ERR(iores);
+ return ERR_CAST(iores);
base = IOMEM(iores->start);
priv->mac_regs_p = base;
@@ -512,24 +482,6 @@ static int dwc_ether_probe(struct device_d *dev)
mdiobus_register(miibus);
eth_register(edev);
- return 0;
-}
-static __maybe_unused struct of_device_id dwc_ether_compatible[] = {
- {
- .compatible = "snps,dwmac-3.70a",
- .data = &dwmac_370a_drvdata,
- }, {
- .compatible = "snps,dwmac-3.72a",
- .data = &dwmac_370a_drvdata,
- }, {
- /* sentinel */
- }
-};
-
-static struct driver_d dwc_ether_driver = {
- .name = "designware_eth",
- .probe = dwc_ether_probe,
- .of_compatible = DRV_OF_COMPAT(dwc_ether_compatible),
-};
-device_platform_driver(dwc_ether_driver);
+ return priv;
+}