• Alvin Šipraga's avatar
    net: dsa: realtek: fix Kconfig to assure consistent driver linkage · 2511e0c8
    Alvin Šipraga authored
    The kernel test robot reported a build failure:
    
    or1k-linux-ld: drivers/net/dsa/realtek/realtek-smi.o:(.rodata+0x16c): undefined reference to `rtl8366rb_variant'
    
    ... with the following build configuration:
    
    CONFIG_NET_DSA_REALTEK=y
    CONFIG_NET_DSA_REALTEK_SMI=y
    CONFIG_NET_DSA_REALTEK_RTL8365MB=y
    CONFIG_NET_DSA_REALTEK_RTL8366RB=m
    
    The problem here is that the realtek-smi interface driver gets built-in,
    while the rtl8366rb switch subdriver gets built as a module, hence the
    symbol rtl8366rb_variant is not reachable when defining the OF device
    table in the interface driver.
    
    The Kconfig dependencies don't help in this scenario because they just
    say that the subdriver(s) depend on at least one interface driver. In
    fact, the subdrivers don't depend on the interface drivers at all, and
    can even be built even in their absence. Somewhat strangely, the
    interface drivers can also be built in the absence of any subdriver,
    BUT, if a subdriver IS enabled, then it must be reachable according to
    the linkage of the interface driver: effectively what the IS_REACHABLE()
    macro achieves. If it is not reachable, the above kind of linker error
    will be observed.
    
    Rather than papering over the above build error by simply using
    IS_REACHABLE(), we can do a little better and admit that it is actually
    the interface drivers that have a dependency on the subdrivers. So this
    patch does exactly that. Specifically, we ensure that:
    
    1. The interface drivers' Kconfig symbols must have a value no greater
       than the value of any subdriver Kconfig symbols.
    
    2. The subdrivers should by default enable both interface drivers, since
       most users probably want at least one of them; those interface
       drivers can be explicitly disabled however.
    
    What this doesn't do is prevent a user from building only a subdriver,
    without any interface driver. To that end, add an additional line of
    help in the menu to guide users in the right direction.
    
    Link: https://lore.kernel.org/all/202204110757.XIafvVnj-lkp@intel.com/Reported-by: default avatarkernel test robot <lkp@intel.com>
    Fixes: aac94001 ("net: dsa: realtek: add new mdio interface for drivers")
    Signed-off-by: default avatarAlvin Šipraga <alsi@bang-olufsen.dk>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    2511e0c8
Kconfig 1.66 KB