diff options
author | mmel <mmel@FreeBSD.org> | 2016-01-28 14:11:59 +0000 |
---|---|---|
committer | mmel <mmel@FreeBSD.org> | 2016-01-28 14:11:59 +0000 |
commit | a0d10caff7d70d415567d9fa0d26a1edb67ddb90 (patch) | |
tree | ef843ecdfe61e0893df4ac898bda28e2355d0fd5 /sys/powerpc/ps3 | |
parent | fd752ed774f32a9029b1719067ee8463f9d53859 (diff) | |
download | FreeBSD-src-a0d10caff7d70d415567d9fa0d26a1edb67ddb90.zip FreeBSD-src-a0d10caff7d70d415567d9fa0d26a1edb67ddb90.tar.gz |
EHCI: Make core reset and port speed reading more generic.
Use driver settable callbacks for handling of:
- core post reset
- reading actual port speed
Typically, OTG enabled EHCI cores wants setting of USBMODE register,
but this register is not defined in EHCI specification and different
cores can have it on different offset.
Also, for cores with TT extension, actual port speed must be determinable.
But again, EHCI specification not covers this so this patch provides
function for two most common variant of speed bits layout.
Reviewed by: hselasky
Differential Revision: https://reviews.freebsd.org/D5088
Diffstat (limited to 'sys/powerpc/ps3')
-rw-r--r-- | sys/powerpc/ps3/ehci_ps3.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/sys/powerpc/ps3/ehci_ps3.c b/sys/powerpc/ps3/ehci_ps3.c index 2d57943..63c31a5 100644 --- a/sys/powerpc/ps3/ehci_ps3.c +++ b/sys/powerpc/ps3/ehci_ps3.c @@ -69,6 +69,17 @@ struct ps3_ehci_softc { struct bus_space tag; }; +static void +ehci_ps3_post_reset(struct ehci_softc *ehci_softc) +{ + uint32_t usbmode; + + /* Select big-endian mode */ + usbmode = EOREAD4(ehci_softc, EHCI_USBMODE_NOLPM); + usbmode |= EHCI_UM_ES_BE; + EOWRITE4(ehci_softc, EHCI_USBMODE_NOLPM, usbmode); +} + static int ehci_ps3_probe(device_t dev) { @@ -135,7 +146,7 @@ ehci_ps3_attach(device_t dev) goto error; } - sc->sc_flags |= EHCI_SCFLG_BIGEMMIO; + sc->sc_vendor_post_reset = ehci_ps3_post_reset; err = ehci_init(sc); if (err) { device_printf(dev, "USB init failed err=%d\n", err); |