Lines Matching +full:pwm +full:- +full:number

23 #include "hw/char/serial-mm.h"
27 #include "hw/qdev-clock.h"
28 #include "hw/qdev-properties.h"
84 * Interrupt lines going into the GIC. This does not include internal Cortex-A35
119 NPCM8XX_PWM0_IRQ = 93, /* PWM module 0 */
120 NPCM8XX_PWM1_IRQ, /* PWM module 1 */
175 /* Total number of GIC interrupts, including internal Cortex-A35 interrupts. */
178 ((NPCM8XX_NUM_IRQ - GIC_INTERNAL) + (cpu) * GIC_INTERNAL)
198 /* Direct memory-mapped access to SPI0 CS0-1. */
204 /* Direct memory-mapped access to SPI1 CS0-3. */
212 /* Direct memory-mapped access to SPI3 CS0-3. */
220 /* Register base address for each PWM Module */
239 /* Direct memory-mapped access to each SMBus Module. */
366 .board_id = -1,
373 npcm8xx_binfo.ram_size = machine->ram_size; in npcm8xx_load_kernel()
375 arm_load_kernel(&soc->cpu[0], machine, &npcm8xx_binfo); in npcm8xx_load_kernel()
387 value = cpu_to_le32(nc->disabled_modules); in npcm8xx_init_fuses()
388 npcm7xx_otp_array_write(&s->fuse_array, &value, NPCM7XX_FUSE_DERIVATIVE, in npcm8xx_init_fuses()
395 QEMU_BUILD_BUG_ON(sizeof(s->adc.calibration_r_values) != 4); in npcm8xx_write_adc_calibration()
396 npcm7xx_otp_array_write(&s->fuse_array, s->adc.calibration_r_values, in npcm8xx_write_adc_calibration()
397 NPCM7XX_FUSE_ADC_CALIB, sizeof(s->adc.calibration_r_values)); in npcm8xx_write_adc_calibration()
402 return qdev_get_gpio_in(DEVICE(&s->gic), n); in npcm8xx_irq()
410 object_initialize_child(obj, "cpu-cluster", &s->cpu_cluster, in npcm8xx_init()
413 object_initialize_child(OBJECT(&s->cpu_cluster), "cpu[*]", &s->cpu[i], in npcm8xx_init()
414 ARM_CPU_TYPE_NAME("cortex-a35")); in npcm8xx_init()
416 object_initialize_child(obj, "gic", &s->gic, TYPE_ARM_GIC); in npcm8xx_init()
417 object_initialize_child(obj, "gcr", &s->gcr, TYPE_NPCM8XX_GCR); in npcm8xx_init()
418 object_property_add_alias(obj, "power-on-straps", OBJECT(&s->gcr), in npcm8xx_init()
419 "power-on-straps"); in npcm8xx_init()
420 object_initialize_child(obj, "clk", &s->clk, TYPE_NPCM8XX_CLK); in npcm8xx_init()
421 object_initialize_child(obj, "otp", &s->fuse_array, in npcm8xx_init()
423 object_initialize_child(obj, "mc", &s->mc, TYPE_NPCM7XX_MC); in npcm8xx_init()
424 object_initialize_child(obj, "rng", &s->rng, TYPE_NPCM7XX_RNG); in npcm8xx_init()
425 object_initialize_child(obj, "adc", &s->adc, TYPE_NPCM7XX_ADC); in npcm8xx_init()
427 for (i = 0; i < ARRAY_SIZE(s->tim); i++) { in npcm8xx_init()
428 object_initialize_child(obj, "tim[*]", &s->tim[i], TYPE_NPCM7XX_TIMER); in npcm8xx_init()
431 for (i = 0; i < ARRAY_SIZE(s->gpio); i++) { in npcm8xx_init()
432 object_initialize_child(obj, "gpio[*]", &s->gpio[i], TYPE_NPCM7XX_GPIO); in npcm8xx_init()
436 for (i = 0; i < ARRAY_SIZE(s->smbus); i++) { in npcm8xx_init()
437 object_initialize_child(obj, "smbus[*]", &s->smbus[i], in npcm8xx_init()
439 DEVICE(&s->smbus[i])->id = g_strdup_printf("smbus[%d]", i); in npcm8xx_init()
442 for (i = 0; i < ARRAY_SIZE(s->ehci); i++) { in npcm8xx_init()
443 object_initialize_child(obj, "ehci[*]", &s->ehci[i], TYPE_NPCM7XX_EHCI); in npcm8xx_init()
445 for (i = 0; i < ARRAY_SIZE(s->ohci); i++) { in npcm8xx_init()
446 object_initialize_child(obj, "ohci[*]", &s->ohci[i], TYPE_SYSBUS_OHCI); in npcm8xx_init()
449 QEMU_BUILD_BUG_ON(ARRAY_SIZE(npcm8xx_fiu) != ARRAY_SIZE(s->fiu)); in npcm8xx_init()
450 for (i = 0; i < ARRAY_SIZE(s->fiu); i++) { in npcm8xx_init()
451 object_initialize_child(obj, npcm8xx_fiu[i].name, &s->fiu[i], in npcm8xx_init()
455 for (i = 0; i < ARRAY_SIZE(s->pwm); i++) { in npcm8xx_init()
456 object_initialize_child(obj, "pwm[*]", &s->pwm[i], TYPE_NPCM7XX_PWM); in npcm8xx_init()
459 for (i = 0; i < ARRAY_SIZE(s->mft); i++) { in npcm8xx_init()
460 object_initialize_child(obj, "mft[*]", &s->mft[i], TYPE_NPCM7XX_MFT); in npcm8xx_init()
463 for (i = 0; i < ARRAY_SIZE(s->gmac); i++) { in npcm8xx_init()
464 object_initialize_child(obj, "gmac[*]", &s->gmac[i], TYPE_NPCM_GMAC); in npcm8xx_init()
466 object_initialize_child(obj, "pcs", &s->pcs, TYPE_NPCM_PCS); in npcm8xx_init()
468 object_initialize_child(obj, "mmc", &s->mmc, TYPE_NPCM7XX_SDHCI); in npcm8xx_init()
469 object_initialize_child(obj, "pspi", &s->pspi, TYPE_NPCM_PSPI); in npcm8xx_init()
478 if (memory_region_size(s->dram) > NPCM8XX_DRAM_SZ) { in npcm8xx_realize()
485 for (i = 0; i < nc->num_cpus; i++) { in npcm8xx_realize()
486 object_property_set_int(OBJECT(&s->cpu[i]), "mp-affinity", in npcm8xx_realize()
489 object_property_set_bool(OBJECT(&s->cpu[i]), "reset-hivecs", true, in npcm8xx_realize()
491 object_property_set_int(OBJECT(&s->cpu[i]), "core-count", in npcm8xx_realize()
492 nc->num_cpus, &error_abort); in npcm8xx_realize()
495 object_property_set_bool(OBJECT(&s->cpu[i]), "has_el3", false, in npcm8xx_realize()
498 if (!qdev_realize(DEVICE(&s->cpu[i]), NULL, errp)) { in npcm8xx_realize()
504 object_property_set_uint(OBJECT(&s->gic), "num-cpu", nc->num_cpus, errp); in npcm8xx_realize()
505 object_property_set_uint(OBJECT(&s->gic), "num-irq", NPCM8XX_NUM_IRQ, errp); in npcm8xx_realize()
506 object_property_set_uint(OBJECT(&s->gic), "revision", 2, errp); in npcm8xx_realize()
507 object_property_set_bool(OBJECT(&s->gic), "has-security-extensions", true, in npcm8xx_realize()
509 if (!sysbus_realize(SYS_BUS_DEVICE(&s->gic), errp)) { in npcm8xx_realize()
512 for (i = 0; i < nc->num_cpus; i++) { in npcm8xx_realize()
513 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gic), i, in npcm8xx_realize()
514 qdev_get_gpio_in(DEVICE(&s->cpu[i]), ARM_CPU_IRQ)); in npcm8xx_realize()
515 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gic), i + nc->num_cpus, in npcm8xx_realize()
516 qdev_get_gpio_in(DEVICE(&s->cpu[i]), ARM_CPU_FIQ)); in npcm8xx_realize()
517 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gic), i + nc->num_cpus * 2, in npcm8xx_realize()
518 qdev_get_gpio_in(DEVICE(&s->cpu[i]), ARM_CPU_VIRQ)); in npcm8xx_realize()
519 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gic), i + nc->num_cpus * 3, in npcm8xx_realize()
520 qdev_get_gpio_in(DEVICE(&s->cpu[i]), ARM_CPU_VFIQ)); in npcm8xx_realize()
522 qdev_connect_gpio_out(DEVICE(&s->cpu[i]), GTIMER_PHYS, in npcm8xx_realize()
523 qdev_get_gpio_in(DEVICE(&s->gic), in npcm8xx_realize()
525 qdev_connect_gpio_out(DEVICE(&s->cpu[i]), GTIMER_VIRT, in npcm8xx_realize()
526 qdev_get_gpio_in(DEVICE(&s->gic), in npcm8xx_realize()
528 qdev_connect_gpio_out(DEVICE(&s->cpu[i]), GTIMER_HYP, in npcm8xx_realize()
529 qdev_get_gpio_in(DEVICE(&s->gic), in npcm8xx_realize()
531 qdev_connect_gpio_out(DEVICE(&s->cpu[i]), GTIMER_SEC, in npcm8xx_realize()
532 qdev_get_gpio_in(DEVICE(&s->gic), in npcm8xx_realize()
535 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 0, NPCM8XX_GICD_BA); in npcm8xx_realize()
536 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 1, NPCM8XX_GICC_BA); in npcm8xx_realize()
539 qdev_prop_set_uint32(DEVICE(&s->cpu_cluster), "cluster-id", 0); in npcm8xx_realize()
540 qdev_realize(DEVICE(&s->cpu_cluster), NULL, &error_fatal); in npcm8xx_realize()
543 object_property_set_int(OBJECT(&s->gcr), "disabled-modules", in npcm8xx_realize()
544 nc->disabled_modules, &error_abort); in npcm8xx_realize()
545 object_property_add_const_link(OBJECT(&s->gcr), "dram-mr", OBJECT(s->dram)); in npcm8xx_realize()
546 if (!sysbus_realize(SYS_BUS_DEVICE(&s->gcr), errp)) { in npcm8xx_realize()
549 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gcr), 0, NPCM8XX_GCR_BA); in npcm8xx_realize()
552 sysbus_realize(SYS_BUS_DEVICE(&s->clk), &error_abort); in npcm8xx_realize()
553 sysbus_mmio_map(SYS_BUS_DEVICE(&s->clk), 0, NPCM8XX_CLK_BA); in npcm8xx_realize()
556 sysbus_realize(SYS_BUS_DEVICE(&s->fuse_array), &error_abort); in npcm8xx_realize()
557 sysbus_mmio_map(SYS_BUS_DEVICE(&s->fuse_array), 0, NPCM8XX_OTP_BA); in npcm8xx_realize()
561 sysbus_realize(SYS_BUS_DEVICE(&s->mc), &error_abort); in npcm8xx_realize()
562 sysbus_mmio_map(SYS_BUS_DEVICE(&s->mc), 0, NPCM8XX_MC_BA); in npcm8xx_realize()
565 qdev_connect_clock_in(DEVICE(&s->adc), "clock", qdev_get_clock_out( in npcm8xx_realize()
566 DEVICE(&s->clk), "adc-clock")); in npcm8xx_realize()
567 sysbus_realize(SYS_BUS_DEVICE(&s->adc), &error_abort); in npcm8xx_realize()
568 sysbus_mmio_map(SYS_BUS_DEVICE(&s->adc), 0, NPCM8XX_ADC_BA); in npcm8xx_realize()
569 sysbus_connect_irq(SYS_BUS_DEVICE(&s->adc), 0, in npcm8xx_realize()
574 QEMU_BUILD_BUG_ON(ARRAY_SIZE(npcm8xx_tim_addr) != ARRAY_SIZE(s->tim)); in npcm8xx_realize()
575 for (i = 0; i < ARRAY_SIZE(s->tim); i++) { in npcm8xx_realize()
576 SysBusDevice *sbd = SYS_BUS_DEVICE(&s->tim[i]); in npcm8xx_realize()
581 qdev_connect_clock_in(DEVICE(&s->tim[i]), "clock", qdev_get_clock_out( in npcm8xx_realize()
582 DEVICE(&s->clk), "timer-clock")); in npcm8xx_realize()
597 qdev_connect_gpio_out_named(DEVICE(&s->tim[i]), in npcm8xx_realize()
599 qdev_get_gpio_in_named(DEVICE(&s->clk), in npcm8xx_realize()
610 /* Random Number Generator. Cannot fail. */ in npcm8xx_realize()
611 sysbus_realize(SYS_BUS_DEVICE(&s->rng), &error_abort); in npcm8xx_realize()
612 sysbus_mmio_map(SYS_BUS_DEVICE(&s->rng), 0, NPCM8XX_RNG_BA); in npcm8xx_realize()
615 QEMU_BUILD_BUG_ON(ARRAY_SIZE(npcm8xx_gpio) != ARRAY_SIZE(s->gpio)); in npcm8xx_realize()
616 for (i = 0; i < ARRAY_SIZE(s->gpio); i++) { in npcm8xx_realize()
617 Object *obj = OBJECT(&s->gpio[i]); in npcm8xx_realize()
619 object_property_set_uint(obj, "reset-pullup", in npcm8xx_realize()
621 object_property_set_uint(obj, "reset-pulldown", in npcm8xx_realize()
623 object_property_set_uint(obj, "reset-osrc", in npcm8xx_realize()
625 object_property_set_uint(obj, "reset-odsc", in npcm8xx_realize()
634 QEMU_BUILD_BUG_ON(ARRAY_SIZE(npcm8xx_smbus_addr) != ARRAY_SIZE(s->smbus)); in npcm8xx_realize()
635 for (i = 0; i < ARRAY_SIZE(s->smbus); i++) { in npcm8xx_realize()
636 Object *obj = OBJECT(&s->smbus[i]); in npcm8xx_realize()
645 QEMU_BUILD_BUG_ON(ARRAY_SIZE(s->ohci) != ARRAY_SIZE(s->ehci)); in npcm8xx_realize()
646 for (i = 0; i < ARRAY_SIZE(s->ehci); i++) { in npcm8xx_realize()
647 object_property_set_bool(OBJECT(&s->ehci[i]), "companion-enable", true, in npcm8xx_realize()
649 sysbus_realize(SYS_BUS_DEVICE(&s->ehci[i]), &error_abort); in npcm8xx_realize()
650 sysbus_mmio_map(SYS_BUS_DEVICE(&s->ehci[i]), 0, npcm8xx_ehci_addr[i]); in npcm8xx_realize()
651 sysbus_connect_irq(SYS_BUS_DEVICE(&s->ehci[i]), 0, in npcm8xx_realize()
654 for (i = 0; i < ARRAY_SIZE(s->ohci); i++) { in npcm8xx_realize()
655 object_property_set_str(OBJECT(&s->ohci[i]), "masterbus", "usb-bus.0", in npcm8xx_realize()
657 object_property_set_uint(OBJECT(&s->ohci[i]), "num-ports", 1, in npcm8xx_realize()
659 object_property_set_uint(OBJECT(&s->ohci[i]), "firstport", i, in npcm8xx_realize()
661 sysbus_realize(SYS_BUS_DEVICE(&s->ohci[i]), &error_abort); in npcm8xx_realize()
662 sysbus_mmio_map(SYS_BUS_DEVICE(&s->ohci[i]), 0, npcm8xx_ohci_addr[i]); in npcm8xx_realize()
663 sysbus_connect_irq(SYS_BUS_DEVICE(&s->ohci[i]), 0, in npcm8xx_realize()
667 /* PWM Modules. Cannot fail. */ in npcm8xx_realize()
668 QEMU_BUILD_BUG_ON(ARRAY_SIZE(npcm8xx_pwm_addr) != ARRAY_SIZE(s->pwm)); in npcm8xx_realize()
669 for (i = 0; i < ARRAY_SIZE(s->pwm); i++) { in npcm8xx_realize()
670 SysBusDevice *sbd = SYS_BUS_DEVICE(&s->pwm[i]); in npcm8xx_realize()
672 qdev_connect_clock_in(DEVICE(&s->pwm[i]), "clock", qdev_get_clock_out( in npcm8xx_realize()
673 DEVICE(&s->clk), "apb3-clock")); in npcm8xx_realize()
680 QEMU_BUILD_BUG_ON(ARRAY_SIZE(npcm8xx_mft_addr) != ARRAY_SIZE(s->mft)); in npcm8xx_realize()
681 for (i = 0; i < ARRAY_SIZE(s->mft); i++) { in npcm8xx_realize()
682 SysBusDevice *sbd = SYS_BUS_DEVICE(&s->mft[i]); in npcm8xx_realize()
684 qdev_connect_clock_in(DEVICE(&s->mft[i]), "clock-in", in npcm8xx_realize()
685 qdev_get_clock_out(DEVICE(&s->clk), in npcm8xx_realize()
686 "apb4-clock")); in npcm8xx_realize()
695 QEMU_BUILD_BUG_ON(ARRAY_SIZE(npcm8xx_gmac_addr) != ARRAY_SIZE(s->gmac)); in npcm8xx_realize()
696 for (i = 0; i < ARRAY_SIZE(s->gmac); i++) { in npcm8xx_realize()
697 SysBusDevice *sbd = SYS_BUS_DEVICE(&s->gmac[i]); in npcm8xx_realize()
718 sysbus_realize(SYS_BUS_DEVICE(&s->pcs), &error_abort); in npcm8xx_realize()
719 sysbus_mmio_map(SYS_BUS_DEVICE(&s->pcs), 0, NPCM8XX_PCS_BA); in npcm8xx_realize()
722 * Flash Interface Unit (FIU). Can fail if incorrect number of chip selects in npcm8xx_realize()
725 QEMU_BUILD_BUG_ON(ARRAY_SIZE(npcm8xx_fiu) != ARRAY_SIZE(s->fiu)); in npcm8xx_realize()
726 for (i = 0; i < ARRAY_SIZE(s->fiu); i++) { in npcm8xx_realize()
727 SysBusDevice *sbd = SYS_BUS_DEVICE(&s->fiu[i]); in npcm8xx_realize()
730 object_property_set_int(OBJECT(sbd), "cs-count", in npcm8xx_realize()
732 object_property_set_int(OBJECT(sbd), "flash-size", in npcm8xx_realize()
743 memory_region_init_ram(&s->sram, OBJECT(dev), "ram2", in npcm8xx_realize()
745 memory_region_add_subregion(get_system_memory(), NPCM8XX_RAM2_BA, &s->sram); in npcm8xx_realize()
748 memory_region_init_ram(&s->ram3, OBJECT(dev), "ram3", in npcm8xx_realize()
750 memory_region_add_subregion(get_system_memory(), NPCM8XX_RAM3_BA, &s->ram3); in npcm8xx_realize()
753 memory_region_init_rom(&s->irom, OBJECT(dev), "irom", NPCM8XX_ROM_SZ, in npcm8xx_realize()
755 memory_region_add_subregion(get_system_memory(), NPCM8XX_ROM_BA, &s->irom); in npcm8xx_realize()
758 sysbus_realize(SYS_BUS_DEVICE(&s->mmc), &error_abort); in npcm8xx_realize()
759 sysbus_mmio_map(SYS_BUS_DEVICE(&s->mmc), 0, NPCM8XX_MMC_BA); in npcm8xx_realize()
760 sysbus_connect_irq(SYS_BUS_DEVICE(&s->mmc), 0, in npcm8xx_realize()
764 sysbus_realize(SYS_BUS_DEVICE(&s->pspi), &error_abort); in npcm8xx_realize()
765 sysbus_mmio_map(SYS_BUS_DEVICE(&s->pspi), 0, NPCM8XX_PSPI_BA); in npcm8xx_realize()
766 sysbus_connect_irq(SYS_BUS_DEVICE(&s->pspi), 0, in npcm8xx_realize()
832 DEFINE_PROP_LINK("dram-mr", NPCM8xxState, dram, TYPE_MEMORY_REGION,
841 dc->realize = npcm8xx_realize; in npcm8xx_class_init()
842 dc->user_creatable = false; in npcm8xx_class_init()
843 nc->disabled_modules = 0x00000000; in npcm8xx_class_init()
844 nc->num_cpus = NPCM8XX_MAX_NUM_CPUS; in npcm8xx_class_init()