[Zrouter-src-freebsd] ZRouter.org: push to FreeBSD HEAD tree

zrouter-src-freebsd at zrouter.org zrouter-src-freebsd at zrouter.org
Sat Dec 31 19:10:09 UTC 2011


details:   http://zrouter.org/hg/FreeBSD/head//rev/b9a3c2613f46
changeset: 254:b9a3c2613f46
user:      ray at terran.dlink.ua
date:      Sat Dec 31 21:06:22 2011 +0200
description:
Change register page (and do DELAY(100)) only if needed.

diffstat:

 head/sys/dev/switch/ar8x16_switch.c |  27 +++++++++++++++++----------
 1 files changed, 17 insertions(+), 10 deletions(-)

diffs (48 lines):

diff -r bb94474c6eb7 -r b9a3c2613f46 head/sys/dev/switch/ar8x16_switch.c
--- a/head/sys/dev/switch/ar8x16_switch.c	Sat Dec 31 21:05:14 2011 +0200
+++ b/head/sys/dev/switch/ar8x16_switch.c	Sat Dec 31 21:06:22 2011 +0200
@@ -52,14 +52,17 @@
 static int 	set_reg(device_t dev, uint32_t reg, uint32_t *value);
 static int	reset_subsys(device_t dev, int subsys);
 
-static __uint32_t
-ar8x16_reg_read(struct ar8x16_switch_softc *sc, __uint32_t reg)
+static uint32_t
+ar8x16_reg_read(struct ar8x16_switch_softc *sc, uint32_t reg)
 {
-	__uint16_t lo, hi;
+	uint16_t lo, hi, page;
 
-	MII_WRITE(sc, sc->page_phy, sc->page_reg, REG_PAGE(reg));
-	/* Wait for the page switch to propagate */
-	DELAY(100);
+	page = MII_READ(sc, sc->page_phy, sc->page_reg);
+	if (page != REG_PAGE(reg)) {
+		MII_WRITE(sc, sc->page_phy, sc->page_reg, REG_PAGE(reg));
+		/* Wait for the page switch to propagate */
+		DELAY(100);
+	}
 
 	lo = MII_READ(sc, (0x10 | REG_PHY(reg)), REG_REG(reg));
 	hi = MII_READ(sc, (0x10 | REG_PHY(reg)), REG_REG(reg) + 1);
@@ -68,12 +71,16 @@
 }
 
 static void
-ar8x16_reg_write(struct ar8x16_switch_softc *sc, __uint32_t reg, __uint32_t val)
+ar8x16_reg_write(struct ar8x16_switch_softc *sc, uint32_t reg, uint32_t val)
 {
+	uint16_t page;
 
-	MII_WRITE(sc, sc->page_phy, sc->page_reg, REG_PAGE(reg));
-	/* Wait for the page switch to propagate */
-	DELAY(100);
+	page = MII_READ(sc, sc->page_phy, sc->page_reg);
+	if (page != REG_PAGE(reg)) {
+		MII_WRITE(sc, sc->page_phy, sc->page_reg, REG_PAGE(reg));
+		/* Wait for the page switch to propagate */
+		DELAY(100);
+	}
 
 	MII_WRITE(sc, (0x10 | REG_PHY(reg)), REG_REG(reg) + 1, val >> 16);
 	MII_WRITE(sc, (0x10 | REG_PHY(reg)), REG_REG(reg), val & 0xffff);


More information about the Zrouter-src-freebsd mailing list