net: dsa: felix: re-enable TX flow control in ocelot_port_flush()
[ Upstream commit 1650bdb1c516c248fb06f6d076559ff6437a5853 ] Because flow control is set up statically in ocelot_init_port(), and not in phylink_mac_link_up(), what happens is that after the blamed commit, the flow control remains disabled after the port flushing procedure. Fixes: eb4733d7cffc ("net: dsa: felix: implement port flushing on .phylink_mac_link_down") Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
5946fbf483
commit
db5f4adc93
@@ -355,6 +355,7 @@ static u32 ocelot_read_eq_avail(struct ocelot *ocelot, int port)
|
|||||||
|
|
||||||
int ocelot_port_flush(struct ocelot *ocelot, int port)
|
int ocelot_port_flush(struct ocelot *ocelot, int port)
|
||||||
{
|
{
|
||||||
|
unsigned int pause_ena;
|
||||||
int err, val;
|
int err, val;
|
||||||
|
|
||||||
/* Disable dequeuing from the egress queues */
|
/* Disable dequeuing from the egress queues */
|
||||||
@@ -363,6 +364,7 @@ int ocelot_port_flush(struct ocelot *ocelot, int port)
|
|||||||
QSYS_PORT_MODE, port);
|
QSYS_PORT_MODE, port);
|
||||||
|
|
||||||
/* Disable flow control */
|
/* Disable flow control */
|
||||||
|
ocelot_fields_read(ocelot, port, SYS_PAUSE_CFG_PAUSE_ENA, &pause_ena);
|
||||||
ocelot_fields_write(ocelot, port, SYS_PAUSE_CFG_PAUSE_ENA, 0);
|
ocelot_fields_write(ocelot, port, SYS_PAUSE_CFG_PAUSE_ENA, 0);
|
||||||
|
|
||||||
/* Disable priority flow control */
|
/* Disable priority flow control */
|
||||||
@@ -398,6 +400,9 @@ int ocelot_port_flush(struct ocelot *ocelot, int port)
|
|||||||
/* Clear flushing again. */
|
/* Clear flushing again. */
|
||||||
ocelot_rmw_gix(ocelot, 0, REW_PORT_CFG_FLUSH_ENA, REW_PORT_CFG, port);
|
ocelot_rmw_gix(ocelot, 0, REW_PORT_CFG_FLUSH_ENA, REW_PORT_CFG, port);
|
||||||
|
|
||||||
|
/* Re-enable flow control */
|
||||||
|
ocelot_fields_write(ocelot, port, SYS_PAUSE_CFG_PAUSE_ENA, pause_ena);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ocelot_port_flush);
|
EXPORT_SYMBOL(ocelot_port_flush);
|
||||||
|
Reference in New Issue
Block a user