qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] Missing serial emulation in QEMU for Tricore board


From: Thomas Huth
Subject: Re: [Qemu-devel] Missing serial emulation in QEMU for Tricore board
Date: Wed, 19 Oct 2016 15:43:27 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0

On 19.10.2016 12:48, Filippo Battaglia wrote:
> Good morning. I'm testing QEMU for Aurix
> Tricore board.
> 
> I have seen that no output is shown by QEMU
> when the serial port of the Tricore adapter
> is used.
> 
> This is strange because, for some different
> embedded platforms (e.g. the VersatilePB board),
> the emulation of the serial output is correctly
> supported by QEMU, as it is possible to read
> at the link:
> 
> https://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/
> 
> In effect, I have built a HelloWorld binary compiled
> for the VersatilePB board and it is correctly
> loaded by qemu-system-arm.exe, which shows the string
> "Hello World" in the emulator of the serial console.
> 
> As a consequence, I've suspected that the issue
> was in the source code of the QEMU emulator related
> to the Infineon Aurix Tricore board.
> 
> I have analyzed the QEMU source code contained in
> the tricore_board.c file and I have found that my
> hypothesis was correct. The issue is that the
> source code of QEMU for the Tricore adapters
> does not support any emulation of the serial
> port.
> 
> My project exploits the Tricore boards to work,
> but it needs that the software can generate
> an output through the (emulated) serial port.
> 
> In order to solve the issue, I tried to modify the
> source code of the Tricore board module of
> QEMU in order to add a "virtual serial
> adapter", that should be emulated by reusing the source
> code exploited in the VersatilePB board for
> the PL011 PrimeCell UART.
> 
> I have modified the code also in order to emulate
> a virtual interrupt controller, which should
> be emulated by reusing the source code exploited
> in the VersatilePB board for the PL190
> PrimeCell interrupt controller.
> 
> In the file tricore_testboard.c, I have added
> the following lines to the routine
> tricore_testboard_init():
> 
> dev = sysbus_create_varargs("pl190", 0x10140000,
>                                 qdev_get_gpio_in(DEVICE(cpu), 0),
>                                 NULL);
> for (int n = 0; n<1; n++)
> {
>       pic[n] = qdev_get_gpio_in(dev, n);
> }
>               
> dev = sysbus_create_simple("tricorepb_sic", 0x10003000, NULL);
> for (int n = 0; n<1; n++)
> {
>       sysbus_connect_irq(SYS_BUS_DEVICE(dev), n, pic[n]);
>         sic[n] = qdev_get_gpio_in(dev, n);
> }
>       
> pl011_create(0xe0000000, pic[0], serial_hds[0]);
> 
> 
> 
> 
> Also the file target_tricore\cpu.c was modified:
> 
> // Begin patch
> 
> static void tricore_cpu_set_irq(void *opaque, int irq, int level)
> {
>     TriCoreCPU *cpu = opaque;
>     CPUTriCoreState *env = &cpu->env;
>     CPUState *cs = CPU(cpu);
>       
>     static const int mask[] = {
>         [TRICORE_CPU_IRQ] = CPU_INTERRUPT_HARD,
>         [TRICORE_CPU_FIQ] = CPU_INTERRUPT_FIQ,
>     };
> 
>     switch (irq)
>       {
>               case TRICORE_CPU_IRQ:
>               case TRICORE_CPU_FIQ:
>                       if (level)
>                       {
>                               cpu_interrupt(cs, mask[irq]);
>                       }
>                       else
>                       {
>                               cpu_reset_interrupt(cs, mask[irq]);
>                       }
>                       break;
>               default:
>                       g_assert_not_reached();
>     }
> }
> 
> // End patch
> 
> static void tricore_cpu_initfn(Object *obj)
> {
>     CPUState *cs = CPU(obj);
>     TriCoreCPU *cpu = TRICORE_CPU(obj);
>     CPUTriCoreState *env = &cpu->env;
>     cs->env_ptr = env;
>       
>     // Begin patch
>       
>     qdev_init_gpio_in(DEVICE(cpu), tricore_cpu_set_irq, 1);
>       
>     // End patch
>       
>     cpu_exec_init(cs, &error_abort);
> 
>     if (tcg_enabled()) {
>         tricore_tcg_init();
>     }
> }
> 
> 
> 
> I have successfully recompiled QEMU but unfortunately,
> when I run the emulator, I obtain the message:
> 
> Unknown device 'pl190' for default sysbus

Is the pl190 device included in your build? It's only enabled for
arm-softmmu by default, so you might need to add CONFIG_PL190=y to
default-configs/tricore-softmmu.mak, too.

 Thomas




reply via email to

[Prev in Thread] Current Thread [Next in Thread]