Lines Matching +full:gic +full:- +full:timer

22 #include "qemu/error-report.h"
27 #include "hw/qdev-core.h"
29 #include "hw/char/serial-mm.h"
31 #include "hw/usb/hcd-ehci.h"
34 #include "hw/arm/allwinner-r40.h"
35 #include "hw/misc/allwinner-r40-dramc.h"
36 #include "target/arm/cpu-qom.h"
87 { "d-engine", 0x01000000, 4 * MiB },
88 { "d-inter", 0x01400000, 128 * KiB },
96 { "usb0-otg", 0x01c13000, 4 * KiB },
97 { "usb0-host", 0x01c14000, 4 * KiB },
100 { "usb1-phy", 0x01c19800, 2 * KiB },
102 { "usb2-phy", 0x01c1c800, 2 * KiB },
121 { "cpu-cfg", 0x01c25c00, 1 * KiB },
137 { "tvd-top", 0x01c30000, 4 * KiB },
144 { "tcon-top", 0x01c70000, 4 * KiB },
149 { "tve-top", 0x01c90000, 16 * KiB },
207 /* The low 8-bits of the 'boot_media' field in the SPL header */
239 if (memcmp(head->magic, BOOT0_MAGIC, sizeof(head->magic))) { in allwinner_r40_bootrom_setup()
251 head->boot_media = cpu_to_le32(SUNXI_BOOTED_FROM_MMC2); in allwinner_r40_bootrom_setup()
253 head->boot_media = cpu_to_le32(SUNXI_BOOTED_FROM_MMC0); in allwinner_r40_bootrom_setup()
256 rom_add_blob("allwinner-r40.bootrom", buffer, rom_size, in allwinner_r40_bootrom_setup()
257 rom_size, s->memmap[AW_R40_DEV_SRAM_A1], in allwinner_r40_bootrom_setup()
269 s->memmap = allwinner_r40_memmap; in allwinner_r40_init()
272 object_initialize_child(obj, "cpu[*]", &s->cpus[i], in allwinner_r40_init()
273 ARM_CPU_TYPE_NAME("cortex-a7")); in allwinner_r40_init()
276 object_initialize_child(obj, "gic", &s->gic, TYPE_ARM_GIC); in allwinner_r40_init()
278 object_initialize_child(obj, "timer", &s->timer, TYPE_AW_A10_PIT); in allwinner_r40_init()
279 object_property_add_alias(obj, "clk0-freq", OBJECT(&s->timer), in allwinner_r40_init()
280 "clk0-freq"); in allwinner_r40_init()
281 object_property_add_alias(obj, "clk1-freq", OBJECT(&s->timer), in allwinner_r40_init()
282 "clk1-freq"); in allwinner_r40_init()
284 object_initialize_child(obj, "wdt", &s->wdt, TYPE_AW_WDT_SUN4I); in allwinner_r40_init()
286 object_initialize_child(obj, "ccu", &s->ccu, TYPE_AW_R40_CCU); in allwinner_r40_init()
289 object_initialize_child(obj, mmc_names[i], &s->mmc[i], in allwinner_r40_init()
293 object_initialize_child(obj, "sata", &s->sata, TYPE_ALLWINNER_AHCI); in allwinner_r40_init()
296 object_initialize_child(obj, "ehci[*]", &s->ehci[i], in allwinner_r40_init()
298 object_initialize_child(obj, "ohci[*]", &s->ohci[i], in allwinner_r40_init()
302 object_initialize_child(obj, "twi0", &s->i2c0, TYPE_AW_I2C_SUN6I); in allwinner_r40_init()
304 object_initialize_child(obj, "emac", &s->emac, TYPE_AW_EMAC); in allwinner_r40_init()
305 object_initialize_child(obj, "gmac", &s->gmac, TYPE_AW_SUN8I_EMAC); in allwinner_r40_init()
306 object_property_add_alias(obj, "gmac-phy-addr", in allwinner_r40_init()
307 OBJECT(&s->gmac), "phy-addr"); in allwinner_r40_init()
309 object_initialize_child(obj, "dramc", &s->dramc, TYPE_AW_R40_DRAMC); in allwinner_r40_init()
310 object_property_add_alias(obj, "ram-addr", OBJECT(&s->dramc), in allwinner_r40_init()
311 "ram-addr"); in allwinner_r40_init()
312 object_property_add_alias(obj, "ram-size", OBJECT(&s->dramc), in allwinner_r40_init()
313 "ram-size"); in allwinner_r40_init()
315 object_initialize_child(obj, "sramc", &s->sramc, TYPE_AW_SRAMC_SUN8I_R40); in allwinner_r40_init()
329 qdev_prop_set_bit(DEVICE(&s->cpus[i]), "start-powered-off", in allwinner_r40_realize()
333 qdev_prop_set_bit(DEVICE(&s->cpus[i]), "has_el3", true); in allwinner_r40_realize()
334 qdev_prop_set_bit(DEVICE(&s->cpus[i]), "has_el2", true); in allwinner_r40_realize()
337 qdev_realize(DEVICE(&s->cpus[i]), NULL, &error_fatal); in allwinner_r40_realize()
341 qdev_prop_set_uint32(DEVICE(&s->gic), "num-irq", AW_R40_GIC_NUM_SPI + in allwinner_r40_realize()
343 qdev_prop_set_uint32(DEVICE(&s->gic), "revision", 2); in allwinner_r40_realize()
344 qdev_prop_set_uint32(DEVICE(&s->gic), "num-cpu", AW_R40_NUM_CPUS); in allwinner_r40_realize()
345 qdev_prop_set_bit(DEVICE(&s->gic), "has-security-extensions", false); in allwinner_r40_realize()
346 qdev_prop_set_bit(DEVICE(&s->gic), "has-virtualization-extensions", true); in allwinner_r40_realize()
347 sysbus_realize(SYS_BUS_DEVICE(&s->gic), &error_fatal); in allwinner_r40_realize()
349 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 0, s->memmap[AW_R40_DEV_GIC_DIST]); in allwinner_r40_realize()
350 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 1, s->memmap[AW_R40_DEV_GIC_CPU]); in allwinner_r40_realize()
351 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 2, s->memmap[AW_R40_DEV_GIC_HYP]); in allwinner_r40_realize()
352 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 3, s->memmap[AW_R40_DEV_GIC_VCPU]); in allwinner_r40_realize()
355 * Wire the outputs from each CPU's generic timer and the GICv2 in allwinner_r40_realize()
356 * maintenance interrupt signal to the appropriate GIC PPI inputs, in allwinner_r40_realize()
357 * and the GIC's IRQ/FIQ/VIRQ/VFIQ interrupt outputs to the CPU's inputs. in allwinner_r40_realize()
360 DeviceState *cpudev = DEVICE(&s->cpus[i]); in allwinner_r40_realize()
364 * Mapping from the output timer irq lines from the CPU to the in allwinner_r40_realize()
365 * GIC PPI inputs used for this board. in allwinner_r40_realize()
374 /* Connect CPU timer outputs to GIC PPI inputs */ in allwinner_r40_realize()
377 qdev_get_gpio_in(DEVICE(&s->gic), in allwinner_r40_realize()
381 /* Connect GIC outputs to CPU interrupt inputs */ in allwinner_r40_realize()
382 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gic), i, in allwinner_r40_realize()
384 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gic), i + AW_R40_NUM_CPUS, in allwinner_r40_realize()
386 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gic), i + (2 * AW_R40_NUM_CPUS), in allwinner_r40_realize()
388 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gic), i + (3 * AW_R40_NUM_CPUS), in allwinner_r40_realize()
391 /* GIC maintenance signal */ in allwinner_r40_realize()
392 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gic), i + (4 * AW_R40_NUM_CPUS), in allwinner_r40_realize()
393 qdev_get_gpio_in(DEVICE(&s->gic), in allwinner_r40_realize()
397 /* Timer */ in allwinner_r40_realize()
398 sysbus_realize(SYS_BUS_DEVICE(&s->timer), &error_fatal); in allwinner_r40_realize()
399 sysbus_mmio_map(SYS_BUS_DEVICE(&s->timer), 0, s->memmap[AW_R40_DEV_PIT]); in allwinner_r40_realize()
400 sysbus_connect_irq(SYS_BUS_DEVICE(&s->timer), 0, in allwinner_r40_realize()
401 qdev_get_gpio_in(DEVICE(&s->gic), in allwinner_r40_realize()
403 sysbus_connect_irq(SYS_BUS_DEVICE(&s->timer), 1, in allwinner_r40_realize()
404 qdev_get_gpio_in(DEVICE(&s->gic), in allwinner_r40_realize()
408 sysbus_realize(SYS_BUS_DEVICE(&s->sramc), &error_fatal); in allwinner_r40_realize()
409 sysbus_mmio_map(SYS_BUS_DEVICE(&s->sramc), 0, s->memmap[AW_R40_DEV_SRAMC]); in allwinner_r40_realize()
411 memory_region_init_ram(&s->sram_a1, OBJECT(dev), "sram A1", in allwinner_r40_realize()
413 memory_region_init_ram(&s->sram_a2, OBJECT(dev), "sram A2", in allwinner_r40_realize()
415 memory_region_init_ram(&s->sram_a3, OBJECT(dev), "sram A3", in allwinner_r40_realize()
417 memory_region_init_ram(&s->sram_a4, OBJECT(dev), "sram A4", in allwinner_r40_realize()
420 s->memmap[AW_R40_DEV_SRAM_A1], &s->sram_a1); in allwinner_r40_realize()
422 s->memmap[AW_R40_DEV_SRAM_A2], &s->sram_a2); in allwinner_r40_realize()
424 s->memmap[AW_R40_DEV_SRAM_A3], &s->sram_a3); in allwinner_r40_realize()
426 s->memmap[AW_R40_DEV_SRAM_A4], &s->sram_a4); in allwinner_r40_realize()
429 sysbus_realize(SYS_BUS_DEVICE(&s->ccu), &error_fatal); in allwinner_r40_realize()
430 sysbus_mmio_map(SYS_BUS_DEVICE(&s->ccu), 0, s->memmap[AW_R40_DEV_CCU]); in allwinner_r40_realize()
433 sysbus_realize(SYS_BUS_DEVICE(&s->sata), &error_fatal); in allwinner_r40_realize()
434 sysbus_mmio_map(SYS_BUS_DEVICE(&s->sata), 0, in allwinner_r40_realize()
436 sysbus_connect_irq(SYS_BUS_DEVICE(&s->sata), 0, in allwinner_r40_realize()
437 qdev_get_gpio_in(DEVICE(&s->gic), AW_R40_GIC_SPI_AHCI)); in allwinner_r40_realize()
441 g_autofree char *bus = g_strdup_printf("usb-bus.%zu", i); in allwinner_r40_realize()
443 object_property_set_bool(OBJECT(&s->ehci[i]), "companion-enable", true, in allwinner_r40_realize()
445 sysbus_realize(SYS_BUS_DEVICE(&s->ehci[i]), &error_fatal); in allwinner_r40_realize()
446 sysbus_mmio_map(SYS_BUS_DEVICE(&s->ehci[i]), 0, in allwinner_r40_realize()
449 sysbus_connect_irq(SYS_BUS_DEVICE(&s->ehci[i]), 0, in allwinner_r40_realize()
450 qdev_get_gpio_in(DEVICE(&s->gic), in allwinner_r40_realize()
454 object_property_set_str(OBJECT(&s->ohci[i]), "masterbus", bus, in allwinner_r40_realize()
456 sysbus_realize(SYS_BUS_DEVICE(&s->ohci[i]), &error_fatal); in allwinner_r40_realize()
457 sysbus_mmio_map(SYS_BUS_DEVICE(&s->ohci[i]), 0, in allwinner_r40_realize()
460 sysbus_connect_irq(SYS_BUS_DEVICE(&s->ohci[i]), 0, in allwinner_r40_realize()
461 qdev_get_gpio_in(DEVICE(&s->gic), in allwinner_r40_realize()
468 qemu_irq irq = qdev_get_gpio_in(DEVICE(&s->gic), in allwinner_r40_realize()
470 const hwaddr addr = s->memmap[AW_R40_DEV_MMC0 + i]; in allwinner_r40_realize()
472 object_property_set_link(OBJECT(&s->mmc[i]), "dma-memory", in allwinner_r40_realize()
474 sysbus_realize(SYS_BUS_DEVICE(&s->mmc[i]), &error_fatal); in allwinner_r40_realize()
475 sysbus_mmio_map(SYS_BUS_DEVICE(&s->mmc[i]), 0, addr); in allwinner_r40_realize()
476 sysbus_connect_irq(SYS_BUS_DEVICE(&s->mmc[i]), 0, irq); in allwinner_r40_realize()
491 const hwaddr addr = s->memmap[AW_R40_DEV_UART0 + i]; in allwinner_r40_realize()
494 qdev_get_gpio_in(DEVICE(&s->gic), uart_irqs[i]), in allwinner_r40_realize()
499 sysbus_realize(SYS_BUS_DEVICE(&s->i2c0), &error_fatal); in allwinner_r40_realize()
500 sysbus_mmio_map(SYS_BUS_DEVICE(&s->i2c0), 0, s->memmap[AW_R40_DEV_TWI0]); in allwinner_r40_realize()
501 sysbus_connect_irq(SYS_BUS_DEVICE(&s->i2c0), 0, in allwinner_r40_realize()
502 qdev_get_gpio_in(DEVICE(&s->gic), AW_R40_GIC_SPI_TWI0)); in allwinner_r40_realize()
505 sysbus_realize(SYS_BUS_DEVICE(&s->dramc), &error_fatal); in allwinner_r40_realize()
506 sysbus_mmio_map(SYS_BUS_DEVICE(&s->dramc), 0, in allwinner_r40_realize()
507 s->memmap[AW_R40_DEV_DRAMCOM]); in allwinner_r40_realize()
508 sysbus_mmio_map(SYS_BUS_DEVICE(&s->dramc), 1, in allwinner_r40_realize()
509 s->memmap[AW_R40_DEV_DRAMCTL]); in allwinner_r40_realize()
510 sysbus_mmio_map(SYS_BUS_DEVICE(&s->dramc), 2, in allwinner_r40_realize()
511 s->memmap[AW_R40_DEV_DRAMPHY]); in allwinner_r40_realize()
514 qemu_configure_nic_device(DEVICE(&s->gmac), true, "gmac"); in allwinner_r40_realize()
515 object_property_set_link(OBJECT(&s->gmac), "dma-memory", in allwinner_r40_realize()
517 sysbus_realize(SYS_BUS_DEVICE(&s->gmac), &error_fatal); in allwinner_r40_realize()
518 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gmac), 0, s->memmap[AW_R40_DEV_GMAC]); in allwinner_r40_realize()
519 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gmac), 0, in allwinner_r40_realize()
520 qdev_get_gpio_in(DEVICE(&s->gic), AW_R40_GIC_SPI_GMAC)); in allwinner_r40_realize()
523 qemu_configure_nic_device(DEVICE(&s->emac), true, "emac"); in allwinner_r40_realize()
524 sysbus_realize(SYS_BUS_DEVICE(&s->emac), &error_fatal); in allwinner_r40_realize()
525 sysbus_mmio_map(SYS_BUS_DEVICE(&s->emac), 0, s->memmap[AW_R40_DEV_EMAC]); in allwinner_r40_realize()
526 sysbus_connect_irq(SYS_BUS_DEVICE(&s->emac), 0, in allwinner_r40_realize()
527 qdev_get_gpio_in(DEVICE(&s->gic), AW_R40_GIC_SPI_EMAC)); in allwinner_r40_realize()
530 sysbus_realize(SYS_BUS_DEVICE(&s->wdt), &error_fatal); in allwinner_r40_realize()
531 sysbus_mmio_map_overlap(SYS_BUS_DEVICE(&s->wdt), 0, in allwinner_r40_realize()
546 dc->realize = allwinner_r40_realize; in allwinner_r40_class_init()
548 dc->user_creatable = false; in allwinner_r40_class_init()