diff options
author | jkim <jkim@FreeBSD.org> | 2007-02-12 22:51:25 +0000 |
---|---|---|
committer | jkim <jkim@FreeBSD.org> | 2007-02-12 22:51:25 +0000 |
commit | edec07ff3ac5ec95545cb6072c7fa293976cd444 (patch) | |
tree | bd96fdc4703a43f6c5ab30eec2cfba3d05f6dd21 /sys/dev/mii | |
parent | d248b7fe82f187ff5a7b49609be9ece339b3bac8 (diff) | |
download | FreeBSD-src-edec07ff3ac5ec95545cb6072c7fa293976cd444.zip FreeBSD-src-edec07ff3ac5ec95545cb6072c7fa293976cd444.tar.gz |
Add PHY DSP code for BCM5755M.
Obtained from: OpenBSD
Diffstat (limited to 'sys/dev/mii')
-rw-r--r-- | sys/dev/mii/brgphy.c | 23 | ||||
-rw-r--r-- | sys/dev/mii/brgphyreg.h | 4 |
2 files changed, 27 insertions, 0 deletions
diff --git a/sys/dev/mii/brgphy.c b/sys/dev/mii/brgphy.c index 52a94cb..1fa70d7 100644 --- a/sys/dev/mii/brgphy.c +++ b/sys/dev/mii/brgphy.c @@ -101,6 +101,7 @@ static void bcm5401_load_dspcode(struct mii_softc *); static void bcm5411_load_dspcode(struct mii_softc *); static void brgphy_fixup_adc_bug(struct mii_softc *); static void brgphy_fixup_5704_a0_bug(struct mii_softc *); +static void brgphy_fixup_adjust_trim(struct mii_softc *); static void brgphy_fixup_ber_bug(struct mii_softc *); static void brgphy_fixup_jitter_bug(struct mii_softc *); static void brgphy_ethernet_wirespeed(struct mii_softc *); @@ -568,6 +569,26 @@ brgphy_fixup_5704_a0_bug(struct mii_softc *sc) } static void +brgphy_fixup_adjust_trim(struct mii_softc *sc) +{ + static const struct { + int reg; + uint16_t val; + } dspcode[] = { + { BRGPHY_MII_AUXCTL, 0x0c00 }, + { BRGPHY_MII_DSP_ADDR_REG, 0x000a }, + { BRGPHY_MII_DSP_RW_PORT, 0x110b }, + { BRGPHY_MII_TEST1, 0x0014 }, + { BRGPHY_MII_AUXCTL, 0x0400 }, + { 0, 0 }, + }; + int i; + + for (i = 0; dspcode[i].reg != 0; i++) + PHY_WRITE(sc, dspcode[i].reg, dspcode[i].val); +} + +static void brgphy_fixup_ber_bug(struct mii_softc *sc) { static const struct { @@ -691,6 +712,8 @@ brgphy_reset(struct mii_softc *sc) brgphy_fixup_adc_bug(sc); if (bge_sc->bge_flags & BGE_FLAG_5704_A0_BUG) brgphy_fixup_5704_a0_bug(sc); + if (bge_sc->bge_flags & BGE_FLAG_ADJUST_TRIM) + brgphy_fixup_adjust_trim(sc); if (bge_sc->bge_flags & BGE_FLAG_BER_BUG) brgphy_fixup_ber_bug(sc); if (bge_sc->bge_flags & BGE_FLAG_JITTER_BUG) diff --git a/sys/dev/mii/brgphyreg.h b/sys/dev/mii/brgphyreg.h index bb9636d..fc20cf6 100644 --- a/sys/dev/mii/brgphyreg.h +++ b/sys/dev/mii/brgphyreg.h @@ -261,6 +261,10 @@ #define BRGPHY_IMR_LNK_CHG 0x0002 /* Link status change */ #define BRGPHY_IMR_CRCERR 0x0001 /* CEC error */ +#define BRGPHY_MII_TEST1 0x1e +#define BRGPHY_TEST1_TRIM_EN 0x0010 +#define BRGPHY_TEST1_CRC_EN 0x8000 + #define BRGPHY_INTRS \ ~(BRGPHY_IMR_LNK_CHG|BRGPHY_IMR_LSP_CHG|BRGPHY_IMR_DUP_CHG) |