diff mbox

hw/arm: virt uart fix

Message ID 1465353045-26323-1-git-send-email-zxq_yx_007@163.com
State New
Headers show

Commit Message

zhao xiao qiang June 8, 2016, 2:30 a.m. UTC
commit f0d1d2c115dffc1fbaf954d0b449db05c5eb79b1
("hw/char: QOM'ify pl011 model") break qemu-system-arm virt machine
if option '-machine secure=on' is provided.

The function create_uart is called twice. So make CharDriverState pointer
a parameter to create_uart instead of hardcoded.

Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
---
 hw/arm/virt.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Comments

Jerome Forissier June 8, 2016, 6:23 a.m. UTC | #1
On 06/08/2016 04:30 AM, xiaoqiang zhao wrote:
> commit f0d1d2c115dffc1fbaf954d0b449db05c5eb79b1
> ("hw/char: QOM'ify pl011 model") break qemu-system-arm virt machine
> if option '-machine secure=on' is provided.
> 
> The function create_uart is called twice. So make CharDriverState pointer
> a parameter to create_uart instead of hardcoded.
> 
> Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
> ---
>  hw/arm/virt.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)

FWIW,

Tested-by: Jerome Forissier <jerome.forissier@linaro.org>

Thanks!

> 
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index 8e46137..73113cf 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -525,7 +525,7 @@ static void create_gic(VirtBoardInfo *vbi, qemu_irq *pic, int type, bool secure)
>  }
>  
>  static void create_uart(const VirtBoardInfo *vbi, qemu_irq *pic, int uart,
> -                        MemoryRegion *mem)
> +                        MemoryRegion *mem, CharDriverState *chr)
>  {
>      char *nodename;
>      hwaddr base = vbi->memmap[uart].base;
> @@ -536,7 +536,7 @@ static void create_uart(const VirtBoardInfo *vbi, qemu_irq *pic, int uart,
>      DeviceState *dev = qdev_create(NULL, "pl011");
>      SysBusDevice *s = SYS_BUS_DEVICE(dev);
>  
> -    qdev_prop_set_chr(dev, "chardev", serial_hds[0]);
> +    qdev_prop_set_chr(dev, "chardev", chr);
>      qdev_init_nofail(dev);
>      memory_region_add_subregion(mem, base,
>                                  sysbus_mmio_get_region(s, 0));
> @@ -1259,11 +1259,11 @@ static void machvirt_init(MachineState *machine)
>  
>      create_gic(vbi, pic, gic_version, vms->secure);
>  
> -    create_uart(vbi, pic, VIRT_UART, sysmem);
> +    create_uart(vbi, pic, VIRT_UART, sysmem, serial_hds[0]);
>  
>      if (vms->secure) {
>          create_secure_ram(vbi, secure_sysmem);
> -        create_uart(vbi, pic, VIRT_SECURE_UART, secure_sysmem);
> +        create_uart(vbi, pic, VIRT_SECURE_UART, secure_sysmem, serial_hds[1]);
>      }
>  
>      create_rtc(vbi, pic);
>
Peter Maydell June 8, 2016, 7:05 p.m. UTC | #2
On 8 June 2016 at 07:23, Jérôme Forissier <jerome.forissier@linaro.org> wrote:
>
>
> On 06/08/2016 04:30 AM, xiaoqiang zhao wrote:
>> commit f0d1d2c115dffc1fbaf954d0b449db05c5eb79b1
>> ("hw/char: QOM'ify pl011 model") break qemu-system-arm virt machine
>> if option '-machine secure=on' is provided.
>>
>> The function create_uart is called twice. So make CharDriverState pointer
>> a parameter to create_uart instead of hardcoded.
>>
>> Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
>> ---
>>  hw/arm/virt.c | 8 ++++----
>>  1 file changed, 4 insertions(+), 4 deletions(-)
>
> FWIW,
>
> Tested-by: Jerome Forissier <jerome.forissier@linaro.org>

Applied to master, thanks.

-- PMM
diff mbox

Patch

diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 8e46137..73113cf 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -525,7 +525,7 @@  static void create_gic(VirtBoardInfo *vbi, qemu_irq *pic, int type, bool secure)
 }
 
 static void create_uart(const VirtBoardInfo *vbi, qemu_irq *pic, int uart,
-                        MemoryRegion *mem)
+                        MemoryRegion *mem, CharDriverState *chr)
 {
     char *nodename;
     hwaddr base = vbi->memmap[uart].base;
@@ -536,7 +536,7 @@  static void create_uart(const VirtBoardInfo *vbi, qemu_irq *pic, int uart,
     DeviceState *dev = qdev_create(NULL, "pl011");
     SysBusDevice *s = SYS_BUS_DEVICE(dev);
 
-    qdev_prop_set_chr(dev, "chardev", serial_hds[0]);
+    qdev_prop_set_chr(dev, "chardev", chr);
     qdev_init_nofail(dev);
     memory_region_add_subregion(mem, base,
                                 sysbus_mmio_get_region(s, 0));
@@ -1259,11 +1259,11 @@  static void machvirt_init(MachineState *machine)
 
     create_gic(vbi, pic, gic_version, vms->secure);
 
-    create_uart(vbi, pic, VIRT_UART, sysmem);
+    create_uart(vbi, pic, VIRT_UART, sysmem, serial_hds[0]);
 
     if (vms->secure) {
         create_secure_ram(vbi, secure_sysmem);
-        create_uart(vbi, pic, VIRT_SECURE_UART, secure_sysmem);
+        create_uart(vbi, pic, VIRT_SECURE_UART, secure_sysmem, serial_hds[1]);
     }
 
     create_rtc(vbi, pic);