• Clay McClure's avatar
    net: Make PTP-specific drivers depend on PTP_1588_CLOCK · b6d49cab
    Clay McClure authored
    Commit d1cbfd77 ("ptp_clock: Allow for it to be optional") changed
    all PTP-capable Ethernet drivers from `select PTP_1588_CLOCK` to `imply
    PTP_1588_CLOCK`, "in order to break the hard dependency between the PTP
    clock subsystem and ethernet drivers capable of being clock providers."
    As a result it is possible to build PTP-capable Ethernet drivers without
    the PTP subsystem by deselecting PTP_1588_CLOCK. Drivers are required to
    handle the missing dependency gracefully.
    
    Some PTP-capable Ethernet drivers (e.g., TI_CPSW) factor their PTP code
    out into separate drivers (e.g., TI_CPTS_MOD). The above commit also
    changed these PTP-specific drivers to `imply PTP_1588_CLOCK`, making it
    possible to build them without the PTP subsystem. But as Grygorii
    Strashko noted in [1]:
    
    On Wed, Apr 22, 2020 at 02:16:11PM +0300, Grygorii Strashko wrote:
    
    > Another question is that CPTS completely nonfunctional in this case and
    > it was never expected that somebody will even try to use/run such
    > configuration (except for random build purposes).
    
    In my view, enabling a PTP-specific driver without the PTP subsystem is
    a configuration error made possible by the above commit. Kconfig should
    not allow users to create a configuration with missing dependencies that
    results in "completely nonfunctional" drivers.
    
    I audited all network drivers that call ptp_clock_register() but merely
    `imply PTP_1588_CLOCK` and found five PTP-specific drivers that are
    likely nonfunctional without PTP_1588_CLOCK:
    
        NET_DSA_MV88E6XXX_PTP
        NET_DSA_SJA1105_PTP
        MACB_USE_HWSTAMP
        CAVIUM_PTP
        TI_CPTS_MOD
    
    Note how these symbols all reference PTP or timestamping in their name;
    this is a clue that they depend on PTP_1588_CLOCK.
    
    Change them from `imply PTP_1588_CLOCK` [2] to `depends on PTP_1588_CLOCK`.
    I'm not using `select PTP_1588_CLOCK` here because PTP_1588_CLOCK has
    its own dependencies, which `select` would not transitively apply.
    
    Additionally, remove the `select NET_PTP_CLASSIFY` from CPTS_TI_MOD;
    PTP_1588_CLOCK already selects that.
    
    [1]: https://lore.kernel.org/lkml/c04458ed-29ee-1797-3a11-7f3f560553e6@ti.com/
    
    [2]: NET_DSA_SJA1105_PTP had never declared any type of dependency on
    PTP_1588_CLOCK (`imply` or otherwise); adding a `depends on PTP_1588_CLOCK`
    here seems appropriate.
    
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Richard Cochran <richardcochran@gmail.com>
    Cc: Nicolas Pitre <nico@fluxnic.net>
    Cc: Grygorii Strashko <grygorii.strashko@ti.com>
    Cc: Geert Uytterhoeven <geert@linux-m68k.org>
    Fixes: d1cbfd77 ("ptp_clock: Allow for it to be optional")
    Signed-off-by: default avatarClay McClure <clay@daemons.net>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b6d49cab
Kconfig 1.4 KB