public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] net: davinci_emac: use driver model (CONFIG_DM_ETH)
@ 2019-04-30 16:03 Bartosz Golaszewski
  2019-05-09 18:50 ` Joe Hershberger
  0 siblings, 1 reply; 6+ messages in thread
From: Bartosz Golaszewski @ 2019-04-30 16:03 UTC (permalink / raw)
  To: u-boot

From: Bartosz Golaszewski <bgolaszewski@baylibre.com>

Add support for CONFIG_DM_ETH to the davinci_emac driver. Optimally
we should only support DM-enabled platforms but there are several
non-DT boards that still use it so either we need to keep supporting
it or drop the boards from u-boot. For now we're stuck with ugly
ifdefs.

This patch adds support for driver-model to the driver and converts
all platforms that use the driver model to selecting CONFIG_DM_ETH.

Tested on da850-evm and da850-lcdk.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
---
NOTE: I'm currently working on modernizing da850 support in u-boot.
This patch is just the first step - I plan on improving the emac driver
in general but I'll be OoO until end of next week, so I decided to post
it already for reviews.

Does anyone know what the status is on boards like twister, ea20 etc.
that use davinci_emac, but don't use the driver model? Dropping them
would make it easier to clean up this driver.

This patch applies on top of my previous series[1].

[1] https://lists.denx.de/pipermail/u-boot/2019-April/367236.html

 arch/arm/mach-davinci/cpu.c            |  13 ---
 arch/arm/mach-omap2/omap3/emac.c       |   3 +-
 board/davinci/da8xxevm/da850evm.c      |   5 --
 board/davinci/da8xxevm/omapl138_lcdk.c |  14 ----
 board/logicpd/am3517evm/am3517evm.c    |   1 -
 board/ti/ti816x/evm.c                  |   3 +-
 configs/am3517_evm_defconfig           |   1 +
 configs/da850_am18xxevm_defconfig      |   1 +
 configs/da850evm_defconfig             |   1 +
 configs/da850evm_direct_nor_defconfig  |   1 +
 configs/omapl138_lcdk_defconfig        |   1 +
 configs/ti816x_evm_defconfig           |   1 +
 drivers/net/ti/davinci_emac.c          | 109 +++++++++++++++++++++----
 13 files changed, 100 insertions(+), 54 deletions(-)

diff --git a/arch/arm/mach-davinci/cpu.c b/arch/arm/mach-davinci/cpu.c
index f97ad3fc74..9fd6564d04 100644
--- a/arch/arm/mach-davinci/cpu.c
+++ b/arch/arm/mach-davinci/cpu.c
@@ -5,7 +5,6 @@
  */
 
 #include <common.h>
-#include <netdev.h>
 #include <asm/arch/hardware.h>
 #include <asm/io.h>
 
@@ -90,15 +89,3 @@ int set_cpu_clk_info(void)
 	gd->bd->bi_dsp_freq = 0;
 	return 0;
 }
-
-/*
- * Initializes on-chip ethernet controllers.
- * to override, implement board_eth_init()
- */
-int cpu_eth_init(bd_t *bis)
-{
-#if defined(CONFIG_DRIVER_TI_EMAC)
-	davinci_emac_initialize();
-#endif
-	return 0;
-}
diff --git a/arch/arm/mach-omap2/omap3/emac.c b/arch/arm/mach-omap2/omap3/emac.c
index c79e870183..fb0c9188f5 100644
--- a/arch/arm/mach-omap2/omap3/emac.c
+++ b/arch/arm/mach-omap2/omap3/emac.c
@@ -7,7 +7,6 @@
  */
 
 #include <common.h>
-#include <netdev.h>
 #include <asm/io.h>
 #include <asm/arch/am35x_def.h>
 
@@ -24,5 +23,5 @@ int cpu_eth_init(bd_t *bis)
 	reset &= ~CPGMACSS_SW_RST;
 	writel(reset, &am35x_scm_general_regs->ip_sw_reset);
 
-	return davinci_emac_initialize();
+	return 0;
 }
diff --git a/board/davinci/da8xxevm/da850evm.c b/board/davinci/da8xxevm/da850evm.c
index 1bc26828bf..0d2bc5fb32 100644
--- a/board/davinci/da8xxevm/da850evm.c
+++ b/board/davinci/da8xxevm/da850evm.c
@@ -13,7 +13,6 @@
 #include <environment.h>
 #include <i2c.h>
 #include <net.h>
-#include <netdev.h>
 #include <spi.h>
 #include <spi_flash.h>
 #include <asm/arch/hardware.h>
@@ -472,10 +471,6 @@ int board_eth_init(bd_t *bis)
 	if (rmii_hw_init())
 		printf("RMII hardware init failed!!!\n");
 #endif
-	if (!davinci_emac_initialize()) {
-		printf("Error: Ethernet init failed!\n");
-		return -1;
-	}
 
 	return 0;
 }
diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c
index 2c2f885d43..ef9656add8 100644
--- a/board/davinci/da8xxevm/omapl138_lcdk.c
+++ b/board/davinci/da8xxevm/omapl138_lcdk.c
@@ -11,7 +11,6 @@
 #include <common.h>
 #include <i2c.h>
 #include <net.h>
-#include <netdev.h>
 #include <spi.h>
 #include <spi_flash.h>
 #include <asm/arch/hardware.h>
@@ -229,19 +228,6 @@ int board_init(void)
 
 #ifdef CONFIG_DRIVER_TI_EMAC
 
-/*
- * Initializes on-board ethernet controllers.
- */
-int board_eth_init(bd_t *bis)
-{
-	if (!davinci_emac_initialize()) {
-		printf("Error: Ethernet init failed!\n");
-		return -1;
-	}
-
-	return 0;
-}
-
 #endif /* CONFIG_DRIVER_TI_EMAC */
 
 #define CFG_MAC_ADDR_SPI_BUS	0
diff --git a/board/logicpd/am3517evm/am3517evm.c b/board/logicpd/am3517evm/am3517evm.c
index 10031a4801..bfd4e78274 100644
--- a/board/logicpd/am3517evm/am3517evm.c
+++ b/board/logicpd/am3517evm/am3517evm.c
@@ -28,7 +28,6 @@
 #include <linux/usb/gadget.h>
 #include <linux/usb/musb.h>
 #include <i2c.h>
-#include <netdev.h>
 #include "am3517evm.h"
 
 DECLARE_GLOBAL_DATA_PTR;
diff --git a/board/ti/ti816x/evm.c b/board/ti/ti816x/evm.c
index 07a084bab8..240df8cbe1 100644
--- a/board/ti/ti816x/evm.c
+++ b/board/ti/ti816x/evm.c
@@ -9,7 +9,6 @@
 #include <common.h>
 #include <environment.h>
 #include <spl.h>
-#include <netdev.h>
 #include <asm/cache.h>
 #include <asm/io.h>
 #include <asm/arch/clock.h>
@@ -56,7 +55,7 @@ int board_eth_init(bd_t *bis)
 			printf("Unable to read MAC address. Set <ethaddr>\n");
 	}
 
-	return davinci_emac_initialize();
+	return 0;
 }
 
 #ifdef CONFIG_SPL_BUILD
diff --git a/configs/am3517_evm_defconfig b/configs/am3517_evm_defconfig
index b9f59f3291..0ea28a20b2 100644
--- a/configs/am3517_evm_defconfig
+++ b/configs/am3517_evm_defconfig
@@ -45,6 +45,7 @@ CONFIG_SYS_NAND_U_BOOT_LOCATIONS=y
 CONFIG_SYS_NAND_U_BOOT_OFFS=0x80000
 CONFIG_SPL_NAND_SIMPLE=y
 CONFIG_MII=y
+CONFIG_DM_ETH=y
 CONFIG_DRIVER_TI_EMAC=y
 CONFIG_PINCTRL=y
 CONFIG_PINCTRL_SINGLE=y
diff --git a/configs/da850_am18xxevm_defconfig b/configs/da850_am18xxevm_defconfig
index f098222113..6227cafc90 100644
--- a/configs/da850_am18xxevm_defconfig
+++ b/configs/da850_am18xxevm_defconfig
@@ -52,6 +52,7 @@ CONFIG_SPI_FLASH=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_MII=y
+CONFIG_DM_ETH=y
 CONFIG_DRIVER_TI_EMAC=y
 CONFIG_DM_SERIAL=y
 CONFIG_SYS_NS16550=y
diff --git a/configs/da850evm_defconfig b/configs/da850evm_defconfig
index 221c204af0..78eadc6330 100644
--- a/configs/da850evm_defconfig
+++ b/configs/da850evm_defconfig
@@ -60,6 +60,7 @@ CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SPI_FLASH_MTD=y
 CONFIG_MII=y
+CONFIG_DM_ETH=y
 CONFIG_DRIVER_TI_EMAC=y
 CONFIG_PINCTRL=y
 CONFIG_PINCTRL_SINGLE=y
diff --git a/configs/da850evm_direct_nor_defconfig b/configs/da850evm_direct_nor_defconfig
index 166e77b8e3..2dd82d68b9 100644
--- a/configs/da850evm_direct_nor_defconfig
+++ b/configs/da850evm_direct_nor_defconfig
@@ -51,6 +51,7 @@ CONFIG_SPI_FLASH=y
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_MII=y
+CONFIG_DM_ETH=y
 CONFIG_DRIVER_TI_EMAC=y
 CONFIG_PINCTRL=y
 CONFIG_PINCTRL_SINGLE=y
diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig
index e43141844a..0600ac3f4a 100644
--- a/configs/omapl138_lcdk_defconfig
+++ b/configs/omapl138_lcdk_defconfig
@@ -51,6 +51,7 @@ CONFIG_SF_DEFAULT_SPEED=30000000
 CONFIG_SPI_FLASH_STMICRO=y
 CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_MII=y
+CONFIG_DM_ETH=y
 CONFIG_DRIVER_TI_EMAC=y
 CONFIG_DM_SERIAL=y
 CONFIG_SYS_NS16550=y
diff --git a/configs/ti816x_evm_defconfig b/configs/ti816x_evm_defconfig
index bf877f596b..131b25a188 100644
--- a/configs/ti816x_evm_defconfig
+++ b/configs/ti816x_evm_defconfig
@@ -46,6 +46,7 @@ CONFIG_MMC_OMAP_HS=y
 CONFIG_NAND=y
 CONFIG_SYS_NAND_BUSWIDTH_16BIT=y
 CONFIG_MII=y
+CONFIG_DM_ETH=y
 CONFIG_DRIVER_TI_EMAC=y
 CONFIG_SYS_NS16550=y
 CONFIG_SPI=y
diff --git a/drivers/net/ti/davinci_emac.c b/drivers/net/ti/davinci_emac.c
index 9d53984973..3252a235d2 100644
--- a/drivers/net/ti/davinci_emac.c
+++ b/drivers/net/ti/davinci_emac.c
@@ -26,11 +26,13 @@
 #include <net.h>
 #include <miiphy.h>
 #include <malloc.h>
-#include <netdev.h>
 #include <linux/compiler.h>
 #include <asm/arch/emac_defs.h>
 #include <asm/io.h>
 #include "davinci_emac.h"
+#ifndef CONFIG_DM_ETH
+#include <netdev.h>
+#endif
 
 unsigned int	emac_dbg = 0;
 #define debug_emac(fmt,args...)	if (emac_dbg) printf(fmt,##args)
@@ -107,10 +109,16 @@ static u_int8_t	num_phy;
 
 phy_t				phy[CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT];
 
+#ifndef CONFIG_DM_ETH
 static int davinci_eth_set_mac_addr(struct eth_device *dev)
+#else /* with CONFIG_DM_ETH */
+static int davinci_emac_write_hwaddr(struct udevice *dev)
+#endif /* CONFIG_DM_ETH */
 {
-	unsigned long		mac_hi;
-	unsigned long		mac_lo;
+#ifdef CONFIG_DM_ETH
+	struct eth_pdata *pdata = dev_get_platdata(dev);
+#endif
+	unsigned long mac_hi, mac_lo;
 
 	/*
 	 * Set MAC Addresses & Init multicast Hash to 0 (disable any multicast
@@ -118,12 +126,22 @@ static int davinci_eth_set_mac_addr(struct eth_device *dev)
 	 *  Using channel 0 only - other channels are disabled
 	 *  */
 	writel(0, &adap_emac->MACINDEX);
+
+#ifndef CONFIG_DM_ETH
 	mac_hi = (dev->enetaddr[3] << 24) |
 		 (dev->enetaddr[2] << 16) |
 		 (dev->enetaddr[1] << 8)  |
 		 (dev->enetaddr[0]);
 	mac_lo = (dev->enetaddr[5] << 8) |
 		 (dev->enetaddr[4]);
+#else /* with CONFIG_DM_ETH */
+	mac_hi = (pdata->enetaddr[3] << 24) |
+		 (pdata->enetaddr[2] << 16) |
+		 (pdata->enetaddr[1] << 8)  |
+		 (pdata->enetaddr[0]);
+	mac_lo = (pdata->enetaddr[5] << 8) |
+		 (pdata->enetaddr[4]);
+#endif /* CONFIG_DM_ETH */
 
 	writel(mac_hi, &adap_emac->MACADDRHI);
 #if defined(DAVINCI_EMAC_VERSION2)
@@ -411,13 +429,17 @@ static void  __attribute__((unused)) davinci_eth_gigabit_enable(int phy_addr)
 }
 
 /* Eth device open */
+#ifndef CONFIG_DM_ETH
 static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
+#else /* with CONFIG_DM_ETH */
+static int davinci_emac_start(struct udevice *dev)
+#endif /* CONFIG_DM_ETH */
 {
-	dv_reg_p		addr;
-	u_int32_t		clkdiv, cnt, mac_control;
-	uint16_t		__maybe_unused lpa_val;
-	volatile emac_desc	*rx_desc;
-	int			index;
+	u32 clkdiv, cnt, mac_control;
+	volatile emac_desc *rx_desc;
+	u16 __maybe_unused lpa_val;
+	dv_reg_p addr;
+	int index;
 
 	debug_emac("+ emac_open\n");
 
@@ -447,7 +469,11 @@ static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
 	writel(1, &adap_emac->TXCONTROL);
 	writel(1, &adap_emac->RXCONTROL);
 
+#ifndef CONFIG_DM_ETH
 	davinci_eth_set_mac_addr(dev);
+#else /* with CONFIG_DM_ETH */
+	davinci_emac_write_hwaddr(dev);
+#endif /* CONFIG_DM_ETH */
 
 	/* Set DMA 8 TX / 8 RX Head pointers to 0 */
 	addr = &adap_emac->TX0HDP;
@@ -588,7 +614,11 @@ static void davinci_eth_ch_teardown(int ch)
 }
 
 /* Eth device close */
+#ifndef CONFIG_DM_ETH
 static void davinci_eth_close(struct eth_device *dev)
+#else /* with CONFIG_DM_ETH */
+static void davinci_emac_stop(struct udevice *dev)
+#endif /* CONFIG_DM_ETH */
 {
 	debug_emac("+ emac_close\n");
 
@@ -619,11 +649,15 @@ static int tx_send_loop = 0;
  * This function sends a single packet on the network and returns
  * positive number (number of bytes transmitted) or negative for error
  */
-static int davinci_eth_send_packet (struct eth_device *dev,
-					void *packet, int length)
+#ifndef CONFIG_DM_ETH
+static int davinci_eth_send_packet(struct eth_device *dev,
+				   void *packet, int length)
+#else /* with CONFIG_DM_ETH */
+static int davinci_emac_send(struct udevice *dev,
+			     void *packet, int length)
+#endif /* CONFIG_DM_ETH */
 {
-	int ret_status = -1;
-	int index;
+	int ret_status = -1, index;
 	tx_send_loop = 0;
 
 	index = get_active_phy();
@@ -672,7 +706,11 @@ static int davinci_eth_send_packet (struct eth_device *dev,
 /*
  * This function handles receipt of a packet from the network
  */
+#ifndef CONFIG_DM_ETH
 static int davinci_eth_rcv_packet (struct eth_device *dev)
+#else /* with CONFIG_DM_ETH */
+static int davinci_emac_recv(struct udevice *dev, int flags, uchar **packetp)
+#endif /* CONFIG_DM_ETH */
 {
 	volatile emac_desc *rx_curr_desc;
 	volatile emac_desc *curr_desc;
@@ -742,6 +780,9 @@ static int davinci_eth_rcv_packet (struct eth_device *dev)
 		}
 		return (ret);
 	}
+#ifdef CONFIG_DM_ETH
+	*packetp = rx_curr_desc->buffer;
+#endif
 	return (0);
 }
 
@@ -750,12 +791,16 @@ static int davinci_eth_rcv_packet (struct eth_device *dev)
  * EMAC modules power or pin multiplexors, that is done by board_init()
  * much earlier in bootup process. Returns 1 on success, 0 otherwise.
  */
+#ifndef CONFIG_DM_ETH
 int davinci_emac_initialize(void)
+#else /* with CONFIG_DM_ETH */
+static int davinci_emac_probe(struct udevice *dev)
+#endif /* CONFIG_DM_ETH */
 {
-	u_int32_t	phy_id;
-	u_int16_t	tmp;
-	int		i;
-	int		ret;
+	int i, ret;
+	u32 phy_id;
+	u16 tmp;
+#ifndef CONFIG_DM_ETH
 	struct eth_device *dev;
 
 	dev = malloc(sizeof *dev);
@@ -774,6 +819,7 @@ int davinci_emac_initialize(void)
 	dev->write_hwaddr = davinci_eth_set_mac_addr;
 
 	eth_register(dev);
+#endif /* CONFIG_DM_ETH */
 
 	davinci_eth_mdio_enable();
 
@@ -854,5 +900,34 @@ int davinci_emac_initialize(void)
 			phy[i].auto_negotiate(i);
 	}
 #endif
-	return(1);
+
+#ifndef CONFIG_DM_ETH
+	return 1;
+#else /* with CONFIG_DM_ETH */
+	return 0;
+#endif /* CONFIG_DM_ETH */
 }
+
+#ifdef CONFIG_DM_ETH
+static const struct eth_ops davinci_emac_ops = {
+	.start		= davinci_emac_start,
+	.send		= davinci_emac_send,
+	.recv		= davinci_emac_recv,
+	.stop		= davinci_emac_stop,
+	.write_hwaddr	= davinci_emac_write_hwaddr,
+};
+
+static const struct udevice_id davinci_emac_ids[] = {
+	{ .compatible = "ti,davinci-dm6467-emac" },
+	{ }
+};
+
+U_BOOT_DRIVER(davinci_emac) = {
+	.name		= "davinci_emac",
+	.id		= UCLASS_ETH,
+	.of_match	= davinci_emac_ids,
+	.probe		= davinci_emac_probe,
+	.ops		= &davinci_emac_ops,
+	.platdata_auto_alloc_size = sizeof(struct eth_pdata),
+};
+#endif /* CONFIG_DM_ETH */
-- 
2.21.0

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

* [U-Boot] [PATCH] net: davinci_emac: use driver model (CONFIG_DM_ETH)
  2019-04-30 16:03 [U-Boot] [PATCH] net: davinci_emac: use driver model (CONFIG_DM_ETH) Bartosz Golaszewski
@ 2019-05-09 18:50 ` Joe Hershberger
  2019-05-10 12:21   ` Bartosz Golaszewski
  0 siblings, 1 reply; 6+ messages in thread
From: Joe Hershberger @ 2019-05-09 18:50 UTC (permalink / raw)
  To: u-boot

On Tue, Apr 30, 2019 at 11:04 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
>
> From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
>
> Add support for CONFIG_DM_ETH to the davinci_emac driver. Optimally
> we should only support DM-enabled platforms but there are several
> non-DT boards that still use it so either we need to keep supporting
> it or drop the boards from u-boot. For now we're stuck with ugly
> ifdefs.

Which boards are still not using DM that you refer to here?

>
> This patch adds support for driver-model to the driver and converts
> all platforms that use the driver model to selecting CONFIG_DM_ETH.
>
> Tested on da850-evm and da850-lcdk.
>
> Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> ---
> NOTE: I'm currently working on modernizing da850 support in u-boot.
> This patch is just the first step - I plan on improving the emac driver
> in general but I'll be OoO until end of next week, so I decided to post
> it already for reviews.
>
> Does anyone know what the status is on boards like twister, ea20 etc.
> that use davinci_emac, but don't use the driver model? Dropping them
> would make it easier to clean up this driver.
>
> This patch applies on top of my previous series[1].
>
> [1] https://lists.denx.de/pipermail/u-boot/2019-April/367236.html
>
>  arch/arm/mach-davinci/cpu.c            |  13 ---
>  arch/arm/mach-omap2/omap3/emac.c       |   3 +-
>  board/davinci/da8xxevm/da850evm.c      |   5 --
>  board/davinci/da8xxevm/omapl138_lcdk.c |  14 ----
>  board/logicpd/am3517evm/am3517evm.c    |   1 -
>  board/ti/ti816x/evm.c                  |   3 +-
>  configs/am3517_evm_defconfig           |   1 +
>  configs/da850_am18xxevm_defconfig      |   1 +
>  configs/da850evm_defconfig             |   1 +
>  configs/da850evm_direct_nor_defconfig  |   1 +
>  configs/omapl138_lcdk_defconfig        |   1 +
>  configs/ti816x_evm_defconfig           |   1 +
>  drivers/net/ti/davinci_emac.c          | 109 +++++++++++++++++++++----
>  13 files changed, 100 insertions(+), 54 deletions(-)
>
> diff --git a/arch/arm/mach-davinci/cpu.c b/arch/arm/mach-davinci/cpu.c
> index f97ad3fc74..9fd6564d04 100644
> --- a/arch/arm/mach-davinci/cpu.c
> +++ b/arch/arm/mach-davinci/cpu.c
> @@ -5,7 +5,6 @@
>   */
>
>  #include <common.h>
> -#include <netdev.h>
>  #include <asm/arch/hardware.h>
>  #include <asm/io.h>
>
> @@ -90,15 +89,3 @@ int set_cpu_clk_info(void)
>         gd->bd->bi_dsp_freq = 0;
>         return 0;
>  }
> -
> -/*
> - * Initializes on-chip ethernet controllers.
> - * to override, implement board_eth_init()
> - */
> -int cpu_eth_init(bd_t *bis)
> -{
> -#if defined(CONFIG_DRIVER_TI_EMAC)
> -       davinci_emac_initialize();
> -#endif
> -       return 0;
> -}
> diff --git a/arch/arm/mach-omap2/omap3/emac.c b/arch/arm/mach-omap2/omap3/emac.c
> index c79e870183..fb0c9188f5 100644
> --- a/arch/arm/mach-omap2/omap3/emac.c
> +++ b/arch/arm/mach-omap2/omap3/emac.c
> @@ -7,7 +7,6 @@
>   */
>
>  #include <common.h>
> -#include <netdev.h>
>  #include <asm/io.h>
>  #include <asm/arch/am35x_def.h>
>
> @@ -24,5 +23,5 @@ int cpu_eth_init(bd_t *bis)
>         reset &= ~CPGMACSS_SW_RST;
>         writel(reset, &am35x_scm_general_regs->ip_sw_reset);
>
> -       return davinci_emac_initialize();
> +       return 0;
>  }
> diff --git a/board/davinci/da8xxevm/da850evm.c b/board/davinci/da8xxevm/da850evm.c
> index 1bc26828bf..0d2bc5fb32 100644
> --- a/board/davinci/da8xxevm/da850evm.c
> +++ b/board/davinci/da8xxevm/da850evm.c
> @@ -13,7 +13,6 @@
>  #include <environment.h>
>  #include <i2c.h>
>  #include <net.h>
> -#include <netdev.h>
>  #include <spi.h>
>  #include <spi_flash.h>
>  #include <asm/arch/hardware.h>
> @@ -472,10 +471,6 @@ int board_eth_init(bd_t *bis)
>         if (rmii_hw_init())
>                 printf("RMII hardware init failed!!!\n");
>  #endif
> -       if (!davinci_emac_initialize()) {
> -               printf("Error: Ethernet init failed!\n");
> -               return -1;
> -       }
>
>         return 0;
>  }
> diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c
> index 2c2f885d43..ef9656add8 100644
> --- a/board/davinci/da8xxevm/omapl138_lcdk.c
> +++ b/board/davinci/da8xxevm/omapl138_lcdk.c
> @@ -11,7 +11,6 @@
>  #include <common.h>
>  #include <i2c.h>
>  #include <net.h>
> -#include <netdev.h>
>  #include <spi.h>
>  #include <spi_flash.h>
>  #include <asm/arch/hardware.h>
> @@ -229,19 +228,6 @@ int board_init(void)
>
>  #ifdef CONFIG_DRIVER_TI_EMAC
>
> -/*
> - * Initializes on-board ethernet controllers.
> - */
> -int board_eth_init(bd_t *bis)
> -{
> -       if (!davinci_emac_initialize()) {
> -               printf("Error: Ethernet init failed!\n");
> -               return -1;
> -       }
> -
> -       return 0;
> -}
> -
>  #endif /* CONFIG_DRIVER_TI_EMAC */
>
>  #define CFG_MAC_ADDR_SPI_BUS   0
> diff --git a/board/logicpd/am3517evm/am3517evm.c b/board/logicpd/am3517evm/am3517evm.c
> index 10031a4801..bfd4e78274 100644
> --- a/board/logicpd/am3517evm/am3517evm.c
> +++ b/board/logicpd/am3517evm/am3517evm.c
> @@ -28,7 +28,6 @@
>  #include <linux/usb/gadget.h>
>  #include <linux/usb/musb.h>
>  #include <i2c.h>
> -#include <netdev.h>
>  #include "am3517evm.h"
>
>  DECLARE_GLOBAL_DATA_PTR;
> diff --git a/board/ti/ti816x/evm.c b/board/ti/ti816x/evm.c
> index 07a084bab8..240df8cbe1 100644
> --- a/board/ti/ti816x/evm.c
> +++ b/board/ti/ti816x/evm.c
> @@ -9,7 +9,6 @@
>  #include <common.h>
>  #include <environment.h>
>  #include <spl.h>
> -#include <netdev.h>
>  #include <asm/cache.h>
>  #include <asm/io.h>
>  #include <asm/arch/clock.h>
> @@ -56,7 +55,7 @@ int board_eth_init(bd_t *bis)
>                         printf("Unable to read MAC address. Set <ethaddr>\n");
>         }
>
> -       return davinci_emac_initialize();
> +       return 0;
>  }
>
>  #ifdef CONFIG_SPL_BUILD
> diff --git a/configs/am3517_evm_defconfig b/configs/am3517_evm_defconfig
> index b9f59f3291..0ea28a20b2 100644
> --- a/configs/am3517_evm_defconfig
> +++ b/configs/am3517_evm_defconfig
> @@ -45,6 +45,7 @@ CONFIG_SYS_NAND_U_BOOT_LOCATIONS=y
>  CONFIG_SYS_NAND_U_BOOT_OFFS=0x80000
>  CONFIG_SPL_NAND_SIMPLE=y
>  CONFIG_MII=y
> +CONFIG_DM_ETH=y
>  CONFIG_DRIVER_TI_EMAC=y
>  CONFIG_PINCTRL=y
>  CONFIG_PINCTRL_SINGLE=y
> diff --git a/configs/da850_am18xxevm_defconfig b/configs/da850_am18xxevm_defconfig
> index f098222113..6227cafc90 100644
> --- a/configs/da850_am18xxevm_defconfig
> +++ b/configs/da850_am18xxevm_defconfig
> @@ -52,6 +52,7 @@ CONFIG_SPI_FLASH=y
>  CONFIG_SPI_FLASH_STMICRO=y
>  CONFIG_SPI_FLASH_WINBOND=y
>  CONFIG_MII=y
> +CONFIG_DM_ETH=y
>  CONFIG_DRIVER_TI_EMAC=y
>  CONFIG_DM_SERIAL=y
>  CONFIG_SYS_NS16550=y
> diff --git a/configs/da850evm_defconfig b/configs/da850evm_defconfig
> index 221c204af0..78eadc6330 100644
> --- a/configs/da850evm_defconfig
> +++ b/configs/da850evm_defconfig
> @@ -60,6 +60,7 @@ CONFIG_SPI_FLASH_STMICRO=y
>  CONFIG_SPI_FLASH_WINBOND=y
>  CONFIG_SPI_FLASH_MTD=y
>  CONFIG_MII=y
> +CONFIG_DM_ETH=y
>  CONFIG_DRIVER_TI_EMAC=y
>  CONFIG_PINCTRL=y
>  CONFIG_PINCTRL_SINGLE=y
> diff --git a/configs/da850evm_direct_nor_defconfig b/configs/da850evm_direct_nor_defconfig
> index 166e77b8e3..2dd82d68b9 100644
> --- a/configs/da850evm_direct_nor_defconfig
> +++ b/configs/da850evm_direct_nor_defconfig
> @@ -51,6 +51,7 @@ CONFIG_SPI_FLASH=y
>  CONFIG_SPI_FLASH_STMICRO=y
>  CONFIG_SPI_FLASH_WINBOND=y
>  CONFIG_MII=y
> +CONFIG_DM_ETH=y
>  CONFIG_DRIVER_TI_EMAC=y
>  CONFIG_PINCTRL=y
>  CONFIG_PINCTRL_SINGLE=y
> diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig
> index e43141844a..0600ac3f4a 100644
> --- a/configs/omapl138_lcdk_defconfig
> +++ b/configs/omapl138_lcdk_defconfig
> @@ -51,6 +51,7 @@ CONFIG_SF_DEFAULT_SPEED=30000000
>  CONFIG_SPI_FLASH_STMICRO=y
>  CONFIG_SPI_FLASH_WINBOND=y
>  CONFIG_MII=y
> +CONFIG_DM_ETH=y
>  CONFIG_DRIVER_TI_EMAC=y
>  CONFIG_DM_SERIAL=y
>  CONFIG_SYS_NS16550=y
> diff --git a/configs/ti816x_evm_defconfig b/configs/ti816x_evm_defconfig
> index bf877f596b..131b25a188 100644
> --- a/configs/ti816x_evm_defconfig
> +++ b/configs/ti816x_evm_defconfig
> @@ -46,6 +46,7 @@ CONFIG_MMC_OMAP_HS=y
>  CONFIG_NAND=y
>  CONFIG_SYS_NAND_BUSWIDTH_16BIT=y
>  CONFIG_MII=y
> +CONFIG_DM_ETH=y
>  CONFIG_DRIVER_TI_EMAC=y
>  CONFIG_SYS_NS16550=y
>  CONFIG_SPI=y
> diff --git a/drivers/net/ti/davinci_emac.c b/drivers/net/ti/davinci_emac.c
> index 9d53984973..3252a235d2 100644
> --- a/drivers/net/ti/davinci_emac.c
> +++ b/drivers/net/ti/davinci_emac.c
> @@ -26,11 +26,13 @@
>  #include <net.h>
>  #include <miiphy.h>
>  #include <malloc.h>
> -#include <netdev.h>
>  #include <linux/compiler.h>
>  #include <asm/arch/emac_defs.h>
>  #include <asm/io.h>
>  #include "davinci_emac.h"
> +#ifndef CONFIG_DM_ETH
> +#include <netdev.h>
> +#endif
>
>  unsigned int   emac_dbg = 0;
>  #define debug_emac(fmt,args...)        if (emac_dbg) printf(fmt,##args)
> @@ -107,10 +109,16 @@ static u_int8_t   num_phy;
>
>  phy_t                          phy[CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT];
>
> +#ifndef CONFIG_DM_ETH

When you have both cases, please use positive logic. Flip the cases
and use #ifdef.

>  static int davinci_eth_set_mac_addr(struct eth_device *dev)
> +#else /* with CONFIG_DM_ETH */
> +static int davinci_emac_write_hwaddr(struct udevice *dev)
> +#endif /* CONFIG_DM_ETH */
>  {
> -       unsigned long           mac_hi;
> -       unsigned long           mac_lo;
> +#ifdef CONFIG_DM_ETH
> +       struct eth_pdata *pdata = dev_get_platdata(dev);
> +#endif
> +       unsigned long mac_hi, mac_lo;
>
>         /*
>          * Set MAC Addresses & Init multicast Hash to 0 (disable any multicast
> @@ -118,12 +126,22 @@ static int davinci_eth_set_mac_addr(struct eth_device *dev)
>          *  Using channel 0 only - other channels are disabled
>          *  */
>         writel(0, &adap_emac->MACINDEX);
> +
> +#ifndef CONFIG_DM_ETH

When you have both cases, please use positive logic. Flip the cases
and use #ifdef.

>         mac_hi = (dev->enetaddr[3] << 24) |
>                  (dev->enetaddr[2] << 16) |
>                  (dev->enetaddr[1] << 8)  |
>                  (dev->enetaddr[0]);
>         mac_lo = (dev->enetaddr[5] << 8) |
>                  (dev->enetaddr[4]);
> +#else /* with CONFIG_DM_ETH */
> +       mac_hi = (pdata->enetaddr[3] << 24) |
> +                (pdata->enetaddr[2] << 16) |
> +                (pdata->enetaddr[1] << 8)  |
> +                (pdata->enetaddr[0]);
> +       mac_lo = (pdata->enetaddr[5] << 8) |
> +                (pdata->enetaddr[4]);
> +#endif /* CONFIG_DM_ETH */
>
>         writel(mac_hi, &adap_emac->MACADDRHI);
>  #if defined(DAVINCI_EMAC_VERSION2)
> @@ -411,13 +429,17 @@ static void  __attribute__((unused)) davinci_eth_gigabit_enable(int phy_addr)
>  }
>
>  /* Eth device open */
> +#ifndef CONFIG_DM_ETH

When you have both cases, please use positive logic. Flip the cases
and use #ifdef.

>  static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
> +#else /* with CONFIG_DM_ETH */
> +static int davinci_emac_start(struct udevice *dev)
> +#endif /* CONFIG_DM_ETH */
>  {
> -       dv_reg_p                addr;
> -       u_int32_t               clkdiv, cnt, mac_control;
> -       uint16_t                __maybe_unused lpa_val;
> -       volatile emac_desc      *rx_desc;
> -       int                     index;
> +       u32 clkdiv, cnt, mac_control;
> +       volatile emac_desc *rx_desc;
> +       u16 __maybe_unused lpa_val;
> +       dv_reg_p addr;
> +       int index;
>
>         debug_emac("+ emac_open\n");
>
> @@ -447,7 +469,11 @@ static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
>         writel(1, &adap_emac->TXCONTROL);
>         writel(1, &adap_emac->RXCONTROL);
>
> +#ifndef CONFIG_DM_ETH

When you have both cases, please use positive logic. Flip the cases
and use #ifdef.

>         davinci_eth_set_mac_addr(dev);
> +#else /* with CONFIG_DM_ETH */
> +       davinci_emac_write_hwaddr(dev);
> +#endif /* CONFIG_DM_ETH */
>
>         /* Set DMA 8 TX / 8 RX Head pointers to 0 */
>         addr = &adap_emac->TX0HDP;
> @@ -588,7 +614,11 @@ static void davinci_eth_ch_teardown(int ch)
>  }
>
>  /* Eth device close */
> +#ifndef CONFIG_DM_ETH

When you have both cases, please use positive logic. Flip the cases
and use #ifdef.

>  static void davinci_eth_close(struct eth_device *dev)
> +#else /* with CONFIG_DM_ETH */
> +static void davinci_emac_stop(struct udevice *dev)
> +#endif /* CONFIG_DM_ETH */
>  {
>         debug_emac("+ emac_close\n");
>
> @@ -619,11 +649,15 @@ static int tx_send_loop = 0;
>   * This function sends a single packet on the network and returns
>   * positive number (number of bytes transmitted) or negative for error
>   */
> -static int davinci_eth_send_packet (struct eth_device *dev,
> -                                       void *packet, int length)
> +#ifndef CONFIG_DM_ETH

When you have both cases, please use positive logic. Flip the cases
and use #ifdef.

> +static int davinci_eth_send_packet(struct eth_device *dev,
> +                                  void *packet, int length)
> +#else /* with CONFIG_DM_ETH */
> +static int davinci_emac_send(struct udevice *dev,
> +                            void *packet, int length)
> +#endif /* CONFIG_DM_ETH */
>  {
> -       int ret_status = -1;
> -       int index;
> +       int ret_status = -1, index;

I'm not sure why you are mixing these formatting changes (which look
bad anyway) with the substantive changes. Please drop them.

>         tx_send_loop = 0;
>
>         index = get_active_phy();
> @@ -672,7 +706,11 @@ static int davinci_eth_send_packet (struct eth_device *dev,
>  /*
>   * This function handles receipt of a packet from the network
>   */
> +#ifndef CONFIG_DM_ETH

When you have both cases, please use positive logic. Flip the cases
and use #ifdef.

>  static int davinci_eth_rcv_packet (struct eth_device *dev)
> +#else /* with CONFIG_DM_ETH */
> +static int davinci_emac_recv(struct udevice *dev, int flags, uchar **packetp)
> +#endif /* CONFIG_DM_ETH */
>  {
>         volatile emac_desc *rx_curr_desc;
>         volatile emac_desc *curr_desc;

Please remove the call to net_process_received_packet() and split the
descriptor cleanup into a free_pkt() operation.

> @@ -742,6 +780,9 @@ static int davinci_eth_rcv_packet (struct eth_device *dev)
>                 }
>                 return (ret);
>         }
> +#ifdef CONFIG_DM_ETH
> +       *packetp = rx_curr_desc->buffer;
> +#endif
>         return (0);
>  }
>
> @@ -750,12 +791,16 @@ static int davinci_eth_rcv_packet (struct eth_device *dev)
>   * EMAC modules power or pin multiplexors, that is done by board_init()
>   * much earlier in bootup process. Returns 1 on success, 0 otherwise.
>   */
> +#ifndef CONFIG_DM_ETH

When you have both cases, please use positive logic. Flip the cases
and use #ifdef.

>  int davinci_emac_initialize(void)
> +#else /* with CONFIG_DM_ETH */
> +static int davinci_emac_probe(struct udevice *dev)
> +#endif /* CONFIG_DM_ETH */
>  {
> -       u_int32_t       phy_id;
> -       u_int16_t       tmp;
> -       int             i;
> -       int             ret;
> +       int i, ret;
> +       u32 phy_id;
> +       u16 tmp;
> +#ifndef CONFIG_DM_ETH
>         struct eth_device *dev;
>
>         dev = malloc(sizeof *dev);
> @@ -774,6 +819,7 @@ int davinci_emac_initialize(void)
>         dev->write_hwaddr = davinci_eth_set_mac_addr;
>
>         eth_register(dev);
> +#endif /* CONFIG_DM_ETH */
>
>         davinci_eth_mdio_enable();
>
> @@ -854,5 +900,34 @@ int davinci_emac_initialize(void)
>                         phy[i].auto_negotiate(i);
>         }
>  #endif
> -       return(1);
> +
> +#ifndef CONFIG_DM_ETH

When you have both cases, please use positive logic. Flip the cases
and use #ifdef.

> +       return 1;
> +#else /* with CONFIG_DM_ETH */
> +       return 0;
> +#endif /* CONFIG_DM_ETH */
>  }
> +
> +#ifdef CONFIG_DM_ETH
> +static const struct eth_ops davinci_emac_ops = {
> +       .start          = davinci_emac_start,
> +       .send           = davinci_emac_send,
> +       .recv           = davinci_emac_recv,
> +       .stop           = davinci_emac_stop,
> +       .write_hwaddr   = davinci_emac_write_hwaddr,
> +};
> +
> +static const struct udevice_id davinci_emac_ids[] = {
> +       { .compatible = "ti,davinci-dm6467-emac" },
> +       { }
> +};
> +
> +U_BOOT_DRIVER(davinci_emac) = {
> +       .name           = "davinci_emac",
> +       .id             = UCLASS_ETH,
> +       .of_match       = davinci_emac_ids,
> +       .probe          = davinci_emac_probe,
> +       .ops            = &davinci_emac_ops,
> +       .platdata_auto_alloc_size = sizeof(struct eth_pdata),
> +};
> +#endif /* CONFIG_DM_ETH */
> --
> 2.21.0
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot

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

* [U-Boot] [PATCH] net: davinci_emac: use driver model (CONFIG_DM_ETH)
  2019-05-09 18:50 ` Joe Hershberger
