[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen master] drivers/pl011: Use combination of UARTRIS and UARTMSC instead of UARTMIS



commit 9fa7fc275c4022d57910bf2838a0150d2e66e17c
Author:     Shanker Donthineni <shankerd@xxxxxxxxxxxxxx>
AuthorDate: Thu Jun 9 12:33:20 2016 -0500
Commit:     Stefano Stabellini <sstabellini@xxxxxxxxxx>
CommitDate: Mon Jun 20 10:55:35 2016 +0100

    drivers/pl011: Use combination of UARTRIS and UARTMSC instead of UARTMIS
    
    The Masked interrupt status register (UARTMIS) is not described in ARM
    SBSA 2.x document. Anding of two registers UARTMSC and UARTRIS values
    gives the same information as register UARTMIS.
    
    UARTRIS, UARTMSC and UARTMIS definitions are found in PrimeCell UART
    PL011 (Revision: r1p4).
     - 3.3.10 Interrupt mask set/clear register, UARTIMSC
     - 3.3.11 Raw interrupt status register, UARTRIS
     - 3.3.12 Masked interrupt status register, UARTMIS
    
    This change is necessary for driver to be SBSA compliant v2.x without
    affecting the current driver functionality.
    
    Signed-off-by: Shanker Donthineni <shankerd@xxxxxxxxxxxxxx>
    Reviewed-by: Julien Grall <julien.grall@xxxxxxx>
    Signed-off-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
---
 xen/drivers/char/pl011.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/xen/drivers/char/pl011.c b/xen/drivers/char/pl011.c
index 6a3c21b..664dda6 100644
--- a/xen/drivers/char/pl011.c
+++ b/xen/drivers/char/pl011.c
@@ -53,11 +53,17 @@ static struct pl011 {
 #define pl011_read(uart, off)           readl((uart)->regs + (off))
 #define pl011_write(uart, off,val)      writel((val), (uart)->regs + (off))
 
+static unsigned int pl011_intr_status(struct pl011 *uart)
+{
+    /* UARTMIS is not documented in SBSA v2.x, so use UARTRIS/UARTIMSC. */
+    return (pl011_read(uart, RIS) & pl011_read(uart, IMSC));
+}
+
 static void pl011_interrupt(int irq, void *data, struct cpu_user_regs *regs)
 {
     struct serial_port *port = data;
     struct pl011 *uart = port->uart;
-    unsigned int status = pl011_read(uart, MIS);
+    unsigned int status = pl011_intr_status(uart);
 
     if ( status )
     {
@@ -76,7 +82,7 @@ static void pl011_interrupt(int irq, void *data, struct 
cpu_user_regs *regs)
             if ( status & (TXI) )
                 serial_tx_interrupt(port, regs);
 
-            status = pl011_read(uart, MIS);
+            status = pl011_intr_status(uart);
         } while (status != 0);
     }
 }
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.