[RESEND][PATCH 2/3] common/usb.c: Work around keyboard reporting "USB device not accepting new address"
Marek Vasut
marex at denx.de
Tue Aug 18 23:05:03 CEST 2020
On 8/18/20 8:16 PM, Jason Wessel wrote:
>
>
> On 8/18/20 10:08 AM, Marek Vasut wrote:
>> On 8/18/20 4:34 PM, Jason Wessel wrote:
>>> When resetting the rpi3 board sometimes it will display:
>>> USB device not accepting new address (error=0)
>>>
>>> After the message appears, the usb keyboard will not work. It seems
>>> that the configuration actually did succeed however. Checking the
>>> device status for a return code of zero and continuing allows the usb
>>> keyboard and other usb devices to work function.
>>>
>>> Signed-off-by: Jason Wessel <jason.wessel at windriver.com>
>>> ---
>>> common/usb.c | 7 ++++---
>>> 1 file changed, 4 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/common/usb.c b/common/usb.c
>>> index aad13fd9c5..0eb5d40a2d 100644
>>> --- a/common/usb.c
>>> +++ b/common/usb.c
>>> @@ -1054,11 +1054,12 @@ static int usb_prepare_device(struct usb_device *dev, int addr, bool do_read,
>>> dev->devnum = addr;
>>>
>>> err = usb_set_address(dev); /* set address */
>>> -
>>> - if (err < 0) {
>>> + if (err < 0)
>>> + debug("\n usb_set_address return < 0\n");
>>
>> Please print the return code here.
>
> Good idea.
>
>>
>> Is dev->status always set by usb_set_address() when err < 0 ?
>
> Yes. The status is filled in as far as I can tell. I had
> received other values when exceeding timing thresholds with
> too many printfs() to the serial port while debugging.
>
> The usb hardware hardware devices seem to like their initialization
> to be completed in a timely manner.
I'd say, init the variable before usb_set_address with 0. All USB_ST_*
are non-zero, so no matter what usb_set_address() does,
usb_control_msg() will set dev->status to != 0, so the check is always
true then.
More information about the U-Boot
mailing list