Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/vte/if_vte.c
Show First 20 Lines • Show All 1,599 Lines • ▼ Show 20 Lines | vte_tick(void *arg) | ||||
vte_txeof(sc); | vte_txeof(sc); | ||||
vte_watchdog(sc); | vte_watchdog(sc); | ||||
callout_reset(&sc->vte_tick_ch, hz, vte_tick, sc); | callout_reset(&sc->vte_tick_ch, hz, vte_tick, sc); | ||||
} | } | ||||
static void | static void | ||||
vte_reset(struct vte_softc *sc) | vte_reset(struct vte_softc *sc) | ||||
{ | { | ||||
uint16_t mcr; | uint16_t mcr, mdcsc; | ||||
int i; | int i; | ||||
mdcsc = CSR_READ_2(sc, VTE_MDCSC); | |||||
mcr = CSR_READ_2(sc, VTE_MCR1); | mcr = CSR_READ_2(sc, VTE_MCR1); | ||||
CSR_WRITE_2(sc, VTE_MCR1, mcr | MCR1_MAC_RESET); | CSR_WRITE_2(sc, VTE_MCR1, mcr | MCR1_MAC_RESET); | ||||
for (i = VTE_RESET_TIMEOUT; i > 0; i--) { | for (i = VTE_RESET_TIMEOUT; i > 0; i--) { | ||||
DELAY(10); | DELAY(10); | ||||
if ((CSR_READ_2(sc, VTE_MCR1) & MCR1_MAC_RESET) == 0) | if ((CSR_READ_2(sc, VTE_MCR1) & MCR1_MAC_RESET) == 0) | ||||
break; | break; | ||||
} | } | ||||
if (i == 0) | if (i == 0) | ||||
device_printf(sc->vte_dev, "reset timeout(0x%04x)!\n", mcr); | device_printf(sc->vte_dev, "reset timeout(0x%04x)!\n", mcr); | ||||
/* | /* | ||||
* Follow the guide of vendor recommended way to reset MAC. | * Follow the guide of vendor recommended way to reset MAC. | ||||
* Vendor confirms relying on MCR1_MAC_RESET of VTE_MCR1 is | * Vendor confirms relying on MCR1_MAC_RESET of VTE_MCR1 is | ||||
* not reliable so manually reset internal state machine. | * not reliable so manually reset internal state machine. | ||||
*/ | */ | ||||
CSR_WRITE_2(sc, VTE_MACSM, 0x0002); | CSR_WRITE_2(sc, VTE_MACSM, 0x0002); | ||||
CSR_WRITE_2(sc, VTE_MACSM, 0); | CSR_WRITE_2(sc, VTE_MACSM, 0); | ||||
DELAY(5000); | DELAY(5000); | ||||
/* | |||||
* On some SoCs (like Vortex86DX3) MDC speed control register value | |||||
* needs to be restored to original value instead of default one, | |||||
* otherwise some PHY registers may fail to be read. | |||||
*/ | |||||
if (mdcsc != MDCSC_DEFAULT) | |||||
CSR_WRITE_2(sc, VTE_MDCSC, mdcsc); | |||||
} | } | ||||
static void | static void | ||||
vte_init(void *xsc) | vte_init(void *xsc) | ||||
{ | { | ||||
struct vte_softc *sc; | struct vte_softc *sc; | ||||
sc = (struct vte_softc *)xsc; | sc = (struct vte_softc *)xsc; | ||||
▲ Show 20 Lines • Show All 442 Lines • Show Last 20 Lines |