[Qemu-devel] [PATCH] grlib_apbuart: always enable tx and rx

KONRAD Frederic posted 1 patch 7 years, 7 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/1519898536-19027-1-git-send-email-frederic.konrad@adacore.com
Test checkpatch passed
Test docker-build@min-glib passed
Test docker-mingw@fedora passed
Test docker-quick@centos6 passed
Test ppcbe passed
Test ppcle passed
Test s390x passed
hw/char/grlib_apbuart.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[Qemu-devel] [PATCH] grlib_apbuart: always enable tx and rx
Posted by KONRAD Frederic 7 years, 7 months ago
We often use a bootloader for this board. So lets set the uart in a state
which it can emit characters as if we were using a bootloader.

Signed-off-by: KONRAD Frederic <frederic.konrad@adacore.com>
---
 hw/char/grlib_apbuart.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c
index bac11be..a8020ea 100644
--- a/hw/char/grlib_apbuart.c
+++ b/hw/char/grlib_apbuart.c
@@ -265,8 +265,8 @@ static void grlib_apbuart_reset(DeviceState *d)
 
     /* Transmitter FIFO and shift registers are always empty in QEMU */
     uart->status =  UART_TRANSMIT_FIFO_EMPTY | UART_TRANSMIT_SHIFT_EMPTY;
-    /* Everything is off */
-    uart->control = 0;
+    /* Enable Tx and Rx as the bootloader would do */
+    uart->control = UART_RECEIVE_ENABLE | UART_TRANSMIT_ENABLE;
     /* Flush receive FIFO */
     uart->len = 0;
     uart->current = 0;
-- 
1.8.3.1


Re: [Qemu-devel] [Qemu-trivial] [PATCH] grlib_apbuart: always enable tx and rx
Posted by Philippe Mathieu-Daudé 7 years, 7 months ago
Hi Frederic,

On 03/01/2018 07:02 AM, KONRAD Frederic wrote:
> We often use a bootloader for this board. So lets set the uart in a state
> which it can emit characters as if we were using a bootloader.
> 
> Signed-off-by: KONRAD Frederic <frederic.konrad@adacore.com>
> ---
>  hw/char/grlib_apbuart.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c
> index bac11be..a8020ea 100644
> --- a/hw/char/grlib_apbuart.c
> +++ b/hw/char/grlib_apbuart.c
> @@ -265,8 +265,8 @@ static void grlib_apbuart_reset(DeviceState *d)
>  
>      /* Transmitter FIFO and shift registers are always empty in QEMU */
>      uart->status =  UART_TRANSMIT_FIFO_EMPTY | UART_TRANSMIT_SHIFT_EMPTY;
> -    /* Everything is off */
> -    uart->control = 0;
> +    /* Enable Tx and Rx as the bootloader would do */
> +    uart->control = UART_RECEIVE_ENABLE | UART_TRANSMIT_ENABLE;

I don't think this is the correct approach, as we want to reflect the
real hardware behavior here.

I think the correct QEMU-way is add a tiny asm bootloader in ram in
leon3_generic_hw_init(), which enables the UART.
See write_bootloader() in hw/mips/mips_fulong2e.c for example.

Regards,

Phil.

>      /* Flush receive FIFO */
>      uart->len = 0;
>      uart->current = 0;
> 

Re: [Qemu-devel] [Qemu-trivial] [PATCH] grlib_apbuart: always enable tx and rx
Posted by KONRAD Frederic 7 years, 7 months ago
Hi Phil,

I see your point. But I tend to prefer modifying the uart than
having a bunch of hand assembled code in the machine.

Note that the result is the same.

Thanks,
Fred

On 03/01/2018 11:49 AM, Philippe Mathieu-Daudé wrote:
> Hi Frederic,
> 
> On 03/01/2018 07:02 AM, KONRAD Frederic wrote:
>> We often use a bootloader for this board. So lets set the uart in a state
>> which it can emit characters as if we were using a bootloader.
>>
>> Signed-off-by: KONRAD Frederic <frederic.konrad@adacore.com>
>> ---
>>   hw/char/grlib_apbuart.c | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c
>> index bac11be..a8020ea 100644
>> --- a/hw/char/grlib_apbuart.c
>> +++ b/hw/char/grlib_apbuart.c
>> @@ -265,8 +265,8 @@ static void grlib_apbuart_reset(DeviceState *d)
>>   
>>       /* Transmitter FIFO and shift registers are always empty in QEMU */
>>       uart->status =  UART_TRANSMIT_FIFO_EMPTY | UART_TRANSMIT_SHIFT_EMPTY;
>> -    /* Everything is off */
>> -    uart->control = 0;
>> +    /* Enable Tx and Rx as the bootloader would do */
>> +    uart->control = UART_RECEIVE_ENABLE | UART_TRANSMIT_ENABLE;
> 
> I don't think this is the correct approach, as we want to reflect the
> real hardware behavior here.
> 
> I think the correct QEMU-way is add a tiny asm bootloader in ram in
> leon3_generic_hw_init(), which enables the UART.
> See write_bootloader() in hw/mips/mips_fulong2e.c for example.
> 
> Regards,
> 
> Phil.
> 
>>       /* Flush receive FIFO */
>>       uart->len = 0;
>>       uart->current = 0;
>>