On Tue, Sep 16, 2014 at 1:23 AM, Peter Crosthwaite <peter.crosthwa...@xilinx.com> wrote: > On Sun, Sep 14, 2014 at 6:18 PM, Alistair Francis <alistai...@gmail.com> > wrote: >> This patch allows the board to specifiy the number of NVIC interrupt >> lines when using armv7m_init. >> >> Signed-off-by: Alistair Francis <alistai...@gmail.com> >> --- >> hw/arm/armv7m.c | 7 ++++--- >> hw/arm/stellaris.c | 4 +++- >> include/hw/arm/arm.h | 2 +- >> 3 files changed, 8 insertions(+), 5 deletions(-) >> >> diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c >> index 5c1f7b3..5e684a0 100644 >> --- a/hw/arm/armv7m.c >> +++ b/hw/arm/armv7m.c >> @@ -167,14 +167,14 @@ static void armv7m_reset(void *opaque) >> Returns the NVIC array. */ >> >> qemu_irq *armv7m_init(MemoryRegion *system_memory, >> - int flash_size, int sram_size, >> + int flash_size, int sram_size, int num_irq, > > This will change slightly based on previous patch comment, but otherwise. > > Reviewed-by: Peter Crosthwaite <peter.crosthwa...@xilinx.com>
Thanks, but they are both still required as I explained in the other reply > >> const char *kernel_filename, const char *cpu_model) >> { >> ARMCPU *cpu; >> CPUARMState *env; >> DeviceState *nvic; >> /* FIXME: make this local state. */ >> - static qemu_irq pic[64]; >> + qemu_irq *pic = g_new(qemu_irq, num_irq); >> int image_size; >> uint64_t entry; >> uint64_t lowaddr; >> @@ -207,11 +207,12 @@ qemu_irq *armv7m_init(MemoryRegion *system_memory, >> armv7m_bitband_init(); >> >> nvic = qdev_create(NULL, "armv7m_nvic"); >> + qdev_prop_set_uint32(nvic, "num-irq", num_irq); > > Curious, was this previously relying on the default for nvic being 64? > (hence this is appearing as purely additive). Yep, it just used the default value Thanks, Alistair > > Regards, > Peter > >> env->nvic = nvic; >> qdev_init_nofail(nvic); >> sysbus_connect_irq(SYS_BUS_DEVICE(nvic), 0, >> qdev_get_gpio_in(DEVICE(cpu), ARM_CPU_IRQ)); >> - for (i = 0; i < 64; i++) { >> + for (i = 0; i < num_irq; i++) { >> pic[i] = qdev_get_gpio_in(nvic, i); >> } >> >> diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c >> index 3c8e9d1..e4da1fb 100644 >> --- a/hw/arm/stellaris.c >> +++ b/hw/arm/stellaris.c >> @@ -29,6 +29,8 @@ >> #define BP_OLED_SSI 0x02 >> #define BP_GAMEPAD 0x04 >> >> +#define NUM_IRQ_LINES 64 >> + >> typedef const struct { >> const char *name; >> uint32_t did0; >> @@ -1238,7 +1240,7 @@ static void stellaris_init(const char >> *kernel_filename, const char *cpu_model, >> memory_region_add_subregion(system_memory, 0x20000000, sram); >> >> pic = armv7m_init(system_memory, flash_size, sram_size, >> - kernel_filename, cpu_model); >> + NUM_IRQ_LINES, kernel_filename, cpu_model); >> >> if (board->dc1 & (1 << 16)) { >> dev = sysbus_create_varargs(TYPE_STELLARIS_ADC, 0x40038000, >> diff --git a/include/hw/arm/arm.h b/include/hw/arm/arm.h >> index cefc9e6..3e7c463 100644 >> --- a/include/hw/arm/arm.h >> +++ b/include/hw/arm/arm.h >> @@ -16,7 +16,7 @@ >> >> /* armv7m.c */ >> qemu_irq *armv7m_init(MemoryRegion *system_memory, >> - int flash_size, int sram_size, >> + int flash_size, int sram_size, int num_irq, >> const char *kernel_filename, const char *cpu_model); >> >> /* arm_boot.c */ >> -- >> 1.9.1 >> >>