LF-457: ocelot: tsn: clean preempt interrupt status
The INTB interrupt is used both for 1588 interrupt and preemption status
change interrupt on each port. So clean preempt status interrupt in IRQ
handle function. Without handling it, driver may get interrupt storm.
Signed-off-by: Xiaoliang Yang <xiaoliang.yang_1@nxp.com>
Reviewed-by: Po Liu <Po.Liu@nxp.com>
(cherry picked from commit 0df3452eb1
)
This commit is contained in:
parent
728ee5c427
commit
68430e200e
|
@ -688,12 +688,9 @@ static irqreturn_t felix_irq_handler(int irq, void *data)
|
|||
|
||||
/* The INTB interrupt is used for both PTP TX timestamp interrupt
|
||||
* and preemption status change interrupt on each port.
|
||||
*
|
||||
* - Get txtstamp if have
|
||||
* - TODO: handle preemption. Without handling it, driver may get
|
||||
* interrupt storm.
|
||||
*/
|
||||
|
||||
ocelot_preempt_irq_clean(ocelot);
|
||||
ocelot_get_txtstamp(ocelot);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
|
|
|
@ -1570,3 +1570,17 @@ int ocelot_dscp_set(struct ocelot *ocelot, int port,
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ocelot_preempt_irq_clean(struct ocelot *ocelot)
|
||||
{
|
||||
struct ocelot_port *ocelot_port;
|
||||
int port;
|
||||
u32 val;
|
||||
|
||||
val = DEV_GMII_MM_STATISTICS_MM_STATUS_PRMPT_ACTIVE_STICKY;
|
||||
for (port = 0; port < ocelot->num_phys_ports; port++) {
|
||||
ocelot_port = ocelot->ports[port];
|
||||
ocelot_port_rmwl(ocelot_port, val, val,
|
||||
DEV_GMII_MM_STATISTICS_MM_STATUS);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -592,4 +592,5 @@ int ocelot_rtag_parse_enable(struct ocelot *ocelot, u8 port);
|
|||
int ocelot_dscp_set(struct ocelot *ocelot, int port,
|
||||
bool enable, const u8 dscp_ix,
|
||||
struct tsn_qos_switch_dscp_conf *c);
|
||||
void ocelot_preempt_irq_clean(struct ocelot *ocelot);
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue