Lines Matching full: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()
149 struct plic_handler *handler = this_cpu_ptr(&plic_handlers); in plic_irq_eoi() local
152 plic_toggle(handler, d->hwirq, 1); in plic_irq_eoi()
153 writel(d->hwirq, handler->hart_base + CONTEXT_CLAIM); in plic_irq_eoi()
154 plic_toggle(handler, d->hwirq, 0); in plic_irq_eoi()
156 writel(d->hwirq, handler->hart_base + CONTEXT_CLAIM); in plic_irq_eoi()
257 struct plic_handler *handler = per_cpu_ptr(&plic_handlers, cpu); in plic_irq_suspend() local
259 if (!handler->present) in plic_irq_suspend()
262 raw_spin_lock(&handler->enable_lock); in plic_irq_suspend()
264 reg = handler->enable_base + i * sizeof(u32); in plic_irq_suspend()
265 handler->enable_save[i] = readl(reg); in plic_irq_suspend()
267 raw_spin_unlock(&handler->enable_lock); in plic_irq_suspend()
288 struct plic_handler *handler = per_cpu_ptr(&plic_handlers, cpu); in plic_irq_resume() local
290 if (!handler->present) in plic_irq_resume()
293 raw_spin_lock(&handler->enable_lock); in plic_irq_resume()
295 reg = handler->enable_base + i * sizeof(u32); in plic_irq_resume()
296 writel(handler->enable_save[i], reg); in plic_irq_resume()
298 raw_spin_unlock(&handler->enable_lock); in plic_irq_resume()
367 struct plic_handler *handler = this_cpu_ptr(&plic_handlers); in plic_handle_irq() local
369 void __iomem *claim = handler->hart_base + CONTEXT_CLAIM; in plic_handle_irq()
372 WARN_ON_ONCE(!handler->present); in plic_handle_irq()
377 int err = generic_handle_domain_irq(handler->priv->irqdomain, in plic_handle_irq()
387 static void plic_set_threshold(struct plic_handler *handler, u32 threshold) in plic_set_threshold() argument
390 writel(threshold, handler->hart_base + CONTEXT_THRESHOLD); in plic_set_threshold()
403 struct plic_handler *handler = this_cpu_ptr(&plic_handlers); in plic_starting_cpu() local
410 plic_set_threshold(handler, PLIC_ENABLE_THRESHOLD); in plic_starting_cpu()
422 struct plic_handler *handler; in __plic_init() local
498 /* Find parent domain and register chained handler */ in __plic_init()
507 * When running in M-mode we need to ignore the S-mode handler. in __plic_init()
511 handler = per_cpu_ptr(&plic_handlers, cpu); in __plic_init()
512 if (handler->present) { in __plic_init()
513 pr_warn("handler already present for context %d.\n", i); in __plic_init()
514 plic_set_threshold(handler, PLIC_DISABLE_THRESHOLD); in __plic_init()
519 handler->present = true; in __plic_init()
520 handler->hart_base = priv->regs + CONTEXT_BASE + in __plic_init()
522 raw_spin_lock_init(&handler->enable_lock); in __plic_init()
523 handler->enable_base = priv->regs + CONTEXT_ENABLE_BASE + in __plic_init()
525 handler->priv = priv; in __plic_init()
527 handler->enable_save = kcalloc(DIV_ROUND_UP(nr_irqs, 32), in __plic_init()
528 sizeof(*handler->enable_save), GFP_KERNEL); in __plic_init()
529 if (!handler->enable_save) in __plic_init()
533 plic_toggle(handler, hwirq, 0); in __plic_init()
542 * and register syscore operations only when context handler in __plic_init()
545 handler = this_cpu_ptr(&plic_handlers); in __plic_init()
546 if (handler->present && !plic_cpuhp_setup_done) { in __plic_init()
560 handler = per_cpu_ptr(&plic_handlers, cpu); in __plic_init()
561 kfree(handler->enable_save); in __plic_init()