net: dsa: ensure dsa driver has proper ops
authorTim Harvey <tharvey@gateworks.com>
Wed, 30 Nov 2022 17:42:46 +0000 (09:42 -0800)
committerTom Rini <trini@konsulko.com>
Thu, 2 Feb 2023 19:22:08 +0000 (14:22 -0500)
Add a function to sanity check a dsa driver having proper ops.

Suggested-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: Tim Harvey <tharvey@gateworks.com>
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Fabio Estevam <festevam@denx.de>
net/dsa-uclass.c

index 5759ced..211a991 100644 (file)
@@ -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");