net: mscc: ocelot: don't keep PTP configuration of all ports in single structure
authorVladimir Oltean <vladimir.oltean@nxp.com>
Tue, 27 Jun 2023 16:31:13 +0000 (19:31 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 Jul 2023 14:22:01 +0000 (16:22 +0200)
commite9dda2b68cb9f21b2518937fc6a6c76c4a86f88f
tree7575307f90236b882fc584de63ffccea8163a4ed
parent7826202689af8d5547d8712e2e2badff0d9165ad
net: mscc: ocelot: don't keep PTP configuration of all ports in single structure

[ Upstream commit 45d0fcb5bc9558d0bf3d2fa7fabc5d8a88d35439 ]

In a future change, the driver will need to determine whether PTP RX
timestamping is enabled on a port (including whether traps were set up
on that port in particular) and that is currently not possible.

The driver supports different RX filters (L2, L4) and kinds of TX
timestamping (one-step, two-step) on its ports, but it saves all
configuration in a single struct hwtstamp_config that is global to the
switch. So, the latest timestamping configuration on one port
(including a request to disable timestamping) affects what gets reported
for all ports, even though the configuration itself is still individual
to each port.

The port timestamping configurations are only coupled because of the
common structure, so replace the hwtstamp_config with a mask of trapped
protocols saved per port. We also have the ptp_cmd to distinguish
between one-step and two-step PTP timestamping, so with those 2 bits of
information we can fully reconstruct a descriptive struct
hwtstamp_config for each port, during the SIOCGHWTSTAMP ioctl.

Fixes: 4e3b0468e6d7 ("net: mscc: PTP Hardware Clock (PHC) support")
Fixes: 96ca08c05838 ("net: mscc: ocelot: set up traps for PTP packets")
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/mscc/ocelot.c
drivers/net/ethernet/mscc/ocelot_ptp.c
include/soc/mscc/ocelot.h