Am 31.10.2013 21:56, schrieb Johan Hovold:
> On Thu, Oct 31, 2013 at 09:26:06PM +0100, Johan Hovold wrote:
>> On Thu, Oct 31, 2013 at 7:45 PM, Frank Schäfer wrote:
>>> Am 31.10.2013 13:30, schrieb Mika Westerberg:
>>>> On Thu, Oct 31, 2013 at 01:02:56PM +0100, Frank Schäfer wrote:
>>>>> 2) comment out the following line at the end of
>>>>> pl2303_baudrate_encode_divisor_HXD():
>>>>>
>>>>> baud = 12000000 * 32 / ((1 << buf[1]) * buf[0]);
>>>> This seems to fix the problem :)
>>>>
>>>> Once the line is commented out, the serial console works fine with the
>>>> speeds I've been testing (115200, 230400 and 460800).
>>> Urgh... so it seems getty gets confused if the actually set baud rate is
>>> reported back.
>>> The kernel still reports the standard baud rate (e.g. B230400), it only
>>> sets the exact value in the c_ispeed and c_ospeed fields of the termios
>>> struct.
>>> So even if getty doesn't support non-standard baud rates, everything
>>> should be fine.
>>> I'll have to take a closer look at this issue later.
> I think I know what's going on. The pl2303 is known to loose bytes when
> changing the termios settings (see commit bf5e5834b ("pl2303: Fix mode
> switching regression")).
>
> Your commit 57ce61aad ("usb: pl2303: fix+improve the divisor based baud
> rate encoding method") introduced a regression when it started reporting
> back the baudrates determined by the divisor algorithm.
>
> Since that commit, tty_termios_hw_change(&tty->termios, old_termios)
> will always return true -- even when userspace isn't requesting a
> different baudrate.
Hmm... so there is a bug in tty_termios_hw_change() ?

>>> Ok, so now let's see if the fixed/improved divisor based method also
>>> works for the HXD chip if we don't report the actually set baud rate.
>>> Try commenting out the line
>>>
>>>     baud = 12000000 * 32 / ((1 << A) * B);
>>>
>>> at the end of pl2303_baudrate_encode_divisor() of a clean 3.12-rc kernel.
>>> It's unlikely that this makes baud rates < 115200 working, but testing
>>> both cases doesn't harm. ;)
> I can trigger the problem here with my HXD/EA/RA/SA-device as well, and
> I've verified that not returning the calculated baudrate makes this
> particular issue *seem* to go away.
>
> This obviously has to be fixed or reverted quickly.
Indeed.

> Greg, what do you say about this? Is reverting for 3.12 the correct way
> to deal with this, and make sure these fairly invasive patches get some
> more testing before being reapplied?
>
> Reverting would mean reverting a whole bunch of commits though, as they
> appear to depend quite heavily on each other:
>
> 7d26a78 USB: pl2303: distinguish between original and cloned HX chips
> 034d152 pl2303: improve the chip type detection/distinction
> a77a8c2 pl2303: improve the chip type information output on startup
> 73b583a pl2303: simplify the else-if contruct for type_1 chips in 
> pl2303_startup()
> c23bda3 usb: pl2303: add two comments concerning the supported baud rates 
> with HX chips
> 61fa8d6 usb: pl2303: also use the divisor based baud rate encoding method for 
> baud rates < 115200 with HX chips
> b5c16c6 usb: pl2303: increase the allowed baud rate range for the divisor 
> based encoding method
> e917ba0 usb: pl2303: move the two baud rate encoding methods to separate 
> functions
> b9208c7 usb: pl2303: remove 500000 baud from the list of standard baud rates
> 75417d9 usb: pl2303: do not round to the next nearest standard baud rate for 
> the divisor based baud rate encoding method
> 57ce61a usb: pl2303: fix+improve the divsor based baud rate encoding method
> b8bdad6 USB: pl2303: restrict the divisor based baud rate encoding method to 
> the "HX" chip type
No need to revert all these patches, removing the calculation of the
resulting baud rateat the end of fcn pl2303_baudrate_encode_divisor()
should fix this issue.
The remaining question is, does the HXD work with the improved divisor
method or do we have to reintroduce the old method ?

Regards,
Frank

> Johan

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to