target_arm: Parameterise the irq lines for armv7m_init
This patch allows the board to specifiy the number of NVIC interrupt lines when using armv7m_init. Signed-off-by: Alistair Francis <alistair23@gmail.com> Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> Message-id: 5a0b0fcc778df0340899f488053acc9493679e03.1422077994.git.alistair23@gmail.com [PMM: removed stale FIXME comment] Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
		
							parent
							
								
									fe6ac447ad
								
							
						
					
					
						commit
						8b47b7da29
					
				| @ -166,14 +166,13 @@ static void armv7m_reset(void *opaque) | ||||
|    mem_size is in bytes. | ||||
|    Returns the NVIC array.  */ | ||||
| 
 | ||||
| qemu_irq *armv7m_init(MemoryRegion *system_memory, int mem_size, | ||||
| qemu_irq *armv7m_init(MemoryRegion *system_memory, int mem_size, int num_irq, | ||||
|                       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; | ||||
| @ -194,11 +193,12 @@ qemu_irq *armv7m_init(MemoryRegion *system_memory, int mem_size, | ||||
|     armv7m_bitband_init(); | ||||
| 
 | ||||
|     nvic = qdev_create(NULL, "armv7m_nvic"); | ||||
|     qdev_prop_set_uint32(nvic, "num-irq", num_irq); | ||||
|     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); | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -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; | ||||
| @ -1239,7 +1241,8 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model, | ||||
|     vmstate_register_ram_global(sram); | ||||
|     memory_region_add_subregion(system_memory, 0x20000000, sram); | ||||
| 
 | ||||
|     pic = armv7m_init(system_memory, flash_size, kernel_filename, cpu_model); | ||||
|     pic = armv7m_init(system_memory, flash_size, NUM_IRQ_LINES, | ||||
|                       kernel_filename, cpu_model); | ||||
| 
 | ||||
|     if (board->dc1 & (1 << 16)) { | ||||
|         dev = sysbus_create_varargs(TYPE_STELLARIS_ADC, 0x40038000, | ||||
|  | ||||
| @ -15,7 +15,7 @@ | ||||
| #include "hw/irq.h" | ||||
| 
 | ||||
| /* armv7m.c */ | ||||
| qemu_irq *armv7m_init(MemoryRegion *system_memory, int mem_size, | ||||
| qemu_irq *armv7m_init(MemoryRegion *system_memory, int mem_size, int num_irq, | ||||
|                       const char *kernel_filename, const char *cpu_model); | ||||
| 
 | ||||
| /* arm_boot.c */ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Alistair Francis
						Alistair Francis