From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: qemu-devel@nongnu.org
Cc: "Thomas Huth" <thuth@redhat.com>,
qemu-arm@nongnu.org, "Peter Maydell" <peter.maydell@linaro.org>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Mark Cave-Ayland" <mark.cave-ayland@ilande.co.uk>,
"Sergey Kambalin" <serg.oker@gmail.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>
Subject: [PATCH v2 14/19] hw/timer/arm_timer: Pass timer output IRQ as parameter to arm_timer_new
Date: Tue, 4 Jul 2023 16:50:07 +0200 [thread overview]
Message-ID: <20230704145012.49870-15-philmd@linaro.org> (raw)
In-Reply-To: <20230704145012.49870-1-philmd@linaro.org>
Both SP804Timer/IntegratorPIT peek at ArmTimer internal state.
This is fine so far but we want to convert ArmTimer to QOM
where peeking at QOM state internal should be avoided.
ArmTimer's IRQ is just a pointer, so we can pass/set it via
argument, avoiding accessing ArmTimer internal state except
from the arm_timer_*() methods.
Once ArmTimer get QOM'ified (in a few commits), it will
inherit the SysBus API. This IRQ will then become a SysBus
IRQ within this ArmTimer object.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/timer/arm_timer.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/hw/timer/arm_timer.c b/hw/timer/arm_timer.c
index 68cd50314f..f6bec28884 100644
--- a/hw/timer/arm_timer.c
+++ b/hw/timer/arm_timer.c
@@ -179,7 +179,7 @@ static void arm_timer_reset_hold(ArmTimer *s)
s->control = TIMER_CTRL_IE;
}
-static ArmTimer *arm_timer_new(uint32_t freq)
+static ArmTimer *arm_timer_new(uint32_t freq, qemu_irq irq_out)
{
ArmTimer *s;
@@ -187,6 +187,7 @@ static ArmTimer *arm_timer_new(uint32_t freq)
s->freq = freq;
arm_timer_reset_hold(s);
+ s->irq = irq_out;
s->timer = ptimer_init(arm_timer_tick, s, PTIMER_POLICY_LEGACY);
vmstate_register(NULL, VMSTATE_INSTANCE_ID_ANY, &vmstate_arm_timer, s);
return s;
@@ -209,6 +210,7 @@ struct SP804Timer {
uint32_t freq[2];
int level[2];
qemu_irq irq;
+ qemu_irq irq_in[2];
};
static const uint8_t sp804_ids[] = {
@@ -311,8 +313,8 @@ static void sp804_realize(DeviceState *dev, Error **errp)
SP804Timer *s = SP804_TIMER(dev);
for (unsigned i = 0; i < ARRAY_SIZE(s->timer); i++) {
- s->timer[i] = arm_timer_new(s->freq[i]);
- s->timer[i]->irq = qemu_allocate_irq(sp804_set_irq, s, i);
+ s->irq_in[i] = qemu_allocate_irq(sp804_set_irq, s, i);
+ s->timer[i] = arm_timer_new(s->freq[i], s->irq_in[i]);
}
}
@@ -341,6 +343,7 @@ struct IntegratorPIT {
MemoryRegion iomem;
ArmTimer *timer[3];
+ qemu_irq irq_in[3];
};
static uint64_t icp_pit_read(void *opaque, hwaddr offset,
@@ -392,8 +395,8 @@ static void icp_pit_init(Object *obj)
SysBusDevice *dev = SYS_BUS_DEVICE(obj);
for (unsigned i = 0; i < ARRAY_SIZE(s->timer); i++) {
- s->timer[i] = arm_timer_new(tmr_freq[i]);
- sysbus_init_irq(dev, &s->timer[i]->irq);
+ s->timer[i] = arm_timer_new(tmr_freq[i], s->irq_in[i]);
+ sysbus_init_irq(dev, &s->irq_in[i]);
}
memory_region_init_io(&s->iomem, obj, &icp_pit_ops, s,
--
2.38.1
next prev parent reply other threads:[~2023-07-04 14:52 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-04 14:49 [PATCH v2 00/19] hw/timer/arm_timer: QOM'ify ARM_TIMER and correct sysbus/irq in ICP_PIT Philippe Mathieu-Daudé
2023-07-04 14:49 ` [PATCH v2 01/19] hw/timer/arm_timer: Declare QOM types using DEFINE_TYPES() macro Philippe Mathieu-Daudé
2023-07-05 15:25 ` Richard Henderson
2023-07-04 14:49 ` [PATCH v2 02/19] hw/timer/arm_timer: Remove pointless cast from void * Philippe Mathieu-Daudé
2023-07-05 15:26 ` Richard Henderson
2023-07-04 14:49 ` [PATCH v2 03/19] hw/timer/arm_timer: Move SP804 code around Philippe Mathieu-Daudé
2023-07-05 15:26 ` Richard Henderson
2023-07-04 14:49 ` [PATCH v2 04/19] hw/timer/arm_timer: CamelCase rename icp_pit_state -> IntegratorPIT Philippe Mathieu-Daudé
2023-07-05 15:27 ` Richard Henderson
2023-07-04 14:49 ` [PATCH v2 05/19] hw/timer/arm_timer: CamelCase rename arm_timer_state -> ArmTimer Philippe Mathieu-Daudé
2023-07-05 15:28 ` Richard Henderson
2023-07-04 14:49 ` [PATCH v2 06/19] hw/timer/arm_timer: Rename SP804State -> SP804Timer Philippe Mathieu-Daudé
2023-07-05 15:33 ` Richard Henderson
2023-07-04 14:50 ` [PATCH v2 07/19] hw/timer/arm_timer: Rename TYPE_SP804 -> TYPE_SP804_TIMER Philippe Mathieu-Daudé
2023-07-05 15:34 ` Richard Henderson
2023-07-04 14:50 ` [PATCH v2 08/19] hw/timer/arm_timer: Extract arm_timer_reset_hold() Philippe Mathieu-Daudé
2023-07-05 15:34 ` Richard Henderson
2023-07-04 14:50 ` [PATCH v2 09/19] hw/timer/arm_timer: Convert read/write handlers to MemoryRegionOps ones Philippe Mathieu-Daudé
2023-07-05 15:35 ` Richard Henderson
2023-07-04 14:50 ` [PATCH v2 10/19] hw/timer/arm_timer: Rename arm_timer_init() -> arm_timer_new() Philippe Mathieu-Daudé
2023-07-05 15:35 ` Richard Henderson
2023-07-04 14:50 ` [PATCH v2 11/19] hw/timer/arm_timer: Convert ArmTimer::freq to uint32_t type Philippe Mathieu-Daudé
2023-07-05 15:35 ` Richard Henderson
2023-07-04 14:50 ` [PATCH v2 12/19] hw/timer/arm_timer: Use array of frequency in SP804Timer Philippe Mathieu-Daudé
2023-07-05 15:36 ` Richard Henderson
2023-07-04 14:50 ` [PATCH v2 13/19] hw/timer/arm_timer: Iterate on timers using for() loop statement Philippe Mathieu-Daudé
2023-07-05 15:37 ` Richard Henderson
2023-07-04 14:50 ` Philippe Mathieu-Daudé [this message]
2023-07-05 15:39 ` [PATCH v2 14/19] hw/timer/arm_timer: Pass timer output IRQ as parameter to arm_timer_new Richard Henderson
2023-07-04 14:50 ` [PATCH v2 15/19] hw/timer/arm_timer: Fix misuse of SysBus IRQ in IntegratorPIT Philippe Mathieu-Daudé
2023-07-05 15:40 ` Richard Henderson
2023-07-04 14:50 ` [PATCH v2 16/19] hw/timer/arm_timer: Extract icp_pit_realize() from icp_pit_init() Philippe Mathieu-Daudé
2023-07-05 15:41 ` Richard Henderson
2023-07-04 14:50 ` [PATCH v2 17/19] hw/timer/arm_timer: QDev'ify ARM_TIMER Philippe Mathieu-Daudé
2023-07-24 15:01 ` Peter Maydell
2023-07-04 14:50 ` [PATCH v2 18/19] hw/timer/arm_timer: Map ARM_TIMER MMIO regions into IntegratorPIT Philippe Mathieu-Daudé
2023-07-05 15:44 ` Richard Henderson
2023-07-04 14:50 ` [PATCH v2 19/19] hw/timer/arm_timer: Map ARM_TIMER MMIO regions into SP804Timer Philippe Mathieu-Daudé
2023-07-05 15:44 ` Richard Henderson
2023-07-04 15:10 ` [PATCH v2 00/19] hw/timer/arm_timer: QOM'ify ARM_TIMER and correct sysbus/irq in ICP_PIT Philippe Mathieu-Daudé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230704145012.49870-15-philmd@linaro.org \
--to=philmd@linaro.org \
--cc=mark.cave-ayland@ilande.co.uk \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=serg.oker@gmail.com \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).