[PATCH][RFC] 8250_dw: unregister dw8250_set_termios for rk3188 chip

Ed Blake ed.blake at sondrel.com
Mon Nov 20 08:26:56 PST 2017


On 20/11/17 16:14, Shuyu Wei wrote:
> On Mon, Nov 20, 2017 at 03:44:13PM +0000, Ed Blake wrote:
>> On 20/11/17 14:40, Shuyu Wei wrote:
>>> dw8250_set_termios is causing problems for rk3188 on my radxa board.
>>> It's using a fixed clock at 24M, not baud*16 in dw8250_set_termios.
>>> I'm not sure if other rk3xxx chips are facing the same problem.
>>>
>>> Signed-off-by Wei Shuyu <wsy at dogben.com>
>>> ---
>>>  drivers/tty/serial/8250/8250_dw.c | 3 +++
>>>  1 file changed, 3 insertions(+)
>>>
>>> diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
>>> index 5bb0c42c88dd..e760a5c1f3f6 100644
>>> --- a/drivers/tty/serial/8250/8250_dw.c
>>> +++ b/drivers/tty/serial/8250/8250_dw.c
>>> @@ -340,6 +340,9 @@ static void dw8250_quirks(struct uart_port *p, struct dw8250_data *data)
>>>  			data->skip_autocfg = true;
>>>  		}
>>>  #endif
>>> +		if (of_device_is_compatible(np, "rockchip,rk3188-uart")) {
>>> +			p->set_termios = NULL;
>>> +		}
>>>  		if (of_device_is_big_endian(p->dev->of_node)) {
>>>  			p->iotype = UPIO_MEM32BE;
>>>  			p->serial_in = dw8250_serial_in32be;
>> Can you provide more details on the problem you're trying to solve?
> Hi Ed,
>
> Current dw8250_set_termios() trys to set p->uartclk and d->clk to
> baud*16, which is incorrect for rk3188. It should be a fixed 24000000.
> The incorrect value will result in a wrong baud rate, generating bad
> bytes on my serial console. Heikki Krogerus had worried about this,
> see https://patchwork.kernel.org/patch/9306275/.

If the clock is fixed to 24000000, shouldn't clk_round_rate() always
return that value?  In which case dw8250_set_termios() wouldn't try to
change the rate.

If clk_round_rate() is returning a different value for a fixed clock, it
sounds like it's the clock driver which needs to change.



More information about the Linux-rockchip mailing list