summaryrefslogtreecommitdiffstats
path: root/sys/dev/re/if_re.c
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2008-12-11 01:41:38 +0000
committeryongari <yongari@FreeBSD.org>2008-12-11 01:41:38 +0000
commit1dec308af8929ef65cfa303fd404cd6faa839d74 (patch)
tree11ba1e8fe49c124d5013a330bb4bc0f665527443 /sys/dev/re/if_re.c
parent5bbe456ad75906a1eef534d8cf5c98e5552ae3c8 (diff)
downloadFreeBSD-src-1dec308af8929ef65cfa303fd404cd6faa839d74.zip
FreeBSD-src-1dec308af8929ef65cfa303fd404cd6faa839d74.tar.gz
Don't access undocumented register 0x82 on controllers that
have no such register. While here clear undocumented PHY register 0x0B for RTL8110S. Obtained from: RealTek FreeBSD driver
Diffstat (limited to 'sys/dev/re/if_re.c')
-rw-r--r--sys/dev/re/if_re.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/sys/dev/re/if_re.c b/sys/dev/re/if_re.c
index dd2e351..8f41278 100644
--- a/sys/dev/re/if_re.c
+++ b/sys/dev/re/if_re.c
@@ -700,7 +700,12 @@ re_reset(struct rl_softc *sc)
if (i == RL_TIMEOUT)
device_printf(sc->rl_dev, "reset never completed!\n");
- CSR_WRITE_1(sc, 0x82, 1);
+ if ((sc->rl_flags & RL_FLAG_PHY8169) != 0)
+ CSR_WRITE_1(sc, 0x82, 1);
+ if ((sc->rl_flags & RL_FLAG_PHY8110S) != 0) {
+ CSR_WRITE_1(sc, 0x82, 1);
+ re_gmii_writereg(sc->rl_dev, 1, 0x0B, 0);
+ }
}
#ifdef RE_DIAG
@@ -1235,6 +1240,9 @@ re_attach(device_t dev)
case RL_HWREV_8139CPLUS:
sc->rl_flags |= RL_FLAG_NOJUMBO | RL_FLAG_FASTETHER;
break;
+ case RL_HWREV_8110S:
+ sc->rl_flags |= RL_FLAG_PHY8110S;
+ break;
case RL_HWREV_8100E:
case RL_HWREV_8101E:
sc->rl_flags |= RL_FLAG_NOJUMBO | RL_FLAG_INVMAR |
@@ -1271,10 +1279,14 @@ re_attach(device_t dev)
*/
sc->rl_flags |= RL_FLAG_NOJUMBO;
break;
+ case RL_HWREV_8169:
+ case RL_HWREV_8169S:
+ sc->rl_flags |= RL_FLAG_PHY8169;
+ break;
case RL_HWREV_8169_8110SB:
case RL_HWREV_8169_8110SC:
case RL_HWREV_8169_8110SBL:
- sc->rl_flags |= RL_FLAG_PHYWAKE;
+ sc->rl_flags |= RL_FLAG_PHYWAKE | RL_FLAG_PHY8169;
break;
default:
break;
OpenPOWER on IntegriCloud