Hello Adrian, Thank you for your remarks. Please check my answers in-line. Best regards Zbigniew Bodek 2013/10/7 Adrian Chadd <adrian_at_freebsd.org> > Hi, > > You should add: > > * a loop counter, to break out after a while; > [ZBB] In general as long as UART is busy we cannot proceed but if the timeout occurs we could return an error. Do you agree? > * a DELAY(1) or something. > [ZBB] DELAY is also a busy wait after all. The reasonable solution might be to use ns8250_delay() to get the transmission time and use it for timeout from the first point. I would DELAY(1) in each loop and decrement value acquired from ns8250_delay(). The loop should break during that time or we return an error. What do you think? > > > > -adrian > > > > On 7 October 2013 12:54, Zbigniew Bodek <zbb_at_freebsd.org> wrote: > >> Hello. >> >> I would like to present a patch for ns8250 serial that I would like to >> commit in the near future (if there are no objections). >> >> The patch is fixing newest DesignWare UART with busy detection. >> During frequency divisors configuration when UART is busy transferring or >> receiving data, line control register manipulation will not take effect. >> Therefore, we will not set divisor latch access bit and we will corrupt >> LCR >> instead of configuring divisors. >> It is necessary to wait until UART finishes all transfers to proceed with >> the configuration. >> >> This was detected on Armada XP as UART fails on this issue 100/100 >> attempts. >> The patch was tested by kevlo_at_ and me and it works on our Armada XP - >> based >> systems. >> >> Please send your comment or remarks if there are any. >> >> Best regards >> Zbigniew Bodek >> >> _______________________________________________ >> freebsd-current_at_freebsd.org mailing list >> http://lists.freebsd.org/mailman/listinfo/freebsd-current >> To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org >> " >> > >Received on Mon Oct 07 2013 - 18:36:19 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:42 UTC