public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [PATCH 1/3] net: ftmac100: change driver name from nds32_mac to ftmac100
@ 2022-12-28 11:54 Sergei Antonov
  2022-12-28 11:54 ` [PATCH 2/3] net: ftmac100: simplify priv->iobase casting Sergei Antonov
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Sergei Antonov @ 2022-12-28 11:54 UTC (permalink / raw)
  To: u-boot, joe.hershberger, rfried.dev; +Cc: bmeng.cn, Sergei Antonov

So it will be named similarly to the related ftgmac100 driver.
The old name 'nds32_mac' is not referred to anywhere in U-Boot.

Signed-off-by: Sergei Antonov <saproj@gmail.com>
---
 drivers/net/ftmac100.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ftmac100.c b/drivers/net/ftmac100.c
index c30ace96bb13..b3da9479ea5e 100644
--- a/drivers/net/ftmac100.c
+++ b/drivers/net/ftmac100.c
@@ -434,7 +434,7 @@ static const struct udevice_id ftmac100_ids[] = {
 };
 
 U_BOOT_DRIVER(ftmac100) = {
-	.name	= "nds32_mac",
+	.name	= "ftmac100",
 	.id	= UCLASS_ETH,
 	.of_match = ftmac100_ids,
 	.bind	= ftmac100_bind,
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/3] net: ftmac100: simplify priv->iobase casting
  2022-12-28 11:54 [PATCH 1/3] net: ftmac100: change driver name from nds32_mac to ftmac100 Sergei Antonov
@ 2022-12-28 11:54 ` Sergei Antonov
  2023-01-10 17:12   ` Ramon Fried
  2022-12-28 11:54 ` [PATCH 3/3] net: ftmac100: add mii read and write callbacks Sergei Antonov
  2023-01-10 17:11 ` [PATCH 1/3] net: ftmac100: change driver name from nds32_mac to ftmac100 Ramon Fried
  2 siblings, 1 reply; 8+ messages in thread
From: Sergei Antonov @ 2022-12-28 11:54 UTC (permalink / raw)
  To: u-boot, joe.hershberger, rfried.dev; +Cc: bmeng.cn, Sergei Antonov

Replace 'phys_addr_t iobase' with 'struct ftmac100 *ftmac100'
in order to cast once on assignment and remove casting in a
number of other places.

Signed-off-by: Sergei Antonov <saproj@gmail.com>
---
 drivers/net/ftmac100.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/net/ftmac100.c b/drivers/net/ftmac100.c
index b3da9479ea5e..bb39e837bbe7 100644
--- a/drivers/net/ftmac100.c
+++ b/drivers/net/ftmac100.c
@@ -28,7 +28,7 @@ struct ftmac100_data {
 	struct ftmac100_rxdes rxdes[PKTBUFSRX];
 	int rx_index;
 	const char *name;
-	phys_addr_t iobase;
+	struct ftmac100 *ftmac100;
 };
 
 /*
@@ -36,7 +36,7 @@ struct ftmac100_data {
  */
 static void ftmac100_reset(struct ftmac100_data *priv)
 {
-	struct ftmac100 *ftmac100 = (struct ftmac100 *)(uintptr_t)priv->iobase;
+	struct ftmac100 *ftmac100 = priv->ftmac100;
 
 	debug ("%s()\n", __func__);
 
@@ -57,7 +57,7 @@ static void ftmac100_reset(struct ftmac100_data *priv)
 static void ftmac100_set_mac(struct ftmac100_data *priv ,
 	const unsigned char *mac)
 {
-	struct ftmac100 *ftmac100 = (struct ftmac100 *)(uintptr_t)priv->iobase;
+	struct ftmac100 *ftmac100 = priv->ftmac100;
 	unsigned int maddr = mac[0] << 8 | mac[1];
 	unsigned int laddr = mac[2] << 24 | mac[3] << 16 | mac[4] << 8 | mac[5];
 
@@ -72,7 +72,7 @@ static void ftmac100_set_mac(struct ftmac100_data *priv ,
  */
 static void _ftmac100_halt(struct ftmac100_data *priv)
 {
-	struct ftmac100 *ftmac100 = (struct ftmac100 *)(uintptr_t)priv->iobase;
+	struct ftmac100 *ftmac100 = priv->ftmac100;
 	debug ("%s()\n", __func__);
 	writel (0, &ftmac100->maccr);
 }
@@ -82,7 +82,7 @@ static void _ftmac100_halt(struct ftmac100_data *priv)
  */
 static int _ftmac100_init(struct ftmac100_data *priv, unsigned char enetaddr[6])
 {
-	struct ftmac100 *ftmac100 = (struct ftmac100 *)(uintptr_t)priv->iobase;
+	struct ftmac100 *ftmac100 = priv->ftmac100;
 	struct ftmac100_txdes *txdes = priv->txdes;
 	struct ftmac100_rxdes *rxdes = priv->rxdes;
 	unsigned int maccr;
@@ -187,7 +187,7 @@ static int __ftmac100_recv(struct ftmac100_data *priv)
  */
 static int _ftmac100_send(struct ftmac100_data *priv, void *packet, int length)
 {
-	struct ftmac100 *ftmac100 = (struct ftmac100 *)(uintptr_t)priv->iobase;
+	struct ftmac100 *ftmac100 = priv->ftmac100;
 	struct ftmac100_txdes *curr_des = priv->txdes;
 	ulong start;
 
@@ -400,7 +400,7 @@ static int ftmac100_of_to_plat(struct udevice *dev)
 	struct eth_pdata *pdata = dev_get_plat(dev);
 	const char *mac;
 	pdata->iobase = dev_read_addr(dev);
-	priv->iobase = pdata->iobase;
+	priv->ftmac100 = (struct ftmac100 *)pdata->iobase;
 	mac = dtbmacaddr(0);
 	if (mac)
 		memcpy(pdata->enetaddr , mac , 6);
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/3] net: ftmac100: add mii read and write callbacks
  2022-12-28 11:54 [PATCH 1/3] net: ftmac100: change driver name from nds32_mac to ftmac100 Sergei Antonov
  2022-12-28 11:54 ` [PATCH 2/3] net: ftmac100: simplify priv->iobase casting Sergei Antonov
@ 2022-12-28 11:54 ` Sergei Antonov
  2023-01-10 17:13   ` Ramon Fried
  2023-01-10 17:11 ` [PATCH 1/3] net: ftmac100: change driver name from nds32_mac to ftmac100 Ramon Fried
  2 siblings, 1 reply; 8+ messages in thread
From: Sergei Antonov @ 2022-12-28 11:54 UTC (permalink / raw)
  To: u-boot, joe.hershberger, rfried.dev; +Cc: bmeng.cn, Sergei Antonov

Register mii_bus with read and write callbacks tp allow the 'mii'
command to work. Use a timeout of 10 ms to wait for the R/W
operations to complete.

Signed-off-by: Sergei Antonov <saproj@gmail.com>
---
 drivers/net/ftmac100.c | 103 +++++++++++++++++++++++++++++++++++++++++
 drivers/net/ftmac100.h |   9 ++++
 2 files changed, 112 insertions(+)

diff --git a/drivers/net/ftmac100.c b/drivers/net/ftmac100.c
index bb39e837bbe7..10395c94f9d1 100644
--- a/drivers/net/ftmac100.c
+++ b/drivers/net/ftmac100.c
@@ -12,9 +12,13 @@
 #include <env.h>
 #include <malloc.h>
 #include <net.h>
+#include <phy.h>
+#include <miiphy.h>
+#include <dm/device_compat.h>
 #include <asm/global_data.h>
 #include <linux/delay.h>
 #include <linux/io.h>
+#include <linux/iopoll.h>
 
 #include "ftmac100.h"
 #ifdef CONFIG_DM_ETH
@@ -23,12 +27,16 @@ DECLARE_GLOBAL_DATA_PTR;
 #endif
 #define ETH_ZLEN	60
 
+/* Timeout for a mdio read/write operation */
+#define FTMAC100_MDIO_TIMEOUT_USEC     10000
+
 struct ftmac100_data {
 	struct ftmac100_txdes txdes[1];
 	struct ftmac100_rxdes rxdes[PKTBUFSRX];
 	int rx_index;
 	const char *name;
 	struct ftmac100 *ftmac100;
+	struct mii_dev *bus;
 };
 
 /*
@@ -408,10 +416,104 @@ static int ftmac100_of_to_plat(struct udevice *dev)
 	return 0;
 }
 
+/*
+ * struct mii_bus functions
+ */
+static int ftmac100_mdio_read(struct mii_dev *bus, int addr, int devad,
+			      int reg)
+{
+	struct ftmac100_data *priv = bus->priv;
+	struct ftmac100 *ftmac100 = priv->ftmac100;
+	int phycr = FTMAC100_PHYCR_PHYAD(addr) |
+		    FTMAC100_PHYCR_REGAD(reg) |
+		    FTMAC100_PHYCR_MIIRD;
+	int ret;
+
+	writel(phycr, &ftmac100->phycr);
+
+	ret = readl_poll_timeout(&ftmac100->phycr, phycr,
+				 !(phycr & FTMAC100_PHYCR_MIIRD),
+				 FTMAC100_MDIO_TIMEOUT_USEC);
+	if (ret)
+		pr_err("%s: mdio read failed (addr=0x%x reg=0x%x)\n",
+		       bus->name, addr, reg);
+	else
+		ret = phycr & FTMAC100_PHYCR_MIIRDATA;
+
+	return ret;
+}
+
+static int ftmac100_mdio_write(struct mii_dev *bus, int addr, int devad,
+			       int reg, u16 value)
+{
+	struct ftmac100_data *priv = bus->priv;
+	struct ftmac100 *ftmac100 = priv->ftmac100;
+	int phycr = FTMAC100_PHYCR_PHYAD(addr) |
+		    FTMAC100_PHYCR_REGAD(reg) |
+		    FTMAC100_PHYCR_MIIWR;
+	int ret;
+
+	writel(value, &ftmac100->phywdata);
+	writel(phycr, &ftmac100->phycr);
+
+	ret = readl_poll_timeout(&ftmac100->phycr, phycr,
+				 !(phycr & FTMAC100_PHYCR_MIIWR),
+				 FTMAC100_MDIO_TIMEOUT_USEC);
+	if (ret)
+		pr_err("%s: mdio write failed (addr=0x%x reg=0x%x)\n",
+		       bus->name, addr, reg);
+
+	return ret;
+}
+
+static int ftmac100_mdio_init(struct udevice *dev)
+{
+	struct ftmac100_data *priv = dev_get_priv(dev);
+	struct mii_dev *bus;
+	int ret;
+
+	bus = mdio_alloc();
+	if (!bus)
+		return -ENOMEM;
+
+	bus->read  = ftmac100_mdio_read;
+	bus->write = ftmac100_mdio_write;
+	bus->priv  = priv;
+
+	ret = mdio_register_seq(bus, dev_seq(dev));
+	if (ret) {
+		mdio_free(bus);
+		return ret;
+	}
+
+	priv->bus = bus;
+
+	return 0;
+}
+
 static int ftmac100_probe(struct udevice *dev)
 {
 	struct ftmac100_data *priv = dev_get_priv(dev);
 	priv->name = dev->name;
+	int ret = 0;
+
+	ret = ftmac100_mdio_init(dev);
+	if (ret) {
+		dev_err(dev, "Failed to initialize mdiobus: %d\n", ret);
+		goto out;
+	}
+
+out:
+	return ret;
+}
+
+static int ftmac100_remove(struct udevice *dev)
+{
+	struct ftmac100_data *priv = dev_get_priv(dev);
+
+	mdio_unregister(priv->bus);
+	mdio_free(priv->bus);
+
 	return 0;
 }
 
@@ -440,6 +542,7 @@ U_BOOT_DRIVER(ftmac100) = {
 	.bind	= ftmac100_bind,
 	.of_to_plat = ftmac100_of_to_plat,
 	.probe	= ftmac100_probe,
+	.remove = ftmac100_remove,
 	.ops	= &ftmac100_ops,
 	.priv_auto	= sizeof(struct ftmac100_data),
 	.plat_auto	= sizeof(struct eth_pdata),
diff --git a/drivers/net/ftmac100.h b/drivers/net/ftmac100.h
index 75a49f628a69..21d339f835bf 100644
--- a/drivers/net/ftmac100.h
+++ b/drivers/net/ftmac100.h
@@ -92,6 +92,15 @@ struct ftmac100 {
 #define FTMAC100_MACCR_RX_MULTIPKT	(1 << 16)
 #define FTMAC100_MACCR_RX_BROADPKT	(1 << 17)
 
+/*
+ * PHY control register
+ */
+#define FTMAC100_PHYCR_MIIRDATA		0xffff
+#define FTMAC100_PHYCR_PHYAD(x)		(((x) & 0x1f) << 16)
+#define FTMAC100_PHYCR_REGAD(x)		(((x) & 0x1f) << 21)
+#define FTMAC100_PHYCR_MIIWR		BIT(27)
+#define FTMAC100_PHYCR_MIIRD		BIT(26)
+
 /*
  * Transmit descriptor, aligned to 16 bytes
  */
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] net: ftmac100: change driver name from nds32_mac to ftmac100
  2022-12-28 11:54 [PATCH 1/3] net: ftmac100: change driver name from nds32_mac to ftmac100 Sergei Antonov
  2022-12-28 11:54 ` [PATCH 2/3] net: ftmac100: simplify priv->iobase casting Sergei Antonov
  2022-12-28 11:54 ` [PATCH 3/3] net: ftmac100: add mii read and write callbacks Sergei Antonov
@ 2023-01-10 17:11 ` Ramon Fried
  2 siblings, 0 replies; 8+ messages in thread
