Re: u-boot debug, was: Re: U-boot on RPI3, sees disk but won't boot it
- In reply to: Mark Millard : "Re: u-boot debug, was: Re: U-boot on RPI3, sees disk but won't boot it"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 30 Sep 2022 04:51:31 UTC
On 2022-Sep-29, at 21:11, Mark Millard <marklmi@yahoo.com> wrote:
> 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.
>
You generated 2 more error logs. They have (among other
things) . . .
pelorus_console.txt2_boot_loop ends with:
scanning usb for storage devices... 1 Storage Device(s) found
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
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 -110: status 0 clearing IN endpoint
usb_control_msg: request: 0x1, requesttype: 0x2, value 0x0 index 0x2 length 0x0
BBB_reset result -110: status 0 clearing OUT endpoint
BBB_reset done
Read ERROR
COMMAND phase
usb_stor_BBB_comdat:usb_bulk_msg error
failed to send CBW status 0
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 -110: status 0 clearing IN endpoint
usb_control_msg: request: 0x1, requesttype: 0x2, value 0x0 index 0x2 length 0x0
BBB_reset result -110: status 0 clearing OUT endpoint
BBB_reset done
Request Sense returned 00 00 00
(Then it repeats, starting with read10 again, over and
over.)
pelorus_console_txt3_bootcmd_0_failure ends with:
scanning usb for storage devices... 1 Storage Device(s) found
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
BBB_reset
usb_control_msg: request: 0xFF, requesttype: 0x21, value 0x0 index 0x0 length 0x0
BBB_reset result -22: 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
Read ERROR
COMMAND phase
DATA phase
(Apparently it hung up instead of rebooting or repeating?)
So, at leasts 3 different patterns of -ETIMEDOUT and -EINVAL
results in the BBB_reset activity, each of the 3 having a
somewhat different overall behavior.
I've no clue why the mixes of -ETIMEDOUT and -EINVAL happen.
===
Mark Millard
marklmi at yahoo.com