From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751855AbcFYRzQ (ORCPT ); Sat, 25 Jun 2016 13:55:16 -0400 Received: from bombadil.infradead.org ([198.137.202.9]:55617 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751583AbcFYRzO (ORCPT ); Sat, 25 Jun 2016 13:55:14 -0400 Subject: Re: [PATCH] of_mdio: select fixed phy support unconditionally To: Arnd Bergmann , Florian Fainelli References: <20160624092450.1507991-1-arnd@arndb.de> Cc: Rob Herring , Frank Rowand , David Daney , "David S. Miller" , Andrew Lunn , Sergei Shtylyov , Ben Hutchings , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org From: Randy Dunlap Message-ID: <576EC57E.9070203@infradead.org> Date: Sat, 25 Jun 2016 10:55:10 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 MIME-Version: 1.0 In-Reply-To: <20160624092450.1507991-1-arnd@arndb.de> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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