If sc->sc_ep_max is already set use it to find the number of RX and TX

endpoints. The Allwinner driver will need to set this as the EPINFO
register isn't useful there.

Submitted by:	jmcneill
Reviewed by:	hselasky
Sponsored by:	DARPA, AFRL
Differential Revision:	https://reviews.freebsd.org/D5881
This commit is contained in:
andrew 2018-03-23 11:08:59 +00:00
parent 7dda8cb473
commit 407726c449

View File

@ -3168,19 +3168,24 @@ musbotg_init(struct musbotg_softc *sc)
MUSB2_WRITE_1(sc, MUSB2_REG_EPINDEX, 0);
/* read out number of endpoints */
if (sc->sc_ep_max == 0) {
/* read out number of endpoints */
nrx =
(MUSB2_READ_1(sc, MUSB2_REG_EPINFO) / 16);
nrx =
(MUSB2_READ_1(sc, MUSB2_REG_EPINFO) / 16);
ntx =
(MUSB2_READ_1(sc, MUSB2_REG_EPINFO) % 16);
ntx =
(MUSB2_READ_1(sc, MUSB2_REG_EPINFO) % 16);
sc->sc_ep_max = (nrx > ntx) ? nrx : ntx;
} else {
nrx = ntx = sc->sc_ep_max;
}
/* these numbers exclude the control endpoint */
DPRINTFN(2, "RX/TX endpoints: %u/%u\n", nrx, ntx);
sc->sc_ep_max = (nrx > ntx) ? nrx : ntx;
if (sc->sc_ep_max == 0) {
DPRINTFN(2, "ERROR: Looks like the clocks are off!\n");
}