Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp855880ybl; Wed, 11 Dec 2019 08:31:25 -0800 (PST) X-Google-Smtp-Source: APXvYqz1XH9T3UQ5pVcjs3lmdcVmDvJt3MM4QM3q93xe6WRDeClqaYhQF8xGy9wR9fbIb2Lti9l7 X-Received: by 2002:a9d:784b:: with SMTP id c11mr2731677otm.246.1576081885534; Wed, 11 Dec 2019 08:31:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576081885; cv=none; d=google.com; s=arc-20160816; b=nkgNjoNVRHwOuvgBAWAdwMZBCuXbMmrOnqSu5OcpNlSIGor2tGochAqwr1FHqNAgrZ 5pMTYCoHTge8wOqHHNMWM+2vXHVMb6LmI1P0dunisEbQ5tCtiUJXzlIQEwrLagrS8AdY c7R79Y+M19lNiESOqKNvmjeyMFFqzw5YZ5Cyid3z0g4UsGsImTi29VGuzKSmE27zya07 3qmgebg2V3REsW7QwQIKfNwVzaq4XN9462Y+MflgDwOeRqmB3PvjW1yCqS/0tXHwCdhk FneVvpoVEjlcoGxXCU5UZMNDhMuHs40JwmANQWDX6Pgbpl0f43uMgJMVyegHJpaPj4WL 9eAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=JHYJGkeSiaGQhtQ82Azl2XoUtvXhUjYn4LFTtmu0daU=; b=wNuVbHKCwSXik9UOnPONGH4+6xxKmigFnbxsW5dNuJqzTVUtmYruHrvoTQsbvAOiEA L1a8QPph3mxn7fPEX2Xy6+kSjhQEUR/G0u3HJEj9aXLCj6xOqpKPgKFQjAptLwSGHMiu mBWF6+Ez1W3xXoVtO0QNy0kCN+w2VQ55U/nV2wijAvrEn+3h3VZ7m6Fy2vAyKTaUwNHx nUP0DsefjbP2yBKBIStof/nq3A3Xe4qgXMWrlPKhveq7SDEIDPJrvJslbkSQfiXEc+Ar 94ZRAuOMH14LqsHhUjj4oI8zc5l8tVaQTegshHUmdinmh2jjLJ5nl/nvpSbHra/V2Wfx POjQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 123si1537361oif.177.2019.12.11.08.31.07; Wed, 11 Dec 2019 08:31:25 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730571AbfLKQaX (ORCPT + 99 others); Wed, 11 Dec 2019 11:30:23 -0500 Received: from mail.sysgo.com ([176.9.12.79]:55916 "EHLO mail.sysgo.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729267AbfLKQaW (ORCPT ); Wed, 11 Dec 2019 11:30:22 -0500 From: David Engraf To: richard.genoud@gmail.com, gregkh@linuxfoundation.org, jslaby@suse.com, nicolas.ferre@microchip.com, alexandre.belloni@bootlin.com, ludovic.desroches@microchip.com Cc: linux-serial@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, David Engraf Subject: [PATCH] tty/serial: atmel: fix out of range clock divider handling Date: Wed, 11 Dec 2019 17:29:54 +0100 Message-Id: <20191211162954.8393-1-david.engraf@sysgo.com> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Use MCK_DIV8 when the clock divider is > 65535. Unfortunately the mode register was already written thus the clock selection is ignored. Fix by writing the mode register after calculating the baudrate. Signed-off-by: David Engraf --- drivers/tty/serial/atmel_serial.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c index a8dc8af83f39..9983e2fabbac 100644 --- a/drivers/tty/serial/atmel_serial.c +++ b/drivers/tty/serial/atmel_serial.c @@ -2270,9 +2270,6 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios, mode |= ATMEL_US_USMODE_NORMAL; } - /* set the mode, clock divisor, parity, stop bits and data size */ - atmel_uart_writel(port, ATMEL_US_MR, mode); - /* * when switching the mode, set the RTS line state according to the * new mode, otherwise keep the former state @@ -2315,6 +2312,9 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios, } quot = cd | fp << ATMEL_US_FP_OFFSET; + /* set the mode, clock divisor, parity, stop bits and data size */ + atmel_uart_writel(port, ATMEL_US_MR, mode); + if (!(port->iso7816.flags & SER_ISO7816_ENABLED)) atmel_uart_writel(port, ATMEL_US_BRGR, quot); atmel_uart_writel(port, ATMEL_US_CR, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); -- 2.17.1