ptp_clock: Allow for it to be optional
authorNicolas Pitre <nicolas.pitre@linaro.org>
Fri, 11 Nov 2016 05:10:07 +0000 (00:10 -0500)
committerThomas Gleixner <tglx@linutronix.de>
Wed, 16 Nov 2016 08:26:34 +0000 (09:26 +0100)
In order to break the hard dependency between the PTP clock subsystem and
ethernet drivers capable of being clock providers, this patch provides
simple PTP stub functions to allow linkage of those drivers into the
kernel even when the PTP subsystem is configured out. Drivers must be
ready to accept NULL from ptp_clock_register() in that case.

And to make it possible for PTP to be configured out, the select statement
in those driver's Kconfig menu entries is converted to the new "imply"
statement. This way the PTP subsystem may have Kconfig dependencies of
its own, such as POSIX_TIMERS, without having to make those ethernet
drivers unavailable if POSIX timers are cconfigured out. And when support
for POSIX timers is selected again then the default config option for PTP
clock support will automatically be adjusted accordingly.

The pch_gbe driver is a bit special as it relies on extra code in
drivers/ptp/ptp_pch.c. Therefore we let the make process descend into
drivers/ptp/ even if PTP_1588_CLOCK is unselected.

Signed-off-by: Nicolas Pitre <nico@linaro.org>
Acked-by: Richard Cochran <richardcochran@gmail.com>
Acked-by: Edward Cree <ecree@solarflare.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: John Stultz <john.stultz@linaro.org>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Cc: Paul Bolle <pebolle@tiscali.nl>
Cc: linux-kbuild@vger.kernel.org
Cc: netdev@vger.kernel.org
Cc: Michal Marek <mmarek@suse.com>
Link: http://lkml.kernel.org/r/1478841010-28605-4-git-send-email-nicolas.pitre@linaro.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
18 files changed:
drivers/Makefile
drivers/net/ethernet/adi/Kconfig
drivers/net/ethernet/amd/Kconfig
drivers/net/ethernet/amd/xgbe/xgbe-main.c
drivers/net/ethernet/broadcom/Kconfig
drivers/net/ethernet/cavium/Kconfig
drivers/net/ethernet/freescale/Kconfig
drivers/net/ethernet/intel/Kconfig
drivers/net/ethernet/mellanox/mlx4/Kconfig
drivers/net/ethernet/mellanox/mlx5/core/Kconfig
drivers/net/ethernet/renesas/Kconfig
drivers/net/ethernet/samsung/Kconfig
drivers/net/ethernet/sfc/Kconfig
drivers/net/ethernet/stmicro/stmmac/Kconfig
drivers/net/ethernet/ti/Kconfig
drivers/net/ethernet/tile/Kconfig
drivers/ptp/Kconfig
include/linux/ptp_clock_kernel.h

index 194d20bee7dce40070964fa2343bc19ea946d627..060026a02f59246362aa9be2adb95b1304efe710 100644 (file)
@@ -107,7 +107,7 @@ obj-$(CONFIG_INPUT)         += input/
 obj-$(CONFIG_RTC_LIB)          += rtc/
 obj-y                          += i2c/ media/
 obj-$(CONFIG_PPS)              += pps/
-obj-$(CONFIG_PTP_1588_CLOCK)   += ptp/
+obj-y                          += ptp/
 obj-$(CONFIG_W1)               += w1/
 obj-y                          += power/
 obj-$(CONFIG_HWMON)            += hwmon/
index 6b94ba610399544a80ca0a58b0fae6ebddf5f11a..98cc8f535021ab9a2c96661fdb3c307250d29f34 100644 (file)
@@ -58,7 +58,7 @@ config BFIN_RX_DESC_NUM
 config BFIN_MAC_USE_HWSTAMP
        bool "Use IEEE 1588 hwstamp"
        depends on BFIN_MAC && BF518
-       select PTP_1588_CLOCK
+       imply PTP_1588_CLOCK
        default y
        ---help---
          To support the IEEE 1588 Precision Time Protocol (PTP), select y here
index 0038709fd317d83ca8f4226cab3357673c25565f..713ea7ad22c3c7e9af151ce6aca3f9f031d0b09d 100644 (file)
@@ -177,7 +177,7 @@ config AMD_XGBE
        depends on ARM64 || COMPILE_TEST
        select BITREVERSE
        select CRC32
