Date: Sat, 7 May 2022 22:35:57 +0800 From: Archimedes Gaviola <archimedes.gaviola@gmail.com> To: Hans Petter Selasky <hps@selasky.org> Cc: freebsd-arm@freebsd.org Subject: Re: Raspberry Pi 3B Over-current USB Message-ID: <CAJFbk7Hs7qmfS3TYWuk_=FpgBoY3hBj766RBsGwUL1%2B=3__qPw@mail.gmail.com> In-Reply-To: <CAJFbk7EHTyDs7%2BUEOkScJc%2BMDH-VaofqWWXSW7Vrw1unT6JpBA@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> <8542947f-a62d-08c8-bb0e-ba3b6b973fec@selasky.org> <CAJFbk7EHTyDs7%2BUEOkScJc%2BMDH-VaofqWWXSW7Vrw1unT6JpBA@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--0000000000004bcccc05de6ce597 Content-Type: text/plain; charset="UTF-8" On Sat, May 7, 2022 at 8:46 PM Archimedes Gaviola < archimedes.gaviola@gmail.com> wrote: > > > On Sat, May 7, 2022 at 5:20 PM Hans Petter Selasky <hps@selasky.org> > wrote: > >> 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? >> > > Thank you Hans for the feedback! Just created an account and once approved > and activated then I'll upload it. Meanwhile, for the sleep you've > mentioned what particular function should be used? I tried these two, > sleep(3) and usleep(3) but seems to encounter errors during compilation. > Hi Hans, Submitted, please see https://reviews.freebsd.org/D35146. Thanks, Archimedes --0000000000004bcccc05de6ce597 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=3D"gmail_quote">= <div dir=3D"ltr" class=3D"gmail_attr">On Sat, May 7, 2022 at 8:46 PM Archim= edes Gaviola <<a href=3D"mailto:archimedes.gaviola@gmail.com">archimedes= .gaviola@gmail.com</a>> wrote:<br></div><blockquote class=3D"gmail_quote= " style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);= padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div clas= s=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Sat, May 7, 2022= at 5:20 PM Hans Petter Selasky <<a href=3D"mailto:hps@selasky.org" targ= et=3D"_blank">hps@selasky.org</a>> wrote:<br></div><blockquote class=3D"= gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(20= 4,204,204);padding-left:1ex">On 5/6/22 16:03, Archimedes Gaviola wrote:<br> > On Tue, Apr 12, 2022 at 5:16 PM Archimedes Gaviola <<br> > <a href=3D"mailto:archimedes.gaviola@gmail.com" target=3D"_blank">arch= imedes.gaviola@gmail.com</a>> wrote:<br> > <br> >><br> >><br> >> On Mon, Apr 11, 2022 at 9:59 PM Hans Petter Selasky <<a href=3D= "mailto:hps@selasky.org" target=3D"_blank">hps@selasky.org</a>><br> >> wrote:<br> >><br> >>> On 4/11/22 15:59, Archimedes Gaviola wrote:<br> >>>> Hi Hans,<br> >>>><br> >>>> Noted on the self-powered hub, thanks for the suggestion, = I will try.<br> >>>><br> >>>> Just wanted to share the observation from the testing I= 9;ve conducted<br> >>> with<br> >>>> my Raspberry Pi 4B with the same 14.0-CURRENT to check if = overcurrent is<br> >>>> also experienced and it did, there was overcurrent and eac= h ports' power<br> >>>> shut-off during the situation but it was able to recover b= ack. I<br> >>> initiated<br> >>>> the command 'usbconfig reset' and each port glorio= usly came back alive<br> >>> one<br> >>>> by one and loaded my USB keyboard and Prolific uplcom(4) d= rivers into<br> >>>> functional and operational states. My measuring device is = showing the<br> >>> same<br> >>>> amount of current 460mA while the voltage stayed at 5.05 f= rom a<br> >>> baseline of<br> >>>> 5.15 voltshttps://<a href=3D"http://filebin.net/10vy575q6h= 2yl8og" rel=3D"noreferrer" target=3D"_blank">filebin.net/10vy575q6h2yl8og</= a>. Unlike my RPi 3B,<br> >>> voltage<br> >>>> dropped to 4.93 from a baseline of 5.19 volts. So, the dif= ference I<br> >>>> observed is when the voltage dropped below 5, the system w= ill not give a<br> >>>> chance to make the ports come back alive as a sort of prot= ection<br> >>> mechanism.<br> >>>> Sharing to you the logs below (with hw.usb.uhub.debug=3D1)= .<br> >>><br> >>> FreeBSD does not actively check and use "bMaxPower" = .<br> >>><br> >><br> >> Hi Hans,<br> >><br> >> It's okay, just tried your recommendation on a self-powered US= B hub, my<br> >> Prolific device is now working. Thanks a lot!<br> >><br> >> Archimedes<br> >><br> > <br> > Hi Hans,<br> > <br> > I got my Prolific PL2303 USB-serial device working in RPi 3B without t= he<br> > self-powered USB hub. I've extended the code /usr/src/sys/dev/usb/= usb_hub.c<br> > in the uhub_explore() routine specific to handling overcurrent conditi= on.<br> > Below are the added lines of code.<br> > <br> > freebsd@generic:~ % diff -Nur /usr/src/sys/dev/usb/usb_hub.c.orig<br> > /usr/src/sys/dev/usb/usb_hub.c<br> > --- /usr/src/sys/dev/usb/usb_hub.c.orig 2022-04-29 10:52:44.787344000 = +0000<br> > +++ /usr/src/sys/dev/usb/usb_hub.c=C2=A0 =C2=A0 =C2=A0 2022-05-03 07:2= 9:45.159470000 +0000<br> > @@ -1045,6 +1045,25 @@<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 udev, NULL, portno, UHF_C_PORT_OVER_CURR= ENT);<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 if (err !=3D USB_ERR_NORMAL_COMPLETION)<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 retval =3D err;<br> > +<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0/* Turn on hub port power if current get<br> > normalized. */<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0DPRINTF("Turn on power on port %d.\n", portno);<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0err =3D usbd_req_set_port_feature(<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0udev, NULL, portno, UHF_PORT_POWER);<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0if (err !=3D USB_ERR_NORMAL_COMPLETION)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0retval =3D err;<br> <br> You need a sleep here, to wait for power to come back on.<br> <br> > +<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0/* Re-validate if overcurrent still exists. */<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0err =3D uhub_read_port_status(sc, portno);<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0if (err !=3D USB_ERR_NORMAL_COMPLETION)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0retval =3D err;<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0if (sc->sc_st.port_change &<br> > UPS_C_OVERCURRENT_INDICATOR) {<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0DPRINTF("Overcurrent conditi= on on port<br> > %u.\n", portno);<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0err =3D usbd_req_clear_port_featu= re(<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0udev, NULL, portno,= <br> > UHF_C_PORT_OVER_CURRENT);<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (err !=3D USB_ERR_NORMAL_COMPL= ETION)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0retva= l =3D err;<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0}<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br> > <br> <br> Can you upload the patch to <a href=3D"https://reviews.freebsd.org" rel=3D"= noreferrer" target=3D"_blank">https://reviews.freebsd.org</a> and add <br> "hselasky" as reviewer?<br></blockquote><div><br></div></div><div= class=3D"gmail_quote">Thank you Hans for the feedback! Just created an acc= ount and once approved and activated then I'll upload it. Meanwhile, fo= r the sleep you've mentioned what particular function should be used? I= tried these two, sleep(3) and usleep(3) but seems to encounter errors duri= ng compilation.<br></div></div></blockquote><div><br></div><div>Hi Hans,</d= iv><div><br></div><div> Submitted, please see <a href=3D"https://reviews.freebsd.org/D35146">https:= //reviews.freebsd.org/D35146</a>.</div><div><br></div><div>Thanks,</div><di= v>Archimedes<br></div></div></div> --0000000000004bcccc05de6ce597--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJFbk7Hs7qmfS3TYWuk_=FpgBoY3hBj766RBsGwUL1%2B=3__qPw>