Commit 66636287 authored by Richard Cochran's avatar Richard Cochran Committed by David S. Miller

gianfar: Support the get_ts_info ethtool method.

Signed-off-by: default avatarRichard Cochran <richardcochran@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7dff3499
...@@ -1210,4 +1210,7 @@ struct filer_table { ...@@ -1210,4 +1210,7 @@ struct filer_table {
struct gfar_filer_entry fe[MAX_FILER_CACHE_IDX + 20]; struct gfar_filer_entry fe[MAX_FILER_CACHE_IDX + 20];
}; };
/* The gianfar_ptp module will set this variable */
extern int gfar_phc_index;
#endif /* __GIANFAR_H */ #endif /* __GIANFAR_H */
...@@ -1739,6 +1739,34 @@ static int gfar_get_nfc(struct net_device *dev, struct ethtool_rxnfc *cmd, ...@@ -1739,6 +1739,34 @@ static int gfar_get_nfc(struct net_device *dev, struct ethtool_rxnfc *cmd,
return ret; return ret;
} }
int gfar_phc_index = -1;
static int gfar_get_ts_info(struct net_device *dev,
struct ethtool_ts_info *info)
{
struct gfar_private *priv = netdev_priv(dev);
if (!(priv->device_flags & FSL_GIANFAR_DEV_HAS_TIMER)) {
info->so_timestamping =
SOF_TIMESTAMPING_RX_SOFTWARE |
SOF_TIMESTAMPING_SOFTWARE;
info->phc_index = -1;
return 0;
}
info->so_timestamping =
SOF_TIMESTAMPING_TX_HARDWARE |
SOF_TIMESTAMPING_RX_HARDWARE |
SOF_TIMESTAMPING_RAW_HARDWARE;
info->phc_index = gfar_phc_index;
info->tx_types =
(1 << HWTSTAMP_TX_OFF) |
(1 << HWTSTAMP_TX_ON);
info->rx_filters =
(1 << HWTSTAMP_FILTER_NONE) |
(1 << HWTSTAMP_FILTER_ALL);
return 0;
}
const struct ethtool_ops gfar_ethtool_ops = { const struct ethtool_ops gfar_ethtool_ops = {
.get_settings = gfar_gsettings, .get_settings = gfar_gsettings,
.set_settings = gfar_ssettings, .set_settings = gfar_ssettings,
...@@ -1761,4 +1789,5 @@ const struct ethtool_ops gfar_ethtool_ops = { ...@@ -1761,4 +1789,5 @@ const struct ethtool_ops gfar_ethtool_ops = {
#endif #endif
.set_rxnfc = gfar_set_nfc, .set_rxnfc = gfar_set_nfc,
.get_rxnfc = gfar_get_nfc, .get_rxnfc = gfar_get_nfc,
.get_ts_info = gfar_get_ts_info,
}; };
...@@ -515,6 +515,7 @@ static int gianfar_ptp_probe(struct platform_device *dev) ...@@ -515,6 +515,7 @@ static int gianfar_ptp_probe(struct platform_device *dev)
err = PTR_ERR(etsects->clock); err = PTR_ERR(etsects->clock);
goto no_clock; goto no_clock;
} }
gfar_phc_clock = ptp_clock_index(etsects->clock);
dev_set_drvdata(&dev->dev, etsects); dev_set_drvdata(&dev->dev, etsects);
...@@ -538,6 +539,7 @@ static int gianfar_ptp_remove(struct platform_device *dev) ...@@ -538,6 +539,7 @@ static int gianfar_ptp_remove(struct platform_device *dev)
gfar_write(&etsects->regs->tmr_temask, 0); gfar_write(&etsects->regs->tmr_temask, 0);
gfar_write(&etsects->regs->tmr_ctrl, 0); gfar_write(&etsects->regs->tmr_ctrl, 0);
gfar_phc_clock = -1;
ptp_clock_unregister(etsects->clock); ptp_clock_unregister(etsects->clock);
iounmap(etsects->regs); iounmap(etsects->regs);
release_resource(etsects->rsrc); release_resource(etsects->rsrc);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment