
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 ?