PERFORCE change 170675 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Mon Nov 16 20:09:12 UTC 2009
http://p4web.freebsd.org/chv.cgi?CH=170675
Change 170675 by hselasky at hselasky_laptop001 on 2009/11/16 20:08:37
USB controller:
- temporary fix for dynamic fifo sizing.
- correct a register definition
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb/controller/musb_otg.c#28 edit
.. //depot/projects/usb/src/sys/dev/usb/controller/musb_otg.h#8 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb/controller/musb_otg.c#28 (text+ko) ====
@@ -1688,12 +1688,14 @@
musbotg_init(struct musbotg_softc *sc)
{
struct usb_hw_ep_profile *pf;
+ uint16_t offset;
uint8_t nrx;
uint8_t ntx;
uint8_t temp;
uint8_t fsize;
uint8_t frx;
uint8_t ftx;
+ uint8_t dynfifo;
DPRINTFN(1, "start\n");
@@ -1776,11 +1778,20 @@
DPRINTFN(2, "Config Data: 0x%02x\n",
sc->sc_conf_data);
+ dynfifo = (sc->sc_conf_data & MUSB2_MASK_CD_DYNFIFOSZ) ? 1 : 0;
+
+ if (dynfifo) {
+ DPRINTFN(0, "Dynamic FIFO sizing detected! "
+ "Assuming 16Kbytes of FIFO RAM\n");
+ }
+
DPRINTFN(2, "HW version: 0x%04x\n",
MUSB2_READ_1(sc, MUSB2_REG_HWVERS));
/* initialise endpoint profiles */
+ offset = 0;
+
for (temp = 1; temp <= sc->sc_ep_max; temp++) {
pf = sc->sc_hw_ep_profile + temp;
@@ -1791,9 +1802,33 @@
frx = (fsize & MUSB2_MASK_RX_FSIZE) / 16;;
ftx = (fsize & MUSB2_MASK_TX_FSIZE);
- DPRINTF("Endpoint %u FIFO size: IN=%u, OUT=%u\n",
- temp, pf->max_in_frame_size,
- pf->max_out_frame_size);
+ DPRINTF("Endpoint %u FIFO size: IN=%u, OUT=%u, DYN=%d\n",
+ temp, ftx, frx, dynfifo);
+
+ if (dynfifo) {
+ if (frx && (temp <= nrx)) {
+ frx = 10; /* 1K */
+ MUSB2_WRITE_1(sc, MUSB2_REG_RXFIFOSZ,
+ MUSB2_VAL_FIFOSZ_512 |
+ MUSB2_MASK_FIFODB);
+
+ MUSB2_WRITE_1(sc, MUSB2_REG_RXFIFOADD,
+ offset >> 3);
+
+ offset += (1 << frx);
+ }
+ if (ftx && (temp <= ntx)) {
+ ftx = 10; /* 1K */
+ MUSB2_WRITE_1(sc, MUSB2_REG_TXFIFOSZ,
+ MUSB2_VAL_FIFOSZ_512 |
+ MUSB2_MASK_FIFODB);
+
+ MUSB2_WRITE_1(sc, MUSB2_REG_TXFIFOADD,
+ offset >> 3);
+
+ offset += (1 << ftx);
+ }
+ }
if (frx && ftx && (temp <= nrx) && (temp <= ntx)) {
pf->max_in_frame_size = 1 << ftx;
@@ -1824,6 +1859,8 @@
}
}
+ DPRINTFN(2, "Dynamic FIFO size = %d bytes\n", offset);
+
/* turn on default interrupts */
MUSB2_WRITE_1(sc, MUSB2_REG_INTUSBE,
==== //depot/projects/usb/src/sys/dev/usb/controller/musb_otg.h#8 (text+ko) ====
@@ -191,7 +191,7 @@
#define MUSB2_REG_EPFIFO(n) (0x0020 + (4*(n)))
-#define MUSB2_REG_CONFDATA 0x000F /* EPN=0 */
+#define MUSB2_REG_CONFDATA (0x000F + MUSB2_REG_INDEXED_CSR) /* EPN=0 */
#define MUSB2_MASK_CD_UTMI_DW 0x01
#define MUSB2_MASK_CD_SOFTCONE 0x02
#define MUSB2_MASK_CD_DYNFIFOSZ 0x04
More information about the p4-projects
mailing list