-       select PTP_1588_CLOCK
+       imply PTP_1588_CLOCK
        ---help---
          This driver supports the AMD 10GbE Ethernet device found on an
          AMD SoC.
index 9de078819aa676525d4fae65a6a47e3df448dc1e..e10e569c0d5fb8a1f549501f3ba41c23d005120e 100644 (file)
@@ -773,7 +773,8 @@ static int xgbe_probe(struct platform_device *pdev)
                goto err_wq;
        }
 
-       xgbe_ptp_register(pdata);
+       if (IS_REACHABLE(CONFIG_PTP_1588_CLOCK))
+               xgbe_ptp_register(pdata);
 
        xgbe_debugfs_init(pdata);
 
@@ -812,7 +813,8 @@ static int xgbe_remove(struct platform_device *pdev)
 
        xgbe_debugfs_exit(pdata);
 
-       xgbe_ptp_unregister(pdata);
+       if (IS_REACHABLE(CONFIG_PTP_1588_CLOCK))
+               xgbe_ptp_unregister(pdata);
 
        flush_workqueue(pdata->an_workqueue);
        destroy_workqueue(pdata->an_workqueue);
index bd8c80c0b71cc0c8d5ef6db689e5dffa62f4bd5b..6a8d74aeb69f688eba315b698bfc66f88afe0683 100644 (file)
@@ -110,7 +110,7 @@ config TIGON3
        depends on PCI
        select PHYLIB
        select HWMON
-       select PTP_1588_CLOCK
+       imply PTP_1588_CLOCK
        ---help---
          This driver supports Broadcom Tigon3 based gigabit Ethernet cards.
 
@@ -120,7 +120,7 @@ config TIGON3
 config BNX2X
        tristate "Broadcom NetXtremeII 10Gb support"
        depends on PCI
-       select PTP_1588_CLOCK
+       imply PTP_1588_CLOCK
        select FW_LOADER
        select ZLIB_INFLATE
        select LIBCRC32C
index 92f411c9f0df0da3e827d2ae571f15d2a357410f..2e64a966617a73453e02caabdc45b3e413a7051c 100644 (file)
@@ -53,7 +53,7 @@ config        THUNDER_NIC_RGX
 config LIQUIDIO
        tristate "Cavium LiquidIO support"
        depends on 64BIT
-       select PTP_1588_CLOCK
+       imply PTP_1588_CLOCK
        select FW_LOADER
        select LIBCRC32C
        ---help---
index d1ca45fbb1645f6490841d549c0202098dad9fab..5eb9280973fb59b8da1411c62c82a293d85efe51 100644 (file)
@@ -25,7 +25,7 @@ config FEC
                   ARCH_MXC || SOC_IMX28)
        default ARCH_MXC || SOC_IMX28 if ARM
        select PHYLIB
-       select PTP_1588_CLOCK
+       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 c0e17433f62380cdde9a5fc84d21a1b1164e23f3..1349b45f014dd1d5ce29fa9a9f38189bca2cbe3d 100644 (file)
@@ -58,7 +58,7 @@ config E1000E
        tristate "Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support"
        depends on PCI && (!SPARC32 || BROKEN)
        select CRC32
-       select PTP_1588_CLOCK
+       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,
@@ -83,7 +83,7 @@ config E1000E_HWTS
 config IGB
        tristate "Intel(R) 82575/82576 PCI-Express Gigabit Ethernet support"
        depends on PCI
-       select PTP_1588_CLOCK
+       imply PTP_1588_CLOCK
        select I2C
        select I2C_ALGOBIT
        ---help---
@@ -156,7 +156,7 @@ config IXGBE
        tristate "Intel(R) 10GbE PCI Express adapters support"
        depends on PCI
        select MDIO
-       select PTP_1588_CLOCK
+       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
@@ -213,7 +213,7 @@ config IXGBEVF
 
 config I40E
        tristate "Intel(R) Ethernet Controller XL710 Family support"
-       select PTP_1588_CLOCK
+       imply PTP_1588_CLOCK
        depends on PCI
        ---help---
          This driver supports Intel(R) Ethernet Controller XL710 Family of
