serial: 8250: Fix reporting real baudrate value in c_ospeed field
authorPali Rohár <pali@kernel.org>
Mon, 27 Sep 2021 09:37:04 +0000 (11:37 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 18 Nov 2021 18:16:07 +0000 (19:16 +0100)
commit02981a96642fbdfbeaeaa659db54f3375c54e69d
tree9a3ebc68390273140462e39f1f90c0df5b0fc6e2
parent670f1f30ed706e192448a6b3f4f0af73fdc22591
serial: 8250: Fix reporting real baudrate value in c_ospeed field

commit 32262e2e429cdb31f9e957e997d53458762931b7 upstream.

In most cases it is not possible to set exact baudrate value to hardware.

So fix reporting real baudrate value which was set to hardware via c_ospeed
termios field. It can be retrieved by ioctl(TCGETS2) from userspace.

Real baudrate value is calculated from chosen hardware divisor and base
clock. It is implemented in a new function serial8250_compute_baud_rate()
which is inverse of serial8250_get_divisor() function.

With this change is fixed also UART timeout value (it is updated via
uart_update_timeout() function), which is calculated from the now fixed
baudrate value too.

Cc: stable@vger.kernel.org
Signed-off-by: Pali Rohár <pali@kernel.org>
Link: https://lore.kernel.org/r/20210927093704.19768-1-pali@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/8250/8250_port.c