Lines Matching +full:jh8100 +full:- +full:intc

1 // SPDX-License-Identifier: GPL-2.0
3 * StarFive JH8100 External Interrupt Controller driver
10 #define pr_fmt(fmt) "irq-starfive-jh8100: " fmt
40 value = ioread32(irqc->base + reg); in starfive_intc_bit_set()
42 iowrite32(value, irqc->base + reg); in starfive_intc_bit_set()
50 value = ioread32(irqc->base + reg); in starfive_intc_bit_clear()
52 iowrite32(value, irqc->base + reg); in starfive_intc_bit_clear()
59 raw_spin_lock(&irqc->lock); in starfive_intc_unmask()
60 starfive_intc_bit_clear(irqc, STARFIVE_INTC_SRC0_MASK, BIT(d->hwirq)); in starfive_intc_unmask()
61 raw_spin_unlock(&irqc->lock); in starfive_intc_unmask()
68 raw_spin_lock(&irqc->lock); in starfive_intc_mask()
69 starfive_intc_bit_set(irqc, STARFIVE_INTC_SRC0_MASK, BIT(d->hwirq)); in starfive_intc_mask()
70 raw_spin_unlock(&irqc->lock); in starfive_intc_mask()
74 .name = "StarFive JH8100 INTC",
82 irq_domain_set_info(d, irq, hwirq, &intc_dev, d->host_data, in starfive_intc_map()
95 struct starfive_irq_chip *irqc = irq_data_get_irq_handler_data(&desc->irq_data); in starfive_intc_irq_handler()
102 value = ioread32(irqc->base + STARFIVE_INTC_SRC0_INT); in starfive_intc_irq_handler()
104 hwirq = ffs(value) - 1; in starfive_intc_irq_handler()
106 generic_handle_domain_irq(irqc->domain, hwirq); in starfive_intc_irq_handler()
117 static int __init starfive_intc_init(struct device_node *intc, in starfive_intc_init() argument
128 return -ENOMEM; in starfive_intc_init()
130 irqc->base = of_iomap(intc, 0); in starfive_intc_init()
131 if (!irqc->base) { in starfive_intc_init()
133 ret = -ENXIO; in starfive_intc_init()
137 rst = of_reset_control_get_exclusive(intc, NULL); in starfive_intc_init()
144 clk = of_clk_get(intc, 0); in starfive_intc_init()
159 raw_spin_lock_init(&irqc->lock); in starfive_intc_init()
161 irqc->domain = irq_domain_add_linear(intc, STARFIVE_INTC_SRC_IRQ_NUM, in starfive_intc_init()
163 if (!irqc->domain) { in starfive_intc_init()
165 ret = -EINVAL; in starfive_intc_init()
169 parent_irq = of_irq_get(intc, 0); in starfive_intc_init()
185 irq_domain_remove(irqc->domain); in starfive_intc_init()
195 iounmap(irqc->base); in starfive_intc_init()
202 IRQCHIP_MATCH("starfive,jh8100-intc", starfive_intc_init)
205 MODULE_DESCRIPTION("StarFive JH8100 External Interrupt Controller");