Lines Matching refs:handler
104 static void plic_toggle(struct plic_handler *handler, int hwirq, int enable) in plic_toggle() argument
106 raw_spin_lock(&handler->enable_lock); in plic_toggle()
107 __plic_toggle(handler->enable_base, hwirq, enable); in plic_toggle()
108 raw_spin_unlock(&handler->enable_lock); in plic_toggle()
117 struct plic_handler *handler = per_cpu_ptr(&plic_handlers, cpu); in plic_irq_toggle() local
119 plic_toggle(handler, d->hwirq, enable); in plic_irq_toggle()
150 struct plic_handler *handler = this_cpu_ptr(&plic_handlers); in plic_irq_eoi() local
153 plic_toggle(handler, d->hwirq, 1); in plic_irq_eoi()
154 writel(d->hwirq, handler->hart_base + CONTEXT_CLAIM); in plic_irq_eoi()
155 plic_toggle(handler, d->hwirq, 0); in plic_irq_eoi()
157 writel(d->hwirq, handler->hart_base + CONTEXT_CLAIM); in plic_irq_eoi()
258 struct plic_handler *handler = per_cpu_ptr(&plic_handlers, cpu); in plic_irq_suspend() local
260 if (!handler->present) in plic_irq_suspend()
263 raw_spin_lock(&handler->enable_lock); in plic_irq_suspend()
265 reg = handler->enable_base + i * sizeof(u32); in plic_irq_suspend()
266 handler->enable_save[i] = readl(reg); in plic_irq_suspend()
268 raw_spin_unlock(&handler->enable_lock); in plic_irq_suspend()
289 struct plic_handler *handler = per_cpu_ptr(&plic_handlers, cpu); in plic_irq_resume() local
291 if (!handler->present) in plic_irq_resume()
294 raw_spin_lock(&handler->enable_lock); in plic_irq_resume()
296 reg = handler->enable_base + i * sizeof(u32); in plic_irq_resume()
297 writel(handler->enable_save[i], reg); in plic_irq_resume()
299 raw_spin_unlock(&handler->enable_lock); in plic_irq_resume()
368 struct plic_handler *handler = this_cpu_ptr(&plic_handlers); in plic_handle_irq() local
370 void __iomem *claim = handler->hart_base + CONTEXT_CLAIM; in plic_handle_irq()
373 WARN_ON_ONCE(!handler->present); in plic_handle_irq()
378 int err = generic_handle_domain_irq(handler->priv->irqdomain, in plic_handle_irq()
388 static void plic_set_threshold(struct plic_handler *handler, u32 threshold) in plic_set_threshold() argument
391 writel(threshold, handler->hart_base + CONTEXT_THRESHOLD); in plic_set_threshold()
404 struct plic_handler *handler = this_cpu_ptr(&plic_handlers); in plic_starting_cpu() local
411 plic_set_threshold(handler, PLIC_ENABLE_THRESHOLD); in plic_starting_cpu()
423 struct plic_handler *handler; in __plic_init() local
512 handler = per_cpu_ptr(&plic_handlers, cpu); in __plic_init()
513 if (handler->present) { in __plic_init()
515 plic_set_threshold(handler, PLIC_DISABLE_THRESHOLD); in __plic_init()
520 handler->present = true; in __plic_init()
521 handler->hart_base = priv->regs + CONTEXT_BASE + in __plic_init()
523 raw_spin_lock_init(&handler->enable_lock); in __plic_init()
524 handler->enable_base = priv->regs + CONTEXT_ENABLE_BASE + in __plic_init()
526 handler->priv = priv; in __plic_init()
528 handler->enable_save = kcalloc(DIV_ROUND_UP(nr_irqs, 32), in __plic_init()
529 sizeof(*handler->enable_save), GFP_KERNEL); in __plic_init()
530 if (!handler->enable_save) in __plic_init()
534 plic_toggle(handler, hwirq, 0); in __plic_init()
546 handler = this_cpu_ptr(&plic_handlers); in __plic_init()
547 if (handler->present && !plic_cpuhp_setup_done) { in __plic_init()
561 handler = per_cpu_ptr(&plic_handlers, cpu); in __plic_init()
562 kfree(handler->enable_save); in __plic_init()