
On Fri, Nov 17, 2023 at 10:04:53AM +0800, Jim Liu wrote:
Add bb_miiphy_bus function for designware bitbang feature.
Signed-off-by: Jim Liu JJLIU0@nuvoton.com
Changes for v2:
- add bitbang delay dts read
- modify printf to debug
drivers/net/designware.c | 105 +++++++++++++++++++++++++++++++++++++++ drivers/net/designware.h | 5 ++ 2 files changed, 110 insertions(+)
diff --git a/drivers/net/designware.c b/drivers/net/designware.c index a174344b3e..e86f96fc1a 100644 --- a/drivers/net/designware.c +++ b/drivers/net/designware.c @@ -767,6 +767,31 @@ int designware_eth_probe(struct udevice *dev) priv->bus = miiphy_get_dev_by_name(dev->name); priv->dev = dev;
+#if defined(CONFIG_BITBANGMII) && CONFIG_IS_ENABLED(DM_GPIO)
- if (dev_read_bool(dev, "snps,bitbang-mii")) {
debug("\n%s: use bitbang mii..\n", dev->name);
ret = gpio_request_by_name(dev, "snps,mdc-gpio", 0,
&priv->mdc_gpio, GPIOD_IS_OUT | GPIOD_IS_OUT_ACTIVE);
if (ret) {
printf("no mdc-gpio\n");
return ret;
}
ret = gpio_request_by_name(dev, "snps,mdio-gpio", 0,
&priv->mdio_gpio, GPIOD_IS_OUT | GPIOD_IS_OUT_ACTIVE);
if (ret) {
printf("no mdio-gpio\n");
return ret;
}
priv->bb_delay = dev_read_u32_default(dev, "snps,bitbang-delay", 1);
bb_miiphy_buses[0].priv = priv;
sprintf(bb_miiphy_buses[0].name, dev->name);
If designware_eth_probe() is called for multiple Ethernet interfaces then only the last interface to be probed will have a working MDIO bus.
We should either support multiple buses here or raise an error if there is an attempt to probe a second interface.
(I spotted the same issue in the ravb driver while extending it to support a board with two Ethernet interfaces)
Thanks, Paul