@ 2019-05-10 12:21   ` Bartosz Golaszewski
  2019-05-10 12:31     ` Adam Ford
  0 siblings, 1 reply; 6+ messages in thread
From: Bartosz Golaszewski @ 2019-05-10 12:21 UTC (permalink / raw)
  To: u-boot

czw., 9 maj 2019 o 20:48 Joe Hershberger <joe.hershberger@ni.com> napisał(a):
>
> On Tue, Apr 30, 2019 at 11:04 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
> >
> > From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> >
> > Add support for CONFIG_DM_ETH to the davinci_emac driver. Optimally
> > we should only support DM-enabled platforms but there are several
> > non-DT boards that still use it so either we need to keep supporting
> > it or drop the boards from u-boot. For now we're stuck with ugly
> > ifdefs.
>
> Which boards are still not using DM that you refer to here?
>

The following configs define CONFIG_DRIVER_TI_EMAC=y and don't define
CONFIG_DM=y:

am3517_evm_defconfig
calimain_defconfig
cm_t3517_defconfig
ea20_defconfig
eco5pk_defconfig
ipam390_defconfig
mcx_defconfig
mt_ventoux_defconfig
twister_defconfig

Are these still maintained?

Best regards,
Bartosz Golaszewski

> >
> > This patch adds support for driver-model to the driver and converts
> > all platforms that use the driver model to selecting CONFIG_DM_ETH.
> >
> > Tested on da850-evm and da850-lcdk.
> >
> > Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> > ---
> > NOTE: I'm currently working on modernizing da850 support in u-boot.
> > This patch is just the first step - I plan on improving the emac driver
> > in general but I'll be OoO until end of next week, so I decided to post
> > it already for reviews.
> >
> > Does anyone know what the status is on boards like twister, ea20 etc.
> > that use davinci_emac, but don't use the driver model? Dropping them
> > would make it easier to clean up this driver.
> >
> > This patch applies on top of my previous series[1].
> >
> > [1] https://lists.denx.de/pipermail/u-boot/2019-April/367236.html
> >
> >  arch/arm/mach-davinci/cpu.c            |  13 ---
> >  arch/arm/mach-omap2/omap3/emac.c       |   3 +-
> >  board/davinci/da8xxevm/da850evm.c      |   5 --
> >  board/davinci/da8xxevm/omapl138_lcdk.c |  14 ----
> >  board/logicpd/am3517evm/am3517evm.c    |   1 -
> >  board/ti/ti816x/evm.c                  |   3 +-
> >  configs/am3517_evm_defconfig           |   1 +
> >  configs/da850_am18xxevm_defconfig      |   1 +
> >  configs/da850evm_defconfig             |   1 +
> >  configs/da850evm_direct_nor_defconfig  |   1 +
> >  configs/omapl138_lcdk_defconfig        |   1 +
> >  configs/ti816x_evm_defconfig           |   1 +
> >  drivers/net/ti/davinci_emac.c          | 109 +++++++++++++++++++++----
> >  13 files changed, 100 insertions(+), 54 deletions(-)
> >
> > diff --git a/arch/arm/mach-davinci/cpu.c b/arch/arm/mach-davinci/cpu.c
> > index f97ad3fc74..9fd6564d04 100644
> > --- a/arch/arm/mach-davinci/cpu.c
> > +++ b/arch/arm/mach-davinci/cpu.c
> > @@ -5,7 +5,6 @@
> >   */
> >
> >  #include <common.h>
> > -#include <netdev.h>
> >  #include <asm/arch/hardware.h>
> >  #include <asm/io.h>
> >
> > @@ -90,15 +89,3 @@ int set_cpu_clk_info(void)
> >         gd->bd->bi_dsp_freq = 0;
> >         return 0;
> >  }
> > -
> > -/*
> > - * Initializes on-chip ethernet controllers.
> > - * to override, implement board_eth_init()
> > - */
> > -int cpu_eth_init(bd_t *bis)
> > -{
> > -#if defined(CONFIG_DRIVER_TI_EMAC)
> > -       davinci_emac_initialize();
> > -#endif
> > -       return 0;
> > -}
> > diff --git a/arch/arm/mach-omap2/omap3/emac.c b/arch/arm/mach-omap2/omap3/emac.c
> > index c79e870183..fb0c9188f5 100644
> > --- a/arch/arm/mach-omap2/omap3/emac.c
> > +++ b/arch/arm/mach-omap2/omap3/emac.c
> > @@ -7,7 +7,6 @@
> >   */
> >
> >  #include <common.h>
> > -#include <netdev.h>
> >  #include <asm/io.h>
> >  #include <asm/arch/am35x_def.h>
> >
> > @@ -24,5 +23,5 @@ int cpu_eth_init(bd_t *bis)
> >         reset &= ~CPGMACSS_SW_RST;
> >         writel(reset, &am35x_scm_general_regs->ip_sw_reset);
> >
> > -       return davinci_emac_initialize();
> > +       return 0;
> >  }
> > diff --git a/board/davinci/da8xxevm/da850evm.c b/board/davinci/da8xxevm/da850evm.c
> > index 1bc26828bf..0d2bc5fb32 100644
> > --- a/board/davinci/da8xxevm/da850evm.c
> > +++ b/board/davinci/da8xxevm/da850evm.c
> > @@ -13,7 +13,6 @@
> >  #include <environment.h>
> >  #include <i2c.h>
> >  #include <net.h>
> > -#include <netdev.h>
> >  #include <spi.h>
> >  #include <spi_flash.h>
> >  #include <asm/arch/hardware.h>
> > @@ -472,10 +471,6 @@ int board_eth_init(bd_t *bis)
> >         if (rmii_hw_init())
> >                 printf("RMII hardware init failed!!!\n");
> >  #endif
> > -       if (!davinci_emac_initialize()) {
> > -               printf("Error: Ethernet init failed!\n");
> > -               return -1;
> > -       }
> >
> >         return 0;
> >  }
> > diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c
> > index 2c2f885d43..ef9656add8 100644
> > --- a/board/davinci/da8xxevm/omapl138_lcdk.c
> > +++ b/board/davinci/da8xxevm/omapl138_lcdk.c
> > @@ -11,7 +11,6 @@
> >  #include <common.h>
> >  #include <i2c.h>
> >  #include <net.h>
> > -#include <netdev.h>
> >  #include <spi.h>
> >  #include <spi_flash.h>
> >  #include <asm/arch/hardware.h>
> > @@ -229,19 +228,6 @@ int board_init(void)
> >
> >  #ifdef CONFIG_DRIVER_TI_EMAC
> >
> > -/*
> > - * Initializes on-board ethernet controllers.
> > - */
> > -int board_eth_init(bd_t *bis)
> > -{
> > -       if (!davinci_emac_initialize()) {
> > -               printf("Error: Ethernet init failed!\n");
> > -               return -1;
> > -       }
> > -
> > -       return 0;
> > -}
> > -
> >  #endif /* CONFIG_DRIVER_TI_EMAC */
> >
> >  #define CFG_MAC_ADDR_SPI_BUS   0
> > diff --git a/board/logicpd/am3517evm/am3517evm.c b/board/logicpd/am3517evm/am3517evm.c
> > index 10031a4801..bfd4e78274 100644
> > --- a/board/logicpd/am3517evm/am3517evm.c
> > +++ b/board/logicpd/am3517evm/am3517evm.c
> > @@ -28,7 +28,6 @@
> >  #include <linux/usb/gadget.h>
> >  #include <linux/usb/musb.h>
> >  #include <i2c.h>
> > -#include <netdev.h>
> >  #include "am3517evm.h"
> >
> >  DECLARE_GLOBAL_DATA_PTR;
> > diff --git a/board/ti/ti816x/evm.c b/board/ti/ti816x/evm.c
> > index 07a084bab8..240df8cbe1 100644
> > --- a/board/ti/ti816x/evm.c
> > +++ b/board/ti/ti816x/evm.c
> > @@ -9,7 +9,6 @@
> >  #include <common.h>
> >  #include <environment.h>
> >  #include <spl.h>
> > -#include <netdev.h>
> >  #include <asm/cache.h>
> >  #include <asm/io.h>
> >  #include <asm/arch/clock.h>
> > @@ -56,7 +55,7 @@ int board_eth_init(bd_t *bis)
> >                         printf("Unable to read MAC address. Set <ethaddr>\n");
> >         }
> >
> > -       return davinci_emac_initialize();
> > +       return 0;
> >  }
> >
> >  #ifdef CONFIG_SPL_BUILD
> > diff --git a/configs/am3517_evm_defconfig b/configs/am3517_evm_defconfig
> > index b9f59f3291..0ea28a20b2 100644
> > --- a/configs/am3517_evm_defconfig
> > +++ b/configs/am3517_evm_defconfig
> > @@ -45,6 +45,7 @@ CONFIG_SYS_NAND_U_BOOT_LOCATIONS=y
> >  CONFIG_SYS_NAND_U_BOOT_OFFS=0x80000
> >  CONFIG_SPL_NAND_SIMPLE=y
> >  CONFIG_MII=y
> > +CONFIG_DM_ETH=y
> >  CONFIG_DRIVER_TI_EMAC=y
> >  CONFIG_PINCTRL=y
> >  CONFIG_PINCTRL_SINGLE=y
> > diff --git a/configs/da850_am18xxevm_defconfig b/configs/da850_am18xxevm_defconfig
> > index f098222113..6227cafc90 100644
> > --- a/configs/da850_am18xxevm_defconfig
> > +++ b/configs/da850_am18xxevm_defconfig
> > @@ -52,6 +52,7 @@ CONFIG_SPI_FLASH=y
> >  CONFIG_SPI_FLASH_STMICRO=y
> >  CONFIG_SPI_FLASH_WINBOND=y
> >  CONFIG_MII=y
> > +CONFIG_DM_ETH=y
> >  CONFIG_DRIVER_TI_EMAC=y
> >  CONFIG_DM_SERIAL=y
> >  CONFIG_SYS_NS16550=y
> > diff --git a/configs/da850evm_defconfig b/configs/da850evm_defconfig
> > index 221c204af0..78eadc6330 100644
> > --- a/configs/da850evm_defconfig
> > +++ b/configs/da850evm_defconfig
> > @@ -60,6 +60,7 @@ CONFIG_SPI_FLASH_STMICRO=y
> >  CONFIG_SPI_FLASH_WINBOND=y
> >  CONFIG_SPI_FLASH_MTD=y
> >  CONFIG_MII=y
> > +CONFIG_DM_ETH=y
> >  CONFIG_DRIVER_TI_EMAC=y
> >  CONFIG_PINCTRL=y
> >  CONFIG_PINCTRL_SINGLE=y
> > diff --git a/configs/da850evm_direct_nor_defconfig b/configs/da850evm_direct_nor_defconfig
> > index 166e77b8e3..2dd82d68b9 100644
> > --- a/configs/da850evm_direct_nor_defconfig
> > +++ b/configs/da850evm_direct_nor_defconfig
> > @@ -51,6 +51,7 @@ CONFIG_SPI_FLASH=y
> >  CONFIG_SPI_FLASH_STMICRO=y
> >  CONFIG_SPI_FLASH_WINBOND=y
> >  CONFIG_MII=y
> > +CONFIG_DM_ETH=y
> >  CONFIG_DRIVER_TI_EMAC=y
> >  CONFIG_PINCTRL=y
> >  CONFIG_PINCTRL_SINGLE=y
> > diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig
> > index e43141844a..0600ac3f4a 100644
> > --- a/configs/omapl138_lcdk_defconfig
> > +++ b/configs/omapl138_lcdk_defconfig
> > @@ -51,6 +51,7 @@ CONFIG_SF_DEFAULT_SPEED=30000000
> >  CONFIG_SPI_FLASH_STMICRO=y
> >  CONFIG_SPI_FLASH_WINBOND=y
> >  CONFIG_MII=y
> > +CONFIG_DM_ETH=y
> >  CONFIG_DRIVER_TI_EMAC=y
> >  CONFIG_DM_SERIAL=y
> >  CONFIG_SYS_NS16550=y
> > diff --git a/configs/ti816x_evm_defconfig b/configs/ti816x_evm_defconfig
> > index bf877f596b..131b25a188 100644
> > --- a/configs/ti816x_evm_defconfig
> > +++ b/configs/ti816x_evm_defconfig
> > @@ -46,6 +46,7 @@ CONFIG_MMC_OMAP_HS=y
> >  CONFIG_NAND=y
> >  CONFIG_SYS_NAND_BUSWIDTH_16BIT=y
> >  CONFIG_MII=y
> > +CONFIG_DM_ETH=y
> >  CONFIG_DRIVER_TI_EMAC=y
> >  CONFIG_SYS_NS16550=y
> >  CONFIG_SPI=y
> > diff --git a/drivers/net/ti/davinci_emac.c b/drivers/net/ti/davinci_emac.c
> > index 9d53984973..3252a235d2 100644
> > --- a/drivers/net/ti/davinci_emac.c
> > +++ b/drivers/net/ti/davinci_emac.c
> > @@ -26,11 +26,13 @@
> >  #include <net.h>
> >  #include <miiphy.h>
> >  #include <malloc.h>
> > -#include <netdev.h>
> >  #include <linux/compiler.h>
> >  #include <asm/arch/emac_defs.h>
> >  #include <asm/io.h>
> >  #include "davinci_emac.h"
> > +#ifndef CONFIG_DM_ETH
> > +#include <netdev.h>
> > +#endif
> >
> >  unsigned int   emac_dbg = 0;
> >  #define debug_emac(fmt,args...)        if (emac_dbg) printf(fmt,##args)
> > @@ -107,10 +109,16 @@ static u_int8_t   num_phy;
> >
> >  phy_t                          phy[CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT];
> >
> > +#ifndef CONFIG_DM_ETH
>
> When you have both cases, please use positive logic. Flip the cases
> and use #ifdef.
>
> >  static int davinci_eth_set_mac_addr(struct eth_device *dev)
> > +#else /* with CONFIG_DM_ETH */
> > +static int davinci_emac_write_hwaddr(struct udevice *dev)
> > +#endif /* CONFIG_DM_ETH */
> >  {
> > -       unsigned long           mac_hi;
> > -       unsigned long           mac_lo;
> > +#ifdef CONFIG_DM_ETH
> > +       struct eth_pdata *pdata = dev_get_platdata(dev);
> > +#endif
> > +       unsigned long mac_hi, mac_lo;
> >
> >         /*
> >          * Set MAC Addresses & Init multicast Hash to 0 (disable any multicast
> > @@ -118,12 +126,22 @@ static int davinci_eth_set_mac_addr(struct eth_device *dev)
> >          *  Using channel 0 only - other channels are disabled
> >          *  */
> >         writel(0, &adap_emac->MACINDEX);
> > +
> > +#ifndef CONFIG_DM_ETH
>
> When you have both cases, please use positive logic. Flip the cases
> and use #ifdef.
>
> >         mac_hi = (dev->enetaddr[3] << 24) |
> >                  (dev->enetaddr[2] << 16) |
> >                  (dev->enetaddr[1] << 8)  |
> >                  (dev->enetaddr[0]);
> >         mac_lo = (dev->enetaddr[5] << 8) |
> >                  (dev->enetaddr[4]);
> > +#else /* with CONFIG_DM_ETH */
> > +       mac_hi = (pdata->enetaddr[3] << 24) |
> > +                (pdata->enetaddr[2] << 16) |
> > +                (pdata->enetaddr[1] << 8)  |
> > +                (pdata->enetaddr[0]);
> > +       mac_lo = (pdata->enetaddr[5] << 8) |
> > +                (pdata->enetaddr[4]);
> > +#endif /* CONFIG_DM_ETH */
> >
> >         writel(mac_hi, &adap_emac->MACADDRHI);
> >  #if defined(DAVINCI_EMAC_VERSION2)
> > @@ -411,13 +429,17 @@ static void  __attribute__((unused)) davinci_eth_gigabit_enable(int phy_addr)
> >  }
> >
> >  /* Eth device open */
> > +#ifndef CONFIG_DM_ETH
>
> When you have both cases, please use positive logic. Flip the cases
> and use #ifdef.
>
> >  static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
> > +#else /* with CONFIG_DM_ETH */
> > +static int davinci_emac_start(struct udevice *dev)
> > +#endif /* CONFIG_DM_ETH */
> >  {
> > -       dv_reg_p                addr;
> > -       u_int32_t               clkdiv, cnt, mac_control;
> > -       uint16_t                __maybe_unused lpa_val;
> > -       volatile emac_desc      *rx_desc;
> > -       int                     index;
> > +       u32 clkdiv, cnt, mac_control;
> > +       volatile emac_desc *rx_desc;
> > +       u16 __maybe_unused lpa_val;
> > +       dv_reg_p addr;
> > +       int index;
> >
> >         debug_emac("+ emac_open\n");
> >
> > @@ -447,7 +469,11 @@ static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
> >         writel(1, &adap_emac->TXCONTROL);
> >         writel(1, &adap_emac->RXCONTROL);
> >
> > +#ifndef CONFIG_DM_ETH
>
> When you have both cases, please use positive logic. Flip the cases
> and use #ifdef.
>
> >         davinci_eth_set_mac_addr(dev);
> > +#else /* with CONFIG_DM_ETH */
> > +       davinci_emac_write_hwaddr(dev);
> > +#endif /* CONFIG_DM_ETH */
> >
> >         /* Set DMA 8 TX / 8 RX Head pointers to 0 */
> >         addr = &adap_emac->TX0HDP;
> > @@ -588,7 +614,11 @@ static void davinci_eth_ch_teardown(int ch)
> >  }
> >
> >  /* Eth device close */
> > +#ifndef CONFIG_DM_ETH
>
> When you have both cases, please use positive logic. Flip the cases
> and use #ifdef.
>
> >  static void davinci_eth_close(struct eth_device *dev)
> > +#else /* with CONFIG_DM_ETH */
> > +static void davinci_emac_stop(struct udevice *dev)
> > +#endif /* CONFIG_DM_ETH */
> >  {
> >         debug_emac("+ emac_close\n");
> >
> > @@ -619,11 +649,15 @@ static int tx_send_loop = 0;
> >   * This function sends a single packet on the network and returns
> >   * positive number (number of bytes transmitted) or negative for error
> >   */
> > -static int davinci_eth_send_packet (struct eth_device *dev,
> > -                                       void *packet, int length)
> > +#ifndef CONFIG_DM_ETH
>
> When you have both cases, please use positive logic. Flip the cases
> and use #ifdef.
>
> > +static int davinci_eth_send_packet(struct eth_device *dev,
> > +                                  void *packet, int length)
> > +#else /* with CONFIG_DM_ETH */
> > +static int davinci_emac_send(struct udevice *dev,
> > +                            void *packet, int length)
> > +#endif /* CONFIG_DM_ETH */
> >  {
> > -       int ret_status = -1;
> > -       int index;
> > +       int ret_status = -1, index;
>
> I'm not sure why you are mixing these formatting changes (which look
> bad anyway) with the substantive changes. Please drop them.
>
> >         tx_send_loop = 0;
> >
> >         index = get_active_phy();
> > @@ -672,7 +706,11 @@ static int davinci_eth_send_packet (struct eth_device *dev,
> >  /*
> >   * This function handles receipt of a packet from the network
> >   */
> > +#ifndef CONFIG_DM_ETH
>
> When you have both cases, please use positive logic. Flip the cases
> and use #ifdef.
>
> >  static int davinci_eth_rcv_packet (struct eth_device *dev)
> > +#else /* with CONFIG_DM_ETH */
> > +static int davinci_emac_recv(struct udevice *dev, int flags, uchar **packetp)
> > +#endif /* CONFIG_DM_ETH */
> >  {
> >         volatile emac_desc *rx_curr_desc;
> >         volatile emac_desc *curr_desc;
>
> Please remove the call to net_process_received_packet() and split the
> descriptor cleanup into a free_pkt() operation.
>
> > @@ -742,6 +780,9 @@ static int davinci_eth_rcv_packet (struct eth_device *dev)
> >                 }
> >                 return (ret);
> >         }
> > +#ifdef CONFIG_DM_ETH
> > +       *packetp = rx_curr_desc->buffer;
> > +#endif
> >         return (0);
> >  }
> >
> > @@ -750,12 +791,16 @@ static int davinci_eth_rcv_packet (struct eth_device *dev)
> >   * EMAC modules power or pin multiplexors, that is done by board_init()
> >   * much earlier in bootup process. Returns 1 on success, 0 otherwise.
> >   */
> > +#ifndef CONFIG_DM_ETH
>
> When you have both cases, please use positive logic. Flip the cases
> and use #ifdef.
>
> >  int davinci_emac_initialize(void)
> > +#else /* with CONFIG_DM_ETH */
> > +static int davinci_emac_probe(struct udevice *dev)
> > +#endif /* CONFIG_DM_ETH */
> >  {
> > -       u_int32_t       phy_id;
> > -       u_int16_t       tmp;
> > -       int             i;
> > -       int             ret;
> > +       int i, ret;
> > +       u32 phy_id;
> > +       u16 tmp;
> > +#ifndef CONFIG_DM_ETH
> >         struct eth_device *dev;
> >
> >         dev = malloc(sizeof *dev);
> > @@ -774,6 +819,7 @@ int davinci_emac_initialize(void)
> >         dev->write_hwaddr = davinci_eth_set_mac_addr;
> >
> >         eth_register(dev);
> > +#endif /* CONFIG_DM_ETH */
> >
> >         davinci_eth_mdio_enable();
> >
> > @@ -854,5 +900,34 @@ int davinci_emac_initialize(void)
> >                         phy[i].auto_negotiate(i);
> >         }
> >  #endif
> > -       return(1);
> > +
> > +#ifndef CONFIG_DM_ETH
>
> When you have both cases, please use positive logic. Flip the cases
> and use #ifdef.
>
> > +       return 1;
> > +#else /* with CONFIG_DM_ETH */
> > +       return 0;
> > +#endif /* CONFIG_DM_ETH */
> >  }
> > +
> > +#ifdef CONFIG_DM_ETH
> > +static const struct eth_ops davinci_emac_ops = {
> > +       .start          = davinci_emac_start,
> > +       .send           = davinci_emac_send,
> > +       .recv           = davinci_emac_recv,
> > +       .stop           = davinci_emac_stop,
> > +       .write_hwaddr   = davinci_emac_write_hwaddr,
> > +};
> > +
> > +static const struct udevice_id davinci_emac_ids[] = {
> > +       { .compatible = "ti,davinci-dm6467-emac" },
> > +       { }
> > +};
> > +
> > +U_BOOT_DRIVER(davinci_emac) = {
> > +       .name           = "davinci_emac",
> > +       .id             = UCLASS_ETH,
> > +       .of_match       = davinci_emac_ids,
> > +       .probe          = davinci_emac_probe,
> > +       .ops            = &davinci_emac_ops,
> > +       .platdata_auto_alloc_size = sizeof(struct eth_pdata),
> > +};
> > +#endif /* CONFIG_DM_ETH */
> > --
> > 2.21.0
> >
> > _______________________________________________
> > U-Boot mailing list
> > U-Boot at lists.denx.de
> > https://lists.denx.de/listinfo/u-boot

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

