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