[v13,4/5] uart: pl011: Improve LCRH register access decision

Message ID 1438328959-16177-5-git-send-email-jun.nie@linaro.org
State Accepted
Commit 09dcc7dfc05b31bf0bbcd1511cd1a2644908d5c8
Headers show

Commit Message

Jun Nie July 31, 2015, 7:49 a.m.
Improve LCRH register access decision as ARM PL011 lcrh
register serve as both TX and RX, while other SOC may
implement TX and RX function with separated register.

Signed-off-by: Jun Nie <jun.nie@linaro.org>
---
 drivers/tty/serial/amba-pl011.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

Comments

=?UTF-8?Q?Andr=c3=a9_Przywara?= Sept. 18, 2015, 10:58 a.m. | #1
Hi Jun,

On 31/07/15 08:49, Jun Nie wrote:
> Improve LCRH register access decision as ARM PL011 lcrh
> register serve as both TX and RX, while other SOC may
> implement TX and RX function with separated register.
> 
> Signed-off-by: Jun Nie <jun.nie@linaro.org>
> ---
>  drivers/tty/serial/amba-pl011.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
> index e1f3bd5..017443d 100644
> --- a/drivers/tty/serial/amba-pl011.c
> +++ b/drivers/tty/serial/amba-pl011.c
> @@ -249,6 +249,11 @@ struct uart_amba_port {
>  #endif
>  };
>  
> +static bool is_implemented(struct uart_amba_port *uap, unsigned int reg)
> +{
> +	return uap->reg_lut[reg] != (u16)~0;
> +}
> +

Just a nit: is_implemented sounds a bit too generic for me, could this
be more specific like reg_is_implemented or the like?

Other than that the patch looks good to me.

Cheers,
Andre.

>  static unsigned int pl011_readw(struct uart_amba_port *uap, int index)
>  {
>  	WARN_ON(index > REG_NR);
> @@ -1649,7 +1654,7 @@ static int pl011_hwinit(struct uart_port *port)
>  static void pl011_write_lcr_h(struct uart_amba_port *uap, unsigned int lcr_h)
>  {
>  	pl011_writew(uap, lcr_h, uap->lcrh_rx);
> -	if (uap->lcrh_rx != uap->lcrh_tx) {
> +	if (is_implemented(uap, REG_ST_LCRH_RX)) {
>  		int i;
>  		/*
>  		 * Wait 10 PCLKs before writing LCRH_TX register,
> @@ -1784,7 +1789,7 @@ static void pl011_disable_uart(struct uart_amba_port *uap)
>  	 * disable break condition and fifos
>  	 */
>  	pl011_shutdown_channel(uap, uap->lcrh_rx);
> -	if (uap->lcrh_rx != uap->lcrh_tx)
> +	if (is_implemented(uap, REG_ST_LCRH_RX))
>  		pl011_shutdown_channel(uap, uap->lcrh_tx);
>  }
>  
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
index e1f3bd5..017443d 100644
--- a/drivers/tty/serial/amba-pl011.c
+++ b/drivers/tty/serial/amba-pl011.c
@@ -249,6 +249,11 @@  struct uart_amba_port {
 #endif
 };
 
+static bool is_implemented(struct uart_amba_port *uap, unsigned int reg)
+{
+	return uap->reg_lut[reg] != (u16)~0;
+}
+
 static unsigned int pl011_readw(struct uart_amba_port *uap, int index)
 {
 	WARN_ON(index > REG_NR);
@@ -1649,7 +1654,7 @@  static int pl011_hwinit(struct uart_port *port)
 static void pl011_write_lcr_h(struct uart_amba_port *uap, unsigned int lcr_h)
 {
 	pl011_writew(uap, lcr_h, uap->lcrh_rx);
-	if (uap->lcrh_rx != uap->lcrh_tx) {
+	if (is_implemented(uap, REG_ST_LCRH_RX)) {
 		int i;
 		/*
 		 * Wait 10 PCLKs before writing LCRH_TX register,
@@ -1784,7 +1789,7 @@  static void pl011_disable_uart(struct uart_amba_port *uap)
 	 * disable break condition and fifos
 	 */
 	pl011_shutdown_channel(uap, uap->lcrh_rx);
-	if (uap->lcrh_rx != uap->lcrh_tx)
+	if (is_implemented(uap, REG_ST_LCRH_RX))
 		pl011_shutdown_channel(uap, uap->lcrh_tx);
 }