hw/timer/aspeed: Fix interrupt status does not be cleared for AST2600
authorJamin Lin <jamin_lin@aspeedtech.com>
Tue, 29 Oct 2024 09:17:24 +0000 (17:17 +0800)
committerCédric Le Goater <clg@redhat.com>
Mon, 4 Nov 2024 10:33:13 +0000 (11:33 +0100)
According to the datasheet of AST2600 description, interrupt status set by HW
and clear to "0" by software writing "1" on the specific bit.

Therefore, if firmware set the specific bit "1" in the interrupt status
register(0x34), the specific bit of "s->irq_sts" should be cleared 0.

Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>
Fixes: fadefada4d07 ("aspeed/timer: Add support for IRQ status register on the AST2600")
Reviewed-by: Andrew Jeffery <andrew@codeconstruct.com.au>
Reviewed-by: Cédric Le Goater <clg@redhat.com>
hw/timer/aspeed_timer.c

index 5af268ea9ebc081a130b56e05a43121e14832f5f..149f7cc5a6aac44d17d73655de4aa16d5a7d87c7 100644 (file)
@@ -580,7 +580,7 @@ static void aspeed_2600_timer_write(AspeedTimerCtrlState *s, hwaddr offset,
 
     switch (offset) {
     case 0x34:
-        s->irq_sts &= tv;
+        s->irq_sts &= ~tv;
         break;
     case 0x3C:
         aspeed_timer_set_ctrl(s, s->ctrl & ~tv);