On Mon, Nov 28, 2022 at 11:08:25AM -0700, Alex Henrie wrote: > On Monday, November 28, 2022 7:41:59 AM MST Johan Hovold wrote: > > On Fri, Nov 25, 2022 at 08:58:25PM -0700, Alex Henrie wrote: > > > When a baud rate of 0 is requested, both the 8250 driver and the FTDI > > > driver reset the baud rate to the default of 9600 (see the comment above > > > the uart_get_baud_rate function). Some old versions of the NXP blhost > > > utility depend on this behavior. > > > > What exactly do you mean by "depend on" here? Setting B0 is supposed to > > hang up a modem connection by deasserting the modem control lines, but > > there's nothing mandating any particular line speed to be set in > > hardware. Why would that even matter? > > > > If the user space tool is thrown off by the fact that B0 isn't > > implemented, perhaps that's what should be addressed. > > Oh, it's definitely a bug in blhost. The program sets the baud rate to 0, then > tries to communicate over the UART assuming that the baud rate is 9600. It's > been fixed in the latest version of blhost, but I'm stuck on an old version and > there's nothing I can do about that. > > I don't know why the 8250 and FTDI drivers map B0 to B9600, however it's very > old behavior that must have had a purpose. Maybe Russell knows? What exactly do you think should be done when a baud rate of zero is requested? The fact of the matter is that at hardware level, the UART takes a clock, and divides that down. To get to a baud rate of zero, one would need an infinitely large divisor, which (a) is impossible to program into the hardware and (b) would trigger a divide-by-zero error in the kernel. So, we have to choose something. That decision was made before my time, when Ted Ts'o was maintaining what was the original serial.c 8250-based driver, and the behaviour he adopted was to set a baud rate of 9600 when B0 was requested, which is reasonable - 9600 baud is the default setting. POSIX (which is what we use to define the behaviour of the TTY layer, or at least what we _used_ to) doesn't specify the behaviour of B0 as the output rate, other than it shall cause the model control lines to be deasserted. What baud rate you get on the line is unspecified, and thus left up to the implementation. So basically, 9600 baud for B0 is the behaviour of the 8250 driver going back to the very early Linux versions and that has become the standard Linux implementation shared by a great many serial drivers. In effect, it's almost a de-facto standard. -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!