summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authormsaitoh <msaitoh@NetBSD.org>2021-12-28 06:36:29 +0000
committermsaitoh <msaitoh@NetBSD.org>2021-12-28 06:36:29 +0000
commit3da0ae21ecf3b910e2a2c2a2f63aad2369263fea (patch)
treecc46cebf19cff2307399a83f30b63dcac2aaf8a5 /sys/dev
parent2161215487935efe80a7ac86ce97a65ad977f2ca (diff)
Reduce the access of the ESSR register.
- makphyattach() have a code to detect the Fiber/Copper auto selection feature. Save the info to sc_flags to reduce the access to the ESSR register. One of the reason is that the register is not implemented on QEMU. Another reason is that it's not required to access the register if the device is in the copper only mode.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/mii/makphy.c26
-rw-r--r--sys/dev/mii/makphyvar.h5
2 files changed, 19 insertions, 12 deletions
diff --git a/sys/dev/mii/makphy.c b/sys/dev/mii/makphy.c
index b9957ea0cb7..836a24066e3 100644
--- a/sys/dev/mii/makphy.c
+++ b/sys/dev/mii/makphy.c
@@ -1,4 +1,4 @@
-/* $NetBSD: makphy.c,v 1.70 2021/12/28 06:35:37 msaitoh Exp $ */
+/* $NetBSD: makphy.c,v 1.71 2021/12/28 06:36:29 msaitoh Exp $ */
/*-
* Copyright (c) 1998, 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -59,7 +59,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: makphy.c,v 1.70 2021/12/28 06:35:37 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: makphy.c,v 1.71 2021/12/28 06:36:29 msaitoh Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -259,7 +259,8 @@ page0:
default:
break;
}
- }
+ } else
+ maksc->sc_flags |= MAKPHY_F_FICO_AUTOSEL;
break;
default:
break;
@@ -487,14 +488,19 @@ makphy_status(struct mii_softc *sc)
mii->mii_media_active |= IFM_1000_SX;
} else if ((sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1011) ||
(sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1111)) {
- /* Fiber/Copper auto select mode */
-
- PHY_READ(sc, MAKPHY_ESSR, &essr);
- if ((essr & ESSR_FIBER_LINK) == 0)
+ struct makphy_softc *maksc = (struct makphy_softc *)sc;
+
+ if ((maksc->sc_flags & MAKPHY_F_FICO_AUTOSEL) != 0) {
+ /* Fiber/Copper auto select mode */
+ PHY_READ(sc, MAKPHY_ESSR, &essr);
+ if ((essr & ESSR_FIBER_LINK) == 0)
+ goto copper;
+ else {
+ /* Regard as 1000BASE-SX */
+ mii->mii_media_active |= IFM_1000_SX;
+ }
+ } else
goto copper;
-
- /* XXX Assume 1000BASE-SX only */
- mii->mii_media_active |= IFM_1000_SX;
} else if (sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1112) {
/* Fiber/Copper auto select mode */
diff --git a/sys/dev/mii/makphyvar.h b/sys/dev/mii/makphyvar.h
index 853f97c3418..ee12c9f02a3 100644
--- a/sys/dev/mii/makphyvar.h
+++ b/sys/dev/mii/makphyvar.h
@@ -1,4 +1,4 @@
-/* $NetBSD: makphyvar.h,v 1.2 2019/03/25 06:17:56 msaitoh Exp $ */
+/* $NetBSD: makphyvar.h,v 1.3 2021/12/28 06:36:29 msaitoh Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -37,6 +37,7 @@ struct makphy_softc {
uint32_t sc_flags;
};
-#define MAKPHY_F_I210 __BIT(0) /* Identify I210 (mii_model == 0) */
+#define MAKPHY_F_I210 __BIT(0) /* Identify I210 (mii_model == 0) */
+#define MAKPHY_F_FICO_AUTOSEL __BIT(1) /* Fiber/Copper autoselect mode */
#endif /* _MII_MAKPHYVAR_H_ */