Lines Matching refs:gc
39 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_mask_disable_reg() local
43 irq_gc_lock(gc); in irq_gc_mask_disable_reg()
44 irq_reg_writel(gc, mask, ct->regs.disable); in irq_gc_mask_disable_reg()
46 irq_gc_unlock(gc); in irq_gc_mask_disable_reg()
59 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_mask_set_bit() local
63 irq_gc_lock(gc); in irq_gc_mask_set_bit()
65 irq_reg_writel(gc, *ct->mask_cache, ct->regs.mask); in irq_gc_mask_set_bit()
66 irq_gc_unlock(gc); in irq_gc_mask_set_bit()
79 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_mask_clr_bit() local
83 irq_gc_lock(gc); in irq_gc_mask_clr_bit()
85 irq_reg_writel(gc, *ct->mask_cache, ct->regs.mask); in irq_gc_mask_clr_bit()
86 irq_gc_unlock(gc); in irq_gc_mask_clr_bit()
99 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_unmask_enable_reg() local
103 irq_gc_lock(gc); in irq_gc_unmask_enable_reg()
104 irq_reg_writel(gc, mask, ct->regs.enable); in irq_gc_unmask_enable_reg()
106 irq_gc_unlock(gc); in irq_gc_unmask_enable_reg()
116 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_ack_set_bit() local
120 irq_gc_lock(gc); in irq_gc_ack_set_bit()
121 irq_reg_writel(gc, mask, ct->regs.ack); in irq_gc_ack_set_bit()
122 irq_gc_unlock(gc); in irq_gc_ack_set_bit()
132 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_ack_clr_bit() local
136 irq_gc_lock(gc); in irq_gc_ack_clr_bit()
137 irq_reg_writel(gc, mask, ct->regs.ack); in irq_gc_ack_clr_bit()
138 irq_gc_unlock(gc); in irq_gc_ack_clr_bit()
155 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_mask_disable_and_ack_set() local
159 irq_gc_lock(gc); in irq_gc_mask_disable_and_ack_set()
160 irq_reg_writel(gc, mask, ct->regs.disable); in irq_gc_mask_disable_and_ack_set()
162 irq_reg_writel(gc, mask, ct->regs.ack); in irq_gc_mask_disable_and_ack_set()
163 irq_gc_unlock(gc); in irq_gc_mask_disable_and_ack_set()
173 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_eoi() local
177 irq_gc_lock(gc); in irq_gc_eoi()
178 irq_reg_writel(gc, mask, ct->regs.eoi); in irq_gc_eoi()
179 irq_gc_unlock(gc); in irq_gc_eoi()
193 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_gc_set_wake() local
196 if (!(mask & gc->wake_enabled)) in irq_gc_set_wake()
199 irq_gc_lock(gc); in irq_gc_set_wake()
201 gc->wake_active |= mask; in irq_gc_set_wake()
203 gc->wake_active &= ~mask; in irq_gc_set_wake()
204 irq_gc_unlock(gc); in irq_gc_set_wake()
219 void irq_init_generic_chip(struct irq_chip_generic *gc, const char *name, in irq_init_generic_chip() argument
223 struct irq_chip_type *ct = gc->chip_types; in irq_init_generic_chip()
226 raw_spin_lock_init(&gc->lock); in irq_init_generic_chip()
227 gc->num_ct = num_ct; in irq_init_generic_chip()
228 gc->irq_base = irq_base; in irq_init_generic_chip()
229 gc->reg_base = reg_base; in irq_init_generic_chip()
232 gc->chip_types->handler = handler; in irq_init_generic_chip()
250 struct irq_chip_generic *gc; in irq_alloc_generic_chip() local
252 gc = kzalloc(struct_size(gc, chip_types, num_ct), GFP_KERNEL); in irq_alloc_generic_chip()
253 if (gc) { in irq_alloc_generic_chip()
254 irq_init_generic_chip(gc, name, num_ct, irq_base, reg_base, in irq_alloc_generic_chip()
257 return gc; in irq_alloc_generic_chip()
262 irq_gc_init_mask_cache(struct irq_chip_generic *gc, enum irq_gc_flags flags) in irq_gc_init_mask_cache() argument
264 struct irq_chip_type *ct = gc->chip_types; in irq_gc_init_mask_cache()
265 u32 *mskptr = &gc->mask_cache, mskreg = ct->regs.mask; in irq_gc_init_mask_cache()
268 for (i = 0; i < gc->num_ct; i++) { in irq_gc_init_mask_cache()
275 *mskptr = irq_reg_readl(gc, mskreg); in irq_gc_init_mask_cache()
290 struct irq_chip_generic *gc; in irq_domain_alloc_generic_chips() local
299 if (d->gc) in irq_domain_alloc_generic_chips()
307 gc_sz = struct_size(gc, chip_types, info->num_ct); in irq_domain_alloc_generic_chips()
308 dgc_sz = struct_size(dgc, gc, numchips); in irq_domain_alloc_generic_chips()
320 d->gc = dgc; in irq_domain_alloc_generic_chips()
326 dgc->gc[i] = gc = tmp; in irq_domain_alloc_generic_chips()
327 irq_init_generic_chip(gc, info->name, info->num_ct, in irq_domain_alloc_generic_chips()
331 gc->domain = d; in irq_domain_alloc_generic_chips()
333 gc->reg_readl = &irq_readl_be; in irq_domain_alloc_generic_chips()
334 gc->reg_writel = &irq_writel_be; in irq_domain_alloc_generic_chips()
338 ret = info->init(gc); in irq_domain_alloc_generic_chips()
344 list_add_tail(&gc->list, &gc_list); in irq_domain_alloc_generic_chips()
354 dgc->exit(dgc->gc[i]); in irq_domain_alloc_generic_chips()
355 irq_remove_generic_chip(dgc->gc[i], ~0U, 0, 0); in irq_domain_alloc_generic_chips()
357 d->gc = NULL; in irq_domain_alloc_generic_chips()
369 struct irq_domain_chip_generic *dgc = d->gc; in irq_domain_remove_generic_chips()
377 dgc->exit(dgc->gc[i]); in irq_domain_remove_generic_chips()
378 irq_remove_generic_chip(dgc->gc[i], ~0U, 0, 0); in irq_domain_remove_generic_chips()
380 d->gc = NULL; in irq_domain_remove_generic_chips()
419 struct irq_domain_chip_generic *dgc = d->gc; in __irq_get_domain_generic_chip()
427 return dgc->gc[idx]; in __irq_get_domain_generic_chip()
438 struct irq_chip_generic *gc = __irq_get_domain_generic_chip(d, hw_irq); in irq_get_domain_generic_chip() local
440 return !IS_ERR(gc) ? gc : NULL; in irq_get_domain_generic_chip()
458 struct irq_domain_chip_generic *dgc = d->gc; in irq_map_generic_chip()
459 struct irq_chip_generic *gc; in irq_map_generic_chip() local
465 gc = __irq_get_domain_generic_chip(d, hw_irq); in irq_map_generic_chip()
466 if (IS_ERR(gc)) in irq_map_generic_chip()
467 return PTR_ERR(gc); in irq_map_generic_chip()
471 if (test_bit(idx, &gc->unused)) in irq_map_generic_chip()
474 if (test_bit(idx, &gc->installed)) in irq_map_generic_chip()
477 ct = gc->chip_types; in irq_map_generic_chip()
481 if (!gc->installed) { in irq_map_generic_chip()
482 raw_spin_lock_irqsave(&gc->lock, flags); in irq_map_generic_chip()
483 irq_gc_init_mask_cache(gc, dgc->gc_flags); in irq_map_generic_chip()
484 raw_spin_unlock_irqrestore(&gc->lock, flags); in irq_map_generic_chip()
488 set_bit(idx, &gc->installed); in irq_map_generic_chip()
499 irq_domain_set_info(d, virq, hw_irq, chip, gc, ct->handler, NULL, NULL); in irq_map_generic_chip()
507 struct irq_domain_chip_generic *dgc = d->gc; in irq_unmap_generic_chip()
509 struct irq_chip_generic *gc; in irq_unmap_generic_chip() local
512 gc = irq_get_domain_generic_chip(d, hw_irq); in irq_unmap_generic_chip()
513 if (!gc) in irq_unmap_generic_chip()
518 clear_bit(irq_idx, &gc->installed); in irq_unmap_generic_chip()
543 void irq_setup_generic_chip(struct irq_chip_generic *gc, u32 msk, in irq_setup_generic_chip() argument
547 struct irq_chip_type *ct = gc->chip_types; in irq_setup_generic_chip()
552 list_add_tail(&gc->list, &gc_list); in irq_setup_generic_chip()
555 irq_gc_init_mask_cache(gc, flags); in irq_setup_generic_chip()
557 for (i = gc->irq_base; msk; msk >>= 1, i++) { in irq_setup_generic_chip()
571 d->mask = 1 << (i - gc->irq_base); in irq_setup_generic_chip()
574 irq_set_chip_data(i, gc); in irq_setup_generic_chip()
577 gc->irq_cnt = i - gc->irq_base; in irq_setup_generic_chip()
590 struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); in irq_setup_alt_chip() local
591 struct irq_chip_type *ct = gc->chip_types; in irq_setup_alt_chip()
594 for (i = 0; i < gc->num_ct; i++, ct++) { in irq_setup_alt_chip()
614 void irq_remove_generic_chip(struct irq_chip_generic *gc, u32 msk, in irq_remove_generic_chip() argument
620 list_del(&gc->list); in irq_remove_generic_chip()
632 if (gc->domain) { in irq_remove_generic_chip()
633 virq = irq_find_mapping(gc->domain, gc->irq_base + i); in irq_remove_generic_chip()
637 virq = gc->irq_base + i; in irq_remove_generic_chip()
649 static struct irq_data *irq_gc_get_irq_data(struct irq_chip_generic *gc) in irq_gc_get_irq_data() argument
653 if (!gc->domain) in irq_gc_get_irq_data()
654 return irq_get_irq_data(gc->irq_base); in irq_gc_get_irq_data()
660 if (!gc->installed) in irq_gc_get_irq_data()
663 virq = irq_find_mapping(gc->domain, gc->irq_base + __ffs(gc->installed)); in irq_gc_get_irq_data()
670 struct irq_chip_generic *gc; in irq_gc_suspend() local
672 list_for_each_entry(gc, &gc_list, list) { in irq_gc_suspend()
673 struct irq_chip_type *ct = gc->chip_types; in irq_gc_suspend()
676 struct irq_data *data = irq_gc_get_irq_data(gc); in irq_gc_suspend()
682 if (gc->suspend) in irq_gc_suspend()
683 gc->suspend(gc); in irq_gc_suspend()
690 struct irq_chip_generic *gc; in irq_gc_resume() local
692 list_for_each_entry(gc, &gc_list, list) { in irq_gc_resume()
693 struct irq_chip_type *ct = gc->chip_types; in irq_gc_resume()
695 if (gc->resume) in irq_gc_resume()
696 gc->resume(gc); in irq_gc_resume()
699 struct irq_data *data = irq_gc_get_irq_data(gc); in irq_gc_resume()
713 struct irq_chip_generic *gc; in irq_gc_shutdown() local
715 list_for_each_entry(gc, &gc_list, list) { in irq_gc_shutdown()
716 struct irq_chip_type *ct = gc->chip_types; in irq_gc_shutdown()
719 struct irq_data *data = irq_gc_get_irq_data(gc); in irq_gc_shutdown()