> -----Original Message----- > From: Richard Cochran <richardcoch...@gmail.com> > Sent: Monday, July 27, 2020 10:29 PM > To: Ooi, Joyce <joyce....@intel.com> > Cc: Thor Thayer <thor.tha...@linux.intel.com>; David S . Miller > <da...@davemloft.net>; Jakub Kicinski <k...@kernel.org>; > netdev@vger.kernel.org; linux-ker...@vger.kernel.org; Dalon Westergreen > <dalon.westergr...@linux.intel.com>; Tan, Ley Foon > <ley.foon....@intel.com>; See, Chin Liang <chin.liang....@intel.com>; > Nguyen, Dinh <dinh.ngu...@intel.com>; Westergreen, Dalon > <dalon.westergr...@intel.com> > Subject: Re: [PATCH v5 08/10] net: eth: altera: add support for ptp and > timestamping > > On Mon, Jul 27, 2020 at 05:21:55PM +0800, Ooi, Joyce wrote: > > > +/* ioctl to configure timestamping */ static int tse_do_ioctl(struct > > +net_device *dev, struct ifreq *ifr, int cmd) { > > + struct altera_tse_private *priv = netdev_priv(dev); > > + struct hwtstamp_config config; > > + > > + if (!netif_running(dev)) > > + return -EINVAL; > > + > > + if (!priv->has_ptp) { > > + netdev_alert(priv->dev, "Timestamping not supported"); > > + return -EOPNOTSUPP; > > + } > > The user might well have a PHY that supports time stamping. The code must > pass the ioctl through to the PHY even when !priv->has_ptp. Ok, I'll remove 'return -EOPNOTSUPP;' to allow those that have PHY with timestamping support to go pass through ioctl.
> > > + > > + if (!dev->phydev) > > + return -EINVAL; > > + > > + if (!phy_has_hwtstamp(dev->phydev)) { > > + if (cmd == SIOCSHWTSTAMP) { > > + if (copy_from_user(&config, ifr->ifr_data, > > + sizeof(struct hwtstamp_config))) > > + return -EFAULT; > > + > > + if (config.flags) > > + return -EINVAL; > > + > > + switch (config.tx_type) { > > + case HWTSTAMP_TX_OFF: > > + priv->hwts_tx_en = 0; > > + break; > > + case HWTSTAMP_TX_ON: > > + priv->hwts_tx_en = 1; > > + break; > > + default: > > + return -ERANGE; > > + } > > + > > + switch (config.rx_filter) { > > + case HWTSTAMP_FILTER_NONE: > > + priv->hwts_rx_en = 0; > > + config.rx_filter = HWTSTAMP_FILTER_NONE; > > + break; > > + default: > > + priv->hwts_rx_en = 1; > > + config.rx_filter = HWTSTAMP_FILTER_ALL; > > + break; > > + } > > + > > + if (copy_to_user(ifr->ifr_data, &config, > > + sizeof(struct hwtstamp_config))) > > + return -EFAULT; > > + else > > + return 0; > > + } > > + > > + if (cmd == SIOCGHWTSTAMP) { > > + config.flags = 0; > > + > > + if (priv->hwts_tx_en) > > + config.tx_type = HWTSTAMP_TX_ON; > > + else > > + config.tx_type = HWTSTAMP_TX_OFF; > > + > > + if (priv->hwts_rx_en) > > + config.rx_filter = HWTSTAMP_FILTER_ALL; > > + else > > + config.rx_filter = HWTSTAMP_FILTER_NONE; > > + > > + if (copy_to_user(ifr->ifr_data, &config, > > + sizeof(struct hwtstamp_config))) > > + return -EFAULT; > > + else > > + return 0; > > + } > > + } > > + > > + return phy_mii_ioctl(dev->phydev, ifr, cmd); } > > Thanks, > Richard