* [U-Boot] [PATCH] net: davinci_emac: use driver model (CONFIG_DM_ETH)
  2019-05-10 12:21   ` Bartosz Golaszewski
@ 2019-05-10 12:31     ` Adam Ford
  2019-05-10 12:50       ` Bartosz Golaszewski
  0 siblings, 1 reply; 6+ messages in thread
From: Adam Ford @ 2019-05-10 12:31 UTC (permalink / raw)
  To: u-boot

On Fri, May 10, 2019 at 7:22 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
>
> czw., 9 maj 2019 o 20:48 Joe Hershberger <joe.hershberger@ni.com> napisał(a):
> >
> > On Tue, Apr 30, 2019 at 11:04 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
> > >
> > > From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> > >
> > > Add support for CONFIG_DM_ETH to the davinci_emac driver. Optimally
> > > we should only support DM-enabled platforms but there are several
> > > non-DT boards that still use it so either we need to keep supporting
> > > it or drop the boards from u-boot. For now we're stuck with ugly
> > > ifdefs.
> >
> > Which boards are still not using DM that you refer to here?
> >
>
> The following configs define CONFIG_DRIVER_TI_EMAC=y and don't define
> CONFIG_DM=y:
>
> am3517_evm_defconfig
> calimain_defconfig
> cm_t3517_defconfig
> ea20_defconfig
> eco5pk_defconfig
> ipam390_defconfig
> mcx_defconfig
> mt_ventoux_defconfig
> twister_defconfig
>
> Are these still maintained?

I am still maintaining the am3517_evm. Config DM is being set for it.
The following are set in Kconfig:
 select DM
 select DM_GPIO
 select DM_I2C
 select DM_MMC
 select DM_SERIAL
 imply CMD_DM

The last time I ran some spot checks the ethernet was working.  I
haven't checked lately.  Is there something you need me to check?

adam
>
> Best regards,
> Bartosz Golaszewski
>
> > >
> > > This patch adds support for driver-model to the driver and converts
> > > all platforms that use the driver model to selecting CONFIG_DM_ETH.
> > >
> > > Tested on da850-evm and da850-lcdk.
> > >
> > > Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> > > ---
> > > NOTE: I'm currently working on modernizing da850 support in u-boot.
> > > This patch is just the first step - I plan on improving the emac driver
> > > in general but I'll be OoO until end of next week, so I decided to post
> > > it already for reviews.
> > >
> > > Does anyone know what the status is on boards like twister, ea20 etc.
> > > that use davinci_emac, but don't use the driver model? Dropping them
> > > would make it easier to clean up this driver.
> > >
> > > This patch applies on top of my previous series[1].
> > >
> > > [1] https://lists.denx.de/pipermail/u-boot/2019-April/367236.html
> > >
> > >  arch/arm/mach-davinci/cpu.c            |  13 ---
> > >  arch/arm/mach-omap2/omap3/emac.c       |   3 +-
> > >  board/davinci/da8xxevm/da850evm.c      |   5 --
> > >  board/davinci/da8xxevm/omapl138_lcdk.c |  14 ----
> > >  board/logicpd/am3517evm/am3517evm.c    |   1 -
> > >  board/ti/ti816x/evm.c                  |   3 +-
> > >  configs/am3517_evm_defconfig           |   1 +
> > >  configs/da850_am18xxevm_defconfig      |   1 +
> > >  configs/da850evm_defconfig             |   1 +
> > >  configs/da850evm_direct_nor_defconfig  |   1 +
> > >  configs/omapl138_lcdk_defconfig        |   1 +
> > >  configs/ti816x_evm_defconfig           |   1 +
> > >  drivers/net/ti/davinci_emac.c          | 109 +++++++++++++++++++++----
> > >  13 files changed, 100 insertions(+), 54 deletions(-)
> > >
> > > diff --git a/arch/arm/mach-davinci/cpu.c b/arch/arm/mach-davinci/cpu.c
> > > index f97ad3fc74..9fd6564d04 100644
> > > --- a/arch/arm/mach-davinci/cpu.c
> > > +++ b/arch/arm/mach-davinci/cpu.c
> > > @@ -5,7 +5,6 @@
> > >   */
> > >
> > >  #include <common.h>
> > > -#include <netdev.h>
> > >  #include <asm/arch/hardware.h>
> > >  #include <asm/io.h>
> > >
> > > @@ -90,15 +89,3 @@ int set_cpu_clk_info(void)
> > >         gd->bd->bi_dsp_freq = 0;
> > >         return 0;
> > >  }
> > > -
> > > -/*
> > > - * Initializes on-chip ethernet controllers.
> > > - * to override, implement board_eth_init()
> > > - */
> > > -int cpu_eth_init(bd_t *bis)
> > > -{
> > > -#if defined(CONFIG_DRIVER_TI_EMAC)
> > > -       davinci_emac_initialize();
> > > -#endif
> > > -       return 0;
> > > -}
> > > diff --git a/arch/arm/mach-omap2/omap3/emac.c b/arch/arm/mach-omap2/omap3/emac.c
> > > index c79e870183..fb0c9188f5 100644
> > > --- a/arch/arm/mach-omap2/omap3/emac.c
> > > +++ b/arch/arm/mach-omap2/omap3/emac.c
> > > @@ -7,7 +7,6 @@
> > >   */
> > >
> > >  #include <common.h>
> > > -#include <netdev.h>
> > >  #include <asm/io.h>
> > >  #include <asm/arch/am35x_def.h>
> > >
> > > @@ -24,5 +23,5 @@ int cpu_eth_init(bd_t *bis)
> > >         reset &= ~CPGMACSS_SW_RST;
> > >         writel(reset, &am35x_scm_general_regs->ip_sw_reset);
> > >
> > > -       return davinci_emac_initialize();
> > > +       return 0;
> > >  }
> > > diff --git a/board/davinci/da8xxevm/da850evm.c b/board/davinci/da8xxevm/da850evm.c
> > > index 1bc26828bf..0d2bc5fb32 100644
> > > --- a/board/davinci/da8xxevm/da850evm.c
> > > +++ b/board/davinci/da8xxevm/da850evm.c
> > > @@ -13,7 +13,6 @@
> > >  #include <environment.h>
> > >  #include <i2c.h>
> > >  #include <net.h>
> > > -#include <netdev.h>
> > >  #include <spi.h>
> > >  #include <spi_flash.h>
> > >  #include <asm/arch/hardware.h>
> > > @@ -472,10 +471,6 @@ int board_eth_init(bd_t *bis)
> > >         if (rmii_hw_init())
> > >                 printf("RMII hardware init failed!!!\n");
> > >  #endif
> > > -       if (!davinci_emac_initialize()) {
> > > -               printf("Error: Ethernet init failed!\n");
> > > -               return -1;
> > > -       }
> > >
> > >         return 0;
> > >  }
> > > diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c
> > > index 2c2f885d43..ef9656add8 100644
> > > --- a/board/davinci/da8xxevm/omapl138_lcdk.c
> > > +++ b/board/davinci/da8xxevm/omapl138_lcdk.c
> > > @@ -11,7 +11,6 @@
> > >  #include <common.h>
> > >  #include <i2c.h>
> > >  #include <net.h>
> > > -#include <netdev.h>
> > >  #include <spi.h>
> > >  #include <spi_flash.h>
> > >  #include <asm/arch/hardware.h>
> > > @@ -229,19 +228,6 @@ int board_init(void)
> > >
> > >  #ifdef CONFIG_DRIVER_TI_EMAC
> > >
> > > -/*
> > > - * Initializes on-board ethernet controllers.
> > > - */
> > > -int board_eth_init(bd_t *bis)
> > > -{
> > > -       if (!davinci_emac_initialize()) {
> > > -               printf("Error: Ethernet init failed!\n");
> > > -               return -1;
> > > -       }
> > > -
> > > -       return 0;
> > > -}
> > > -
> > >  #endif /* CONFIG_DRIVER_TI_EMAC */
> > >
> > >  #define CFG_MAC_ADDR_SPI_BUS   0
> > > diff --git a/board/logicpd/am3517evm/am3517evm.c b/board/logicpd/am3517evm/am3517evm.c
> > > index 10031a4801..bfd4e78274 100644
> > > --- a/board/logicpd/am3517evm/am3517evm.c
> > > +++ b/board/logicpd/am3517evm/am3517evm.c
> > > @@ -28,7 +28,6 @@
> > >  #include <linux/usb/gadget.h>
> > >  #include <linux/usb/musb.h>
> > >  #include <i2c.h>
> > > -#include <netdev.h>
> > >  #include "am3517evm.h"
> > >
> > >  DECLARE_GLOBAL_DATA_PTR;
> > > diff --git a/board/ti/ti816x/evm.c b/board/ti/ti816x/evm.c
> > > index 07a084bab8..240df8cbe1 100644
> > > --- a/board/ti/ti816x/evm.c
> > > +++ b/board/ti/ti816x/evm.c
> > > @@ -9,7 +9,6 @@
> > >  #include <common.h>
> > >  #include <environment.h>
> > >  #include <spl.h>
> > > -#include <netdev.h>
> > >  #include <asm/cache.h>
> > >  #include <asm/io.h>
> > >  #include <asm/arch/clock.h>
> > > @@ -56,7 +55,7 @@ int board_eth_init(bd_t *bis)
> > >                         printf("Unable to read MAC address. Set <ethaddr>\n");
> > >         }
> > >
> > > -       return davinci_emac_initialize();
> > > +       return 0;
> > >  }
> > >
> > >  #ifdef CONFIG_SPL_BUILD
> > > diff --git a/configs/am3517_evm_defconfig b/configs/am3517_evm_defconfig
> > > index b9f59f3291..0ea28a20b2 100644
> > > --- a/configs/am3517_evm_defconfig
> > > +++ b/configs/am3517_evm_defconfig
> > > @@ -45,6 +45,7 @@ CONFIG_SYS_NAND_U_BOOT_LOCATIONS=y
> > >  CONFIG_SYS_NAND_U_BOOT_OFFS=0x80000
> > >  CONFIG_SPL_NAND_SIMPLE=y
> > >  CONFIG_MII=y
> > > +CONFIG_DM_ETH=y
> > >  CONFIG_DRIVER_TI_EMAC=y
> > >  CONFIG_PINCTRL=y
> > >  CONFIG_PINCTRL_SINGLE=y
> > > diff --git a/configs/da850_am18xxevm_defconfig b/configs/da850_am18xxevm_defconfig
> > > index f098222113..6227cafc90 100644
> > > --- a/configs/da850_am18xxevm_defconfig
> > > +++ b/configs/da850_am18xxevm_defconfig
> > > @@ -52,6 +52,7 @@ CONFIG_SPI_FLASH=y
> > >  CONFIG_SPI_FLASH_STMICRO=y
> > >  CONFIG_SPI_FLASH_WINBOND=y
> > >  CONFIG_MII=y
> > > +CONFIG_DM_ETH=y
> > >  CONFIG_DRIVER_TI_EMAC=y
> > >  CONFIG_DM_SERIAL=y
> > >  CONFIG_SYS_NS16550=y
> > > diff --git a/configs/da850evm_defconfig b/configs/da850evm_defconfig
> > > index 221c204af0..78eadc6330 100644
> > > --- a/configs/da850evm_defconfig
> > > +++ b/configs/da850evm_defconfig
> > > @@ -60,6 +60,7 @@ CONFIG_SPI_FLASH_STMICRO=y
> > >  CONFIG_SPI_FLASH_WINBOND=y
> > >  CONFIG_SPI_FLASH_MTD=y
> > >  CONFIG_MII=y
> > > +CONFIG_DM_ETH=y
> > >  CONFIG_DRIVER_TI_EMAC=y
> > >  CONFIG_PINCTRL=y
> > >  CONFIG_PINCTRL_SINGLE=y
> > > diff --git a/configs/da850evm_direct_nor_defconfig b/configs/da850evm_direct_nor_defconfig
> > > index 166e77b8e3..2dd82d68b9 100644
> > > --- a/configs/da850evm_direct_nor_defconfig
> > > +++ b/configs/da850evm_direct_nor_defconfig
> > > @@ -51,6 +51,7 @@ CONFIG_SPI_FLASH=y
> > >  CONFIG_SPI_FLASH_STMICRO=y
> > >  CONFIG_SPI_FLASH_WINBOND=y
> > >  CONFIG_MII=y
> > > +CONFIG_DM_ETH=y
> > >  CONFIG_DRIVER_TI_EMAC=y
> > >  CONFIG_PINCTRL=y
> > >  CONFIG_PINCTRL_SINGLE=y
> > > diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig
> > > index e43141844a..0600ac3f4a 100644
> > > --- a/configs/omapl138_lcdk_defconfig
> > > +++ b/configs/omapl138_lcdk_defconfig
> > > @@ -51,6 +51,7 @@ CONFIG_SF_DEFAULT_SPEED=30000000
> > >  CONFIG_SPI_FLASH_STMICRO=y
> > >  CONFIG_SPI_FLASH_WINBOND=y
> > >  CONFIG_MII=y
> > > +CONFIG_DM_ETH=y
> > >  CONFIG_DRIVER_TI_EMAC=y
> > >  CONFIG_DM_SERIAL=y
> > >  CONFIG_SYS_NS16550=y
> > > diff --git a/configs/ti816x_evm_defconfig b/configs/ti816x_evm_defconfig
> > > index bf877f596b..131b25a188 100644
> > > --- a/configs/ti816x_evm_defconfig
> > > +++ b/configs/ti816x_evm_defconfig
> > > @@ -46,6 +46,7 @@ CONFIG_MMC_OMAP_HS=y
> > >  CONFIG_NAND=y
> > >  CONFIG_SYS_NAND_BUSWIDTH_16BIT=y
> > >  CONFIG_MII=y
> > > +CONFIG_DM_ETH=y
> > >  CONFIG_DRIVER_TI_EMAC=y
> > >  CONFIG_SYS_NS16550=y
> > >  CONFIG_SPI=y
> > > diff --git a/drivers/net/ti/davinci_emac.c b/drivers/net/ti/davinci_emac.c
> > > index 9d53984973..3252a235d2 100644
> > > --- a/drivers/net/ti/davinci_emac.c
> > > +++ b/drivers/net/ti/davinci_emac.c
> > > @@ -26,11 +26,13 @@
> > >  #include <net.h>
> > >  #include <miiphy.h>
> > >  #include <malloc.h>
> > > -#include <netdev.h>
> > >  #include <linux/compiler.h>
> > >  #include <asm/arch/emac_defs.h>
> > >  #include <asm/io.h>
> > >  #include "davinci_emac.h"
> > > +#ifndef CONFIG_DM_ETH
> > > +#include <netdev.h>
> > > +#endif
> > >
> > >  unsigned int   emac_dbg = 0;
> > >  #define debug_emac(fmt,args...)        if (emac_dbg) printf(fmt,##args)
> > > @@ -107,10 +109,16 @@ static u_int8_t   num_phy;
> > >
> > >  phy_t                          phy[CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT];
> > >
> > > +#ifndef CONFIG_DM_ETH
> >
> > When you have both cases, please use positive logic. Flip the cases
> > and use #ifdef.
> >
> > >  static int davinci_eth_set_mac_addr(struct eth_device *dev)
> > > +#else /* with CONFIG_DM_ETH */
> > > +static int davinci_emac_write_hwaddr(struct udevice *dev)
> > > +#endif /* CONFIG_DM_ETH */
> > >  {
> > > -       unsigned long           mac_hi;
> > > -       unsigned long           mac_lo;
> > > +#ifdef CONFIG_DM_ETH
> > > +       struct eth_pdata *pdata = dev_get_platdata(dev);
> > > +#endif
> > > +       unsigned long mac_hi, mac_lo;
> > >
> > >         /*
> > >          * Set MAC Addresses & Init multicast Hash to 0 (disable any multicast
> > > @@ -118,12 +126,22 @@ static int davinci_eth_set_mac_addr(struct eth_device *dev)
> > >          *  Using channel 0 only - other channels are disabled
> > >          *  */
> > >         writel(0, &adap_emac->MACINDEX);
> > > +
> > > +#ifndef CONFIG_DM_ETH
> >
> > When you have both cases, please use positive logic. Flip the cases
> > and use #ifdef.
> >
> > >         mac_hi = (dev->enetaddr[3] << 24) |
> > >                  (dev->enetaddr[2] << 16) |
> > >                  (dev->enetaddr[1] << 8)  |
> > >                  (dev->enetaddr[0]);
> > >         mac_lo = (dev->enetaddr[5] << 8) |
> > >                  (dev->enetaddr[4]);
> > > +#else /* with CONFIG_DM_ETH */
> > > +       mac_hi = (pdata->enetaddr[3] << 24) |
> > > +                (pdata->enetaddr[2] << 16) |
> > > +                (pdata->enetaddr[1] << 8)  |
> > > +                (pdata->enetaddr[0]);
> > > +       mac_lo = (pdata->enetaddr[5] << 8) |
> > > +                (pdata->enetaddr[4]);
> > > +#endif /* CONFIG_DM_ETH */
> > >
> > >         writel(mac_hi, &adap_emac->MACADDRHI);
> > >  #if defined(DAVINCI_EMAC_VERSION2)
> > > @@ -411,13 +429,17 @@ static void  __attribute__((unused)) davinci_eth_gigabit_enable(int phy_addr)
> > >  }
> > >
> > >  /* Eth device open */
> > > +#ifndef CONFIG_DM_ETH
> >
> > When you have both cases, please use positive logic. Flip the cases
> > and use #ifdef.
> >
> > >  static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
> > > +#else /* with CONFIG_DM_ETH */
> > > +static int davinci_emac_start(struct udevice *dev)
> > > +#endif /* CONFIG_DM_ETH */
> > >  {
> > > -       dv_reg_p                addr;
> > > -       u_int32_t               clkdiv, cnt, mac_control;
> > > -       uint16_t                __maybe_unused lpa_val;
> > > -       volatile emac_desc      *rx_desc;
> > > -       int                     index;
> > > +       u32 clkdiv, cnt, mac_control;
> > > +       volatile emac_desc *rx_desc;
> > > +       u16 __maybe_unused lpa_val;
> > > +       dv_reg_p addr;
> > > +       int index;
> > >
> > >         debug_emac("+ emac_open\n");
> > >
> > > @@ -447,7 +469,11 @@ static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
> > >         writel(1, &adap_emac->TXCONTROL);
> > >         writel(1, &adap_emac->RXCONTROL);
> > >
> > > +#ifndef CONFIG_DM_ETH
> >
> > When you have both cases, please use positive logic. Flip the cases
> > and use #ifdef.
> >
> > >         davinci_eth_set_mac_addr(dev);
> > > +#else /* with CONFIG_DM_ETH */
> > > +       davinci_emac_write_hwaddr(dev);
> > > +#endif /* CONFIG_DM_ETH */
> > >
> > >         /* Set DMA 8 TX / 8 RX Head pointers to 0 */
> > >         addr = &adap_emac->TX0HDP;
> > > @@ -588,7 +614,11 @@ static void davinci_eth_ch_teardown(int ch)
> > >  }
> > >
> > >  /* Eth device close */
> > > +#ifndef CONFIG_DM_ETH
> >
> > When you have both cases, please use positive logic. Flip the cases
> > and use #ifdef.
> >
> > >  static void davinci_eth_close(struct eth_device *dev)
> > > +#else /* with CONFIG_DM_ETH */
> > > +static void davinci_emac_stop(struct udevice *dev)
> > > +#endif /* CONFIG_DM_ETH */
> > >  {
> > >         debug_emac("+ emac_close\n");
> > >
> > > @@ -619,11 +649,15 @@ static int tx_send_loop = 0;
> > >   * This function sends a single packet on the network and returns
> > >   * positive number (number of bytes transmitted) or negative for error
> > >   */
> > > -static int davinci_eth_send_packet (struct eth_device *dev,
> > > -                                       void *packet, int length)
> > > +#ifndef CONFIG_DM_ETH
> >
> > When you have both cases, please use positive logic. Flip the cases
> > and use #ifdef.
> >
> > > +static int davinci_eth_send_packet(struct eth_device *dev,
> > > +                                  void *packet, int length)
> > > +#else /* with CONFIG_DM_ETH */
> > > +static int davinci_emac_send(struct udevice *dev,
> > > +                            void *packet, int length)
> > > +#endif /* CONFIG_DM_ETH */
> > >  {
> > > -       int ret_status = -1;
> > > -       int index;
> > > +       int ret_status = -1, index;
> >
> > I'm not sure why you are mixing these formatting changes (which look
> > bad anyway) with the substantive changes. Please drop them.
> >
> > >         tx_send_loop = 0;
> > >
> > >         index = get_active_phy();
> > > @@ -672,7 +706,11 @@ static int davinci_eth_send_packet (struct eth_device *dev,
> > >  /*
> > >   * This function handles receipt of a packet from the network
> > >   */
> > > +#ifndef CONFIG_DM_ETH
> >
> > When you have both cases, please use positive logic. Flip the cases
> > and use #ifdef.
> >
> > >  static int davinci_eth_rcv_packet (struct eth_device *dev)
> > > +#else /* with CONFIG_DM_ETH */
> > > +static int davinci_emac_recv(struct udevice *dev, int flags, uchar **packetp)
> > > +#endif /* CONFIG_DM_ETH */
> > >  {
> > >         volatile emac_desc *rx_curr_desc;
> > >         volatile emac_desc *curr_desc;
> >
> > Please remove the call to net_process_received_packet() and split the
> > descriptor cleanup into a free_pkt() operation.
> >
> > > @@ -742,6 +780,9 @@ static int davinci_eth_rcv_packet (struct eth_device *dev)
> > >                 }
> > >                 return (ret);
> > >         }
> > > +#ifdef CONFIG_DM_ETH
> > > +       *packetp = rx_curr_desc->buffer;
> > > +#endif
> > >         return (0);
> > >  }
> > >
> > > @@ -750,12 +791,16 @@ static int davinci_eth_rcv_packet (struct eth_device *dev)
> > >   * EMAC modules power or pin multiplexors, that is done by board_init()
> > >   * much earlier in bootup process. Returns 1 on success, 0 otherwise.
> > >   */
> > > +#ifndef CONFIG_DM_ETH
> >
> > When you have both cases, please use positive logic. Flip the cases
> > and use #ifdef.
> >
> > >  int davinci_emac_initialize(void)
> > > +#else /* with CONFIG_DM_ETH */
> > > +static int davinci_emac_probe(struct udevice *dev)
> > > +#endif /* CONFIG_DM_ETH */
> > >  {
> > > -       u_int32_t       phy_id;
> > > -       u_int16_t       tmp;
> > > -       int             i;
> > > -       int             ret;
> > > +       int i, ret;
> > > +       u32 phy_id;
> > > +       u16 tmp;
> > > +#ifndef CONFIG_DM_ETH
> > >         struct eth_device *dev;
> > >
> > >         dev = malloc(sizeof *dev);
> > > @@ -774,6 +819,7 @@ int davinci_emac_initialize(void)
> > >         dev->write_hwaddr = davinci_eth_set_mac_addr;
> > >
> > >         eth_register(dev);
> > > +#endif /* CONFIG_DM_ETH */
> > >
> > >         davinci_eth_mdio_enable();
> > >
> > > @@ -854,5 +900,34 @@ int davinci_emac_initialize(void)
> > >                         phy[i].auto_negotiate(i);
> > >         }
> > >  #endif
> > > -       return(1);
> > > +
> > > +#ifndef CONFIG_DM_ETH
> >
> > When you have both cases, please use positive logic. Flip the cases
> > and use #ifdef.
> >
> > > +       return 1;
> > > +#else /* with CONFIG_DM_ETH */
> > > +       return 0;
> > > +#endif /* CONFIG_DM_ETH */
> > >  }
> > > +
> > > +#ifdef CONFIG_DM_ETH
> > > +static const struct eth_ops davinci_emac_ops = {
> > > +       .start          = davinci_emac_start,
> > > +       .send           = davinci_emac_send,
> > > +       .recv           = davinci_emac_recv,
> > > +       .stop           = davinci_emac_stop,
> > > +       .write_hwaddr   = davinci_emac_write_hwaddr,
> > > +};
> > > +
> > > +static const struct udevice_id davinci_emac_ids[] = {
> > > +       { .compatible = "ti,davinci-dm6467-emac" },
> > > +       { }
> > > +};
> > > +
> > > +U_BOOT_DRIVER(davinci_emac) = {
> > > +       .name           = "davinci_emac",
> > > +       .id             = UCLASS_ETH,
> > > +       .of_match       = davinci_emac_ids,
> > > +       .probe          = davinci_emac_probe,
> > > +       .ops            = &davinci_emac_ops,
> > > +       .platdata_auto_alloc_size = sizeof(struct eth_pdata),
> > > +};
> > > +#endif /* CONFIG_DM_ETH */
> > > --
> > > 2.21.0
> > >
> > > _______________________________________________
> > > U-Boot mailing list
> > > U-Boot at lists.denx.de
> > > https://lists.denx.de/listinfo/u-boot

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

* [U-Boot] [PATCH] net: davinci_emac: use driver model (CONFIG_DM_ETH)
  2019-05-10 12:31     ` Adam Ford
