net: stmmac: Assign configured channel value to EXTTS event
[ Upstream commit 8851346912a1fa33e7a5966fe51f07313b274627 ] 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: f4da56529da60 ("net: stmmac: Add support for external trigger timestamping") Cc: stable@vger.kernel.org Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com> Link: https://lore.kernel.org/r/20240618073821.619751-1-o.rempel@pengutronix.de Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
a03c3a3469
commit
e827e077a9
@ -176,6 +176,7 @@ static void timestamp_interrupt(struct stmmac_priv *priv)
|
||||
{
|
||||
u32 num_snapshot, ts_status, tsync_int;
|
||||
struct ptp_clock_event event;
|
||||
u32 acr_value, channel;
|
||||
unsigned long flags;
|
||||
u64 ptp_time;
|
||||
int i;
|
||||
@ -201,12 +202,15 @@ static void timestamp_interrupt(struct stmmac_priv *priv)
|
||||
num_snapshot = (ts_status & GMAC_TIMESTAMP_ATSNS_MASK) >>
|
||||
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++) {
|
||||
spin_lock_irqsave(&priv->ptp_lock, flags);
|
||||
get_ptptime(priv->ptpaddr, &ptp_time);
|
||||
spin_unlock_irqrestore(&priv->ptp_lock, flags);
|
||||
event.type = PTP_CLOCK_EXTTS;
|
||||
event.index = 0;
|
||||
event.index = channel;
|
||||
event.timestamp = ptp_time;
|
||||
ptp_clock_event(priv->ptp_clock, &event);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user