From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ramon Fried Date: Thu, 29 Apr 2021 23:26:03 +0300 Subject: [PATCH v1 09/10] net: mvpp2: allow MDIO registration for fixed links In-Reply-To: <20210427152713.v1.9.I1200705b9d0838df3f79d1e9e9de4ddeda134ddb@changeid> References: <20210427132718.645043-1-sr@denx.de> <20210427152713.v1.9.I1200705b9d0838df3f79d1e9e9de4ddeda134ddb@changeid> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Tue, Apr 27, 2021 at 4:29 PM Stefan Roese wrote: > > From: Stefan Chulski > > Currently, there are 2 valid cases for interface, PHY > and mdio relation: > - If an interface has PHY handler, it'll call > mdio_mii_bus_get_from_phy(), which will register > MDIO bus. > - If we want to use fixed-link for an interface, > PHY handle is not defined in the DTS, and no > MDIO is registered. > > There is a third case, for some boards (with switch), > the MDIO is used for switch configuration, but the interface > itself uses fixed link. This patch allows this option by > checking if fixed-link subnode is defined, in this case, > MDIO bus is registers, but the PHY address is set to > PHY_MAX_ADDR for this interface, so this interface will > not try to access the PHY later on. > > Signed-off-by: Stefan Chulski > Signed-off-by: Stefan Roese > --- > > drivers/net/mvpp2.c | 17 +++++++++++++---- > 1 file changed, 13 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/mvpp2.c b/drivers/net/mvpp2.c > index 3d920e85ffef..c5bfe41281d6 100644 > --- a/drivers/net/mvpp2.c > +++ b/drivers/net/mvpp2.c > @@ -4787,16 +4787,25 @@ static int phy_info_parse(struct udevice *dev, struct mvpp2_port *port) > u32 id; > u32 phyaddr = 0; > int phy_mode = -1; > + int fixed_link = 0; > int ret; > > phy_node = fdtdec_lookup_phandle(gd->fdt_blob, port_node, "phy"); > + fixed_link = fdt_subnode_offset(gd->fdt_blob, port_node, "fixed-link"); > > if (phy_node > 0) { > int parent; > - phyaddr = fdtdec_get_int(gd->fdt_blob, phy_node, "reg", 0); > - if (phyaddr < 0) { > - dev_err(dev, "could not find phy address\n"); > - return -1; > + > + if (fixed_link != -FDT_ERR_NOTFOUND) { > + /* phy_addr is set to invalid value for fixed links */ > + phyaddr = PHY_MAX_ADDR; > + } else { > + phyaddr = fdtdec_get_int(gd->fdt_blob, phy_node, > + "reg", 0); > + if (phyaddr < 0) { > + dev_err(dev, "could not find phy address\n"); > + return -1; > + } > } > parent = fdt_parent_offset(gd->fdt_blob, phy_node); > ret = uclass_get_device_by_of_offset(UCLASS_MDIO, parent, > -- > 2.31.1 > Reviewed-by: Ramon Fried