undefined reference to fixed_phy_add, from of_add_fixed_phys

Olaf Hering
2008-02-27T10:58:14Z

Hello,

can anyone explain why linking fails?
I dont see whats so special about fixed_phy_add().

olaf@lingonberry:/dev/shm/R/linux-2.6.25-rc3> time env LC_ALL=C make -kj8 O=../O-25 vmlinux
GEN /dev/shm/R/O-25/Makefile
CHK include/linux/version.h
CHK include/linux/utsrelease.h
Using /dev/shm/R/linux-2.6.25-rc3 as source for kernel
CALL /dev/shm/R/linux-2.6.25-rc3/scripts/checksyscalls.sh
CHK include/linux/compile.h
CALL /dev/shm/R/linux-2.6.25-rc3/arch/powerpc/kernel/systbl_chk.sh
CC arch/powerpc/sysdev/fsl_soc.o
/dev/shm/R/linux-2.6.25-rc3/arch/powerpc/sysdev/fsl_soc.c:153:2: warning: #warning fixed_phy_add
/dev/shm/R/linux-2.6.25-rc3/arch/powerpc/sysdev/fsl_soc.c:153:2: warning: #warning fixed_phy_add
LD arch/powerpc/sysdev/built-in.o
CC drivers/net/phy/fixed.o
/dev/shm/R/linux-2.6.25-rc3/drivers/net/phy/fixed.c:173:2: warning: #warning fixed_phy_add
/dev/shm/R/linux-2.6.25-rc3/drivers/net/phy/fixed.c:173:2: warning: #warning fixed_phy_add
LD drivers/net/phy/built-in.o
LD vmlinux.o
MODPOST vmlinux.o
WARNING: modpost: Found 11 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
GEN .version
CHK include/linux/compile.h
UPD include/linux/compile.h
CC init/version.o
LD init/built-in.o
LD .tmp_vmlinux1
arch/powerpc/sysdev/built-in.o: In function `of_add_fixed_phys':
(.text+0x124c): undefined reference to `fixed_phy_add'
make[1]: *** [.tmp_vmlinux1] Error 1
make[1]: Target `vmlinux' not remade because of errors.
make: *** [sub-make] Error 2
make: Target `vmlinux' not remade because of errors.

real 0m15.343s
user 0m6.341s
sys 0m3.135s

olaf@lingonberry:/dev/shm/R/linux-2.6.25-rc3> quilt diff
Index: linux-2.6.25-rc3/arch/powerpc/sysdev/fsl_soc.c
===================================================================
--- linux-2.6.25-rc3.orig/arch/powerpc/sysdev/fsl_soc.c
+++ linux-2.6.25-rc3/arch/powerpc/sysdev/fsl_soc.c
@@ -150,7 +150,8 @@ EXPORT_SYMBOL(get_baudrate);
#endif /* CONFIG_CPM2 */

#ifdef CONFIG_FIXED_PHY
-static int __init of_add_fixed_phys(void)
+#warning fixed_phy_add
+/* static */ int /* __init */ of_add_fixed_phys(void)
{
int ret;
struct device_node *np;
@@ -177,7 +178,9 @@ static int __init of_add_fixed_phys(void

return 0;
}
+#if 0
arch_initcall(of_add_fixed_phys);
+#endif
#endif /* CONFIG_FIXED_PHY */

static int __init gfar_mdio_of_init(void)
Index: linux-2.6.25-rc3/drivers/net/phy/fixed.c
===================================================================
--- linux-2.6.25-rc3.orig/drivers/net/phy/fixed.c
+++ linux-2.6.25-rc3/drivers/net/phy/fixed.c
@@ -170,6 +170,7 @@ int fixed_phy_set_link_update(struct phy
}
EXPORT_SYMBOL_GPL(fixed_phy_set_link_update);

+#warning fixed_phy_add
int fixed_phy_add(unsigned int irq, int phy_id,
struct fixed_phy_status *status)
{