[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH qemu.git v2 3/9] hw/timer/imx_epit: simplify interrupt logic
From: |
~axelheider |
Subject: |
[PATCH qemu.git v2 3/9] hw/timer/imx_epit: simplify interrupt logic |
Date: |
Tue, 25 Oct 2022 13:23:07 +0200 |
From: Axel Heider <axel.heider@hensoldt.net>
Signed-off-by: Axel Heider <axel.heider@hensoldt.net>
---
hw/timer/imx_epit.c | 27 +++++++++++----------------
1 file changed, 11 insertions(+), 16 deletions(-)
diff --git a/hw/timer/imx_epit.c b/hw/timer/imx_epit.c
index 8ec770f674..2e9dae0bc8 100644
--- a/hw/timer/imx_epit.c
+++ b/hw/timer/imx_epit.c
@@ -61,18 +61,6 @@ static const IMXClk imx_epit_clocks[] = {
CLK_32k, /* 11 ipg_clk_32k -- ~32kHz */
};
-/*
- * Update interrupt status
- */
-static void imx_epit_update_int(IMXEPITState *s)
-{
- if (s->sr && (s->cr & CR_OCIEN) && (s->cr & CR_EN)) {
- qemu_irq_raise(s->irq);
- } else {
- qemu_irq_lower(s->irq);
- }
-}
-
/*
* Must be called from within a ptimer_transaction_begin/commit block
* for both s->timer_cmp and s->timer_reload.
@@ -253,10 +241,10 @@ static void imx_epit_write(void *opaque, hwaddr offset,
uint64_t value,
break;
case 1: /* SR - ACK*/
- /* writing 1 to OCIF clears the OCIF bit */
+ /* writing 1 to OCIF clears the OCIF bit and the interrupt */
if (value & 0x01) {
s->sr = 0;
- imx_epit_update_int(s);
+ qemu_irq_lower(s->irq);
}
break;
@@ -305,10 +293,17 @@ static void imx_epit_cmp(void *opaque)
{
IMXEPITState *s = IMX_EPIT(opaque);
+ /* Set the interrupt status flag to signaled. */
DPRINTF("sr was %d\n", s->sr);
-
s->sr = 1;
- imx_epit_update_int(s);
+
+ /*
+ * An actual interrupt is generated only if the peripheral is enabled
+ * and the interrupt generation is enabled.
+ */
+ if ((s->cr & (CR_EN | CR_OCIEN)) == (CR_EN | CR_OCIEN)) {
+ qemu_irq_raise(s->irq);
+ }
}
static void imx_epit_reload(void *opaque)
--
2.34.5
- [PATCH qemu.git v2 0/9] hw/timer/imx_epit: imprive and fix compare timer handling, ~axelheider, 2022/11/07
- [PATCH qemu.git v2 4/9] hw/timer/imx_epit: software reset clears the interrupt, ~axelheider, 2022/11/07
- [PATCH qemu.git v2 1/9] hw/timer/imx_epit: improve comments, ~axelheider, 2022/11/07
- [PATCH qemu.git v2 5/9] hw/timer/imx_epit: do not persist CR.SWR bit, ~axelheider, 2022/11/07
- [PATCH qemu.git v2 3/9] hw/timer/imx_epit: simplify interrupt logic,
~axelheider <=
- [PATCH qemu.git v2 2/9] hw/timer/imx_epit: cleanup CR defines, ~axelheider, 2022/11/07
- [PATCH qemu.git v2 9/9] hw/timer/imx_epit: fix compare timer handling, ~axelheider, 2022/11/07
- [PATCH qemu.git v2 8/9] hw/timer/imx_epit: change reset handling, ~axelheider, 2022/11/07
- [PATCH qemu.git v2 6/9] hw/timer/imx_epit: remove explicit fields cnt and freq, ~axelheider, 2022/11/07