mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-16 13:34:30 +00: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
@ -209,6 +209,9 @@ struct enetc_msg_cmd_set_primary_mac {
|
|||||||
|
|
||||||
#define ENETC_CBDR_TIMEOUT 1000 /* usecs */
|
#define ENETC_CBDR_TIMEOUT 1000 /* usecs */
|
||||||
|
|
||||||
|
/* PTP driver exports */
|
||||||
|
extern int enetc_phc_index;
|
||||||
|
|
||||||
/* SI common */
|
/* SI common */
|
||||||
int enetc_pci_probe(struct pci_dev *pdev, const char *name, int sizeof_priv);
|
int enetc_pci_probe(struct pci_dev *pdev, const char *name, int sizeof_priv);
|
||||||
void enetc_pci_remove(struct pci_dev *pdev);
|
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 = {
|
static const struct ethtool_ops enetc_pf_ethtool_ops = {
|
||||||
.get_regs_len = enetc_get_reglen,
|
.get_regs_len = enetc_get_reglen,
|
||||||
.get_regs = enetc_get_regs,
|
.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,
|
.get_link_ksettings = phy_ethtool_get_link_ksettings,
|
||||||
.set_link_ksettings = phy_ethtool_set_link_ksettings,
|
.set_link_ksettings = phy_ethtool_set_link_ksettings,
|
||||||
.get_link = ethtool_op_get_link,
|
.get_link = ethtool_op_get_link,
|
||||||
|
.get_ts_info = enetc_get_ts_info,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct ethtool_ops enetc_vf_ethtool_ops = {
|
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,
|
.set_rxfh = enetc_set_rxfh,
|
||||||
.get_ringparam = enetc_get_ringparam,
|
.get_ringparam = enetc_get_ringparam,
|
||||||
.get_link = ethtool_op_get_link,
|
.get_link = ethtool_op_get_link,
|
||||||
|
.get_ts_info = enetc_get_ts_info,
|
||||||
};
|
};
|
||||||
|
|
||||||
void enetc_set_ethtool_ops(struct net_device *ndev)
|
void enetc_set_ethtool_ops(struct net_device *ndev)
|
||||||
|
@ -7,6 +7,9 @@
|
|||||||
|
|
||||||
#include "enetc.h"
|
#include "enetc.h"
|
||||||
|
|
||||||
|
int enetc_phc_index = -1;
|
||||||
|
EXPORT_SYMBOL(enetc_phc_index);
|
||||||
|
|
||||||
static struct ptp_clock_info enetc_ptp_caps = {
|
static struct ptp_clock_info enetc_ptp_caps = {
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.name = "ENETC PTP clock",
|
.name = "ENETC PTP clock",
|
||||||
@ -96,6 +99,7 @@ static int enetc_ptp_probe(struct pci_dev *pdev,
|
|||||||
if (err)
|
if (err)
|
||||||
goto err_no_clock;
|
goto err_no_clock;
|
||||||
|
|
||||||
|
enetc_phc_index = ptp_qoriq->phc_index;
|
||||||
pci_set_drvdata(pdev, ptp_qoriq);
|
pci_set_drvdata(pdev, ptp_qoriq);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -119,6 +123,7 @@ static void enetc_ptp_remove(struct pci_dev *pdev)
|
|||||||
{
|
{
|
||||||
struct ptp_qoriq *ptp_qoriq = pci_get_drvdata(pdev);
|
struct ptp_qoriq *ptp_qoriq = pci_get_drvdata(pdev);
|
||||||
|
|
||||||
|
enetc_phc_index = -1;
|
||||||
ptp_qoriq_free(ptp_qoriq);
|
ptp_qoriq_free(ptp_qoriq);
|
||||||
kfree(ptp_qoriq);
|
kfree(ptp_qoriq);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user