86
86
object_property_add_const_link(OBJECT(&s->property), "dma-mr",
87
87
OBJECT(&s->gpu_bus_mr), &error_abort);
89
/* Random Number Generator */
90
object_initialize(&s->rng, sizeof(s->rng), TYPE_BCM2835_RNG);
91
object_property_add_child(obj, "rng", OBJECT(&s->rng), NULL);
92
qdev_set_parent_bus(DEVICE(&s->rng), sysbus_get_default());
89
94
/* Extended Mass Media Controller */
90
95
object_initialize(&s->sdhci, sizeof(s->sdhci), TYPE_SYSBUS_SDHCI);
91
96
object_property_add_child(obj, "sdhci", OBJECT(&s->sdhci), NULL);
92
97
qdev_set_parent_bus(DEVICE(&s->sdhci), sysbus_get_default());
100
object_initialize(&s->sdhost, sizeof(s->sdhost), TYPE_BCM2835_SDHOST);
101
object_property_add_child(obj, "sdhost", OBJECT(&s->sdhost), NULL);
102
qdev_set_parent_bus(DEVICE(&s->sdhost), sysbus_get_default());
94
104
/* DMA Channels */
95
105
object_initialize(&s->dma, sizeof(s->dma), TYPE_BCM2835_DMA);
96
106
object_property_add_child(obj, "dma", OBJECT(&s->dma), NULL);
99
109
object_property_add_const_link(OBJECT(&s->dma), "dma-mr",
100
110
OBJECT(&s->gpu_bus_mr), &error_abort);
113
object_initialize(&s->gpio, sizeof(s->gpio), TYPE_BCM2835_GPIO);
114
object_property_add_child(obj, "gpio", OBJECT(&s->gpio), NULL);
115
qdev_set_parent_bus(DEVICE(&s->gpio), sysbus_get_default());
117
object_property_add_const_link(OBJECT(&s->gpio), "sdbus-sdhci",
118
OBJECT(&s->sdhci.sdbus), &error_abort);
119
object_property_add_const_link(OBJECT(&s->gpio), "sdbus-sdhost",
120
OBJECT(&s->sdhost.sdbus), &error_abort);
103
123
static void bcm2835_peripherals_realize(DeviceState *dev, Error **errp)
226
246
sysbus_connect_irq(SYS_BUS_DEVICE(&s->property), 0,
227
247
qdev_get_gpio_in(DEVICE(&s->mboxes), MBOX_CHAN_PROPERTY));
249
/* Random Number Generator */
250
object_property_set_bool(OBJECT(&s->rng), true, "realized", &err);
252
error_propagate(errp, err);
256
memory_region_add_subregion(&s->peri_mr, RNG_OFFSET,
257
sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->rng), 0));
229
259
/* Extended Mass Media Controller */
230
260
object_property_set_int(OBJECT(&s->sdhci), BCM2835_SDHC_CAPAREG, "capareg",
252
282
sysbus_connect_irq(SYS_BUS_DEVICE(&s->sdhci), 0,
253
283
qdev_get_gpio_in_named(DEVICE(&s->ic), BCM2835_IC_GPU_IRQ,
254
284
INTERRUPT_ARASANSDIO));
255
object_property_add_alias(OBJECT(s), "sd-bus", OBJECT(&s->sdhci), "sd-bus",
287
object_property_set_bool(OBJECT(&s->sdhost), true, "realized", &err);
258
289
error_propagate(errp, err);
293
memory_region_add_subregion(&s->peri_mr, MMCI0_OFFSET,
294
sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->sdhost), 0));
295
sysbus_connect_irq(SYS_BUS_DEVICE(&s->sdhost), 0,
296
qdev_get_gpio_in_named(DEVICE(&s->ic), BCM2835_IC_GPU_IRQ,
262
299
/* DMA Channels */
263
300
object_property_set_bool(OBJECT(&s->dma), true, "realized", &err);
277
314
BCM2835_IC_GPU_IRQ,
278
315
INTERRUPT_DMA0 + n));
319
object_property_set_bool(OBJECT(&s->gpio), true, "realized", &err);
321
error_propagate(errp, err);
325
memory_region_add_subregion(&s->peri_mr, GPIO_OFFSET,
326
sysbus_mmio_get_region(SYS_BUS_DEVICE(&s->gpio), 0));
328
object_property_add_alias(OBJECT(s), "sd-bus", OBJECT(&s->gpio), "sd-bus",
331
error_propagate(errp, err);
282
336
static void bcm2835_peripherals_class_init(ObjectClass *oc, void *data)