1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01:00
linux/drivers/net/ethernet/freescale
Vladimir Oltean 90cf87d16b enetc: Let the hardware auto-advance the taprio base-time of 0
The tc-taprio base time indicates the beginning of the tc-taprio
schedule, which is cyclic by definition (where the length of the cycle
in nanoseconds is called the cycle time). The base time is a 64-bit PTP
time in the TAI domain.

Logically, the base-time should be a future time. But that imposes some
restrictions to user space, which has to retrieve the current PTP time
from the NIC first, then calculate a base time that will still be larger
than the base time by the time the kernel driver programs this value
into the hardware. Actually ensuring that the programmed base time is in
the future is still a problem even if the kernel alone deals with this.

Luckily, the enetc hardware already advances a base-time that is in the
past into a congruent time in the immediate future, according to the
same formula that can be found in the software implementation of taprio
(in taprio_get_start_time):

	/* Schedule the start time for the beginning of the next
	 * cycle.
	 */
	n = div64_s64(ktime_sub_ns(now, base), cycle);
	*start = ktime_add_ns(base, (n + 1) * cycle);

There's only one problem: the driver doesn't let the hardware do that.
It interferes with the base-time passed from user space, by special-casing
the situation when the base-time is zero, and replaces that with the
current PTP time. This changes the intended effective base-time of the
schedule, which will in the end have a different phase offset than if
the base-time of 0.000000000 was to be advanced by an integer multiple
of the cycle-time.

Fixes: 34c6adf197 ("enetc: Configure the Time-Aware Scheduler via tc-taprio offload")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Link: https://lore.kernel.org/r/20201124220259.3027991-1-vladimir.oltean@nxp.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2020-11-25 12:36:27 -08:00
..
dpaa dpaa_eth: fix the RX headroom size alignment 2020-11-02 11:21:31 -08:00
dpaa2 dpaa2-eth: Fix compile error due to missing devlink support 2020-11-24 14:57:55 -08:00
enetc enetc: Let the hardware auto-advance the taprio base-time of 0 2020-11-25 12:36:27 -08:00
fman drivers/net/ethernet: clean up mis-targeted comments 2020-09-25 16:29:00 -07:00
fs_enet fs_enet: Avoid comma separated statements 2020-08-25 07:54:19 -07:00
fec.h net: fec: fix MDIO probing for some FEC hardware blocks 2020-10-30 08:24:12 -07:00
fec_main.c net: fec: Fix reference count leak in fec series ops 2020-11-16 09:37:01 -08:00
fec_mpc52xx.c net: fec_mpc52xx: Replace in_interrupt() usage 2020-09-29 14:02:54 -07:00
fec_mpc52xx.h drivers/net: fix up stale paths from driver reorg 2012-01-30 12:54:40 -05:00
fec_mpc52xx_phy.c mdio: Move allocation of interrupts into core 2016-01-07 14:31:26 -05:00
fec_ptp.c drivers/net/ethernet: clean up mis-targeted comments 2020-09-25 16:29:00 -07:00
fsl_pq_mdio.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
gianfar.c gianfar: Account for Tx PTP timestamp in the skb headroom 2020-10-30 09:36:01 -07:00
gianfar.h net/freescale: Clean drivers from static versions 2020-03-03 17:54:55 -08:00
gianfar_ethtool.c net: gianfar: reject unsupported coalescing params 2020-03-12 11:32:35 -07:00
Kconfig treewide: replace '---help---' in Kconfig files with 'help' 2020-06-14 01:57:21 +09:00
Makefile net: dsa: felix: fix link error 2020-01-08 16:05:54 -08:00
ucc_geth.c net: ucc_geth: Drop extraneous parentheses in comparison 2020-10-23 18:44:06 -07:00
ucc_geth.h net/freescale: Clean drivers from static versions 2020-03-03 17:54:55 -08:00
ucc_geth_ethtool.c net/freescale: Don't set zero if FW not-available in ucc_geth 2020-03-03 17:54:55 -08:00
xgmac_mdio.c net/fsl: quieten expected MDIO access failures 2020-09-24 20:13:26 -07:00