Commit 45c77fb4 authored by Paolo Abeni's avatar Paolo Abeni

Merge branch 'emaclite-improve-error-handling-and-minor-cleanup'

Radhey Shyam Pandey says:

====================
emaclite: improve error handling and minor cleanup

This patchset does error handling for of_address_to_resource() and also
removes "Don't advertise 1000BASE-T" and auto negotiation.

Changes for v3:
- Resolve git apply conflicts for 2/2 patch.

Changes for v2:
- Added Andrew's reviewed by tag in 1/2 patch.
- Move ret to down to align with reverse xmas tree style in 2/2 patch.
- Also add fixes tag in 2/2 patch.
- Specify tree name in subject prefix.
====================

Link: https://lore.kernel.org/r/1651476470-23904-1-git-send-email-radhey.shyam.pandey@xilinx.comSigned-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parents 79396934 7a6bc33a
...@@ -823,10 +823,10 @@ static int xemaclite_mdio_write(struct mii_bus *bus, int phy_id, int reg, ...@@ -823,10 +823,10 @@ static int xemaclite_mdio_write(struct mii_bus *bus, int phy_id, int reg,
static int xemaclite_mdio_setup(struct net_local *lp, struct device *dev) static int xemaclite_mdio_setup(struct net_local *lp, struct device *dev)
{ {
struct mii_bus *bus; struct mii_bus *bus;
int rc;
struct resource res; struct resource res;
struct device_node *np = of_get_parent(lp->phy_node); struct device_node *np = of_get_parent(lp->phy_node);
struct device_node *npp; struct device_node *npp;
int rc, ret;
/* Don't register the MDIO bus if the phy_node or its parent node /* Don't register the MDIO bus if the phy_node or its parent node
* can't be found. * can't be found.
...@@ -836,8 +836,14 @@ static int xemaclite_mdio_setup(struct net_local *lp, struct device *dev) ...@@ -836,8 +836,14 @@ static int xemaclite_mdio_setup(struct net_local *lp, struct device *dev)
return -ENODEV; return -ENODEV;
} }
npp = of_get_parent(np); npp = of_get_parent(np);
ret = of_address_to_resource(npp, 0, &res);
of_address_to_resource(npp, 0, &res); of_node_put(npp);
if (ret) {
dev_err(dev, "%s resource error!\n",
dev->of_node->full_name);
of_node_put(np);
return ret;
}
if (lp->ndev->mem_start != res.start) { if (lp->ndev->mem_start != res.start) {
struct phy_device *phydev; struct phy_device *phydev;
phydev = of_phy_find_device(lp->phy_node); phydev = of_phy_find_device(lp->phy_node);
...@@ -846,6 +852,7 @@ static int xemaclite_mdio_setup(struct net_local *lp, struct device *dev) ...@@ -846,6 +852,7 @@ static int xemaclite_mdio_setup(struct net_local *lp, struct device *dev)
"MDIO of the phy is not registered yet\n"); "MDIO of the phy is not registered yet\n");
else else
put_device(&phydev->mdio.dev); put_device(&phydev->mdio.dev);
of_node_put(np);
return 0; return 0;
} }
...@@ -858,6 +865,7 @@ static int xemaclite_mdio_setup(struct net_local *lp, struct device *dev) ...@@ -858,6 +865,7 @@ static int xemaclite_mdio_setup(struct net_local *lp, struct device *dev)
bus = mdiobus_alloc(); bus = mdiobus_alloc();
if (!bus) { if (!bus) {
dev_err(dev, "Failed to allocate mdiobus\n"); dev_err(dev, "Failed to allocate mdiobus\n");
of_node_put(np);
return -ENOMEM; return -ENOMEM;
} }
...@@ -870,6 +878,7 @@ static int xemaclite_mdio_setup(struct net_local *lp, struct device *dev) ...@@ -870,6 +878,7 @@ static int xemaclite_mdio_setup(struct net_local *lp, struct device *dev)
bus->parent = dev; bus->parent = dev;
rc = of_mdiobus_register(bus, np); rc = of_mdiobus_register(bus, np);
of_node_put(np);
if (rc) { if (rc) {
dev_err(dev, "Failed to register mdio bus.\n"); dev_err(dev, "Failed to register mdio bus.\n");
goto err_register; goto err_register;
...@@ -926,8 +935,6 @@ static int xemaclite_open(struct net_device *dev) ...@@ -926,8 +935,6 @@ static int xemaclite_open(struct net_device *dev)
xemaclite_disable_interrupts(lp); xemaclite_disable_interrupts(lp);
if (lp->phy_node) { if (lp->phy_node) {
u32 bmcr;
lp->phy_dev = of_phy_connect(lp->ndev, lp->phy_node, lp->phy_dev = of_phy_connect(lp->ndev, lp->phy_node,
xemaclite_adjust_link, 0, xemaclite_adjust_link, 0,
PHY_INTERFACE_MODE_MII); PHY_INTERFACE_MODE_MII);
...@@ -938,19 +945,6 @@ static int xemaclite_open(struct net_device *dev) ...@@ -938,19 +945,6 @@ static int xemaclite_open(struct net_device *dev)
/* EmacLite doesn't support giga-bit speeds */ /* EmacLite doesn't support giga-bit speeds */
phy_set_max_speed(lp->phy_dev, SPEED_100); phy_set_max_speed(lp->phy_dev, SPEED_100);
/* Don't advertise 1000BASE-T Full/Half duplex speeds */
phy_write(lp->phy_dev, MII_CTRL1000, 0);
/* Advertise only 10 and 100mbps full/half duplex speeds */
phy_write(lp->phy_dev, MII_ADVERTISE, ADVERTISE_ALL |
ADVERTISE_CSMA);
/* Restart auto negotiation */
bmcr = phy_read(lp->phy_dev, MII_BMCR);
bmcr |= (BMCR_ANENABLE | BMCR_ANRESTART);
phy_write(lp->phy_dev, MII_BMCR, bmcr);
phy_start(lp->phy_dev); phy_start(lp->phy_dev);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment