All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.