Commit c8200f4e authored by Linus Walleij's avatar Linus Walleij

net: ixp4xx_eth: Drop platform data support

All IXP4xx platforms are converted to device tree, the platform
data path is no longer used. Drop the code and custom include,
confine the driver in its own file.

Depend on OF and remove ifdefs around this, as we are all probing
from OF now.

Cc: David S. Miller <davem@davemloft.net>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: netdev@vger.kernel.org
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Acked-by: default avatarJakub Kicinski <kuba@kernel.org>
Link: https://lore.kernel.org/r/20220211223238.648934-9-linus.walleij@linaro.orgSigned-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 8754a7e6
...@@ -20,9 +20,9 @@ if NET_VENDOR_XSCALE ...@@ -20,9 +20,9 @@ if NET_VENDOR_XSCALE
config IXP4XX_ETH config IXP4XX_ETH
tristate "Intel IXP4xx Ethernet support" tristate "Intel IXP4xx Ethernet support"
depends on ARM && ARCH_IXP4XX && IXP4XX_NPE && IXP4XX_QMGR depends on ARM && ARCH_IXP4XX && IXP4XX_NPE && IXP4XX_QMGR && OF
select PHYLIB select PHYLIB
select OF_MDIO if OF select OF_MDIO
select NET_PTP_CLASSIFY select NET_PTP_CLASSIFY
help help
Say Y here if you want to use built-in Ethernet ports Say Y here if you want to use built-in Ethernet ports
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_mdio.h> #include <linux/of_mdio.h>
#include <linux/phy.h> #include <linux/phy.h>
#include <linux/platform_data/eth_ixp4xx.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/ptp_classify.h> #include <linux/ptp_classify.h>
#include <linux/slab.h> #include <linux/slab.h>
...@@ -38,6 +37,11 @@ ...@@ -38,6 +37,11 @@
#include <linux/soc/ixp4xx/npe.h> #include <linux/soc/ixp4xx/npe.h>
#include <linux/soc/ixp4xx/qmgr.h> #include <linux/soc/ixp4xx/qmgr.h>
#include <linux/soc/ixp4xx/cpu.h> #include <linux/soc/ixp4xx/cpu.h>
#include <linux/types.h>
#define IXP4XX_ETH_NPEA 0x00
#define IXP4XX_ETH_NPEB 0x10
#define IXP4XX_ETH_NPEC 0x20
#include "ixp46x_ts.h" #include "ixp46x_ts.h"
...@@ -147,6 +151,16 @@ typedef void buffer_t; ...@@ -147,6 +151,16 @@ typedef void buffer_t;
#define free_buffer_irq kfree #define free_buffer_irq kfree
#endif #endif
/* Information about built-in Ethernet MAC interfaces */
struct eth_plat_info {
u8 phy; /* MII PHY ID, 0 - 31 */
u8 rxq; /* configurable, currently 0 - 31 only */
u8 txreadyq;
u8 hwaddr[6];
u8 npe; /* NPE instance used by this interface */
bool has_mdio; /* If this instance has an MDIO bus */
};
struct eth_regs { struct eth_regs {
u32 tx_control[2], __res1[2]; /* 000 */ u32 tx_control[2], __res1[2]; /* 000 */
u32 rx_control[2], __res2[2]; /* 010 */ u32 rx_control[2], __res2[2]; /* 010 */
...@@ -1366,7 +1380,6 @@ static const struct net_device_ops ixp4xx_netdev_ops = { ...@@ -1366,7 +1380,6 @@ static const struct net_device_ops ixp4xx_netdev_ops = {
.ndo_validate_addr = eth_validate_addr, .ndo_validate_addr = eth_validate_addr,
}; };
#ifdef CONFIG_OF
static struct eth_plat_info *ixp4xx_of_get_platdata(struct device *dev) static struct eth_plat_info *ixp4xx_of_get_platdata(struct device *dev)
{ {
struct device_node *np = dev->of_node; struct device_node *np = dev->of_node;
...@@ -1417,12 +1430,6 @@ static struct eth_plat_info *ixp4xx_of_get_platdata(struct device *dev) ...@@ -1417,12 +1430,6 @@ static struct eth_plat_info *ixp4xx_of_get_platdata(struct device *dev)
return plat; return plat;
} }
#else
static struct eth_plat_info *ixp4xx_of_get_platdata(struct device *dev)
{
return NULL;
}
#endif
static int ixp4xx_eth_probe(struct platform_device *pdev) static int ixp4xx_eth_probe(struct platform_device *pdev)
{ {
...@@ -1434,49 +1441,9 @@ static int ixp4xx_eth_probe(struct platform_device *pdev) ...@@ -1434,49 +1441,9 @@ static int ixp4xx_eth_probe(struct platform_device *pdev)
struct port *port; struct port *port;
int err; int err;
if (np) { plat = ixp4xx_of_get_platdata(dev);
plat = ixp4xx_of_get_platdata(dev); if (!plat)
if (!plat) return -ENODEV;
return -ENODEV;
} else {
plat = dev_get_platdata(dev);
if (!plat)
return -ENODEV;
plat->npe = pdev->id;
switch (plat->npe) {
case IXP4XX_ETH_NPEA:
/* If the MDIO bus is not up yet, defer probe */
break;
case IXP4XX_ETH_NPEB:
/* On all except IXP43x, NPE-B is used for the MDIO bus.
* If there is no NPE-B in the feature set, bail out,
* else we have the MDIO bus here.
*/
if (!cpu_is_ixp43x()) {
if (!(ixp4xx_read_feature_bits() &
IXP4XX_FEATURE_NPEB_ETH0))
return -ENODEV;
/* Else register the MDIO bus on NPE-B */
plat->has_mdio = true;
}
break;
case IXP4XX_ETH_NPEC:
/* IXP43x lacks NPE-B and uses NPE-C for the MDIO bus
* access, if there is no NPE-C, no bus, nothing works,
* so bail out.
*/
if (cpu_is_ixp43x()) {
if (!(ixp4xx_read_feature_bits() &
IXP4XX_FEATURE_NPEC_ETH))
return -ENODEV;
/* Else register the MDIO bus on NPE-B */
plat->has_mdio = true;
}
break;
default:
return -ENODEV;
}
}
if (!(ndev = devm_alloc_etherdev(dev, sizeof(struct port)))) if (!(ndev = devm_alloc_etherdev(dev, sizeof(struct port))))
return -ENOMEM; return -ENOMEM;
...@@ -1530,21 +1497,7 @@ static int ixp4xx_eth_probe(struct platform_device *pdev) ...@@ -1530,21 +1497,7 @@ static int ixp4xx_eth_probe(struct platform_device *pdev)
__raw_writel(DEFAULT_CORE_CNTRL, &port->regs->core_control); __raw_writel(DEFAULT_CORE_CNTRL, &port->regs->core_control);
udelay(50); udelay(50);
if (np) { phydev = of_phy_get_and_connect(ndev, np, ixp4xx_adjust_link);
phydev = of_phy_get_and_connect(ndev, np, ixp4xx_adjust_link);
} else {
phydev = mdiobus_get_phy(mdio_bus, plat->phy);
if (!phydev) {
err = -ENODEV;
dev_err(dev, "could not connect phydev (%d)\n", err);
goto err_free_mem;
}
err = phy_connect_direct(ndev, phydev, ixp4xx_adjust_link,
PHY_INTERFACE_MODE_MII);
if (err)
goto err_free_mem;
}
if (!phydev) { if (!phydev) {
err = -ENODEV; err = -ENODEV;
dev_err(dev, "no phydev\n"); dev_err(dev, "no phydev\n");
......
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __PLATFORM_DATA_ETH_IXP4XX
#define __PLATFORM_DATA_ETH_IXP4XX
#include <linux/types.h>
#define IXP4XX_ETH_NPEA 0x00
#define IXP4XX_ETH_NPEB 0x10
#define IXP4XX_ETH_NPEC 0x20
/* Information about built-in Ethernet MAC interfaces */
struct eth_plat_info {
u8 phy; /* MII PHY ID, 0 - 31 */
u8 rxq; /* configurable, currently 0 - 31 only */
u8 txreadyq;
u8 hwaddr[6];
u8 npe; /* NPE instance used by this interface */
bool has_mdio; /* If this instance has an MDIO bus */
};
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment