Re: u-boot debug, was: Re: U-boot on RPI3, sees disk but won't boot it
- Reply: bob prohaska : "Re: u-boot debug, was: Re: U-boot on RPI3, sees disk but won't boot it"
- Reply: Mark Millard : "Re: u-boot debug, was: Re: U-boot on RPI3, sees disk but won't boot it"
- In reply to: bob prohaska : "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: Thu, 29 Sep 2022 01:03:23 UTC
On 2022-Sep-28, at 17:21, bob prohaska <fbsd@www.zefox.net> wrote: > With the correct patches finally in place there is some > extra output from u-boot: > > U-Boot 2022.04 (Sep 28 2022 - 16:45:12 -0700) > . . . > starting USB... > . . . > usb_new_device: Cannot read configuration, skipping device 152d:0583 The above is reporting U-Boot having a problem dealing with your bridge/drive combination as seen via bridge access, presuming that I recognize the 152d:0583 correctly. Interestingly, that message is not from the routine usb_new_device but is from: int usb_select_config(struct usb_device *dev) { . . . /* * Kingston DT Ultimate 32GB USB 3.0 seems to be extremely sensitive * about this first Get Descriptor request. If there are any other * requests in the first microframe, the stick crashes. Wait about * one microframe duration here (1mS for USB 1.x , 125uS for USB 2.0). */ mdelay(1); /* only support for one config for now */ err = usb_get_configuration_len(dev, 0); if (err >= 0) { tmpbuf = (unsigned char *)malloc_cache_aligned(err); if (!tmpbuf) err = -ENOMEM; else err = usb_get_configuration_no(dev, 0, tmpbuf, err); } if (err < 0) { printf("usb_new_device: Cannot read configuration, " \ "skipping device %04x:%04x\n", dev->descriptor.idVendor, dev->descriptor.idProduct); free(tmpbuf); return err; } . . . where: /********************************************************************** * gets len of configuration cfgno */ int usb_get_configuration_len(struct usb_device *dev, int cfgno) { int result; ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, 9); struct usb_config_descriptor *config; config = (struct usb_config_descriptor *)&buffer[0]; result = usb_get_descriptor(dev, USB_DT_CONFIG, cfgno, buffer, 9); if (result < 9) { if (result < 0) printf("unable to get descriptor, error %lX\n", dev->status); else printf("config descriptor too short " \ "(expected %i, got %i)\n", 9, result); return -EIO; } return le16_to_cpu(config->wTotalLength); } and: /********************************************************************** * gets configuration cfgno and store it in the buffer */ int usb_get_configuration_no(struct usb_device *dev, int cfgno, unsigned char *buffer, int length) { int result; struct usb_config_descriptor *config; config = (struct usb_config_descriptor *)&buffer[0]; result = usb_get_descriptor(dev, USB_DT_CONFIG, cfgno, buffer, length); debug("get_conf_no %d Result %d, wLength %d\n", cfgno, result, le16_to_cpu(config->wTotalLength)); config->wTotalLength = result; /* validated, with CPU byte order */ return result; } (I'll skip more nested routine usage.) We apparently do not have enough output enabled to see the debug routine's output. We are seeing the printf output. There might be a way to set the output message levels while at a U-Boot prompt, up to the maximum compiled in. But it may also be that we would need, say, CONFIG_LOG_MAX_LEVEL=8 instead of the 7 we are now using. === Mark Millard marklmi at yahoo.com