Lines Matching +full:cpu +full:- +full:interrupt +full:- +full:controller
6 * SPDX-License-Identifier: GPL-2.0-or-later
25 /* Number of external interrupt lines to configure the GIC with */
28 #define PPI(cpu, irq) (GIC_NUM_IRQS + (cpu) * GIC_INTERNAL + GIC_NR_SGIS + irq) argument
34 #define GIC_VIFACE_OTHER_OFS(cpu) (0x5000 + (cpu) * 0x200) argument
44 qemu_set_irq(qdev_get_gpio_in(DEVICE(&s->gic), irq), level); in bcm2838_gic_set_irq()
51 object_initialize_child(obj, "peripherals", &s->peripherals, in bcm2838_init()
53 object_property_add_alias(obj, "board-rev", OBJECT(&s->peripherals), in bcm2838_init()
54 "board-rev"); in bcm2838_init()
55 object_property_add_alias(obj, "vcram-size", OBJECT(&s->peripherals), in bcm2838_init()
56 "vcram-size"); in bcm2838_init()
57 object_property_add_alias(obj, "vcram-base", OBJECT(&s->peripherals), in bcm2838_init()
58 "vcram-base"); in bcm2838_init()
59 object_property_add_alias(obj, "command-line", OBJECT(&s->peripherals), in bcm2838_init()
60 "command-line"); in bcm2838_init()
62 object_initialize_child(obj, "gic", &s->gic, TYPE_ARM_GIC); in bcm2838_init()
70 BCM2838PeripheralState *ps = BCM2838_PERIPHERALS(&s->peripherals); in bcm2838_realize()
72 BCM_SOC_PERIPHERALS_BASE(&s->peripherals); in bcm2838_realize()
81 /* bcm2836 interrupt controller (and mailboxes, etc.) */ in bcm2838_realize()
82 if (!sysbus_realize(SYS_BUS_DEVICE(&s_base->control), errp)) { in bcm2838_realize()
85 sysbus_mmio_map(SYS_BUS_DEVICE(&s_base->control), 0, bc_base->ctrl_base); in bcm2838_realize()
88 for (int n = 0; n < bc_base->core_count; n++) { in bcm2838_realize()
90 object_property_set_int(OBJECT(&s_base->cpu[n].core), "mp-affinity", in bcm2838_realize()
91 (bc_base->clusterid << 8) | n, &error_abort); in bcm2838_realize()
93 /* set periphbase/CBAR value for CPU-local registers */ in bcm2838_realize()
94 object_property_set_int(OBJECT(&s_base->cpu[n].core), "reset-cbar", in bcm2838_realize()
95 bc_base->peri_base, &error_abort); in bcm2838_realize()
98 object_property_set_bool(OBJECT(&s_base->cpu[n].core), in bcm2838_realize()
99 "start-powered-off", in bcm2838_realize()
100 n >= s_base->enabled_cpus, &error_abort); in bcm2838_realize()
102 if (!qdev_realize(DEVICE(&s_base->cpu[n].core), NULL, errp)) { in bcm2838_realize()
107 if (!object_property_set_uint(OBJECT(&s->gic), "revision", 2, errp)) { in bcm2838_realize()
111 if (!object_property_set_uint(OBJECT(&s->gic), "num-cpu", BCM283X_NCPUS, in bcm2838_realize()
116 if (!object_property_set_uint(OBJECT(&s->gic), "num-irq", in bcm2838_realize()
121 if (!object_property_set_bool(OBJECT(&s->gic), in bcm2838_realize()
122 "has-virtualization-extensions", true, in bcm2838_realize()
127 if (!sysbus_realize(SYS_BUS_DEVICE(&s->gic), errp)) { in bcm2838_realize()
131 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 0, in bcm2838_realize()
132 bc_base->ctrl_base + BCM2838_GIC_BASE + GIC_DIST_OFS); in bcm2838_realize()
133 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 1, in bcm2838_realize()
134 bc_base->ctrl_base + BCM2838_GIC_BASE + GIC_CPU_OFS); in bcm2838_realize()
135 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 2, in bcm2838_realize()
136 bc_base->ctrl_base + BCM2838_GIC_BASE + GIC_VIFACE_THIS_OFS); in bcm2838_realize()
137 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 3, in bcm2838_realize()
138 bc_base->ctrl_base + BCM2838_GIC_BASE + GIC_VCPU_OFS); in bcm2838_realize()
141 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 4 + n, in bcm2838_realize()
142 bc_base->ctrl_base + BCM2838_GIC_BASE in bcm2838_realize()
146 gicdev = DEVICE(&s->gic); in bcm2838_realize()
149 DeviceState *cpudev = DEVICE(&s_base->cpu[n]); in bcm2838_realize()
151 /* Connect the GICv2 outputs to the CPU */ in bcm2838_realize()
152 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gic), n, in bcm2838_realize()
154 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gic), n + BCM283X_NCPUS, in bcm2838_realize()
156 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gic), n + 2 * BCM283X_NCPUS, in bcm2838_realize()
158 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gic), n + 3 * BCM283X_NCPUS, in bcm2838_realize()
161 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gic), n + 4 * BCM283X_NCPUS, in bcm2838_realize()
165 /* Connect timers from the CPU to the interrupt controller */ in bcm2838_realize()
174 /* PMU interrupt */ in bcm2838_realize()
175 qdev_connect_gpio_out_named(cpudev, "pmu-interrupt", 0, in bcm2838_realize()
179 /* Connect UART0 to the interrupt controller */ in bcm2838_realize()
180 sysbus_connect_irq(SYS_BUS_DEVICE(&ps_base->uart0), 0, in bcm2838_realize()
183 /* Connect AUX / UART1 to the interrupt controller */ in bcm2838_realize()
184 sysbus_connect_irq(SYS_BUS_DEVICE(&ps_base->aux), 0, in bcm2838_realize()
187 /* Connect VC mailbox to the interrupt controller */ in bcm2838_realize()
188 sysbus_connect_irq(SYS_BUS_DEVICE(&ps_base->mboxes), 0, in bcm2838_realize()
191 /* Connect SD host to the interrupt controller */ in bcm2838_realize()
192 sysbus_connect_irq(SYS_BUS_DEVICE(&ps_base->sdhost), 0, in bcm2838_realize()
196 DeviceState *mmc_irq_orgate = DEVICE(&ps->mmc_irq_orgate); in bcm2838_realize()
198 /* Connect EMMC and EMMC2 to the interrupt controller */ in bcm2838_realize()
202 /* Connect USB OTG and MPHI to the interrupt controller */ in bcm2838_realize()
203 sysbus_connect_irq(SYS_BUS_DEVICE(&ps_base->mphi), 0, in bcm2838_realize()
205 sysbus_connect_irq(SYS_BUS_DEVICE(&ps_base->dwc2), 0, in bcm2838_realize()
208 /* Connect DMA 0-6 to the interrupt controller */ in bcm2838_realize()
210 sysbus_connect_irq(SYS_BUS_DEVICE(&ps_base->dma), in bcm2838_realize()
211 n - GIC_SPI_INTERRUPT_DMA_0, in bcm2838_realize()
216 DeviceState *dma_7_8_irq_orgate = DEVICE(&ps->dma_7_8_irq_orgate); in bcm2838_realize()
218 /* Connect DMA 7-8 to the interrupt controller */ in bcm2838_realize()
223 DeviceState *dma_9_10_irq_orgate = DEVICE(&ps->dma_9_10_irq_orgate); in bcm2838_realize()
225 /* Connect DMA 9-10 to the interrupt controller */ in bcm2838_realize()
233 qdev_pass_gpios(DEVICE(&s->gic), DEVICE(&s->peripherals), NULL); in bcm2838_realize()
241 bc_base->cpu_type = ARM_CPU_TYPE_NAME("cortex-a72"); in bcm2838_class_init()
242 bc_base->core_count = BCM283X_NCPUS; in bcm2838_class_init()
243 bc_base->peri_base = 0xfe000000; in bcm2838_class_init()
244 bc_base->ctrl_base = 0xff800000; in bcm2838_class_init()
245 bc_base->clusterid = 0x0; in bcm2838_class_init()
246 dc->realize = bcm2838_realize; in bcm2838_class_init()