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 | expand |
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 ?
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/
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>
Hi Patrick, https://patchwork.ozlabs.org/patch/1140379/ was applied to http://git.denx.de/?p=u-boot/u-boot-net.git Thanks! -Joe
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 */