summaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/xscale
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2020-01-12 13:04:49 +0100
committerJakub Kicinski <kuba@kernel.org>2020-01-12 21:59:53 +0100
commitf458ac479777c627c9b92ab640afec3bfa150660 (patch)
tree0e01d6af77d9021d30dc2e1acd5cc4df2349d810 /drivers/net/ethernet/xscale
parentnet: ehernet: ixp4xx: Use netdev_* messages (diff)
downloadlinux-f458ac479777c627c9b92ab640afec3bfa150660.tar.xz
linux-f458ac479777c627c9b92ab640afec3bfa150660.zip
ARM/net: ixp4xx: Pass ethernet physical base as resource
In order to probe this ethernet interface from the device tree all physical MMIO regions must be passed as resources. Begin this rewrite by first passing the port base address as a resource for all platforms using this driver, remap it in the driver and avoid using any reference of the statically mapped virtual address in the driver. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers/net/ethernet/xscale')
-rw-r--r--drivers/net/ethernet/xscale/ixp4xx_eth.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/net/ethernet/xscale/ixp4xx_eth.c b/drivers/net/ethernet/xscale/ixp4xx_eth.c
index f7edf8b38dea..ee45215c4ba4 100644
--- a/drivers/net/ethernet/xscale/ixp4xx_eth.c
+++ b/drivers/net/ethernet/xscale/ixp4xx_eth.c
@@ -1365,9 +1365,10 @@ static int ixp4xx_eth_probe(struct platform_device *pdev)
struct phy_device *phydev = NULL;
struct device *dev = &pdev->dev;
struct eth_plat_info *plat;
+ resource_size_t regs_phys;
struct net_device *ndev;
+ struct resource *res;
struct port *port;
- u32 regs_phys;
int err;
plat = dev_get_platdata(dev);
@@ -1380,13 +1381,18 @@ static int ixp4xx_eth_probe(struct platform_device *pdev)
port->netdev = ndev;
port->id = pdev->id;
+ /* Get the port resource and remap */
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!res)
+ return -ENODEV;
+ regs_phys = res->start;
+ port->regs = devm_ioremap_resource(dev, res);
+
switch (port->id) {
case IXP4XX_ETH_NPEA:
/* If the MDIO bus is not up yet, defer probe */
if (!mdio_bus)
return -EPROBE_DEFER;
- port->regs = (struct eth_regs __iomem *)IXP4XX_EthA_BASE_VIRT;
- regs_phys = IXP4XX_EthA_BASE_PHYS;
break;
case IXP4XX_ETH_NPEB:
/*
@@ -1399,13 +1405,11 @@ static int ixp4xx_eth_probe(struct platform_device *pdev)
IXP4XX_FEATURE_NPEB_ETH0))
return -ENODEV;
/* Else register the MDIO bus on NPE-B */
- if ((err = ixp4xx_mdio_register(IXP4XX_EthC_BASE_VIRT)))
+ if ((err = ixp4xx_mdio_register(port->regs)))
return err;
}
if (!mdio_bus)
return -EPROBE_DEFER;
- port->regs = (struct eth_regs __iomem *)IXP4XX_EthB_BASE_VIRT;
- regs_phys = IXP4XX_EthB_BASE_PHYS;
break;
case IXP4XX_ETH_NPEC:
/*
@@ -1417,13 +1421,11 @@ static int ixp4xx_eth_probe(struct platform_device *pdev)
IXP4XX_FEATURE_NPEC_ETH))
return -ENODEV;
/* Else register the MDIO bus on NPE-C */
- if ((err = ixp4xx_mdio_register(IXP4XX_EthC_BASE_VIRT)))
+ if ((err = ixp4xx_mdio_register(port->regs)))
return err;
}
if (!mdio_bus)
return -EPROBE_DEFER;
- port->regs = (struct eth_regs __iomem *)IXP4XX_EthC_BASE_VIRT;
- regs_phys = IXP4XX_EthC_BASE_PHYS;
break;
default:
return -ENODEV;