a9mpcore.c (e0175b71638cf4398903c0d25f93fe62e0606389) | a9mpcore.c (db873cc5d1a4aaa67eea87768d504b2f89d88738) |
---|---|
1/* 2 * Cortex-A9MPCore internal peripheral emulation. 3 * 4 * Copyright (c) 2009 CodeSourcery. 5 * Copyright (c) 2011 Linaro Limited. 6 * Written by Paul Brook, Peter Maydell. 7 * 8 * This code is licensed under the GPL. --- 18 unchanged lines hidden (view full) --- 27 28static void a9mp_priv_initfn(Object *obj) 29{ 30 A9MPPrivState *s = A9MPCORE_PRIV(obj); 31 32 memory_region_init(&s->container, obj, "a9mp-priv-container", 0x2000); 33 sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->container); 34 | 1/* 2 * Cortex-A9MPCore internal peripheral emulation. 3 * 4 * Copyright (c) 2009 CodeSourcery. 5 * Copyright (c) 2011 Linaro Limited. 6 * Written by Paul Brook, Peter Maydell. 7 * 8 * This code is licensed under the GPL. --- 18 unchanged lines hidden (view full) --- 27 28static void a9mp_priv_initfn(Object *obj) 29{ 30 A9MPPrivState *s = A9MPCORE_PRIV(obj); 31 32 memory_region_init(&s->container, obj, "a9mp-priv-container", 0x2000); 33 sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->container); 34 |
35 sysbus_init_child_obj(obj, "scu", &s->scu, sizeof(s->scu), TYPE_A9_SCU); | 35 object_initialize_child(obj, "scu", &s->scu, TYPE_A9_SCU); |
36 | 36 |
37 sysbus_init_child_obj(obj, "gic", &s->gic, sizeof(s->gic), TYPE_ARM_GIC); | 37 object_initialize_child(obj, "gic", &s->gic, TYPE_ARM_GIC); |
38 | 38 |
39 sysbus_init_child_obj(obj, "gtimer", &s->gtimer, sizeof(s->gtimer), 40 TYPE_A9_GTIMER); | 39 object_initialize_child(obj, "gtimer", &s->gtimer, TYPE_A9_GTIMER); |
41 | 40 |
42 sysbus_init_child_obj(obj, "mptimer", &s->mptimer, sizeof(s->mptimer), 43 TYPE_ARM_MPTIMER); | 41 object_initialize_child(obj, "mptimer", &s->mptimer, TYPE_ARM_MPTIMER); |
44 | 42 |
45 sysbus_init_child_obj(obj, "wdt", &s->wdt, sizeof(s->wdt), 46 TYPE_ARM_MPTIMER); | 43 object_initialize_child(obj, "wdt", &s->wdt, TYPE_ARM_MPTIMER); |
47} 48 49static void a9mp_priv_realize(DeviceState *dev, Error **errp) 50{ 51 SysBusDevice *sbd = SYS_BUS_DEVICE(dev); 52 A9MPPrivState *s = A9MPCORE_PRIV(dev); 53 DeviceState *scudev, *gicdev, *gtimerdev, *mptimerdev, *wdtdev; 54 SysBusDevice *scubusdev, *gicbusdev, *gtimerbusdev, *mptimerbusdev, 55 *wdtbusdev; 56 Error *err = NULL; 57 int i; 58 bool has_el3; 59 Object *cpuobj; 60 61 scudev = DEVICE(&s->scu); 62 qdev_prop_set_uint32(scudev, "num-cpu", s->num_cpu); | 44} 45 46static void a9mp_priv_realize(DeviceState *dev, Error **errp) 47{ 48 SysBusDevice *sbd = SYS_BUS_DEVICE(dev); 49 A9MPPrivState *s = A9MPCORE_PRIV(dev); 50 DeviceState *scudev, *gicdev, *gtimerdev, *mptimerdev, *wdtdev; 51 SysBusDevice *scubusdev, *gicbusdev, *gtimerbusdev, *mptimerbusdev, 52 *wdtbusdev; 53 Error *err = NULL; 54 int i; 55 bool has_el3; 56 Object *cpuobj; 57 58 scudev = DEVICE(&s->scu); 59 qdev_prop_set_uint32(scudev, "num-cpu", s->num_cpu); |
63 object_property_set_bool(OBJECT(&s->scu), true, "realized", &err); | 60 sysbus_realize(SYS_BUS_DEVICE(&s->scu), &err); |
64 if (err != NULL) { 65 error_propagate(errp, err); 66 return; 67 } 68 scubusdev = SYS_BUS_DEVICE(&s->scu); 69 70 gicdev = DEVICE(&s->gic); 71 qdev_prop_set_uint32(gicdev, "num-cpu", s->num_cpu); --- 4 unchanged lines hidden (view full) --- 76 /* Make the GIC's TZ support match the CPUs. We assume that 77 * either all the CPUs have TZ, or none do. 78 */ 79 cpuobj = OBJECT(qemu_get_cpu(0)); 80 has_el3 = object_property_find(cpuobj, "has_el3", NULL) && 81 object_property_get_bool(cpuobj, "has_el3", &error_abort); 82 qdev_prop_set_bit(gicdev, "has-security-extensions", has_el3); 83 | 61 if (err != NULL) { 62 error_propagate(errp, err); 63 return; 64 } 65 scubusdev = SYS_BUS_DEVICE(&s->scu); 66 67 gicdev = DEVICE(&s->gic); 68 qdev_prop_set_uint32(gicdev, "num-cpu", s->num_cpu); --- 4 unchanged lines hidden (view full) --- 73 /* Make the GIC's TZ support match the CPUs. We assume that 74 * either all the CPUs have TZ, or none do. 75 */ 76 cpuobj = OBJECT(qemu_get_cpu(0)); 77 has_el3 = object_property_find(cpuobj, "has_el3", NULL) && 78 object_property_get_bool(cpuobj, "has_el3", &error_abort); 79 qdev_prop_set_bit(gicdev, "has-security-extensions", has_el3); 80 |
84 object_property_set_bool(OBJECT(&s->gic), true, "realized", &err); | 81 sysbus_realize(SYS_BUS_DEVICE(&s->gic), &err); |
85 if (err != NULL) { 86 error_propagate(errp, err); 87 return; 88 } 89 gicbusdev = SYS_BUS_DEVICE(&s->gic); 90 91 /* Pass through outbound IRQ lines from the GIC */ 92 sysbus_pass_irq(sbd, gicbusdev); 93 94 /* Pass through inbound GPIO lines to the GIC */ 95 qdev_init_gpio_in(dev, a9mp_priv_set_irq, s->num_irq - 32); 96 97 gtimerdev = DEVICE(&s->gtimer); 98 qdev_prop_set_uint32(gtimerdev, "num-cpu", s->num_cpu); | 82 if (err != NULL) { 83 error_propagate(errp, err); 84 return; 85 } 86 gicbusdev = SYS_BUS_DEVICE(&s->gic); 87 88 /* Pass through outbound IRQ lines from the GIC */ 89 sysbus_pass_irq(sbd, gicbusdev); 90 91 /* Pass through inbound GPIO lines to the GIC */ 92 qdev_init_gpio_in(dev, a9mp_priv_set_irq, s->num_irq - 32); 93 94 gtimerdev = DEVICE(&s->gtimer); 95 qdev_prop_set_uint32(gtimerdev, "num-cpu", s->num_cpu); |
99 object_property_set_bool(OBJECT(&s->gtimer), true, "realized", &err); | 96 sysbus_realize(SYS_BUS_DEVICE(&s->gtimer), &err); |
100 if (err != NULL) { 101 error_propagate(errp, err); 102 return; 103 } 104 gtimerbusdev = SYS_BUS_DEVICE(&s->gtimer); 105 106 mptimerdev = DEVICE(&s->mptimer); 107 qdev_prop_set_uint32(mptimerdev, "num-cpu", s->num_cpu); | 97 if (err != NULL) { 98 error_propagate(errp, err); 99 return; 100 } 101 gtimerbusdev = SYS_BUS_DEVICE(&s->gtimer); 102 103 mptimerdev = DEVICE(&s->mptimer); 104 qdev_prop_set_uint32(mptimerdev, "num-cpu", s->num_cpu); |
108 object_property_set_bool(OBJECT(&s->mptimer), true, "realized", &err); | 105 sysbus_realize(SYS_BUS_DEVICE(&s->mptimer), &err); |
109 if (err != NULL) { 110 error_propagate(errp, err); 111 return; 112 } 113 mptimerbusdev = SYS_BUS_DEVICE(&s->mptimer); 114 115 wdtdev = DEVICE(&s->wdt); 116 qdev_prop_set_uint32(wdtdev, "num-cpu", s->num_cpu); | 106 if (err != NULL) { 107 error_propagate(errp, err); 108 return; 109 } 110 mptimerbusdev = SYS_BUS_DEVICE(&s->mptimer); 111 112 wdtdev = DEVICE(&s->wdt); 113 qdev_prop_set_uint32(wdtdev, "num-cpu", s->num_cpu); |
117 object_property_set_bool(OBJECT(&s->wdt), true, "realized", &err); | 114 sysbus_realize(SYS_BUS_DEVICE(&s->wdt), &err); |
118 if (err != NULL) { 119 error_propagate(errp, err); 120 return; 121 } 122 wdtbusdev = SYS_BUS_DEVICE(&s->wdt); 123 124 /* Memory map (addresses are offsets from PERIPHBASE): 125 * 0x0000-0x00ff -- Snoop Control Unit --- 73 unchanged lines hidden --- | 115 if (err != NULL) { 116 error_propagate(errp, err); 117 return; 118 } 119 wdtbusdev = SYS_BUS_DEVICE(&s->wdt); 120 121 /* Memory map (addresses are offsets from PERIPHBASE): 122 * 0x0000-0x00ff -- Snoop Control Unit --- 73 unchanged lines hidden --- |