[PATCH 01/14] net: eth-phy: staticize eth_phy_reset()

The eth_phy_reset() is not used outside of this file, staticize it. No functional change.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com --- drivers/net/eth-phy-uclass.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/eth-phy-uclass.c b/drivers/net/eth-phy-uclass.c index 27b77444a0c..231bad66514 100644 --- a/drivers/net/eth-phy-uclass.c +++ b/drivers/net/eth-phy-uclass.c @@ -147,7 +147,7 @@ static int eth_phy_of_to_plat(struct udevice *dev) return 0; }
-void eth_phy_reset(struct udevice *dev, int value) +static void eth_phy_reset(struct udevice *dev, int value) { struct eth_phy_device_priv *uc_priv = dev_get_uclass_priv(dev); u32 delay;

Use new U-Boot phy_connect() API which also supports fixed PHYs.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com --- drivers/net/altera_tse.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/drivers/net/altera_tse.c b/drivers/net/altera_tse.c index 912d28fca2e..e2340936fa6 100644 --- a/drivers/net/altera_tse.c +++ b/drivers/net/altera_tse.c @@ -430,17 +430,11 @@ static int tse_mdio_init(const char *name, struct altera_tse_priv *priv) static int tse_phy_init(struct altera_tse_priv *priv, void *dev) { struct phy_device *phydev; - unsigned int mask = 0xffffffff;
- if (priv->phyaddr) - mask = 1 << priv->phyaddr; - - phydev = phy_find_by_mask(priv->bus, mask); + phydev = phy_connect(priv->bus, -1, dev, priv->interface); if (!phydev) return -ENODEV;
- phy_connect_dev(phydev, dev, priv->interface); - phydev->supported &= PHY_GBIT_FEATURES; phydev->advertising = phydev->supported;

On Wed, May 31, 2023 at 1:51 AM Marek Vasut marek.vasut+renesas@mailbox.org wrote:
Use new U-Boot phy_connect() API which also supports fixed PHYs.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com
drivers/net/altera_tse.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/drivers/net/altera_tse.c b/drivers/net/altera_tse.c index 912d28fca2e..e2340936fa6 100644 --- a/drivers/net/altera_tse.c +++ b/drivers/net/altera_tse.c @@ -430,17 +430,11 @@ static int tse_mdio_init(const char *name, struct altera_tse_priv *priv) static int tse_phy_init(struct altera_tse_priv *priv, void *dev) { struct phy_device *phydev;
unsigned int mask = 0xffffffff;
if (priv->phyaddr)
mask = 1 << priv->phyaddr;
phydev = phy_find_by_mask(priv->bus, mask);
phydev = phy_connect(priv->bus, -1, dev, priv->interface); if (!phydev) return -ENODEV;
phy_connect_dev(phydev, dev, priv->interface);
phydev->supported &= PHY_GBIT_FEATURES; phydev->advertising = phydev->supported;
-- 2.39.2
Reviewed-by: Ramon Fried rfried.dev@gmail.com

Use new U-Boot phy_connect() API which also supports fixed PHYs.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com --- drivers/net/sni_ave.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/net/sni_ave.c b/drivers/net/sni_ave.c index 014b070d9e5..f5a0d80af7a 100644 --- a/drivers/net/sni_ave.c +++ b/drivers/net/sni_ave.c @@ -391,14 +391,12 @@ static int ave_mdiobus_init(struct ave_private *priv, const char *name) static int ave_phy_init(struct ave_private *priv, void *dev) { struct phy_device *phydev; - int mask = GENMASK(31, 0), ret; + int ret;
- phydev = phy_find_by_mask(priv->bus, mask); + phydev = phy_connect(priv->bus, -1, dev, priv->phy_mode); if (!phydev) return -ENODEV;
- phy_connect_dev(phydev, dev, priv->phy_mode); - phydev->supported &= PHY_GBIT_FEATURES; if (priv->max_speed) { ret = phy_set_supported(phydev, priv->max_speed);

On Wed, May 31, 2023 at 1:51 AM Marek Vasut marek.vasut+renesas@mailbox.org wrote:
Use new U-Boot phy_connect() API which also supports fixed PHYs.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com
drivers/net/sni_ave.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/net/sni_ave.c b/drivers/net/sni_ave.c index 014b070d9e5..f5a0d80af7a 100644 --- a/drivers/net/sni_ave.c +++ b/drivers/net/sni_ave.c @@ -391,14 +391,12 @@ static int ave_mdiobus_init(struct ave_private *priv, const char *name) static int ave_phy_init(struct ave_private *priv, void *dev) { struct phy_device *phydev;
int mask = GENMASK(31, 0), ret;
int ret;
phydev = phy_find_by_mask(priv->bus, mask);
phydev = phy_connect(priv->bus, -1, dev, priv->phy_mode); if (!phydev) return -ENODEV;
phy_connect_dev(phydev, dev, priv->phy_mode);
phydev->supported &= PHY_GBIT_FEATURES; if (priv->max_speed) { ret = phy_set_supported(phydev, priv->max_speed);
-- 2.39.2
Reviewed-by: Ramon Fried rfried.dev@gmail.com

Use new U-Boot phy_connect() API which also supports fixed PHYs.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com --- drivers/net/ethoc.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethoc.c b/drivers/net/ethoc.c index 29067e9e949..13fad8119bb 100644 --- a/drivers/net/ethoc.c +++ b/drivers/net/ethoc.c @@ -608,18 +608,16 @@ static int ethoc_mdio_init(const char *name, struct ethoc *priv) static int ethoc_phy_init(struct ethoc *priv, void *dev) { struct phy_device *phydev; - int mask = 0xffffffff; + int mask = -1;
#ifdef CONFIG_PHY_ADDR - mask = 1 << CONFIG_PHY_ADDR; + mask = CONFIG_PHY_ADDR; #endif
- phydev = phy_find_by_mask(priv->bus, mask); + phydev = phy_connect(priv->bus, mask, dev, PHY_INTERFACE_MODE_MII); if (!phydev) return -ENODEV;
- phy_connect_dev(phydev, dev, PHY_INTERFACE_MODE_MII); - phydev->supported &= PHY_BASIC_FEATURES; phydev->advertising = phydev->supported;

On Wed, May 31, 2023 at 1:51 AM Marek Vasut marek.vasut+renesas@mailbox.org wrote:
Use new U-Boot phy_connect() API which also supports fixed PHYs.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com
drivers/net/ethoc.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethoc.c b/drivers/net/ethoc.c index 29067e9e949..13fad8119bb 100644 --- a/drivers/net/ethoc.c +++ b/drivers/net/ethoc.c @@ -608,18 +608,16 @@ static int ethoc_mdio_init(const char *name, struct ethoc *priv) static int ethoc_phy_init(struct ethoc *priv, void *dev) { struct phy_device *phydev;
int mask = 0xffffffff;
int mask = -1;
#ifdef CONFIG_PHY_ADDR
mask = 1 << CONFIG_PHY_ADDR;
mask = CONFIG_PHY_ADDR;
#endif
phydev = phy_find_by_mask(priv->bus, mask);
phydev = phy_connect(priv->bus, mask, dev, PHY_INTERFACE_MODE_MII); if (!phydev) return -ENODEV;
phy_connect_dev(phydev, dev, PHY_INTERFACE_MODE_MII);
phydev->supported &= PHY_BASIC_FEATURES; phydev->advertising = phydev->supported;
-- 2.39.2
Reviewed-by: Ramon Fried rfried.dev@gmail.com

Use new U-Boot phy_connect() API which also supports fixed PHYs.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com --- drivers/net/pch_gbe.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/net/pch_gbe.c b/drivers/net/pch_gbe.c index ad7b5b8e99b..ecf8c28fe41 100644 --- a/drivers/net/pch_gbe.c +++ b/drivers/net/pch_gbe.c @@ -414,16 +414,13 @@ static int pch_gbe_phy_init(struct udevice *dev) struct pch_gbe_priv *priv = dev_get_priv(dev); struct eth_pdata *plat = dev_get_plat(dev); struct phy_device *phydev; - int mask = 0xffffffff;
- phydev = phy_find_by_mask(priv->bus, mask); + phydev = phy_connect(priv->bus, -1, dev, plat->phy_interface); if (!phydev) { printf("pch_gbe: cannot find the phy\n"); return -1; }
- phy_connect_dev(phydev, dev, plat->phy_interface); - phydev->supported &= PHY_GBIT_FEATURES; phydev->advertising = phydev->supported;

On Wed, May 31, 2023 at 1:51 AM Marek Vasut marek.vasut+renesas@mailbox.org wrote:
Use new U-Boot phy_connect() API which also supports fixed PHYs.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com
drivers/net/pch_gbe.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/net/pch_gbe.c b/drivers/net/pch_gbe.c index ad7b5b8e99b..ecf8c28fe41 100644 --- a/drivers/net/pch_gbe.c +++ b/drivers/net/pch_gbe.c @@ -414,16 +414,13 @@ static int pch_gbe_phy_init(struct udevice *dev) struct pch_gbe_priv *priv = dev_get_priv(dev); struct eth_pdata *plat = dev_get_plat(dev); struct phy_device *phydev;
int mask = 0xffffffff;
phydev = phy_find_by_mask(priv->bus, mask);
phydev = phy_connect(priv->bus, -1, dev, plat->phy_interface); if (!phydev) { printf("pch_gbe: cannot find the phy\n"); return -1; }
phy_connect_dev(phydev, dev, plat->phy_interface);
phydev->supported &= PHY_GBIT_FEATURES; phydev->advertising = phydev->supported;
-- 2.39.2
Reviewed-by: Ramon Fried rfried.dev@gmail.com

Use new U-Boot phy_connect() API which also supports fixed PHYs.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com --- drivers/net/sh_eth.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c index 8f162ca58fb..14f7fd1bcc0 100644 --- a/drivers/net/sh_eth.c +++ b/drivers/net/sh_eth.c @@ -601,14 +601,11 @@ static int sh_eth_phy_config(struct udevice *dev) int ret = 0; struct sh_eth_info *port_info = ð->port_info[eth->port]; struct phy_device *phydev; - int mask = 0xffffffff;
- phydev = phy_find_by_mask(priv->bus, mask); + phydev = phy_connect(priv->bus, -1, dev, pdata->phy_interface); if (!phydev) return -ENODEV;
- phy_connect_dev(phydev, dev, pdata->phy_interface); - port_info->phydev = phydev; phy_config(phydev);

On Wed, May 31, 2023 at 1:51 AM Marek Vasut marek.vasut+renesas@mailbox.org wrote:
Use new U-Boot phy_connect() API which also supports fixed PHYs.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com
drivers/net/sh_eth.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c index 8f162ca58fb..14f7fd1bcc0 100644 --- a/drivers/net/sh_eth.c +++ b/drivers/net/sh_eth.c @@ -601,14 +601,11 @@ static int sh_eth_phy_config(struct udevice *dev) int ret = 0; struct sh_eth_info *port_info = ð->port_info[eth->port]; struct phy_device *phydev;
int mask = 0xffffffff;
phydev = phy_find_by_mask(priv->bus, mask);
phydev = phy_connect(priv->bus, -1, dev, pdata->phy_interface); if (!phydev) return -ENODEV;
phy_connect_dev(phydev, dev, pdata->phy_interface);
port_info->phydev = phydev; phy_config(phydev);
-- 2.39.2
Reviewed-by: Ramon Fried rfried.dev@gmail.com

Use new U-Boot phy_connect() API which also supports fixed PHYs.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com --- drivers/net/sunxi_emac.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/net/sunxi_emac.c b/drivers/net/sunxi_emac.c index ad9e1abd161..4c90d4b4981 100644 --- a/drivers/net/sunxi_emac.c +++ b/drivers/net/sunxi_emac.c @@ -248,10 +248,10 @@ static int emac_mdio_write(struct mii_dev *bus, int addr, int devad, int reg,
static int sunxi_emac_init_phy(struct emac_eth_dev *priv, void *dev) { - int ret, mask = 0xffffffff; + int ret, mask = -1;
#ifdef CONFIG_PHY_ADDR - mask = 1 << CONFIG_PHY_ADDR; + mask = CONFIG_PHY_ADDR; #endif
priv->bus = mdio_alloc(); @@ -269,11 +269,10 @@ static int sunxi_emac_init_phy(struct emac_eth_dev *priv, void *dev) if (ret) return ret;
- priv->phydev = phy_find_by_mask(priv->bus, mask); + priv->phydev = phy_connect(priv->bus, mask, dev, PHY_INTERFACE_MODE_MII); if (!priv->phydev) return -ENODEV;
- phy_connect_dev(priv->phydev, dev, PHY_INTERFACE_MODE_MII); phy_config(priv->phydev);
return 0;

On Wed, May 31, 2023 at 1:51 AM Marek Vasut marek.vasut+renesas@mailbox.org wrote:
Use new U-Boot phy_connect() API which also supports fixed PHYs.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com
drivers/net/sunxi_emac.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/net/sunxi_emac.c b/drivers/net/sunxi_emac.c index ad9e1abd161..4c90d4b4981 100644 --- a/drivers/net/sunxi_emac.c +++ b/drivers/net/sunxi_emac.c @@ -248,10 +248,10 @@ static int emac_mdio_write(struct mii_dev *bus, int addr, int devad, int reg,
static int sunxi_emac_init_phy(struct emac_eth_dev *priv, void *dev) {
int ret, mask = 0xffffffff;
int ret, mask = -1;
#ifdef CONFIG_PHY_ADDR
mask = 1 << CONFIG_PHY_ADDR;
mask = CONFIG_PHY_ADDR;
#endif
priv->bus = mdio_alloc();
@@ -269,11 +269,10 @@ static int sunxi_emac_init_phy(struct emac_eth_dev *priv, void *dev) if (ret) return ret;
priv->phydev = phy_find_by_mask(priv->bus, mask);
priv->phydev = phy_connect(priv->bus, mask, dev, PHY_INTERFACE_MODE_MII); if (!priv->phydev) return -ENODEV;
phy_connect_dev(priv->phydev, dev, PHY_INTERFACE_MODE_MII); phy_config(priv->phydev); return 0;
-- 2.39.2
Reviewed-by: Ramon Fried rfried.dev@gmail.com

The phy_connect_dev() is legacy API, now that there are no users, make it internal to phy.c and unpublish it from headers.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com --- drivers/net/phy/phy.c | 4 ++-- include/phy.h | 9 --------- 2 files changed, 2 insertions(+), 11 deletions(-)
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 0eeb0cb3a85..ae21acb059b 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -812,8 +812,8 @@ struct phy_device *phy_find_by_mask(struct mii_dev *bus, uint phy_mask) return get_phy_device_by_mask(bus, phy_mask); }
-void phy_connect_dev(struct phy_device *phydev, struct udevice *dev, - phy_interface_t interface) +static void phy_connect_dev(struct phy_device *phydev, struct udevice *dev, + phy_interface_t interface) { /* Soft Reset the PHY */ phy_reset(phydev); diff --git a/include/phy.h b/include/phy.h index 247223d92be..f023a3c2685 100644 --- a/include/phy.h +++ b/include/phy.h @@ -223,15 +223,6 @@ static inline struct phy_device *fixed_phy_create(ofnode node)
#endif
-/** - * phy_connect_dev() - Associates the given pair of PHY and Ethernet devices - * @phydev: PHY device - * @dev: Ethernet device - * @interface: type of MAC-PHY interface - */ -void phy_connect_dev(struct phy_device *phydev, struct udevice *dev, - phy_interface_t interface); - /** * phy_connect() - Creates a PHY device for the Ethernet interface * Creates a PHY device for the PHY at the given address, if one doesn't exist

On Wed, May 31, 2023 at 1:51 AM Marek Vasut marek.vasut+renesas@mailbox.org wrote:
The phy_connect_dev() is legacy API, now that there are no users, make it internal to phy.c and unpublish it from headers.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com
drivers/net/phy/phy.c | 4 ++-- include/phy.h | 9 --------- 2 files changed, 2 insertions(+), 11 deletions(-)
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 0eeb0cb3a85..ae21acb059b 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -812,8 +812,8 @@ struct phy_device *phy_find_by_mask(struct mii_dev *bus, uint phy_mask) return get_phy_device_by_mask(bus, phy_mask); }
-void phy_connect_dev(struct phy_device *phydev, struct udevice *dev,
phy_interface_t interface)
+static void phy_connect_dev(struct phy_device *phydev, struct udevice *dev,
phy_interface_t interface)
{ /* Soft Reset the PHY */ phy_reset(phydev); diff --git a/include/phy.h b/include/phy.h index 247223d92be..f023a3c2685 100644 --- a/include/phy.h +++ b/include/phy.h @@ -223,15 +223,6 @@ static inline struct phy_device *fixed_phy_create(ofnode node)
#endif
-/**
- phy_connect_dev() - Associates the given pair of PHY and Ethernet devices
- @phydev: PHY device
- @dev: Ethernet device
- @interface: type of MAC-PHY interface
- */
-void phy_connect_dev(struct phy_device *phydev, struct udevice *dev,
phy_interface_t interface);
/**
- phy_connect() - Creates a PHY device for the Ethernet interface
- Creates a PHY device for the PHY at the given address, if one doesn't exist
-- 2.39.2
Reviewed-by: Ramon Fried rfried.dev@gmail.com

In case a new PHY is created and DM_ETH_PHY is enabled, bind a generic PHY driver from ETH_PHY uclass to the PHY to have a matching DM representation of that PHY.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com --- drivers/net/phy/ethernet_id.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
diff --git a/drivers/net/phy/ethernet_id.c b/drivers/net/phy/ethernet_id.c index a715e83db98..877a51c3d00 100644 --- a/drivers/net/phy/ethernet_id.c +++ b/drivers/net/phy/ethernet_id.c @@ -7,6 +7,8 @@
#include <common.h> #include <dm/device_compat.h> +#include <dm/device-internal.h> +#include <dm/lists.h> #include <phy.h> #include <linux/delay.h> #include <asm/gpio.h> @@ -17,6 +19,8 @@ struct phy_device *phy_connect_phy_id(struct mii_dev *bus, struct udevice *dev, struct phy_device *phydev; struct ofnode_phandle_args phandle_args; struct gpio_desc gpio; + const char *node_name; + struct udevice *pdev; ofnode node; u32 id, assert, deassert; u16 vendor, device; @@ -72,5 +76,18 @@ struct phy_device *phy_connect_phy_id(struct mii_dev *bus, struct udevice *dev, if (phydev) phydev->node = node;
+ if (IS_ENABLED(CONFIG_DM_ETH_PHY) && ofnode_valid(node)) { + node_name = ofnode_get_name(node); + ret = device_bind_driver_to_node(dev, "eth_phy_generic_drv", + node_name, node, + &pdev); + if (ret) + return NULL; + + ret = device_probe(pdev); + if (ret) + return NULL; + } + return phydev; }

On Wed, May 31, 2023 at 1:51 AM Marek Vasut marek.vasut+renesas@mailbox.org wrote:
In case a new PHY is created and DM_ETH_PHY is enabled, bind a generic PHY driver from ETH_PHY uclass to the PHY to have a matching DM representation of that PHY.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com
drivers/net/phy/ethernet_id.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
diff --git a/drivers/net/phy/ethernet_id.c b/drivers/net/phy/ethernet_id.c index a715e83db98..877a51c3d00 100644 --- a/drivers/net/phy/ethernet_id.c +++ b/drivers/net/phy/ethernet_id.c @@ -7,6 +7,8 @@
#include <common.h> #include <dm/device_compat.h> +#include <dm/device-internal.h> +#include <dm/lists.h> #include <phy.h> #include <linux/delay.h> #include <asm/gpio.h> @@ -17,6 +19,8 @@ struct phy_device *phy_connect_phy_id(struct mii_dev *bus, struct udevice *dev, struct phy_device *phydev; struct ofnode_phandle_args phandle_args; struct gpio_desc gpio;
const char *node_name;
struct udevice *pdev; ofnode node; u32 id, assert, deassert; u16 vendor, device;
@@ -72,5 +76,18 @@ struct phy_device *phy_connect_phy_id(struct mii_dev *bus, struct udevice *dev, if (phydev) phydev->node = node;
if (IS_ENABLED(CONFIG_DM_ETH_PHY) && ofnode_valid(node)) {
node_name = ofnode_get_name(node);
ret = device_bind_driver_to_node(dev, "eth_phy_generic_drv",
node_name, node,
&pdev);
if (ret)
return NULL;
ret = device_probe(pdev);
if (ret)
return NULL;
}
return phydev;
}
2.39.2
Reviewed-by: Ramon Fried rfried.dev@gmail.com

These two properties are used by various DTs in place of current reset-assert-us/reset-deassert-us , handle both .
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com --- drivers/net/eth-phy-uclass.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/drivers/net/eth-phy-uclass.c b/drivers/net/eth-phy-uclass.c index 231bad66514..9d1e8d38ffa 100644 --- a/drivers/net/eth-phy-uclass.c +++ b/drivers/net/eth-phy-uclass.c @@ -144,6 +144,14 @@ static int eth_phy_of_to_plat(struct udevice *dev) uc_priv->reset_assert_delay = dev_read_u32_default(dev, "reset-assert-us", 0); uc_priv->reset_deassert_delay = dev_read_u32_default(dev, "reset-deassert-us", 0);
+ /* These are used by some DTs, try these as a fallback. */ + if (!uc_priv->reset_assert_delay && !uc_priv->reset_deassert_delay) { + uc_priv->reset_assert_delay = + dev_read_u32_default(dev, "reset-delay-us", 0); + uc_priv->reset_deassert_delay = + dev_read_u32_default(dev, "reset-post-delay-us", 0); + } + return 0; }

On Wed, May 31, 2023 at 1:51 AM Marek Vasut marek.vasut+renesas@mailbox.org wrote:
These two properties are used by various DTs in place of current reset-assert-us/reset-deassert-us , handle both .
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com
drivers/net/eth-phy-uclass.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/drivers/net/eth-phy-uclass.c b/drivers/net/eth-phy-uclass.c index 231bad66514..9d1e8d38ffa 100644 --- a/drivers/net/eth-phy-uclass.c +++ b/drivers/net/eth-phy-uclass.c @@ -144,6 +144,14 @@ static int eth_phy_of_to_plat(struct udevice *dev) uc_priv->reset_assert_delay = dev_read_u32_default(dev, "reset-assert-us", 0); uc_priv->reset_deassert_delay = dev_read_u32_default(dev, "reset-deassert-us", 0);
/* These are used by some DTs, try these as a fallback. */
if (!uc_priv->reset_assert_delay && !uc_priv->reset_deassert_delay) {
uc_priv->reset_assert_delay =
dev_read_u32_default(dev, "reset-delay-us", 0);
uc_priv->reset_deassert_delay =
dev_read_u32_default(dev, "reset-post-delay-us", 0);
}
return 0;
}
-- 2.39.2
Reviewed-by: Ramon Fried rfried.dev@gmail.com

The common code is now capable of handling reset GPIO associated with PHY. Drop the local ad-hoc code in favor of common code.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com --- drivers/net/Kconfig | 1 + drivers/net/ravb.c | 22 ---------------------- 2 files changed, 1 insertion(+), 22 deletions(-)
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 09039a283eb..48f9efcc94f 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -764,6 +764,7 @@ config RENESAS_RAVB bool "Renesas Ethernet AVB MAC" depends on RCAR_64 select PHYLIB + select PHY_ETHERNET_ID help This driver implements support for the Ethernet AVB block in Renesas M3 and H3 SoCs. diff --git a/drivers/net/ravb.c b/drivers/net/ravb.c index c74c8a81f94..0bcd6cfd3f3 100644 --- a/drivers/net/ravb.c +++ b/drivers/net/ravb.c @@ -131,7 +131,6 @@ struct ravb_priv { struct mii_dev *bus; void __iomem *iobase; struct clk_bulk clks; - struct gpio_desc reset_gpio; };
static inline void ravb_flush_dcache(u32 addr, u32 len) @@ -312,13 +311,6 @@ static int ravb_phy_config(struct udevice *dev) struct phy_device *phydev; int reg;
- if (dm_gpio_is_valid(ð->reset_gpio)) { - dm_gpio_set_value(ð->reset_gpio, 1); - mdelay(20); - dm_gpio_set_value(ð->reset_gpio, 0); - mdelay(1); - } - phydev = phy_connect(eth->bus, -1, dev, pdata->phy_interface); if (!phydev) return -ENODEV; @@ -503,7 +495,6 @@ static int ravb_probe(struct udevice *dev) { struct eth_pdata *pdata = dev_get_plat(dev); struct ravb_priv *eth = dev_get_priv(dev); - struct ofnode_phandle_args phandle_args; struct mii_dev *mdiodev; void __iomem *iobase; int ret; @@ -515,17 +506,6 @@ static int ravb_probe(struct udevice *dev) if (ret < 0) goto err_mdio_alloc;
- ret = dev_read_phandle_with_args(dev, "phy-handle", NULL, 0, 0, &phandle_args); - if (!ret) { - gpio_request_by_name_nodev(phandle_args.node, "reset-gpios", 0, - ð->reset_gpio, GPIOD_IS_OUT); - } - - if (!dm_gpio_is_valid(ð->reset_gpio)) { - gpio_request_by_name(dev, "reset-gpios", 0, ð->reset_gpio, - GPIOD_IS_OUT); - } - mdiodev = mdio_alloc(); if (!mdiodev) { ret = -ENOMEM; @@ -576,8 +556,6 @@ static int ravb_remove(struct udevice *dev) free(eth->phydev); mdio_unregister(eth->bus); mdio_free(eth->bus); - if (dm_gpio_is_valid(ð->reset_gpio)) - dm_gpio_free(dev, ð->reset_gpio); unmap_physmem(eth->iobase, MAP_NOCACHE);
return 0;

On Wed, May 31, 2023 at 1:51 AM Marek Vasut marek.vasut+renesas@mailbox.org wrote:
The common code is now capable of handling reset GPIO associated with PHY. Drop the local ad-hoc code in favor of common code.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com
drivers/net/Kconfig | 1 + drivers/net/ravb.c | 22 ---------------------- 2 files changed, 1 insertion(+), 22 deletions(-)
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 09039a283eb..48f9efcc94f 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -764,6 +764,7 @@ config RENESAS_RAVB bool "Renesas Ethernet AVB MAC" depends on RCAR_64 select PHYLIB
select PHY_ETHERNET_ID help This driver implements support for the Ethernet AVB block in Renesas M3 and H3 SoCs.
diff --git a/drivers/net/ravb.c b/drivers/net/ravb.c index c74c8a81f94..0bcd6cfd3f3 100644 --- a/drivers/net/ravb.c +++ b/drivers/net/ravb.c @@ -131,7 +131,6 @@ struct ravb_priv { struct mii_dev *bus; void __iomem *iobase; struct clk_bulk clks;
struct gpio_desc reset_gpio;
};
static inline void ravb_flush_dcache(u32 addr, u32 len) @@ -312,13 +311,6 @@ static int ravb_phy_config(struct udevice *dev) struct phy_device *phydev; int reg;
if (dm_gpio_is_valid(ð->reset_gpio)) {
dm_gpio_set_value(ð->reset_gpio, 1);
mdelay(20);
dm_gpio_set_value(ð->reset_gpio, 0);
mdelay(1);
}
phydev = phy_connect(eth->bus, -1, dev, pdata->phy_interface); if (!phydev) return -ENODEV;
@@ -503,7 +495,6 @@ static int ravb_probe(struct udevice *dev) { struct eth_pdata *pdata = dev_get_plat(dev); struct ravb_priv *eth = dev_get_priv(dev);
struct ofnode_phandle_args phandle_args; struct mii_dev *mdiodev; void __iomem *iobase; int ret;
@@ -515,17 +506,6 @@ static int ravb_probe(struct udevice *dev) if (ret < 0) goto err_mdio_alloc;
ret = dev_read_phandle_with_args(dev, "phy-handle", NULL, 0, 0, &phandle_args);
if (!ret) {
gpio_request_by_name_nodev(phandle_args.node, "reset-gpios", 0,
ð->reset_gpio, GPIOD_IS_OUT);
}
if (!dm_gpio_is_valid(ð->reset_gpio)) {
gpio_request_by_name(dev, "reset-gpios", 0, ð->reset_gpio,
GPIOD_IS_OUT);
}
mdiodev = mdio_alloc(); if (!mdiodev) { ret = -ENOMEM;
@@ -576,8 +556,6 @@ static int ravb_remove(struct udevice *dev) free(eth->phydev); mdio_unregister(eth->bus); mdio_free(eth->bus);
if (dm_gpio_is_valid(ð->reset_gpio))
dm_gpio_free(dev, ð->reset_gpio); unmap_physmem(eth->iobase, MAP_NOCACHE); return 0;
-- 2.39.2
Reviewed-by: Ramon Fried rfried.dev@gmail.com

The common code is now capable of handling reset GPIO associated with PHY. Drop the local ad-hoc code in favor of common code.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com --- drivers/net/Kconfig | 1 + drivers/net/sh_eth.c | 17 ----------------- 2 files changed, 1 insertion(+), 17 deletions(-)
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 48f9efcc94f..7d482cb7745 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -695,6 +695,7 @@ config SUN8I_EMAC config SH_ETHER bool "Renesas SH Ethernet MAC" select PHYLIB + select PHY_ETHERNET_ID help This driver supports the Ethernet for Renesas SH and ARM SoCs.
diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c index 14f7fd1bcc0..95042daade0 100644 --- a/drivers/net/sh_eth.c +++ b/drivers/net/sh_eth.c @@ -530,7 +530,6 @@ struct sh_ether_priv { struct mii_dev *bus; phys_addr_t iobase; struct clk clk; - struct gpio_desc reset_gpio; };
static int sh_ether_send(struct udevice *dev, void *packet, int len) @@ -650,7 +649,6 @@ static int sh_ether_probe(struct udevice *udev) struct eth_pdata *pdata = dev_get_plat(udev); struct sh_ether_priv *priv = dev_get_priv(udev); struct sh_eth_dev *eth = &priv->shdev; - struct ofnode_phandle_args phandle_args; struct mii_dev *mdiodev; int ret;
@@ -661,18 +659,6 @@ static int sh_ether_probe(struct udevice *udev) if (ret < 0) return ret; #endif - - ret = dev_read_phandle_with_args(udev, "phy-handle", NULL, 0, 0, &phandle_args); - if (!ret) { - gpio_request_by_name_nodev(phandle_args.node, "reset-gpios", 0, - &priv->reset_gpio, GPIOD_IS_OUT); - } - - if (!dm_gpio_is_valid(&priv->reset_gpio)) { - gpio_request_by_name(udev, "reset-gpios", 0, &priv->reset_gpio, - GPIOD_IS_OUT); - } - mdiodev = mdio_alloc(); if (!mdiodev) { ret = -ENOMEM; @@ -735,9 +721,6 @@ static int sh_ether_remove(struct udevice *udev) mdio_unregister(priv->bus); mdio_free(priv->bus);
- if (dm_gpio_is_valid(&priv->reset_gpio)) - dm_gpio_free(udev, &priv->reset_gpio); - return 0; }

On Wed, May 31, 2023 at 1:51 AM Marek Vasut marek.vasut+renesas@mailbox.org wrote:
The common code is now capable of handling reset GPIO associated with PHY. Drop the local ad-hoc code in favor of common code.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com
drivers/net/Kconfig | 1 + drivers/net/sh_eth.c | 17 ----------------- 2 files changed, 1 insertion(+), 17 deletions(-)
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 48f9efcc94f..7d482cb7745 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -695,6 +695,7 @@ config SUN8I_EMAC config SH_ETHER bool "Renesas SH Ethernet MAC" select PHYLIB
select PHY_ETHERNET_ID help This driver supports the Ethernet for Renesas SH and ARM SoCs.
diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c index 14f7fd1bcc0..95042daade0 100644 --- a/drivers/net/sh_eth.c +++ b/drivers/net/sh_eth.c @@ -530,7 +530,6 @@ struct sh_ether_priv { struct mii_dev *bus; phys_addr_t iobase; struct clk clk;
struct gpio_desc reset_gpio;
};
static int sh_ether_send(struct udevice *dev, void *packet, int len) @@ -650,7 +649,6 @@ static int sh_ether_probe(struct udevice *udev) struct eth_pdata *pdata = dev_get_plat(udev); struct sh_ether_priv *priv = dev_get_priv(udev); struct sh_eth_dev *eth = &priv->shdev;
struct ofnode_phandle_args phandle_args; struct mii_dev *mdiodev; int ret;
@@ -661,18 +659,6 @@ static int sh_ether_probe(struct udevice *udev) if (ret < 0) return ret; #endif
ret = dev_read_phandle_with_args(udev, "phy-handle", NULL, 0, 0, &phandle_args);
if (!ret) {
gpio_request_by_name_nodev(phandle_args.node, "reset-gpios", 0,
&priv->reset_gpio, GPIOD_IS_OUT);
}
if (!dm_gpio_is_valid(&priv->reset_gpio)) {
gpio_request_by_name(udev, "reset-gpios", 0, &priv->reset_gpio,
GPIOD_IS_OUT);
}
mdiodev = mdio_alloc(); if (!mdiodev) { ret = -ENOMEM;
@@ -735,9 +721,6 @@ static int sh_ether_remove(struct udevice *udev) mdio_unregister(priv->bus); mdio_free(priv->bus);
if (dm_gpio_is_valid(&priv->reset_gpio))
dm_gpio_free(udev, &priv->reset_gpio);
return 0;
}
-- 2.39.2
Reviewed-by: Ramon Fried rfried.dev@gmail.com

From: Valentine Barshak valentine.barshak@cogentembedded.com
U-Boot writes to RX packets when constructing replies. This can cause stale cached data to be written to RX buffer while we're receiving a packet. This causes RX packet corruption because we invalidate the cache right before processing the packet. Invalidate packet buffer cache when preparing RX descriptor as well. This seems to fix RX packet drops with high RX traffic.
While at it flush the descriptors right before enabling RX/TX in sh_eth_tx_desc_init/sh_eth_rx_desc_init callbacks when they are ready instead of flushing after allocation.
Signed-off-by: Valentine Barshak valentine.barshak@cogentembedded.com Reviewed-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com --- drivers/net/sh_eth.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c index 95042daade0..7314caadfdc 100644 --- a/drivers/net/sh_eth.c +++ b/drivers/net/sh_eth.c @@ -142,6 +142,8 @@ static void sh_eth_recv_finish(struct sh_eth_dev *eth) { struct sh_eth_info *port_info = ð->port_info[eth->port];
+ invalidate_cache(ADDR_TO_P2(port_info->rx_desc_cur->rd2), MAX_BUF_SIZE); + /* Make current descriptor available again */ if (port_info->rx_desc_cur->rd0 & RD_RDLE) port_info->rx_desc_cur->rd0 = RD_RACT | RD_RDLE; @@ -210,8 +212,6 @@ static int sh_eth_tx_desc_init(struct sh_eth_dev *eth) goto err; }
- flush_cache_wback(port_info->tx_desc_alloc, alloc_desc_size); - /* Make sure we use a P2 address (non-cacheable) */ port_info->tx_desc_base = (struct tx_desc_s *)ADDR_TO_P2((uintptr_t)port_info->tx_desc_alloc); @@ -229,6 +229,7 @@ static int sh_eth_tx_desc_init(struct sh_eth_dev *eth) cur_tx_desc--; cur_tx_desc->td0 |= TD_TDLE;
+ flush_cache_wback(port_info->tx_desc_alloc, alloc_desc_size); /* * Point the controller to the tx descriptor list. Must use physical * addresses @@ -264,8 +265,6 @@ static int sh_eth_rx_desc_init(struct sh_eth_dev *eth) goto err; }
- flush_cache_wback(port_info->rx_desc_alloc, alloc_desc_size); - /* Make sure we use a P2 address (non-cacheable) */ port_info->rx_desc_base = (struct rx_desc_s *)ADDR_TO_P2((uintptr_t)port_info->rx_desc_alloc); @@ -299,6 +298,9 @@ static int sh_eth_rx_desc_init(struct sh_eth_dev *eth) cur_rx_desc--; cur_rx_desc->rd0 |= RD_RDLE;
+ invalidate_cache(port_info->rx_buf_alloc, NUM_RX_DESC * MAX_BUF_SIZE); + flush_cache_wback(port_info->rx_desc_alloc, alloc_desc_size); + /* Point the controller to the rx descriptor list */ sh_eth_write(port_info, ADDR_TO_PHY(port_info->rx_desc_base), RDLAR); #if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)

On Wed, May 31, 2023 at 1:51 AM Marek Vasut marek.vasut+renesas@mailbox.org wrote:
From: Valentine Barshak valentine.barshak@cogentembedded.com
U-Boot writes to RX packets when constructing replies. This can cause stale cached data to be written to RX buffer while we're receiving a packet. This causes RX packet corruption because we invalidate the cache right before processing the packet. Invalidate packet buffer cache when preparing RX descriptor as well. This seems to fix RX packet drops with high RX traffic.
While at it flush the descriptors right before enabling RX/TX in sh_eth_tx_desc_init/sh_eth_rx_desc_init callbacks when they are ready instead of flushing after allocation.
Signed-off-by: Valentine Barshak valentine.barshak@cogentembedded.com Reviewed-by: Marek Vasut marek.vasut+renesas@mailbox.org
Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com
drivers/net/sh_eth.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c index 95042daade0..7314caadfdc 100644 --- a/drivers/net/sh_eth.c +++ b/drivers/net/sh_eth.c @@ -142,6 +142,8 @@ static void sh_eth_recv_finish(struct sh_eth_dev *eth) { struct sh_eth_info *port_info = ð->port_info[eth->port];
invalidate_cache(ADDR_TO_P2(port_info->rx_desc_cur->rd2), MAX_BUF_SIZE);
/* Make current descriptor available again */ if (port_info->rx_desc_cur->rd0 & RD_RDLE) port_info->rx_desc_cur->rd0 = RD_RACT | RD_RDLE;
@@ -210,8 +212,6 @@ static int sh_eth_tx_desc_init(struct sh_eth_dev *eth) goto err; }
flush_cache_wback(port_info->tx_desc_alloc, alloc_desc_size);
/* Make sure we use a P2 address (non-cacheable) */ port_info->tx_desc_base = (struct tx_desc_s *)ADDR_TO_P2((uintptr_t)port_info->tx_desc_alloc);
@@ -229,6 +229,7 @@ static int sh_eth_tx_desc_init(struct sh_eth_dev *eth) cur_tx_desc--; cur_tx_desc->td0 |= TD_TDLE;
flush_cache_wback(port_info->tx_desc_alloc, alloc_desc_size); /* * Point the controller to the tx descriptor list. Must use physical * addresses
@@ -264,8 +265,6 @@ static int sh_eth_rx_desc_init(struct sh_eth_dev *eth) goto err; }
flush_cache_wback(port_info->rx_desc_alloc, alloc_desc_size);
/* Make sure we use a P2 address (non-cacheable) */ port_info->rx_desc_base = (struct rx_desc_s *)ADDR_TO_P2((uintptr_t)port_info->rx_desc_alloc);
@@ -299,6 +298,9 @@ static int sh_eth_rx_desc_init(struct sh_eth_dev *eth) cur_rx_desc--; cur_rx_desc->rd0 |= RD_RDLE;
invalidate_cache(port_info->rx_buf_alloc, NUM_RX_DESC * MAX_BUF_SIZE);
flush_cache_wback(port_info->rx_desc_alloc, alloc_desc_size);
/* Point the controller to the rx descriptor list */ sh_eth_write(port_info, ADDR_TO_PHY(port_info->rx_desc_base), RDLAR);
#if defined(SH_ETH_TYPE_GETHER) || defined(SH_ETH_TYPE_RZ)
2.39.2
Reviewed-by: Ramon Fried rfried.dev@gmail.com

From: Valentine Barshak valentine.barshak@cogentembedded.com
In case RX error occurs, and the RD_RFE bit is set, the descriptor is never returned back to the queue. Make sh_eth_recv_start return zero length in this case so that the descriptor can be released and pushed back to the list. Also return the more appropriate -EAGAIN instead of -EINVAL if the descriptor is not ready yet.
Signed-off-by: Valentine Barshak valentine.barshak@cogentembedded.com Reviewed-by: Marek Vasut marek.vasut+renesas@mailbox.org --- Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com --- drivers/net/sh_eth.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c index 7314caadfdc..7b1f59dc498 100644 --- a/drivers/net/sh_eth.c +++ b/drivers/net/sh_eth.c @@ -129,11 +129,11 @@ static int sh_eth_recv_start(struct sh_eth_dev *eth) /* Check if the rx descriptor is ready */ invalidate_cache(port_info->rx_desc_cur, sizeof(struct rx_desc_s)); if (port_info->rx_desc_cur->rd0 & RD_RACT) - return -EINVAL; + return -EAGAIN;
/* Check for errors */ if (port_info->rx_desc_cur->rd0 & RD_RFE) - return -EINVAL; + return 0;
return port_info->rx_desc_cur->rd1 & 0xffff; } @@ -556,15 +556,13 @@ static int sh_ether_recv(struct udevice *dev, int flags, uchar **packetp) *packetp = packet;
return len; - } else { - len = 0; + }
- /* Restart the receiver if disabled */ - if (!(sh_eth_read(port_info, EDRRR) & EDRRR_R)) - sh_eth_write(port_info, EDRRR_R, EDRRR); + /* Restart the receiver if disabled */ + if (!(sh_eth_read(port_info, EDRRR) & EDRRR_R)) + sh_eth_write(port_info, EDRRR_R, EDRRR);
- return -EAGAIN; - } + return len; }
static int sh_ether_free_pkt(struct udevice *dev, uchar *packet, int length)

On Wed, May 31, 2023 at 1:51 AM Marek Vasut marek.vasut+renesas@mailbox.org wrote:
From: Valentine Barshak valentine.barshak@cogentembedded.com
In case RX error occurs, and the RD_RFE bit is set, the descriptor is never returned back to the queue. Make sh_eth_recv_start return zero length in this case so that the descriptor can be released and pushed back to the list. Also return the more appropriate -EAGAIN instead of -EINVAL if the descriptor is not ready yet.
Signed-off-by: Valentine Barshak valentine.barshak@cogentembedded.com Reviewed-by: Marek Vasut marek.vasut+renesas@mailbox.org
Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com
drivers/net/sh_eth.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c index 7314caadfdc..7b1f59dc498 100644 --- a/drivers/net/sh_eth.c +++ b/drivers/net/sh_eth.c @@ -129,11 +129,11 @@ static int sh_eth_recv_start(struct sh_eth_dev *eth) /* Check if the rx descriptor is ready */ invalidate_cache(port_info->rx_desc_cur, sizeof(struct rx_desc_s)); if (port_info->rx_desc_cur->rd0 & RD_RACT)
return -EINVAL;
return -EAGAIN; /* Check for errors */ if (port_info->rx_desc_cur->rd0 & RD_RFE)
return -EINVAL;
return 0; return port_info->rx_desc_cur->rd1 & 0xffff;
} @@ -556,15 +556,13 @@ static int sh_ether_recv(struct udevice *dev, int flags, uchar **packetp) *packetp = packet;
return len;
} else {
len = 0;
}
/* Restart the receiver if disabled */
if (!(sh_eth_read(port_info, EDRRR) & EDRRR_R))
sh_eth_write(port_info, EDRRR_R, EDRRR);
/* Restart the receiver if disabled */
if (!(sh_eth_read(port_info, EDRRR) & EDRRR_R))
sh_eth_write(port_info, EDRRR_R, EDRRR);
return -EAGAIN;
}
return len;
}
static int sh_ether_free_pkt(struct udevice *dev, uchar *packet, int length)
2.39.2
Reviewed-by: Ramon Fried rfried.dev@gmail.com

On Wed, May 31, 2023 at 1:51 AM Marek Vasut marek.vasut+renesas@mailbox.org wrote:
The eth_phy_reset() is not used outside of this file, staticize it. No functional change.
Signed-off-by: Marek Vasut marek.vasut+renesas@mailbox.org
Cc: Geert Uytterhoeven geert+renesas@glider.be Cc: Joe Hershberger joe.hershberger@ni.com Cc: Michal Simek michal.simek@amd.com Cc: Nishanth Menon nm@ti.com Cc: Ramon Fried rfried.dev@gmail.com
drivers/net/eth-phy-uclass.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/eth-phy-uclass.c b/drivers/net/eth-phy-uclass.c index 27b77444a0c..231bad66514 100644 --- a/drivers/net/eth-phy-uclass.c +++ b/drivers/net/eth-phy-uclass.c @@ -147,7 +147,7 @@ static int eth_phy_of_to_plat(struct udevice *dev) return 0; }
-void eth_phy_reset(struct udevice *dev, int value) +static void eth_phy_reset(struct udevice *dev, int value) { struct eth_phy_device_priv *uc_priv = dev_get_uclass_priv(dev); u32 delay; -- 2.39.2
Reviewed-by: Ramon Fried rfried.dev@gmail.com
participants (2)
-
Marek Vasut
-
Ramon Fried