[U-Boot,2/2] net: dwc_et_qos: update weak function board_interface_eth_init
diff mbox series

Message ID 1564651743-28430-2-git-send-email-patrick.delaunay@st.com
State Accepted
Commit 53e3d52c6c
Delegated to: Joe Hershberger
Headers show
Series
  • [U-Boot,1/2] net: dwc_eth_qos: Change eqos_ops function to static
Related show

Commit Message

Patrick Delaunay Aug. 1, 2019, 9:29 a.m. UTC
Align the board and driver prototype for board_interface_eth_init
to avoid execution issue (the interface_type parameter is defined
as int or phy_interface_t).

To have a generic weak function (it should be reused by other driver)
I change the prototype to use directly udevice.

This prototype is added in netdev.h to allow compilation check
and avoid warning when compiling with W=1 on file
board/st/stm32mp1/stm32mp1.c

warning: no previous prototype for 'board_interface_eth_init'\
[-Wmissing-prototypes]
     int board_interface_eth_init(int interface_type, ....
         ^~~~~~~~~~~~~~~~~~~~~~~~

Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---

 board/st/stm32mp1/stm32mp1.c | 17 +++++++++++++----
 drivers/net/dwc_eth_qos.c    | 16 +++-------------
 include/netdev.h             |  3 +++
 3 files changed, 19 insertions(+), 17 deletions(-)

Comments

Ramon Fried Aug. 3, 2019, 9:08 p.m. UTC | #1
On Thu, Aug 1, 2019 at 12:32 PM Patrick Delaunay
<patrick.delaunay@st.com> wrote:
>
> Align the board and driver prototype for board_interface_eth_init
> to avoid execution issue (the interface_type parameter is defined
> as int or phy_interface_t).
>
> To have a generic weak function (it should be reused by other driver)
> I change the prototype to use directly udevice.
>
> This prototype is added in netdev.h to allow compilation check
> and avoid warning when compiling with W=1 on file
> board/st/stm32mp1/stm32mp1.c
>
> warning: no previous prototype for 'board_interface_eth_init'\
> [-Wmissing-prototypes]
>      int board_interface_eth_init(int interface_type, ....
>          ^~~~~~~~~~~~~~~~~~~~~~~~
>
> Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
> Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
> ---
>
>  board/st/stm32mp1/stm32mp1.c | 17 +++++++++++++----
>  drivers/net/dwc_eth_qos.c    | 16 +++-------------
>  include/netdev.h             |  3 +++
>  3 files changed, 19 insertions(+), 17 deletions(-)
>
> diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c
> index b99c6c0..2365dd1 100644
> --- a/board/st/stm32mp1/stm32mp1.c
> +++ b/board/st/stm32mp1/stm32mp1.c
> @@ -16,6 +16,7 @@
>  #include <misc.h>
>  #include <mtd.h>
>  #include <mtd_node.h>
> +#include <netdev.h>
>  #include <phy.h>
>  #include <reset.h>
>  #include <syscon.h>
> @@ -560,13 +561,21 @@ void board_quiesce_devices(void)
>         setup_led(LEDST_OFF);
>  }
>
> -/* board interface eth init */
> -/* this is a weak define that we are overriding */
> -int board_interface_eth_init(phy_interface_t interface_type,
> -                            bool eth_clk_sel_reg, bool eth_ref_clk_sel_reg)
> +/* eth init function : weak called in eqos driver */
> +int board_interface_eth_init(struct udevice *dev,
> +                            phy_interface_t interface_type)
>  {
>         u8 *syscfg;
>         u32 value;
> +       bool eth_clk_sel_reg = false;
> +       bool eth_ref_clk_sel_reg = false;
> +
> +       /* Gigabit Ethernet 125MHz clock selection. */
> +       eth_clk_sel_reg = dev_read_bool(dev, "st,eth_clk_sel");
> +
> +       /* Ethernet 50Mhz RMII clock selection */
> +       eth_ref_clk_sel_reg =
> +               dev_read_bool(dev, "st,eth_ref_clk_sel");
>
>         syscfg = (u8 *)syscon_get_first_range(STM32MP_SYSCON_SYSCFG);
>
> diff --git a/drivers/net/dwc_eth_qos.c b/drivers/net/dwc_eth_qos.c
> index 6df9956..4557093 100644
> --- a/drivers/net/dwc_eth_qos.c
> +++ b/drivers/net/dwc_eth_qos.c
> @@ -1591,8 +1591,8 @@ err_free_reset_eqos:
>  }
>
>  /* board-specific Ethernet Interface initializations. */
> -__weak int board_interface_eth_init(int interface_type, bool eth_clk_sel_reg,
> -                                   bool eth_ref_clk_sel_reg)
> +__weak int board_interface_eth_init(struct udevice *dev,
> +                                   phy_interface_t interface_type)
>  {
>         return 0;
>  }
> @@ -1602,8 +1602,6 @@ static int eqos_probe_resources_stm32(struct udevice *dev)
>         struct eqos_priv *eqos = dev_get_priv(dev);
>         int ret;
>         phy_interface_t interface;
> -       bool eth_clk_sel_reg = false;
> -       bool eth_ref_clk_sel_reg = false;
>
>         debug("%s(dev=%p):\n", __func__, dev);
>
> @@ -1614,15 +1612,7 @@ static int eqos_probe_resources_stm32(struct udevice *dev)
>                 return -EINVAL;
>         }
>
> -       /* Gigabit Ethernet 125MHz clock selection. */
> -       eth_clk_sel_reg = dev_read_bool(dev, "st,eth_clk_sel");
> -
> -       /* Ethernet 50Mhz RMII clock selection */
> -       eth_ref_clk_sel_reg =
> -               dev_read_bool(dev, "st,eth_ref_clk_sel");
> -
> -       ret = board_interface_eth_init(interface, eth_clk_sel_reg,
> -                                      eth_ref_clk_sel_reg);
> +       ret = board_interface_eth_init(dev, interface);
>         if (ret)
>                 return -EINVAL;
>
> diff --git a/include/netdev.h b/include/netdev.h
> index a40c4ad..68a3fce 100644
> --- a/include/netdev.h
> +++ b/include/netdev.h
> @@ -10,6 +10,7 @@
>
>  #ifndef _NETDEV_H_
>  #define _NETDEV_H_
> +#include <phy_interface.h>
>
>  /*
>   * Board and CPU-specific initialization functions
> @@ -21,6 +22,8 @@
>   */
>
>  int board_eth_init(bd_t *bis);
> +int board_interface_eth_init(struct udevice *dev,
> +                            phy_interface_t interface_type);
>  int cpu_eth_init(bd_t *bis);
>
>  /* Driver initialization prototypes */
> --
> 2.7.4
>

why can you just write a phy driver specific to this board and hook it
to the eth
driver in the dts ?
Christophe ROULLIER Aug. 7, 2019, 1:39 p.m. UTC | #2
Hi Ramon,

No need to write specific phy driver, uboot phy generic driver is working
fine.
The goal of  board_interface_eth_init function is only to configure syscfg
register with good value in function of interface type (MII, RMII, GMII
...). And this syscfg value is specific for each platform. After syscfg
register value is use to configure (set some mux) for ethernet clock tree
path in RCC.

Regards,

Christophe





--
Sent from: http://u-boot.10912.n7.nabble.com/
Joe Hershberger Sept. 3, 2019, 9:53 p.m. UTC | #3
On Thu, Aug 1, 2019 at 4:32 AM Patrick Delaunay <patrick.delaunay@st.com> wrote:
>
> Align the board and driver prototype for board_interface_eth_init
> to avoid execution issue (the interface_type parameter is defined
> as int or phy_interface_t).
>
> To have a generic weak function (it should be reused by other driver)
> I change the prototype to use directly udevice.
>
> This prototype is added in netdev.h to allow compilation check
> and avoid warning when compiling with W=1 on file
> board/st/stm32mp1/stm32mp1.c
>
> warning: no previous prototype for 'board_interface_eth_init'\
> [-Wmissing-prototypes]
>      int board_interface_eth_init(int interface_type, ....
>          ^~~~~~~~~~~~~~~~~~~~~~~~
>
> Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
> Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>

Acked-by: Joe Hershberger <joe.hershberger@ni.com>
Joe Hershberger Sept. 4, 2019, 4:41 p.m. UTC | #4
Hi Patrick,

https://patchwork.ozlabs.org/patch/1140379/ was applied to http://git.denx.de/?p=u-boot/u-boot-net.git

Thanks!
-Joe

Patch
diff mbox series

diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c
index b99c6c0..2365dd1 100644
--- a/board/st/stm32mp1/stm32mp1.c
+++ b/board/st/stm32mp1/stm32mp1.c
@@ -16,6 +16,7 @@ 
 #include <misc.h>
 #include <mtd.h>
 #include <mtd_node.h>
+#include <netdev.h>
 #include <phy.h>
 #include <reset.h>
 #include <syscon.h>
@@ -560,13 +561,21 @@  void board_quiesce_devices(void)
 	setup_led(LEDST_OFF);
 }
 
