ethernet: fix PTP_1588_CLOCK dependencies
authorArnd Bergmann <arnd@arndb.de>
Thu, 12 Aug 2021 18:33:58 +0000 (20:33 +0200)
committerJakub Kicinski <kuba@kernel.org>
Sat, 14 Aug 2021 00:49:05 +0000 (17:49 -0700)
The 'imply' keyword does not do what most people think it does, it only
politely asks Kconfig to turn on another symbol, but does not prevent
it from being disabled manually or built as a loadable module when the
user is built-in. In the ICE driver, the latter now causes a link failure:

aarch64-linux-ld: drivers/net/ethernet/intel/ice/ice_main.o: in function `ice_eth_ioctl':
ice_main.c:(.text+0x13b0): undefined reference to `ice_ptp_get_ts_config'
ice_main.c:(.text+0x13b0): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `ice_ptp_get_ts_config'
aarch64-linux-ld: ice_main.c:(.text+0x13bc): undefined reference to `ice_ptp_set_ts_config'
ice_main.c:(.text+0x13bc): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `ice_ptp_set_ts_config'
aarch64-linux-ld: drivers/net/ethernet/intel/ice/ice_main.o: in function `ice_prepare_for_reset':
ice_main.c:(.text+0x31fc): undefined reference to `ice_ptp_release'
ice_main.c:(.text+0x31fc): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `ice_ptp_release'
aarch64-linux-ld: drivers/net/ethernet/intel/ice/ice_main.o: in function `ice_rebuild':

This is a recurring problem in many drivers, and we have discussed
it several times befores, without reaching a consensus. I'm providing
a link to the previous email thread for reference, which discusses
some related problems.

To solve the dependency issue better than the 'imply' keyword, introduce a
separate Kconfig symbol "CONFIG_PTP_1588_CLOCK_OPTIONAL" that any driver
can depend on if it is able to use PTP support when available, but works
fine without it. Whenever CONFIG_PTP_1588_CLOCK=m, those drivers are
then prevented from being built-in, the same way as with a 'depends on
PTP_1588_CLOCK || !PTP_1588_CLOCK' dependency that does the same trick,
but that can be rather confusing when you first see it.

Since this should cover the dependencies correctly, the IS_REACHABLE()
hack in the header is no longer needed now, and can be turned back
into a normal IS_ENABLED() check. Any driver that gets the dependency
wrong will now cause a link time failure rather than being unable to use
PTP support when that is in a loadable module.

However, the two recently added ptp_get_vclocks_index() and
ptp_convert_timestamp() interfaces are only called from builtin code with
ethtool and socket timestamps, so keep the current behavior by stubbing
those out completely when PTP is in a loadable module. This should be
addressed properly in a follow-up.

As Richard suggested, we may want to actually turn PTP support into a
'bool' option later on, preventing it from being a loadable module
altogether, which would be one way to solve the problem with the ethtool
interface.

Fixes: 06c16d89d2cb ("ice: register 1588 PTP clock device object for E810 devices")
Link: https://lore.kernel.org/netdev/20210804121318.337276-1-arnd@kernel.org/
Link: https://lore.kernel.org/netdev/CAK8P3a06enZOf=XyZ+zcAwBczv41UuCTz+=0FMf2gBz1_cOnZQ@mail.gmail.com/
Link: https://lore.kernel.org/netdev/CAK8P3a3=eOxE-K25754+fB_-i_0BZzf9a9RfPTX3ppSwu9WZXw@mail.gmail.com/
Link: https://lore.kernel.org/netdev/20210726084540.3282344-1-arnd@kernel.org/
Acked-by: Shannon Nelson <snelson@pensando.io>
Acked-by: Jacob Keller <jacob.e.keller@intel.com>
Acked-by: Richard Cochran <richardcochran@gmail.com>
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/r/20210812183509.1362782-1-arnd@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
29 files changed:
drivers/net/dsa/mv88e6xxx/Kconfig
drivers/net/dsa/ocelot/Kconfig
drivers/net/dsa/sja1105/Kconfig
drivers/net/ethernet/amd/Kconfig
drivers/net/ethernet/broadcom/Kconfig
drivers/net/ethernet/cadence/Kconfig
drivers/net/ethernet/cavium/Kconfig
drivers/net/ethernet/chelsio/Kconfig
drivers/net/ethernet/freescale/Kconfig
drivers/net/ethernet/hisilicon/Kconfig
drivers/net/ethernet/intel/Kconfig
drivers/net/ethernet/marvell/octeontx2/Kconfig
drivers/net/ethernet/mellanox/mlx4/Kconfig
drivers/net/ethernet/mellanox/mlx5/core/Kconfig
drivers/net/ethernet/mellanox/mlxsw/Kconfig
drivers/net/ethernet/microchip/Kconfig
drivers/net/ethernet/mscc/Kconfig
drivers/net/ethernet/oki-semi/pch_gbe/Kconfig
drivers/net/ethernet/pensando/Kconfig
drivers/net/ethernet/qlogic/Kconfig
drivers/net/ethernet/renesas/Kconfig
drivers/net/ethernet/samsung/Kconfig
drivers/net/ethernet/sfc/Kconfig
drivers/net/ethernet/stmicro/stmmac/Kconfig
drivers/net/phy/Kconfig
drivers/ptp/Kconfig
drivers/ptp/ptp_vclock.c
drivers/scsi/cxgbi/cxgb4i/Kconfig
include/linux/ptp_clock_kernel.h

index 634a48e6616b953a873a942dacc8b10affd5ebe4..7a2445a34eb778a4b1fb6cab6d0bf77605f3bb65 100644 (file)
@@ -2,6 +2,7 @@
 config NET_DSA_MV88E6XXX
        tristate "Marvell 88E6xxx Ethernet switch fabric support"
        depends on NET_DSA
+       depends on PTP_1588_CLOCK_OPTIONAL
        select IRQ_DOMAIN
        select NET_DSA_TAG_EDSA
        select NET_DSA_TAG_DSA
index 932b6b6fe817f4e9a0bc075a36f74aeec3aa96df..9948544ba1c4b0080ce41d231983335182872bd7 100644 (file)
@@ -5,6 +5,7 @@ config NET_DSA_MSCC_FELIX
        depends on NET_VENDOR_MICROSEMI
        depends on NET_VENDOR_FREESCALE
        depends on HAS_IOMEM
+       depends on PTP_1588_CLOCK_OPTIONAL
        select MSCC_OCELOT_SWITCH_LIB
        select NET_DSA_TAG_OCELOT_8021Q
        select NET_DSA_TAG_OCELOT
@@ -19,6 +20,7 @@ config NET_DSA_MSCC_SEVILLE
        depends on NET_DSA
        depends on NET_VENDOR_MICROSEMI
        depends on HAS_IOMEM
+       depends on PTP_1588_CLOCK_OPTIONAL
        select MSCC_OCELOT_SWITCH_LIB
        select NET_DSA_TAG_OCELOT_8021Q
        select NET_DSA_TAG_OCELOT
index b29d41e5e1e70c1f52b0de1e15fed1212b2b5213..1291bba3f3b6954180694c53d395f94899f16c44 100644 (file)
@@ -2,6 +2,7 @@
 config NET_DSA_SJA1105
 tristate "NXP SJA1105 Ethernet switch family support"
        depends on NET_DSA && SPI
+       depends on PTP_1588_CLOCK_OPTIONAL
        select NET_DSA_TAG_SJA1105
        select PCS_XPCS
        select PACKING
index c6a3abec86f5140e8c411cad03ac3de8a6995d9b..4786f0504691d665126e7641987ecb89b2c44191 100644 (file)
@@ -170,11 +170,11 @@ config AMD_XGBE
        tristate "AMD 10GbE Ethernet driver"
        depends on ((OF_NET && OF_ADDRESS) || ACPI || PCI) && HAS_IOMEM
        depends on X86 || ARM64 || COMPILE_TEST
+       depends on PTP_1588_CLOCK_OPTIONAL
        select BITREVERSE
        select CRC32
        select PHYLIB
        select AMD_XGBE_HAVE_ECC if X86
-       imply PTP_1588_CLOCK
        help
          This driver supports the AMD 10GbE Ethernet device found on an
          AMD SoC.
index 1a02ca600b71d8b0187b41646de7a78a11b79e71..56e0fb07aec7fde44e11ff8c1b9e64ff8e13b83a 100644 (file)
@@ -122,8 +122,8 @@ config SB1250_MAC
 config TIGON3
        tristate "Broadcom Tigon3 support"
        depends on PCI
+       depends on PTP_1588_CLOCK_OPTIONAL
        select PHYLIB
-       imply PTP_1588_CLOCK
        help
          This driver supports Broadcom Tigon3 based gigabit Ethernet cards.
 
@@ -140,7 +140,7 @@ config TIGON3_HWMON
 config BNX2X
        tristate "Broadcom NetXtremeII 10Gb support"
        depends on PCI
-       imply PTP_1588_CLOCK
+       depends on PTP_1588_CLOCK_OPTIONAL
        select FW_LOADER
        select ZLIB_INFLATE
        select LIBCRC32C
@@ -206,7 +206,7 @@ config SYSTEMPORT
 config BNXT
        tristate "Broadcom NetXtreme-C/E support"
        depends on PCI
-       imply PTP_1588_CLOCK
+       depends on PTP_1588_CLOCK_OPTIONAL
        select FW_LOADER
        select LIBCRC32C
        select NET_DEVLINK
index e432a68ac520131ceb4aed3e2a50058a587d4b2d..5b2a461dfd28c387c84211ab97f199dbc3bf8521 100644 (file)
@@ -22,6 +22,7 @@ if NET_VENDOR_CADENCE
 config MACB
        tristate "Cadence MACB/GEM support"
        depends on HAS_DMA && COMMON_CLK
+       depends on PTP_1588_CLOCK_OPTIONAL
        select PHYLINK
        select CRC32
        help
index 4875cdae622eaee128dc30d6eb09be3f46a4c9d1..1c76c95b0b275f88110b9995f78dd270ffc87a1d 100644 (file)
@@ -66,7 +66,7 @@ config LIQUIDIO
        tristate "Cavium LiquidIO support"
        depends on 64BIT && PCI
        depends on PCI
-       imply PTP_1588_CLOCK
+       depends on PTP_1588_CLOCK_OPTIONAL
        select FW_LOADER
        select LIBCRC32C
        select NET_DEVLINK
@@ -91,7 +91,7 @@ config OCTEON_MGMT_ETHERNET
 config LIQUIDIO_VF
        tristate "Cavium LiquidIO VF support"
        depends on 64BIT && PCI_MSI
-       imply PTP_1588_CLOCK
+       depends on PTP_1588_CLOCK_OPTIONAL
        help
          This driver supports Cavium LiquidIO Intelligent Server Adapter
          based on CN23XX chips.
index 8ba0e08e5e640cf50813350b4997bd0488063040..c931ec8cac4061fb1669db0d69ed6b92e3fb3fbc 100644 (file)
@@ -69,6 +69,7 @@ config CHELSIO_T3
 config CHELSIO_T4
        tristate "Chelsio Communications T4/T5/T6 Ethernet support"
        depends on PCI && (IPV6 || IPV6=n) && (TLS || TLS=n)
+       depends on PTP_1588_CLOCK_OPTIONAL
        select FW_LOADER
        select MDIO
        select ZLIB_DEFLATE
index 2d1abdd58fab6faebd78fd174d3b124dd5599793..e04e1c5cb0133c48899c53db79a2c9a7124a5673 100644 (file)
@@ -25,10 +25,10 @@ config FEC
        depends on (M523x || M527x || M5272 || M528x || M520x || M532x || \
                   ARCH_MXC || SOC_IMX28 || COMPILE_TEST)
        default ARCH_MXC || SOC_IMX28 if ARM
+       depends on PTP_1588_CLOCK_OPTIONAL
        select CRC32
        select PHYLIB
        imply NET_SELFTESTS
-       imply PTP_1588_CLOCK
        help
          Say Y here if you want to use the built-in 10/100 Fast ethernet
          controller on some Motorola ColdFire and Freescale i.MX processors.
index 2ba0e7bd34666c72924a915463a425ada8acabc7..3312e1d93c3b5120d4fccb087369caf415679cc0 100644 (file)
@@ -104,7 +104,7 @@ config HNS3_HCLGE
        tristate "Hisilicon HNS3 HCLGE Acceleration Engine & Compatibility Layer Support"
        default m
        depends on PCI_MSI
-       imply PTP_1588_CLOCK
+       depends on PTP_1588_CLOCK_OPTIONAL
        help
          This selects the HNS3_HCLGE network acceleration engine & its hardware
          compatibility layer. The engine would be used in Hisilicon hip08 family of
index 82744a7501c73f032767627a8466a1fe123417a9..b0b6f90deb7d099346454824a7c03aafb6fbfef8 100644 (file)
@@ -58,8 +58,8 @@ config E1000
 config E1000E
        tristate "Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support"
        depends on PCI && (!SPARC32 || BROKEN)
+       depends on PTP_1588_CLOCK_OPTIONAL
        select CRC32
-       imply PTP_1588_CLOCK
        help
          This driver supports the PCI-Express Intel(R) PRO/1000 gigabit
          ethernet family of adapters. For PCI or PCI-X e1000 adapters,
@@ -87,7 +87,7 @@ config E1000E_HWTS
 config IGB
        tristate "Intel(R) 82575/82576 PCI-Express Gigabit Ethernet support"
        depends on PCI
-       imply PTP_1588_CLOCK
+       depends on PTP_1588_CLOCK_OPTIONAL
        select I2C
        select I2C_ALGOBIT
        help
@@ -159,9 +159,9 @@ config IXGB
 config IXGBE
        tristate "Intel(R) 10GbE PCI Express adapters support"
        depends on PCI
+       depends on PTP_1588_CLOCK_OPTIONAL
        select MDIO
        select PHYLIB
-       imply PTP_1588_CLOCK
        help
          This driver supports Intel(R) 10GbE PCI Express family of
          adapters.  For more information on how to identify your adapter, go
@@ -239,7 +239,7 @@ config IXGBEVF_IPSEC
 
 config I40E
        tristate "Intel(R) Ethernet Controller XL710 Family support"
-       imply PTP_1588_CLOCK
+       depends on PTP_1588_CLOCK_OPTIONAL
        depends on PCI
        select AUXILIARY_BUS
        help
@@ -295,11 +295,11 @@ config ICE
        tristate "Intel(R) Ethernet Connection E800 Series Support"
        default n
        depends on PCI_MSI
+       depends on PTP_1588_CLOCK_OPTIONAL
        select AUXILIARY_BUS
        select DIMLIB
        select NET_DEVLINK
        select PLDMFW
-       imply PTP_1588_CLOCK
        help
          This driver supports Intel(R) Ethernet Connection E800 Series of
          devices.  For more information on how to identify your adapter, go
@@ -317,7 +317,7 @@ config FM10K
        tristate "Intel(R) FM10000 Ethernet Switch Host Interface Support"
        default n
        depends on PCI_MSI
-       imply PTP_1588_CLOCK
+       depends on PTP_1588_CLOCK_OPTIONAL
        help
          This driver supports Intel(R) FM10000 Ethernet Switch Host
          Interface.  For more information on how to identify your adapter,
index 16caa02095feaa98ac2e707a86e6171e05035b2b..2aa0ae8abfbb3413f9f77b3f640a3107bad6aae8 100644 (file)
@@ -12,6 +12,7 @@ config OCTEONTX2_AF
        select NET_DEVLINK
        depends on (64BIT && COMPILE_TEST) || ARM64
        depends on PCI
+       depends on PTP_1588_CLOCK_OPTIONAL
        help
          This driver supports Marvell's OcteonTX2 Resource Virtualization
          Unit's admin function manager which manages all RVU HW resources
@@ -32,6 +33,7 @@ config OCTEONTX2_PF
        select OCTEONTX2_MBOX
        depends on (64BIT && COMPILE_TEST) || ARM64
        depends on PCI
+       depends on PTP_1588_CLOCK_OPTIONAL
        help
          This driver supports Marvell's OcteonTX2 NIC physical function.
 
index 400e611ba04155b242cda6dcf1f68fbd8b9a5a83..1b4b1f642317441cbd6c6c2e708cf80d2fc63e7c 100644 (file)
@@ -6,8 +6,8 @@
 config MLX4_EN
        tristate "Mellanox Technologies 1/10/40Gbit Ethernet support"
        depends on PCI && NETDEVICES && ETHERNET && INET
+       depends on PTP_1588_CLOCK_OPTIONAL
        select MLX4_CORE
-       imply PTP_1588_CLOCK
        help
          This driver supports Mellanox Technologies ConnectX Ethernet
          devices.
index e1a5a79e27c779dec65123b183c52b13471e89b0..92056452a9e3dbffeafb1fa447611cf25c49e8be 100644 (file)
@@ -10,7 +10,7 @@ config MLX5_CORE
        select NET_DEVLINK
        depends on VXLAN || !VXLAN
        depends on MLXFW || !MLXFW
-       depends on PTP_1588_CLOCK || !PTP_1588_CLOCK
+       depends on PTP_1588_CLOCK_OPTIONAL
        depends on PCI_HYPERV_INTERFACE || !PCI_HYPERV_INTERFACE
        help
          Core driver for low level functionality of the ConnectX-4 and
index 12871c8dc7c16ee3fce54d6d1ee92c28309cabab..d1ae248e125c7e9140ea1545433ab17dea89d2b4 100644 (file)
@@ -58,10 +58,10 @@ config MLXSW_SPECTRUM
        depends on NET_IPGRE || NET_IPGRE=n
        depends on IPV6_GRE || IPV6_GRE=n
        depends on VXLAN || VXLAN=n
+       depends on PTP_1588_CLOCK_OPTIONAL
        select GENERIC_ALLOCATOR
        select PARMAN
        select OBJAGG
-       imply PTP_1588_CLOCK
        select NET_PTP_CLASSIFY if PTP_1588_CLOCK
        default m
        help
index d54aa164c4e945092512d02eef3af2bf3c760bda..735eea1dacf1f56761067bc5b101609821087317 100644 (file)
@@ -45,6 +45,7 @@ config ENCX24J600
 config LAN743X
        tristate "LAN743x support"
        depends on PCI
+       depends on PTP_1588_CLOCK_OPTIONAL
        select PHYLIB
        select CRC16
        select CRC32
index 2d3157e4d0816437380891ce68e076b6197390cf..b1d68e19725880f6953d1f9e894a8969d9630adb 100644 (file)
@@ -24,6 +24,7 @@ config MSCC_OCELOT_SWITCH_LIB
 
 config MSCC_OCELOT_SWITCH
        tristate "Ocelot switch driver"
+       depends on PTP_1588_CLOCK_OPTIONAL
        depends on BRIDGE || BRIDGE=n
        depends on NET_SWITCHDEV
        depends on HAS_IOMEM
index af84f72bf08e479e4e9c3bc11ba0952ea58f9041..4e18b64dceb9a56b23adad2e01b2dce17c6fcf53 100644 (file)
@@ -6,6 +6,7 @@
 config PCH_GBE
        tristate "OKI SEMICONDUCTOR IOH(ML7223/ML7831) GbE"
        depends on PCI && (X86_32 || COMPILE_TEST)
+       depends on PTP_1588_CLOCK
        select MII
        select PTP_1588_CLOCK_PCH
        select NET_PTP_CLASSIFY
index 202973a82712ea5a1ed45f9b90d914d1513e0e4b..3f7519e435b81378f6197fa6e5f79c8e0c51f9bf 100644 (file)
@@ -20,7 +20,7 @@ if NET_VENDOR_PENSANDO
 config IONIC
        tristate "Pensando Ethernet IONIC Support"
        depends on 64BIT && PCI
-       depends on PTP_1588_CLOCK || !PTP_1588_CLOCK
+       depends on PTP_1588_CLOCK_OPTIONAL
        select NET_DEVLINK
        select DIMLIB
        help
index 98f430905ffa8f8208a1d2ee0d2ac34cb5dd948a..1203353238e59f75a593cf3bb2db1ff11006f3c3 100644 (file)
@@ -99,7 +99,7 @@ config QED_SRIOV
 config QEDE
        tristate "QLogic QED 25/40/100Gb Ethernet NIC"
        depends on QED
-       imply PTP_1588_CLOCK
+       depends on PTP_1588_CLOCK_OPTIONAL
        help
          This enables the support for Marvell FastLinQ adapters family,
          ethernet driver.
index 5a2a4af3181267be584e77b198fbab6d3b4f50a7..8008b2f45934d5f9da379e0c2e2e1044e50acb8e 100644 (file)
@@ -32,11 +32,11 @@ config SH_ETH
 config RAVB
        tristate "Renesas Ethernet AVB support"
        depends on ARCH_RENESAS || COMPILE_TEST
+       depends on PTP_1588_CLOCK_OPTIONAL
        select CRC32
        select MII
        select MDIO_BITBANG
        select PHYLIB
-       imply PTP_1588_CLOCK
        help
          Renesas Ethernet AVB device driver.
          This driver supports the following SoCs:
index 0582e110b1c016f2f249e099aa87acc79164da7d..2a6c2658d28428207d94d8bd8c5e9fdd7bd2279f 100644 (file)
@@ -20,9 +20,9 @@ if NET_VENDOR_SAMSUNG
 config SXGBE_ETH
        tristate "Samsung 10G/2.5G/1G SXGBE Ethernet driver"
        depends on HAS_IOMEM && HAS_DMA
+       depends on PTP_1588_CLOCK_OPTIONAL
        select PHYLIB
        select CRC32
-       imply PTP_1588_CLOCK
        help
          This is the driver for the SXGBE 10G Ethernet IP block found on
          Samsung platforms.
index 5e37c83137253d2994f5ec4d867d7f88518a4cc4..97ce64079855b6fd04c993957cbca460ad529e72 100644 (file)
@@ -19,9 +19,9 @@ if NET_VENDOR_SOLARFLARE
 config SFC
        tristate "Solarflare SFC9000/SFC9100/EF100-family support"
        depends on PCI
+       depends on PTP_1588_CLOCK_OPTIONAL
        select MDIO
        select CRC32
-       imply PTP_1588_CLOCK
        help
          This driver supports 10/40-gigabit Ethernet cards based on
          the Solarflare SFC9000-family and SFC9100-family controllers.
index ac3c248d4f9bc82f4c5c660944f38ce2663157ad..929cfc22cd0cf08ef3e37ee858b8a2c42eb32526 100644 (file)
@@ -2,12 +2,12 @@
 config STMMAC_ETH
        tristate "STMicroelectronics Multi-Gigabit Ethernet driver"
        depends on HAS_IOMEM && HAS_DMA
+       depends on PTP_1588_CLOCK_OPTIONAL
        select MII
        select PCS_XPCS
        select PAGE_POOL
        select PHYLINK
        select CRC32
-       imply PTP_1588_CLOCK
        select RESET_CONTROLLER
        help
          This is the driver for the Ethernet IPs built around a
index 7564ae0c1997f70d9df16ed844047010fc050044..902495afcb3810c83bbdbb4f76639369a770ef48 100644 (file)
@@ -236,6 +236,7 @@ config MICROCHIP_T1_PHY
 config MICROSEMI_PHY
        tristate "Microsemi PHYs"
        depends on MACSEC || MACSEC=n
+       depends on PTP_1588_CLOCK_OPTIONAL || !NETWORK_PHY_TIMESTAMPING
        select CRYPTO_LIB_AES if MACSEC
        help
          Currently supports VSC8514, VSC8530, VSC8531, VSC8540 and VSC8541 PHYs
@@ -253,6 +254,7 @@ config NATIONAL_PHY
 
 config NXP_C45_TJA11XX_PHY
        tristate "NXP C45 TJA11XX PHYs"
+       depends on PTP_1588_CLOCK_OPTIONAL
        help
          Enable support for NXP C45 TJA11XX PHYs.
          Currently supports only the TJA1103 PHY.
index 8b08745e1ca157127579f5ac318ee92759ca17cb..e82b4a678acbc05becf2de6941b836e7531fe908 100644 (file)
@@ -8,6 +8,7 @@ menu "PTP clock support"
 config PTP_1588_CLOCK
        tristate "PTP clock support"
        depends on NET && POSIX_TIMERS
+       default ETHERNET
        select PPS
        select NET_PTP_CLASSIFY
        help
@@ -26,6 +27,18 @@ config PTP_1588_CLOCK
          To compile this driver as a module, choose M here: the module
          will be called ptp.
 
+config PTP_1588_CLOCK_OPTIONAL
+       tristate
+       default y if PTP_1588_CLOCK=n
+       default PTP_1588_CLOCK
+       help
+         Drivers that can optionally use the PTP_1588_CLOCK framework
+         should depend on this symbol to prevent them from being built
+         into vmlinux while the PTP support itself is in a loadable
+         module.
+         If PTP support is disabled, this dependency will still be
+         met, and drivers refer to dummy helpers.
+
 config PTP_1588_CLOCK_DTE
        tristate "Broadcom DTE as PTP clock"
        depends on PTP_1588_CLOCK
@@ -91,7 +104,7 @@ config PTP_1588_CLOCK_PCH
        tristate "Intel PCH EG20T as PTP clock"
        depends on X86_32 || COMPILE_TEST
        depends on HAS_IOMEM && NET
-       imply PTP_1588_CLOCK
+       depends on PTP_1588_CLOCK
        help
          This driver adds support for using the PCH EG20T as a PTP
          clock. The hardware supports time stamping of PTP packets
index e0f87c57749a33c39c6e82a8d2413c8487dd250c..baee0379482bc7761885ca18d2d681a41077ab30 100644 (file)
@@ -149,6 +149,7 @@ void ptp_vclock_unregister(struct ptp_vclock *vclock)
        kfree(vclock);
 }
 
+#if IS_BUILTIN(CONFIG_PTP_1588_CLOCK)
 int ptp_get_vclocks_index(int pclock_index, int **vclock_index)
 {
        char name[PTP_CLOCK_NAME_LEN] = "";
@@ -217,3 +218,4 @@ void ptp_convert_timestamp(struct skb_shared_hwtstamps *hwtstamps,
        hwtstamps->hwtstamp = ns_to_ktime(ns);
 }
 EXPORT_SYMBOL(ptp_convert_timestamp);
+#endif
index 8b0deece9758b8d6bdd0d02dd0b56cb3278bebc9..63c8a0f3cd0cc11af4896e04291105fd78c47a79 100644 (file)
@@ -2,6 +2,7 @@
 config SCSI_CXGB4_ISCSI
        tristate "Chelsio T4 iSCSI support"
        depends on PCI && INET && (IPV6 || IPV6=n)
+       depends on PTP_1588_CLOCK_OPTIONAL
        depends on THERMAL || !THERMAL
        depends on ETHERNET
        depends on TLS || TLS=n
index 71fac923772582e8619ff834c5b472204413d660..2e5565067355b98f64a9523199a7114f70b82b93 100644 (file)
@@ -215,7 +215,7 @@ static inline long scaled_ppm_to_ppb(long ppm)
        return (long)ppb;
 }
 
-#if IS_REACHABLE(CONFIG_PTP_1588_CLOCK)
+#if IS_ENABLED(CONFIG_PTP_1588_CLOCK)
 
 /**
  * ptp_clock_register() - register a PTP hardware clock driver
@@ -307,6 +307,33 @@ int ptp_schedule_worker(struct ptp_clock *ptp, unsigned long delay);
  */
 void ptp_cancel_worker_sync(struct ptp_clock *ptp);
 
+#else
+static inline struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
+                                                  struct device *parent)
+{ return NULL; }
+static inline int ptp_clock_unregister(struct ptp_clock *ptp)
+{ return 0; }
+static inline void ptp_clock_event(struct ptp_clock *ptp,
+                                  struct ptp_clock_event *event)
+{ }
+static inline int ptp_clock_index(struct ptp_clock *ptp)
+{ return -1; }
+static inline int ptp_find_pin(struct ptp_clock *ptp,
+                              enum ptp_pin_function func, unsigned int chan)
+{ return -1; }
+static inline int ptp_schedule_worker(struct ptp_clock *ptp,
+                                     unsigned long delay)
+{ return -EOPNOTSUPP; }
+static inline void ptp_cancel_worker_sync(struct ptp_clock *ptp)
+{ }
+#endif
+
+#if IS_BUILTIN(CONFIG_PTP_1588_CLOCK)
+/*
+ * These are called by the network core, and don't work if PTP is in
+ * a loadable module.
+ */
+
 /**
  * ptp_get_vclocks_index() - get all vclocks index on pclock, and
  *                           caller is responsible to free memory
@@ -327,26 +354,7 @@ int ptp_get_vclocks_index(int pclock_index, int **vclock_index);
  */
 void ptp_convert_timestamp(struct skb_shared_hwtstamps *hwtstamps,
                           int vclock_index);
-
 #else
-static inline struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
-                                                  struct device *parent)
-{ return NULL; }
-static inline int ptp_clock_unregister(struct ptp_clock *ptp)
-{ return 0; }
-static inline void ptp_clock_event(struct ptp_clock *ptp,
-                                  struct ptp_clock_event *event)
-{ }
-static inline int ptp_clock_index(struct ptp_clock *ptp)
-{ return -1; }
-static inline int ptp_find_pin(struct ptp_clock *ptp,
-                              enum ptp_pin_function func, unsigned int chan)
-{ return -1; }
-static inline int ptp_schedule_worker(struct ptp_clock *ptp,
-                                     unsigned long delay)
-{ return -EOPNOTSUPP; }
-static inline void ptp_cancel_worker_sync(struct ptp_clock *ptp)
-{ }
 static inline int ptp_get_vclocks_index(int pclock_index, int **vclock_index)
 { return 0; }
 static inline void ptp_convert_timestamp(struct skb_shared_hwtstamps *hwtstamps,