diff options
author | 2018-03-11 17:58:52 +0000 | |
---|---|---|
committer | 2018-03-11 17:58:52 +0000 | |
commit | ed3cb4afc9b067d2b0fac0c806f252e3d03d1d30 (patch) | |
tree | 0a81412a580a1903773528b40b4497949500cd4c | |
parent | Workaround an Azure UDP transmit checksum offloading bug (diff) | |
download | wireguard-openbsd-ed3cb4afc9b067d2b0fac0c806f252e3d03d1d30.tar.xz wireguard-openbsd-ed3cb4afc9b067d2b0fac0c806f252e3d03d1d30.zip |
Wait for ETHEREN bit to clear instead of the RESET bit to prevent an
infinite loop on some i.MX6 boards.
From Artturi Alm.
-rw-r--r-- | sys/arch/armv7/imx/if_fec.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/sys/arch/armv7/imx/if_fec.c b/sys/arch/armv7/imx/if_fec.c index 899c1904144..4e52631a578 100644 --- a/sys/arch/armv7/imx/if_fec.c +++ b/sys/arch/armv7/imx/if_fec.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_fec.c,v 1.20 2017/01/22 10:17:37 dlg Exp $ */ +/* $OpenBSD: if_fec.c,v 1.21 2018/03/11 17:58:52 kettenis Exp $ */ /* * Copyright (c) 2012-2013 Patrick Wildt <patrick@blueri.se> * @@ -339,7 +339,8 @@ fec_attach(struct device *parent, struct device *self, void *aux) /* reset the controller */ HSET4(sc, ENET_ECR, ENET_ECR_RESET); - while(HREAD4(sc, ENET_ECR) & ENET_ECR_RESET); + while (HREAD4(sc, ENET_ECR) & ENET_ECR_ETHEREN) + continue; HWRITE4(sc, ENET_EIMR, 0); HWRITE4(sc, ENET_EIR, 0xffffffff); @@ -604,7 +605,8 @@ fec_init(struct fec_softc *sc) /* reset the controller */ HSET4(sc, ENET_ECR, ENET_ECR_RESET); - while(HREAD4(sc, ENET_ECR) & ENET_ECR_RESET); + while (HREAD4(sc, ENET_ECR) & ENET_ECR_ETHEREN) + continue; /* set hw address */ HWRITE4(sc, ENET_PALR, @@ -703,7 +705,8 @@ fec_stop(struct fec_softc *sc) /* reset the controller */ HSET4(sc, ENET_ECR, ENET_ECR_RESET); - while(HREAD4(sc, ENET_ECR) & ENET_ECR_RESET); + while (HREAD4(sc, ENET_ECR) & ENET_ECR_ETHEREN) + continue; } void |