diff mbox series

[2/2] net: ti: am65-cpsw-nuss: Enable MDIO manual mode

Message ID 20220922095124.22274-3-r-gunasekaran@ti.com
State Accepted
Delegated to: Tom Rini
Headers show
Series Implement workaround for errata i2329 | expand

Commit Message

Ravi Gunasekaran Sept. 22, 2022, 9:51 a.m. UTC
For the TI SoCs affected by errata i2329, enable MDIO manual
mode by default

Signed-off-by: Ravi Gunasekaran <r-gunasekaran@ti.com>
---
 drivers/net/ti/am65-cpsw-nuss.c | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

Comments

Ramon Fried Oct. 5, 2022, 2:07 a.m. UTC | #1
On Thu, Sep 22, 2022 at 12:51 PM Ravi Gunasekaran <r-gunasekaran@ti.com> wrote:
>
> For the TI SoCs affected by errata i2329, enable MDIO manual
> mode by default
>
> Signed-off-by: Ravi Gunasekaran <r-gunasekaran@ti.com>
> ---
>  drivers/net/ti/am65-cpsw-nuss.c | 23 ++++++++++++++++++++++-
>  1 file changed, 22 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ti/am65-cpsw-nuss.c b/drivers/net/ti/am65-cpsw-nuss.c
> index 29c0422961..5ef04e3d83 100644
> --- a/drivers/net/ti/am65-cpsw-nuss.c
> +++ b/drivers/net/ti/am65-cpsw-nuss.c
> @@ -21,6 +21,7 @@
>  #include <net.h>
>  #include <phy.h>
>  #include <power-domain.h>
> +#include <soc.h>
>  #include <linux/bitops.h>
>  #include <linux/soc/ti/ti-udma.h>
>
> @@ -127,6 +128,8 @@ struct am65_cpsw_priv {
>         bool                    has_phy;
>         ofnode                  phy_node;
>         u32                     phy_addr;
> +
> +       bool                    mdio_manual_mode;
>  };
>
>  #ifdef PKTSIZE_ALIGN
> @@ -541,6 +544,20 @@ static const struct eth_ops am65_cpsw_ops = {
>         .read_rom_hwaddr = am65_cpsw_read_rom_hwaddr,
>  };
>
> +static const struct soc_attr k3_mdio_soc_data[] = {
> +       { .family = "AM62X", .revision = "SR1.0" },
> +       { .family = "AM64X", .revision = "SR1.0" },
> +       { .family = "AM64X", .revision = "SR2.0" },
> +       { .family = "AM65X", .revision = "SR1.0" },
> +       { .family = "AM65X", .revision = "SR2.0" },
> +       { .family = "J7200", .revision = "SR1.0" },
> +       { .family = "J7200", .revision = "SR2.0" },
> +       { .family = "J721E", .revision = "SR1.0" },
> +       { .family = "J721E", .revision = "SR1.1" },
> +       { .family = "J721S2", .revision = "SR1.0" },
> +       { /* sentinel */ },
> +};
> +
>  static int am65_cpsw_mdio_init(struct udevice *dev)
>  {
>         struct am65_cpsw_priv *priv = dev_get_priv(dev);
> @@ -553,7 +570,7 @@ static int am65_cpsw_mdio_init(struct udevice *dev)
>                                           cpsw_common->mdio_base,
>                                           cpsw_common->bus_freq,
>                                           clk_get_rate(&cpsw_common->fclk),
> -                                         false);
> +                                         priv->mdio_manual_mode);
>         if (!cpsw_common->bus)
>                 return -EFAULT;
>
> @@ -658,6 +675,10 @@ static int am65_cpsw_port_probe(struct udevice *dev)
>         sprintf(portname, "%s%s", dev->parent->name, dev->name);
>         device_set_name(dev, portname);
>
> +       priv->mdio_manual_mode = false;
> +       if (soc_device_match(k3_mdio_soc_data))
> +               priv->mdio_manual_mode = true;
> +
>         ret = am65_cpsw_ofdata_parse_phy(dev);
>         if (ret)
>                 goto out;
> --
> 2.17.1
>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
Tom Rini Oct. 7, 2022, 3:48 p.m. UTC | #2
On Thu, Sep 22, 2022 at 03:21:24PM +0530, Ravi Gunasekaran wrote:

> For the TI SoCs affected by errata i2329, enable MDIO manual
> mode by default
> 
> Signed-off-by: Ravi Gunasekaran <r-gunasekaran@ti.com>
> Reviewed-by: Ramon Fried <rfried.dev@gmail.com>

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/drivers/net/ti/am65-cpsw-nuss.c b/drivers/net/ti/am65-cpsw-nuss.c
index 29c0422961..5ef04e3d83 100644
--- a/drivers/net/ti/am65-cpsw-nuss.c
+++ b/drivers/net/ti/am65-cpsw-nuss.c
@@ -21,6 +21,7 @@ 
 #include <net.h>
 #include <phy.h>
 #include <power-domain.h>
+#include <soc.h>
 #include <linux/bitops.h>
 #include <linux/soc/ti/ti-udma.h>
 
@@ -127,6 +128,8 @@  struct am65_cpsw_priv {
 	bool			has_phy;
 	ofnode			phy_node;
 	u32			phy_addr;
+
+	bool			mdio_manual_mode;
 };
 
 #ifdef PKTSIZE_ALIGN
@@ -541,6 +544,20 @@  static const struct eth_ops am65_cpsw_ops = {
 	.read_rom_hwaddr = am65_cpsw_read_rom_hwaddr,
 };
 
+static const struct soc_attr k3_mdio_soc_data[] = {
+	{ .family = "AM62X", .revision = "SR1.0" },
+	{ .family = "AM64X", .revision = "SR1.0" },
+	{ .family = "AM64X", .revision = "SR2.0" },
+	{ .family = "AM65X", .revision = "SR1.0" },
+	{ .family = "AM65X", .revision = "SR2.0" },
+	{ .family = "J7200", .revision = "SR1.0" },
+	{ .family = "J7200", .revision = "SR2.0" },
+	{ .family = "J721E", .revision = "SR1.0" },
+	{ .family = "J721E", .revision = "SR1.1" },
+	{ .family = "J721S2", .revision = "SR1.0" },
+	{ /* sentinel */ },
+};
+
 static int am65_cpsw_mdio_init(struct udevice *dev)
 {
 	struct am65_cpsw_priv *priv = dev_get_priv(dev);
@@ -553,7 +570,7 @@  static int am65_cpsw_mdio_init(struct udevice *dev)
 					  cpsw_common->mdio_base,
 					  cpsw_common->bus_freq,
 					  clk_get_rate(&cpsw_common->fclk),
-					  false);
+					  priv->mdio_manual_mode);
 	if (!cpsw_common->bus)
 		return -EFAULT;
 
@@ -658,6 +675,10 @@  static int am65_cpsw_port_probe(struct udevice *dev)
 	sprintf(portname, "%s%s", dev->parent->name, dev->name);
 	device_set_name(dev, portname);
 
+	priv->mdio_manual_mode = false;
+	if (soc_device_match(k3_mdio_soc_data))
+		priv->mdio_manual_mode = true;
+
 	ret = am65_cpsw_ofdata_parse_phy(dev);
 	if (ret)
 		goto out;