-/* board interface eth init */
-/* this is a weak define that we are overriding */
-int board_interface_eth_init(phy_interface_t interface_type,
-			     bool eth_clk_sel_reg, bool eth_ref_clk_sel_reg)
+/* eth init function : weak called in eqos driver */
+int board_interface_eth_init(struct udevice *dev,
+			     phy_interface_t interface_type)
 {
 	u8 *syscfg;
 	u32 value;
+	bool eth_clk_sel_reg = false;
+	bool eth_ref_clk_sel_reg = false;
+
+	/* Gigabit Ethernet 125MHz clock selection. */
+	eth_clk_sel_reg = dev_read_bool(dev, "st,eth_clk_sel");
+
+	/* Ethernet 50Mhz RMII clock selection */
+	eth_ref_clk_sel_reg =
+		dev_read_bool(dev, "st,eth_ref_clk_sel");
 
 	syscfg = (u8 *)syscon_get_first_range(STM32MP_SYSCON_SYSCFG);
 
diff --git a/drivers/net/dwc_eth_qos.c b/drivers/net/dwc_eth_qos.c
index 6df9956..4557093 100644
--- a/drivers/net/dwc_eth_qos.c
+++ b/drivers/net/dwc_eth_qos.c
@@ -1591,8 +1591,8 @@  err_free_reset_eqos:
 }
 
 /* board-specific Ethernet Interface initializations. */
-__weak int board_interface_eth_init(int interface_type, bool eth_clk_sel_reg,
-				    bool eth_ref_clk_sel_reg)
+__weak int board_interface_eth_init(struct udevice *dev,
+				    phy_interface_t interface_type)
 {
 	return 0;
 }
@@ -1602,8 +1602,6 @@  static int eqos_probe_resources_stm32(struct udevice *dev)
 	struct eqos_priv *eqos = dev_get_priv(dev);
 	int ret;
 	phy_interface_t interface;
-	bool eth_clk_sel_reg = false;
-	bool eth_ref_clk_sel_reg = false;
 
 	debug("%s(dev=%p):\n", __func__, dev);
 
@@ -1614,15 +1612,7 @@  static int eqos_probe_resources_stm32(struct udevice *dev)
 		return -EINVAL;
 	}
 
-	/* Gigabit Ethernet 125MHz clock selection. */
-	eth_clk_sel_reg = dev_read_bool(dev, "st,eth_clk_sel");
-
-	/* Ethernet 50Mhz RMII clock selection */
-	eth_ref_clk_sel_reg =
-		dev_read_bool(dev, "st,eth_ref_clk_sel");
-
-	ret = board_interface_eth_init(interface, eth_clk_sel_reg,
-				       eth_ref_clk_sel_reg);
+	ret = board_interface_eth_init(dev, interface);
 	if (ret)
 		return -EINVAL;
 
diff --git a/include/netdev.h b/include/netdev.h
index a40c4ad..68a3fce 100644
--- a/include/netdev.h
+++ b/include/netdev.h
@@ -10,6 +10,7 @@ 
 
 #ifndef _NETDEV_H_
 #define _NETDEV_H_
+#include <phy_interface.h>
 
 /*
  * Board and CPU-specific initialization functions
@@ -21,6 +22,8 @@ 
  */
 
 int board_eth_init(bd_t *bis);
+int board_interface_eth_init(struct udevice *dev,
+			     phy_interface_t interface_type);
 int cpu_eth_init(bd_t *bis);
 
 /* Driver initialization prototypes */