[PATCH] of_mdio: select fixed phy support unconditionally
Calling the fixed-phy functions when CONFIG_FIXED_PHY=m as a previous change tried cannot work if the caller is in built-in code: drivers/of/built-in.o: In function `of_phy_register_fixed_link': of_reserved_mem.c:(.text+0x85e0): undefined reference to `fixed_phy_register' Making of_mdio depend on 'FIXED_PHY || !FIXED_PHY' would solve this dependency by enforcing that OF_MDIO itself becomes a loadable module when FIXED_PHY=y, but that creates a different dependency as it breaks any built-in ethernet driver that uses of_mdio. Making FIXED_PHY a bool option also cannot work, since it depends on PHYLIB, which again is tristate. This version now uses 'select FIXED_PHY' to ensure that the fixed-phy portion of of_mdio is not optional. The main downside of this is a small increase in code size for cases that do not need fixed phy support, but it should avoid all of the link-time problems. Signed-off-by: Arnd Bergmann Fixes: d1bd330a229f ("of_mdio: Enable fixed PHY support if driver is a module") --- drivers/of/Kconfig | 1 + drivers/of/of_mdio.c| 2 -- include/linux/of_mdio.h | 8 ++-- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig index b3bec3aaa45d..bc07ad30c9bf 100644 --- a/drivers/of/Kconfig +++ b/drivers/of/Kconfig @@ -74,6 +74,7 @@ config OF_NET config OF_MDIO def_tristate PHYLIB depends on PHYLIB + select FIXED_PHY help OpenFirmware MDIO bus (Ethernet PHY) accessors diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c index de68707a99c7..e2b50bc12f23 100644 --- a/drivers/of/of_mdio.c +++ b/drivers/of/of_mdio.c @@ -361,7 +361,6 @@ struct phy_device *of_phy_attach(struct net_device *dev, } EXPORT_SYMBOL(of_phy_attach); -#if IS_ENABLED(CONFIG_FIXED_PHY) /* * of_phy_is_fixed_link() and of_phy_register_fixed_link() must * support two DT bindings: @@ -451,4 +450,3 @@ int of_phy_register_fixed_link(struct device_node *np) return -ENODEV; } EXPORT_SYMBOL(of_phy_register_fixed_link); -#endif diff --git a/include/linux/of_mdio.h b/include/linux/of_mdio.h index 6c8cb9aa4c00..4b04587d0441 100644 --- a/include/linux/of_mdio.h +++ b/include/linux/of_mdio.h @@ -25,6 +25,8 @@ struct phy_device *of_phy_attach(struct net_device *dev, extern struct mii_bus *of_mdio_find_bus(struct device_node *mdio_np); extern int of_mdio_parse_addr(struct device *dev, const struct device_node *np); +extern int of_phy_register_fixed_link(struct device_node *np); +extern bool of_phy_is_fixed_link(struct device_node *np); #else /* CONFIG_OF */ static inline int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) @@ -67,12 +69,6 @@ static inline int of_mdio_parse_addr(struct device *dev, { return -ENOSYS; } -#endif /* CONFIG_OF */ - -#if defined(CONFIG_OF) && IS_ENABLED(CONFIG_FIXED_PHY) -extern int of_phy_register_fixed_link(struct device_node *np); -extern bool of_phy_is_fixed_link(struct device_node *np); -#else static inline int of_phy_register_fixed_link(struct device_node *np) { return -ENOSYS; -- 2.9.0
Re: [PATCH] of_mdio: select fixed phy support unconditionally
On 06/24/16 02:24, Arnd Bergmann wrote: > Calling the fixed-phy functions when CONFIG_FIXED_PHY=m as a previous > change tried cannot work if the caller is in built-in code: > > drivers/of/built-in.o: In function `of_phy_register_fixed_link': > of_reserved_mem.c:(.text+0x85e0): undefined reference to `fixed_phy_register' > > Making of_mdio depend on 'FIXED_PHY || !FIXED_PHY' would solve this > dependency by enforcing that OF_MDIO itself becomes a loadable module > when FIXED_PHY=y, but that creates a different dependency as it > breaks any built-in ethernet driver that uses of_mdio. > > Making FIXED_PHY a bool option also cannot work, since it depends on > PHYLIB, which again is tristate. > > This version now uses 'select FIXED_PHY' to ensure that the fixed-phy > portion of of_mdio is not optional. The main downside of this is > a small increase in code size for cases that do not need fixed phy > support, but it should avoid all of the link-time problems. > > Signed-off-by: Arnd Bergmann > Fixes: d1bd330a229f ("of_mdio: Enable fixed PHY support if driver is a > module") Fixes the build errors that I was seeing. Thanks. Acked-by: Randy Dunlap > --- > drivers/of/Kconfig | 1 + > drivers/of/of_mdio.c| 2 -- > include/linux/of_mdio.h | 8 ++-- > 3 files changed, 3 insertions(+), 8 deletions(-) > > diff --git a/drivers/of/Kconfig b/drivers/of/Kconfig > index b3bec3aaa45d..bc07ad30c9bf 100644 > --- a/drivers/of/Kconfig > +++ b/drivers/of/Kconfig > @@ -74,6 +74,7 @@ config OF_NET > config OF_MDIO > def_tristate PHYLIB > depends on PHYLIB > + select FIXED_PHY > help > OpenFirmware MDIO bus (Ethernet PHY) accessors > > diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c > index de68707a99c7..e2b50bc12f23 100644 > --- a/drivers/of/of_mdio.c > +++ b/drivers/of/of_mdio.c > @@ -361,7 +361,6 @@ struct phy_device *of_phy_attach(struct net_device *dev, > } > EXPORT_SYMBOL(of_phy_attach); > > -#if IS_ENABLED(CONFIG_FIXED_PHY) > /* > * of_phy_is_fixed_link() and of_phy_register_fixed_link() must > * support two DT bindings: > @@ -451,4 +450,3 @@ int of_phy_register_fixed_link(struct device_node *np) > return -ENODEV; > } > EXPORT_SYMBOL(of_phy_register_fixed_link); > -#endif > diff --git a/include/linux/of_mdio.h b/include/linux/of_mdio.h > index 6c8cb9aa4c00..4b04587d0441 100644 > --- a/include/linux/of_mdio.h > +++ b/include/linux/of_mdio.h > @@ -25,6 +25,8 @@ struct phy_device *of_phy_attach(struct net_device *dev, > > extern struct mii_bus *of_mdio_find_bus(struct device_node *mdio_np); > extern int of_mdio_parse_addr(struct device *dev, const struct device_node > *np); > +extern int of_phy_register_fixed_link(struct device_node *np); > +extern bool of_phy_is_fixed_link(struct device_node *np); > > #else /* CONFIG_OF */ > static inline int of_mdiobus_register(struct mii_bus *mdio, struct > device_node *np) > @@ -67,12 +69,6 @@ static inline int of_mdio_parse_addr(struct device *dev, > { > return -ENOSYS; > } > -#endif /* CONFIG_OF */ > - > -#if defined(CONFIG_OF) && IS_ENABLED(CONFIG_FIXED_PHY) > -extern int of_phy_register_fixed_link(struct device_node *np); > -extern bool of_phy_is_fixed_link(struct device_node *np); > -#else > static inline int of_phy_register_fixed_link(struct device_node *np) > { > return -ENOSYS; > -- ~Randy
Re: [PATCH] of_mdio: select fixed phy support unconditionally
From: Arnd Bergmann Date: Fri, 24 Jun 2016 11:24:08 +0200 > Calling the fixed-phy functions when CONFIG_FIXED_PHY=m as a previous > change tried cannot work if the caller is in built-in code: > > drivers/of/built-in.o: In function `of_phy_register_fixed_link': > of_reserved_mem.c:(.text+0x85e0): undefined reference to `fixed_phy_register' > > Making of_mdio depend on 'FIXED_PHY || !FIXED_PHY' would solve this > dependency by enforcing that OF_MDIO itself becomes a loadable module > when FIXED_PHY=y, but that creates a different dependency as it > breaks any built-in ethernet driver that uses of_mdio. > > Making FIXED_PHY a bool option also cannot work, since it depends on > PHYLIB, which again is tristate. > > This version now uses 'select FIXED_PHY' to ensure that the fixed-phy > portion of of_mdio is not optional. The main downside of this is > a small increase in code size for cases that do not need fixed phy > support, but it should avoid all of the link-time problems. > > Signed-off-by: Arnd Bergmann > Fixes: d1bd330a229f ("of_mdio: Enable fixed PHY support if driver is a > module") Applied to net-next, thanks Arnd. In the future, please be explicit about what tree a patch is targetting by specifying it in your Subject line, as: [PATCH net-next] ... or similar. Thanks.
Re: [PATCH] of_mdio: select fixed phy support unconditionally
On Tuesday, June 28, 2016 5:43:42 AM CEST David Miller wrote: > Applied to net-next, thanks Arnd. > > In the future, please be explicit about what tree a patch is > targetting by specifying it in your Subject line, as: > > [PATCH net-next] ... > Sure, will do. Arnd