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