Commit b6d49cab authored by Clay McClure's avatar Clay McClure Committed by David S. Miller
Browse files

net: Make PTP-specific drivers depend on PTP_1588_CLOCK

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>
parent 610a9346
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -24,8 +24,8 @@ config NET_DSA_MV88E6XXX_PTP
	bool "PTP support for Marvell 88E6xxx"
	default n
	depends on NET_DSA_MV88E6XXX_GLOBAL2
	depends on PTP_1588_CLOCK
	imply NETWORK_PHY_TIMESTAMPING
	imply PTP_1588_CLOCK
	help
	  Say Y to enable PTP hardware timestamping on Marvell 88E6xxx switch
	  chips that support it.
+1 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ tristate "NXP SJA1105 Ethernet switch family support"
config NET_DSA_SJA1105_PTP
	bool "Support for the PTP clock on the NXP SJA1105 Ethernet switch"
	depends on NET_DSA_SJA1105
	depends on PTP_1588_CLOCK
	help
	  This enables support for timestamping and PTP clock manipulations in
	  the SJA1105 DSA driver.
+1 −1
Original line number Diff line number Diff line
@@ -35,8 +35,8 @@ config MACB
config MACB_USE_HWSTAMP
	bool "Use IEEE 1588 hwstamp"
	depends on MACB
	depends on PTP_1588_CLOCK
	default y
	imply PTP_1588_CLOCK
	---help---
	  Enable IEEE 1588 Precision Time Protocol (PTP) support for MACB.

+1 −1
Original line number Diff line number Diff line
@@ -54,7 +54,7 @@ config THUNDER_NIC_RGX
config CAVIUM_PTP
	tristate "Cavium PTP coprocessor as PTP clock"
	depends on 64BIT && PCI
	imply PTP_1588_CLOCK
	depends on PTP_1588_CLOCK
	---help---
	  This driver adds support for the Precision Time Protocol Clocks and
	  Timestamping coprocessor (PTP) found on Cavium processors.
+1 −2
Original line number Diff line number Diff line
@@ -90,9 +90,8 @@ config TI_CPTS
config TI_CPTS_MOD
	tristate
	depends on TI_CPTS
	depends on PTP_1588_CLOCK
	default y if TI_CPSW=y || TI_KEYSTONE_NETCP=y || TI_CPSW_SWITCHDEV=y
	select NET_PTP_CLASSIFY
	imply PTP_1588_CLOCK
	default m

config TI_K3_AM65_CPSW_NUSS