Message ID | 1519898536-19027-1-git-send-email-frederic.konrad@adacore.com |
---|---|
State | New |
Headers | show |
Series | grlib_apbuart: always enable tx and rx | expand |
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; >
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; >>
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;
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(-)