ptp: ptp_ines: add HW timestamp configuration reporting

The driver partially stores HW timestamping configuration, but missing
pieces can be read from HW. Add callback to report configuration.

Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>
Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Link: https://patch.msgid.link/20251124181151.277256-8-vadim.fedorenko@linux.dev
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
pull/1354/merge
Vadim Fedorenko 2025-11-24 18:11:51 +00:00 committed by Jakub Kicinski
parent d51de60b8e
commit dadc51871d
1 changed files with 23 additions and 0 deletions

View File

@ -328,6 +328,28 @@ static u64 ines_find_txts(struct ines_port *port, struct sk_buff *skb)
return ns; return ns;
} }
static int ines_hwtstamp_get(struct mii_timestamper *mii_ts,
struct kernel_hwtstamp_config *cfg)
{
struct ines_port *port = container_of(mii_ts, struct ines_port, mii_ts);
unsigned long flags;
u32 port_conf;
cfg->rx_filter = port->rxts_enabled ? HWTSTAMP_FILTER_PTP_V2_EVENT
: HWTSTAMP_FILTER_NONE;
if (port->txts_enabled) {
spin_lock_irqsave(&port->lock, flags);
port_conf = ines_read32(port, port_conf);
spin_unlock_irqrestore(&port->lock, flags);
cfg->tx_type = (port_conf & CM_ONE_STEP) ? HWTSTAMP_TX_ONESTEP_P2P
: HWTSTAMP_TX_OFF;
} else {
cfg->tx_type = HWTSTAMP_TX_OFF;
}
return 0;
}
static int ines_hwtstamp_set(struct mii_timestamper *mii_ts, static int ines_hwtstamp_set(struct mii_timestamper *mii_ts,
struct kernel_hwtstamp_config *cfg, struct kernel_hwtstamp_config *cfg,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
@ -710,6 +732,7 @@ static struct mii_timestamper *ines_ptp_probe_channel(struct device *device,
port->mii_ts.rxtstamp = ines_rxtstamp; port->mii_ts.rxtstamp = ines_rxtstamp;
port->mii_ts.txtstamp = ines_txtstamp; port->mii_ts.txtstamp = ines_txtstamp;
port->mii_ts.hwtstamp_set = ines_hwtstamp_set; port->mii_ts.hwtstamp_set = ines_hwtstamp_set;
port->mii_ts.hwtstamp_get = ines_hwtstamp_get;
port->mii_ts.link_state = ines_link_state; port->mii_ts.link_state = ines_link_state;
port->mii_ts.ts_info = ines_ts_info; port->mii_ts.ts_info = ines_ts_info;