Lines Matching +full:omap3 +full:- +full:intc
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
7 * Based on OMAP3 INTC code by Ben Gray
97 #define BANK1_END (BANK1_START + 32 - 1)
99 #define BANK2_END (BANK2_START + 32 - 1)
104 #define IRQ_BANK1(n) ((n) - BANK1_START)
105 #define IRQ_BANK2(n) ((n) - BANK2_START)
134 {"broadcom,bcm2835-armctrl-ic", 1},
135 {"brcm,bcm2835-armctrl-ic", 1},
136 {"brcm,bcm2836-armctrl-ic", 1},
143 bus_space_read_4((_sc)->intc_bst, (_sc)->intc_bsh, (reg))
145 bus_space_write_4((_sc)->intc_bst, (_sc)->intc_bsh, (reg), (val))
151 intc_write_4(sc, bii->bii_disable_reg, bii->bii_mask); in bcm_intc_isrc_mask()
158 intc_write_4(sc, bii->bii_enable_reg, bii->bii_mask); in bcm_intc_isrc_unmask()
168 return (-1); in bcm2835_intc_active_intr()
170 return (ffs(pending) - 1); in bcm2835_intc_active_intr()
201 return (BANK1_START + ffs(pending_gpu) - 1); in bcm2835_intc_active_intr()
207 return (BANK2_START + ffs(pending_gpu) - 1); in bcm2835_intc_active_intr()
209 return (-1); /* It shouldn't end here, but it's hardware. */ in bcm2835_intc_active_intr()
220 if (irq == -1) in bcm2835_intc_intr()
222 if (intr_isrc_dispatch(&sc->intc_isrcs[irq].bii_isrc, in bcm2835_intc_intr()
223 curthread->td_intr_frame) != 0) { in bcm2835_intc_intr()
224 bcm_intc_isrc_mask(sc, &sc->intc_isrcs[irq]); in bcm2835_intc_intr()
225 device_printf(sc->sc_dev, "Stray irq %u disabled\n", in bcm2835_intc_intr()
231 device_printf(sc->sc_dev, "Spurious interrupt detected\n"); in bcm2835_intc_intr()
241 arm_irq_memory_barrier(bii->bii_irq); in bcm_intc_enable_intr()
262 if (data->type != INTR_MAP_DATA_FDT) in bcm_intc_map_intr()
266 if (daf->ncells == 1) in bcm_intc_map_intr()
267 irq = daf->cells[0]; in bcm_intc_map_intr()
268 else if (daf->ncells == 2) { in bcm_intc_map_intr()
270 switch (daf->cells[0]) { in bcm_intc_map_intr()
272 irq = daf->cells[1]; in bcm_intc_map_intr()
277 irq = daf->cells[1] + BANK1_START; in bcm_intc_map_intr()
282 irq = daf->cells[1] + BANK2_START; in bcm_intc_map_intr()
294 daf->cells[0], daf->cells[1]); in bcm_intc_map_intr()
305 *isrcp = &sc->intc_isrcs[irq].bii_isrc; in bcm_intc_map_intr()
336 name = device_get_nameunit(sc->sc_dev); in bcm_intc_pic_register()
338 bii = &sc->intc_isrcs[irq]; in bcm_intc_pic_register()
339 bii->bii_irq = irq; in bcm_intc_pic_register()
341 bii->bii_disable_reg = INTC_DISABLE_BASIC; in bcm_intc_pic_register()
342 bii->bii_enable_reg = INTC_ENABLE_BASIC; in bcm_intc_pic_register()
343 bii->bii_mask = 1 << irq; in bcm_intc_pic_register()
345 bii->bii_disable_reg = INTC_DISABLE_BANK1; in bcm_intc_pic_register()
346 bii->bii_enable_reg = INTC_ENABLE_BANK1; in bcm_intc_pic_register()
347 bii->bii_mask = 1 << IRQ_BANK1(irq); in bcm_intc_pic_register()
349 bii->bii_disable_reg = INTC_DISABLE_BANK2; in bcm_intc_pic_register()
350 bii->bii_enable_reg = INTC_ENABLE_BANK2; in bcm_intc_pic_register()
351 bii->bii_mask = 1 << IRQ_BANK2(irq); in bcm_intc_pic_register()
355 error = intr_isrc_register(&bii->bii_isrc, sc->sc_dev, 0, in bcm_intc_pic_register()
360 if (intr_pic_register(sc->sc_dev, xref) == NULL) in bcm_intc_pic_register()
373 if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) in bcm_intc_probe()
386 sc->sc_dev = dev; in bcm_intc_attach()
391 sc->intc_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE); in bcm_intc_attach()
392 if (sc->intc_res == NULL) { in bcm_intc_attach()
399 bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->intc_res); in bcm_intc_attach()
405 sc->intc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, in bcm_intc_attach()
407 if (sc->intc_irq_res == NULL) { in bcm_intc_attach()
415 if (bus_setup_intr(dev, sc->intc_irq_res, INTR_TYPE_CLK, in bcm_intc_attach()
416 bcm2835_intc_intr, NULL, sc, &sc->intc_irq_hdl)) { in bcm_intc_attach()
422 sc->intc_bst = rman_get_bustag(sc->intc_res); in bcm_intc_attach()
423 sc->intc_bsh = rman_get_bushandle(sc->intc_res); in bcm_intc_attach()
444 "intc",
449 EARLY_DRIVER_MODULE(intc, simplebus, bcm_intc_driver, 0, 0,