tty: amba-pl011: switch to using relaxed IO accessors
authorRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 16 Nov 2015 17:41:02 +0000 (17:41 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 Dec 2015 03:59:48 +0000 (19:59 -0800)
Using relaxed IO accessors allows GCC to better optimise this code
as we eliminate the heavy memory barriers - for example, GCC can now
cache the address of a register across a read-modify-write sequence,
rather than reloading the base address, offset and access size flag.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/amba-pl011.c

index 295f0be128f9e7f8601dd7a7c519487197602ef4..3b24aea343de1440057c1392490e08e7395d92fc 100644 (file)
@@ -262,7 +262,7 @@ static unsigned int pl011_read(const struct uart_amba_port *uap,
 {
        void __iomem *addr = uap->port.membase + pl011_reg_to_offset(uap, reg);
 
-       return uap->access_32b ? readl(addr) : readw(addr);
+       return uap->access_32b ? readl_relaxed(addr) : readw_relaxed(addr);
 }
 
 static void pl011_write(unsigned int val, const struct uart_amba_port *uap,
@@ -271,9 +271,9 @@ static void pl011_write(unsigned int val, const struct uart_amba_port *uap,
        void __iomem *addr = uap->port.membase + pl011_reg_to_offset(uap, reg);
 
        if (uap->access_32b)
-               writel(val, addr);
+               writel_relaxed(val, addr);
        else
-               writew(val, addr);
+               writew_relaxed(val, addr);
 }
 
 /*
This page took 0.027496 seconds and 5 git commands to generate.