Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/mii/brgphy.c
Show First 20 Lines • Show All 109 Lines • ▼ Show 20 Lines | |||||
static void bcm54k2_load_dspcode(struct mii_softc *); | static void bcm54k2_load_dspcode(struct mii_softc *); | ||||
static void brgphy_fixup_5704_a0_bug(struct mii_softc *); | static void brgphy_fixup_5704_a0_bug(struct mii_softc *); | ||||
static void brgphy_fixup_adc_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_adjust_trim(struct mii_softc *); | ||||
static void brgphy_fixup_ber_bug(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_crc_bug(struct mii_softc *); | ||||
static void brgphy_fixup_jitter_bug(struct mii_softc *); | static void brgphy_fixup_jitter_bug(struct mii_softc *); | ||||
static void brgphy_ethernet_wirespeed(struct mii_softc *); | static void brgphy_ethernet_wirespeed(struct mii_softc *); | ||||
static void brgphy_bcm54xx_clock_delay(struct mii_softc *); | |||||
static void brgphy_jumbo_settings(struct mii_softc *, u_long); | static void brgphy_jumbo_settings(struct mii_softc *, u_long); | ||||
static const struct mii_phydesc brgphys[] = { | static const struct mii_phydesc brgphys[] = { | ||||
MII_PHY_DESC(BROADCOM, BCM5400), | MII_PHY_DESC(BROADCOM, BCM5400), | ||||
MII_PHY_DESC(BROADCOM, BCM5401), | MII_PHY_DESC(BROADCOM, BCM5401), | ||||
MII_PHY_DESC(BROADCOM, BCM5402), | MII_PHY_DESC(BROADCOM, BCM5402), | ||||
MII_PHY_DESC(BROADCOM, BCM5411), | MII_PHY_DESC(BROADCOM, BCM5411), | ||||
MII_PHY_DESC(BROADCOM, BCM5404), | MII_PHY_DESC(BROADCOM, BCM5404), | ||||
Show All 27 Lines | #ifdef notyet /* better handled by ukphy(4) until WARs are implemented */ | ||||
MII_PHY_DESC(BROADCOM2, BCM5785), | MII_PHY_DESC(BROADCOM2, BCM5785), | ||||
#endif | #endif | ||||
MII_PHY_DESC(BROADCOM3, BCM54618SE), | MII_PHY_DESC(BROADCOM3, BCM54618SE), | ||||
MII_PHY_DESC(BROADCOM3, BCM5717C), | MII_PHY_DESC(BROADCOM3, BCM5717C), | ||||
MII_PHY_DESC(BROADCOM3, BCM5719C), | MII_PHY_DESC(BROADCOM3, BCM5719C), | ||||
MII_PHY_DESC(BROADCOM3, BCM5720C), | MII_PHY_DESC(BROADCOM3, BCM5720C), | ||||
MII_PHY_DESC(BROADCOM3, BCM57765), | MII_PHY_DESC(BROADCOM3, BCM57765), | ||||
MII_PHY_DESC(BROADCOM3, BCM57780), | MII_PHY_DESC(BROADCOM3, BCM57780), | ||||
MII_PHY_DESC(BROADCOM4, BCM54213PE), | |||||
MII_PHY_DESC(BROADCOM4, BCM5725C), | MII_PHY_DESC(BROADCOM4, BCM5725C), | ||||
MII_PHY_DESC(xxBROADCOM_ALT1, BCM5906), | MII_PHY_DESC(xxBROADCOM_ALT1, BCM5906), | ||||
MII_PHY_END | MII_PHY_END | ||||
}; | }; | ||||
static const struct mii_phy_funcs brgphy_funcs = { | static const struct mii_phy_funcs brgphy_funcs = { | ||||
brgphy_service, | brgphy_service, | ||||
brgphy_status, | brgphy_status, | ||||
▲ Show 20 Lines • Show All 240 Lines • ▼ Show 20 Lines | case MII_OUI_BROADCOM: | ||||
case MII_MODEL_BROADCOM_BCM5411: | case MII_MODEL_BROADCOM_BCM5411: | ||||
bcm5411_load_dspcode(sc); | bcm5411_load_dspcode(sc); | ||||
break; | break; | ||||
case MII_MODEL_BROADCOM_BCM54K2: | case MII_MODEL_BROADCOM_BCM54K2: | ||||
bcm54k2_load_dspcode(sc); | bcm54k2_load_dspcode(sc); | ||||
break; | break; | ||||
} | } | ||||
break; | break; | ||||
case MII_OUI_BROADCOM4: | |||||
switch (sc->mii_mpd_model) { | |||||
case MII_MODEL_BROADCOM4_BCM54213PE: | |||||
brgphy_bcm54xx_clock_delay(sc); | |||||
break; | |||||
} | } | ||||
} | } | ||||
} | |||||
mii_phy_update(sc, cmd); | mii_phy_update(sc, cmd); | ||||
return (0); | return (0); | ||||
} | } | ||||
/****************************************************************************/ | /****************************************************************************/ | ||||
/* Sets the PHY link speed. */ | /* Sets the PHY link speed. */ | ||||
/* */ | /* */ | ||||
/* Returns: */ | /* Returns: */ | ||||
▲ Show 20 Lines • Show All 429 Lines • ▼ Show 20 Lines | |||||
brgphy_ethernet_wirespeed(struct mii_softc *sc) | brgphy_ethernet_wirespeed(struct mii_softc *sc) | ||||
{ | { | ||||
uint32_t val; | uint32_t val; | ||||
/* Enable Ethernet@WireSpeed. */ | /* Enable Ethernet@WireSpeed. */ | ||||
PHY_WRITE(sc, BRGPHY_MII_AUXCTL, 0x7007); | PHY_WRITE(sc, BRGPHY_MII_AUXCTL, 0x7007); | ||||
val = PHY_READ(sc, BRGPHY_MII_AUXCTL); | val = PHY_READ(sc, BRGPHY_MII_AUXCTL); | ||||
PHY_WRITE(sc, BRGPHY_MII_AUXCTL, val | (1 << 15) | (1 << 4)); | PHY_WRITE(sc, BRGPHY_MII_AUXCTL, val | (1 << 15) | (1 << 4)); | ||||
} | |||||
static void | |||||
brgphy_bcm54xx_clock_delay(struct mii_softc *sc) | |||||
{ | |||||
uint16_t val; | |||||
if (!(sc->mii_flags & (MIIF_RX_DELAY | MIIF_TX_DELAY))) | |||||
/* Adjusting the clocks in rgmii mode causes packet losses. */ | |||||
return; | |||||
PHY_WRITE(sc, BRGPHY_MII_AUXCTL, BRGPHY_AUXCTL_SHADOW_MISC | | |||||
BRGPHY_AUXCTL_SHADOW_MISC << BRGPHY_AUXCTL_MISC_READ_SHIFT); | |||||
val = PHY_READ(sc, BRGPHY_MII_AUXCTL); | |||||
val &= BRGPHY_AUXCTL_MISC_DATA_MASK; | |||||
if (sc->mii_flags & MIIF_RX_DELAY) | |||||
val |= BRGPHY_AUXCTL_MISC_RGMII_SKEW_EN; | |||||
else | |||||
val &= ~BRGPHY_AUXCTL_MISC_RGMII_SKEW_EN; | |||||
PHY_WRITE(sc, BRGPHY_MII_AUXCTL, BRGPHY_AUXCTL_MISC_WRITE_EN | | |||||
BRGPHY_AUXCTL_SHADOW_MISC | val); | |||||
PHY_WRITE(sc, BRGPHY_MII_SHADOW_1C, BRGPHY_SHADOW_1C_CLK_CTRL); | |||||
val = PHY_READ(sc, BRGPHY_MII_SHADOW_1C); | |||||
val &= BRGPHY_SHADOW_1C_DATA_MASK; | |||||
if (sc->mii_flags & MIIF_TX_DELAY) | |||||
val |= BRGPHY_SHADOW_1C_GTXCLK_EN; | |||||
else | |||||
val &= ~BRGPHY_SHADOW_1C_GTXCLK_EN; | |||||
PHY_WRITE(sc, BRGPHY_MII_SHADOW_1C, BRGPHY_SHADOW_1C_WRITE_EN | | |||||
BRGPHY_SHADOW_1C_CLK_CTRL | val); | |||||
} | } | ||||
static void | static void | ||||
brgphy_jumbo_settings(struct mii_softc *sc, u_long mtu) | brgphy_jumbo_settings(struct mii_softc *sc, u_long mtu) | ||||
{ | { | ||||
uint32_t val; | uint32_t val; | ||||
/* Set or clear jumbo frame settings in the PHY. */ | /* Set or clear jumbo frame settings in the PHY. */ | ||||
▲ Show 20 Lines • Show All 225 Lines • Show Last 20 Lines |