Commit 88513469 authored by Oleksij Rempel's avatar Oleksij Rempel Committed by Paolo Abeni

net: stmmac: Assign configured channel value to EXTTS event

Assign the configured channel value to the EXTTS event in the timestamp
interrupt handler. Without assigning the correct channel, applications
like ts2phc will refuse to accept the event, resulting in errors such
as:
...
ts2phc[656.834]: config item end1.ts2phc.pin_index is 0
ts2phc[656.834]: config item end1.ts2phc.channel is 3
ts2phc[656.834]: config item end1.ts2phc.extts_polarity is 2
ts2phc[656.834]: config item end1.ts2phc.extts_correction is 0
...
ts2phc[656.862]: extts on unexpected channel
ts2phc[658.141]: extts on unexpected channel
ts2phc[659.140]: extts on unexpected channel

Fixes: f4da5652 ("net: stmmac: Add support for external trigger timestamping")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: default avatarWojciech Drewek <wojciech.drewek@intel.com>
Link: https://lore.kernel.org/r/20240618073821.619751-1-o.rempel@pengutronix.deSigned-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 0f74d0cd
...@@ -218,6 +218,7 @@ static void timestamp_interrupt(struct stmmac_priv *priv) ...@@ -218,6 +218,7 @@ static void timestamp_interrupt(struct stmmac_priv *priv)
{ {
u32 num_snapshot, ts_status, tsync_int; u32 num_snapshot, ts_status, tsync_int;
struct ptp_clock_event event; struct ptp_clock_event event;
u32 acr_value, channel;
unsigned long flags; unsigned long flags;
u64 ptp_time; u64 ptp_time;
int i; int i;
...@@ -243,12 +244,15 @@ static void timestamp_interrupt(struct stmmac_priv *priv) ...@@ -243,12 +244,15 @@ static void timestamp_interrupt(struct stmmac_priv *priv)
num_snapshot = (ts_status & GMAC_TIMESTAMP_ATSNS_MASK) >> num_snapshot = (ts_status & GMAC_TIMESTAMP_ATSNS_MASK) >>
GMAC_TIMESTAMP_ATSNS_SHIFT; GMAC_TIMESTAMP_ATSNS_SHIFT;
acr_value = readl(priv->ptpaddr + PTP_ACR);
channel = ilog2(FIELD_GET(PTP_ACR_MASK, acr_value));
for (i = 0; i < num_snapshot; i++) { for (i = 0; i < num_snapshot; i++) {
read_lock_irqsave(&priv->ptp_lock, flags); read_lock_irqsave(&priv->ptp_lock, flags);
get_ptptime(priv->ptpaddr, &ptp_time); get_ptptime(priv->ptpaddr, &ptp_time);
read_unlock_irqrestore(&priv->ptp_lock, flags); read_unlock_irqrestore(&priv->ptp_lock, flags);
event.type = PTP_CLOCK_EXTTS; event.type = PTP_CLOCK_EXTTS;
event.index = 0; event.index = channel;
event.timestamp = ptp_time; event.timestamp = ptp_time;
ptp_clock_event(priv->ptp_clock, &event); ptp_clock_event(priv->ptp_clock, &event);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment