Add BCM5701 A0/B0 CRC bug workaround. Magic values taken from Linux driver.
This commit is contained in:
parent
797b2220ae
commit
1ec4c3a889
@ -2216,6 +2216,9 @@ bge_attach(device_t dev)
|
||||
}
|
||||
|
||||
/* Set various bug flags. */
|
||||
if (sc->bge_chipid == BGE_CHIPID_BCM5701_A0 ||
|
||||
sc->bge_chipid == BGE_CHIPID_BCM5701_B0)
|
||||
sc->bge_flags |= BGE_FLAG_CRC_BUG;
|
||||
if (sc->bge_chiprev == BGE_CHIPREV_5703_AX ||
|
||||
sc->bge_chiprev == BGE_CHIPREV_5704_AX)
|
||||
sc->bge_flags |= BGE_FLAG_ADC_BUG;
|
||||
|
@ -2467,6 +2467,7 @@ struct bge_softc {
|
||||
#define BGE_FLAG_JITTER_BUG 0x01000000
|
||||
#define BGE_FLAG_BER_BUG 0x02000000
|
||||
#define BGE_FLAG_ADJUST_TRIM 0x04000000
|
||||
#define BGE_FLAG_CRC_BUG 0x08000000
|
||||
uint32_t bge_chipid;
|
||||
uint8_t bge_asicrev;
|
||||
uint8_t bge_chiprev;
|
||||
|
@ -103,6 +103,7 @@ static void brgphy_fixup_5704_a0_bug(struct mii_softc *);
|
||||
static void brgphy_fixup_adc_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_crc_bug(struct mii_softc *);
|
||||
static void brgphy_fixup_jitter_bug(struct mii_softc *);
|
||||
static void brgphy_ethernet_wirespeed(struct mii_softc *);
|
||||
static void brgphy_jumbo_settings(struct mii_softc *, u_long);
|
||||
@ -611,6 +612,25 @@ brgphy_fixup_ber_bug(struct mii_softc *sc)
|
||||
PHY_WRITE(sc, dspcode[i].reg, dspcode[i].val);
|
||||
}
|
||||
|
||||
static void
|
||||
brgphy_fixup_crc_bug(struct mii_softc *sc)
|
||||
{
|
||||
static const struct {
|
||||
int reg;
|
||||
uint16_t val;
|
||||
} dspcode[] = {
|
||||
{ BRGPHY_MII_DSP_ADDR_REG, 0x0a75 },
|
||||
{ 0x1c, 0x8c68 },
|
||||
{ 0x1c, 0x8d68 },
|
||||
{ 0x1c, 0x8c68 },
|
||||
{ 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_jitter_bug(struct mii_softc *sc)
|
||||
{
|
||||
@ -716,6 +736,8 @@ brgphy_reset(struct mii_softc *sc)
|
||||
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_CRC_BUG)
|
||||
brgphy_fixup_crc_bug(sc);
|
||||
if (bge_sc->bge_flags & BGE_FLAG_JITTER_BUG)
|
||||
brgphy_fixup_jitter_bug(sc);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user