]> git.baikalelectronics.ru Git - kernel.git/commit
net: bcmgenet: enable loopback during UniMAC sw_reset
authorDoug Berger <opendmb@gmail.com>
Wed, 25 Oct 2017 22:04:13 +0000 (15:04 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 26 Oct 2017 01:14:54 +0000 (10:14 +0900)
commit145555d2a4572a65eddf1e88b5402ead25a712ac
tree1ff3dd64755b3423e516787c2ac40c472dd65995
parent6d41767a16cc552d58ffb14af249c8cac6a8b18c
net: bcmgenet: enable loopback during UniMAC sw_reset

It is necessary for the UniMAC to be clocked at least 5 cycles
while the sw_reset is asserted to ensure a clean reset.

It was discovered that this condition was not being met when
connected to an external RGMII PHY that disabled the Rx clock in
the Power Save state.

This commit modifies the reset_umac function to place the (RG)MII
interface into a local loopback mode where the Rx clock comes
from the GENET sourced Tx clk during the sw_reset to ensure the
presence and stability of the clock.

In addition, it turns out that the sw_reset of the UniMAC is not
self clearing, but this was masked by a bug in the timeout code.

The sw_reset is now explicitly cleared by zeroing the UMAC_CMD
register before returning from reset_umac which makes it no
longer necessary to do so in init_umac and makes the clearing of
CMD_TX_EN and CMD_RX_EN by umac_enable_set redundant. The
timeout code (and its associated bug) are removed so reset_umac
no longer needs to return a result, and that means init_umac
that calls reset_umac does not need to as well.

Fixes: 83c070ed8c89 ("net: bcmgenet: add main driver file")
Signed-off-by: Doug Berger <opendmb@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/genet/bcmgenet.c