summaryrefslogtreecommitdiff
path: root/sys/dev/dwc
diff options
context:
space:
mode:
authorRuslan Bukin <br@FreeBSD.org>2015-02-13 11:00:13 +0000
committerRuslan Bukin <br@FreeBSD.org>2015-02-13 11:00:13 +0000
commitd8e5258da2442949b1fc20f076e8779a54b225e8 (patch)
tree5022f041d1cc772dc5476828ff7bf2da1775720f /sys/dev/dwc
parent5c5b28d0d7231c788bf52780f4c87c796b7106d5 (diff)
Notes
Diffstat (limited to 'sys/dev/dwc')
-rw-r--r--sys/dev/dwc/if_dwc.c31
1 files changed, 16 insertions, 15 deletions
diff --git a/sys/dev/dwc/if_dwc.c b/sys/dev/dwc/if_dwc.c
index aeb98e9fed65..995eff557348 100644
--- a/sys/dev/dwc/if_dwc.c
+++ b/sys/dev/dwc/if_dwc.c
@@ -84,6 +84,7 @@ __FBSDID("$FreeBSD$");
#define WRITE4(_sc, _reg, _val) \
bus_write_4((_sc)->res[0], _reg, _val)
+#define MAC_RESET_TIMEOUT 100
#define WATCHDOG_TIMEOUT_SECS 5
#define STATS_HARVEST_INTERVAL 2
#define MII_CLK_VAL 2
@@ -1103,19 +1104,6 @@ dwc_attach(device_t dev)
sc->bst = rman_get_bustag(sc->res[0]);
sc->bsh = rman_get_bushandle(sc->res[0]);
- mtx_init(&sc->mtx, device_get_nameunit(sc->dev),
- MTX_NETWORK_LOCK, MTX_DEF);
-
- callout_init_mtx(&sc->dwc_callout, &sc->mtx, 0);
-
- /* Setup interrupt handler. */
- error = bus_setup_intr(dev, sc->res[1], INTR_TYPE_NET | INTR_MPSAFE,
- NULL, dwc_intr, sc, &sc->intr_cookie);
- if (error != 0) {
- device_printf(dev, "could not setup interrupt handler.\n");
- return (ENXIO);
- }
-
/* Read MAC before reset */
if (dwc_get_hwaddr(sc, macaddr)) {
device_printf(sc->dev, "can't get mac\n");
@@ -1127,12 +1115,12 @@ dwc_attach(device_t dev)
reg |= (BUS_MODE_SWR);
WRITE4(sc, BUS_MODE, reg);
- for (i = 0; i < 100; i++) {
+ for (i = 0; i < MAC_RESET_TIMEOUT; i++) {
if ((READ4(sc, BUS_MODE) & BUS_MODE_SWR) == 0)
break;
DELAY(10);
}
- if (i == 0) {
+ if (i >= MAC_RESET_TIMEOUT) {
device_printf(sc->dev, "Can't reset DWC.\n");
return (ENXIO);
}
@@ -1156,6 +1144,19 @@ dwc_attach(device_t dev)
WRITE4(sc, RX_DESCR_LIST_ADDR, sc->rxdesc_ring_paddr);
WRITE4(sc, TX_DESCR_LIST_ADDR, sc->txdesc_ring_paddr);
+ mtx_init(&sc->mtx, device_get_nameunit(sc->dev),
+ MTX_NETWORK_LOCK, MTX_DEF);
+
+ callout_init_mtx(&sc->dwc_callout, &sc->mtx, 0);
+
+ /* Setup interrupt handler. */
+ error = bus_setup_intr(dev, sc->res[1], INTR_TYPE_NET | INTR_MPSAFE,
+ NULL, dwc_intr, sc, &sc->intr_cookie);
+ if (error != 0) {
+ device_printf(dev, "could not setup interrupt handler.\n");
+ return (ENXIO);
+ }
+
/* Set up the ethernet interface. */
sc->ifp = ifp = if_alloc(IFT_ETHER);