summaryrefslogtreecommitdiff
path: root/sys/dev/dwc
diff options
context:
space:
mode:
authorEmmanuel Vadot <manu@FreeBSD.org>2022-02-22 08:53:11 +0000
committerEmmanuel Vadot <manu@FreeBSD.org>2022-03-04 10:29:13 +0000
commit66f5398552a9ba58906f01b6acedab51fc04554d (patch)
treefc7c9338af2dce69587ee1742f376dc9e64f0cc3 /sys/dev/dwc
parentd9ca85e8daed01e671e0654cfa844d36c9fbf532 (diff)
Diffstat (limited to 'sys/dev/dwc')
-rw-r--r--sys/dev/dwc/if_dwc.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/dev/dwc/if_dwc.c b/sys/dev/dwc/if_dwc.c
index 429e250f48e8..0704912b48ad 100644
--- a/sys/dev/dwc/if_dwc.c
+++ b/sys/dev/dwc/if_dwc.c
@@ -1619,6 +1619,7 @@ dwc_attach(device_t dev)
/* Reset the PHY if needed */
if (dwc_reset(dev) != 0) {
device_printf(dev, "Can't reset the PHY\n");
+ bus_release_resources(dev, dwc_spec, sc->res);
return (ENXIO);
}
@@ -1634,6 +1635,7 @@ dwc_attach(device_t dev)
}
if (i >= MAC_RESET_TIMEOUT) {
device_printf(sc->dev, "Can't reset DWC.\n");
+ bus_release_resources(dev, dwc_spec, sc->res);
return (ENXIO);
}
@@ -1654,8 +1656,10 @@ dwc_attach(device_t dev)
reg &= ~(MODE_ST | MODE_SR);
WRITE4(sc, OPERATION_MODE, reg);
- if (setup_dma(sc))
- return (ENXIO);
+ if (setup_dma(sc)) {
+ bus_release_resources(dev, dwc_spec, sc->res);
+ return (ENXIO);
+ }
/* Setup addresses */
WRITE4(sc, RX_DESCR_LIST_ADDR, sc->rxdesc_ring_paddr);
@@ -1671,6 +1675,7 @@ dwc_attach(device_t dev)
NULL, dwc_intr, sc, &sc->intr_cookie);
if (error != 0) {
device_printf(dev, "could not setup interrupt handler.\n");
+ bus_release_resources(dev, dwc_spec, sc->res);
return (ENXIO);
}
@@ -1696,6 +1701,8 @@ dwc_attach(device_t dev)
if (error != 0) {
device_printf(dev, "PHY attach failed\n");
+ bus_teardown_intr(dev, sc->res[1], sc->intr_cookie);
+ bus_release_resources(dev, dwc_spec, sc->res);
return (ENXIO);
}
sc->mii_softc = device_get_softc(sc->miibus);