@ 2019-05-10 12:50       ` Bartosz Golaszewski
  2019-05-10 13:06         ` Bartosz Golaszewski
  0 siblings, 1 reply; 6+ messages in thread
From: Bartosz Golaszewski @ 2019-05-10 12:50 UTC (permalink / raw)
  To: u-boot

pt., 10 maj 2019 o 14:31 Adam Ford <aford173@gmail.com> napisał(a):
>
> On Fri, May 10, 2019 at 7:22 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
> >
> > czw., 9 maj 2019 o 20:48 Joe Hershberger <joe.hershberger@ni.com> napisał(a):
> > >
> > > On Tue, Apr 30, 2019 at 11:04 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
> > > >
> > > > From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> > > >
> > > > Add support for CONFIG_DM_ETH to the davinci_emac driver. Optimally
> > > > we should only support DM-enabled platforms but there are several
> > > > non-DT boards that still use it so either we need to keep supporting
> > > > it or drop the boards from u-boot. For now we're stuck with ugly
> > > > ifdefs.
> > >
> > > Which boards are still not using DM that you refer to here?
> > >
> >
> > The following configs define CONFIG_DRIVER_TI_EMAC=y and don't define
> > CONFIG_DM=y:
> >
> > am3517_evm_defconfig
> > calimain_defconfig
> > cm_t3517_defconfig
> > ea20_defconfig
> > eco5pk_defconfig
> > ipam390_defconfig
> > mcx_defconfig
> > mt_ventoux_defconfig
> > twister_defconfig
> >
> > Are these still maintained?
>
> I am still maintaining the am3517_evm. Config DM is being set for it.
> The following are set in Kconfig:
>  select DM
>  select DM_GPIO
>  select DM_I2C
>  select DM_MMC
>  select DM_SERIAL
>  imply CMD_DM
>
> The last time I ran some spot checks the ethernet was working.  I
> haven't checked lately.  Is there something you need me to check?
>

