[U-Boot] [PATCH] dm: serial: fix uart stop bits

I missed this when I added support for BMIPS UART driver and it's needed to achieve a real 115200 8N1 setup.
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com --- drivers/serial/serial_bcm6345.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/drivers/serial/serial_bcm6345.c b/drivers/serial/serial_bcm6345.c index db270e3..14c1bf2 100644 --- a/drivers/serial/serial_bcm6345.c +++ b/drivers/serial/serial_bcm6345.c @@ -141,6 +141,8 @@ static int bcm6345_serial_init(void __iomem *base, ulong clk, u32 baudrate) UART_CTL_RXTIMEOUT_5 | /* set 8 bits/symbol */ UART_CTL_BITSPERSYM_8 | + /* set 1 stop bit */ + UART_CTL_STOPBITS_1 | /* set parity to even */ UART_CTL_RXPAREVEN_MASK | UART_CTL_TXPAREVEN_MASK);

I missed this when I added support for BMIPS UART driver and it's needed to achieve a real 115200 8N1 setup.
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com --- v2: fix commit title (missed bcm6345)
drivers/serial/serial_bcm6345.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/drivers/serial/serial_bcm6345.c b/drivers/serial/serial_bcm6345.c index db270e3..14c1bf2 100644 --- a/drivers/serial/serial_bcm6345.c +++ b/drivers/serial/serial_bcm6345.c @@ -141,6 +141,8 @@ static int bcm6345_serial_init(void __iomem *base, ulong clk, u32 baudrate) UART_CTL_RXTIMEOUT_5 | /* set 8 bits/symbol */ UART_CTL_BITSPERSYM_8 | + /* set 1 stop bit */ + UART_CTL_STOPBITS_1 | /* set parity to even */ UART_CTL_RXPAREVEN_MASK | UART_CTL_TXPAREVEN_MASK);

I missed this when I added support for BMIPS UART driver and it's needed to achieve a real 115200 8N1 setup.
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com --- v3: no changes, added another fix on a separate patch. v2: fix commit title (missed bcm6345)
drivers/serial/serial_bcm6345.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/drivers/serial/serial_bcm6345.c b/drivers/serial/serial_bcm6345.c index db270e3..14c1bf2 100644 --- a/drivers/serial/serial_bcm6345.c +++ b/drivers/serial/serial_bcm6345.c @@ -141,6 +141,8 @@ static int bcm6345_serial_init(void __iomem *base, ulong clk, u32 baudrate) UART_CTL_RXTIMEOUT_5 | /* set 8 bits/symbol */ UART_CTL_BITSPERSYM_8 | + /* set 1 stop bit */ + UART_CTL_STOPBITS_1 | /* set parity to even */ UART_CTL_RXPAREVEN_MASK | UART_CTL_TXPAREVEN_MASK);

It's currently bugged and doesn't work for even cases. Right shift bits instead of dividing and fix even cases.
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com --- drivers/serial/serial_bcm6345.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/serial/serial_bcm6345.c b/drivers/serial/serial_bcm6345.c index 14c1bf2..9638952 100644 --- a/drivers/serial/serial_bcm6345.c +++ b/drivers/serial/serial_bcm6345.c @@ -157,11 +157,9 @@ static int bcm6345_serial_init(void __iomem *base, ulong clk, u32 baudrate) UART_FIFO_CFG_TX_4);
/* set baud rate */ - val = (clk / baudrate) / 16; - if (val & 0x1) - val = val; - else - val = val / 2 - 1; + val = ((clk / baudrate) >> 5); + if (!(val & 0x1)) + val -= 1; writel_be(val, base + UART_BAUD_REG);
/* clear interrupts */ @@ -243,7 +241,7 @@ static int bcm6345_serial_probe(struct udevice *dev) ret = clk_get_by_index(dev, 0, &clk); if (ret < 0) return ret; - priv->uartclk = clk_get_rate(&clk) / 2; + priv->uartclk = clk_get_rate(&clk); clk_free(&clk);
/* initialize serial */

Am 18.05.2017 um 23:09 schrieb Álvaro Fernández Rojas:
It's currently bugged and doesn't work for even cases. Right shift bits instead of dividing and fix even cases.
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com
drivers/serial/serial_bcm6345.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)
applied to u-boot-mips, thanks.

Hi Daniel, It looks like this is not the correct way to calculate it either.I will send a proper patch later today.I'm very sorry for the inconvenience. Regards,Álvaro.
On Sat, May 20, 2017 at 6:04 PM +0200, "Daniel Schwierzeck" daniel.schwierzeck@gmail.com wrote:
Am 18.05.2017 um 23:09 schrieb Álvaro Fernández Rojas:
It's currently bugged and doesn't work for even cases. Right shift bits instead of dividing and fix even cases.
Signed-off-by: Álvaro Fernández Rojas
drivers/serial/serial_bcm6345.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)
applied to u-boot-mips, thanks.

It's currently bugged and doesn't work for even cases. Right shift bits instead of dividing and fix even cases.
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com --- v4: really fix baud rate calculation v3: fix baud rate calculation
drivers/serial/serial_bcm6345.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/serial/serial_bcm6345.c b/drivers/serial/serial_bcm6345.c index 14c1bf2..0843b48 100644 --- a/drivers/serial/serial_bcm6345.c +++ b/drivers/serial/serial_bcm6345.c @@ -157,11 +157,11 @@ static int bcm6345_serial_init(void __iomem *base, ulong clk, u32 baudrate) UART_FIFO_CFG_TX_4);
/* set baud rate */ - val = (clk / baudrate) / 16; + val = ((clk / baudrate) >> 4); if (val & 0x1) - val = val; + val = (val >> 1); else - val = val / 2 - 1; + val = (val >> 1) - 1; writel_be(val, base + UART_BAUD_REG);
/* clear interrupts */ @@ -243,7 +243,7 @@ static int bcm6345_serial_probe(struct udevice *dev) ret = clk_get_by_index(dev, 0, &clk); if (ret < 0) return ret; - priv->uartclk = clk_get_rate(&clk) / 2; + priv->uartclk = clk_get_rate(&clk); clk_free(&clk);
/* initialize serial */

Am 22.05.2017 um 20:01 schrieb Álvaro Fernández Rojas:
It's currently bugged and doesn't work for even cases. Right shift bits instead of dividing and fix even cases.
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com
v4: really fix baud rate calculation v3: fix baud rate calculation
drivers/serial/serial_bcm6345.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
applied to u-boot-mips/next and replaced the previously applied v3 patch, thanks.

Am 18.05.2017 um 23:09 schrieb Álvaro Fernández Rojas:
I missed this when I added support for BMIPS UART driver and it's needed to achieve a real 115200 8N1 setup.
Signed-off-by: Álvaro Fernández Rojas noltari@gmail.com
v3: no changes, added another fix on a separate patch. v2: fix commit title (missed bcm6345)
drivers/serial/serial_bcm6345.c | 2 ++ 1 file changed, 2 insertions(+)
applied to u-boot-mips, thanks.
participants (2)
-
Daniel Schwierzeck
-
Álvaro Fernández Rojas