summaryrefslogtreecommitdiffstats
path: root/sys/dev/mii
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2007-02-12 22:51:25 +0000
committerjkim <jkim@FreeBSD.org>2007-02-12 22:51:25 +0000
commitedec07ff3ac5ec95545cb6072c7fa293976cd444 (patch)
treebd96fdc4703a43f6c5ab30eec2cfba3d05f6dd21 /sys/dev/mii
parentd248b7fe82f187ff5a7b49609be9ece339b3bac8 (diff)
downloadFreeBSD-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.c23
-rw-r--r--sys/dev/mii/brgphyreg.h4
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)
OpenPOWER on IntegriCloud