]> git.kernelconcepts.de Git - karo-tx-linux.git/commit
tty: serial: lpuart: Fix the logic for detecting the 32-bit type UART
authorFabio Estevam <fabio.estevam@nxp.com>
Tue, 11 Jul 2017 11:03:43 +0000 (08:03 -0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 17 Jul 2017 12:14:24 +0000 (14:14 +0200)
commit3ee5447e8cd9a65d08fbb49fa9767cbf7fef6d91
treebb96b6c9eec940fd0ecc86e14fc92f6b6a099943
parent514ab34dbad6c6fa824a1f56984c196e59082346
tty: serial: lpuart: Fix the logic for detecting the 32-bit type UART

Commit 0d6fce904452 ("tty: serial: lpuart: introduce lpuart_soc_data to
represent SoC property") introduced a buggy logic for detecting the 32-bit
type UART since the condition: "if (sport->port.iotype & UPIO_MEM32BE)"
is always true.

Performing such bitfield AND operation is not correct, because in the
case of Vybrid UART iotype is UPIO_MEM (2), so:

UPIO_MEM & UPIO_MEM32BE = 010 & 110 = 010, which is true.

Such logic tells the driver to always treat the UART operations as 32-bit,
leading to the driver misbehavior on Vybrid.

Fix the 32-bit type detection logic to avoid UART breakage on Vybrid.

While at it, introduce a lpuart_is_32() function to help readability.

Fixes: 0d6fce904452 ("tty: serial: lpuart: introduce lpuart_soc_data to represent SoC property")
Reported-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
Reviewed-by: Dong Aisheng <aisheng.dong@nxp.com>
Tested-by: Vivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/fsl_lpuart.c