* [PATCH 0/3] Add "num-prio-bits" property for Cortex-M devices
@ 2023-12-16 18:27 Samuel Tardieu
2023-12-16 18:27 ` [PATCH 1/3] hw/intc/armv7m_nvic: add "num-prio-bits" property Samuel Tardieu
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Samuel Tardieu @ 2023-12-16 18:27 UTC (permalink / raw)
To: qemu-devel
Cc: Anton Kochkov, qemu-arm, Alexandre Iooss, Alistair Francis,
Peter Maydell, Samuel Tardieu
This patch series builds on a discussion initiated by Anton Kochkov on this
list in 2022. It allows setting the appropriate number of priority bits for
Cortex-M devices. For example, FreeRTOS checks at startup that the right
number of priority bits is available in order to guarantee its runtime
structures safety. They added a configuration option specially for QEMU
to disable this check because QEMU always use 2 bits for Cortex-M0/M0+/M1
and 8 bits for other devices.
While this change allows the number of priority bits to be properly
configured, it keeps the same default as before in order to preserve
backward compatibility.
Based-on: <20220813112559.1974427-1-anton.kochkov@proton.me>
([PATCH] hw/arm/nvic: implement "num-prio-bits" property)
Samuel Tardieu (3):
hw/intc/armv7m_nvic: add "num-prio-bits" property
hw/arm/armv7m: alias the NVIC "num-prio-bits" property
hw/arm/socs: configure priority bits for existing SOCs
hw/arm/armv7m.c | 2 ++
hw/arm/stellaris.c | 2 ++
hw/arm/stm32f100_soc.c | 1 +
hw/arm/stm32f205_soc.c | 1 +
hw/arm/stm32f405_soc.c | 1 +
hw/intc/armv7m_nvic.c | 23 ++++++++++++++++++++++-
6 files changed, 29 insertions(+), 1 deletion(-)
--
2.42.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/3] hw/intc/armv7m_nvic: add "num-prio-bits" property
2023-12-16 18:27 [PATCH 0/3] Add "num-prio-bits" property for Cortex-M devices Samuel Tardieu
@ 2023-12-16 18:27 ` Samuel Tardieu
2023-12-16 18:27 ` [PATCH 2/3] hw/arm/armv7m: alias the NVIC " Samuel Tardieu
` (2 subsequent siblings)
3 siblings, 0 replies; 8+ messages in thread
From: Samuel Tardieu @ 2023-12-16 18:27 UTC (permalink / raw)
To: qemu-devel
Cc: Anton Kochkov, qemu-arm, Alexandre Iooss, Alistair Francis,
Peter Maydell, Samuel Tardieu
Cortex-M NVIC can have a different number of priority bits.
Cortex-M0/M0+/M1 devices must use 2 or more bits, while devices based
on ARMv7m and up must use 3 or more bits.
This adds a "num-prio-bits" property which will get sensible default
values if unset (2 or 8 depending on the device). Unless a SOC
specifies the number of bits to use, the previous behavior is
maintained for backward compatibiltiy.
Signed-off-by: Samuel Tardieu <sam@rfc1149.net>
Suggested-by: Anton Kochkov <anton.kochkov@proton.me>
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1122
---
hw/intc/armv7m_nvic.c | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/hw/intc/armv7m_nvic.c b/hw/intc/armv7m_nvic.c
index 942be7bd11..82aacd7f22 100644
--- a/hw/intc/armv7m_nvic.c
+++ b/hw/intc/armv7m_nvic.c
@@ -2572,6 +2572,11 @@ static const VMStateDescription vmstate_nvic = {
static Property props_nvic[] = {
/* Number of external IRQ lines (so excluding the 16 internal exceptions) */
DEFINE_PROP_UINT32("num-irq", NVICState, num_irq, 64),
+ /*
+ * Number of the maximum priority bits that can be used. 0 means
+ * to use a reasonable default.
+ */
+ DEFINE_PROP_UINT8("num-prio-bits", NVICState, num_prio_bits, 0),
DEFINE_PROP_END_OF_LIST()
};
@@ -2685,7 +2690,23 @@ static void armv7m_nvic_realize(DeviceState *dev, Error **errp)
/* include space for internal exception vectors */
s->num_irq += NVIC_FIRST_IRQ;
- s->num_prio_bits = arm_feature(&s->cpu->env, ARM_FEATURE_V7) ? 8 : 2;
+ if (s->num_prio_bits == 0) {
+ /*
+ * If left unspecified, use 2 bits by default on Cortex-M0/M0+/M1
+ * and 8 bits otherwise.
+ */
+ s->num_prio_bits = arm_feature(&s->cpu->env, ARM_FEATURE_V7) ? 8 : 2;
+ } else {
+ uint8_t min_prio_bits =
+ arm_feature(&s->cpu->env, ARM_FEATURE_V7) ? 3 : 2;
+ if (s->num_prio_bits < min_prio_bits || s->num_prio_bits > 8) {
+ error_setg(errp,
+ "num-prio-bits %d is outside "
+ "NVIC acceptable range [%d-8]",
+ s->num_prio_bits, min_prio_bits);
+ return;
+ }
+ }
/*
* This device provides a single memory region which covers the
--
2.42.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/3] hw/arm/armv7m: alias the NVIC "num-prio-bits" property
2023-12-16 18:27 [PATCH 0/3] Add "num-prio-bits" property for Cortex-M devices Samuel Tardieu
2023-12-16 18:27 ` [PATCH 1/3] hw/intc/armv7m_nvic: add "num-prio-bits" property Samuel Tardieu
@ 2023-12-16 18:27 ` Samuel Tardieu
2023-12-16 18:27 ` [PATCH 3/3] hw/arm/socs: configure priority bits for existing SOCs Samuel Tardieu
2023-12-17 7:35 ` [PATCH 0/3] Add "num-prio-bits" property for Cortex-M devices Samuel Tardieu
3 siblings, 0 replies; 8+ messages in thread
From: Samuel Tardieu @ 2023-12-16 18:27 UTC (permalink / raw)
To: qemu-devel
Cc: Anton Kochkov, qemu-arm, Alexandre Iooss, Alistair Francis,
Peter Maydell, Samuel Tardieu
Signed-off-by: Samuel Tardieu <sam@rfc1149.net>
---
hw/arm/armv7m.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c
index d10abb36a8..4fda2d1d47 100644
--- a/hw/arm/armv7m.c
+++ b/hw/arm/armv7m.c
@@ -256,6 +256,8 @@ static void armv7m_instance_init(Object *obj)
object_initialize_child(obj, "nvic", &s->nvic, TYPE_NVIC);
object_property_add_alias(obj, "num-irq",
OBJECT(&s->nvic), "num-irq");
+ object_property_add_alias(obj, "num-prio-bits",
+ OBJECT(&s->nvic), "num-prio-bits");
object_initialize_child(obj, "systick-reg-ns", &s->systick[M_REG_NS],
TYPE_SYSTICK);
--
2.42.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 3/3] hw/arm/socs: configure priority bits for existing SOCs
2023-12-16 18:27 [PATCH 0/3] Add "num-prio-bits" property for Cortex-M devices Samuel Tardieu
2023-12-16 18:27 ` [PATCH 1/3] hw/intc/armv7m_nvic: add "num-prio-bits" property Samuel Tardieu
2023-12-16 18:27 ` [PATCH 2/3] hw/arm/armv7m: alias the NVIC " Samuel Tardieu
@ 2023-12-16 18:27 ` Samuel Tardieu
2023-12-17 7:35 ` [PATCH 0/3] Add "num-prio-bits" property for Cortex-M devices Samuel Tardieu
3 siblings, 0 replies; 8+ messages in thread
From: Samuel Tardieu @ 2023-12-16 18:27 UTC (permalink / raw)
To: qemu-devel
Cc: Anton Kochkov, qemu-arm, Alexandre Iooss, Alistair Francis,
Peter Maydell, Samuel Tardieu
Update the number of priority bits for a number of existing
SOCsaccording to their technical documentation:
- STM32F100/F205/F405: 4 bits
- Stellaris (Sandstorm/Fury): 3 bits
Signed-off-by: Samuel Tardieu <sam@rfc1149.net>
---
hw/arm/stellaris.c | 2 ++
hw/arm/stm32f100_soc.c | 1 +
hw/arm/stm32f205_soc.c | 1 +
hw/arm/stm32f405_soc.c | 1 +
4 files changed, 5 insertions(+)
diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c
index dd90f686bf..38981967f3 100644
--- a/hw/arm/stellaris.c
+++ b/hw/arm/stellaris.c
@@ -47,6 +47,7 @@
#define BP_GAMEPAD 0x04
#define NUM_IRQ_LINES 64
+#define NUM_PRIO_BITS 3
typedef const struct {
const char *name;
@@ -1067,6 +1068,7 @@ static void stellaris_init(MachineState *ms, stellaris_board_info *board)
nvic = qdev_new(TYPE_ARMV7M);
qdev_prop_set_uint32(nvic, "num-irq", NUM_IRQ_LINES);
+ qdev_prop_set_uint8(nvic, "num-prio-bits", NUM_PRIO_BITS);
qdev_prop_set_string(nvic, "cpu-type", ms->cpu_type);
qdev_prop_set_bit(nvic, "enable-bitband", true);
qdev_connect_clock_in(nvic, "cpuclk",
diff --git a/hw/arm/stm32f100_soc.c b/hw/arm/stm32f100_soc.c
index b90d440d7a..808b783515 100644
--- a/hw/arm/stm32f100_soc.c
+++ b/hw/arm/stm32f100_soc.c
@@ -115,6 +115,7 @@ static void stm32f100_soc_realize(DeviceState *dev_soc, Error **errp)
/* Init ARMv7m */
armv7m = DEVICE(&s->armv7m);
qdev_prop_set_uint32(armv7m, "num-irq", 61);
+ qdev_prop_set_uint8(armv7m, "num-prio-bits", 4);
qdev_prop_set_string(armv7m, "cpu-type", ARM_CPU_TYPE_NAME("cortex-m3"));
qdev_prop_set_bit(armv7m, "enable-bitband", true);
qdev_connect_clock_in(armv7m, "cpuclk", s->sysclk);
diff --git a/hw/arm/stm32f205_soc.c b/hw/arm/stm32f205_soc.c
index 1a548646f6..a451e21f59 100644
--- a/hw/arm/stm32f205_soc.c
+++ b/hw/arm/stm32f205_soc.c
@@ -127,6 +127,7 @@ static void stm32f205_soc_realize(DeviceState *dev_soc, Error **errp)
armv7m = DEVICE(&s->armv7m);
qdev_prop_set_uint32(armv7m, "num-irq", 96);
+ qdev_prop_set_uint8(armv7m, "num-prio-bits", 4);
qdev_prop_set_string(armv7m, "cpu-type", ARM_CPU_TYPE_NAME("cortex-m3"));
qdev_prop_set_bit(armv7m, "enable-bitband", true);
qdev_connect_clock_in(armv7m, "cpuclk", s->sysclk);
diff --git a/hw/arm/stm32f405_soc.c b/hw/arm/stm32f405_soc.c
index a65bbe298d..2ad5b79a06 100644
--- a/hw/arm/stm32f405_soc.c
+++ b/hw/arm/stm32f405_soc.c
@@ -149,6 +149,7 @@ static void stm32f405_soc_realize(DeviceState *dev_soc, Error **errp)
armv7m = DEVICE(&s->armv7m);
qdev_prop_set_uint32(armv7m, "num-irq", 96);
+ qdev_prop_set_uint8(armv7m, "num-prio-bits", 4);
qdev_prop_set_string(armv7m, "cpu-type", ARM_CPU_TYPE_NAME("cortex-m4"));
qdev_prop_set_bit(armv7m, "enable-bitband", true);
qdev_connect_clock_in(armv7m, "cpuclk", s->sysclk);
--
2.42.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 0/3] Add "num-prio-bits" property for Cortex-M devices
2023-12-16 18:27 [PATCH 0/3] Add "num-prio-bits" property for Cortex-M devices Samuel Tardieu
` (2 preceding siblings ...)
2023-12-16 18:27 ` [PATCH 3/3] hw/arm/socs: configure priority bits for existing SOCs Samuel Tardieu
@ 2023-12-17 7:35 ` Samuel Tardieu
2023-12-19 16:05 ` Peter Maydell
3 siblings, 1 reply; 8+ messages in thread
From: Samuel Tardieu @ 2023-12-17 7:35 UTC (permalink / raw)
To: qemu-devel
Cc: Anton Kochkov, qemu-arm, Alexandre Iooss, Alistair Francis,
Peter Maydell
> Samuel Tardieu (3):
> hw/intc/armv7m_nvic: add "num-prio-bits" property
> hw/arm/armv7m: alias the NVIC "num-prio-bits" property
> hw/arm/socs: configure priority bits for existing SOCs
Any idea to why patchew fails to apply thoses patches? The mbox at
<https://patchew.org/QEMU/20231216182740.3305724-1-sam@rfc1149.net/>
applies cleanly on master AFAICS.
Sam
--
Samuel Tardieu
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/3] Add "num-prio-bits" property for Cortex-M devices
2023-12-17 7:35 ` [PATCH 0/3] Add "num-prio-bits" property for Cortex-M devices Samuel Tardieu
@ 2023-12-19 16:05 ` Peter Maydell
2023-12-19 19:13 ` Samuel Tardieu
0 siblings, 1 reply; 8+ messages in thread
From: Peter Maydell @ 2023-12-19 16:05 UTC (permalink / raw)
To: Samuel Tardieu
Cc: qemu-devel, Anton Kochkov, qemu-arm, Alexandre Iooss,
Alistair Francis
On Sun, 17 Dec 2023 at 07:37, Samuel Tardieu <sam@rfc1149.net> wrote:
>
>
> > Samuel Tardieu (3):
> > hw/intc/armv7m_nvic: add "num-prio-bits" property
> > hw/arm/armv7m: alias the NVIC "num-prio-bits" property
> > hw/arm/socs: configure priority bits for existing SOCs
>
> Any idea to why patchew fails to apply thoses patches? The mbox at
> <https://patchew.org/QEMU/20231216182740.3305724-1-sam@rfc1149.net/>
> applies cleanly on master AFAICS.
This is because you put a Based-on: tag in the cover letter.
Based-on: means "please apply this other patch first before this
series, because there is a dependency" (we use it for things
like "this patchset has to sit on top of some other cleanup
patchset I sent last week and which hasn't got into git yet").
So patchew applied Anton's original patch from 2022, and then tried
to apply your three patches on top of that, which caused a conflict.
Anyway, I just wanted to say that this patchset is on my
todo list to review but I'm not going to be able to get to
it before I break for Christmas, so I'll get back to it
in January. Thanks for the contribution!
-- PMM
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/3] Add "num-prio-bits" property for Cortex-M devices
2023-12-19 16:05 ` Peter Maydell
@ 2023-12-19 19:13 ` Samuel Tardieu
2023-12-19 20:46 ` Peter Maydell
0 siblings, 1 reply; 8+ messages in thread
From: Samuel Tardieu @ 2023-12-19 19:13 UTC (permalink / raw)
To: Peter Maydell
Cc: qemu-devel, Anton Kochkov, qemu-arm, Alexandre Iooss,
Alistair Francis
Peter Maydell <peter.maydell@linaro.org> writes:
>> Any idea to why patchew fails to apply thoses patches? The mbox
>> at
>> <https://patchew.org/QEMU/20231216182740.3305724-1-sam@rfc1149.net/>
>> applies cleanly on master AFAICS.
>
> This is because you put a Based-on: tag in the cover letter.
> Based-on: means "please apply this other patch first before this
> series, because there is a dependency" (we use it for things
> like "this patchset has to sit on top of some other cleanup
> patchset I sent last week and which hasn't got into git yet").
> So patchew applied Anton's original patch from 2022, and then
> tried
> to apply your three patches on top of that, which caused a
> conflict.
Thanks for the explanation. I thought "Based-on:" was just a
polite way of attributing credit to past discussions. I'll keep
that in mind. Do you want me to resubmit it as a v2 without the
"Based-on:" tag so that patchew gets it right?
> Anyway, I just wanted to say that this patchset is on my
> todo list to review but I'm not going to be able to get to
> it before I break for Christmas, so I'll get back to it
> in January. Thanks for the contribution!
Noted!
Best.
Sam
--
Samuel Tardieu
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/3] Add "num-prio-bits" property for Cortex-M devices
2023-12-19 19:13 ` Samuel Tardieu
@ 2023-12-19 20:46 ` Peter Maydell
0 siblings, 0 replies; 8+ messages in thread
From: Peter Maydell @ 2023-12-19 20:46 UTC (permalink / raw)
To: Samuel Tardieu
Cc: qemu-devel, Anton Kochkov, qemu-arm, Alexandre Iooss,
Alistair Francis
On Tue, 19 Dec 2023 at 19:15, Samuel Tardieu <sam@rfc1149.net> wrote:
>
>
> Peter Maydell <peter.maydell@linaro.org> writes:
>
> >> Any idea to why patchew fails to apply thoses patches? The mbox
> >> at
> >> <https://patchew.org/QEMU/20231216182740.3305724-1-sam@rfc1149.net/>
> >> applies cleanly on master AFAICS.
> >
> > This is because you put a Based-on: tag in the cover letter.
> > Based-on: means "please apply this other patch first before this
> > series, because there is a dependency" (we use it for things
> > like "this patchset has to sit on top of some other cleanup
> > patchset I sent last week and which hasn't got into git yet").
> > So patchew applied Anton's original patch from 2022, and then
> > tried
> > to apply your three patches on top of that, which caused a
> > conflict.
>
> Thanks for the explanation. I thought "Based-on:" was just a
> polite way of attributing credit to past discussions. I'll keep
> that in mind. Do you want me to resubmit it as a v2 without the
> "Based-on:" tag so that patchew gets it right?
No, you don't need to do that. I can review it, and if it's
OK I can apply it to my target-arm tree, based on what we
have now.
thanks
-- PMM
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-12-19 20:48 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-16 18:27 [PATCH 0/3] Add "num-prio-bits" property for Cortex-M devices Samuel Tardieu
2023-12-16 18:27 ` [PATCH 1/3] hw/intc/armv7m_nvic: add "num-prio-bits" property Samuel Tardieu
2023-12-16 18:27 ` [PATCH 2/3] hw/arm/armv7m: alias the NVIC " Samuel Tardieu
2023-12-16 18:27 ` [PATCH 3/3] hw/arm/socs: configure priority bits for existing SOCs Samuel Tardieu
2023-12-17 7:35 ` [PATCH 0/3] Add "num-prio-bits" property for Cortex-M devices Samuel Tardieu
2023-12-19 16:05 ` Peter Maydell
2023-12-19 19:13 ` Samuel Tardieu
2023-12-19 20:46 ` Peter Maydell
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).