gianfar: Support the get_ts_info ethtool method.
Signed-off-by: Richard Cochran <richardcochran@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
7dff349988
Коммит
6663628729
|
@ -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,
|
||||||
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 = {
|
||||||
#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)
|
||||||
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)
|
||||||
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);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче