Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

gianfar: Support the get_ts_info ethtool method.

parent 7dff3499
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1210,4 +1210,7 @@ struct filer_table {
	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 */
+29 −0
Original line number Diff line number Diff line
@@ -1739,6 +1739,34 @@ static int gfar_get_nfc(struct net_device *dev, struct ethtool_rxnfc *cmd,
	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 = {
	.get_settings = gfar_gsettings,
	.set_settings = gfar_ssettings,
@@ -1761,4 +1789,5 @@ const struct ethtool_ops gfar_ethtool_ops = {
#endif
	.set_rxnfc = gfar_set_nfc,
	.get_rxnfc = gfar_get_nfc,
	.get_ts_info = gfar_get_ts_info,
};
+2 −0
Original line number Diff line number Diff line
@@ -515,6 +515,7 @@ static int gianfar_ptp_probe(struct platform_device *dev)
		err = PTR_ERR(etsects->clock);
		goto no_clock;
	}
	gfar_phc_clock = ptp_clock_index(etsects->clock);

	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_ctrl,   0);

	gfar_phc_clock = -1;
	ptp_clock_unregister(etsects->clock);
	iounmap(etsects->regs);
	release_resource(etsects->rsrc);