[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] Fix STM32F2XX USART data register readout
From: |
Peter Maydell |
Subject: |
Re: [PATCH] Fix STM32F2XX USART data register readout |
Date: |
Mon, 29 Nov 2021 10:46:43 +0000 |
On Sun, 28 Nov 2021 at 12:07, Olivier Hériveaux
<olivier.heriveaux@ledger.fr> wrote:
>
> Fix issue where the data register may be overwritten by next character
> reception before being read and returned.
>
> Signed-off-by: Olivier Hériveaux <olivier.heriveaux@ledger.fr>
> ---
> hw/char/stm32f2xx_usart.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/hw/char/stm32f2xx_usart.c b/hw/char/stm32f2xx_usart.c
> index 8df0832424..fde67f4f03 100644
> --- a/hw/char/stm32f2xx_usart.c
> +++ b/hw/char/stm32f2xx_usart.c
> @@ -103,10 +103,11 @@ static uint64_t stm32f2xx_usart_read(void *opaque,
> hwaddr addr,
> return retvalue;
> case USART_DR:
> DB_PRINT("Value: 0x%" PRIx32 ", %c\n", s->usart_dr, (char)
> s->usart_dr);
> + retvalue = s->usart_dr & 0x3FF;
> s->usart_sr &= ~USART_SR_RXNE;
> qemu_chr_fe_accept_input(&s->chr);
> qemu_set_irq(s->irq, 0);
> - return s->usart_dr & 0x3FF;
> + return retvalue;
> case USART_BRR:
> return s->usart_brr;
> case USART_CR1:
> --
> 2.17.1
The bug happens because qemu_chr_fe_accept_input() can cause
stm32f2xx_usart_receive() to be called, right ?
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
I'll put this in my list of patches to take via target-arm.next for the
7.0 release.
thanks
-- PMM