linux/drivers/net
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
..
appletalk docs updates for v5.10-rc1 2020-10-16 15:02:21 -07:00
arcnet
bonding bonding: wait for sysfs kobject destruction before freeing struct slave 2020-11-21 13:07:00 -08:00
caif caif_virtio: Remove redundant initialization of variable err 2020-10-01 18:46:16 -07:00
can can: m_can: process interrupt only when not runtime suspended 2020-11-18 16:37:32 +01:00
dsa net: dsa: mv88e6xxx: Wait for EEPROM done after HW reset 2020-11-18 11:24:44 -08:00
ethernet enetc: Let the hardware auto-advance the taprio base-time of 0 2020-11-25 12:36:27 -08:00
fddi fddi/skfp: Avoid the use of one-element array 2020-09-29 13:27:43 -07:00
fjes
hamradio drivers: net: hamradio: fix document location 2020-10-15 07:49:47 +02:00
hippi
hyperv hyperv-next for 5.10 2020-10-14 10:32:10 -07:00
ieee802154 genetlink: move to smaller ops wherever possible 2020-10-02 19:11:11 -07:00
ipa net: ipa: lock when freeing transaction 2020-11-16 17:32:22 -08:00
ipvlan
mdio net: phy: Move of_mdio from drivers/of to drivers/net/mdio 2020-10-10 10:55:05 -07:00
netdevsim netdevsim: set .owner to THIS_MODULE 2020-11-17 14:08:59 -08:00
pcs net: pcs-xpcs: depend on MDIO_BUS instead of selecting it 2020-10-16 16:54:11 -07:00
phy net: phy: smsc: add missed clk_disable_unprepare in smsc_phy_probe() 2020-11-14 11:21:13 -08:00
plip
ppp
slip
team Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2020-10-05 18:40:01 -07:00
usb usbnet: ipheth: fix connectivity with iOS 14 2020-11-21 14:01:34 -08:00
vmxnet3 vmxnet3: fix cksum offload issues for non-udp tunnels 2020-09-25 16:41:40 -07:00
wan cosa: Add missing kfree in error path of cosa_write 2020-11-11 17:52:01 -08:00
wimax
wireguard
wireless iwlwifi: mvm: fix kernel panic in case of assert during CSA 2020-11-10 20:45:36 +02:00
xen-netback xen/netback: use lateeoi irq binding 2020-10-20 10:22:03 +02:00
bareudp.c bareudp: use dev_sw_netstats_rx_add() 2020-10-06 06:23:21 -07:00
dummy.c
eql.c
geneve.c ip_tunnels: Set tunnel option flag when tunnel metadata is present 2020-11-13 16:58:10 -08:00
gtp.c gtp: fix an use-before-init in gtp_newlink() 2020-10-29 09:43:21 -07:00
ifb.c
Kconfig
LICENSE.SRC
loopback.c
macsec.c net: macsec: use new function dev_fetch_sw_netstats 2020-10-13 17:33:48 -07:00
macvlan.c
macvtap.c
Makefile
mdio.c
mii.c
net_failover.c
netconsole.c
nlmon.c
ntb_netdev.c
rionet.c
sb1000.c
Space.c
sungem_phy.c
tap.c
thunderbolt.c
tun.c tun: honor IOCB_NOWAIT flag 2020-11-21 15:19:08 -08:00
veth.c bpf: Add redirect_peer helper 2020-10-11 10:21:04 -07:00
virtio_net.c Revert "virtio-net: ethtool configurable RXCSUM" 2020-10-21 20:33:19 -07:00
vrf.c vrf: Fix fast path output packet handling with async Netfilter rules 2020-11-12 07:47:06 -08:00
vsockmon.c
vxlan.c vxlan: use dev_sw_netstats_rx_add() 2020-10-06 06:23:21 -07:00
xen-netfront.c