cmsdk-apb-uart doesn't appear to clear interrupt flags

Bug #1760262 reported by Patrick Oppenlander
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
QEMU
Fix Released
Undecided
Unassigned

Bug Description

I have been writing a small operating system and using QEMU emulating the mps2-an385 board for some of my testing.

During development of the uart driver I observed some odd behaviour with the TX interrupt -- writing a '1' to bit 0 of the INTCLEAR register doesn't clear the TX interrupt flag, and the interrupt fires continuously.

It's possible that I have an error somewhere in my code, but after inspecting the QEMU source it does appear to be a QEMU bug. I applied the following patch and it solved my issue:

From 9875839c144fa60a3772f16ae44d32685f9328aa Mon Sep 17 00:00:00 2001
From: Patrick Oppenlander <email address hidden>
Date: Sat, 31 Mar 2018 15:10:28 +1100
Subject: [PATCH] hw/char/cmsdk-apb-uart: fix clearing of interrupt flags

---
 hw/char/cmsdk-apb-uart.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/hw/char/cmsdk-apb-uart.c b/hw/char/cmsdk-apb-uart.c
index 1ad1e14295..64991bd9d7 100644
--- a/hw/char/cmsdk-apb-uart.c
+++ b/hw/char/cmsdk-apb-uart.c
@@ -274,6 +274,7 @@ static void uart_write(void *opaque, hwaddr offset, uint64_t value,
          * is then reflected into the intstatus value by the update function).
          */
         s->state &= ~(value & (R_INTSTATUS_TXO_MASK | R_INTSTATUS_RXO_MASK));
+ s->intstatus &= ~(value & ~(R_INTSTATUS_TXO_MASK | R_INTSTATUS_RXO_MASK));
         cmsdk_apb_uart_update(s);
         break;
     case A_BAUDDIV:
--
2.16.2

Revision history for this message
Patrick Oppenlander (patrick-oppenlander) wrote :
Revision history for this message
Patrick Oppenlander (patrick-oppenlander) wrote :

Found in v2.12.0-rc1.

Revision history for this message
Peter Maydell (pmaydell) wrote :

Thanks for the bug report; I've submitted this patch (which is similar to but not quite the same as your fix):
https://patchwork.ozlabs.org/patch/896715/

Hopefully this will get into 2.12, but we're quite close to release now so it will depend on whether we need to spin an extra release candidate for some other reason.

Changed in qemu:
status: New → In Progress
Revision history for this message
Patrick Oppenlander (patrick-oppenlander) wrote : Re: [Bug 1760262] Re: cmsdk-apb-uart doesn't appear to clear interrupt flags

On Tue, Apr 10, 2018 at 11:45 PM, Peter Maydell
<email address hidden> wrote:
>
> Thanks for the bug report; I've submitted this patch (which is similar to but not quite the same as your fix):
> https://patchwork.ozlabs.org/patch/896715/
>
> Hopefully this will get into 2.12, but we're quite close to release now
> so it will depend on whether we need to spin an extra release candidate
> for some other reason.

Thanks for looking into it.

Patrick

Revision history for this message
Thomas Huth (th-huth) wrote :
Changed in qemu:
status: In Progress → Fix Committed
Thomas Huth (th-huth)
Changed in qemu:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.