Re: [PATCH v3 12/14] tty: serial: atmel: Only divide Clock Divisor if the IP is USART
From: <hidden>
Date: 2022-09-14 12:17:51
Also in:
linux-clk, linux-devicetree, linux-serial, linux-spi, lkml
On 14.09.2022 14:01, Ilpo Järvinen wrote:
On Tue, 13 Sep 2022, Sergiu Moga wrote:quoted
Make sure that the driver only divides the clock divisor if the IP handled at that point is USART, since UART IP's do not support implicit peripheral clock division. Instead, in the case of UART, go with the highest possible clock divisor. Signed-off-by: Sergiu Moga <redacted> --- v1 -> v2: - Nothing, this patch was not here before and is mainly meant as both cleanup and as a way to introduce a new field into struct atmel_uart_port that will be used by the last patch to diferentiate between USART and UART regarding the location of the Baudrate Clock Source bitmask. v2 -> v3: - Use ATMEL_US_CD instead of 65535 - Previously [PATCH 10]quoted
@@ -2283,10 +2287,21 @@ static void atmel_set_termios(struct uart_port *port, cd = uart_get_divisor(port, baud); } - if (cd > 65535) { /* BRGR is 16-bit, so switch to slower clock */ + /* + * If the current value of the Clock Divisor surpasses the 16 bit + * ATMEL_US_CD mask and the IP is USART, switch to the Peripheral + * Clock implicitly divided by 8. + * If the IP is UART however, keep the highest possible value for + * the CD and avoid needless division of CD, since UART IP's do not + * support implicit division of the Peripheral Clock. + */ + if (atmel_port->is_usart && cd > ATMEL_US_CD) { cd /= 8; mode |= ATMEL_US_USCLKS_MCK_DIV8; + } else { + cd &= ATMEL_US_CD;Now that I read the above comment with more thought, would: cd = min(cd, ATMEL_US_CD); be more appropriate here if "the highest possible value" is sought for? -- i.
Yes, you are right, that would actually be the correct operation. I somehow only thought of frequencies lower than ATMEL_US_CD when writing that operation, although the commentary does say my intention. Thanks :). Regards, Sergiu _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel