mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-13 14:24:11 +08:00
ptp_clock: Allow for it to be optional
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>
This commit is contained in:
parent
32ce5ac867
commit
d1cbfd771c
@ -107,7 +107,7 @@ obj-$(CONFIG_INPUT) += input/
|
|||||||
obj-$(CONFIG_RTC_LIB) += rtc/
|
obj-$(CONFIG_RTC_LIB) += rtc/
|
||||||
obj-y += i2c/ media/
|
obj-y += i2c/ media/
|
||||||
obj-$(CONFIG_PPS) += pps/
|
obj-$(CONFIG_PPS) += pps/
|
||||||
obj-$(CONFIG_PTP_1588_CLOCK) += ptp/
|
obj-y += ptp/
|
||||||
obj-$(CONFIG_W1) += w1/
|
obj-$(CONFIG_W1) += w1/
|
||||||
obj-y += power/
|
obj-y += power/
|
||||||
obj-$(CONFIG_HWMON) += hwmon/
|
obj-$(CONFIG_HWMON) += hwmon/
|
||||||
|
@ -58,7 +58,7 @@ config BFIN_RX_DESC_NUM
|
|||||||
config BFIN_MAC_USE_HWSTAMP
|
config BFIN_MAC_USE_HWSTAMP
|
||||||
bool "Use IEEE 1588 hwstamp"
|
bool "Use IEEE 1588 hwstamp"
|
||||||
depends on BFIN_MAC && BF518
|
depends on BFIN_MAC && BF518
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
default y
|
default y
|
||||||
---help---
|
---help---
|
||||||
To support the IEEE 1588 Precision Time Protocol (PTP), select y here
|
To support the IEEE 1588 Precision Time Protocol (PTP), select y here
|
||||||
|
@ -177,7 +177,7 @@ config AMD_XGBE
|
|||||||
depends on ARM64 || COMPILE_TEST
|
depends on ARM64 || COMPILE_TEST
|
||||||
select BITREVERSE
|
select BITREVERSE
|
||||||
select CRC32
|
select CRC32
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
---help---
|
---help---
|
||||||
This driver supports the AMD 10GbE Ethernet device found on an
|
This driver supports the AMD 10GbE Ethernet device found on an
|
||||||
AMD SoC.
|
AMD SoC.
|
||||||
|
@ -773,7 +773,8 @@ static int xgbe_probe(struct platform_device *pdev)
|
|||||||
goto err_wq;
|
goto err_wq;
|
||||||
}
|
}
|
||||||
|
|
||||||
xgbe_ptp_register(pdata);
|
if (IS_REACHABLE(CONFIG_PTP_1588_CLOCK))
|
||||||
|
xgbe_ptp_register(pdata);
|
||||||
|
|
||||||
xgbe_debugfs_init(pdata);
|
xgbe_debugfs_init(pdata);
|
||||||
|
|
||||||
@ -812,7 +813,8 @@ static int xgbe_remove(struct platform_device *pdev)
|
|||||||
|
|
||||||
xgbe_debugfs_exit(pdata);
|
xgbe_debugfs_exit(pdata);
|
||||||
|
|
||||||
xgbe_ptp_unregister(pdata);
|
if (IS_REACHABLE(CONFIG_PTP_1588_CLOCK))
|
||||||
|
xgbe_ptp_unregister(pdata);
|
||||||
|
|
||||||
flush_workqueue(pdata->an_workqueue);
|
flush_workqueue(pdata->an_workqueue);
|
||||||
destroy_workqueue(pdata->an_workqueue);
|
destroy_workqueue(pdata->an_workqueue);
|
||||||
|
@ -110,7 +110,7 @@ config TIGON3
|
|||||||
depends on PCI
|
depends on PCI
|
||||||
select PHYLIB
|
select PHYLIB
|
||||||
select HWMON
|
select HWMON
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
---help---
|
---help---
|
||||||
This driver supports Broadcom Tigon3 based gigabit Ethernet cards.
|
This driver supports Broadcom Tigon3 based gigabit Ethernet cards.
|
||||||
|
|
||||||
@ -120,7 +120,7 @@ config TIGON3
|
|||||||
config BNX2X
|
config BNX2X
|
||||||
tristate "Broadcom NetXtremeII 10Gb support"
|
tristate "Broadcom NetXtremeII 10Gb support"
|
||||||
depends on PCI
|
depends on PCI
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
select FW_LOADER
|
select FW_LOADER
|
||||||
select ZLIB_INFLATE
|
select ZLIB_INFLATE
|
||||||
select LIBCRC32C
|
select LIBCRC32C
|
||||||
|
@ -53,7 +53,7 @@ config THUNDER_NIC_RGX
|
|||||||
config LIQUIDIO
|
config LIQUIDIO
|
||||||
tristate "Cavium LiquidIO support"
|
tristate "Cavium LiquidIO support"
|
||||||
depends on 64BIT
|
depends on 64BIT
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
select FW_LOADER
|
select FW_LOADER
|
||||||
select LIBCRC32C
|
select LIBCRC32C
|
||||||
---help---
|
---help---
|
||||||
|
@ -25,7 +25,7 @@ config FEC
|
|||||||
ARCH_MXC || SOC_IMX28)
|
ARCH_MXC || SOC_IMX28)
|
||||||
default ARCH_MXC || SOC_IMX28 if ARM
|
default ARCH_MXC || SOC_IMX28 if ARM
|
||||||
select PHYLIB
|
select PHYLIB
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
---help---
|
---help---
|
||||||
Say Y here if you want to use the built-in 10/100 Fast ethernet
|
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.
|
controller on some Motorola ColdFire and Freescale i.MX processors.
|
||||||
|
@ -58,7 +58,7 @@ config E1000E
|
|||||||
tristate "Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support"
|
tristate "Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support"
|
||||||
depends on PCI && (!SPARC32 || BROKEN)
|
depends on PCI && (!SPARC32 || BROKEN)
|
||||||
select CRC32
|
select CRC32
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
---help---
|
---help---
|
||||||
This driver supports the PCI-Express Intel(R) PRO/1000 gigabit
|
This driver supports the PCI-Express Intel(R) PRO/1000 gigabit
|
||||||
ethernet family of adapters. For PCI or PCI-X e1000 adapters,
|
ethernet family of adapters. For PCI or PCI-X e1000 adapters,
|
||||||
@ -83,7 +83,7 @@ config E1000E_HWTS
|
|||||||
config IGB
|
config IGB
|
||||||
tristate "Intel(R) 82575/82576 PCI-Express Gigabit Ethernet support"
|
tristate "Intel(R) 82575/82576 PCI-Express Gigabit Ethernet support"
|
||||||
depends on PCI
|
depends on PCI
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
select I2C
|
select I2C
|
||||||
select I2C_ALGOBIT
|
select I2C_ALGOBIT
|
||||||
---help---
|
---help---
|
||||||
@ -156,7 +156,7 @@ config IXGBE
|
|||||||
tristate "Intel(R) 10GbE PCI Express adapters support"
|
tristate "Intel(R) 10GbE PCI Express adapters support"
|
||||||
depends on PCI
|
depends on PCI
|
||||||
select MDIO
|
select MDIO
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
---help---
|
---help---
|
||||||
This driver supports Intel(R) 10GbE PCI Express family of
|
This driver supports Intel(R) 10GbE PCI Express family of
|
||||||
adapters. For more information on how to identify your adapter, go
|
adapters. For more information on how to identify your adapter, go
|
||||||
@ -213,7 +213,7 @@ config IXGBEVF
|
|||||||
|
|
||||||
config I40E
|
config I40E
|
||||||
tristate "Intel(R) Ethernet Controller XL710 Family support"
|
tristate "Intel(R) Ethernet Controller XL710 Family support"
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
depends on PCI
|
depends on PCI
|
||||||
---help---
|
---help---
|
||||||
This driver supports Intel(R) Ethernet Controller XL710 Family of
|
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"
|
tristate "Intel(R) FM10000 Ethernet Switch Host Interface Support"
|
||||||
default n
|
default n
|
||||||
depends on PCI_MSI
|
depends on PCI_MSI
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
---help---
|
---help---
|
||||||
This driver supports Intel(R) FM10000 Ethernet Switch Host
|
This driver supports Intel(R) FM10000 Ethernet Switch Host
|
||||||
Interface. For more information on how to identify your adapter,
|
Interface. For more information on how to identify your adapter,
|
||||||
|
@ -7,7 +7,7 @@ config MLX4_EN
|
|||||||
depends on MAY_USE_DEVLINK
|
depends on MAY_USE_DEVLINK
|
||||||
depends on PCI
|
depends on PCI
|
||||||
select MLX4_CORE
|
select MLX4_CORE
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
---help---
|
---help---
|
||||||
This driver supports Mellanox Technologies ConnectX Ethernet
|
This driver supports Mellanox Technologies ConnectX Ethernet
|
||||||
devices.
|
devices.
|
||||||
|
@ -14,7 +14,7 @@ config MLX5_CORE
|
|||||||
config MLX5_CORE_EN
|
config MLX5_CORE_EN
|
||||||
bool "Mellanox Technologies ConnectX-4 Ethernet support"
|
bool "Mellanox Technologies ConnectX-4 Ethernet support"
|
||||||
depends on NETDEVICES && ETHERNET && PCI && MLX5_CORE
|
depends on NETDEVICES && ETHERNET && PCI && MLX5_CORE
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
default n
|
default n
|
||||||
---help---
|
---help---
|
||||||
Ethernet support in Mellanox Technologies ConnectX-4 NIC.
|
Ethernet support in Mellanox Technologies ConnectX-4 NIC.
|
||||||
|
@ -37,7 +37,7 @@ config RAVB
|
|||||||
select MII
|
select MII
|
||||||
select MDIO_BITBANG
|
select MDIO_BITBANG
|
||||||
select PHYLIB
|
select PHYLIB
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
help
|
help
|
||||||
Renesas Ethernet AVB device driver.
|
Renesas Ethernet AVB device driver.
|
||||||
This driver supports the following SoCs:
|
This driver supports the following SoCs:
|
||||||
|
@ -21,7 +21,7 @@ config SXGBE_ETH
|
|||||||
depends on HAS_IOMEM && HAS_DMA
|
depends on HAS_IOMEM && HAS_DMA
|
||||||
select PHYLIB
|
select PHYLIB
|
||||||
select CRC32
|
select CRC32
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
---help---
|
---help---
|
||||||
This is the driver for the SXGBE 10G Ethernet IP block found on
|
This is the driver for the SXGBE 10G Ethernet IP block found on
|
||||||
Samsung platforms.
|
Samsung platforms.
|
||||||
|
@ -5,7 +5,7 @@ config SFC
|
|||||||
select CRC32
|
select CRC32
|
||||||
select I2C
|
select I2C
|
||||||
select I2C_ALGOBIT
|
select I2C_ALGOBIT
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
---help---
|
---help---
|
||||||
This driver supports 10/40-gigabit Ethernet cards based on
|
This driver supports 10/40-gigabit Ethernet cards based on
|
||||||
the Solarflare SFC4000, SFC9000-family and SFC9100-family
|
the Solarflare SFC4000, SFC9000-family and SFC9100-family
|
||||||
|
@ -4,7 +4,7 @@ config STMMAC_ETH
|
|||||||
select MII
|
select MII
|
||||||
select PHYLIB
|
select PHYLIB
|
||||||
select CRC32
|
select CRC32
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
select RESET_CONTROLLER
|
select RESET_CONTROLLER
|
||||||
---help---
|
---help---
|
||||||
This is the driver for the Ethernet IPs are built around a
|
This is the driver for the Ethernet IPs are built around a
|
||||||
|
@ -76,7 +76,7 @@ config TI_CPSW
|
|||||||
config TI_CPTS
|
config TI_CPTS
|
||||||
bool "TI Common Platform Time Sync (CPTS) Support"
|
bool "TI Common Platform Time Sync (CPTS) Support"
|
||||||
depends on TI_CPSW
|
depends on TI_CPSW
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
---help---
|
---help---
|
||||||
This driver supports the Common Platform Time Sync unit of
|
This driver supports the Common Platform Time Sync unit of
|
||||||
the CPSW Ethernet Switch. The unit can time stamp PTP UDP/IPv4
|
the CPSW Ethernet Switch. The unit can time stamp PTP UDP/IPv4
|
||||||
|
@ -9,7 +9,7 @@ config TILE_NET
|
|||||||
select CRC32
|
select CRC32
|
||||||
select TILE_GXIO_MPIPE if TILEGX
|
select TILE_GXIO_MPIPE if TILEGX
|
||||||
select HIGH_RES_TIMERS if TILEGX
|
select HIGH_RES_TIMERS if TILEGX
|
||||||
select PTP_1588_CLOCK if TILEGX
|
imply PTP_1588_CLOCK if TILEGX
|
||||||
---help---
|
---help---
|
||||||
This is a standard Linux network device driver for the
|
This is a standard Linux network device driver for the
|
||||||
on-chip Tilera Gigabit Ethernet and XAUI interfaces.
|
on-chip Tilera Gigabit Ethernet and XAUI interfaces.
|
||||||
|
@ -28,7 +28,7 @@ config PTP_1588_CLOCK
|
|||||||
config PTP_1588_CLOCK_GIANFAR
|
config PTP_1588_CLOCK_GIANFAR
|
||||||
tristate "Freescale eTSEC as PTP clock"
|
tristate "Freescale eTSEC as PTP clock"
|
||||||
depends on GIANFAR
|
depends on GIANFAR
|
||||||
select PTP_1588_CLOCK
|
depends on PTP_1588_CLOCK
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
This driver adds support for using the eTSEC as a PTP
|
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
|
config PTP_1588_CLOCK_IXP46X
|
||||||
tristate "Intel IXP46x as PTP clock"
|
tristate "Intel IXP46x as PTP clock"
|
||||||
depends on IXP4XX_ETH
|
depends on IXP4XX_ETH
|
||||||
select PTP_1588_CLOCK
|
depends on PTP_1588_CLOCK
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
This driver adds support for using the IXP46X as a PTP
|
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"
|
tristate "Driver for the National Semiconductor DP83640 PHYTER"
|
||||||
depends on NETWORK_PHY_TIMESTAMPING
|
depends on NETWORK_PHY_TIMESTAMPING
|
||||||
depends on PHYLIB
|
depends on PHYLIB
|
||||||
select PTP_1588_CLOCK
|
depends on PTP_1588_CLOCK
|
||||||
---help---
|
---help---
|
||||||
Supports the DP83640 PHYTER with IEEE 1588 features.
|
Supports the DP83640 PHYTER with IEEE 1588 features.
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ config PTP_1588_CLOCK_PCH
|
|||||||
tristate "Intel PCH EG20T as PTP clock"
|
tristate "Intel PCH EG20T as PTP clock"
|
||||||
depends on X86_32 || COMPILE_TEST
|
depends on X86_32 || COMPILE_TEST
|
||||||
depends on HAS_IOMEM && NET
|
depends on HAS_IOMEM && NET
|
||||||
select PTP_1588_CLOCK
|
imply PTP_1588_CLOCK
|
||||||
help
|
help
|
||||||
This driver adds support for using the PCH EG20T as a PTP
|
This driver adds support for using the PCH EG20T as a PTP
|
||||||
clock. The hardware supports time stamping of PTP packets
|
clock. The hardware supports time stamping of PTP packets
|
||||||
|
@ -122,30 +122,6 @@ struct ptp_clock_info {
|
|||||||
|
|
||||||
struct ptp_clock;
|
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 {
|
enum ptp_clock_events {
|
||||||
PTP_CLOCK_ALARM,
|
PTP_CLOCK_ALARM,
|
||||||
PTP_CLOCK_EXTTS,
|
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
|
* 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,
|
int ptp_find_pin(struct ptp_clock *ptp,
|
||||||
enum ptp_pin_function func, unsigned int chan);
|
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
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user