mirror of https://github.com/xemu-project/xemu.git
hw/arm/integratorcp: Support specifying features via -cpu
Since the integratorcp board creates the CPU object directly rather than via cpu_arm_init(), we have to call the CPU class parse_features() method ourselves if we want to support the user passing features via the -cpu command line argument as well as just the cpu name. Do so. Signed-off-by: Julian Brown <julian@codesourcery.com> [PMM: split out into its own patch] Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
42922105be
commit
00909b5858
|
@ -577,27 +577,42 @@ static void integratorcp_init(MachineState *machine)
|
||||||
const char *kernel_filename = machine->kernel_filename;
|
const char *kernel_filename = machine->kernel_filename;
|
||||||
const char *kernel_cmdline = machine->kernel_cmdline;
|
const char *kernel_cmdline = machine->kernel_cmdline;
|
||||||
const char *initrd_filename = machine->initrd_filename;
|
const char *initrd_filename = machine->initrd_filename;
|
||||||
|
char **cpustr;
|
||||||
ObjectClass *cpu_oc;
|
ObjectClass *cpu_oc;
|
||||||
|
CPUClass *cc;
|
||||||
Object *cpuobj;
|
Object *cpuobj;
|
||||||
ARMCPU *cpu;
|
ARMCPU *cpu;
|
||||||
|
const char *typename;
|
||||||
MemoryRegion *address_space_mem = get_system_memory();
|
MemoryRegion *address_space_mem = get_system_memory();
|
||||||
MemoryRegion *ram = g_new(MemoryRegion, 1);
|
MemoryRegion *ram = g_new(MemoryRegion, 1);
|
||||||
MemoryRegion *ram_alias = g_new(MemoryRegion, 1);
|
MemoryRegion *ram_alias = g_new(MemoryRegion, 1);
|
||||||
qemu_irq pic[32];
|
qemu_irq pic[32];
|
||||||
DeviceState *dev, *sic, *icp;
|
DeviceState *dev, *sic, *icp;
|
||||||
int i;
|
int i;
|
||||||
|
Error *err = NULL;
|
||||||
|
|
||||||
if (!cpu_model) {
|
if (!cpu_model) {
|
||||||
cpu_model = "arm926";
|
cpu_model = "arm926";
|
||||||
}
|
}
|
||||||
|
|
||||||
cpu_oc = cpu_class_by_name(TYPE_ARM_CPU, cpu_model);
|
cpustr = g_strsplit(cpu_model, ",", 2);
|
||||||
|
|
||||||
|
cpu_oc = cpu_class_by_name(TYPE_ARM_CPU, cpustr[0]);
|
||||||
if (!cpu_oc) {
|
if (!cpu_oc) {
|
||||||
fprintf(stderr, "Unable to find CPU definition\n");
|
fprintf(stderr, "Unable to find CPU definition\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
typename = object_class_get_name(cpu_oc);
|
||||||
|
|
||||||
cpuobj = object_new(object_class_get_name(cpu_oc));
|
cc = CPU_CLASS(cpu_oc);
|
||||||
|
cc->parse_features(typename, cpustr[1], &err);
|
||||||
|
g_strfreev(cpustr);
|
||||||
|
if (err) {
|
||||||
|
error_report_err(err);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
cpuobj = object_new(typename);
|
||||||
|
|
||||||
/* By default ARM1176 CPUs have EL3 enabled. This board does not
|
/* By default ARM1176 CPUs have EL3 enabled. This board does not
|
||||||
* currently support EL3 so the CPU EL3 property is disabled before
|
* currently support EL3 so the CPU EL3 property is disabled before
|
||||||
|
|
Loading…
Reference in New Issue