[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] hw/armv7m_nvic: Fix incorrect default for num-i
From: |
Peter Crosthwaite |
Subject: |
Re: [Qemu-devel] [PATCH] hw/armv7m_nvic: Fix incorrect default for num-irqs property |
Date: |
Tue, 31 Jul 2012 10:37:19 +1000 |
Thanks Peter,
All good now.
Regards,
Peter
On Tue, Jul 24, 2012 at 8:39 PM, Peter Maydell <address@hidden> wrote:
> Fix an incorrect default value for the num-irqs property (we were
> attempting to override it from the default set by the parent class
> but not succeeding, which meant that the lm3s6965evb model would
> assert on startup attempting to wire up nonexistent irq lines).
> Instead of trying to override the parent's Property array, we
> define an instance_init function which runs after default setup
> but before user property setting and can just fix up the default
> value in the gic_state struct.
>
> Signed-off-by: Peter Maydell <address@hidden>
Tested-by: Peter Crosthwaite <address@hidden>
Should I have one of those reported-by things here as well?
Regards,
Peter
> ---
> hw/armv7m_nvic.c | 21 ++++++++++++++-------
> 1 files changed, 14 insertions(+), 7 deletions(-)
>
> diff --git a/hw/armv7m_nvic.c b/hw/armv7m_nvic.c
> index 4867c1d..6a0832e 100644
> --- a/hw/armv7m_nvic.c
> +++ b/hw/armv7m_nvic.c
> @@ -467,7 +467,7 @@ static int armv7m_nvic_init(SysBusDevice *dev)
> s->gic.num_cpu = 1;
> /* Tell the common code we're an NVIC */
> s->gic.revision = 0xffffffff;
> - s->gic.num_irq = s->num_irq;
> + s->num_irq = s->gic.num_irq;
> nc->parent_init(dev);
> gic_init_irqs_and_distributor(&s->gic, s->num_irq);
> /* The NVIC and system controller register area looks like this:
> @@ -498,14 +498,21 @@ static int armv7m_nvic_init(SysBusDevice *dev)
> return 0;
> }
>
> -static Property armv7m_nvic_properties[] = {
> +static void armv7m_nvic_instance_init(Object *obj)
> +{
> + /* We have a different default value for the num-irq property
> + * than our superclass. This function runs after qdev init
> + * has set the defaults from the Property array and before
> + * any user-specified property setting, so just modify the
> + * value in the gic_state struct.
> + */
> + gic_state *s = ARM_GIC_COMMON(obj);
> /* The ARM v7m may have anything from 0 to 496 external interrupt
> * IRQ lines. We default to 64. Other boards may differ and should
> - * set this property appropriately.
> + * set the num-irq property appropriately.
> */
> - DEFINE_PROP_UINT32("num-irq", nvic_state, num_irq, 64),
> - DEFINE_PROP_END_OF_LIST(),
> -};
> + s->num_irq = 64;
> +}
>
> static void armv7m_nvic_class_init(ObjectClass *klass, void *data)
> {
> @@ -518,12 +525,12 @@ static void armv7m_nvic_class_init(ObjectClass *klass,
> void *data)
> sdc->init = armv7m_nvic_init;
> dc->vmsd = &vmstate_nvic;
> dc->reset = armv7m_nvic_reset;
> - dc->props = armv7m_nvic_properties;
> }
>
> static TypeInfo armv7m_nvic_info = {
> .name = TYPE_NVIC,
> .parent = TYPE_ARM_GIC_COMMON,
> + .instance_init = armv7m_nvic_instance_init,
> .instance_size = sizeof(nvic_state),
> .class_init = armv7m_nvic_class_init,
> .class_size = sizeof(NVICClass),
> --
> 1.7.5.4
>