Ok, so I need to go through these and see if DM is not selected from
Kconfig. I'm pretty sure there was at least one for which the build
broke if I dropped the emac initialization function. Let me check...

Bart

> adam
> >
> > Best regards,
> > Bartosz Golaszewski
> >
> > > >
> > > > This patch adds support for driver-model to the driver and converts
> > > > all platforms that use the driver model to selecting CONFIG_DM_ETH.
> > > >
> > > > Tested on da850-evm and da850-lcdk.
> > > >
> > > > Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> > > > ---
> > > > NOTE: I'm currently working on modernizing da850 support in u-boot.
> > > > This patch is just the first step - I plan on improving the emac driver
> > > > in general but I'll be OoO until end of next week, so I decided to post
> > > > it already for reviews.
> > > >
> > > > Does anyone know what the status is on boards like twister, ea20 etc.
> > > > that use davinci_emac, but don't use the driver model? Dropping them
> > > > would make it easier to clean up this driver.
> > > >
> > > > This patch applies on top of my previous series[1].
> > > >
> > > > [1] https://lists.denx.de/pipermail/u-boot/2019-April/367236.html
> > > >
> > > >  arch/arm/mach-davinci/cpu.c            |  13 ---
> > > >  arch/arm/mach-omap2/omap3/emac.c       |   3 +-
> > > >  board/davinci/da8xxevm/da850evm.c      |   5 --
> > > >  board/davinci/da8xxevm/omapl138_lcdk.c |  14 ----
> > > >  board/logicpd/am3517evm/am3517evm.c    |   1 -
> > > >  board/ti/ti816x/evm.c                  |   3 +-
> > > >  configs/am3517_evm_defconfig           |   1 +
> > > >  configs/da850_am18xxevm_defconfig      |   1 +
> > > >  configs/da850evm_defconfig             |   1 +
> > > >  configs/da850evm_direct_nor_defconfig  |   1 +
> > > >  configs/omapl138_lcdk_defconfig        |   1 +
> > > >  configs/ti816x_evm_defconfig           |   1 +
> > > >  drivers/net/ti/davinci_emac.c          | 109 +++++++++++++++++++++----
> > > >  13 files changed, 100 insertions(+), 54 deletions(-)
> > > >
> > > > diff --git a/arch/arm/mach-davinci/cpu.c b/arch/arm/mach-davinci/cpu.c
> > > > index f97ad3fc74..9fd6564d04 100644
> > > > --- a/arch/arm/mach-davinci/cpu.c
> > > > +++ b/arch/arm/mach-davinci/cpu.c
> > > > @@ -5,7 +5,6 @@
> > > >   */
> > > >
> > > >  #include <common.h>
> > > > -#include <netdev.h>
> > > >  #include <asm/arch/hardware.h>
> > > >  #include <asm/io.h>
> > > >
> > > > @@ -90,15 +89,3 @@ int set_cpu_clk_info(void)
> > > >         gd->bd->bi_dsp_freq = 0;
> > > >         return 0;
> > > >  }
> > > > -
> > > > -/*
> > > > - * Initializes on-chip ethernet controllers.
> > > > - * to override, implement board_eth_init()
> > > > - */
> > > > -int cpu_eth_init(bd_t *bis)
> > > > -{
> > > > -#if defined(CONFIG_DRIVER_TI_EMAC)
> > > > -       davinci_emac_initialize();
> > > > -#endif
> > > > -       return 0;
> > > > -}
> > > > diff --git a/arch/arm/mach-omap2/omap3/emac.c b/arch/arm/mach-omap2/omap3/emac.c
> > > > index c79e870183..fb0c9188f5 100644
> > > > --- a/arch/arm/mach-omap2/omap3/emac.c
> > > > +++ b/arch/arm/mach-omap2/omap3/emac.c
> > > > @@ -7,7 +7,6 @@
> > > >   */
> > > >
> > > >  #include <common.h>
> > > > -#include <netdev.h>
> > > >  #include <asm/io.h>
> > > >  #include <asm/arch/am35x_def.h>
> > > >
> > > > @@ -24,5 +23,5 @@ int cpu_eth_init(bd_t *bis)
> > > >         reset &= ~CPGMACSS_SW_RST;
> > > >         writel(reset, &am35x_scm_general_regs->ip_sw_reset);
> > > >
> > > > -       return davinci_emac_initialize();
> > > > +       return 0;
> > > >  }
> > > > diff --git a/board/davinci/da8xxevm/da850evm.c b/board/davinci/da8xxevm/da850evm.c
> > > > index 1bc26828bf..0d2bc5fb32 100644
> > > > --- a/board/davinci/da8xxevm/da850evm.c
> > > > +++ b/board/davinci/da8xxevm/da850evm.c
> > > > @@ -13,7 +13,6 @@
> > > >  #include <environment.h>
> > > >  #include <i2c.h>
> > > >  #include <net.h>
> > > > -#include <netdev.h>
> > > >  #include <spi.h>
> > > >  #include <spi_flash.h>
> > > >  #include <asm/arch/hardware.h>
> > > > @@ -472,10 +471,6 @@ int board_eth_init(bd_t *bis)
> > > >         if (rmii_hw_init())
> > > >                 printf("RMII hardware init failed!!!\n");
> > > >  #endif
> > > > -       if (!davinci_emac_initialize()) {
> > > > -               printf("Error: Ethernet init failed!\n");
> > > > -               return -1;
> > > > -       }
> > > >
> > > >         return 0;
> > > >  }
> > > > diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c
> > > > index 2c2f885d43..ef9656add8 100644
> > > > --- a/board/davinci/da8xxevm/omapl138_lcdk.c
> > > > +++ b/board/davinci/da8xxevm/omapl138_lcdk.c
> > > > @@ -11,7 +11,6 @@
> > > >  #include <common.h>
> > > >  #include <i2c.h>
> > > >  #include <net.h>
> > > > -#include <netdev.h>
> > > >  #include <spi.h>
> > > >  #include <spi_flash.h>
> > > >  #include <asm/arch/hardware.h>
> > > > @@ -229,19 +228,6 @@ int board_init(void)
> > > >
> > > >  #ifdef CONFIG_DRIVER_TI_EMAC
> > > >
> > > > -/*
> > > > - * Initializes on-board ethernet controllers.
> > > > - */
> > > > -int board_eth_init(bd_t *bis)
> > > > -{
> > > > -       if (!davinci_emac_initialize()) {
> > > > -               printf("Error: Ethernet init failed!\n");
> > > > -               return -1;
> > > > -       }
> > > > -
> > > > -       return 0;
> > > > -}
> > > > -
> > > >  #endif /* CONFIG_DRIVER_TI_EMAC */
> > > >
> > > >  #define CFG_MAC_ADDR_SPI_BUS   0
> > > > diff --git a/board/logicpd/am3517evm/am3517evm.c b/board/logicpd/am3517evm/am3517evm.c
> > > > index 10031a4801..bfd4e78274 100644
> > > > --- a/board/logicpd/am3517evm/am3517evm.c
> > > > +++ b/board/logicpd/am3517evm/am3517evm.c
> > > > @@ -28,7 +28,6 @@
> > > >  #include <linux/usb/gadget.h>
> > > >  #include <linux/usb/musb.h>
> > > >  #include <i2c.h>
> > > > -#include <netdev.h>
> > > >  #include "am3517evm.h"
> > > >
> > > >  DECLARE_GLOBAL_DATA_PTR;
> > > > diff --git a/board/ti/ti816x/evm.c b/board/ti/ti816x/evm.c
> > > > index 07a084bab8..240df8cbe1 100644
> > > > --- a/board/ti/ti816x/evm.c
> > > > +++ b/board/ti/ti816x/evm.c
> > > > @@ -9,7 +9,6 @@
> > > >  #include <common.h>
> > > >  #include <environment.h>
> > > >  #include <spl.h>
> > > > -#include <netdev.h>
> > > >  #include <asm/cache.h>
> > > >  #include <asm/io.h>
> > > >  #include <asm/arch/clock.h>
> > > > @@ -56,7 +55,7 @@ int board_eth_init(bd_t *bis)
> > > >                         printf("Unable to read MAC address. Set <ethaddr>\n");
> > > >         }
> > > >
> > > > -       return davinci_emac_initialize();
> > > > +       return 0;
> > > >  }
> > > >
> > > >  #ifdef CONFIG_SPL_BUILD
> > > > diff --git a/configs/am3517_evm_defconfig b/configs/am3517_evm_defconfig
> > > > index b9f59f3291..0ea28a20b2 100644
> > > > --- a/configs/am3517_evm_defconfig
> > > > +++ b/configs/am3517_evm_defconfig
> > > > @@ -45,6 +45,7 @@ CONFIG_SYS_NAND_U_BOOT_LOCATIONS=y
> > > >  CONFIG_SYS_NAND_U_BOOT_OFFS=0x80000
> > > >  CONFIG_SPL_NAND_SIMPLE=y
> > > >  CONFIG_MII=y
> > > > +CONFIG_DM_ETH=y
> > > >  CONFIG_DRIVER_TI_EMAC=y
> > > >  CONFIG_PINCTRL=y
> > > >  CONFIG_PINCTRL_SINGLE=y
> > > > diff --git a/configs/da850_am18xxevm_defconfig b/configs/da850_am18xxevm_defconfig
> > > > index f098222113..6227cafc90 100644
> > > > --- a/configs/da850_am18xxevm_defconfig
> > > > +++ b/configs/da850_am18xxevm_defconfig
> > > > @@ -52,6 +52,7 @@ CONFIG_SPI_FLASH=y
> > > >  CONFIG_SPI_FLASH_STMICRO=y
> > > >  CONFIG_SPI_FLASH_WINBOND=y
> > > >  CONFIG_MII=y
> > > > +CONFIG_DM_ETH=y
> > > >  CONFIG_DRIVER_TI_EMAC=y
> > > >  CONFIG_DM_SERIAL=y
> > > >  CONFIG_SYS_NS16550=y
> > > > diff --git a/configs/da850evm_defconfig b/configs/da850evm_defconfig
> > > > index 221c204af0..78eadc6330 100644
> > > > --- a/configs/da850evm_defconfig
> > > > +++ b/configs/da850evm_defconfig
> > > > @@ -60,6 +60,7 @@ CONFIG_SPI_FLASH_STMICRO=y
> > > >  CONFIG_SPI_FLASH_WINBOND=y
> > > >  CONFIG_SPI_FLASH_MTD=y
> > > >  CONFIG_MII=y
> > > > +CONFIG_DM_ETH=y
> > > >  CONFIG_DRIVER_TI_EMAC=y
> > > >  CONFIG_PINCTRL=y
> > > >  CONFIG_PINCTRL_SINGLE=y
> > > > diff --git a/configs/da850evm_direct_nor_defconfig b/configs/da850evm_direct_nor_defconfig
> > > > index 166e77b8e3..2dd82d68b9 100644
> > > > --- a/configs/da850evm_direct_nor_defconfig
> > > > +++ b/configs/da850evm_direct_nor_defconfig
> > > > @@ -51,6 +51,7 @@ CONFIG_SPI_FLASH=y
> > > >  CONFIG_SPI_FLASH_STMICRO=y
> > > >  CONFIG_SPI_FLASH_WINBOND=y
> > > >  CONFIG_MII=y
> > > > +CONFIG_DM_ETH=y
> > > >  CONFIG_DRIVER_TI_EMAC=y
> > > >  CONFIG_PINCTRL=y
> > > >  CONFIG_PINCTRL_SINGLE=y
> > > > diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig
> > > > index e43141844a..0600ac3f4a 100644
> > > > --- a/configs/omapl138_lcdk_defconfig
> > > > +++ b/configs/omapl138_lcdk_defconfig
> > > > @@ -51,6 +51,7 @@ CONFIG_SF_DEFAULT_SPEED=30000000
> > > >  CONFIG_SPI_FLASH_STMICRO=y
> > > >  CONFIG_SPI_FLASH_WINBOND=y
> > > >  CONFIG_MII=y
> > > > +CONFIG_DM_ETH=y
> > > >  CONFIG_DRIVER_TI_EMAC=y
> > > >  CONFIG_DM_SERIAL=y
> > > >  CONFIG_SYS_NS16550=y
> > > > diff --git a/configs/ti816x_evm_defconfig b/configs/ti816x_evm_defconfig
> > > > index bf877f596b..131b25a188 100644
> > > > --- a/configs/ti816x_evm_defconfig
> > > > +++ b/configs/ti816x_evm_defconfig
> > > > @@ -46,6 +46,7 @@ CONFIG_MMC_OMAP_HS=y
> > > >  CONFIG_NAND=y
> > > >  CONFIG_SYS_NAND_BUSWIDTH_16BIT=y
> > > >  CONFIG_MII=y
> > > > +CONFIG_DM_ETH=y
> > > >  CONFIG_DRIVER_TI_EMAC=y
> > > >  CONFIG_SYS_NS16550=y
> > > >  CONFIG_SPI=y
> > > > diff --git a/drivers/net/ti/davinci_emac.c b/drivers/net/ti/davinci_emac.c
> > > > index 9d53984973..3252a235d2 100644
> > > > --- a/drivers/net/ti/davinci_emac.c
> > > > +++ b/drivers/net/ti/davinci_emac.c
> > > > @@ -26,11 +26,13 @@
> > > >  #include <net.h>
> > > >  #include <miiphy.h>
> > > >  #include <malloc.h>
> > > > -#include <netdev.h>
> > > >  #include <linux/compiler.h>
> > > >  #include <asm/arch/emac_defs.h>
> > > >  #include <asm/io.h>
> > > >  #include "davinci_emac.h"
> > > > +#ifndef CONFIG_DM_ETH
> > > > +#include <netdev.h>
> > > > +#endif
> > > >
> > > >  unsigned int   emac_dbg = 0;
> > > >  #define debug_emac(fmt,args...)        if (emac_dbg) printf(fmt,##args)
> > > > @@ -107,10 +109,16 @@ static u_int8_t   num_phy;
> > > >
> > > >  phy_t                          phy[CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT];
> > > >
> > > > +#ifndef CONFIG_DM_ETH
> > >
> > > When you have both cases, please use positive logic. Flip the cases
> > > and use #ifdef.
> > >
> > > >  static int davinci_eth_set_mac_addr(struct eth_device *dev)
> > > > +#else /* with CONFIG_DM_ETH */
> > > > +static int davinci_emac_write_hwaddr(struct udevice *dev)
> > > > +#endif /* CONFIG_DM_ETH */
> > > >  {
> > > > -       unsigned long           mac_hi;
> > > > -       unsigned long           mac_lo;
> > > > +#ifdef CONFIG_DM_ETH
> > > > +       struct eth_pdata *pdata = dev_get_platdata(dev);
> > > > +#endif
> > > > +       unsigned long mac_hi, mac_lo;
> > > >
> > > >         /*
> > > >          * Set MAC Addresses & Init multicast Hash to 0 (disable any multicast
> > > > @@ -118,12 +126,22 @@ static int davinci_eth_set_mac_addr(struct eth_device *dev)
> > > >          *  Using channel 0 only - other channels are disabled
> > > >          *  */
> > > >         writel(0, &adap_emac->MACINDEX);
> > > > +
> > > > +#ifndef CONFIG_DM_ETH
> > >
> > > When you have both cases, please use positive logic. Flip the cases
> > > and use #ifdef.
> > >
> > > >         mac_hi = (dev->enetaddr[3] << 24) |
> > > >                  (dev->enetaddr[2] << 16) |
> > > >                  (dev->enetaddr[1] << 8)  |
> > > >                  (dev->enetaddr[0]);
> > > >         mac_lo = (dev->enetaddr[5] << 8) |
> > > >                  (dev->enetaddr[4]);
> > > > +#else /* with CONFIG_DM_ETH */
> > > > +       mac_hi = (pdata->enetaddr[3] << 24) |
> > > > +                (pdata->enetaddr[2] << 16) |
> > > > +                (pdata->enetaddr[1] << 8)  |
> > > > +                (pdata->enetaddr[0]);
> > > > +       mac_lo = (pdata->enetaddr[5] << 8) |
> > > > +                (pdata->enetaddr[4]);
> > > > +#endif /* CONFIG_DM_ETH */
> > > >
> > > >         writel(mac_hi, &adap_emac->MACADDRHI);
> > > >  #if defined(DAVINCI_EMAC_VERSION2)
> > > > @@ -411,13 +429,17 @@ static void  __attribute__((unused)) davinci_eth_gigabit_enable(int phy_addr)
> > > >  }
> > > >
> > > >  /* Eth device open */
> > > > +#ifndef CONFIG_DM_ETH
> > >
> > > When you have both cases, please use positive logic. Flip the cases
> > > and use #ifdef.
> > >
> > > >  static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
> > > > +#else /* with CONFIG_DM_ETH */
> > > > +static int davinci_emac_start(struct udevice *dev)
> > > > +#endif /* CONFIG_DM_ETH */
> > > >  {
> > > > -       dv_reg_p                addr;
> > > > -       u_int32_t               clkdiv, cnt, mac_control;
> > > > -       uint16_t                __maybe_unused lpa_val;
> > > > -       volatile emac_desc      *rx_desc;
> > > > -       int                     index;
> > > > +       u32 clkdiv, cnt, mac_control;
> > > > +       volatile emac_desc *rx_desc;
> > > > +       u16 __maybe_unused lpa_val;
> > > > +       dv_reg_p addr;
> > > > +       int index;
> > > >
> > > >         debug_emac("+ emac_open\n");
> > > >
> > > > @@ -447,7 +469,11 @@ static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
> > > >         writel(1, &adap_emac->TXCONTROL);
> > > >         writel(1, &adap_emac->RXCONTROL);
> > > >
> > > > +#ifndef CONFIG_DM_ETH
> > >
> > > When you have both cases, please use positive logic. Flip the cases
> > > and use #ifdef.
> > >
> > > >         davinci_eth_set_mac_addr(dev);
> > > > +#else /* with CONFIG_DM_ETH */
> > > > +       davinci_emac_write_hwaddr(dev);
> > > > +#endif /* CONFIG_DM_ETH */
> > > >
> > > >         /* Set DMA 8 TX / 8 RX Head pointers to 0 */
> > > >         addr = &adap_emac->TX0HDP;
> > > > @@ -588,7 +614,11 @@ static void davinci_eth_ch_teardown(int ch)
> > > >  }
> > > >
> > > >  /* Eth device close */
> > > > +#ifndef CONFIG_DM_ETH
> > >
> > > When you have both cases, please use positive logic. Flip the cases
> > > and use #ifdef.
> > >
> > > >  static void davinci_eth_close(struct eth_device *dev)
> > > > +#else /* with CONFIG_DM_ETH */
> > > > +static void davinci_emac_stop(struct udevice *dev)
> > > > +#endif /* CONFIG_DM_ETH */
> > > >  {
> > > >         debug_emac("+ emac_close\n");
> > > >
> > > > @@ -619,11 +649,15 @@ static int tx_send_loop = 0;
> > > >   * This function sends a single packet on the network and returns
> > > >   * positive number (number of bytes transmitted) or negative for error
> > > >   */
> > > > -static int davinci_eth_send_packet (struct eth_device *dev,
> > > > -                                       void *packet, int length)
> > > > +#ifndef CONFIG_DM_ETH
> > >
> > > When you have both cases, please use positive logic. Flip the cases
> > > and use #ifdef.
> > >
> > > > +static int davinci_eth_send_packet(struct eth_device *dev,
> > > > +                                  void *packet, int length)
> > > > +#else /* with CONFIG_DM_ETH */
> > > > +static int davinci_emac_send(struct udevice *dev,
> > > > +                            void *packet, int length)
> > > > +#endif /* CONFIG_DM_ETH */
> > > >  {
> > > > -       int ret_status = -1;
> > > > -       int index;
> > > > +       int ret_status = -1, index;
> > >
> > > I'm not sure why you are mixing these formatting changes (which look
> > > bad anyway) with the substantive changes. Please drop them.
> > >
> > > >         tx_send_loop = 0;
> > > >
> > > >         index = get_active_phy();
> > > > @@ -672,7 +706,11 @@ static int davinci_eth_send_packet (struct eth_device *dev,
> > > >  /*
> > > >   * This function handles receipt of a packet from the network
> > > >   */
> > > > +#ifndef CONFIG_DM_ETH
> > >
> > > When you have both cases, please use positive logic. Flip the cases
> > > and use #ifdef.
> > >
> > > >  static int davinci_eth_rcv_packet (struct eth_device *dev)
> > > > +#else /* with CONFIG_DM_ETH */
> > > > +static int davinci_emac_recv(struct udevice *dev, int flags, uchar **packetp)
> > > > +#endif /* CONFIG_DM_ETH */
> > > >  {
> > > >         volatile emac_desc *rx_curr_desc;
> > > >         volatile emac_desc *curr_desc;
> > >
> > > Please remove the call to net_process_received_packet() and split the
> > > descriptor cleanup into a free_pkt() operation.
> > >
> > > > @@ -742,6 +780,9 @@ static int davinci_eth_rcv_packet (struct eth_device *dev)
> > > >                 }
> > > >                 return (ret);
> > > >         }
> > > > +#ifdef CONFIG_DM_ETH
> > > > +       *packetp = rx_curr_desc->buffer;
> > > > +#endif
> > > >         return (0);
> > > >  }
> > > >
> > > > @@ -750,12 +791,16 @@ static int davinci_eth_rcv_packet (struct eth_device *dev)
> > > >   * EMAC modules power or pin multiplexors, that is done by board_init()
> > > >   * much earlier in bootup process. Returns 1 on success, 0 otherwise.
> > > >   */
> > > > +#ifndef CONFIG_DM_ETH
> > >
> > > When you have both cases, please use positive logic. Flip the cases
> > > and use #ifdef.
> > >
> > > >  int davinci_emac_initialize(void)
> > > > +#else /* with CONFIG_DM_ETH */
> > > > +static int davinci_emac_probe(struct udevice *dev)
> > > > +#endif /* CONFIG_DM_ETH */
> > > >  {
> > > > -       u_int32_t       phy_id;
> > > > -       u_int16_t       tmp;
> > > > -       int             i;
> > > > -       int             ret;
> > > > +       int i, ret;
> > > > +       u32 phy_id;
> > > > +       u16 tmp;
> > > > +#ifndef CONFIG_DM_ETH
> > > >         struct eth_device *dev;
> > > >
> > > >         dev = malloc(sizeof *dev);
> > > > @@ -774,6 +819,7 @@ int davinci_emac_initialize(void)
> > > >         dev->write_hwaddr = davinci_eth_set_mac_addr;
> > > >
> > > >         eth_register(dev);
> > > > +#endif /* CONFIG_DM_ETH */
> > > >
> > > >         davinci_eth_mdio_enable();
> > > >
> > > > @@ -854,5 +900,34 @@ int davinci_emac_initialize(void)
> > > >                         phy[i].auto_negotiate(i);
> > > >         }
> > > >  #endif
> > > > -       return(1);
> > > > +
> > > > +#ifndef CONFIG_DM_ETH
> > >
> > > When you have both cases, please use positive logic. Flip the cases
> > > and use #ifdef.
> > >
> > > > +       return 1;
> > > > +#else /* with CONFIG_DM_ETH */
> > > > +       return 0;
> > > > +#endif /* CONFIG_DM_ETH */
> > > >  }
> > > > +
> > > > +#ifdef CONFIG_DM_ETH
> > > > +static const struct eth_ops davinci_emac_ops = {
> > > > +       .start          = davinci_emac_start,
> > > > +       .send           = davinci_emac_send,
> > > > +       .recv           = davinci_emac_recv,
> > > > +       .stop           = davinci_emac_stop,
> > > > +       .write_hwaddr   = davinci_emac_write_hwaddr,
> > > > +};
> > > > +
> > > > +static const struct udevice_id davinci_emac_ids[] = {
> > > > +       { .compatible = "ti,davinci-dm6467-emac" },
> > > > +       { }
> > > > +};
> > > > +
> > > > +U_BOOT_DRIVER(davinci_emac) = {
> > > > +       .name           = "davinci_emac",
> > > > +       .id             = UCLASS_ETH,
> > > > +       .of_match       = davinci_emac_ids,
> > > > +       .probe          = davinci_emac_probe,
> > > > +       .ops            = &davinci_emac_ops,
> > > > +       .platdata_auto_alloc_size = sizeof(struct eth_pdata),
> > > > +};
> > > > +#endif /* CONFIG_DM_ETH */
> > > > --
> > > > 2.21.0
> > > >
> > > > _______________________________________________
> > > > U-Boot mailing list
> > > > U-Boot at lists.denx.de
> > > > https://lists.denx.de/listinfo/u-boot

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

