summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKinsey Moore <kinsey.moore@oarcorp.com>2021-07-09 09:47:34 -0500
committerJoel Sherrill <joel@rtems.org>2021-07-15 10:07:16 -0500
commit14576608a9477d7a29150a9ba8e73b32ecea9de4 (patch)
tree2f6580c10bc23da61cc65011d67dcebb65801635
parentrtemsbsd: Use config.inc to control ZynqMP ethernet (diff)
downloadrtems-libbsd-14576608a9477d7a29150a9ba8e73b32ecea9de4.tar.bz2
freebsd/if_cgem: Fail probe for unterminated MII
When the MII bus is unterminated on unused interfaces, it results in PHY read timeouts which manifest as spurious PHYs during the attach call. Detect these timeouts during the probe so the device can be ignored.
-rw-r--r--freebsd/sys/dev/cadence/if_cgem.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/freebsd/sys/dev/cadence/if_cgem.c b/freebsd/sys/dev/cadence/if_cgem.c
index 34df7ac7..3eaaf6b2 100644
--- a/freebsd/sys/dev/cadence/if_cgem.c
+++ b/freebsd/sys/dev/cadence/if_cgem.c
@@ -1953,6 +1953,25 @@ cgem_probe(device_t dev)
if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0)
return (ENXIO);
+#else /* __rtems__ */
+
+ struct cgem_softc *sc = device_get_softc(dev);
+ int val, rid = 0;
+
+ /* Check for PHY read timeouts which indicate an unterminated MII bus */
+ sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
+ RF_ACTIVE);
+
+ val = cgem_miibus_readreg(dev, 0, MII_BMSR);
+ if (val == -1) {
+ bus_release_resource(dev, SYS_RES_MEMORY, &rid,
+ sc->mem_res);
+ sc->mem_res = NULL;
+ return (ENXIO);
+ }
+ bus_release_resource(dev, SYS_RES_MEMORY, &rid,
+ sc->mem_res);
+ sc->mem_res = NULL;
#endif /* __rtems__ */
device_set_desc(dev, "Cadence CGEM Gigabit Ethernet Interface");