1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * Most of this source has been derived from the Linux USB 4 * project: 5 * (c) 1999-2002 Matthew Dharm (mdharm-usb@one-eyed-alien.net) 6 * (c) 2000 David L. Brown, Jr. (usb-storage@davidb.org) 7 * (c) 1999 Michael Gee (michael@linuxspecific.com) 8 * (c) 2000 Yggdrasil Computing, Inc. 9 * 10 * 11 * Adapted for U-Boot: 12 * (C) Copyright 2001 Denis Peter, MPL AG Switzerland 13 * Driver model conversion: 14 * (C) Copyright 2015 Google, Inc 15 * 16 * For BBB support (C) Copyright 2003 17 * Gary Jennejohn, DENX Software Engineering <garyj@denx.de> 18 * 19 * BBB support based on /sys/dev/usb/umass.c from 20 * FreeBSD. 21 */ 22 23 /* Note: 24 * Currently only the CBI transport protocoll has been implemented, and it 25 * is only tested with a TEAC USB Floppy. Other Massstorages with CBI or CB 26 * transport protocoll may work as well. 27 */ 28 /* 29 * New Note: 30 * Support for USB Mass Storage Devices (BBB) has been added. It has 31 * only been tested with USB memory sticks. 32 */ 33 34 35 #include <common.h> 36 #include <command.h> 37 #include <dm.h> 38 #include <errno.h> 39 #include <mapmem.h> 40 #include <memalign.h> 41 #include <asm/byteorder.h> 42 #include <asm/processor.h> 43 #include <dm/device-internal.h> 44 #include <dm/lists.h> 45 46 #include <part.h> 47 #include <usb.h> 48 49 #undef BBB_COMDAT_TRACE 50 #undef BBB_XPORT_TRACE 51 52 #include <scsi.h> 53 /* direction table -- this indicates the direction of the data 54 * transfer for each command code -- a 1 indicates input 55 */ 56 static const unsigned char us_direction[256/8] = { 57 0x28, 0x81, 0x14, 0x14, 0x20, 0x01, 0x90, 0x77, 58 0x0C, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 59 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 60 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 61 }; 62 #define US_DIRECTION(x) ((us_direction[x>>3] >> (x & 7)) & 1) 63 64 static struct scsi_cmd usb_ccb __aligned(ARCH_DMA_MINALIGN); 65 static __u32 CBWTag; 66 67 static int usb_max_devs; /* number of highest available usb device */ 68 69 #ifndef CONFIG_BLK 70 static struct blk_desc usb_dev_desc[USB_MAX_STOR_DEV]; 71 #endif 72 73 struct us_data; 74 typedef int (*trans_cmnd)(struct scsi_cmd *cb, struct us_data *data); 75 typedef int (*trans_reset)(struct us_data *data); 76 77 struct us_data { 78 struct usb_device *pusb_dev; /* this usb_device */ 79 80 unsigned int flags; /* from filter initially */ 81 # define USB_READY (1 << 0) 82 unsigned char ifnum; /* interface number */ 83 unsigned char ep_in; /* in endpoint */ 84 unsigned char ep_out; /* out ....... */ 85 unsigned char ep_int; /* interrupt . */ 86 unsigned char subclass; /* as in overview */ 87 unsigned char protocol; /* .............. */ 88 unsigned char attention_done; /* force attn on first cmd */ 89 unsigned short ip_data; /* interrupt data */ 90 int action; /* what to do */ 91 int ip_wanted; /* needed */ 92 int *irq_handle; /* for USB int requests */ 93 unsigned int irqpipe; /* pipe for release_irq */ 94 unsigned char irqmaxp; /* max packed for irq Pipe */ 95 unsigned char irqinterval; /* Intervall for IRQ Pipe */ 96 struct scsi_cmd *srb; /* current srb */ 97 trans_reset transport_reset; /* reset routine */ 98 trans_cmnd transport; /* transport routine */ 99 unsigned short max_xfer_blk; /* maximum transfer blocks */ 100 }; 101 102 #ifndef CONFIG_BLK 103 static struct us_data usb_stor[USB_MAX_STOR_DEV]; 104 #endif 105 106 #define USB_STOR_TRANSPORT_GOOD 0 107 #define USB_STOR_TRANSPORT_FAILED -1 108 #define USB_STOR_TRANSPORT_ERROR -2 109 110 int usb_stor_get_info(struct usb_device *dev, struct us_data *us, 111 struct blk_desc *dev_desc); 112 int usb_storage_probe(struct usb_device *dev, unsigned int ifnum, 113 struct us_data *ss); 114 #ifdef CONFIG_BLK 115 static unsigned long usb_stor_read(struct udevice *dev, lbaint_t blknr, 116 lbaint_t blkcnt, void *buffer); 117 static unsigned long usb_stor_write(struct udevice *dev, lbaint_t blknr, 118 lbaint_t blkcnt, const void *buffer); 119 #else 120 static unsigned long usb_stor_read(struct blk_desc *block_dev, lbaint_t blknr, 121 lbaint_t blkcnt, void *buffer); 122 static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr, 123 lbaint_t blkcnt, const void *buffer); 124 #endif 125 void uhci_show_temp_int_td(void); 126 127 static void usb_show_progress(void) 128 { 129 debug("."); 130 } 131 132 /******************************************************************************* 133 * show info on storage devices; 'usb start/init' must be invoked earlier 134 * as we only retrieve structures populated during devices initialization 135 */ 136 int usb_stor_info(void) 137 { 138 int count = 0; 139 #ifdef CONFIG_BLK 140 struct udevice *dev; 141 142 for (blk_first_device(IF_TYPE_USB, &dev); 143 dev; 144 blk_next_device(&dev)) { 145 struct blk_desc *desc = dev_get_uclass_platdata(dev); 146 147 printf(" Device %d: ", desc->devnum); 148 dev_print(desc); 149 count++; 150 } 151 #else 152 int i; 153 154 if (usb_max_devs > 0) { 155 for (i = 0; i < usb_max_devs; i++) { 156 printf(" Device %d: ", i); 157 dev_print(&usb_dev_desc[i]); 158 } 159 return 0; 160 } 161 #endif 162 if (!count) { 163 printf("No storage devices, perhaps not 'usb start'ed..?\n"); 164 return 1; 165 } 166 167 return 0; 168 } 169 170 static unsigned int usb_get_max_lun(struct us_data *us) 171 { 172 int len; 173 ALLOC_CACHE_ALIGN_BUFFER(unsigned char, result, 1); 174 len = usb_control_msg(us->pusb_dev, 175 usb_rcvctrlpipe(us->pusb_dev, 0), 176 US_BBB_GET_MAX_LUN, 177 USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_IN, 178 0, us->ifnum, 179 result, sizeof(char), 180 USB_CNTL_TIMEOUT * 5); 181 debug("Get Max LUN -> len = %i, result = %i\n", len, (int) *result); 182 return (len > 0) ? *result : 0; 183 } 184 185 static int usb_stor_probe_device(struct usb_device *udev) 186 { 187 int lun, max_lun; 188 189 #ifdef CONFIG_BLK 190 struct us_data *data; 191 int ret; 192 #else 193 int start; 194 195 if (udev == NULL) 196 return -ENOENT; /* no more devices available */ 197 #endif 198 199 debug("\n\nProbing for storage\n"); 200 #ifdef CONFIG_BLK 201 /* 202 * We store the us_data in the mass storage device's platdata. It 203 * is shared by all LUNs (block devices) attached to this mass storage 204 * device. 205 */ 206 data = dev_get_platdata(udev->dev); 207 if (!usb_storage_probe(udev, 0, data)) 208 return 0; 209 max_lun = usb_get_max_lun(data); 210 for (lun = 0; lun <= max_lun; lun++) { 211 struct blk_desc *blkdev; 212 struct udevice *dev; 213 char str[10]; 214 215 snprintf(str, sizeof(str), "lun%d", lun); 216 ret = blk_create_devicef(udev->dev, "usb_storage_blk", str, 217 IF_TYPE_USB, usb_max_devs, 512, 0, 218 &dev); 219 if (ret) { 220 debug("Cannot bind driver\n"); 221 return ret; 222 } 223 224 blkdev = dev_get_uclass_platdata(dev); 225 blkdev->target = 0xff; 226 blkdev->lun = lun; 227 228 ret = usb_stor_get_info(udev, data, blkdev); 229 if (ret == 1) 230 ret = blk_prepare_device(dev); 231 if (!ret) { 232 usb_max_devs++; 233 debug("%s: Found device %p\n", __func__, udev); 234 } else { 235 debug("usb_stor_get_info: Invalid device\n"); 236 ret = device_unbind(dev); 237 if (ret) 238 return ret; 239 } 240 } 241 #else 242 /* We don't have space to even probe if we hit the maximum */ 243 if (usb_max_devs == USB_MAX_STOR_DEV) { 244 printf("max USB Storage Device reached: %d stopping\n", 245 usb_max_devs); 246 return -ENOSPC; 247 } 248 249 if (!usb_storage_probe(udev, 0, &usb_stor[usb_max_devs])) 250 return 0; 251 252 /* 253 * OK, it's a storage device. Iterate over its LUNs and populate 254 * usb_dev_desc' 255 */ 256 start = usb_max_devs; 257 258 max_lun = usb_get_max_lun(&usb_stor[usb_max_devs]); 259 for (lun = 0; lun <= max_lun && usb_max_devs < USB_MAX_STOR_DEV; 260 lun++) { 261 struct blk_desc *blkdev; 262 263 blkdev = &usb_dev_desc[usb_max_devs]; 264 memset(blkdev, '\0', sizeof(struct blk_desc)); 265 blkdev->if_type = IF_TYPE_USB; 266 blkdev->devnum = usb_max_devs; 267 blkdev->part_type = PART_TYPE_UNKNOWN; 268 blkdev->target = 0xff; 269 blkdev->type = DEV_TYPE_UNKNOWN; 270 blkdev->block_read = usb_stor_read; 271 blkdev->block_write = usb_stor_write; 272 blkdev->lun = lun; 273 blkdev->priv = udev; 274 275 if (usb_stor_get_info(udev, &usb_stor[start], 276 &usb_dev_desc[usb_max_devs]) == 1) { 277 debug("partype: %d\n", blkdev->part_type); 278 part_init(blkdev); 279 debug("partype: %d\n", blkdev->part_type); 280 usb_max_devs++; 281 debug("%s: Found device %p\n", __func__, udev); 282 } 283 } 284 #endif 285 286 return 0; 287 } 288 289 void usb_stor_reset(void) 290 { 291 usb_max_devs = 0; 292 } 293 294 /******************************************************************************* 295 * scan the usb and reports device info 296 * to the user if mode = 1 297 * returns current device or -1 if no 298 */ 299 int usb_stor_scan(int mode) 300 { 301 if (mode == 1) 302 printf(" scanning usb for storage devices... "); 303 304 #ifndef CONFIG_DM_USB 305 unsigned char i; 306 307 usb_disable_asynch(1); /* asynch transfer not allowed */ 308 309 usb_stor_reset(); 310 for (i = 0; i < USB_MAX_DEVICE; i++) { 311 struct usb_device *dev; 312 313 dev = usb_get_dev_index(i); /* get device */ 314 debug("i=%d\n", i); 315 if (usb_stor_probe_device(dev)) 316 break; 317 } /* for */ 318 319 usb_disable_asynch(0); /* asynch transfer allowed */ 320 #endif 321 printf("%d Storage Device(s) found\n", usb_max_devs); 322 if (usb_max_devs > 0) 323 return 0; 324 return -1; 325 } 326 327 static int usb_stor_irq(struct usb_device *dev) 328 { 329 struct us_data *us; 330 us = (struct us_data *)dev->privptr; 331 332 if (us->ip_wanted) 333 us->ip_wanted = 0; 334 return 0; 335 } 336 337 338 #ifdef DEBUG 339 340 static void usb_show_srb(struct scsi_cmd *pccb) 341 { 342 int i; 343 printf("SRB: len %d datalen 0x%lX\n ", pccb->cmdlen, pccb->datalen); 344 for (i = 0; i < 12; i++) 345 printf("%02X ", pccb->cmd[i]); 346 printf("\n"); 347 } 348 349 static void display_int_status(unsigned long tmp) 350 { 351 printf("Status: %s %s %s %s %s %s %s\n", 352 (tmp & USB_ST_ACTIVE) ? "Active" : "", 353 (tmp & USB_ST_STALLED) ? "Stalled" : "", 354 (tmp & USB_ST_BUF_ERR) ? "Buffer Error" : "", 355 (tmp & USB_ST_BABBLE_DET) ? "Babble Det" : "", 356 (tmp & USB_ST_NAK_REC) ? "NAKed" : "", 357 (tmp & USB_ST_CRC_ERR) ? "CRC Error" : "", 358 (tmp & USB_ST_BIT_ERR) ? "Bitstuff Error" : ""); 359 } 360 #endif 361 /*********************************************************************** 362 * Data transfer routines 363 ***********************************************************************/ 364 365 static int us_one_transfer(struct us_data *us, int pipe, char *buf, int length) 366 { 367 int max_size; 368 int this_xfer; 369 int result; 370 int partial; 371 int maxtry; 372 int stat; 373 374 /* determine the maximum packet size for these transfers */ 375 max_size = usb_maxpacket(us->pusb_dev, pipe) * 16; 376 377 /* while we have data left to transfer */ 378 while (length) { 379 380 /* calculate how long this will be -- maximum or a remainder */ 381 this_xfer = length > max_size ? max_size : length; 382 length -= this_xfer; 383 384 /* setup the retry counter */ 385 maxtry = 10; 386 387 /* set up the transfer loop */ 388 do { 389 /* transfer the data */ 390 debug("Bulk xfer 0x%lx(%d) try #%d\n", 391 (ulong)map_to_sysmem(buf), this_xfer, 392 11 - maxtry); 393 result = usb_bulk_msg(us->pusb_dev, pipe, buf, 394 this_xfer, &partial, 395 USB_CNTL_TIMEOUT * 5); 396 debug("bulk_msg returned %d xferred %d/%d\n", 397 result, partial, this_xfer); 398 if (us->pusb_dev->status != 0) { 399 /* if we stall, we need to clear it before 400 * we go on 401 */ 402 #ifdef DEBUG 403 display_int_status(us->pusb_dev->status); 404 #endif 405 if (us->pusb_dev->status & USB_ST_STALLED) { 406 debug("stalled ->clearing endpoint" \ 407 "halt for pipe 0x%x\n", pipe); 408 stat = us->pusb_dev->status; 409 usb_clear_halt(us->pusb_dev, pipe); 410 us->pusb_dev->status = stat; 411 if (this_xfer == partial) { 412 debug("bulk transferred" \ 413 "with error %lX," \ 414 " but data ok\n", 415 us->pusb_dev->status); 416 return 0; 417 } 418 else 419 return result; 420 } 421 if (us->pusb_dev->status & USB_ST_NAK_REC) { 422 debug("Device NAKed bulk_msg\n"); 423 return result; 424 } 425 debug("bulk transferred with error"); 426 if (this_xfer == partial) { 427 debug(" %ld, but data ok\n", 428 us->pusb_dev->status); 429 return 0; 430 } 431 /* if our try counter reaches 0, bail out */ 432 debug(" %ld, data %d\n", 433 us->pusb_dev->status, partial); 434 if (!maxtry--) 435 return result; 436 } 437 /* update to show what data was transferred */ 438 this_xfer -= partial; 439 buf += partial; 440 /* continue until this transfer is done */ 441 } while (this_xfer); 442 } 443 444 /* if we get here, we're done and successful */ 445 return 0; 446 } 447 448 static int usb_stor_BBB_reset(struct us_data *us) 449 { 450 int result; 451 unsigned int pipe; 452 453 /* 454 * Reset recovery (5.3.4 in Universal Serial Bus Mass Storage Class) 455 * 456 * For Reset Recovery the host shall issue in the following order: 457 * a) a Bulk-Only Mass Storage Reset 458 * b) a Clear Feature HALT to the Bulk-In endpoint 459 * c) a Clear Feature HALT to the Bulk-Out endpoint 460 * 461 * This is done in 3 steps. 462 * 463 * If the reset doesn't succeed, the device should be port reset. 464 * 465 * This comment stolen from FreeBSD's /sys/dev/usb/umass.c. 466 */ 467 debug("BBB_reset\n"); 468 result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev, 0), 469 US_BBB_RESET, 470 USB_TYPE_CLASS | USB_RECIP_INTERFACE, 471 0, us->ifnum, NULL, 0, USB_CNTL_TIMEOUT * 5); 472 473 if ((result < 0) && (us->pusb_dev->status & USB_ST_STALLED)) { 474 debug("RESET:stall\n"); 475 return -1; 476 } 477 478 /* long wait for reset */ 479 mdelay(150); 480 debug("BBB_reset result %d: status %lX reset\n", 481 result, us->pusb_dev->status); 482 pipe = usb_rcvbulkpipe(us->pusb_dev, us->ep_in); 483 result = usb_clear_halt(us->pusb_dev, pipe); 484 /* long wait for reset */ 485 mdelay(150); 486 debug("BBB_reset result %d: status %lX clearing IN endpoint\n", 487 result, us->pusb_dev->status); 488 /* long wait for reset */ 489 pipe = usb_sndbulkpipe(us->pusb_dev, us->ep_out); 490 result = usb_clear_halt(us->pusb_dev, pipe); 491 mdelay(150); 492 debug("BBB_reset result %d: status %lX clearing OUT endpoint\n", 493 result, us->pusb_dev->status); 494 debug("BBB_reset done\n"); 495 return 0; 496 } 497 498 /* FIXME: this reset function doesn't really reset the port, and it 499 * should. Actually it should probably do what it's doing here, and 500 * reset the port physically 501 */ 502 static int usb_stor_CB_reset(struct us_data *us) 503 { 504 unsigned char cmd[12]; 505 int result; 506 507 debug("CB_reset\n"); 508 memset(cmd, 0xff, sizeof(cmd)); 509 cmd[0] = SCSI_SEND_DIAG; 510 cmd[1] = 4; 511 result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev, 0), 512 US_CBI_ADSC, 513 USB_TYPE_CLASS | USB_RECIP_INTERFACE, 514 0, us->ifnum, cmd, sizeof(cmd), 515 USB_CNTL_TIMEOUT * 5); 516 517 /* long wait for reset */ 518 mdelay(1500); 519 debug("CB_reset result %d: status %lX clearing endpoint halt\n", 520 result, us->pusb_dev->status); 521 usb_clear_halt(us->pusb_dev, usb_rcvbulkpipe(us->pusb_dev, us->ep_in)); 522 usb_clear_halt(us->pusb_dev, usb_rcvbulkpipe(us->pusb_dev, us->ep_out)); 523 524 debug("CB_reset done\n"); 525 return 0; 526 } 527 528 /* 529 * Set up the command for a BBB device. Note that the actual SCSI 530 * command is copied into cbw.CBWCDB. 531 */ 532 static int usb_stor_BBB_comdat(struct scsi_cmd *srb, struct us_data *us) 533 { 534 int result; 535 int actlen; 536 int dir_in; 537 unsigned int pipe; 538 ALLOC_CACHE_ALIGN_BUFFER(struct umass_bbb_cbw, cbw, 1); 539 540 dir_in = US_DIRECTION(srb->cmd[0]); 541 542 #ifdef BBB_COMDAT_TRACE 543 printf("dir %d lun %d cmdlen %d cmd %p datalen %lu pdata %p\n", 544 dir_in, srb->lun, srb->cmdlen, srb->cmd, srb->datalen, 545 srb->pdata); 546 if (srb->cmdlen) { 547 for (result = 0; result < srb->cmdlen; result++) 548 printf("cmd[%d] %#x ", result, srb->cmd[result]); 549 printf("\n"); 550 } 551 #endif 552 /* sanity checks */ 553 if (!(srb->cmdlen <= CBWCDBLENGTH)) { 554 debug("usb_stor_BBB_comdat:cmdlen too large\n"); 555 return -1; 556 } 557 558 /* always OUT to the ep */ 559 pipe = usb_sndbulkpipe(us->pusb_dev, us->ep_out); 560 561 cbw->dCBWSignature = cpu_to_le32(CBWSIGNATURE); 562 cbw->dCBWTag = cpu_to_le32(CBWTag++); 563 cbw->dCBWDataTransferLength = cpu_to_le32(srb->datalen); 564 cbw->bCBWFlags = (dir_in ? CBWFLAGS_IN : CBWFLAGS_OUT); 565 cbw->bCBWLUN = srb->lun; 566 cbw->bCDBLength = srb->cmdlen; 567 /* copy the command data into the CBW command data buffer */ 568 /* DST SRC LEN!!! */ 569 570 memcpy(cbw->CBWCDB, srb->cmd, srb->cmdlen); 571 result = usb_bulk_msg(us->pusb_dev, pipe, cbw, UMASS_BBB_CBW_SIZE, 572 &actlen, USB_CNTL_TIMEOUT * 5); 573 if (result < 0) 574 debug("usb_stor_BBB_comdat:usb_bulk_msg error\n"); 575 return result; 576 } 577 578 /* FIXME: we also need a CBI_command which sets up the completion 579 * interrupt, and waits for it 580 */ 581 static int usb_stor_CB_comdat(struct scsi_cmd *srb, struct us_data *us) 582 { 583 int result = 0; 584 int dir_in, retry; 585 unsigned int pipe; 586 unsigned long status; 587 588 retry = 5; 589 dir_in = US_DIRECTION(srb->cmd[0]); 590 591 if (dir_in) 592 pipe = usb_rcvbulkpipe(us->pusb_dev, us->ep_in); 593 else 594 pipe = usb_sndbulkpipe(us->pusb_dev, us->ep_out); 595 596 while (retry--) { 597 debug("CBI gets a command: Try %d\n", 5 - retry); 598 #ifdef DEBUG 599 usb_show_srb(srb); 600 #endif 601 /* let's send the command via the control pipe */ 602 result = usb_control_msg(us->pusb_dev, 603 usb_sndctrlpipe(us->pusb_dev , 0), 604 US_CBI_ADSC, 605 USB_TYPE_CLASS | USB_RECIP_INTERFACE, 606 0, us->ifnum, 607 srb->cmd, srb->cmdlen, 608 USB_CNTL_TIMEOUT * 5); 609 debug("CB_transport: control msg returned %d, status %lX\n", 610 result, us->pusb_dev->status); 611 /* check the return code for the command */ 612 if (result < 0) { 613 if (us->pusb_dev->status & USB_ST_STALLED) { 614 status = us->pusb_dev->status; 615 debug(" stall during command found," \ 616 " clear pipe\n"); 617 usb_clear_halt(us->pusb_dev, 618 usb_sndctrlpipe(us->pusb_dev, 0)); 619 us->pusb_dev->status = status; 620 } 621 debug(" error during command %02X" \ 622 " Stat = %lX\n", srb->cmd[0], 623 us->pusb_dev->status); 624 return result; 625 } 626 /* transfer the data payload for this command, if one exists*/ 627 628 debug("CB_transport: control msg returned %d," \ 629 " direction is %s to go 0x%lx\n", result, 630 dir_in ? "IN" : "OUT", srb->datalen); 631 if (srb->datalen) { 632 result = us_one_transfer(us, pipe, (char *)srb->pdata, 633 srb->datalen); 634 debug("CBI attempted to transfer data," \ 635 " result is %d status %lX, len %d\n", 636 result, us->pusb_dev->status, 637 us->pusb_dev->act_len); 638 if (!(us->pusb_dev->status & USB_ST_NAK_REC)) 639 break; 640 } /* if (srb->datalen) */ 641 else 642 break; 643 } 644 /* return result */ 645 646 return result; 647 } 648 649 650 static int usb_stor_CBI_get_status(struct scsi_cmd *srb, struct us_data *us) 651 { 652 int timeout; 653 654 us->ip_wanted = 1; 655 submit_int_msg(us->pusb_dev, us->irqpipe, 656 (void *) &us->ip_data, us->irqmaxp, us->irqinterval); 657 timeout = 1000; 658 while (timeout--) { 659 if (us->ip_wanted == 0) 660 break; 661 mdelay(10); 662 } 663 if (us->ip_wanted) { 664 printf(" Did not get interrupt on CBI\n"); 665 us->ip_wanted = 0; 666 return USB_STOR_TRANSPORT_ERROR; 667 } 668 debug("Got interrupt data 0x%x, transferred %d status 0x%lX\n", 669 us->ip_data, us->pusb_dev->irq_act_len, 670 us->pusb_dev->irq_status); 671 /* UFI gives us ASC and ASCQ, like a request sense */ 672 if (us->subclass == US_SC_UFI) { 673 if (srb->cmd[0] == SCSI_REQ_SENSE || 674 srb->cmd[0] == SCSI_INQUIRY) 675 return USB_STOR_TRANSPORT_GOOD; /* Good */ 676 else if (us->ip_data) 677 return USB_STOR_TRANSPORT_FAILED; 678 else 679 return USB_STOR_TRANSPORT_GOOD; 680 } 681 /* otherwise, we interpret the data normally */ 682 switch (us->ip_data) { 683 case 0x0001: 684 return USB_STOR_TRANSPORT_GOOD; 685 case 0x0002: 686 return USB_STOR_TRANSPORT_FAILED; 687 default: 688 return USB_STOR_TRANSPORT_ERROR; 689 } /* switch */ 690 return USB_STOR_TRANSPORT_ERROR; 691 } 692 693 #define USB_TRANSPORT_UNKNOWN_RETRY 5 694 #define USB_TRANSPORT_NOT_READY_RETRY 10 695 696 /* clear a stall on an endpoint - special for BBB devices */ 697 static int usb_stor_BBB_clear_endpt_stall(struct us_data *us, __u8 endpt) 698 { 699 /* ENDPOINT_HALT = 0, so set value to 0 */ 700 return usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev, 0), 701 USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT, 0, 702 endpt, NULL, 0, USB_CNTL_TIMEOUT * 5); 703 } 704 705 static int usb_stor_BBB_transport(struct scsi_cmd *srb, struct us_data *us) 706 { 707 int result, retry; 708 int dir_in; 709 int actlen, data_actlen; 710 unsigned int pipe, pipein, pipeout; 711 ALLOC_CACHE_ALIGN_BUFFER(struct umass_bbb_csw, csw, 1); 712 #ifdef BBB_XPORT_TRACE 713 unsigned char *ptr; 714 int index; 715 #endif 716 717 dir_in = US_DIRECTION(srb->cmd[0]); 718 719 /* COMMAND phase */ 720 debug("COMMAND phase\n"); 721 result = usb_stor_BBB_comdat(srb, us); 722 if (result < 0) { 723 debug("failed to send CBW status %ld\n", 724 us->pusb_dev->status); 725 usb_stor_BBB_reset(us); 726 return USB_STOR_TRANSPORT_FAILED; 727 } 728 if (!(us->flags & USB_READY)) 729 mdelay(5); 730 pipein = usb_rcvbulkpipe(us->pusb_dev, us->ep_in); 731 pipeout = usb_sndbulkpipe(us->pusb_dev, us->ep_out); 732 /* DATA phase + error handling */ 733 data_actlen = 0; 734 /* no data, go immediately to the STATUS phase */ 735 if (srb->datalen == 0) 736 goto st; 737 debug("DATA phase\n"); 738 if (dir_in) 739 pipe = pipein; 740 else 741 pipe = pipeout; 742 743 result = usb_bulk_msg(us->pusb_dev, pipe, srb->pdata, srb->datalen, 744 &data_actlen, USB_CNTL_TIMEOUT * 5); 745 /* special handling of STALL in DATA phase */ 746 if ((result < 0) && (us->pusb_dev->status & USB_ST_STALLED)) { 747 debug("DATA:stall\n"); 748 /* clear the STALL on the endpoint */ 749 result = usb_stor_BBB_clear_endpt_stall(us, 750 dir_in ? us->ep_in : us->ep_out); 751 if (result >= 0) 752 /* continue on to STATUS phase */ 753 goto st; 754 } 755 if (result < 0) { 756 debug("usb_bulk_msg error status %ld\n", 757 us->pusb_dev->status); 758 usb_stor_BBB_reset(us); 759 return USB_STOR_TRANSPORT_FAILED; 760 } 761 #ifdef BBB_XPORT_TRACE 762 for (index = 0; index < data_actlen; index++) 763 printf("pdata[%d] %#x ", index, srb->pdata[index]); 764 printf("\n"); 765 #endif 766 /* STATUS phase + error handling */ 767 st: 768 retry = 0; 769 again: 770 debug("STATUS phase\n"); 771 result = usb_bulk_msg(us->pusb_dev, pipein, csw, UMASS_BBB_CSW_SIZE, 772 &actlen, USB_CNTL_TIMEOUT*5); 773 774 /* special handling of STALL in STATUS phase */ 775 if ((result < 0) && (retry < 1) && 776 (us->pusb_dev->status & USB_ST_STALLED)) { 777 debug("STATUS:stall\n"); 778 /* clear the STALL on the endpoint */ 779 result = usb_stor_BBB_clear_endpt_stall(us, us->ep_in); 780 if (result >= 0 && (retry++ < 1)) 781 /* do a retry */ 782 goto again; 783 } 784 if (result < 0) { 785 debug("usb_bulk_msg error status %ld\n", 786 us->pusb_dev->status); 787 usb_stor_BBB_reset(us); 788 return USB_STOR_TRANSPORT_FAILED; 789 } 790 #ifdef BBB_XPORT_TRACE 791 ptr = (unsigned char *)csw; 792 for (index = 0; index < UMASS_BBB_CSW_SIZE; index++) 793 printf("ptr[%d] %#x ", index, ptr[index]); 794 printf("\n"); 795 #endif 796 /* misuse pipe to get the residue */ 797 pipe = le32_to_cpu(csw->dCSWDataResidue); 798 if (pipe == 0 && srb->datalen != 0 && srb->datalen - data_actlen != 0) 799 pipe = srb->datalen - data_actlen; 800 if (CSWSIGNATURE != le32_to_cpu(csw->dCSWSignature)) { 801 debug("!CSWSIGNATURE\n"); 802 usb_stor_BBB_reset(us); 803 return USB_STOR_TRANSPORT_FAILED; 804 } else if ((CBWTag - 1) != le32_to_cpu(csw->dCSWTag)) { 805 debug("!Tag\n"); 806 usb_stor_BBB_reset(us); 807 return USB_STOR_TRANSPORT_FAILED; 808 } else if (csw->bCSWStatus > CSWSTATUS_PHASE) { 809 debug(">PHASE\n"); 810 usb_stor_BBB_reset(us); 811 return USB_STOR_TRANSPORT_FAILED; 812 } else if (csw->bCSWStatus == CSWSTATUS_PHASE) { 813 debug("=PHASE\n"); 814 usb_stor_BBB_reset(us); 815 return USB_STOR_TRANSPORT_FAILED; 816 } else if (data_actlen > srb->datalen) { 817 debug("transferred %dB instead of %ldB\n", 818 data_actlen, srb->datalen); 819 return USB_STOR_TRANSPORT_FAILED; 820 } else if (csw->bCSWStatus == CSWSTATUS_FAILED) { 821 debug("FAILED\n"); 822 return USB_STOR_TRANSPORT_FAILED; 823 } 824 825 return result; 826 } 827 828 static int usb_stor_CB_transport(struct scsi_cmd *srb, struct us_data *us) 829 { 830 int result, status; 831 struct scsi_cmd *psrb; 832 struct scsi_cmd reqsrb; 833 int retry, notready; 834 835 psrb = &reqsrb; 836 status = USB_STOR_TRANSPORT_GOOD; 837 retry = 0; 838 notready = 0; 839 /* issue the command */ 840 do_retry: 841 result = usb_stor_CB_comdat(srb, us); 842 debug("command / Data returned %d, status %lX\n", 843 result, us->pusb_dev->status); 844 /* if this is an CBI Protocol, get IRQ */ 845 if (us->protocol == US_PR_CBI) { 846 status = usb_stor_CBI_get_status(srb, us); 847 /* if the status is error, report it */ 848 if (status == USB_STOR_TRANSPORT_ERROR) { 849 debug(" USB CBI Command Error\n"); 850 return status; 851 } 852 srb->sense_buf[12] = (unsigned char)(us->ip_data >> 8); 853 srb->sense_buf[13] = (unsigned char)(us->ip_data & 0xff); 854 if (!us->ip_data) { 855 /* if the status is good, report it */ 856 if (status == USB_STOR_TRANSPORT_GOOD) { 857 debug(" USB CBI Command Good\n"); 858 return status; 859 } 860 } 861 } 862 /* do we have to issue an auto request? */ 863 /* HERE we have to check the result */ 864 if ((result < 0) && !(us->pusb_dev->status & USB_ST_STALLED)) { 865 debug("ERROR %lX\n", us->pusb_dev->status); 866 us->transport_reset(us); 867 return USB_STOR_TRANSPORT_ERROR; 868 } 869 if ((us->protocol == US_PR_CBI) && 870 ((srb->cmd[0] == SCSI_REQ_SENSE) || 871 (srb->cmd[0] == SCSI_INQUIRY))) { 872 /* do not issue an autorequest after request sense */ 873 debug("No auto request and good\n"); 874 return USB_STOR_TRANSPORT_GOOD; 875 } 876 /* issue an request_sense */ 877 memset(&psrb->cmd[0], 0, 12); 878 psrb->cmd[0] = SCSI_REQ_SENSE; 879 psrb->cmd[1] = srb->lun << 5; 880 psrb->cmd[4] = 18; 881 psrb->datalen = 18; 882 psrb->pdata = &srb->sense_buf[0]; 883 psrb->cmdlen = 12; 884 /* issue the command */ 885 result = usb_stor_CB_comdat(psrb, us); 886 debug("auto request returned %d\n", result); 887 /* if this is an CBI Protocol, get IRQ */ 888 if (us->protocol == US_PR_CBI) 889 status = usb_stor_CBI_get_status(psrb, us); 890 891 if ((result < 0) && !(us->pusb_dev->status & USB_ST_STALLED)) { 892 debug(" AUTO REQUEST ERROR %ld\n", 893 us->pusb_dev->status); 894 return USB_STOR_TRANSPORT_ERROR; 895 } 896 debug("autorequest returned 0x%02X 0x%02X 0x%02X 0x%02X\n", 897 srb->sense_buf[0], srb->sense_buf[2], 898 srb->sense_buf[12], srb->sense_buf[13]); 899 /* Check the auto request result */ 900 if ((srb->sense_buf[2] == 0) && 901 (srb->sense_buf[12] == 0) && 902 (srb->sense_buf[13] == 0)) { 903 /* ok, no sense */ 904 return USB_STOR_TRANSPORT_GOOD; 905 } 906 907 /* Check the auto request result */ 908 switch (srb->sense_buf[2]) { 909 case 0x01: 910 /* Recovered Error */ 911 return USB_STOR_TRANSPORT_GOOD; 912 break; 913 case 0x02: 914 /* Not Ready */ 915 if (notready++ > USB_TRANSPORT_NOT_READY_RETRY) { 916 printf("cmd 0x%02X returned 0x%02X 0x%02X 0x%02X" 917 " 0x%02X (NOT READY)\n", srb->cmd[0], 918 srb->sense_buf[0], srb->sense_buf[2], 919 srb->sense_buf[12], srb->sense_buf[13]); 920 return USB_STOR_TRANSPORT_FAILED; 921 } else { 922 mdelay(100); 923 goto do_retry; 924 } 925 break; 926 default: 927 if (retry++ > USB_TRANSPORT_UNKNOWN_RETRY) { 928 printf("cmd 0x%02X returned 0x%02X 0x%02X 0x%02X" 929 " 0x%02X\n", srb->cmd[0], srb->sense_buf[0], 930 srb->sense_buf[2], srb->sense_buf[12], 931 srb->sense_buf[13]); 932 return USB_STOR_TRANSPORT_FAILED; 933 } else 934 goto do_retry; 935 break; 936 } 937 return USB_STOR_TRANSPORT_FAILED; 938 } 939 940 static void usb_stor_set_max_xfer_blk(struct usb_device *udev, 941 struct us_data *us) 942 { 943 unsigned short blk; 944 size_t __maybe_unused size; 945 int __maybe_unused ret; 946 947 #ifndef CONFIG_DM_USB 948 #ifdef CONFIG_USB_EHCI_HCD 949 /* 950 * The U-Boot EHCI driver can handle any transfer length as long as 951 * there is enough free heap space left, but the SCSI READ(10) and 952 * WRITE(10) commands are limited to 65535 blocks. 953 */ 954 blk = USHRT_MAX; 955 #else 956 blk = 20; 957 #endif 958 #else 959 ret = usb_get_max_xfer_size(udev, (size_t *)&size); 960 if (ret < 0) { 961 /* unimplemented, let's use default 20 */ 962 blk = 20; 963 } else { 964 if (size > USHRT_MAX * 512) 965 size = USHRT_MAX * 512; 966 blk = size / 512; 967 } 968 #endif 969 970 us->max_xfer_blk = blk; 971 } 972 973 static int usb_inquiry(struct scsi_cmd *srb, struct us_data *ss) 974 { 975 int retry, i; 976 retry = 5; 977 do { 978 memset(&srb->cmd[0], 0, 12); 979 srb->cmd[0] = SCSI_INQUIRY; 980 srb->cmd[1] = srb->lun << 5; 981 srb->cmd[4] = 36; 982 srb->datalen = 36; 983 srb->cmdlen = 12; 984 i = ss->transport(srb, ss); 985 debug("inquiry returns %d\n", i); 986 if (i == 0) 987 break; 988 } while (--retry); 989 990 if (!retry) { 991 printf("error in inquiry\n"); 992 return -1; 993 } 994 return 0; 995 } 996 997 static int usb_request_sense(struct scsi_cmd *srb, struct us_data *ss) 998 { 999 char *ptr; 1000 1001 ptr = (char *)srb->pdata; 1002 memset(&srb->cmd[0], 0, 12); 1003 srb->cmd[0] = SCSI_REQ_SENSE; 1004 srb->cmd[1] = srb->lun << 5; 1005 srb->cmd[4] = 18; 1006 srb->datalen = 18; 1007 srb->pdata = &srb->sense_buf[0]; 1008 srb->cmdlen = 12; 1009 ss->transport(srb, ss); 1010 debug("Request Sense returned %02X %02X %02X\n", 1011 srb->sense_buf[2], srb->sense_buf[12], 1012 srb->sense_buf[13]); 1013 srb->pdata = (uchar *)ptr; 1014 return 0; 1015 } 1016 1017 static int usb_test_unit_ready(struct scsi_cmd *srb, struct us_data *ss) 1018 { 1019 int retries = 10; 1020 1021 do { 1022 memset(&srb->cmd[0], 0, 12); 1023 srb->cmd[0] = SCSI_TST_U_RDY; 1024 srb->cmd[1] = srb->lun << 5; 1025 srb->datalen = 0; 1026 srb->cmdlen = 12; 1027 if (ss->transport(srb, ss) == USB_STOR_TRANSPORT_GOOD) { 1028 ss->flags |= USB_READY; 1029 return 0; 1030 } 1031 usb_request_sense(srb, ss); 1032 /* 1033 * Check the Key Code Qualifier, if it matches 1034 * "Not Ready - medium not present" 1035 * (the sense Key equals 0x2 and the ASC is 0x3a) 1036 * return immediately as the medium being absent won't change 1037 * unless there is a user action. 1038 */ 1039 if ((srb->sense_buf[2] == 0x02) && 1040 (srb->sense_buf[12] == 0x3a)) 1041 return -1; 1042 mdelay(100); 1043 } while (retries--); 1044 1045 return -1; 1046 } 1047 1048 static int usb_read_capacity(struct scsi_cmd *srb, struct us_data *ss) 1049 { 1050 int retry; 1051 /* XXX retries */ 1052 retry = 3; 1053 do { 1054 memset(&srb->cmd[0], 0, 12); 1055 srb->cmd[0] = SCSI_RD_CAPAC; 1056 srb->cmd[1] = srb->lun << 5; 1057 srb->datalen = 8; 1058 srb->cmdlen = 12; 1059 if (ss->transport(srb, ss) == USB_STOR_TRANSPORT_GOOD) 1060 return 0; 1061 } while (retry--); 1062 1063 return -1; 1064 } 1065 1066 static int usb_read_10(struct scsi_cmd *srb, struct us_data *ss, 1067 unsigned long start, unsigned short blocks) 1068 { 1069 memset(&srb->cmd[0], 0, 12); 1070 srb->cmd[0] = SCSI_READ10; 1071 srb->cmd[1] = srb->lun << 5; 1072 srb->cmd[2] = ((unsigned char) (start >> 24)) & 0xff; 1073 srb->cmd[3] = ((unsigned char) (start >> 16)) & 0xff; 1074 srb->cmd[4] = ((unsigned char) (start >> 8)) & 0xff; 1075 srb->cmd[5] = ((unsigned char) (start)) & 0xff; 1076 srb->cmd[7] = ((unsigned char) (blocks >> 8)) & 0xff; 1077 srb->cmd[8] = (unsigned char) blocks & 0xff; 1078 srb->cmdlen = 12; 1079 debug("read10: start %lx blocks %x\n", start, blocks); 1080 return ss->transport(srb, ss); 1081 } 1082 1083 static int usb_write_10(struct scsi_cmd *srb, struct us_data *ss, 1084 unsigned long start, unsigned short blocks) 1085 { 1086 memset(&srb->cmd[0], 0, 12); 1087 srb->cmd[0] = SCSI_WRITE10; 1088 srb->cmd[1] = srb->lun << 5; 1089 srb->cmd[2] = ((unsigned char) (start >> 24)) & 0xff; 1090 srb->cmd[3] = ((unsigned char) (start >> 16)) & 0xff; 1091 srb->cmd[4] = ((unsigned char) (start >> 8)) & 0xff; 1092 srb->cmd[5] = ((unsigned char) (start)) & 0xff; 1093 srb->cmd[7] = ((unsigned char) (blocks >> 8)) & 0xff; 1094 srb->cmd[8] = (unsigned char) blocks & 0xff; 1095 srb->cmdlen = 12; 1096 debug("write10: start %lx blocks %x\n", start, blocks); 1097 return ss->transport(srb, ss); 1098 } 1099 1100 1101 #ifdef CONFIG_USB_BIN_FIXUP 1102 /* 1103 * Some USB storage devices queried for SCSI identification data respond with 1104 * binary strings, which if output to the console freeze the terminal. The 1105 * workaround is to modify the vendor and product strings read from such 1106 * device with proper values (as reported by 'usb info'). 1107 * 1108 * Vendor and product length limits are taken from the definition of 1109 * struct blk_desc in include/part.h. 1110 */ 1111 static void usb_bin_fixup(struct usb_device_descriptor descriptor, 1112 unsigned char vendor[], 1113 unsigned char product[]) { 1114 const unsigned char max_vendor_len = 40; 1115 const unsigned char max_product_len = 20; 1116 if (descriptor.idVendor == 0x0424 && descriptor.idProduct == 0x223a) { 1117 strncpy((char *)vendor, "SMSC", max_vendor_len); 1118 strncpy((char *)product, "Flash Media Cntrller", 1119 max_product_len); 1120 } 1121 } 1122 #endif /* CONFIG_USB_BIN_FIXUP */ 1123 1124 #ifdef CONFIG_BLK 1125 static unsigned long usb_stor_read(struct udevice *dev, lbaint_t blknr, 1126 lbaint_t blkcnt, void *buffer) 1127 #else 1128 static unsigned long usb_stor_read(struct blk_desc *block_dev, lbaint_t blknr, 1129 lbaint_t blkcnt, void *buffer) 1130 #endif 1131 { 1132 lbaint_t start, blks; 1133 uintptr_t buf_addr; 1134 unsigned short smallblks; 1135 struct usb_device *udev; 1136 struct us_data *ss; 1137 int retry; 1138 struct scsi_cmd *srb = &usb_ccb; 1139 #ifdef CONFIG_BLK 1140 struct blk_desc *block_dev; 1141 #endif 1142 1143 if (blkcnt == 0) 1144 return 0; 1145 /* Setup device */ 1146 #ifdef CONFIG_BLK 1147 block_dev = dev_get_uclass_platdata(dev); 1148 udev = dev_get_parent_priv(dev_get_parent(dev)); 1149 debug("\nusb_read: udev %d\n", block_dev->devnum); 1150 #else 1151 debug("\nusb_read: udev %d\n", block_dev->devnum); 1152 udev = usb_dev_desc[block_dev->devnum].priv; 1153 if (!udev) { 1154 debug("%s: No device\n", __func__); 1155 return 0; 1156 } 1157 #endif 1158 ss = (struct us_data *)udev->privptr; 1159 1160 usb_disable_asynch(1); /* asynch transfer not allowed */ 1161 srb->lun = block_dev->lun; 1162 buf_addr = (uintptr_t)buffer; 1163 start = blknr; 1164 blks = blkcnt; 1165 1166 debug("\nusb_read: dev %d startblk " LBAF ", blccnt " LBAF " buffer %lx\n", 1167 block_dev->devnum, start, blks, buf_addr); 1168 1169 do { 1170 /* XXX need some comment here */ 1171 retry = 2; 1172 srb->pdata = (unsigned char *)buf_addr; 1173 if (blks > ss->max_xfer_blk) 1174 smallblks = ss->max_xfer_blk; 1175 else 1176 smallblks = (unsigned short) blks; 1177 retry_it: 1178 if (smallblks == ss->max_xfer_blk) 1179 usb_show_progress(); 1180 srb->datalen = block_dev->blksz * smallblks; 1181 srb->pdata = (unsigned char *)buf_addr; 1182 if (usb_read_10(srb, ss, start, smallblks)) { 1183 debug("Read ERROR\n"); 1184 usb_request_sense(srb, ss); 1185 if (retry--) 1186 goto retry_it; 1187 blkcnt -= blks; 1188 break; 1189 } 1190 start += smallblks; 1191 blks -= smallblks; 1192 buf_addr += srb->datalen; 1193 } while (blks != 0); 1194 ss->flags &= ~USB_READY; 1195 1196 debug("usb_read: end startblk " LBAF ", blccnt %x buffer %lx\n", 1197 start, smallblks, buf_addr); 1198 1199 usb_disable_asynch(0); /* asynch transfer allowed */ 1200 if (blkcnt >= ss->max_xfer_blk) 1201 debug("\n"); 1202 return blkcnt; 1203 } 1204 1205 #ifdef CONFIG_BLK 1206 static unsigned long usb_stor_write(struct udevice *dev, lbaint_t blknr, 1207 lbaint_t blkcnt, const void *buffer) 1208 #else 1209 static unsigned long usb_stor_write(struct blk_desc *block_dev, lbaint_t blknr, 1210 lbaint_t blkcnt, const void *buffer) 1211 #endif 1212 { 1213 lbaint_t start, blks; 1214 uintptr_t buf_addr; 1215 unsigned short smallblks; 1216 struct usb_device *udev; 1217 struct us_data *ss; 1218 int retry; 1219 struct scsi_cmd *srb = &usb_ccb; 1220 #ifdef CONFIG_BLK 1221 struct blk_desc *block_dev; 1222 #endif 1223 1224 if (blkcnt == 0) 1225 return 0; 1226 1227 /* Setup device */ 1228 #ifdef CONFIG_BLK 1229 block_dev = dev_get_uclass_platdata(dev); 1230 udev = dev_get_parent_priv(dev_get_parent(dev)); 1231 debug("\nusb_read: udev %d\n", block_dev->devnum); 1232 #else 1233 debug("\nusb_read: udev %d\n", block_dev->devnum); 1234 udev = usb_dev_desc[block_dev->devnum].priv; 1235 if (!udev) { 1236 debug("%s: No device\n", __func__); 1237 return 0; 1238 } 1239 #endif 1240 ss = (struct us_data *)udev->privptr; 1241 1242 usb_disable_asynch(1); /* asynch transfer not allowed */ 1243 1244 srb->lun = block_dev->lun; 1245 buf_addr = (uintptr_t)buffer; 1246 start = blknr; 1247 blks = blkcnt; 1248 1249 debug("\nusb_write: dev %d startblk " LBAF ", blccnt " LBAF " buffer %lx\n", 1250 block_dev->devnum, start, blks, buf_addr); 1251 1252 do { 1253 /* If write fails retry for max retry count else 1254 * return with number of blocks written successfully. 1255 */ 1256 retry = 2; 1257 srb->pdata = (unsigned char *)buf_addr; 1258 if (blks > ss->max_xfer_blk) 1259 smallblks = ss->max_xfer_blk; 1260 else 1261 smallblks = (unsigned short) blks; 1262 retry_it: 1263 if (smallblks == ss->max_xfer_blk) 1264 usb_show_progress(); 1265 srb->datalen = block_dev->blksz * smallblks; 1266 srb->pdata = (unsigned char *)buf_addr; 1267 if (usb_write_10(srb, ss, start, smallblks)) { 1268 debug("Write ERROR\n"); 1269 usb_request_sense(srb, ss); 1270 if (retry--) 1271 goto retry_it; 1272 blkcnt -= blks; 1273 break; 1274 } 1275 start += smallblks; 1276 blks -= smallblks; 1277 buf_addr += srb->datalen; 1278 } while (blks != 0); 1279 ss->flags &= ~USB_READY; 1280 1281 debug("usb_write: end startblk " LBAF ", blccnt %x buffer %lx\n", 1282 start, smallblks, buf_addr); 1283 1284 usb_disable_asynch(0); /* asynch transfer allowed */ 1285 if (blkcnt >= ss->max_xfer_blk) 1286 debug("\n"); 1287 return blkcnt; 1288 1289 } 1290 1291 /* Probe to see if a new device is actually a Storage device */ 1292 int usb_storage_probe(struct usb_device *dev, unsigned int ifnum, 1293 struct us_data *ss) 1294 { 1295 struct usb_interface *iface; 1296 int i; 1297 struct usb_endpoint_descriptor *ep_desc; 1298 unsigned int flags = 0; 1299 1300 /* let's examine the device now */ 1301 iface = &dev->config.if_desc[ifnum]; 1302 1303 if (dev->descriptor.bDeviceClass != 0 || 1304 iface->desc.bInterfaceClass != USB_CLASS_MASS_STORAGE || 1305 iface->desc.bInterfaceSubClass < US_SC_MIN || 1306 iface->desc.bInterfaceSubClass > US_SC_MAX) { 1307 debug("Not mass storage\n"); 1308 /* if it's not a mass storage, we go no further */ 1309 return 0; 1310 } 1311 1312 memset(ss, 0, sizeof(struct us_data)); 1313 1314 /* At this point, we know we've got a live one */ 1315 debug("\n\nUSB Mass Storage device detected\n"); 1316 1317 /* Initialize the us_data structure with some useful info */ 1318 ss->flags = flags; 1319 ss->ifnum = ifnum; 1320 ss->pusb_dev = dev; 1321 ss->attention_done = 0; 1322 ss->subclass = iface->desc.bInterfaceSubClass; 1323 ss->protocol = iface->desc.bInterfaceProtocol; 1324 1325 /* set the handler pointers based on the protocol */ 1326 debug("Transport: "); 1327 switch (ss->protocol) { 1328 case US_PR_CB: 1329 debug("Control/Bulk\n"); 1330 ss->transport = usb_stor_CB_transport; 1331 ss->transport_reset = usb_stor_CB_reset; 1332 break; 1333 1334 case US_PR_CBI: 1335 debug("Control/Bulk/Interrupt\n"); 1336 ss->transport = usb_stor_CB_transport; 1337 ss->transport_reset = usb_stor_CB_reset; 1338 break; 1339 case US_PR_BULK: 1340 debug("Bulk/Bulk/Bulk\n"); 1341 ss->transport = usb_stor_BBB_transport; 1342 ss->transport_reset = usb_stor_BBB_reset; 1343 break; 1344 default: 1345 printf("USB Storage Transport unknown / not yet implemented\n"); 1346 return 0; 1347 break; 1348 } 1349 1350 /* 1351 * We are expecting a minimum of 2 endpoints - in and out (bulk). 1352 * An optional interrupt is OK (necessary for CBI protocol). 1353 * We will ignore any others. 1354 */ 1355 for (i = 0; i < iface->desc.bNumEndpoints; i++) { 1356 ep_desc = &iface->ep_desc[i]; 1357 /* is it an BULK endpoint? */ 1358 if ((ep_desc->bmAttributes & 1359 USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_BULK) { 1360 if (ep_desc->bEndpointAddress & USB_DIR_IN) 1361 ss->ep_in = ep_desc->bEndpointAddress & 1362 USB_ENDPOINT_NUMBER_MASK; 1363 else 1364 ss->ep_out = 1365 ep_desc->bEndpointAddress & 1366 USB_ENDPOINT_NUMBER_MASK; 1367 } 1368 1369 /* is it an interrupt endpoint? */ 1370 if ((ep_desc->bmAttributes & 1371 USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT) { 1372 ss->ep_int = ep_desc->bEndpointAddress & 1373 USB_ENDPOINT_NUMBER_MASK; 1374 ss->irqinterval = ep_desc->bInterval; 1375 } 1376 } 1377 debug("Endpoints In %d Out %d Int %d\n", 1378 ss->ep_in, ss->ep_out, ss->ep_int); 1379 1380 /* Do some basic sanity checks, and bail if we find a problem */ 1381 if (usb_set_interface(dev, iface->desc.bInterfaceNumber, 0) || 1382 !ss->ep_in || !ss->ep_out || 1383 (ss->protocol == US_PR_CBI && ss->ep_int == 0)) { 1384 debug("Problems with device\n"); 1385 return 0; 1386 } 1387 /* set class specific stuff */ 1388 /* We only handle certain protocols. Currently, these are 1389 * the only ones. 1390 * The SFF8070 accepts the requests used in u-boot 1391 */ 1392 if (ss->subclass != US_SC_UFI && ss->subclass != US_SC_SCSI && 1393 ss->subclass != US_SC_8070) { 1394 printf("Sorry, protocol %d not yet supported.\n", ss->subclass); 1395 return 0; 1396 } 1397 if (ss->ep_int) { 1398 /* we had found an interrupt endpoint, prepare irq pipe 1399 * set up the IRQ pipe and handler 1400 */ 1401 ss->irqinterval = (ss->irqinterval > 0) ? ss->irqinterval : 255; 1402 ss->irqpipe = usb_rcvintpipe(ss->pusb_dev, ss->ep_int); 1403 ss->irqmaxp = usb_maxpacket(dev, ss->irqpipe); 1404 dev->irq_handle = usb_stor_irq; 1405 } 1406 1407 /* Set the maximum transfer size per host controller setting */ 1408 usb_stor_set_max_xfer_blk(dev, ss); 1409 1410 dev->privptr = (void *)ss; 1411 return 1; 1412 } 1413 1414 int usb_stor_get_info(struct usb_device *dev, struct us_data *ss, 1415 struct blk_desc *dev_desc) 1416 { 1417 unsigned char perq, modi; 1418 ALLOC_CACHE_ALIGN_BUFFER(u32, cap, 2); 1419 ALLOC_CACHE_ALIGN_BUFFER(u8, usb_stor_buf, 36); 1420 u32 capacity, blksz; 1421 struct scsi_cmd *pccb = &usb_ccb; 1422 1423 pccb->pdata = usb_stor_buf; 1424 1425 dev_desc->target = dev->devnum; 1426 pccb->lun = dev_desc->lun; 1427 debug(" address %d\n", dev_desc->target); 1428 1429 if (usb_inquiry(pccb, ss)) { 1430 debug("%s: usb_inquiry() failed\n", __func__); 1431 return -1; 1432 } 1433 1434 perq = usb_stor_buf[0]; 1435 modi = usb_stor_buf[1]; 1436 1437 /* 1438 * Skip unknown devices (0x1f) and enclosure service devices (0x0d), 1439 * they would not respond to test_unit_ready . 1440 */ 1441 if (((perq & 0x1f) == 0x1f) || ((perq & 0x1f) == 0x0d)) { 1442 debug("%s: unknown/unsupported device\n", __func__); 1443 return 0; 1444 } 1445 if ((modi&0x80) == 0x80) { 1446 /* drive is removable */ 1447 dev_desc->removable = 1; 1448 } 1449 memcpy(dev_desc->vendor, (const void *)&usb_stor_buf[8], 8); 1450 memcpy(dev_desc->product, (const void *)&usb_stor_buf[16], 16); 1451 memcpy(dev_desc->revision, (const void *)&usb_stor_buf[32], 4); 1452 dev_desc->vendor[8] = 0; 1453 dev_desc->product[16] = 0; 1454 dev_desc->revision[4] = 0; 1455 #ifdef CONFIG_USB_BIN_FIXUP 1456 usb_bin_fixup(dev->descriptor, (uchar *)dev_desc->vendor, 1457 (uchar *)dev_desc->product); 1458 #endif /* CONFIG_USB_BIN_FIXUP */ 1459 debug("ISO Vers %X, Response Data %X\n", usb_stor_buf[2], 1460 usb_stor_buf[3]); 1461 if (usb_test_unit_ready(pccb, ss)) { 1462 printf("Device NOT ready\n" 1463 " Request Sense returned %02X %02X %02X\n", 1464 pccb->sense_buf[2], pccb->sense_buf[12], 1465 pccb->sense_buf[13]); 1466 if (dev_desc->removable == 1) 1467 dev_desc->type = perq; 1468 return 0; 1469 } 1470 pccb->pdata = (unsigned char *)cap; 1471 memset(pccb->pdata, 0, 8); 1472 if (usb_read_capacity(pccb, ss) != 0) { 1473 printf("READ_CAP ERROR\n"); 1474 cap[0] = 2880; 1475 cap[1] = 0x200; 1476 } 1477 ss->flags &= ~USB_READY; 1478 debug("Read Capacity returns: 0x%08x, 0x%08x\n", cap[0], cap[1]); 1479 #if 0 1480 if (cap[0] > (0x200000 * 10)) /* greater than 10 GByte */ 1481 cap[0] >>= 16; 1482 1483 cap[0] = cpu_to_be32(cap[0]); 1484 cap[1] = cpu_to_be32(cap[1]); 1485 #endif 1486 1487 capacity = be32_to_cpu(cap[0]) + 1; 1488 blksz = be32_to_cpu(cap[1]); 1489 1490 debug("Capacity = 0x%08x, blocksz = 0x%08x\n", capacity, blksz); 1491 dev_desc->lba = capacity; 1492 dev_desc->blksz = blksz; 1493 dev_desc->log2blksz = LOG2(dev_desc->blksz); 1494 dev_desc->type = perq; 1495 debug(" address %d\n", dev_desc->target); 1496 1497 return 1; 1498 } 1499 1500 #ifdef CONFIG_DM_USB 1501 1502 static int usb_mass_storage_probe(struct udevice *dev) 1503 { 1504 struct usb_device *udev = dev_get_parent_priv(dev); 1505 int ret; 1506 1507 usb_disable_asynch(1); /* asynch transfer not allowed */ 1508 ret = usb_stor_probe_device(udev); 1509 usb_disable_asynch(0); /* asynch transfer allowed */ 1510 1511 return ret; 1512 } 1513 1514 static const struct udevice_id usb_mass_storage_ids[] = { 1515 { .compatible = "usb-mass-storage" }, 1516 { } 1517 }; 1518 1519 U_BOOT_DRIVER(usb_mass_storage) = { 1520 .name = "usb_mass_storage", 1521 .id = UCLASS_MASS_STORAGE, 1522 .of_match = usb_mass_storage_ids, 1523 .probe = usb_mass_storage_probe, 1524 #ifdef CONFIG_BLK 1525 .platdata_auto_alloc_size = sizeof(struct us_data), 1526 #endif 1527 }; 1528 1529 UCLASS_DRIVER(usb_mass_storage) = { 1530 .id = UCLASS_MASS_STORAGE, 1531 .name = "usb_mass_storage", 1532 }; 1533 1534 static const struct usb_device_id mass_storage_id_table[] = { 1535 { 1536 .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS, 1537 .bInterfaceClass = USB_CLASS_MASS_STORAGE 1538 }, 1539 { } /* Terminating entry */ 1540 }; 1541 1542 U_BOOT_USB_DEVICE(usb_mass_storage, mass_storage_id_table); 1543 #endif 1544 1545 #ifdef CONFIG_BLK 1546 static const struct blk_ops usb_storage_ops = { 1547 .read = usb_stor_read, 1548 .write = usb_stor_write, 1549 }; 1550 1551 U_BOOT_DRIVER(usb_storage_blk) = { 1552 .name = "usb_storage_blk", 1553 .id = UCLASS_BLK, 1554 .ops = &usb_storage_ops, 1555 }; 1556 #else 1557 U_BOOT_LEGACY_BLK(usb) = { 1558 .if_typename = "usb", 1559 .if_type = IF_TYPE_USB, 1560 .max_devs = USB_MAX_STOR_DEV, 1561 .desc = usb_dev_desc, 1562 }; 1563 #endif 1564