@@ -264,7 +264,7 @@ config FM10K
        tristate "Intel(R) FM10000 Ethernet Switch Host Interface Support"
        default n
        depends on PCI_MSI
-       select PTP_1588_CLOCK
+       imply PTP_1588_CLOCK
        ---help---
          This driver supports Intel(R) FM10000 Ethernet Switch Host
          Interface.  For more information on how to identify your adapter,
index 5098e7f21987c85bd82ce0c68403893290b7c706..22b1cc012bc927a9482325d0c313d65e5f9e2f0f 100644 (file)
@@ -7,7 +7,7 @@ config MLX4_EN
        depends on MAY_USE_DEVLINK
        depends on PCI
        select MLX4_CORE
-       select PTP_1588_CLOCK
+       imply PTP_1588_CLOCK
        ---help---
          This driver supports Mellanox Technologies ConnectX Ethernet
          devices.
index aae46884bf93c949325e4bba26316cb9f69e078a..2cd841590e709915bfbcf45f1b5b389e600d41b3 100644 (file)
@@ -14,7 +14,7 @@ config MLX5_CORE
 config MLX5_CORE_EN
        bool "Mellanox Technologies ConnectX-4 Ethernet support"
        depends on NETDEVICES && ETHERNET && PCI && MLX5_CORE
-       select PTP_1588_CLOCK
+       imply PTP_1588_CLOCK
        default n
        ---help---
          Ethernet support in Mellanox Technologies ConnectX-4 NIC.
index 85ec447c2d183ebc44eda3a3642cae8579cdffb7..27be51f0a421b43e191e594bdb6ebcd753b65eef 100644 (file)
@@ -37,7 +37,7 @@ config RAVB
        select MII
        select MDIO_BITBANG
        select PHYLIB
-       select PTP_1588_CLOCK
+       imply PTP_1588_CLOCK
        help
          Renesas Ethernet AVB device driver.
          This driver supports the following SoCs:
index 2360d81507774aa772f8a6b5bb94f9d0345d64ce..fbd5e06654c6fe938a571f14d4194d48399b169c 100644 (file)
@@ -21,7 +21,7 @@ config SXGBE_ETH
        depends on HAS_IOMEM && HAS_DMA
        select PHYLIB
        select CRC32
-       select PTP_1588_CLOCK
+       imply PTP_1588_CLOCK
        ---help---
          This is the driver for the SXGBE 10G Ethernet IP block found on
          Samsung platforms.
index 4dd92b7b80f41d2e2c0591f9d3930a24ed6325be..83f4766a1da07ff8e56249300a0273652361125c 100644 (file)
@@ -5,7 +5,7 @@ config SFC
        select CRC32
        select I2C
        select I2C_ALGOBIT
-       select PTP_1588_CLOCK
+       imply PTP_1588_CLOCK
        ---help---
          This driver supports 10/40-gigabit Ethernet cards based on
          the Solarflare SFC4000, SFC9000-family and SFC9100-family
index 3818c5e06ebac5099f8051c813222349a2f6a6a5..139c85fa6a4d3421618f0f5610b9dfdd508630a7 100644 (file)
@@ -4,7 +4,7 @@ config STMMAC_ETH
        select MII
        select PHYLIB
        select CRC32
-       select PTP_1588_CLOCK
+       imply PTP_1588_CLOCK
        select RESET_CONTROLLER
        ---help---
          This is the driver for the Ethernet IPs are built around a
index 9904d740d528aa4c4c7756a8002a15f035b431ed..61b835a7e6ae719fe4dc697848ff0d6b5a6e3d89 100644 (file)
@@ -76,7 +76,7 @@ config TI_CPSW
 config TI_CPTS
        bool "TI Common Platform Time Sync (CPTS) Support"
        depends on TI_CPSW
-       select PTP_1588_CLOCK
+       imply PTP_1588_CLOCK
        ---help---
          This driver supports the Common Platform Time Sync unit of
          the CPSW Ethernet Switch. The unit can time stamp PTP UDP/IPv4
index f59a6c265331b159521b45e57c5f9ccdbdf98d70..bdfeaf3d4fce01927a1a2d657ee95c970d36df98 100644 (file)
@@ -9,7 +9,7 @@ config TILE_NET
        select CRC32
        select TILE_GXIO_MPIPE if TILEGX
        select HIGH_RES_TIMERS if TILEGX
