]> git.baikalelectronics.ru Git - kernel.git/commit
net: dsa: make dsa_master_ioctl() see through port_hwtstamp_get() shims
authorVladimir Oltean <vladimir.oltean@nxp.com>
Fri, 11 Nov 2022 21:10:20 +0000 (23:10 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 14 Nov 2022 11:30:49 +0000 (11:30 +0000)
commitdd215c5e90a7746782e4932f7a00205ca6e173fa
tree76a7f87a3ed437f2aee334b3f697231ad8a7ca05
parent16a57d0fdf0ba729274eb6a91d9208b91a82d746
net: dsa: make dsa_master_ioctl() see through port_hwtstamp_get() shims

There are multi-generational drivers like mv88e6xxx which have code like
this:

int mv88e6xxx_port_hwtstamp_get(struct dsa_switch *ds, int port,
struct ifreq *ifr)
{
if (!chip->info->ptp_support)
return -EOPNOTSUPP;

...
}

DSA wants to deny PTP timestamping on the master if the switch supports
timestamping too. However it currently relies on the presence of the
port_hwtstamp_get() callback to determine PTP capability, and this
clearly does not work in that case (method is present but returns
-EOPNOTSUPP).

We should not deny PTP on the DSA master for those switches which truly
do not support hardware timestamping.

Create a dsa_port_supports_hwtstamp() method which actually probes for
support by calling port_hwtstamp_get() and seeing whether that returned
-EOPNOTSUPP or not.

Fixes: fbf7f20f4e27 ("net: dsa: Deny PTP on master if switch supports it")
Link: https://patchwork.kernel.org/project/netdevbpf/patch/20221110124345.3901389-1-festevam@gmail.com/
Reported-by: Fabio Estevam <festevam@gmail.com>
Reported-by: Steffen Bätz <steffen@innosonix.de>
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Tested-by: Fabio Estevam <festevam@denx.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/dsa/dsa_priv.h
net/dsa/master.c
net/dsa/port.c