Re: u-boot debug, was: Re: U-boot on RPI3, sees disk but won't boot it
Date: Fri, 30 Sep 2022 04:11:18 UTC
On 2022-Sep-29, at 19:14, Mark Millard <marklmi@yahoo.com> wrote: > On 2022-Sep-29, at 17:27, bob prohaska <fbsd@www.zefox.net> wrote: > >> . . . > U-Boot> run bootcmd_usb0 > > Device 0: > usb_read: udev 0 > > usb_read: dev 0 startblk 0, blccnt 1 buffer 3af42c00 > read10: start 0 blocks 1 > COMMAND phase > DATA phase > usb_bulk_msg error status 0 Looks like the above is from: result = usb_bulk_msg(us->pusb_dev, pipe, srb->pdata, srb->datalen, &data_actlen, USB_CNTL_TIMEOUT * 5); /* special handling of STALL in DATA phase */ if ((result < 0) && (us->pusb_dev->status & USB_ST_STALLED)) { . . . } if (result < 0) { debug("usb_bulk_msg error status %ld\n", us->pusb_dev->status); usb_stor_BBB_reset(us); return USB_STOR_TRANSPORT_FAILED; } (result's value seems to not be reported.) The above code's usb_stor_BBB_reset use initiated the below: > BBB_reset > usb_control_msg: request: 0xFF, requesttype: 0x21, value 0x0 index 0x0 length 0x0 > BBB_reset result -110: status 0 reset > usb_control_msg: request: 0x1, requesttype: 0x2, value 0x0 index 0x81 length 0x0 > BBB_reset result -22: status 0 clearing IN endpoint > usb_control_msg: request: 0x1, requesttype: 0x2, value 0x0 index 0x2 length 0x0 > BBB_reset result -22: status 0 clearing OUT endpoint > BBB_reset done Looks like -110 is from a: return -ETIMEDOUT; Looks like each -22 is from a: return -EINVAL; The -EINVAL results seem to be from usb_clear_halt doing: int endp = usb_pipeendpoint(pipe)|(usb_pipein(pipe)<<7); result = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT, 0, endp, NULL, 0, USB_CNTL_TIMEOUT * 3); /* don't clear if failed */ if (result < 0) return result; usb_clear_halt is used twice, via usb_stor_BBB_reset : pipe = usb_rcvbulkpipe(us->pusb_dev, us->ep_in); result = usb_clear_halt(us->pusb_dev, pipe); pipe = usb_sndbulkpipe(us->pusb_dev, us->ep_out); result = usb_clear_halt(us->pusb_dev, pipe); > Read ERROR This is from: retry_it: if (smallblks == ss->max_xfer_blk) usb_show_progress(); srb->datalen = block_dev->blksz * smallblks; srb->pdata = (unsigned char *)buf_addr; if (usb_read_10(srb, ss, start, smallblks)) { debug("Read ERROR\n"); ss->flags &= ~USB_READY; usb_request_sense(srb, ss); if (retry--) goto retry_it; blkcnt -= blks; break; } The retry_it getting to usb_read_10 again lead to: > COMMAND phase > DATA phase So it is the retry using usb_read_10 that ends up with the RPi3B reboot happening instead of completing. I'm not likely to manage to give this further interpretation. === Mark Millard marklmi at yahoo.com