xref: /openbmc/u-boot/drivers/usb/musb/musb_hcd.c (revision 9fc2ed40)
1 /*
2  * Mentor USB OTG Core host controller driver.
3  *
4  * Copyright (c) 2008 Texas Instruments
5  *
6  * SPDX-License-Identifier:	GPL-2.0+
7  *
8  * Author: Thomas Abraham t-abraham@ti.com, Texas Instruments
9  */
10 
11 #include <common.h>
12 #include <usb.h>
13 #include "musb_hcd.h"
14 
15 /* MSC control transfers */
16 #define USB_MSC_BBB_RESET 	0xFF
17 #define USB_MSC_BBB_GET_MAX_LUN	0xFE
18 
19 /* Endpoint configuration information */
20 static const struct musb_epinfo epinfo[3] = {
21 	{MUSB_BULK_EP, 1, 512}, /* EP1 - Bluk Out - 512 Bytes */
22 	{MUSB_BULK_EP, 0, 512}, /* EP1 - Bluk In  - 512 Bytes */
23 	{MUSB_INTR_EP, 0, 64}   /* EP2 - Interrupt IN - 64 Bytes */
24 };
25 
26 /* --- Virtual Root Hub ---------------------------------------------------- */
27 #ifdef MUSB_NO_MULTIPOINT
28 static int rh_devnum;
29 static u32 port_status;
30 
31 #include <usbroothubdes.h>
32 
33 #endif
34 
35 /*
36  * This function writes the data toggle value.
37  */
38 static void write_toggle(struct usb_device *dev, u8 ep, u8 dir_out)
39 {
40 	u16 toggle = usb_gettoggle(dev, ep, dir_out);
41 	u16 csr;
42 
43 	if (dir_out) {
44 		csr = readw(&musbr->txcsr);
45 		if (!toggle) {
46 			if (csr & MUSB_TXCSR_MODE)
47 				csr = MUSB_TXCSR_CLRDATATOG;
48 			else
49 				csr = 0;
50 			writew(csr, &musbr->txcsr);
51 		} else {
52 			csr |= MUSB_TXCSR_H_WR_DATATOGGLE;
53 			writew(csr, &musbr->txcsr);
54 			csr |= (toggle << MUSB_TXCSR_H_DATATOGGLE_SHIFT);
55 			writew(csr, &musbr->txcsr);
56 		}
57 	} else {
58 		if (!toggle) {
59 			csr = readw(&musbr->txcsr);
60 			if (csr & MUSB_TXCSR_MODE)
61 				csr = MUSB_RXCSR_CLRDATATOG;
62 			else
63 				csr = 0;
64 			writew(csr, &musbr->rxcsr);
65 		} else {
66 			csr = readw(&musbr->rxcsr);
67 			csr |= MUSB_RXCSR_H_WR_DATATOGGLE;
68 			writew(csr, &musbr->rxcsr);
69 			csr |= (toggle << MUSB_S_RXCSR_H_DATATOGGLE);
70 			writew(csr, &musbr->rxcsr);
71 		}
72 	}
73 }
74 
75 /*
76  * This function checks if RxStall has occured on the endpoint. If a RxStall
77  * has occured, the RxStall is cleared and 1 is returned. If RxStall has
78  * not occured, 0 is returned.
79  */
80 static u8 check_stall(u8 ep, u8 dir_out)
81 {
82 	u16 csr;
83 
84 	/* For endpoint 0 */
85 	if (!ep) {
86 		csr = readw(&musbr->txcsr);
87 		if (csr & MUSB_CSR0_H_RXSTALL) {
88 			csr &= ~MUSB_CSR0_H_RXSTALL;
89 			writew(csr, &musbr->txcsr);
90 			return 1;
91 		}
92 	} else { /* For non-ep0 */
93 		if (dir_out) { /* is it tx ep */
94 			csr = readw(&musbr->txcsr);
95 			if (csr & MUSB_TXCSR_H_RXSTALL) {
96 				csr &= ~MUSB_TXCSR_H_RXSTALL;
97 				writew(csr, &musbr->txcsr);
98 				return 1;
99 			}
100 		} else { /* is it rx ep */
101 			csr = readw(&musbr->rxcsr);
102 			if (csr & MUSB_RXCSR_H_RXSTALL) {
103 				csr &= ~MUSB_RXCSR_H_RXSTALL;
104 				writew(csr, &musbr->rxcsr);
105 				return 1;
106 			}
107 		}
108 	}
109 	return 0;
110 }
111 
112 /*
113  * waits until ep0 is ready. Returns 0 if ep is ready, -1 for timeout
114  * error and -2 for stall.
115  */
116 static int wait_until_ep0_ready(struct usb_device *dev, u32 bit_mask)
117 {
118 	u16 csr;
119 	int result = 1;
120 	int timeout = CONFIG_MUSB_TIMEOUT;
121 
122 	while (result > 0) {
123 		csr = readw(&musbr->txcsr);
124 		if (csr & MUSB_CSR0_H_ERROR) {
125 			csr &= ~MUSB_CSR0_H_ERROR;
126 			writew(csr, &musbr->txcsr);
127 			dev->status = USB_ST_CRC_ERR;
128 			result = -1;
129 			break;
130 		}
131 
132 		switch (bit_mask) {
133 		case MUSB_CSR0_TXPKTRDY:
134 			if (!(csr & MUSB_CSR0_TXPKTRDY)) {
135 				if (check_stall(MUSB_CONTROL_EP, 0)) {
136 					dev->status = USB_ST_STALLED;
137 					result = -2;
138 				} else
139 					result = 0;
140 			}
141 			break;
142 
143 		case MUSB_CSR0_RXPKTRDY:
144 			if (check_stall(MUSB_CONTROL_EP, 0)) {
145 				dev->status = USB_ST_STALLED;
146 				result = -2;
147 			} else
148 				if (csr & MUSB_CSR0_RXPKTRDY)
149 					result = 0;
150 			break;
151 
152 		case MUSB_CSR0_H_REQPKT:
153 			if (!(csr & MUSB_CSR0_H_REQPKT)) {
154 				if (check_stall(MUSB_CONTROL_EP, 0)) {
155 					dev->status = USB_ST_STALLED;
156 					result = -2;
157 				} else
158 					result = 0;
159 			}
160 			break;
161 		}
162 
163 		/* Check the timeout */
164 		if (--timeout)
165 			udelay(1);
166 		else {
167 			dev->status = USB_ST_CRC_ERR;
168 			result = -1;
169 			break;
170 		}
171 	}
172 
173 	return result;
174 }
175 
176 /*
177  * waits until tx ep is ready. Returns 1 when ep is ready and 0 on error.
178  */
179 static int wait_until_txep_ready(struct usb_device *dev, u8 ep)
180 {
181 	u16 csr;
182 	int timeout = CONFIG_MUSB_TIMEOUT;
183 
184 	do {
185 		if (check_stall(ep, 1)) {
186 			dev->status = USB_ST_STALLED;
187 			return 0;
188 		}
189 
190 		csr = readw(&musbr->txcsr);
191 		if (csr & MUSB_TXCSR_H_ERROR) {
192 			dev->status = USB_ST_CRC_ERR;
193 			return 0;
194 		}
195 
196 		/* Check the timeout */
197 		if (--timeout)
198 			udelay(1);
199 		else {
200 			dev->status = USB_ST_CRC_ERR;
201 			return -1;
202 		}
203 
204 	} while (csr & MUSB_TXCSR_TXPKTRDY);
205 	return 1;
206 }
207 
208 /*
209  * waits until rx ep is ready. Returns 1 when ep is ready and 0 on error.
210  */
211 static int wait_until_rxep_ready(struct usb_device *dev, u8 ep)
212 {
213 	u16 csr;
214 	int timeout = CONFIG_MUSB_TIMEOUT;
215 
216 	do {
217 		if (check_stall(ep, 0)) {
218 			dev->status = USB_ST_STALLED;
219 			return 0;
220 		}
221 
222 		csr = readw(&musbr->rxcsr);
223 		if (csr & MUSB_RXCSR_H_ERROR) {
224 			dev->status = USB_ST_CRC_ERR;
225 			return 0;
226 		}
227 
228 		/* Check the timeout */
229 		if (--timeout)
230 			udelay(1);
231 		else {
232 			dev->status = USB_ST_CRC_ERR;
233 			return -1;
234 		}
235 
236 	} while (!(csr & MUSB_RXCSR_RXPKTRDY));
237 	return 1;
238 }
239 
240 /*
241  * This function performs the setup phase of the control transfer
242  */
243 static int ctrlreq_setup_phase(struct usb_device *dev, struct devrequest *setup)
244 {
245 	int result;
246 	u16 csr;
247 
248 	/* write the control request to ep0 fifo */
249 	write_fifo(MUSB_CONTROL_EP, sizeof(struct devrequest), (void *)setup);
250 
251 	/* enable transfer of setup packet */
252 	csr = readw(&musbr->txcsr);
253 	csr |= (MUSB_CSR0_TXPKTRDY|MUSB_CSR0_H_SETUPPKT);
254 	writew(csr, &musbr->txcsr);
255 
256 	/* wait until the setup packet is transmitted */
257 	result = wait_until_ep0_ready(dev, MUSB_CSR0_TXPKTRDY);
258 	dev->act_len = 0;
259 	return result;
260 }
261 
262 /*
263  * This function handles the control transfer in data phase
264  */
265 static int ctrlreq_in_data_phase(struct usb_device *dev, u32 len, void *buffer)
266 {
267 	u16 csr;
268 	u32 rxlen = 0;
269 	u32 nextlen = 0;
270 	u8  maxpktsize = (1 << dev->maxpacketsize) * 8;
271 	u8  *rxbuff = (u8 *)buffer;
272 	u8  rxedlength;
273 	int result;
274 
275 	while (rxlen < len) {
276 		/* Determine the next read length */
277 		nextlen = ((len-rxlen) > maxpktsize) ? maxpktsize : (len-rxlen);
278 
279 		/* Set the ReqPkt bit */
280 		csr = readw(&musbr->txcsr);
281 		writew(csr | MUSB_CSR0_H_REQPKT, &musbr->txcsr);
282 		result = wait_until_ep0_ready(dev, MUSB_CSR0_RXPKTRDY);
283 		if (result < 0)
284 			return result;
285 
286 		/* Actual number of bytes received by usb */
287 		rxedlength = readb(&musbr->rxcount);
288 
289 		/* Read the data from the RxFIFO */
290 		read_fifo(MUSB_CONTROL_EP, rxedlength, &rxbuff[rxlen]);
291 
292 		/* Clear the RxPktRdy Bit */
293 		csr = readw(&musbr->txcsr);
294 		csr &= ~MUSB_CSR0_RXPKTRDY;
295 		writew(csr, &musbr->txcsr);
296 
297 		/* short packet? */
298 		if (rxedlength != nextlen) {
299 			dev->act_len += rxedlength;
300 			break;
301 		}
302 		rxlen += nextlen;
303 		dev->act_len = rxlen;
304 	}
305 	return 0;
306 }
307 
308 /*
309  * This function handles the control transfer out data phase
310  */
311 static int ctrlreq_out_data_phase(struct usb_device *dev, u32 len, void *buffer)
312 {
313 	u16 csr;
314 	u32 txlen = 0;
315 	u32 nextlen = 0;
316 	u8  maxpktsize = (1 << dev->maxpacketsize) * 8;
317 	u8  *txbuff = (u8 *)buffer;
318 	int result = 0;
319 
320 	while (txlen < len) {
321 		/* Determine the next write length */
322 		nextlen = ((len-txlen) > maxpktsize) ? maxpktsize : (len-txlen);
323 
324 		/* Load the data to send in FIFO */
325 		write_fifo(MUSB_CONTROL_EP, txlen, &txbuff[txlen]);
326 
327 		/* Set TXPKTRDY bit */
328 		csr = readw(&musbr->txcsr);
329 
330 		csr |= MUSB_CSR0_TXPKTRDY;
331 #if !defined(CONFIG_SOC_DM365)
332 		csr |= MUSB_CSR0_H_DIS_PING;
333 #endif
334 		writew(csr, &musbr->txcsr);
335 		result = wait_until_ep0_ready(dev, MUSB_CSR0_TXPKTRDY);
336 		if (result < 0)
337 			break;
338 
339 		txlen += nextlen;
340 		dev->act_len = txlen;
341 	}
342 	return result;
343 }
344 
345 /*
346  * This function handles the control transfer out status phase
347  */
348 static int ctrlreq_out_status_phase(struct usb_device *dev)
349 {
350 	u16 csr;
351 	int result;
352 
353 	/* Set the StatusPkt bit */
354 	csr = readw(&musbr->txcsr);
355 	csr |= (MUSB_CSR0_TXPKTRDY | MUSB_CSR0_H_STATUSPKT);
356 #if !defined(CONFIG_SOC_DM365)
357 	csr |= MUSB_CSR0_H_DIS_PING;
358 #endif
359 	writew(csr, &musbr->txcsr);
360 
361 	/* Wait until TXPKTRDY bit is cleared */
362 	result = wait_until_ep0_ready(dev, MUSB_CSR0_TXPKTRDY);
363 	return result;
364 }
365 
366 /*
367  * This function handles the control transfer in status phase
368  */
369 static int ctrlreq_in_status_phase(struct usb_device *dev)
370 {
371 	u16 csr;
372 	int result;
373 
374 	/* Set the StatusPkt bit and ReqPkt bit */
375 	csr = MUSB_CSR0_H_REQPKT | MUSB_CSR0_H_STATUSPKT;
376 #if !defined(CONFIG_SOC_DM365)
377 	csr |= MUSB_CSR0_H_DIS_PING;
378 #endif
379 	writew(csr, &musbr->txcsr);
380 	result = wait_until_ep0_ready(dev, MUSB_CSR0_H_REQPKT);
381 
382 	/* clear StatusPkt bit and RxPktRdy bit */
383 	csr = readw(&musbr->txcsr);
384 	csr &= ~(MUSB_CSR0_RXPKTRDY | MUSB_CSR0_H_STATUSPKT);
385 	writew(csr, &musbr->txcsr);
386 	return result;
387 }
388 
389 /*
390  * determines the speed of the device (High/Full/Slow)
391  */
392 static u8 get_dev_speed(struct usb_device *dev)
393 {
394 	return (dev->speed == USB_SPEED_HIGH) ? MUSB_TYPE_SPEED_HIGH :
395 		((dev->speed == USB_SPEED_LOW) ? MUSB_TYPE_SPEED_LOW :
396 						MUSB_TYPE_SPEED_FULL);
397 }
398 
399 /*
400  * configure the hub address and the port address.
401  */
402 static void config_hub_port(struct usb_device *dev, u8 ep)
403 {
404 	u8 chid;
405 	u8 hub;
406 
407 	/* Find out the nearest parent which is high speed */
408 	while (dev->parent->parent != NULL)
409 		if (get_dev_speed(dev->parent) !=  MUSB_TYPE_SPEED_HIGH)
410 			dev = dev->parent;
411 		else
412 			break;
413 
414 	/* determine the port address at that hub */
415 	hub = dev->parent->devnum;
416 	for (chid = 0; chid < USB_MAXCHILDREN; chid++)
417 		if (dev->parent->children[chid] == dev)
418 			break;
419 
420 #ifndef MUSB_NO_MULTIPOINT
421 	/* configure the hub address and the port address */
422 	writeb(hub, &musbr->tar[ep].txhubaddr);
423 	writeb((chid + 1), &musbr->tar[ep].txhubport);
424 	writeb(hub, &musbr->tar[ep].rxhubaddr);
425 	writeb((chid + 1), &musbr->tar[ep].rxhubport);
426 #endif
427 }
428 
429 #ifdef MUSB_NO_MULTIPOINT
430 
431 static void musb_port_reset(int do_reset)
432 {
433 	u8 power = readb(&musbr->power);
434 
435 	if (do_reset) {
436 		power &= 0xf0;
437 		writeb(power | MUSB_POWER_RESET, &musbr->power);
438 		port_status |= USB_PORT_STAT_RESET;
439 		port_status &= ~USB_PORT_STAT_ENABLE;
440 		udelay(30000);
441 	} else {
442 		writeb(power & ~MUSB_POWER_RESET, &musbr->power);
443 
444 		power = readb(&musbr->power);
445 		if (power & MUSB_POWER_HSMODE)
446 			port_status |= USB_PORT_STAT_HIGH_SPEED;
447 
448 		port_status &= ~(USB_PORT_STAT_RESET | (USB_PORT_STAT_C_CONNECTION << 16));
449 		port_status |= USB_PORT_STAT_ENABLE
450 			| (USB_PORT_STAT_C_RESET << 16)
451 			| (USB_PORT_STAT_C_ENABLE << 16);
452 	}
453 }
454 
455 /*
456  * root hub control
457  */
458 static int musb_submit_rh_msg(struct usb_device *dev, unsigned long pipe,
459 			      void *buffer, int transfer_len,
460 			      struct devrequest *cmd)
461 {
462 	int leni = transfer_len;
463 	int len = 0;
464 	int stat = 0;
465 	u32 datab[4];
466 	const u8 *data_buf = (u8 *) datab;
467 	u16 bmRType_bReq;
468 	u16 wValue;
469 	u16 wIndex;
470 	u16 wLength;
471 	u16 int_usb;
472 
473 	if ((pipe & PIPE_INTERRUPT) == PIPE_INTERRUPT) {
474 		debug("Root-Hub submit IRQ: NOT implemented\n");
475 		return 0;
476 	}
477 
478 	bmRType_bReq = cmd->requesttype | (cmd->request << 8);
479 	wValue = swap_16(cmd->value);
480 	wIndex = swap_16(cmd->index);
481 	wLength = swap_16(cmd->length);
482 
483 	debug("--- HUB ----------------------------------------\n");
484 	debug("submit rh urb, req=%x val=%#x index=%#x len=%d\n",
485 	    bmRType_bReq, wValue, wIndex, wLength);
486 	debug("------------------------------------------------\n");
487 
488 	switch (bmRType_bReq) {
489 	case RH_GET_STATUS:
490 		debug("RH_GET_STATUS\n");
491 
492 		*(__u16 *) data_buf = swap_16(1);
493 		len = 2;
494 		break;
495 
496 	case RH_GET_STATUS | RH_INTERFACE:
497 		debug("RH_GET_STATUS | RH_INTERFACE\n");
498 
499 		*(__u16 *) data_buf = swap_16(0);
500 		len = 2;
501 		break;
502 
503 	case RH_GET_STATUS | RH_ENDPOINT:
504 		debug("RH_GET_STATUS | RH_ENDPOINT\n");
505 
506 		*(__u16 *) data_buf = swap_16(0);
507 		len = 2;
508 		break;
509 
510 	case RH_GET_STATUS | RH_CLASS:
511 		debug("RH_GET_STATUS | RH_CLASS\n");
512 
513 		*(__u32 *) data_buf = swap_32(0);
514 		len = 4;
515 		break;
516 
517 	case RH_GET_STATUS | RH_OTHER | RH_CLASS:
518 		debug("RH_GET_STATUS | RH_OTHER | RH_CLASS\n");
519 
520 		int_usb = readw(&musbr->intrusb);
521 		if (int_usb & MUSB_INTR_CONNECT) {
522 			port_status |= USB_PORT_STAT_CONNECTION
523 				| (USB_PORT_STAT_C_CONNECTION << 16);
524 			port_status |= USB_PORT_STAT_HIGH_SPEED
525 				| USB_PORT_STAT_ENABLE;
526 		}
527 
528 		if (port_status & USB_PORT_STAT_RESET)
529 			musb_port_reset(0);
530 
531 		*(__u32 *) data_buf = swap_32(port_status);
532 		len = 4;
533 		break;
534 
535 	case RH_CLEAR_FEATURE | RH_ENDPOINT:
536 		debug("RH_CLEAR_FEATURE | RH_ENDPOINT\n");
537 
538 		switch (wValue) {
539 		case RH_ENDPOINT_STALL:
540 			debug("C_HUB_ENDPOINT_STALL\n");
541 			len = 0;
542 			break;
543 		}
544 		port_status &= ~(1 << wValue);
545 		break;
546 
547 	case RH_CLEAR_FEATURE | RH_CLASS:
548 		debug("RH_CLEAR_FEATURE | RH_CLASS\n");
549 
550 		switch (wValue) {
551 		case RH_C_HUB_LOCAL_POWER:
552 			debug("C_HUB_LOCAL_POWER\n");
553 			len = 0;
554 			break;
555 
556 		case RH_C_HUB_OVER_CURRENT:
557 			debug("C_HUB_OVER_CURRENT\n");
558 			len = 0;
559 			break;
560 		}
561 		port_status &= ~(1 << wValue);
562 		break;
563 
564 	case RH_CLEAR_FEATURE | RH_OTHER | RH_CLASS:
565 		debug("RH_CLEAR_FEATURE | RH_OTHER | RH_CLASS\n");
566 
567 		switch (wValue) {
568 		case RH_PORT_ENABLE:
569 			len = 0;
570 			break;
571 
572 		case RH_PORT_SUSPEND:
573 			len = 0;
574 			break;
575 
576 		case RH_PORT_POWER:
577 			len = 0;
578 			break;
579 
580 		case RH_C_PORT_CONNECTION:
581 			len = 0;
582 			break;
583 
584 		case RH_C_PORT_ENABLE:
585 			len = 0;
586 			break;
587 
588 		case RH_C_PORT_SUSPEND:
589 			len = 0;
590 			break;
591 
592 		case RH_C_PORT_OVER_CURRENT:
593 			len = 0;
594 			break;
595 
596 		case RH_C_PORT_RESET:
597 			len = 0;
598 			break;
599 
600 		default:
601 			debug("invalid wValue\n");
602 			stat = USB_ST_STALLED;
603 		}
604 
605 		port_status &= ~(1 << wValue);
606 		break;
607 
608 	case RH_SET_FEATURE | RH_OTHER | RH_CLASS:
609 		debug("RH_SET_FEATURE | RH_OTHER | RH_CLASS\n");
610 
611 		switch (wValue) {
612 		case RH_PORT_SUSPEND:
613 			len = 0;
614 			break;
615 
616 		case RH_PORT_RESET:
617 			musb_port_reset(1);
618 			len = 0;
619 			break;
620 
621 		case RH_PORT_POWER:
622 			len = 0;
623 			break;
624 
625 		case RH_PORT_ENABLE:
626 			len = 0;
627 			break;
628 
629 		default:
630 			debug("invalid wValue\n");
631 			stat = USB_ST_STALLED;
632 		}
633 
634 		port_status |= 1 << wValue;
635 		break;
636 
637 	case RH_SET_ADDRESS:
638 		debug("RH_SET_ADDRESS\n");
639 
640 		rh_devnum = wValue;
641 		len = 0;
642 		break;
643 
644 	case RH_GET_DESCRIPTOR:
645 		debug("RH_GET_DESCRIPTOR: %x, %d\n", wValue, wLength);
646 
647 		switch (wValue) {
648 		case (USB_DT_DEVICE << 8):	/* device descriptor */
649 			len = min_t(unsigned int,
650 				    leni, min_t(unsigned int,
651 						sizeof(root_hub_dev_des),
652 						wLength));
653 			data_buf = root_hub_dev_des;
654 			break;
655 
656 		case (USB_DT_CONFIG << 8):	/* configuration descriptor */
657 			len = min_t(unsigned int,
658 				    leni, min_t(unsigned int,
659 						sizeof(root_hub_config_des),
660 						wLength));
661 			data_buf = root_hub_config_des;
662 			break;
663 
664 		case ((USB_DT_STRING << 8) | 0x00):	/* string 0 descriptors */
665 			len = min_t(unsigned int,
666 				    leni, min_t(unsigned int,
667 						sizeof(root_hub_str_index0),
668 						wLength));
669 			data_buf = root_hub_str_index0;
670 			break;
671 
672 		case ((USB_DT_STRING << 8) | 0x01):	/* string 1 descriptors */
673 			len = min_t(unsigned int,
674 				    leni, min_t(unsigned int,
675 						sizeof(root_hub_str_index1),
676 						wLength));
677 			data_buf = root_hub_str_index1;
678 			break;
679 
680 		default:
681 			debug("invalid wValue\n");
682 			stat = USB_ST_STALLED;
683 		}
684 
685 		break;
686 
687 	case RH_GET_DESCRIPTOR | RH_CLASS: {
688 		u8 *_data_buf = (u8 *) datab;
689 		debug("RH_GET_DESCRIPTOR | RH_CLASS\n");
690 
691 		_data_buf[0] = 0x09;	/* min length; */
692 		_data_buf[1] = 0x29;
693 		_data_buf[2] = 0x1;	/* 1 port */
694 		_data_buf[3] = 0x01;	/* per-port power switching */
695 		_data_buf[3] |= 0x10;	/* no overcurrent reporting */
696 
697 		/* Corresponds to data_buf[4-7] */
698 		_data_buf[4] = 0;
699 		_data_buf[5] = 5;
700 		_data_buf[6] = 0;
701 		_data_buf[7] = 0x02;
702 		_data_buf[8] = 0xff;
703 
704 		len = min_t(unsigned int, leni,
705 			    min_t(unsigned int, data_buf[0], wLength));
706 		break;
707 	}
708 
709 	case RH_GET_CONFIGURATION:
710 		debug("RH_GET_CONFIGURATION\n");
711 
712 		*(__u8 *) data_buf = 0x01;
713 		len = 1;
714 		break;
715 
716 	case RH_SET_CONFIGURATION:
717 		debug("RH_SET_CONFIGURATION\n");
718 
719 		len = 0;
720 		break;
721 
722 	default:
723 		debug("*** *** *** unsupported root hub command *** *** ***\n");
724 		stat = USB_ST_STALLED;
725 	}
726 
727 	len = min_t(int, len, leni);
728 	if (buffer != data_buf)
729 		memcpy(buffer, data_buf, len);
730 
731 	dev->act_len = len;
732 	dev->status = stat;
733 	debug("dev act_len %d, status %lu\n", dev->act_len, dev->status);
734 
735 	return stat;
736 }
737 
738 static void musb_rh_init(void)
739 {
740 	rh_devnum = 0;
741 	port_status = 0;
742 }
743 
744 #else
745 
746 static void musb_rh_init(void) {}
747 
748 #endif
749 
750 /*
751  * do a control transfer
752  */
753 int submit_control_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
754 			int len, struct devrequest *setup)
755 {
756 	int devnum = usb_pipedevice(pipe);
757 	u8  devspeed;
758 
759 #ifdef MUSB_NO_MULTIPOINT
760 	/* Control message is for the HUB? */
761 	if (devnum == rh_devnum) {
762 		int stat = musb_submit_rh_msg(dev, pipe, buffer, len, setup);
763 		if (stat)
764 			return stat;
765 	}
766 #endif
767 
768 	/* select control endpoint */
769 	writeb(MUSB_CONTROL_EP, &musbr->index);
770 	readw(&musbr->txcsr);
771 
772 #ifndef MUSB_NO_MULTIPOINT
773 	/* target addr and (for multipoint) hub addr/port */
774 	writeb(devnum, &musbr->tar[MUSB_CONTROL_EP].txfuncaddr);
775 	writeb(devnum, &musbr->tar[MUSB_CONTROL_EP].rxfuncaddr);
776 #endif
777 
778 	/* configure the hub address and the port number as required */
779 	devspeed = get_dev_speed(dev);
780 	if ((musb_ishighspeed()) && (dev->parent != NULL) &&
781 		(devspeed != MUSB_TYPE_SPEED_HIGH)) {
782 		config_hub_port(dev, MUSB_CONTROL_EP);
783 		writeb(devspeed << 6, &musbr->txtype);
784 	} else {
785 		writeb(musb_cfg.musb_speed << 6, &musbr->txtype);
786 #ifndef MUSB_NO_MULTIPOINT
787 		writeb(0, &musbr->tar[MUSB_CONTROL_EP].txhubaddr);
788 		writeb(0, &musbr->tar[MUSB_CONTROL_EP].txhubport);
789 		writeb(0, &musbr->tar[MUSB_CONTROL_EP].rxhubaddr);
790 		writeb(0, &musbr->tar[MUSB_CONTROL_EP].rxhubport);
791 #endif
792 	}
793 
794 	/* Control transfer setup phase */
795 	if (ctrlreq_setup_phase(dev, setup) < 0)
796 		return 0;
797 
798 	switch (setup->request) {
799 	case USB_REQ_GET_DESCRIPTOR:
800 	case USB_REQ_GET_CONFIGURATION:
801 	case USB_REQ_GET_INTERFACE:
802 	case USB_REQ_GET_STATUS:
803 	case USB_MSC_BBB_GET_MAX_LUN:
804 		/* control transfer in-data-phase */
805 		if (ctrlreq_in_data_phase(dev, len, buffer) < 0)
806 			return 0;
807 		/* control transfer out-status-phase */
808 		if (ctrlreq_out_status_phase(dev) < 0)
809 			return 0;
810 		break;
811 
812 	case USB_REQ_SET_ADDRESS:
813 	case USB_REQ_SET_CONFIGURATION:
814 	case USB_REQ_SET_FEATURE:
815 	case USB_REQ_SET_INTERFACE:
816 	case USB_REQ_CLEAR_FEATURE:
817 	case USB_MSC_BBB_RESET:
818 		/* control transfer in status phase */
819 		if (ctrlreq_in_status_phase(dev) < 0)
820 			return 0;
821 		break;
822 
823 	case USB_REQ_SET_DESCRIPTOR:
824 		/* control transfer out data phase */
825 		if (ctrlreq_out_data_phase(dev, len, buffer) < 0)
826 			return 0;
827 		/* control transfer in status phase */
828 		if (ctrlreq_in_status_phase(dev) < 0)
829 			return 0;
830 		break;
831 
832 	default:
833 		/* unhandled control transfer */
834 		return -1;
835 	}
836 
837 	dev->status = 0;
838 	dev->act_len = len;
839 
840 #ifdef MUSB_NO_MULTIPOINT
841 	/* Set device address to USB_FADDR register */
842 	if (setup->request == USB_REQ_SET_ADDRESS)
843 		writeb(dev->devnum, &musbr->faddr);
844 #endif
845 
846 	return len;
847 }
848 
849 /*
850  * do a bulk transfer
851  */
852 int submit_bulk_msg(struct usb_device *dev, unsigned long pipe,
853 					void *buffer, int len)
854 {
855 	int dir_out = usb_pipeout(pipe);
856 	int ep = usb_pipeendpoint(pipe);
857 #ifndef MUSB_NO_MULTIPOINT
858 	int devnum = usb_pipedevice(pipe);
859 #endif
860 	u8  type;
861 	u16 csr;
862 	u32 txlen = 0;
863 	u32 nextlen = 0;
864 	u8  devspeed;
865 
866 	/* select bulk endpoint */
867 	writeb(MUSB_BULK_EP, &musbr->index);
868 
869 #ifndef MUSB_NO_MULTIPOINT
870 	/* write the address of the device */
871 	if (dir_out)
872 		writeb(devnum, &musbr->tar[MUSB_BULK_EP].txfuncaddr);
873 	else
874 		writeb(devnum, &musbr->tar[MUSB_BULK_EP].rxfuncaddr);
875 #endif
876 
877 	/* configure the hub address and the port number as required */
878 	devspeed = get_dev_speed(dev);
879 	if ((musb_ishighspeed()) && (dev->parent != NULL) &&
880 		(devspeed != MUSB_TYPE_SPEED_HIGH)) {
881 		/*
882 		 * MUSB is in high speed and the destination device is full
883 		 * speed device. So configure the hub address and port
884 		 * address registers.
885 		 */
886 		config_hub_port(dev, MUSB_BULK_EP);
887 	} else {
888 #ifndef MUSB_NO_MULTIPOINT
889 		if (dir_out) {
890 			writeb(0, &musbr->tar[MUSB_BULK_EP].txhubaddr);
891 			writeb(0, &musbr->tar[MUSB_BULK_EP].txhubport);
892 		} else {
893 			writeb(0, &musbr->tar[MUSB_BULK_EP].rxhubaddr);
894 			writeb(0, &musbr->tar[MUSB_BULK_EP].rxhubport);
895 		}
896 #endif
897 		devspeed = musb_cfg.musb_speed;
898 	}
899 
900 	/* Write the saved toggle bit value */
901 	write_toggle(dev, ep, dir_out);
902 
903 	if (dir_out) { /* bulk-out transfer */
904 		/* Program the TxType register */
905 		type = (devspeed << MUSB_TYPE_SPEED_SHIFT) |
906 			   (MUSB_TYPE_PROTO_BULK << MUSB_TYPE_PROTO_SHIFT) |
907 			   (ep & MUSB_TYPE_REMOTE_END);
908 		writeb(type, &musbr->txtype);
909 
910 		/* Write maximum packet size to the TxMaxp register */
911 		writew(dev->epmaxpacketout[ep], &musbr->txmaxp);
912 		while (txlen < len) {
913 			nextlen = ((len-txlen) < dev->epmaxpacketout[ep]) ?
914 					(len-txlen) : dev->epmaxpacketout[ep];
915 
916 #ifdef CONFIG_USB_BLACKFIN
917 			/* Set the transfer data size */
918 			writew(nextlen, &musbr->txcount);
919 #endif
920 
921 			/* Write the data to the FIFO */
922 			write_fifo(MUSB_BULK_EP, nextlen,
923 					(void *)(((u8 *)buffer) + txlen));
924 
925 			/* Set the TxPktRdy bit */
926 			csr = readw(&musbr->txcsr);
927 			writew(csr | MUSB_TXCSR_TXPKTRDY, &musbr->txcsr);
928 
929 			/* Wait until the TxPktRdy bit is cleared */
930 			if (wait_until_txep_ready(dev, MUSB_BULK_EP) != 1) {
931 				readw(&musbr->txcsr);
932 				usb_settoggle(dev, ep, dir_out,
933 				(csr >> MUSB_TXCSR_H_DATATOGGLE_SHIFT) & 1);
934 				dev->act_len = txlen;
935 				return 0;
936 			}
937 			txlen += nextlen;
938 		}
939 
940 		/* Keep a copy of the data toggle bit */
941 		csr = readw(&musbr->txcsr);
942 		usb_settoggle(dev, ep, dir_out,
943 				(csr >> MUSB_TXCSR_H_DATATOGGLE_SHIFT) & 1);
944 	} else { /* bulk-in transfer */
945 		/* Write the saved toggle bit value */
946 		write_toggle(dev, ep, dir_out);
947 
948 		/* Program the RxType register */
949 		type = (devspeed << MUSB_TYPE_SPEED_SHIFT) |
950 			   (MUSB_TYPE_PROTO_BULK << MUSB_TYPE_PROTO_SHIFT) |
951 			   (ep & MUSB_TYPE_REMOTE_END);
952 		writeb(type, &musbr->rxtype);
953 
954 		/* Write the maximum packet size to the RxMaxp register */
955 		writew(dev->epmaxpacketin[ep], &musbr->rxmaxp);
956 		while (txlen < len) {
957 			nextlen = ((len-txlen) < dev->epmaxpacketin[ep]) ?
958 					(len-txlen) : dev->epmaxpacketin[ep];
959 
960 			/* Set the ReqPkt bit */
961 			csr = readw(&musbr->rxcsr);
962 			writew(csr | MUSB_RXCSR_H_REQPKT, &musbr->rxcsr);
963 
964 			/* Wait until the RxPktRdy bit is set */
965 			if (wait_until_rxep_ready(dev, MUSB_BULK_EP) != 1) {
966 				csr = readw(&musbr->rxcsr);
967 				usb_settoggle(dev, ep, dir_out,
968 				(csr >> MUSB_S_RXCSR_H_DATATOGGLE) & 1);
969 				csr &= ~MUSB_RXCSR_RXPKTRDY;
970 				writew(csr, &musbr->rxcsr);
971 				dev->act_len = txlen;
972 				return 0;
973 			}
974 
975 			/* Read the data from the FIFO */
976 			read_fifo(MUSB_BULK_EP, nextlen,
977 					(void *)(((u8 *)buffer) + txlen));
978 
979 			/* Clear the RxPktRdy bit */
980 			csr =  readw(&musbr->rxcsr);
981 			csr &= ~MUSB_RXCSR_RXPKTRDY;
982 			writew(csr, &musbr->rxcsr);
983 			txlen += nextlen;
984 		}
985 
986 		/* Keep a copy of the data toggle bit */
987 		csr = readw(&musbr->rxcsr);
988 		usb_settoggle(dev, ep, dir_out,
989 				(csr >> MUSB_S_RXCSR_H_DATATOGGLE) & 1);
990 	}
991 
992 	/* bulk transfer is complete */
993 	dev->status = 0;
994 	dev->act_len = len;
995 	return 0;
996 }
997 
998 /*
999  * This function initializes the usb controller module.
1000  */
1001 int usb_lowlevel_init(int index, enum usb_init_type init, void **controller)
1002 {
1003 	u8  power;
1004 	u32 timeout;
1005 
1006 	musb_rh_init();
1007 
1008 	if (musb_platform_init() == -1)
1009 		return -1;
1010 
1011 	/* Configure all the endpoint FIFO's and start usb controller */
1012 	musbr = musb_cfg.regs;
1013 	musb_configure_ep(&epinfo[0], ARRAY_SIZE(epinfo));
1014 	musb_start();
1015 
1016 	/*
1017 	 * Wait until musb is enabled in host mode with a timeout. There
1018 	 * should be a usb device connected.
1019 	 */
1020 	timeout = musb_cfg.timeout;
1021 	while (--timeout)
1022 		if (readb(&musbr->devctl) & MUSB_DEVCTL_HM)
1023 			break;
1024 
1025 	/* if musb core is not in host mode, then return */
1026 	if (!timeout)
1027 		return -1;
1028 
1029 	/* start usb bus reset */
1030 	power = readb(&musbr->power);
1031 	writeb(power | MUSB_POWER_RESET, &musbr->power);
1032 
1033 	/* After initiating a usb reset, wait for about 20ms to 30ms */
1034 	udelay(30000);
1035 
1036 	/* stop usb bus reset */
1037 	power = readb(&musbr->power);
1038 	power &= ~MUSB_POWER_RESET;
1039 	writeb(power, &musbr->power);
1040 
1041 	/* Determine if the connected device is a high/full/low speed device */
1042 	musb_cfg.musb_speed = (readb(&musbr->power) & MUSB_POWER_HSMODE) ?
1043 			MUSB_TYPE_SPEED_HIGH :
1044 			((readb(&musbr->devctl) & MUSB_DEVCTL_FSDEV) ?
1045 			MUSB_TYPE_SPEED_FULL : MUSB_TYPE_SPEED_LOW);
1046 	return 0;
1047 }
1048 
1049 /*
1050  * This function stops the operation of the davinci usb module.
1051  */
1052 int usb_lowlevel_stop(int index)
1053 {
1054 	/* Reset the USB module */
1055 	musb_platform_deinit();
1056 	writeb(0, &musbr->devctl);
1057 	return 0;
1058 }
1059 
1060 /*
1061  * This function supports usb interrupt transfers. Currently, usb interrupt
1062  * transfers are not supported.
1063  */
1064 int submit_int_msg(struct usb_device *dev, unsigned long pipe,
1065 				void *buffer, int len, int interval)
1066 {
1067 	int dir_out = usb_pipeout(pipe);
1068 	int ep = usb_pipeendpoint(pipe);
1069 #ifndef MUSB_NO_MULTIPOINT
1070 	int devnum = usb_pipedevice(pipe);
1071 #endif
1072 	u8  type;
1073 	u16 csr;
1074 	u32 txlen = 0;
1075 	u32 nextlen = 0;
1076 	u8  devspeed;
1077 
1078 	/* select interrupt endpoint */
1079 	writeb(MUSB_INTR_EP, &musbr->index);
1080 
1081 #ifndef MUSB_NO_MULTIPOINT
1082 	/* write the address of the device */
1083 	if (dir_out)
1084 		writeb(devnum, &musbr->tar[MUSB_INTR_EP].txfuncaddr);
1085 	else
1086 		writeb(devnum, &musbr->tar[MUSB_INTR_EP].rxfuncaddr);
1087 #endif
1088 
1089 	/* configure the hub address and the port number as required */
1090 	devspeed = get_dev_speed(dev);
1091 	if ((musb_ishighspeed()) && (dev->parent != NULL) &&
1092 		(devspeed != MUSB_TYPE_SPEED_HIGH)) {
1093 		/*
1094 		 * MUSB is in high speed and the destination device is full
1095 		 * speed device. So configure the hub address and port
1096 		 * address registers.
1097 		 */
1098 		config_hub_port(dev, MUSB_INTR_EP);
1099 	} else {
1100 #ifndef MUSB_NO_MULTIPOINT
1101 		if (dir_out) {
1102 			writeb(0, &musbr->tar[MUSB_INTR_EP].txhubaddr);
1103 			writeb(0, &musbr->tar[MUSB_INTR_EP].txhubport);
1104 		} else {
1105 			writeb(0, &musbr->tar[MUSB_INTR_EP].rxhubaddr);
1106 			writeb(0, &musbr->tar[MUSB_INTR_EP].rxhubport);
1107 		}
1108 #endif
1109 		devspeed = musb_cfg.musb_speed;
1110 	}
1111 
1112 	/* Write the saved toggle bit value */
1113 	write_toggle(dev, ep, dir_out);
1114 
1115 	if (!dir_out) { /* intrrupt-in transfer */
1116 		/* Write the saved toggle bit value */
1117 		write_toggle(dev, ep, dir_out);
1118 		writeb(interval, &musbr->rxinterval);
1119 
1120 		/* Program the RxType register */
1121 		type = (devspeed << MUSB_TYPE_SPEED_SHIFT) |
1122 			   (MUSB_TYPE_PROTO_INTR << MUSB_TYPE_PROTO_SHIFT) |
1123 			   (ep & MUSB_TYPE_REMOTE_END);
1124 		writeb(type, &musbr->rxtype);
1125 
1126 		/* Write the maximum packet size to the RxMaxp register */
1127 		writew(dev->epmaxpacketin[ep], &musbr->rxmaxp);
1128 
1129 		while (txlen < len) {
1130 			nextlen = ((len-txlen) < dev->epmaxpacketin[ep]) ?
1131 					(len-txlen) : dev->epmaxpacketin[ep];
1132 
1133 			/* Set the ReqPkt bit */
1134 			csr = readw(&musbr->rxcsr);
1135 			writew(csr | MUSB_RXCSR_H_REQPKT, &musbr->rxcsr);
1136 
1137 			/* Wait until the RxPktRdy bit is set */
1138 			if (wait_until_rxep_ready(dev, MUSB_INTR_EP) != 1) {
1139 				csr = readw(&musbr->rxcsr);
1140 				usb_settoggle(dev, ep, dir_out,
1141 				(csr >> MUSB_S_RXCSR_H_DATATOGGLE) & 1);
1142 				csr &= ~MUSB_RXCSR_RXPKTRDY;
1143 				writew(csr, &musbr->rxcsr);
1144 				dev->act_len = txlen;
1145 				return 0;
1146 			}
1147 
1148 			/* Read the data from the FIFO */
1149 			read_fifo(MUSB_INTR_EP, nextlen,
1150 					(void *)(((u8 *)buffer) + txlen));
1151 
1152 			/* Clear the RxPktRdy bit */
1153 			csr =  readw(&musbr->rxcsr);
1154 			csr &= ~MUSB_RXCSR_RXPKTRDY;
1155 			writew(csr, &musbr->rxcsr);
1156 			txlen += nextlen;
1157 		}
1158 
1159 		/* Keep a copy of the data toggle bit */
1160 		csr = readw(&musbr->rxcsr);
1161 		usb_settoggle(dev, ep, dir_out,
1162 				(csr >> MUSB_S_RXCSR_H_DATATOGGLE) & 1);
1163 	}
1164 
1165 	/* interrupt transfer is complete */
1166 	dev->irq_status = 0;
1167 	dev->irq_act_len = len;
1168 	dev->irq_handle(dev);
1169 	dev->status = 0;
1170 	dev->act_len = len;
1171 	return 0;
1172 }
1173