net: mdio: mdiobus_register: update validation test
authorAndrew Lunn <andrew@lunn.ch>
Mon, 9 Jan 2023 15:30:43 +0000 (16:30 +0100)
committerJakub Kicinski <kuba@kernel.org>
Tue, 10 Jan 2023 23:53:36 +0000 (15:53 -0800)
Now that C45 uses its own read/write methods, the validation performed
when a bus is registers needs updating. All combinations of C22 and
C45 are supported, but both read and write methods must be provided,
read only busses are not supported etc.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Michael Walle <michael@walle.cc>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/mdio_bus.c

index bde1958..c992a9f 100644 (file)
@@ -526,8 +526,15 @@ int __mdiobus_register(struct mii_bus *bus, struct module *owner)
        int i, err;
        struct gpio_desc *gpiod;
 
-       if (NULL == bus || NULL == bus->name ||
-           NULL == bus->read || NULL == bus->write)
+       if (!bus || !bus->name)
+               return -EINVAL;
+
+       /* An access method always needs both read and write operations */
+       if (!!bus->read != !!bus->write || !!bus->read_c45 != !!bus->write_c45)
+               return -EINVAL;
+
+       /* At least one method is mandatory */
+       if (!bus->read && !bus->read_c45)
                return -EINVAL;
 
        if (bus->parent && bus->parent->of_node)