Lines Matching full:global
63 return imsic ? &imsic->global : NULL; in imsic_get_global_config()
136 for_each_set_bit(i, lpriv->dirty_bitmap, imsic->global.nr_ids + 1) { in __imsic_local_sync()
186 tlocal = per_cpu_ptr(imsic->global.local, tvec->cpu); in __imsic_local_sync()
190 mlocal = per_cpu_ptr(imsic->global.local, mvec->cpu); in __imsic_local_sync()
195 mlocal = per_cpu_ptr(imsic->global.local, mvec->cpu); in __imsic_local_sync()
234 bitmap_fill(lpriv->dirty_bitmap, imsic->global.nr_ids + 1); in imsic_local_sync_all()
441 if (!lpriv || imsic->global.nr_ids < local_id) in imsic_vector_from_local_id()
498 struct imsic_global_config *global = &imsic->global; in imsic_local_init() local
515 lpriv->dirty_bitmap = bitmap_zalloc(global->nr_ids + 1, GFP_KERNEL); in imsic_local_init()
525 lpriv->vectors = kcalloc(global->nr_ids + 1, sizeof(*lpriv->vectors), in imsic_local_init()
531 for (i = 0; i <= global->nr_ids; i++) { in imsic_local_init()
574 struct imsic_global_config *global = &imsic->global; in imsic_matrix_init() local
577 imsic->matrix = irq_alloc_matrix(global->nr_ids + 1, in imsic_matrix_init()
578 0, global->nr_ids + 1); in imsic_matrix_init()
592 struct imsic_global_config *global, in imsic_populate_global_dt() argument
599 &global->guest_index_bits); in imsic_populate_global_dt()
601 global->guest_index_bits = 0; in imsic_populate_global_dt()
605 &global->hart_index_bits); in imsic_populate_global_dt()
608 global->hart_index_bits = __fls(*nr_parent_irqs); in imsic_populate_global_dt()
609 if (BIT(global->hart_index_bits) < *nr_parent_irqs) in imsic_populate_global_dt()
610 global->hart_index_bits++; in imsic_populate_global_dt()
615 &global->group_index_bits); in imsic_populate_global_dt()
617 global->group_index_bits = 0; in imsic_populate_global_dt()
624 &global->group_index_shift); in imsic_populate_global_dt()
626 global->group_index_shift = IMSIC_MMIO_PAGE_SHIFT * 2; in imsic_populate_global_dt()
630 &global->nr_ids); in imsic_populate_global_dt()
638 &global->nr_guest_ids); in imsic_populate_global_dt()
640 global->nr_guest_ids = global->nr_ids; in imsic_populate_global_dt()
646 struct imsic_global_config *global, in imsic_populate_global_acpi() argument
651 global->guest_index_bits = imsic->guest_index_bits; in imsic_populate_global_acpi()
652 global->hart_index_bits = imsic->hart_index_bits; in imsic_populate_global_acpi()
653 global->group_index_bits = imsic->group_index_bits; in imsic_populate_global_acpi()
654 global->group_index_shift = imsic->group_index_shift; in imsic_populate_global_acpi()
655 global->nr_ids = imsic->num_ids; in imsic_populate_global_acpi()
656 global->nr_guest_ids = imsic->num_guest_ids; in imsic_populate_global_acpi()
700 struct imsic_global_config *global, in imsic_parse_fwnode() argument
722 rc = imsic_populate_global_dt(fwnode, global, nr_parent_irqs); in imsic_parse_fwnode()
724 rc = imsic_populate_global_acpi(fwnode, global, nr_parent_irqs, opaque); in imsic_parse_fwnode()
731 if (i < global->guest_index_bits) { in imsic_parse_fwnode()
737 i = BITS_PER_LONG - IMSIC_MMIO_PAGE_SHIFT - global->guest_index_bits; in imsic_parse_fwnode()
738 if (i < global->hart_index_bits) { in imsic_parse_fwnode()
745 global->guest_index_bits - global->hart_index_bits; in imsic_parse_fwnode()
746 if (i < global->group_index_bits) { in imsic_parse_fwnode()
752 i = global->group_index_bits + global->group_index_shift - 1; in imsic_parse_fwnode()
759 if (global->nr_ids < IMSIC_MIN_ID || in imsic_parse_fwnode()
760 global->nr_ids >= IMSIC_MAX_ID || in imsic_parse_fwnode()
761 (global->nr_ids & IMSIC_MIN_ID) != IMSIC_MIN_ID) { in imsic_parse_fwnode()
767 if (global->nr_guest_ids < IMSIC_MIN_ID || in imsic_parse_fwnode()
768 global->nr_guest_ids >= IMSIC_MAX_ID || in imsic_parse_fwnode()
769 (global->nr_guest_ids & IMSIC_MIN_ID) != IMSIC_MIN_ID) { in imsic_parse_fwnode()
780 global->base_addr = res.start; in imsic_parse_fwnode()
781 global->base_addr &= ~(BIT(global->guest_index_bits + in imsic_parse_fwnode()
782 global->hart_index_bits + in imsic_parse_fwnode()
784 global->base_addr &= ~((BIT(global->group_index_bits) - 1) << in imsic_parse_fwnode()
785 global->group_index_shift); in imsic_parse_fwnode()
797 struct imsic_global_config *global; in imsic_setup_state() local
826 global = &imsic->global; in imsic_setup_state()
828 global->local = alloc_percpu(typeof(*global->local)); in imsic_setup_state()
829 if (!global->local) { in imsic_setup_state()
835 rc = imsic_parse_fwnode(fwnode, global, &nr_parent_irqs, &nr_mmios, opaque); in imsic_setup_state()
862 base_addr &= ~(BIT(global->guest_index_bits + in imsic_setup_state()
863 global->hart_index_bits + in imsic_setup_state()
865 base_addr &= ~((BIT(global->group_index_bits) - 1) << in imsic_setup_state()
866 global->group_index_shift); in imsic_setup_state()
867 if (base_addr != global->base_addr) { in imsic_setup_state()
905 reloff = i * BIT(global->guest_index_bits) * in imsic_setup_state()
915 * BIT(global->guest_index_bits) * IMSIC_MMIO_PAGE_SZ in imsic_setup_state()
919 BIT(global->guest_index_bits) * IMSIC_MMIO_PAGE_SZ); in imsic_setup_state()
926 local = per_cpu_ptr(global->local, cpu); in imsic_setup_state()
963 free_percpu(imsic->global.local); in imsic_setup_state()