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()
593 struct imsic_global_config *global, in imsic_populate_global_dt() argument
600 &global->guest_index_bits); in imsic_populate_global_dt()
602 global->guest_index_bits = 0; in imsic_populate_global_dt()
606 &global->hart_index_bits); in imsic_populate_global_dt()
609 global->hart_index_bits = __fls(*nr_parent_irqs); in imsic_populate_global_dt()
610 if (BIT(global->hart_index_bits) < *nr_parent_irqs) in imsic_populate_global_dt()
611 global->hart_index_bits++; in imsic_populate_global_dt()
616 &global->group_index_bits); in imsic_populate_global_dt()
618 global->group_index_bits = 0; in imsic_populate_global_dt()
625 &global->group_index_shift); in imsic_populate_global_dt()
627 global->group_index_shift = IMSIC_MMIO_PAGE_SHIFT * 2; in imsic_populate_global_dt()
631 &global->nr_ids); in imsic_populate_global_dt()
639 &global->nr_guest_ids); in imsic_populate_global_dt()
641 global->nr_guest_ids = global->nr_ids; in imsic_populate_global_dt()
647 struct imsic_global_config *global, in imsic_populate_global_acpi() argument
652 global->guest_index_bits = imsic->guest_index_bits; in imsic_populate_global_acpi()
653 global->hart_index_bits = imsic->hart_index_bits; in imsic_populate_global_acpi()
654 global->group_index_bits = imsic->group_index_bits; in imsic_populate_global_acpi()
655 global->group_index_shift = imsic->group_index_shift; in imsic_populate_global_acpi()
656 global->nr_ids = imsic->num_ids; in imsic_populate_global_acpi()
657 global->nr_guest_ids = imsic->num_guest_ids; in imsic_populate_global_acpi()
701 struct imsic_global_config *global, in imsic_parse_fwnode() argument
723 rc = imsic_populate_global_dt(fwnode, global, nr_parent_irqs); in imsic_parse_fwnode()
725 rc = imsic_populate_global_acpi(fwnode, global, nr_parent_irqs, opaque); in imsic_parse_fwnode()
732 if (i < global->guest_index_bits) { in imsic_parse_fwnode()
738 i = BITS_PER_LONG - IMSIC_MMIO_PAGE_SHIFT - global->guest_index_bits; in imsic_parse_fwnode()
739 if (i < global->hart_index_bits) { in imsic_parse_fwnode()
746 global->guest_index_bits - global->hart_index_bits; in imsic_parse_fwnode()
747 if (i < global->group_index_bits) { in imsic_parse_fwnode()
753 i = global->group_index_bits + global->group_index_shift - 1; in imsic_parse_fwnode()
760 if (global->nr_ids < IMSIC_MIN_ID || in imsic_parse_fwnode()
761 global->nr_ids >= IMSIC_MAX_ID || in imsic_parse_fwnode()
762 (global->nr_ids & IMSIC_MIN_ID) != IMSIC_MIN_ID) { in imsic_parse_fwnode()
768 if (global->nr_guest_ids < IMSIC_MIN_ID || in imsic_parse_fwnode()
769 global->nr_guest_ids >= IMSIC_MAX_ID || in imsic_parse_fwnode()
770 (global->nr_guest_ids & IMSIC_MIN_ID) != IMSIC_MIN_ID) { in imsic_parse_fwnode()
781 global->base_addr = res.start; in imsic_parse_fwnode()
782 global->base_addr &= ~(BIT(global->guest_index_bits + in imsic_parse_fwnode()
783 global->hart_index_bits + in imsic_parse_fwnode()
785 global->base_addr &= ~((BIT(global->group_index_bits) - 1) << in imsic_parse_fwnode()
786 global->group_index_shift); in imsic_parse_fwnode()
798 struct imsic_global_config *global; in imsic_setup_state() local
827 global = &imsic->global; in imsic_setup_state()
829 global->local = alloc_percpu(typeof(*global->local)); in imsic_setup_state()
830 if (!global->local) { in imsic_setup_state()
836 rc = imsic_parse_fwnode(fwnode, global, &nr_parent_irqs, &nr_mmios, opaque); in imsic_setup_state()
863 base_addr &= ~(BIT(global->guest_index_bits + in imsic_setup_state()
864 global->hart_index_bits + in imsic_setup_state()
866 base_addr &= ~((BIT(global->group_index_bits) - 1) << in imsic_setup_state()
867 global->group_index_shift); in imsic_setup_state()
868 if (base_addr != global->base_addr) { in imsic_setup_state()
906 reloff = i * BIT(global->guest_index_bits) * in imsic_setup_state()
916 * BIT(global->guest_index_bits) * IMSIC_MMIO_PAGE_SZ in imsic_setup_state()
920 BIT(global->guest_index_bits) * IMSIC_MMIO_PAGE_SZ); in imsic_setup_state()
927 local = per_cpu_ptr(global->local, cpu); in imsic_setup_state()
964 free_percpu(imsic->global.local); in imsic_setup_state()