libplatsupport,zynq: fix clearing isr bits

Signed-off-by: Axel Heider <axelheider@gmx.de>
diff --git a/libplatsupport/src/mach/zynq/serial.c b/libplatsupport/src/mach/zynq/serial.c
index b0a1de6..4c0f55d 100644
--- a/libplatsupport/src/mach/zynq/serial.c
+++ b/libplatsupport/src/mach/zynq/serial.c
@@ -148,14 +148,14 @@
     uint32_t mr;            /* 0x04 Mode Register */
     uint32_t ier;           /* 0x08 Interrupt Enable Register */
     uint32_t idr;           /* 0x0C Interrupt Disable Register */
-    uint32_t imr;           /* 0x10 Interrupt Mask Register */
-    uint32_t isr;           /* 0x14 Channel Interrupt Status Register */
+    uint32_t imr;           /* 0x10 Interrupt Mask Register (read-only) */
+    uint32_t isr;           /* 0x14 Channel Interrupt Status Register (write a 1 to clear) */
     uint32_t baudgen;       /* 0x18 Baud Rate Generator Register */
     uint32_t rxtout;        /* 0x1C Receiver Timeout Register */
     uint32_t rxwm;          /* 0x20 Receiver FIFO Trigger Level Register */
     uint32_t modemcr;       /* 0x24 Modem Control Register */
     uint32_t modemsr;       /* 0x28 Modem Status Register */
-    uint32_t sr;            /* 0x2C Channel Status Register */
+    uint32_t sr;            /* 0x2C Channel Status Register (read-only) */
     uint32_t fifo;          /* 0x30 Transmit and Receive FIFO */
     uint32_t bauddiv;       /* 0x34 Baud Rate Divider Register */
     uint32_t flowdel;       /* 0x38 Flow Control Delay Register */
@@ -195,9 +195,11 @@
     if (!(regs->sr & UART_SR_REMPTY)) {
         c = regs->fifo;
 
-        /* Clear the Rx timeout interrupt status bit if set */
+        /* Clear the Rx timeout interrupt status bit if set. Register
+         * implements the "write a 1 to clear" semantic.
+         */
         if (regs->isr & UART_ISR_TIMEOUT) {
-            regs->isr &= ~UART_ISR_TIMEOUT;
+            regs->isr = UART_ISR_TIMEOUT;
         }
     }