From 865fa1f7e0fdad014f6dffeb2b9fced7b5623129 Mon Sep 17 00:00:00 2001
From: Julien Grall <julien.grall@gmail.com>
Date: Tue, 17 May 2011 17:04:41 +0200
Subject: [PATCH 1/2] Fix UARTs support for leon2


Signed-off-by: Julien Grall <julien.grall@gmail.com>
---
 hw/leon.c |   32 +++++++++++++++++++++++++++++++-
 1 files changed, 31 insertions(+), 1 deletions(-)

diff --git a/hw/leon.c b/hw/leon.c
index 156b5b7..e156089 100644
--- a/hw/leon.c
+++ b/hw/leon.c
@@ -587,6 +587,20 @@ static uint32_t leon_io_readl(void *opaque, target_phys_addr_t addr)
         ret = s->uart1.status;
         break;
 
+    case UART_2_DATA_REGISTER:
+    case UART_2_DATA_REGISTER + 3: /* when only one byte read  */
+        ret = leon_uart_read_uad(&s->uart2);
+        break;
+    case UART_2_CONTROL_REGISTER:
+        ret = s->uart1.control;
+        break;
+    case UART_2_SCALER_REGISTER:
+        ret = s->uart1.scaler;
+        break;
+    case UART_2_STATUS_REGISTER:
+        ret = s->uart1.status;
+        break;
+
     case TIMER_1_RELOAD_REGISTER ... PRESCALER_RELOAD_REGISTER:
         ret = leon_timer_io_read(s, addr);
         break;
@@ -662,8 +676,25 @@ static void leon_io_writel(void *opaque, target_phys_addr_t addr,
     case UART_1_DATA_REGISTER + 3: /* when only one byte write  */
     {
         unsigned char c = val;
-        qemu_chr_write(s->uart1.chr, &c, 1);
+        if (s->uart1.chr) {
+            qemu_chr_write(s->uart1.chr, &c, 1);
+        }
+    }
+    break;
+
+    case UART_2_CONTROL_REGISTER:
+        s->uart2.control = val & 0x1ff;
+        break;
+    case UART_2_SCALER_REGISTER:
+        s->uart2.scaler = val & 0x3ff;
+        break;
+    case UART_2_DATA_REGISTER:
+    case UART_2_DATA_REGISTER + 3: /* when only one byte write  */
+    {
+        unsigned char c = val;
+        if (s->uart2.chr) {
+            qemu_chr_write(s->uart2.chr, &c, 1);
+        }
     }
     break;
 
-- 
1.7.5.1