From: Ramon Fried @ 2023-01-10 17:11 UTC (permalink / raw)
  To: Sergei Antonov; +Cc: u-boot, joe.hershberger, bmeng.cn

On Wed, Dec 28, 2022 at 1:55 PM Sergei Antonov <saproj@gmail.com> wrote:
>
> So it will be named similarly to the related ftgmac100 driver.
> The old name 'nds32_mac' is not referred to anywhere in U-Boot.
>
> Signed-off-by: Sergei Antonov <saproj@gmail.com>
> ---
>  drivers/net/ftmac100.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/ftmac100.c b/drivers/net/ftmac100.c
> index c30ace96bb13..b3da9479ea5e 100644
> --- a/drivers/net/ftmac100.c
> +++ b/drivers/net/ftmac100.c
> @@ -434,7 +434,7 @@ static const struct udevice_id ftmac100_ids[] = {
>  };
>
>  U_BOOT_DRIVER(ftmac100) = {
> -       .name   = "nds32_mac",
> +       .name   = "ftmac100",
>         .id     = UCLASS_ETH,
>         .of_match = ftmac100_ids,
>         .bind   = ftmac100_bind,
> --
> 2.34.1
>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/3] net: ftmac100: simplify priv->iobase casting
  2022-12-28 11:54 ` [PATCH 2/3] net: ftmac100: simplify priv->iobase casting Sergei Antonov
@ 2023-01-10 17:12   ` Ramon Fried
  0 siblings, 0 replies; 8+ messages in thread
