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 occurred on the endpoint. If a RxStall 77 * has occurred, the RxStall is cleared and 1 is returned. If RxStall has 78 * not occurred, 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_USB_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_USB_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_USB_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