Hardware timestamp configuration fails with EOPNOTSUPP on BCMGENET interfaces connected to a timestamp-capable PHY. On a Raspberry Pi CM4, "hwstamp_ctl -i eth0 -t 1 -r 12" fails with "SIOCSHWTSTAMP failed: Operation not supported", preventing ptp4l from using hardware timestamping. Commit 5062245a5a7f ("net: remove legacy way to get/set HW timestamp config") removed the legacy ioctl fallback, assuming that all MAC drivers supporting hardware timestamping implement ndo_hwtstamp_get() and ndo_hwtstamp_set(), even when timestamping is provided only by an attached PHY. BCMGENET does not implement these callbacks, so the core rejects timestamp configuration requests before they reach the PHY. Add ndo_hwtstamp_get() and ndo_hwtstamp_set() callbacks so the core can dispatch timestamp configuration requests through its phylib helpers. Both callbacks return -EOPNOTSUPP because the MAC itself does not support hardware timestamping; requests for the PHY are handled by the core without invoking these callbacks. Fixes: 5062245a5a7f ("net: remove legacy way to get/set HW timestamp config") Assisted-by: LLM Signed-off-by: James Clark --- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c index a2305e642..8ead37ff9 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -3712,6 +3712,19 @@ static int bcmgenet_change_carrier(struct net_device *dev, bool new_carrier) return 0; } +static int bcmgenet_hwtstamp_get(struct net_device *dev, + struct kernel_hwtstamp_config *cfg) +{ + return -EOPNOTSUPP; +} + +static int bcmgenet_hwtstamp_set(struct net_device *dev, + struct kernel_hwtstamp_config *cfg, + struct netlink_ext_ack *extack) +{ + return -EOPNOTSUPP; +} + static const struct net_device_ops bcmgenet_netdev_ops = { .ndo_open = bcmgenet_open, .ndo_stop = bcmgenet_close, @@ -3723,6 +3736,8 @@ static const struct net_device_ops bcmgenet_netdev_ops = { .ndo_set_features = bcmgenet_set_features, .ndo_get_stats64 = bcmgenet_get_stats64, .ndo_change_carrier = bcmgenet_change_carrier, + .ndo_hwtstamp_get = bcmgenet_hwtstamp_get, + .ndo_hwtstamp_set = bcmgenet_hwtstamp_set, }; /* GENET hardware parameters/characteristics */ -- 2.55.0