armv7m.c (ef475b5dd12684591e6264e517eaa5b3e90f7ffa) | armv7m.c (ba1ba5cca3962a9cc400c713c736b4fb8db1f38e) |
---|---|
1/* 2 * ARMV7M System emulation. 3 * 4 * Copyright (c) 2006-2007 CodeSourcery. 5 * Written by Paul Brook 6 * 7 * This code is licensed under the GPL. 8 */ --- 137 unchanged lines hidden (view full) --- 146} 147 148static void armv7m_realize(DeviceState *dev, Error **errp) 149{ 150 ARMv7MState *s = ARMV7M(dev); 151 SysBusDevice *sbd; 152 Error *err = NULL; 153 int i; | 1/* 2 * ARMV7M System emulation. 3 * 4 * Copyright (c) 2006-2007 CodeSourcery. 5 * Written by Paul Brook 6 * 7 * This code is licensed under the GPL. 8 */ --- 137 unchanged lines hidden (view full) --- 146} 147 148static void armv7m_realize(DeviceState *dev, Error **errp) 149{ 150 ARMv7MState *s = ARMV7M(dev); 151 SysBusDevice *sbd; 152 Error *err = NULL; 153 int i; |
154 char **cpustr; 155 ObjectClass *oc; 156 const char *typename; 157 CPUClass *cc; | |
158 159 if (!s->board_memory) { 160 error_setg(errp, "memory property was not set"); 161 return; 162 } 163 164 memory_region_add_subregion_overlap(&s->container, 0, s->board_memory, -1); 165 | 154 155 if (!s->board_memory) { 156 error_setg(errp, "memory property was not set"); 157 return; 158 } 159 160 memory_region_add_subregion_overlap(&s->container, 0, s->board_memory, -1); 161 |
166 cpustr = g_strsplit(s->cpu_model, ",", 2); | 162 s->cpu = ARM_CPU(object_new(s->cpu_type)); |
167 | 163 |
168 oc = cpu_class_by_name(TYPE_ARM_CPU, cpustr[0]); 169 if (!oc) { 170 error_setg(errp, "Unknown CPU model %s", cpustr[0]); 171 g_strfreev(cpustr); 172 return; 173 } 174 175 cc = CPU_CLASS(oc); 176 typename = object_class_get_name(oc); 177 cc->parse_features(typename, cpustr[1], &err); 178 g_strfreev(cpustr); 179 if (err) { 180 error_propagate(errp, err); 181 return; 182 } 183 184 s->cpu = ARM_CPU(object_new(typename)); 185 if (!s->cpu) { 186 error_setg(errp, "Unknown CPU model %s", s->cpu_model); 187 return; 188 } 189 | |
190 object_property_set_link(OBJECT(s->cpu), OBJECT(&s->container), "memory", 191 &error_abort); 192 object_property_set_bool(OBJECT(s->cpu), true, "realized", &err); 193 if (err != NULL) { 194 error_propagate(errp, err); 195 return; 196 } 197 --- 38 unchanged lines hidden (view full) --- 236 } 237 238 memory_region_add_subregion(&s->container, bitband_output_addr[i], 239 sysbus_mmio_get_region(sbd, 0)); 240 } 241} 242 243static Property armv7m_properties[] = { | 164 object_property_set_link(OBJECT(s->cpu), OBJECT(&s->container), "memory", 165 &error_abort); 166 object_property_set_bool(OBJECT(s->cpu), true, "realized", &err); 167 if (err != NULL) { 168 error_propagate(errp, err); 169 return; 170 } 171 --- 38 unchanged lines hidden (view full) --- 210 } 211 212 memory_region_add_subregion(&s->container, bitband_output_addr[i], 213 sysbus_mmio_get_region(sbd, 0)); 214 } 215} 216 217static Property armv7m_properties[] = { |
244 DEFINE_PROP_STRING("cpu-model", ARMv7MState, cpu_model), | 218 DEFINE_PROP_STRING("cpu-type", ARMv7MState, cpu_type), |
245 DEFINE_PROP_LINK("memory", ARMv7MState, board_memory, TYPE_MEMORY_REGION, 246 MemoryRegion *), 247 DEFINE_PROP_END_OF_LIST(), 248}; 249 250static void armv7m_class_init(ObjectClass *klass, void *data) 251{ 252 DeviceClass *dc = DEVICE_CLASS(klass); --- 17 unchanged lines hidden (view full) --- 270 cpu_reset(CPU(cpu)); 271} 272 273/* Init CPU and memory for a v7-M based board. 274 mem_size is in bytes. 275 Returns the ARMv7M device. */ 276 277DeviceState *armv7m_init(MemoryRegion *system_memory, int mem_size, int num_irq, | 219 DEFINE_PROP_LINK("memory", ARMv7MState, board_memory, TYPE_MEMORY_REGION, 220 MemoryRegion *), 221 DEFINE_PROP_END_OF_LIST(), 222}; 223 224static void armv7m_class_init(ObjectClass *klass, void *data) 225{ 226 DeviceClass *dc = DEVICE_CLASS(klass); --- 17 unchanged lines hidden (view full) --- 244 cpu_reset(CPU(cpu)); 245} 246 247/* Init CPU and memory for a v7-M based board. 248 mem_size is in bytes. 249 Returns the ARMv7M device. */ 250 251DeviceState *armv7m_init(MemoryRegion *system_memory, int mem_size, int num_irq, |
278 const char *kernel_filename, const char *cpu_model) | 252 const char *kernel_filename, const char *cpu_type) |
279{ 280 DeviceState *armv7m; 281 | 253{ 254 DeviceState *armv7m; 255 |
282 if (cpu_model == NULL) { 283 cpu_model = "cortex-m3"; 284 } 285 | |
286 armv7m = qdev_create(NULL, TYPE_ARMV7M); 287 qdev_prop_set_uint32(armv7m, "num-irq", num_irq); | 256 armv7m = qdev_create(NULL, TYPE_ARMV7M); 257 qdev_prop_set_uint32(armv7m, "num-irq", num_irq); |
288 qdev_prop_set_string(armv7m, "cpu-model", cpu_model); | 258 qdev_prop_set_string(armv7m, "cpu-type", cpu_type); |
289 object_property_set_link(OBJECT(armv7m), OBJECT(get_system_memory()), 290 "memory", &error_abort); | 259 object_property_set_link(OBJECT(armv7m), OBJECT(get_system_memory()), 260 "memory", &error_abort); |
291 /* This will exit with an error if the user passed us a bad cpu_model */ | 261 /* This will exit with an error if the user passed us a bad cpu_type */ |
292 qdev_init_nofail(armv7m); 293 294 armv7m_load_kernel(ARM_CPU(first_cpu), kernel_filename, mem_size); 295 return armv7m; 296} 297 298void armv7m_load_kernel(ARMCPU *cpu, const char *kernel_filename, int mem_size) 299{ --- 70 unchanged lines hidden --- | 262 qdev_init_nofail(armv7m); 263 264 armv7m_load_kernel(ARM_CPU(first_cpu), kernel_filename, mem_size); 265 return armv7m; 266} 267 268void armv7m_load_kernel(ARMCPU *cpu, const char *kernel_filename, int mem_size) 269{ --- 70 unchanged lines hidden --- |