summaryrefslogtreecommitdiffstats
path: root/drivers/serial/serial_imx.c
diff options
context:
space:
mode:
authorFabio Estevam <fabio.estevam@freescale.com>2014-06-02 11:06:39 -0300
committerSascha Hauer <s.hauer@pengutronix.de>2014-06-03 08:41:50 +0200
commitf20bcf91f696da7a003d74d51edaba492d022b7c (patch)
tree4539c317e20d5bae5364765cd3310c393fa67246 /drivers/serial/serial_imx.c
parentdc2dacd2610ae541bd63124ef0fad5ea9a2148ba (diff)
downloadbarebox-f20bcf91f696da7a003d74d51edaba492d022b7c.tar.gz
barebox-f20bcf91f696da7a003d74d51edaba492d022b7c.tar.xz
serial: imx: Fix buggy transmissions when baudrate mismatches
Bit 7 of UCR3 is described in the i.MX reference manuals (with the exception of i.MX1) as follows: ADNIMP: Autobaud Detection Not Improved-. Disables new features of autobaud detection (See Baud Rate Automatic Detection Protocol, for more details). 0 Autobaud detection new features selected 1 Keep old autobaud detection mechanism The "new features" mechanism occasionally causes the receiver to get out of sync and continuously produces received characters of '0xff'. In order to reproduce the problem: $ cs0.baudrate=19200 - Change the terminal baudrate to 19200 - Type in the console and it should look good - Change the terminal baudrate back to 115200 - Type 'b' in the console, then a stream of '0xff' is transmitted in loop Setting the ADNIMP bit avoids the transmission of '0xff' in loop. Also rename the bit definition as per the reference manual. Tested on mx6q. Based on a patch from Eric Nelson for U-boot. Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/serial/serial_imx.c')
-rw-r--r--drivers/serial/serial_imx.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/serial/serial_imx.c b/drivers/serial/serial_imx.c
index e0bd185c8b..cb106271d5 100644
--- a/drivers/serial/serial_imx.c
+++ b/drivers/serial/serial_imx.c
@@ -79,7 +79,7 @@
#define UCR3_DSR (1<<10) /* Data set ready */
#define UCR3_DCD (1<<9) /* Data carrier detect */
#define UCR3_RI (1<<8) /* Ring indicator */
-#define UCR3_TIMEOUTEN (1<<7) /* Timeout interrupt enable */
+#define UCR3_ADNIMP (1<<7) /* Autobaud Detection Not Improved */
#define UCR3_RXDSEN (1<<6) /* Receive status interrupt enable */
#define UCR3_AIRINTEN (1<<5) /* Async IR wake interrupt enable */
#define UCR3_AWAKEN (1<<4) /* Async wake interrupt enable */
@@ -152,7 +152,7 @@ static struct imx_serial_devtype_data imx1_data = {
static struct imx_serial_devtype_data imx21_data = {
.ucr1_val = 0,
- .ucr3_val = 0x700 | UCR3_RXDMUXSEL,
+ .ucr3_val = 0x700 | UCR3_RXDMUXSEL | UCR3_ADNIMP,
.ucr4_val = UCR4_CTSTL_32,
.uts = 0xb4,
.onems = 0xb0,