diff options
Diffstat (limited to 'drivers/net/dsa')
| -rw-r--r-- | drivers/net/dsa/mv88e6xxx/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/net/dsa/mv88e6xxx/chip.c | 4 | ||||
| -rw-r--r-- | drivers/net/dsa/ocelot/felix.c | 1 | ||||
| -rw-r--r-- | drivers/net/dsa/ocelot/felix.h | 1 | ||||
| -rw-r--r-- | drivers/net/dsa/ocelot/felix_vsc9959.c | 1 | ||||
| -rw-r--r-- | drivers/net/dsa/sja1105/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/net/dsa/sja1105/sja1105_ptp.c | 26 | 
7 files changed, 23 insertions, 13 deletions
| diff --git a/drivers/net/dsa/mv88e6xxx/Kconfig b/drivers/net/dsa/mv88e6xxx/Kconfig index 6435020d690d..51185e4d7d15 100644 --- a/drivers/net/dsa/mv88e6xxx/Kconfig +++ b/drivers/net/dsa/mv88e6xxx/Kconfig @@ -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. diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c index dd8a5666a584..2b4a723c8306 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.c +++ b/drivers/net/dsa/mv88e6xxx/chip.c @@ -3962,7 +3962,6 @@ static const struct mv88e6xxx_ops mv88e6190_ops = {  	.serdes_get_stats = mv88e6390_serdes_get_stats,  	.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,  	.serdes_get_regs = mv88e6390_serdes_get_regs, -	.phylink_validate = mv88e6390_phylink_validate,  	.gpio_ops = &mv88e6352_gpio_ops,  	.phylink_validate = mv88e6390_phylink_validate,  }; @@ -4021,7 +4020,6 @@ static const struct mv88e6xxx_ops mv88e6190x_ops = {  	.serdes_get_stats = mv88e6390_serdes_get_stats,  	.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,  	.serdes_get_regs = mv88e6390_serdes_get_regs, -	.phylink_validate = mv88e6390_phylink_validate,  	.gpio_ops = &mv88e6352_gpio_ops,  	.phylink_validate = mv88e6390x_phylink_validate,  }; @@ -4079,7 +4077,6 @@ static const struct mv88e6xxx_ops mv88e6191_ops = {  	.serdes_get_stats = mv88e6390_serdes_get_stats,  	.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,  	.serdes_get_regs = mv88e6390_serdes_get_regs, -	.phylink_validate = mv88e6390_phylink_validate,  	.avb_ops = &mv88e6390_avb_ops,  	.ptp_ops = &mv88e6352_ptp_ops,  	.phylink_validate = mv88e6390_phylink_validate, @@ -4235,7 +4232,6 @@ static const struct mv88e6xxx_ops mv88e6290_ops = {  	.serdes_get_stats = mv88e6390_serdes_get_stats,  	.serdes_get_regs_len = mv88e6390_serdes_get_regs_len,  	.serdes_get_regs = mv88e6390_serdes_get_regs, -	.phylink_validate = mv88e6390_phylink_validate,  	.gpio_ops = &mv88e6352_gpio_ops,  	.avb_ops = &mv88e6390_avb_ops,  	.ptp_ops = &mv88e6352_ptp_ops, diff --git a/drivers/net/dsa/ocelot/felix.c b/drivers/net/dsa/ocelot/felix.c index d0a3764ff0cf..e2c6bf0e430e 100644 --- a/drivers/net/dsa/ocelot/felix.c +++ b/drivers/net/dsa/ocelot/felix.c @@ -400,6 +400,7 @@ static int felix_init_structs(struct felix *felix, int num_phys_ports)  	ocelot->stats_layout	= felix->info->stats_layout;  	ocelot->num_stats	= felix->info->num_stats;  	ocelot->shared_queue_sz	= felix->info->shared_queue_sz; +	ocelot->num_mact_rows	= felix->info->num_mact_rows;  	ocelot->vcap_is2_keys	= felix->info->vcap_is2_keys;  	ocelot->vcap_is2_actions= felix->info->vcap_is2_actions;  	ocelot->vcap		= felix->info->vcap; diff --git a/drivers/net/dsa/ocelot/felix.h b/drivers/net/dsa/ocelot/felix.h index 82d46f260041..9af106513e53 100644 --- a/drivers/net/dsa/ocelot/felix.h +++ b/drivers/net/dsa/ocelot/felix.h @@ -15,6 +15,7 @@ struct felix_info {  	const u32 *const		*map;  	const struct ocelot_ops		*ops;  	int				shared_queue_sz; +	int				num_mact_rows;  	const struct ocelot_stat_layout	*stats_layout;  	unsigned int			num_stats;  	int				num_ports; diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c b/drivers/net/dsa/ocelot/felix_vsc9959.c index b4078f3c5c38..8bf395f12b47 100644 --- a/drivers/net/dsa/ocelot/felix_vsc9959.c +++ b/drivers/net/dsa/ocelot/felix_vsc9959.c @@ -1220,6 +1220,7 @@ struct felix_info felix_info_vsc9959 = {  	.vcap_is2_actions	= vsc9959_vcap_is2_actions,  	.vcap			= vsc9959_vcap_props,  	.shared_queue_sz	= 128 * 1024, +	.num_mact_rows		= 2048,  	.num_ports		= 6,  	.switch_pci_bar		= 4,  	.imdio_pci_bar		= 0, diff --git a/drivers/net/dsa/sja1105/Kconfig b/drivers/net/dsa/sja1105/Kconfig index 0fe1ae173aa1..68c3086af9af 100644 --- a/drivers/net/dsa/sja1105/Kconfig +++ b/drivers/net/dsa/sja1105/Kconfig @@ -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. diff --git a/drivers/net/dsa/sja1105/sja1105_ptp.c b/drivers/net/dsa/sja1105/sja1105_ptp.c index a22f8e3fc06b..bc0e47c1dbb9 100644 --- a/drivers/net/dsa/sja1105/sja1105_ptp.c +++ b/drivers/net/dsa/sja1105/sja1105_ptp.c @@ -16,14 +16,15 @@  /* PTPSYNCTS has no interrupt or update mechanism, because the intended   * hardware use case is for the timestamp to be collected synchronously, - * immediately after the CAS_MASTER SJA1105 switch has triggered a CASSYNC - * pulse on the PTP_CLK pin. When used as a generic extts source, it needs - * polling and a comparison with the old value. The polling interval is just - * the Nyquist rate of a canonical PPS input (e.g. from a GPS module). - * Anything of higher frequency than 1 Hz will be lost, since there is no - * timestamp FIFO. + * immediately after the CAS_MASTER SJA1105 switch has performed a CASSYNC + * one-shot toggle (no return to level) on the PTP_CLK pin. When used as a + * generic extts source, the PTPSYNCTS register needs polling and a comparison + * with the old value. The polling interval is configured as the Nyquist rate + * of a signal with 50% duty cycle and 1Hz frequency, which is sadly all that + * this hardware can do (but may be enough for some setups). Anything of higher + * frequency than 1 Hz will be lost, since there is no timestamp FIFO.   */ -#define SJA1105_EXTTS_INTERVAL		(HZ / 2) +#define SJA1105_EXTTS_INTERVAL		(HZ / 4)  /*            This range is actually +/- SJA1105_MAX_ADJ_PPB   *            divided by 1000 (ppb -> ppm) and with a 16-bit @@ -754,7 +755,16 @@ static int sja1105_extts_enable(struct sja1105_private *priv,  		return -EOPNOTSUPP;  	/* Reject requests with unsupported flags */ -	if (extts->flags) +	if (extts->flags & ~(PTP_ENABLE_FEATURE | +			     PTP_RISING_EDGE | +			     PTP_FALLING_EDGE | +			     PTP_STRICT_FLAGS)) +		return -EOPNOTSUPP; + +	/* We can only enable time stamping on both edges, sadly. */ +	if ((extts->flags & PTP_STRICT_FLAGS) && +	    (extts->flags & PTP_ENABLE_FEATURE) && +	    (extts->flags & PTP_EXTTS_EDGES) != PTP_EXTTS_EDGES)  		return -EOPNOTSUPP;  	rc = sja1105_change_ptp_clk_pin_func(priv, PTP_PF_EXTTS); |