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 ---