mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	enetc: add get_ts_info interface for ethtool
This patch is to add get_ts_info interface for ethtool to support getting timestamping capability. Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									d398231219
								
							
						
					
					
						commit
						41514737ec
					
				
					 3 changed files with 39 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -209,6 +209,9 @@ struct enetc_msg_cmd_set_primary_mac {
 | 
			
		|||
 | 
			
		||||
#define ENETC_CBDR_TIMEOUT	1000 /* usecs */
 | 
			
		||||
 | 
			
		||||
/* PTP driver exports */
 | 
			
		||||
extern int enetc_phc_index;
 | 
			
		||||
 | 
			
		||||
/* SI common */
 | 
			
		||||
int enetc_pci_probe(struct pci_dev *pdev, const char *name, int sizeof_priv);
 | 
			
		||||
void enetc_pci_remove(struct pci_dev *pdev);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -555,6 +555,35 @@ static void enetc_get_ringparam(struct net_device *ndev,
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int enetc_get_ts_info(struct net_device *ndev,
 | 
			
		||||
			     struct ethtool_ts_info *info)
 | 
			
		||||
{
 | 
			
		||||
	int *phc_idx;
 | 
			
		||||
 | 
			
		||||
	phc_idx = symbol_get(enetc_phc_index);
 | 
			
		||||
	if (phc_idx) {
 | 
			
		||||
		info->phc_index = *phc_idx;
 | 
			
		||||
		symbol_put(enetc_phc_index);
 | 
			
		||||
	} else {
 | 
			
		||||
		info->phc_index = -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_FSL_ENETC_HW_TIMESTAMPING
 | 
			
		||||
	info->so_timestamping = SOF_TIMESTAMPING_TX_HARDWARE |
 | 
			
		||||
				SOF_TIMESTAMPING_RX_HARDWARE |
 | 
			
		||||
				SOF_TIMESTAMPING_RAW_HARDWARE;
 | 
			
		||||
 | 
			
		||||
	info->tx_types = (1 << HWTSTAMP_TX_OFF) |
 | 
			
		||||
			 (1 << HWTSTAMP_TX_ON);
 | 
			
		||||
	info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
 | 
			
		||||
			   (1 << HWTSTAMP_FILTER_ALL);
 | 
			
		||||
#else
 | 
			
		||||
	info->so_timestamping = SOF_TIMESTAMPING_RX_SOFTWARE |
 | 
			
		||||
				SOF_TIMESTAMPING_SOFTWARE;
 | 
			
		||||
#endif
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct ethtool_ops enetc_pf_ethtool_ops = {
 | 
			
		||||
	.get_regs_len = enetc_get_reglen,
 | 
			
		||||
	.get_regs = enetc_get_regs,
 | 
			
		||||
| 
						 | 
				
			
			@ -571,6 +600,7 @@ static const struct ethtool_ops enetc_pf_ethtool_ops = {
 | 
			
		|||
	.get_link_ksettings = phy_ethtool_get_link_ksettings,
 | 
			
		||||
	.set_link_ksettings = phy_ethtool_set_link_ksettings,
 | 
			
		||||
	.get_link = ethtool_op_get_link,
 | 
			
		||||
	.get_ts_info = enetc_get_ts_info,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static const struct ethtool_ops enetc_vf_ethtool_ops = {
 | 
			
		||||
| 
						 | 
				
			
			@ -586,6 +616,7 @@ static const struct ethtool_ops enetc_vf_ethtool_ops = {
 | 
			
		|||
	.set_rxfh = enetc_set_rxfh,
 | 
			
		||||
	.get_ringparam = enetc_get_ringparam,
 | 
			
		||||
	.get_link = ethtool_op_get_link,
 | 
			
		||||
	.get_ts_info = enetc_get_ts_info,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void enetc_set_ethtool_ops(struct net_device *ndev)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,9 @@
 | 
			
		|||
 | 
			
		||||
#include "enetc.h"
 | 
			
		||||
 | 
			
		||||
int enetc_phc_index = -1;
 | 
			
		||||
EXPORT_SYMBOL(enetc_phc_index);
 | 
			
		||||
 | 
			
		||||
static struct ptp_clock_info enetc_ptp_caps = {
 | 
			
		||||
	.owner		= THIS_MODULE,
 | 
			
		||||
	.name		= "ENETC PTP clock",
 | 
			
		||||
| 
						 | 
				
			
			@ -96,6 +99,7 @@ static int enetc_ptp_probe(struct pci_dev *pdev,
 | 
			
		|||
	if (err)
 | 
			
		||||
		goto err_no_clock;
 | 
			
		||||
 | 
			
		||||
	enetc_phc_index = ptp_qoriq->phc_index;
 | 
			
		||||
	pci_set_drvdata(pdev, ptp_qoriq);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -119,6 +123,7 @@ static void enetc_ptp_remove(struct pci_dev *pdev)
 | 
			
		|||
{
 | 
			
		||||
	struct ptp_qoriq *ptp_qoriq = pci_get_drvdata(pdev);
 | 
			
		||||
 | 
			
		||||
	enetc_phc_index = -1;
 | 
			
		||||
	ptp_qoriq_free(ptp_qoriq);
 | 
			
		||||
	kfree(ptp_qoriq);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue