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 <arnd@xxxxxxxx> > 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 <rdunlap@xxxxxxxxxxxxx> > --- > 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 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html