armv7m: convert to memory API
Reviewed-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
		
							parent
							
								
									72e4d2554d
								
							
						
					
					
						commit
						7d6f78cfac
					
				| @ -11,13 +11,16 @@ | ||||
| #ifndef ARM_MISC_H | ||||
| #define ARM_MISC_H 1 | ||||
| 
 | ||||
| #include "memory.h" | ||||
| 
 | ||||
| /* The CPU is also modeled as an interrupt controller.  */ | ||||
| #define ARM_PIC_CPU_IRQ 0 | ||||
| #define ARM_PIC_CPU_FIQ 1 | ||||
| qemu_irq *arm_pic_init_cpu(CPUState *env); | ||||
| 
 | ||||
| /* armv7m.c */ | ||||
| qemu_irq *armv7m_init(int flash_size, int sram_size, | ||||
| qemu_irq *armv7m_init(MemoryRegion *address_space_mem, | ||||
|                       int flash_size, int sram_size, | ||||
|                       const char *kernel_filename, const char *cpu_model); | ||||
| 
 | ||||
| /* arm_boot.c */ | ||||
|  | ||||
							
								
								
									
										22
									
								
								hw/armv7m.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								hw/armv7m.c
									
									
									
									
									
								
							| @ -156,7 +156,8 @@ static void armv7m_reset(void *opaque) | ||||
|    flash_size and sram_size are in kb. | ||||
|    Returns the NVIC array.  */ | ||||
| 
 | ||||
| qemu_irq *armv7m_init(int flash_size, int sram_size, | ||||
| qemu_irq *armv7m_init(MemoryRegion *address_space_mem, | ||||
|                       int flash_size, int sram_size, | ||||
|                       const char *kernel_filename, const char *cpu_model) | ||||
| { | ||||
|     CPUState *env; | ||||
| @ -169,6 +170,9 @@ qemu_irq *armv7m_init(int flash_size, int sram_size, | ||||
|     uint64_t lowaddr; | ||||
|     int i; | ||||
|     int big_endian; | ||||
|     MemoryRegion *sram = g_new(MemoryRegion, 1); | ||||
|     MemoryRegion *flash = g_new(MemoryRegion, 1); | ||||
|     MemoryRegion *hack = g_new(MemoryRegion, 1); | ||||
| 
 | ||||
|     flash_size *= 1024; | ||||
|     sram_size *= 1024; | ||||
| @ -194,12 +198,11 @@ qemu_irq *armv7m_init(int flash_size, int sram_size, | ||||
| #endif | ||||
| 
 | ||||
|     /* Flash programming is done via the SCU, so pretend it is ROM.  */ | ||||
|     cpu_register_physical_memory(0, flash_size, | ||||
|                                  qemu_ram_alloc(NULL, "armv7m.flash", | ||||
|                                                 flash_size) | IO_MEM_ROM); | ||||
|     cpu_register_physical_memory(0x20000000, sram_size, | ||||
|                                  qemu_ram_alloc(NULL, "armv7m.sram", | ||||
|                                                 sram_size) | IO_MEM_RAM); | ||||
|     memory_region_init_ram(flash, NULL, "armv7m.flash", flash_size); | ||||
|     memory_region_set_readonly(flash, true); | ||||
|     memory_region_add_subregion(address_space_mem, 0, flash); | ||||
|     memory_region_init_ram(sram, NULL, "armv7m.sram", sram_size); | ||||
|     memory_region_add_subregion(address_space_mem, 0x20000000, sram); | ||||
|     armv7m_bitband_init(); | ||||
| 
 | ||||
|     nvic = qdev_create(NULL, "armv7m_nvic"); | ||||
| @ -232,9 +235,8 @@ qemu_irq *armv7m_init(int flash_size, int sram_size, | ||||
|     /* Hack to map an additional page of ram at the top of the address
 | ||||
|        space.  This stops qemu complaining about executing code outside RAM | ||||
|        when returning from an exception.  */ | ||||
|     cpu_register_physical_memory(0xfffff000, 0x1000, | ||||
|                                  qemu_ram_alloc(NULL, "armv7m.hack",  | ||||
|                                                 0x1000) | IO_MEM_RAM); | ||||
|     memory_region_init_ram(hack, NULL, "armv7m.hack", 0x1000); | ||||
|     memory_region_add_subregion(address_space_mem, 0xfffff000, hack); | ||||
| 
 | ||||
|     qemu_register_reset(armv7m_reset, env); | ||||
|     return pic; | ||||
|  | ||||
| @ -15,6 +15,7 @@ | ||||
| #include "i2c.h" | ||||
| #include "net.h" | ||||
| #include "boards.h" | ||||
| #include "exec-memory.h" | ||||
| 
 | ||||
| #define GPIO_A 0 | ||||
| #define GPIO_B 1 | ||||
| @ -1260,6 +1261,7 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model, | ||||
|         0x40024000, 0x40025000, 0x40026000}; | ||||
|     static const int gpio_irq[7] = {0, 1, 2, 3, 4, 30, 31}; | ||||
| 
 | ||||
|     MemoryRegion *address_space_mem = get_system_memory(); | ||||
|     qemu_irq *pic; | ||||
|     DeviceState *gpio_dev[7]; | ||||
|     qemu_irq gpio_in[7][8]; | ||||
| @ -1274,7 +1276,8 @@ static void stellaris_init(const char *kernel_filename, const char *cpu_model, | ||||
| 
 | ||||
|     flash_size = ((board->dc0 & 0xffff) + 1) << 1; | ||||
|     sram_size = (board->dc0 >> 18) + 1; | ||||
|     pic = armv7m_init(flash_size, sram_size, kernel_filename, cpu_model); | ||||
|     pic = armv7m_init(address_space_mem, | ||||
|                       flash_size, sram_size, kernel_filename, cpu_model); | ||||
| 
 | ||||
|     if (board->dc1 & (1 << 16)) { | ||||
|         dev = sysbus_create_varargs("stellaris-adc", 0x40038000, | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Avi Kivity
						Avi Kivity