From: Florian Fainelli Date: Thu, 15 May 2014 21:33:53 +0000 (-0700) Subject: net: systemport: wait for packet in umac_enable_set() X-Git-Tag: firefly_0821_release~176^2~3765^2~208^2 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=00b91c693e9da851385eed8c9492ac0b0d4e4896;p=firefly-linux-kernel-4.4.55.git net: systemport: wait for packet in umac_enable_set() When umac_enable_set() is used to disable the UniMAC receiver or transmitter, we need to make sure that we wait for a full-sized packet to be processed because the UniMAC hardware stops on a packet boundary, not immediately. Signed-off-by: Florian Fainelli Signed-off-by: David S. Miller --- diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c index 26030d67518b..d40c5b969e9e 100644 --- a/drivers/net/ethernet/broadcom/bcmsysport.c +++ b/drivers/net/ethernet/broadcom/bcmsysport.c @@ -1244,6 +1244,12 @@ static inline void umac_enable_set(struct bcm_sysport_priv *priv, else reg &= ~(CMD_RX_EN | CMD_TX_EN); umac_writel(priv, reg, UMAC_CMD); + + /* UniMAC stops on a packet boundary, wait for a full-sized packet + * to be processed (1 msec). + */ + if (enable == 0) + usleep_range(1000, 2000); } static inline int umac_reset(struct bcm_sysport_priv *priv)