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