-       select PTP_1588_CLOCK if TILEGX
+       imply PTP_1588_CLOCK if TILEGX
        ---help---
          This is a standard Linux network device driver for the
          on-chip Tilera Gigabit Ethernet and XAUI interfaces.
index ee3de3421f2dc3c06b4a5a1886b516e1e825039e..0f7492f8ea2353a74d368a923fc5490823d66bce 100644 (file)
@@ -28,7 +28,7 @@ config PTP_1588_CLOCK
 config PTP_1588_CLOCK_GIANFAR
        tristate "Freescale eTSEC as PTP clock"
        depends on GIANFAR
-       select PTP_1588_CLOCK
+       depends on PTP_1588_CLOCK
        default y
        help
          This driver adds support for using the eTSEC as a PTP
@@ -42,7 +42,7 @@ config PTP_1588_CLOCK_GIANFAR
 config PTP_1588_CLOCK_IXP46X
        tristate "Intel IXP46x as PTP clock"
        depends on IXP4XX_ETH
-       select PTP_1588_CLOCK
+       depends on PTP_1588_CLOCK
        default y
        help
          This driver adds support for using the IXP46X as a PTP
@@ -60,7 +60,7 @@ config DP83640_PHY
        tristate "Driver for the National Semiconductor DP83640 PHYTER"
        depends on NETWORK_PHY_TIMESTAMPING
        depends on PHYLIB
-       select PTP_1588_CLOCK
+       depends on PTP_1588_CLOCK
        ---help---
          Supports the DP83640 PHYTER with IEEE 1588 features.
 
@@ -76,7 +76,7 @@ config PTP_1588_CLOCK_PCH
        tristate "Intel PCH EG20T as PTP clock"
        depends on X86_32 || COMPILE_TEST
        depends on HAS_IOMEM && NET
-       select PTP_1588_CLOCK
+       imply 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 5ad54fc66cf0f589aa9eca3275683e56e7650107..96699526d342ecc03f8eb020f9c00b6e9d820d7a 100644 (file)
@@ -122,30 +122,6 @@ struct ptp_clock_info {
 
 struct ptp_clock;
 
-/**
- * ptp_clock_register() - register a PTP hardware clock driver
- *
- * @info:   Structure describing the new clock.
- * @parent: Pointer to the parent device of the new clock.
- *
- * Returns a valid pointer on success or PTR_ERR on failure.  If PHC
- * support is missing at the configuration level, this function
- * returns NULL, and drivers are expected to gracefully handle that
- * case separately.
- */
-
-extern struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
-                                           struct device *parent);
-
-/**
- * ptp_clock_unregister() - unregister a PTP hardware clock driver
- *
- * @ptp:  The clock to remove from service.
- */
-
-extern int ptp_clock_unregister(struct ptp_clock *ptp);
-
-
 enum ptp_clock_events {
        PTP_CLOCK_ALARM,
        PTP_CLOCK_EXTTS,
@@ -171,6 +147,31 @@ struct ptp_clock_event {
        };
 };
 
+#if IS_REACHABLE(CONFIG_PTP_1588_CLOCK)
+
+/**
+ * ptp_clock_register() - register a PTP hardware clock driver
+ *
+ * @info:   Structure describing the new clock.
+ * @parent: Pointer to the parent device of the new clock.
+ *
+ * Returns a valid pointer on success or PTR_ERR on failure.  If PHC
+ * support is missing at the configuration level, this function
+ * returns NULL, and drivers are expected to gracefully handle that
+ * case separately.
+ */
+
+extern struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
+                                           struct device *parent);
+
+/**
+ * ptp_clock_unregister() - unregister a PTP hardware clock driver
+ *
+ * @ptp:  The clock to remove from service.
+ */
+
+extern int ptp_clock_unregister(struct ptp_clock *ptp);
+
 /**
  * ptp_clock_event() - notify the PTP layer about an event
  *
@@ -202,4 +203,20 @@ extern int ptp_clock_index(struct ptp_clock *ptp);
 int ptp_find_pin(struct ptp_clock *ptp,
                 enum ptp_pin_function func, unsigned int chan);
 
+#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; }
+#endif
+
 #endif