* [U-Boot] [PATCH] net: davinci_emac: use driver model (CONFIG_DM_ETH)
  2019-05-10 12:50       ` Bartosz Golaszewski
@ 2019-05-10 13:06         ` Bartosz Golaszewski
  0 siblings, 0 replies; 6+ messages in thread
From: Bartosz Golaszewski @ 2019-05-10 13:06 UTC (permalink / raw)
  To: u-boot

pt., 10 maj 2019 o 14:51 Bartosz Golaszewski <brgl@bgdev.pl> napisał(a):
>
> pt., 10 maj 2019 o 14:31 Adam Ford <aford173@gmail.com> napisał(a):
> >
> > On Fri, May 10, 2019 at 7:22 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
> > >
> > > czw., 9 maj 2019 o 20:48 Joe Hershberger <joe.hershberger@ni.com> napisał(a):
> > > >
> > > > On Tue, Apr 30, 2019 at 11:04 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote:
> > > > >
> > > > > From: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> > > > >
> > > > > Add support for CONFIG_DM_ETH to the davinci_emac driver. Optimally
> > > > > we should only support DM-enabled platforms but there are several
> > > > > non-DT boards that still use it so either we need to keep supporting
> > > > > it or drop the boards from u-boot. For now we're stuck with ugly
> > > > > ifdefs.
> > > >
> > > > Which boards are still not using DM that you refer to here?
> > > >
> > >
> > > The following configs define CONFIG_DRIVER_TI_EMAC=y and don't define
> > > CONFIG_DM=y:
> > >
> > > am3517_evm_defconfig
> > > calimain_defconfig
> > > cm_t3517_defconfig
> > > ea20_defconfig
> > > eco5pk_defconfig
> > > ipam390_defconfig
> > > mcx_defconfig
> > > mt_ventoux_defconfig
> > > twister_defconfig
> > >
> > > Are these still maintained?
> >
> > I am still maintaining the am3517_evm. Config DM is being set for it.
> > The following are set in Kconfig:
> >  select DM
> >  select DM_GPIO
> >  select DM_I2C
> >  select DM_MMC
> >  select DM_SERIAL
> >  imply CMD_DM
> >
> > The last time I ran some spot checks the ethernet was working.  I
> > haven't checked lately.  Is there something you need me to check?
> >
>
> Ok, so I need to go through these and see if DM is not selected from
> Kconfig. I'm pretty sure there was at least one for which the build
> broke if I dropped the emac initialization function. Let me check...
>

