All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 1/2] net: dsa: add a dsa_port_is_enabled helper function
@ 2020-03-19 18:56 Vladimir Oltean
  2020-03-19 18:56 ` [PATCH net-next 2/2] net: dsa: sja1105: Avoid error message for unknown PHY mode on disabled ports Vladimir Oltean
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Vladimir Oltean @ 2020-03-19 18:56 UTC (permalink / raw)
  To: davem; +Cc: netdev, andrew, f.fainelli, vivien.didelot

From: Vladimir Oltean <vladimir.oltean@nxp.com>

Sometimes drivers need to do per-port operation outside the port DSA
methods, and in that case they typically iterate through their port list
themselves.

Give them an aid to skip ports that are disabled in the device tree
(which the DSA core already skips).

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
---
 include/net/dsa.h |  2 ++
 net/dsa/dsa2.c    | 29 +++++++++++++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git a/include/net/dsa.h b/include/net/dsa.h
index beeb81a532e3..813792e6f0be 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -376,6 +376,8 @@ static inline bool dsa_port_is_vlan_filtering(const struct dsa_port *dp)
 		return dp->vlan_filtering;
 }
 
+bool dsa_port_is_enabled(struct dsa_switch *ds, int port);
+
 typedef int dsa_fdb_dump_cb_t(const unsigned char *addr, u16 vid,
 			      bool is_static, void *data);
 struct dsa_switch_ops {
diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
index e7c30b472034..752f21273bd6 100644
--- a/net/dsa/dsa2.c
+++ b/net/dsa/dsa2.c
@@ -727,6 +727,35 @@ static int dsa_switch_parse_ports_of(struct dsa_switch *ds,
 	return err;
 }
 
+bool dsa_port_is_enabled(struct dsa_switch *ds, int port)
+{
+	struct device_node *dn = ds->dev->of_node;
+	struct device_node *ports, *port_node;
+	bool found = false;
+	int reg, err;
+
+	ports = of_get_child_by_name(dn, "ports");
+	if (!ports) {
+		dev_err(ds->dev, "no ports child node found\n");
+		return false;
+	}
+
+	for_each_available_child_of_node(ports, port_node) {
+		err = of_property_read_u32(port_node, "reg", &reg);
+		if (err)
+			goto out_put_node;
+
+		if (reg == port) {
+			found = true;
+			break;
+		}
+	}
+
+out_put_node:
+	of_node_put(ports);
+	return found;
+}
+
 static int dsa_switch_parse_member_of(struct dsa_switch *ds,
 				      struct device_node *dn)
 {
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-03-19 20:15 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-03-19 18:56 [PATCH net-next 1/2] net: dsa: add a dsa_port_is_enabled helper function Vladimir Oltean
2020-03-19 18:56 ` [PATCH net-next 2/2] net: dsa: sja1105: Avoid error message for unknown PHY mode on disabled ports Vladimir Oltean
2020-03-19 19:10 ` [PATCH net-next 1/2] net: dsa: add a dsa_port_is_enabled helper function Andrew Lunn
2020-03-19 19:17 ` Vivien Didelot
2020-03-19 20:14   ` Vladimir Oltean

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.