[OpenWrt-Devel] [PATCH v2] lantiq, xrx200-net: add devicetree aliases support for port->mac mapping

Martin Schiller mschiller at tdt.de
Mon Dec 14 04:18:49 EST 2015


This patch adds devicetree aliases support, which makes it possible to
renumber the physical mac ports.

This change has only cosmetical reasons (e.g. appearance in swconfig,
kernel messages on link change).

Signed-off-by: Martin Schiller <mschiller at tdt.de>
---
Changes in v2:
- use devicetree aliases instead of 'id' property
- only map ports, which are "configured" in the devicetree

 .../0025-NET-MIPS-lantiq-adds-xrx200-net.patch     | 46 ++++++++++++++++------
 1 file changed, 33 insertions(+), 13 deletions(-)

diff --git a/target/linux/lantiq/patches-4.1/0025-NET-MIPS-lantiq-adds-xrx200-net.patch b/target/linux/lantiq/patches-4.1/0025-NET-MIPS-lantiq-adds-xrx200-net.patch
index 48c7395..c76c165 100644
--- a/target/linux/lantiq/patches-4.1/0025-NET-MIPS-lantiq-adds-xrx200-net.patch
+++ b/target/linux/lantiq/patches-4.1/0025-NET-MIPS-lantiq-adds-xrx200-net.patch
@@ -209,7 +209,7 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
 +};
 --- /dev/null
 +++ b/drivers/net/ethernet/lantiq_xrx200.c
-@@ -0,0 +1,1798 @@
+@@ -0,0 +1,1818 @@
 +/*
 + *   This program is free software; you can redistribute it and/or modify it
 + *   under the terms of the GNU General Public License version 2 as published
@@ -404,6 +404,7 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
 +
 +struct xrx200_port {
 +	u8 num;
++	u8 id;
 +	u8 phy_addr;
 +	u16 flags;
 +	phy_interface_t phy_if;
@@ -461,6 +462,9 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
 +	struct xrx200_hw *hw;
 +};
 +
++static int id_to_mac[XRX200_MAX_PORT] = {-1,-1,-1,-1,-1,-1,6};
++static int mac_to_id[XRX200_MAX_PORT] = {-1,-1,-1,-1,-1,-1,6};
++
 +static __iomem void *xrx200_switch_membase;
 +static __iomem void *xrx200_mii_membase;
 +static __iomem void *xrx200_mdio_membase;
@@ -789,9 +793,13 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
 +	{
 +		struct switch_port *p = &val->value.ports[i];
 +
-+		portmap |= (1 << p->id);
++		if (id_to_mac[p->id] < 0) {
++			continue;
++		}
++
++		portmap |= (1 << id_to_mac[p->id]);
 +		if (p->flags & (1 << SWITCH_PORT_FLAG_TAGGED))
-+			tagmap |= (1 << p->id);
++			tagmap |= (1 << id_to_mac[p->id]);
 +	}
 +
 +	tem.table = XRX200_PCE_VLANMAP_IDX;
@@ -855,7 +863,7 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
 +			continue;
 +
 +		p = &val->value.ports[val->len++];
-+		p->id = i;
++		p->id = mac_to_id[i];
 +		if (tags & (1 << i))
 +			p->flags = (1 << SWITCH_PORT_FLAG_TAGGED);
 +		else
@@ -898,11 +906,12 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
 +}
 +
 +// port
-+static int xrx200sw_get_port_pvid(struct switch_dev *dev, int port, int *val)
++static int xrx200sw_get_port_pvid(struct switch_dev *dev, int port_id, int *val)
 +{
++	int port = id_to_mac[port_id];
 +	struct xrx200_pce_table_entry tev;
 +
-+	if (port >= XRX200_MAX_PORT)
++	if (port < 0 || port >= XRX200_MAX_PORT)
 +		return -EINVAL;
 +
 +	tev.table = XRX200_PCE_ACTVLAN_IDX;
@@ -914,10 +923,12 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
 +}
 +
 +static int xrx200sw_get_port_link(struct switch_dev *dev,
-+				  int port,
++				  int port_id,
 +				  struct switch_port_link *link)
 +{
-+	if (port >= XRX200_MAX_PORT)
++	int port = id_to_mac[port_id];
++
++	if (port < 0 || port >= XRX200_MAX_PORT)
 +		return -EINVAL;
 +
 +	link->link = xrx200sw_read_x(XRX200_MAC_PSTAT_LSTAT, port);
@@ -1432,7 +1443,7 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
 +			xrx200_gmac_update(&priv->port[i]);
 +			priv->port[i].link = priv->port[i].phydev->link;
 +			netdev_info(dev, "port %d %s link\n",
-+				priv->port[i].num,
++				priv->port[i].id,
 +				(priv->port[i].link)?("got"):("lost"));
 +		}
 +	}
@@ -1633,7 +1644,7 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
 +	for (i = 0; i < priv->num_port; i++)
 +		if (xrx200_mdio_probe(dev, &priv->port[i]))
 +			pr_warn("xrx200-mdio: probing phy of port %d failed\n",
-+					 priv->port[i].num);
++					 priv->port[i].id);
 +
 +	return 0;
 +
@@ -1787,19 +1798,24 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
 +
 +static void xrx200_of_port(struct xrx200_priv *priv, struct device_node *port)
 +{
-+	const __be32 *addr, *id = of_get_property(port, "reg", NULL);
++	const __be32 *addr, *mac = of_get_property(port, "reg", NULL);
 +	struct xrx200_port *p = &priv->port[priv->num_port];
++	int id = of_alias_get_id(port, "ethernet");
 +
-+	if (!id)
++	if (!mac)
 +		return;
 +
++	if (id < 0)
++		id = *mac;
++
 +	memset(p, 0, sizeof(struct xrx200_port));
 +	p->phy_node = of_parse_phandle(port, "phy-handle", 0);
 +	addr = of_get_property(p->phy_node, "reg", NULL);
 +	if (!addr)
 +		return;
 +
-+	p->num = *id;
++	p->num = *mac;
++	p->id = id;
 +	p->phy_addr = *addr;
 +	p->phy_if = of_get_phy_mode(port);
 +	if (p->phy_addr > 0x10)
@@ -1824,6 +1840,10 @@ Subject: [PATCH 25/36] NET: MIPS: lantiq: adds xrx200-net
 +
 +	/* store the port id in the hw struct so we can map ports -> devices */
 +	priv->hw->port_map[p->num] = priv->hw->num_devs;
++
++	/* store the id <-> mac (port) mapping */
++	id_to_mac[p->id] = p->num;
++	mac_to_id[p->num] = p->id;
 +}
 +
 +static const struct net_device_ops xrx200_netdev_ops = {
-- 
2.1.4
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list