Ok, confirmed that the following configs DO NOT select CONFIG_DM in any way:

calimain_defconfig
cm_t3517_defconfig
ea20_defconfig
eco5pk_defconfig
ipam390_defconfig
mcx_defconfig
mt_ventoux_defconfig
twister_defconfig

I Cc'ed some of the maintainers:

+ Manfred, Christoph, Igor, Sefano, Raphael, Heiko, Anatloij

Hi guys,

do you have any plans to add support for the driver model for these platforms?

Best regards,
Bartosz Golaszewski

> Bart
>
> > adam
> > >
> > > Best regards,
> > > Bartosz Golaszewski
> > >
> > > > >
> > > > > This patch adds support for driver-model to the driver and converts
> > > > > all platforms that use the driver model to selecting CONFIG_DM_ETH.
> > > > >
> > > > > Tested on da850-evm and da850-lcdk.
> > > > >
> > > > > Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
> > > > > ---
> > > > > NOTE: I'm currently working on modernizing da850 support in u-boot.
> > > > > This patch is just the first step - I plan on improving the emac driver
> > > > > in general but I'll be OoO until end of next week, so I decided to post
> > > > > it already for reviews.
> > > > >
> > > > > Does anyone know what the status is on boards like twister, ea20 etc.
> > > > > that use davinci_emac, but don't use the driver model? Dropping them
> > > > > would make it easier to clean up this driver.
> > > > >
> > > > > This patch applies on top of my previous series[1].
> > > > >
> > > > > [1] https://lists.denx.de/pipermail/u-boot/2019-April/367236.html
> > > > >
> > > > >  arch/arm/mach-davinci/cpu.c            |  13 ---
> > > > >  arch/arm/mach-omap2/omap3/emac.c       |   3 +-
> > > > >  board/davinci/da8xxevm/da850evm.c      |   5 --
> > > > >  board/davinci/da8xxevm/omapl138_lcdk.c |  14 ----
> > > > >  board/logicpd/am3517evm/am3517evm.c    |   1 -
> > > > >  board/ti/ti816x/evm.c                  |   3 +-
> > > > >  configs/am3517_evm_defconfig           |   1 +
> > > > >  configs/da850_am18xxevm_defconfig      |   1 +
> > > > >  configs/da850evm_defconfig             |   1 +
> > > > >  configs/da850evm_direct_nor_defconfig  |   1 +
> > > > >  configs/omapl138_lcdk_defconfig        |   1 +
> > > > >  configs/ti816x_evm_defconfig           |   1 +
> > > > >  drivers/net/ti/davinci_emac.c          | 109 +++++++++++++++++++++----
> > > > >  13 files changed, 100 insertions(+), 54 deletions(-)
> > > > >
> > > > > diff --git a/arch/arm/mach-davinci/cpu.c b/arch/arm/mach-davinci/cpu.c
> > > > > index f97ad3fc74..9fd6564d04 100644
> > > > > --- a/arch/arm/mach-davinci/cpu.c
> > > > > +++ b/arch/arm/mach-davinci/cpu.c
> > > > > @@ -5,7 +5,6 @@
> > > > >   */
> > > > >
> > > > >  #include <common.h>
> > > > > -#include <netdev.h>
> > > > >  #include <asm/arch/hardware.h>
> > > > >  #include <asm/io.h>
> > > > >
> > > > > @@ -90,15 +89,3 @@ int set_cpu_clk_info(void)
> > > > >         gd->bd->bi_dsp_freq = 0;
> > > > >         return 0;
> > > > >  }
> > > > > -
> > > > > -/*
> > > > > - * Initializes on-chip ethernet controllers.
> > > > > - * to override, implement board_eth_init()
> > > > > - */
> > > > > -int cpu_eth_init(bd_t *bis)
> > > > > -{
> > > > > -#if defined(CONFIG_DRIVER_TI_EMAC)
> > > > > -       davinci_emac_initialize();
> > > > > -#endif
> > > > > -       return 0;
> > > > > -}
> > > > > diff --git a/arch/arm/mach-omap2/omap3/emac.c b/arch/arm/mach-omap2/omap3/emac.c
> > > > > index c79e870183..fb0c9188f5 100644
> > > > > --- a/arch/arm/mach-omap2/omap3/emac.c
> > > > > +++ b/arch/arm/mach-omap2/omap3/emac.c
> > > > > @@ -7,7 +7,6 @@
> > > > >   */
> > > > >
> > > > >  #include <common.h>
> > > > > -#include <netdev.h>
> > > > >  #include <asm/io.h>
> > > > >  #include <asm/arch/am35x_def.h>
> > > > >
> > > > > @@ -24,5 +23,5 @@ int cpu_eth_init(bd_t *bis)
> > > > >         reset &= ~CPGMACSS_SW_RST;
> > > > >         writel(reset, &am35x_scm_general_regs->ip_sw_reset);
> > > > >
> > > > > -       return davinci_emac_initialize();
> > > > > +       return 0;
> > > > >  }
> > > > > diff --git a/board/davinci/da8xxevm/da850evm.c b/board/davinci/da8xxevm/da850evm.c
> > > > > index 1bc26828bf..0d2bc5fb32 100644
> > > > > --- a/board/davinci/da8xxevm/da850evm.c
> > > > > +++ b/board/davinci/da8xxevm/da850evm.c
> > > > > @@ -13,7 +13,6 @@
> > > > >  #include <environment.h>
> > > > >  #include <i2c.h>
> > > > >  #include <net.h>
> > > > > -#include <netdev.h>
> > > > >  #include <spi.h>
> > > > >  #include <spi_flash.h>
> > > > >  #include <asm/arch/hardware.h>
> > > > > @@ -472,10 +471,6 @@ int board_eth_init(bd_t *bis)
> > > > >         if (rmii_hw_init())
> > > > >                 printf("RMII hardware init failed!!!\n");
> > > > >  #endif
> > > > > -       if (!davinci_emac_initialize()) {
> > > > > -               printf("Error: Ethernet init failed!\n");
> > > > > -               return -1;
> > > > > -       }
> > > > >
> > > > >         return 0;
> > > > >  }
> > > > > diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c
> > > > > index 2c2f885d43..ef9656add8 100644
> > > > > --- a/board/davinci/da8xxevm/omapl138_lcdk.c
> > > > > +++ b/board/davinci/da8xxevm/omapl138_lcdk.c
> > > > > @@ -11,7 +11,6 @@
> > > > >  #include <common.h>
> > > > >  #include <i2c.h>
> > > > >  #include <net.h>
> > > > > -#include <netdev.h>
> > > > >  #include <spi.h>
> > > > >  #include <spi_flash.h>
> > > > >  #include <asm/arch/hardware.h>
> > > > > @@ -229,19 +228,6 @@ int board_init(void)
> > > > >
> > > > >  #ifdef CONFIG_DRIVER_TI_EMAC
> > > > >
> > > > > -/*
> > > > > - * Initializes on-board ethernet controllers.
> > > > > - */
> > > > > -int board_eth_init(bd_t *bis)
> > > > > -{
> > > > > -       if (!davinci_emac_initialize()) {
> > > > > -               printf("Error: Ethernet init failed!\n");
> > > > > -               return -1;
> > > > > -       }
> > > > > -
> > > > > -       return 0;
> > > > > -}
> > > > > -
> > > > >  #endif /* CONFIG_DRIVER_TI_EMAC */
> > > > >
> > > > >  #define CFG_MAC_ADDR_SPI_BUS   0
> > > > > diff --git a/board/logicpd/am3517evm/am3517evm.c b/board/logicpd/am3517evm/am3517evm.c
> > > > > index 10031a4801..bfd4e78274 100644
> > > > > --- a/board/logicpd/am3517evm/am3517evm.c
> > > > > +++ b/board/logicpd/am3517evm/am3517evm.c
> > > > > @@ -28,7 +28,6 @@
> > > > >  #include <linux/usb/gadget.h>
> > > > >  #include <linux/usb/musb.h>
> > > > >  #include <i2c.h>
> > > > > -#include <netdev.h>
> > > > >  #include "am3517evm.h"
> > > > >
> > > > >  DECLARE_GLOBAL_DATA_PTR;
> > > > > diff --git a/board/ti/ti816x/evm.c b/board/ti/ti816x/evm.c
> > > > > index 07a084bab8..240df8cbe1 100644
> > > > > --- a/board/ti/ti816x/evm.c
> > > > > +++ b/board/ti/ti816x/evm.c
> > > > > @@ -9,7 +9,6 @@
> > > > >  #include <common.h>
> > > > >  #include <environment.h>
> > > > >  #include <spl.h>
> > > > > -#include <netdev.h>
> > > > >  #include <asm/cache.h>
> > > > >  #include <asm/io.h>
> > > > >  #include <asm/arch/clock.h>
> > > > > @@ -56,7 +55,7 @@ int board_eth_init(bd_t *bis)
> > > > >                         printf("Unable to read MAC address. Set <ethaddr>\n");
> > > > >         }
> > > > >
> > > > > -       return davinci_emac_initialize();
> > > > > +       return 0;
> > > > >  }
> > > > >
> > > > >  #ifdef CONFIG_SPL_BUILD
> > > > > diff --git a/configs/am3517_evm_defconfig b/configs/am3517_evm_defconfig
> > > > > index b9f59f3291..0ea28a20b2 100644
> > > > > --- a/configs/am3517_evm_defconfig
> > > > > +++ b/configs/am3517_evm_defconfig
> > > > > @@ -45,6 +45,7 @@ CONFIG_SYS_NAND_U_BOOT_LOCATIONS=y
> > > > >  CONFIG_SYS_NAND_U_BOOT_OFFS=0x80000
> > > > >  CONFIG_SPL_NAND_SIMPLE=y
> > > > >  CONFIG_MII=y
> > > > > +CONFIG_DM_ETH=y
> > > > >  CONFIG_DRIVER_TI_EMAC=y
> > > > >  CONFIG_PINCTRL=y
> > > > >  CONFIG_PINCTRL_SINGLE=y
> > > > > diff --git a/configs/da850_am18xxevm_defconfig b/configs/da850_am18xxevm_defconfig
> > > > > index f098222113..6227cafc90 100644
> > > > > --- a/configs/da850_am18xxevm_defconfig
> > > > > +++ b/configs/da850_am18xxevm_defconfig
> > > > > @@ -52,6 +52,7 @@ CONFIG_SPI_FLASH=y
> > > > >  CONFIG_SPI_FLASH_STMICRO=y
> > > > >  CONFIG_SPI_FLASH_WINBOND=y
> > > > >  CONFIG_MII=y
> > > > > +CONFIG_DM_ETH=y
> > > > >  CONFIG_DRIVER_TI_EMAC=y
> > > > >  CONFIG_DM_SERIAL=y
> > > > >  CONFIG_SYS_NS16550=y
> > > > > diff --git a/configs/da850evm_defconfig b/configs/da850evm_defconfig
> > > > > index 221c204af0..78eadc6330 100644
> > > > > --- a/configs/da850evm_defconfig
> > > > > +++ b/configs/da850evm_defconfig
> > > > > @@ -60,6 +60,7 @@ CONFIG_SPI_FLASH_STMICRO=y
> > > > >  CONFIG_SPI_FLASH_WINBOND=y
> > > > >  CONFIG_SPI_FLASH_MTD=y
> > > > >  CONFIG_MII=y
> > > > > +CONFIG_DM_ETH=y
> > > > >  CONFIG_DRIVER_TI_EMAC=y
> > > > >  CONFIG_PINCTRL=y
> > > > >  CONFIG_PINCTRL_SINGLE=y
> > > > > diff --git a/configs/da850evm_direct_nor_defconfig b/configs/da850evm_direct_nor_defconfig
> > > > > index 166e77b8e3..2dd82d68b9 100644
> > > > > --- a/configs/da850evm_direct_nor_defconfig
> > > > > +++ b/configs/da850evm_direct_nor_defconfig
> > > > > @@ -51,6 +51,7 @@ CONFIG_SPI_FLASH=y
> > > > >  CONFIG_SPI_FLASH_STMICRO=y
> > > > >  CONFIG_SPI_FLASH_WINBOND=y
> > > > >  CONFIG_MII=y
> > > > > +CONFIG_DM_ETH=y
> > > > >  CONFIG_DRIVER_TI_EMAC=y
> > > > >  CONFIG_PINCTRL=y
> > > > >  CONFIG_PINCTRL_SINGLE=y
> > > > > diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig
> > > > > index e43141844a..0600ac3f4a 100644
> > > > > --- a/configs/omapl138_lcdk_defconfig
> > > > > +++ b/configs/omapl138_lcdk_defconfig
> > > > > @@ -51,6 +51,7 @@ CONFIG_SF_DEFAULT_SPEED=30000000
> > > > >  CONFIG_SPI_FLASH_STMICRO=y
> > > > >  CONFIG_SPI_FLASH_WINBOND=y
> > > > >  CONFIG_MII=y
> > > > > +CONFIG_DM_ETH=y
> > > > >  CONFIG_DRIVER_TI_EMAC=y
> > > > >  CONFIG_DM_SERIAL=y
> > > > >  CONFIG_SYS_NS16550=y
> > > > > diff --git a/configs/ti816x_evm_defconfig b/configs/ti816x_evm_defconfig
> > > > > index bf877f596b..131b25a188 100644
> > > > > --- a/configs/ti816x_evm_defconfig
> > > > > +++ b/configs/ti816x_evm_defconfig
> > > > > @@ -46,6 +46,7 @@ CONFIG_MMC_OMAP_HS=y
> > > > >  CONFIG_NAND=y
> > > > >  CONFIG_SYS_NAND_BUSWIDTH_16BIT=y
> > > > >  CONFIG_MII=y
> > > > > +CONFIG_DM_ETH=y
> > > > >  CONFIG_DRIVER_TI_EMAC=y
> > > > >  CONFIG_SYS_NS16550=y
> > > > >  CONFIG_SPI=y
> > > > > diff --git a/drivers/net/ti/davinci_emac.c b/drivers/net/ti/davinci_emac.c
> > > > > index 9d53984973..3252a235d2 100644
> > > > > --- a/drivers/net/ti/davinci_emac.c
> > > > > +++ b/drivers/net/ti/davinci_emac.c
> > > > > @@ -26,11 +26,13 @@
> > > > >  #include <net.h>
> > > > >  #include <miiphy.h>
> > > > >  #include <malloc.h>
> > > > > -#include <netdev.h>
> > > > >  #include <linux/compiler.h>
> > > > >  #include <asm/arch/emac_defs.h>
> > > > >  #include <asm/io.h>
> > > > >  #include "davinci_emac.h"
> > > > > +#ifndef CONFIG_DM_ETH
> > > > > +#include <netdev.h>
> > > > > +#endif
> > > > >
> > > > >  unsigned int   emac_dbg = 0;
> > > > >  #define debug_emac(fmt,args...)        if (emac_dbg) printf(fmt,##args)
> > > > > @@ -107,10 +109,16 @@ static u_int8_t   num_phy;
> > > > >
> > > > >  phy_t                          phy[CONFIG_SYS_DAVINCI_EMAC_PHY_COUNT];
> > > > >
> > > > > +#ifndef CONFIG_DM_ETH
> > > >
> > > > When you have both cases, please use positive logic. Flip the cases
> > > > and use #ifdef.
> > > >
> > > > >  static int davinci_eth_set_mac_addr(struct eth_device *dev)
> > > > > +#else /* with CONFIG_DM_ETH */
> > > > > +static int davinci_emac_write_hwaddr(struct udevice *dev)
> > > > > +#endif /* CONFIG_DM_ETH */
> > > > >  {
> > > > > -       unsigned long           mac_hi;
> > > > > -       unsigned long           mac_lo;
> > > > > +#ifdef CONFIG_DM_ETH
> > > > > +       struct eth_pdata *pdata = dev_get_platdata(dev);
> > > > > +#endif
> > > > > +       unsigned long mac_hi, mac_lo;
> > > > >
> > > > >         /*
> > > > >          * Set MAC Addresses & Init multicast Hash to 0 (disable any multicast
> > > > > @@ -118,12 +126,22 @@ static int davinci_eth_set_mac_addr(struct eth_device *dev)
> > > > >          *  Using channel 0 only - other channels are disabled
> > > > >          *  */
> > > > >         writel(0, &adap_emac->MACINDEX);
> > > > > +
> > > > > +#ifndef CONFIG_DM_ETH
> > > >
> > > > When you have both cases, please use positive logic. Flip the cases
> > > > and use #ifdef.
> > > >
> > > > >         mac_hi = (dev->enetaddr[3] << 24) |
> > > > >                  (dev->enetaddr[2] << 16) |
> > > > >                  (dev->enetaddr[1] << 8)  |
> > > > >                  (dev->enetaddr[0]);
> > > > >         mac_lo = (dev->enetaddr[5] << 8) |
> > > > >                  (dev->enetaddr[4]);
> > > > > +#else /* with CONFIG_DM_ETH */
> > > > > +       mac_hi = (pdata->enetaddr[3] << 24) |
> > > > > +                (pdata->enetaddr[2] << 16) |
> > > > > +                (pdata->enetaddr[1] << 8)  |
> > > > > +                (pdata->enetaddr[0]);
> > > > > +       mac_lo = (pdata->enetaddr[5] << 8) |
> > > > > +                (pdata->enetaddr[4]);
> > > > > +#endif /* CONFIG_DM_ETH */
> > > > >
> > > > >         writel(mac_hi, &adap_emac->MACADDRHI);
> > > > >  #if defined(DAVINCI_EMAC_VERSION2)
> > > > > @@ -411,13 +429,17 @@ static void  __attribute__((unused)) davinci_eth_gigabit_enable(int phy_addr)
> > > > >  }
> > > > >
> > > > >  /* Eth device open */
> > > > > +#ifndef CONFIG_DM_ETH
> > > >
> > > > When you have both cases, please use positive logic. Flip the cases
> > > > and use #ifdef.
> > > >
> > > > >  static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
> > > > > +#else /* with CONFIG_DM_ETH */
> > > > > +static int davinci_emac_start(struct udevice *dev)
> > > > > +#endif /* CONFIG_DM_ETH */
> > > > >  {
> > > > > -       dv_reg_p                addr;
> > > > > -       u_int32_t               clkdiv, cnt, mac_control;
> > > > > -       uint16_t                __maybe_unused lpa_val;
> > > > > -       volatile emac_desc      *rx_desc;
> > > > > -       int                     index;
> > > > > +       u32 clkdiv, cnt, mac_control;
> > > > > +       volatile emac_desc *rx_desc;
> > > > > +       u16 __maybe_unused lpa_val;
> > > > > +       dv_reg_p addr;
> > > > > +       int index;
> > > > >
> > > > >         debug_emac("+ emac_open\n");
> > > > >
> > > > > @@ -447,7 +469,11 @@ static int davinci_eth_open(struct eth_device *dev, bd_t *bis)
> > > > >         writel(1, &adap_emac->TXCONTROL);
> > > > >         writel(1, &adap_emac->RXCONTROL);
> > > > >
> > > > > +#ifndef CONFIG_DM_ETH
> > > >
> > > > When you have both cases, please use positive logic. Flip the cases
> > > > and use #ifdef.
> > > >
> > > > >         davinci_eth_set_mac_addr(dev);
> > > > > +#else /* with CONFIG_DM_ETH */
> > > > > +       davinci_emac_write_hwaddr(dev);
> > > > > +#endif /* CONFIG_DM_ETH */
> > > > >
> > > > >         /* Set DMA 8 TX / 8 RX Head pointers to 0 */
> > > > >         addr = &adap_emac->TX0HDP;
> > > > > @@ -588,7 +614,11 @@ static void davinci_eth_ch_teardown(int ch)
> > > > >  }
> > > > >
> > > > >  /* Eth device close */
> > > > > +#ifndef CONFIG_DM_ETH
> > > >
> > > > When you have both cases, please use positive logic. Flip the cases
> > > > and use #ifdef.
> > > >
> > > > >  static void davinci_eth_close(struct eth_device *dev)
> > > > > +#else /* with CONFIG_DM_ETH */
> > > > > +static void davinci_emac_stop(struct udevice *dev)
> > > > > +#endif /* CONFIG_DM_ETH */
> > > > >  {
> > > > >         debug_emac("+ emac_close\n");
> > > > >
> > > > > @@ -619,11 +649,15 @@ static int tx_send_loop = 0;
> > > > >   * This function sends a single packet on the network and returns
> > > > >   * positive number (number of bytes transmitted) or negative for error
> > > > >   */
> > > > > -static int davinci_eth_send_packet (struct eth_device *dev,
> > > > > -                                       void *packet, int length)
> > > > > +#ifndef CONFIG_DM_ETH
> > > >
> > > > When you have both cases, please use positive logic. Flip the cases
> > > > and use #ifdef.
> > > >
> > > > > +static int davinci_eth_send_packet(struct eth_device *dev,
> > > > > +                                  void *packet, int length)
> > > > > +#else /* with CONFIG_DM_ETH */
> > > > > +static int davinci_emac_send(struct udevice *dev,
> > > > > +                            void *packet, int length)
> > > > > +#endif /* CONFIG_DM_ETH */
> > > > >  {
> > > > > -       int ret_status = -1;
> > > > > -       int index;
> > > > > +       int ret_status = -1, index;
> > > >
> > > > I'm not sure why you are mixing these formatting changes (which look
> > > > bad anyway) with the substantive changes. Please drop them.
> > > >
> > > > >         tx_send_loop = 0;
> > > > >
> > > > >         index = get_active_phy();
> > > > > @@ -672,7 +706,11 @@ static int davinci_eth_send_packet (struct eth_device *dev,
> > > > >  /*
> > > > >   * This function handles receipt of a packet from the network
> > > > >   */
> > > > > +#ifndef CONFIG_DM_ETH
> > > >
> > > > When you have both cases, please use positive logic. Flip the cases
> > > > and use #ifdef.
> > > >
> > > > >  static int davinci_eth_rcv_packet (struct eth_device *dev)
> > > > > +#else /* with CONFIG_DM_ETH */
> > > > > +static int davinci_emac_recv(struct udevice *dev, int flags, uchar **packetp)
> > > > > +#endif /* CONFIG_DM_ETH */
> > > > >  {
> > > > >         volatile emac_desc *rx_curr_desc;
> > > > >         volatile emac_desc *curr_desc;
> > > >
> > > > Please remove the call to net_process_received_packet() and split the
> > > > descriptor cleanup into a free_pkt() operation.
> > > >
> > > > > @@ -742,6 +780,9 @@ static int davinci_eth_rcv_packet (struct eth_device *dev)
> > > > >                 }
> > > > >                 return (ret);
> > > > >         }
> > > > > +#ifdef CONFIG_DM_ETH
> > > > > +       *packetp = rx_curr_desc->buffer;
> > > > > +#endif
> > > > >         return (0);
> > > > >  }
> > > > >
> > > > > @@ -750,12 +791,16 @@ static int davinci_eth_rcv_packet (struct eth_device *dev)
> > > > >   * EMAC modules power or pin multiplexors, that is done by board_init()
> > > > >   * much earlier in bootup process. Returns 1 on success, 0 otherwise.
> > > > >   */
> > > > > +#ifndef CONFIG_DM_ETH
> > > >
> > > > When you have both cases, please use positive logic. Flip the cases
> > > > and use #ifdef.
> > > >
> > > > >  int davinci_emac_initialize(void)
> > > > > +#else /* with CONFIG_DM_ETH */
> > > > > +static int davinci_emac_probe(struct udevice *dev)
> > > > > +#endif /* CONFIG_DM_ETH */
> > > > >  {
> > > > > -       u_int32_t       phy_id;
> > > > > -       u_int16_t       tmp;
> > > > > -       int             i;
> > > > > -       int             ret;
> > > > > +       int i, ret;
> > > > > +       u32 phy_id;
> > > > > +       u16 tmp;
> > > > > +#ifndef CONFIG_DM_ETH
> > > > >         struct eth_device *dev;
> > > > >
> > > > >         dev = malloc(sizeof *dev);
> > > > > @@ -774,6 +819,7 @@ int davinci_emac_initialize(void)
> > > > >         dev->write_hwaddr = davinci_eth_set_mac_addr;
> > > > >
> > > > >         eth_register(dev);
> > > > > +#endif /* CONFIG_DM_ETH */
> > > > >
> > > > >         davinci_eth_mdio_enable();
> > > > >
> > > > > @@ -854,5 +900,34 @@ int davinci_emac_initialize(void)
> > > > >                         phy[i].auto_negotiate(i);
> > > > >         }
> > > > >  #endif
> > > > > -       return(1);
> > > > > +
> > > > > +#ifndef CONFIG_DM_ETH
> > > >
> > > > When you have both cases, please use positive logic. Flip the cases
> > > > and use #ifdef.
> > > >
> > > > > +       return 1;
> > > > > +#else /* with CONFIG_DM_ETH */
> > > > > +       return 0;
> > > > > +#endif /* CONFIG_DM_ETH */
> > > > >  }
> > > > > +
> > > > > +#ifdef CONFIG_DM_ETH
> > > > > +static const struct eth_ops davinci_emac_ops = {
> > > > > +       .start          = davinci_emac_start,
> > > > > +       .send           = davinci_emac_send,
> > > > > +       .recv           = davinci_emac_recv,
> > > > > +       .stop           = davinci_emac_stop,
> > > > > +       .write_hwaddr   = davinci_emac_write_hwaddr,
> > > > > +};
> > > > > +
> > > > > +static const struct udevice_id davinci_emac_ids[] = {
> > > > > +       { .compatible = "ti,davinci-dm6467-emac" },
> > > > > +       { }
> > > > > +};
> > > > > +
> > > > > +U_BOOT_DRIVER(davinci_emac) = {
> > > > > +       .name           = "davinci_emac",
> > > > > +       .id             = UCLASS_ETH,
> > > > > +       .of_match       = davinci_emac_ids,
> > > > > +       .probe          = davinci_emac_probe,
> > > > > +       .ops            = &davinci_emac_ops,
> > > > > +       .platdata_auto_alloc_size = sizeof(struct eth_pdata),
> > > > > +};
> > > > > +#endif /* CONFIG_DM_ETH */
> > > > > --
> > > > > 2.21.0
> > > > >
> > > > > _______________________________________________
> > > > > U-Boot mailing list
> > > > > U-Boot at lists.denx.de
> > > > > https://lists.denx.de/listinfo/u-boot

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

end of thread, other threads:[~2019-05-10 13:06 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-04-30 16:03 [U-Boot] [PATCH] net: davinci_emac: use driver model (CONFIG_DM_ETH) Bartosz Golaszewski
2019-05-09 18:50 ` Joe Hershberger
2019-05-10 12:21   ` Bartosz Golaszewski
2019-05-10 12:31     ` Adam Ford
2019-05-10 12:50       ` Bartosz Golaszewski
2019-05-10 13:06         ` Bartosz Golaszewski

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