From: Ramon Fried @ 2023-01-10 17:12 UTC (permalink / raw)
  To: Sergei Antonov; +Cc: u-boot, joe.hershberger, bmeng.cn

On Wed, Dec 28, 2022 at 1:55 PM Sergei Antonov <saproj@gmail.com> wrote:
>
> Replace 'phys_addr_t iobase' with 'struct ftmac100 *ftmac100'
> in order to cast once on assignment and remove casting in a
> number of other places.
>
> Signed-off-by: Sergei Antonov <saproj@gmail.com>
> ---
>  drivers/net/ftmac100.c | 14 +++++++-------
>  1 file changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/ftmac100.c b/drivers/net/ftmac100.c
> index b3da9479ea5e..bb39e837bbe7 100644
> --- a/drivers/net/ftmac100.c
> +++ b/drivers/net/ftmac100.c
> @@ -28,7 +28,7 @@ struct ftmac100_data {
>         struct ftmac100_rxdes rxdes[PKTBUFSRX];
>         int rx_index;
>         const char *name;
> -       phys_addr_t iobase;
> +       struct ftmac100 *ftmac100;
>  };
>
>  /*
> @@ -36,7 +36,7 @@ struct ftmac100_data {
>   */
>  static void ftmac100_reset(struct ftmac100_data *priv)
>  {
> -       struct ftmac100 *ftmac100 = (struct ftmac100 *)(uintptr_t)priv->iobase;
> +       struct ftmac100 *ftmac100 = priv->ftmac100;
>
>         debug ("%s()\n", __func__);
>
> @@ -57,7 +57,7 @@ static void ftmac100_reset(struct ftmac100_data *priv)
>  static void ftmac100_set_mac(struct ftmac100_data *priv ,
>         const unsigned char *mac)
>  {
> -       struct ftmac100 *ftmac100 = (struct ftmac100 *)(uintptr_t)priv->iobase;
> +       struct ftmac100 *ftmac100 = priv->ftmac100;
>         unsigned int maddr = mac[0] << 8 | mac[1];
>         unsigned int laddr = mac[2] << 24 | mac[3] << 16 | mac[4] << 8 | mac[5];
>
> @@ -72,7 +72,7 @@ static void ftmac100_set_mac(struct ftmac100_data *priv ,
>   */
>  static void _ftmac100_halt(struct ftmac100_data *priv)
>  {
> -       struct ftmac100 *ftmac100 = (struct ftmac100 *)(uintptr_t)priv->iobase;
> +       struct ftmac100 *ftmac100 = priv->ftmac100;
>         debug ("%s()\n", __func__);
>         writel (0, &ftmac100->maccr);
>  }
> @@ -82,7 +82,7 @@ static void _ftmac100_halt(struct ftmac100_data *priv)
>   */
>  static int _ftmac100_init(struct ftmac100_data *priv, unsigned char enetaddr[6])
>  {
> -       struct ftmac100 *ftmac100 = (struct ftmac100 *)(uintptr_t)priv->iobase;
> +       struct ftmac100 *ftmac100 = priv->ftmac100;
>         struct ftmac100_txdes *txdes = priv->txdes;
>         struct ftmac100_rxdes *rxdes = priv->rxdes;
>         unsigned int maccr;
> @@ -187,7 +187,7 @@ static int __ftmac100_recv(struct ftmac100_data *priv)
>   */
>  static int _ftmac100_send(struct ftmac100_data *priv, void *packet, int length)
>  {
> -       struct ftmac100 *ftmac100 = (struct ftmac100 *)(uintptr_t)priv->iobase;
> +       struct ftmac100 *ftmac100 = priv->ftmac100;
>         struct ftmac100_txdes *curr_des = priv->txdes;
>         ulong start;
>
> @@ -400,7 +400,7 @@ static int ftmac100_of_to_plat(struct udevice *dev)
>         struct eth_pdata *pdata = dev_get_plat(dev);
>         const char *mac;
>         pdata->iobase = dev_read_addr(dev);
> -       priv->iobase = pdata->iobase;
> +       priv->ftmac100 = (struct ftmac100 *)pdata->iobase;
>         mac = dtbmacaddr(0);
>         if (mac)
>                 memcpy(pdata->enetaddr , mac , 6);
> --
> 2.34.1
>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 3/3] net: ftmac100: add mii read and write callbacks
  2022-12-28 11:54 ` [PATCH 3/3] net: ftmac100: add mii read and write callbacks Sergei Antonov
@ 2023-01-10 17:13   ` Ramon Fried
  2023-01-19 19:55     ` Sergei Antonov
  0 siblings, 1 reply; 8+ messages in thread
From: Ramon Fried @ 2023-01-10 17:13 UTC (permalink / raw)
  To: Sergei Antonov; +Cc: u-boot, joe.hershberger, bmeng.cn

On Wed, Dec 28, 2022 at 1:55 PM Sergei Antonov <saproj@gmail.com> wrote:
>
> Register mii_bus with read and write callbacks tp allow the 'mii'
> command to work. Use a timeout of 10 ms to wait for the R/W
> operations to complete.
>
> Signed-off-by: Sergei Antonov <saproj@gmail.com>
> ---
>  drivers/net/ftmac100.c | 103 +++++++++++++++++++++++++++++++++++++++++
>  drivers/net/ftmac100.h |   9 ++++
>  2 files changed, 112 insertions(+)
>
> diff --git a/drivers/net/ftmac100.c b/drivers/net/ftmac100.c
> index bb39e837bbe7..10395c94f9d1 100644
> --- a/drivers/net/ftmac100.c
> +++ b/drivers/net/ftmac100.c
> @@ -12,9 +12,13 @@
>  #include <env.h>
>  #include <malloc.h>
>  #include <net.h>
> +#include <phy.h>
> +#include <miiphy.h>
> +#include <dm/device_compat.h>
>  #include <asm/global_data.h>
>  #include <linux/delay.h>
>  #include <linux/io.h>
> +#include <linux/iopoll.h>
>
>  #include "ftmac100.h"
>  #ifdef CONFIG_DM_ETH
> @@ -23,12 +27,16 @@ DECLARE_GLOBAL_DATA_PTR;
>  #endif
>  #define ETH_ZLEN       60
>
> +/* Timeout for a mdio read/write operation */
> +#define FTMAC100_MDIO_TIMEOUT_USEC     10000
> +
>  struct ftmac100_data {
>         struct ftmac100_txdes txdes[1];
>         struct ftmac100_rxdes rxdes[PKTBUFSRX];
>         int rx_index;
>         const char *name;
>         struct ftmac100 *ftmac100;
> +       struct mii_dev *bus;
>  };
>
>  /*
> @@ -408,10 +416,104 @@ static int ftmac100_of_to_plat(struct udevice *dev)
>         return 0;
>  }
>
> +/*
> + * struct mii_bus functions
> + */
> +static int ftmac100_mdio_read(struct mii_dev *bus, int addr, int devad,
> +                             int reg)
> +{
> +       struct ftmac100_data *priv = bus->priv;
> +       struct ftmac100 *ftmac100 = priv->ftmac100;
> +       int phycr = FTMAC100_PHYCR_PHYAD(addr) |
> +                   FTMAC100_PHYCR_REGAD(reg) |
> +                   FTMAC100_PHYCR_MIIRD;
> +       int ret;
> +
> +       writel(phycr, &ftmac100->phycr);
> +
> +       ret = readl_poll_timeout(&ftmac100->phycr, phycr,
> +                                !(phycr & FTMAC100_PHYCR_MIIRD),
> +                                FTMAC100_MDIO_TIMEOUT_USEC);
> +       if (ret)
> +               pr_err("%s: mdio read failed (addr=0x%x reg=0x%x)\n",
> +                      bus->name, addr, reg);
> +       else
> +               ret = phycr & FTMAC100_PHYCR_MIIRDATA;
> +
> +       return ret;
> +}
> +
> +static int ftmac100_mdio_write(struct mii_dev *bus, int addr, int devad,
> +                              int reg, u16 value)
> +{
> +       struct ftmac100_data *priv = bus->priv;
> +       struct ftmac100 *ftmac100 = priv->ftmac100;
> +       int phycr = FTMAC100_PHYCR_PHYAD(addr) |
> +                   FTMAC100_PHYCR_REGAD(reg) |
> +                   FTMAC100_PHYCR_MIIWR;
> +       int ret;
> +
> +       writel(value, &ftmac100->phywdata);
> +       writel(phycr, &ftmac100->phycr);
> +
> +       ret = readl_poll_timeout(&ftmac100->phycr, phycr,
> +                                !(phycr & FTMAC100_PHYCR_MIIWR),
> +                                FTMAC100_MDIO_TIMEOUT_USEC);
> +       if (ret)
> +               pr_err("%s: mdio write failed (addr=0x%x reg=0x%x)\n",
> +                      bus->name, addr, reg);
> +
> +       return ret;
> +}
> +
> +static int ftmac100_mdio_init(struct udevice *dev)
> +{
> +       struct ftmac100_data *priv = dev_get_priv(dev);
> +       struct mii_dev *bus;
> +       int ret;
> +
> +       bus = mdio_alloc();
> +       if (!bus)
> +               return -ENOMEM;
> +
> +       bus->read  = ftmac100_mdio_read;
> +       bus->write = ftmac100_mdio_write;
> +       bus->priv  = priv;
> +
> +       ret = mdio_register_seq(bus, dev_seq(dev));
> +       if (ret) {
> +               mdio_free(bus);
> +               return ret;
> +       }
> +
> +       priv->bus = bus;
> +
> +       return 0;
> +}
> +
>  static int ftmac100_probe(struct udevice *dev)
>  {
>         struct ftmac100_data *priv = dev_get_priv(dev);
>         priv->name = dev->name;
> +       int ret = 0;
> +
> +       ret = ftmac100_mdio_init(dev);
> +       if (ret) {
> +               dev_err(dev, "Failed to initialize mdiobus: %d\n", ret);
> +               goto out;
> +       }
> +
> +out:
> +       return ret;
> +}
> +
> +static int ftmac100_remove(struct udevice *dev)
> +{
> +       struct ftmac100_data *priv = dev_get_priv(dev);
> +
> +       mdio_unregister(priv->bus);
> +       mdio_free(priv->bus);
> +
>         return 0;
>  }
>
> @@ -440,6 +542,7 @@ U_BOOT_DRIVER(ftmac100) = {
>         .bind   = ftmac100_bind,
>         .of_to_plat = ftmac100_of_to_plat,
>         .probe  = ftmac100_probe,
> +       .remove = ftmac100_remove,
>         .ops    = &ftmac100_ops,
>         .priv_auto      = sizeof(struct ftmac100_data),
>         .plat_auto      = sizeof(struct eth_pdata),
> diff --git a/drivers/net/ftmac100.h b/drivers/net/ftmac100.h
> index 75a49f628a69..21d339f835bf 100644
> --- a/drivers/net/ftmac100.h
> +++ b/drivers/net/ftmac100.h
> @@ -92,6 +92,15 @@ struct ftmac100 {
>  #define FTMAC100_MACCR_RX_MULTIPKT     (1 << 16)
>  #define FTMAC100_MACCR_RX_BROADPKT     (1 << 17)
>
> +/*
> + * PHY control register
> + */
> +#define FTMAC100_PHYCR_MIIRDATA                0xffff
> +#define FTMAC100_PHYCR_PHYAD(x)                (((x) & 0x1f) << 16)
> +#define FTMAC100_PHYCR_REGAD(x)                (((x) & 0x1f) << 21)
> +#define FTMAC100_PHYCR_MIIWR           BIT(27)
> +#define FTMAC100_PHYCR_MIIRD           BIT(26)
> +
>  /*
>   * Transmit descriptor, aligned to 16 bytes
>   */
> --
> 2.34.1
>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 3/3] net: ftmac100: add mii read and write callbacks
  2023-01-10 17:13   ` Ramon Fried
@ 2023-01-19 19:55     ` Sergei Antonov
  2023-02-04  0:30       ` Ramon Fried
  0 siblings, 1 reply; 8+ messages in thread
From: Sergei Antonov @ 2023-01-19 19:55 UTC (permalink / raw)
  To: Ramon Fried; +Cc: u-boot, joe.hershberger, bmeng.cn

On Tue, 10 Jan 2023 at 20:13, Ramon Fried <rfried.dev@gmail.com> wrote:

> Reviewed-by: Ramon Fried <rfried.dev@gmail.com>

Hello, Ramon! I have just submitted a v2 of this patch. The only
substantial difference there is a Kconfig addition. If you are fine
with it, could you please give it your "Reviewed-by"?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 3/3] net: ftmac100: add mii read and write callbacks
  2023-01-19 19:55     ` Sergei Antonov
@ 2023-02-04  0:30       ` Ramon Fried
  0 siblings, 0 replies; 8+ messages in thread
From: Ramon Fried @ 2023-02-04  0:30 UTC (permalink / raw)
  To: Sergei Antonov; +Cc: u-boot, joe.hershberger, bmeng.cn

On Thu, Jan 19, 2023 at 9:55 PM Sergei Antonov <saproj@gmail.com> wrote:
>
> On Tue, 10 Jan 2023 at 20:13, Ramon Fried <rfried.dev@gmail.com> wrote:
>
> > Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
>
> Hello, Ramon! I have just submitted a v2 of this patch. The only
> substantial difference there is a Kconfig addition. If you are fine
> with it, could you please give it your "Reviewed-by"?
Done.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2023-02-04  0:36 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-12-28 11:54 [PATCH 1/3] net: ftmac100: change driver name from nds32_mac to ftmac100 Sergei Antonov
2022-12-28 11:54 ` [PATCH 2/3] net: ftmac100: simplify priv->iobase casting Sergei Antonov
2023-01-10 17:12   ` Ramon Fried
2022-12-28 11:54 ` [PATCH 3/3] net: ftmac100: add mii read and write callbacks Sergei Antonov
2023-01-10 17:13   ` Ramon Fried
2023-01-19 19:55     ` Sergei Antonov
2023-02-04  0:30       ` Ramon Fried
2023-01-10 17:11 ` [PATCH 1/3] net: ftmac100: change driver name from nds32_mac to ftmac100 Ramon Fried

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox