Add a function to sanity check a dsa driver having proper ops.

Suggested-by: Vladimir Oltean <vladimir.olt...@nxp.com>
Signed-off-by: Tim Harvey <thar...@gateworks.com>
Reviewed-by: Vladimir Oltean <vladimir.olt...@nxp.com>
---
v3:
 - added Vladimir's rb tag
v2: new patch
---
 net/dsa-uclass.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/net/dsa-uclass.c b/net/dsa-uclass.c
index 07edc584daf3..b3033c97aa63 100644
--- a/net/dsa-uclass.c
+++ b/net/dsa-uclass.c
@@ -342,6 +342,19 @@ U_BOOT_DRIVER(dsa_port) = {
        .plat_auto = sizeof(struct eth_pdata),
 };
 
+static int dsa_sanitize_ops(struct udevice *dev)
+{
+       struct dsa_ops *ops = dsa_get_ops(dev);
+
+       if ((!ops->xmit || !ops->rcv) &&
+           (!ops->port_enable && !ops->port_disable)) {
+               dev_err(dev, "Packets cannot be steered to ports\n");
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
 /*
  * This function mostly deals with pulling information out of the device tree
  * into the pdata structure.
@@ -358,6 +371,10 @@ static int dsa_post_bind(struct udevice *dev)
        if (!ofnode_valid(node))
                return -ENODEV;
 
+       err = dsa_sanitize_ops(dev);
+       if (err)
+               return err;
+
        pdata->master_node = ofnode_null();
 
        node = ofnode_find_subnode(node, "ports");
-- 
2.17.1

Reply via email to