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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user