Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 7 May 2022 11:20:37 +0200
From:      Hans Petter Selasky <hps@selasky.org>
To:        Archimedes Gaviola <archimedes.gaviola@gmail.com>
Cc:        freebsd-arm@freebsd.org
Subject:   Re: Raspberry Pi 3B Over-current USB
Message-ID:  <8542947f-a62d-08c8-bb0e-ba3b6b973fec@selasky.org>
In-Reply-To: <CAJFbk7HOUm74UGS0hchGg-w9RdbKj1k8B3fcfaq8i48C1CY42A@mail.gmail.com>
References:  <CAJFbk7FgSnWvN9Z7gp1wqW1CFa8bYqrr6zccMWEhotk5HMR=Tg@mail.gmail.com> <5deaf68b-267c-56dd-603d-8ec0d82ceae2@selasky.org> <CAJFbk7Hv7BHDqmg6tFaGwgFvt6%2B2%2Bu0nkCBPrqvGiNN--Y63zQ@mail.gmail.com> <8dc68431-ad3d-84db-45b4-cd661d4a15df@selasky.org> <CAJFbk7EKpwMCav87nMg_5squJx_L-cO%2BeNfKSn5jA620uKT2YA@mail.gmail.com> <CAJFbk7HOUm74UGS0hchGg-w9RdbKj1k8B3fcfaq8i48C1CY42A@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 5/6/22 16:03, Archimedes Gaviola wrote:
> On Tue, Apr 12, 2022 at 5:16 PM Archimedes Gaviola <
> archimedes.gaviola@gmail.com> wrote:
> 
>>
>>
>> On Mon, Apr 11, 2022 at 9:59 PM Hans Petter Selasky <hps@selasky.org>
>> wrote:
>>
>>> On 4/11/22 15:59, Archimedes Gaviola wrote:
>>>> Hi Hans,
>>>>
>>>> Noted on the self-powered hub, thanks for the suggestion, I will try.
>>>>
>>>> Just wanted to share the observation from the testing I've conducted
>>> with
>>>> my Raspberry Pi 4B with the same 14.0-CURRENT to check if overcurrent is
>>>> also experienced and it did, there was overcurrent and each ports' power
>>>> shut-off during the situation but it was able to recover back. I
>>> initiated
>>>> the command 'usbconfig reset' and each port gloriously came back alive
>>> one
>>>> by one and loaded my USB keyboard and Prolific uplcom(4) drivers into
>>>> functional and operational states. My measuring device is showing the
>>> same
>>>> amount of current 460mA while the voltage stayed at 5.05 from a
>>> baseline of
>>>> 5.15 voltshttps://filebin.net/10vy575q6h2yl8og. Unlike my RPi 3B,
>>> voltage
>>>> dropped to 4.93 from a baseline of 5.19 volts. So, the difference I
>>>> observed is when the voltage dropped below 5, the system will not give a
>>>> chance to make the ports come back alive as a sort of protection
>>> mechanism.
>>>> Sharing to you the logs below (with hw.usb.uhub.debug=1).
>>>
>>> FreeBSD does not actively check and use "bMaxPower" .
>>>
>>
>> Hi Hans,
>>
>> It's okay, just tried your recommendation on a self-powered USB hub, my
>> Prolific device is now working. Thanks a lot!
>>
>> Archimedes
>>
> 
> Hi Hans,
> 
> I got my Prolific PL2303 USB-serial device working in RPi 3B without the
> self-powered USB hub. I've extended the code /usr/src/sys/dev/usb/usb_hub.c
> in the uhub_explore() routine specific to handling overcurrent condition.
> Below are the added lines of code.
> 
> freebsd@generic:~ % diff -Nur /usr/src/sys/dev/usb/usb_hub.c.orig
> /usr/src/sys/dev/usb/usb_hub.c
> --- /usr/src/sys/dev/usb/usb_hub.c.orig 2022-04-29 10:52:44.787344000 +0000
> +++ /usr/src/sys/dev/usb/usb_hub.c      2022-05-03 07:29:45.159470000 +0000
> @@ -1045,6 +1045,25 @@
>                              udev, NULL, portno, UHF_C_PORT_OVER_CURRENT);
>                          if (err != USB_ERR_NORMAL_COMPLETION)
>                                  retval = err;
> +
> +                       /* Turn on hub port power if current get
> normalized. */
> +                       DPRINTF("Turn on power on port %d.\n", portno);
> +                       err = usbd_req_set_port_feature(
> +                           udev, NULL, portno, UHF_PORT_POWER);
> +                       if (err != USB_ERR_NORMAL_COMPLETION)
> +                               retval = err;

You need a sleep here, to wait for power to come back on.

> +
> +                       /* Re-validate if overcurrent still exists. */
> +                       err = uhub_read_port_status(sc, portno);
> +                       if (err != USB_ERR_NORMAL_COMPLETION)
> +                               retval = err;
> +                       if (sc->sc_st.port_change &
> UPS_C_OVERCURRENT_INDICATOR) {
> +                               DPRINTF("Overcurrent condition on port
> %u.\n", portno);
> +                               err = usbd_req_clear_port_feature(
> +                                   udev, NULL, portno,
> UHF_C_PORT_OVER_CURRENT);
> +                               if (err != USB_ERR_NORMAL_COMPLETION)
> +                                       retval = err;
> +                       }
>                  }
> 

Can you upload the patch to https://reviews.freebsd.org and add 
"hselasky" as reviewer?

--HPS



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?8542947f-a62d-08c8-bb0e-ba3b6b973fec>