Re: [PATCH net] net: bcmgenet: add hwtstamp callbacks to restore PHY timestamping

Nicolai Buchwitz <[email protected]>
Newsgroups org.kernel.vger.netdev,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
Hi James

On 18.9.2026 05:01, James Clark wrote:
> 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.

I've tested with and without your patch and can reproduce the issue / 
fix.
IMHO the commit message should mention that 'get' isn't restored - it 
was
already broken as the legacy path through phy_mii_ioctl() only handled
SIOCSHWTSTAMP.

> 
> Fixes: 5062245a5a7f ("net: remove legacy way to get/set HW timestamp 
> config")
> Assisted-by: LLM
> Signed-off-by: James Clark <[email protected]>
> ---
>  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;
> +}

The check that rejects the request is in dev_set_hwtstamp():

         if (!ops->ndo_hwtstamp_set)
                 return -EOPNOTSUPP;

It runs before dev_set_hwtstamp_phylib() checks 
phy_is_default_hwtstamp()
and nothing about this is specific to bcmgenet. Personally, I think this 
should
be better handled by the core than adding -EOPNOTSUPP stubs to the 
drivers.

I will send a patch for this.

> +
>  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 */

Thanks,
Nicolai
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.