Lines Matching full:ni
3 // NI-700 Network-on-Chip PMU driver
225 struct arm_ni *ni = cd_to_ni(pmu_to_cd(dev_get_drvdata(dev))); in arm_ni_cpumask_show() local
227 return cpumap_print_to_pagebuf(true, buf, cpumask_of(ni->cpu)); in arm_ni_cpumask_show()
236 struct arm_ni *ni = cd_to_ni(pmu_to_cd(dev_get_drvdata(dev))); in arm_ni_identifier_show() local
237 u32 reg = readl_relaxed(ni->base + NI_PERIPHERAL_ID2); in arm_ni_identifier_show()
240 return sysfs_emit(buf, "%03x%02x\n", ni->part, version); in arm_ni_identifier_show()
479 static int arm_ni_init_cd(struct arm_ni *ni, struct arm_ni_node *node, u64 res_start) in arm_ni_init_cd() argument
481 struct arm_ni_cd *cd = ni->cds + node->id; in arm_ni_init_cd()
486 cd->units = devm_kcalloc(ni->dev, cd->num_units, sizeof(*(cd->units)), GFP_KERNEL); in arm_ni_init_cd()
492 void __iomem *unit_base = ni->base + reg; in arm_ni_init_cd()
503 dev_info(ni->dev, "No access to PMU %d\n", cd->id); in arm_ni_init_cd()
504 devm_kfree(ni->dev, cd->units); in arm_ni_init_cd()
518 dev_info(ni->dev, "No access to node 0x%04x%04x\n", unit->id, unit->type); in arm_ni_init_cd()
527 dev_dbg(ni->dev, "Mystery node 0x%04x%04x\n", unit->id, unit->type); in arm_ni_init_cd()
532 res_start += cd->pmu_base - ni->base; in arm_ni_init_cd()
533 if (!devm_request_mem_region(ni->dev, res_start, SZ_4K, dev_name(ni->dev))) { in arm_ni_init_cd()
534 dev_err(ni->dev, "Failed to request PMU region 0x%llx\n", res_start); in arm_ni_init_cd()
543 cd->irq = platform_get_irq(to_platform_device(ni->dev), cd->id); in arm_ni_init_cd()
549 .parent = ni->dev, in arm_ni_init_cd()
563 name = devm_kasprintf(ni->dev, GFP_KERNEL, "arm_ni_%d_cd_%d", ni->id, cd->id); in arm_ni_init_cd()
572 struct arm_ni *ni = platform_get_drvdata(pdev); in arm_ni_remove() local
574 ni_for_each_cd(ni, cd) { in arm_ni_remove()
579 cpuhp_state_remove_instance_nocalls(arm_ni_hp_state, &ni->cpuhp_node); in arm_ni_remove()
592 static int arm_ni_init_irqs(struct arm_ni *ni) in arm_ni_init_irqs() argument
596 ni_for_each_cd(ni, cd) { in arm_ni_init_irqs()
597 for (struct arm_ni_cd *prev = cd; prev-- > ni->cds; ) { in arm_ni_init_irqs()
603 err = devm_request_irq(ni->dev, cd->irq, arm_ni_handle_irq, in arm_ni_init_irqs()
605 dev_name(ni->dev), cd); in arm_ni_init_irqs()
609 irq_set_affinity(cd->irq, cpumask_of(ni->cpu)); in arm_ni_init_irqs()
614 ni_for_each_cd(ni, cd) in arm_ni_init_irqs()
623 struct arm_ni *ni; in arm_ni_probe() local
669 ni = devm_kzalloc(&pdev->dev, struct_size(ni, cds, num_cds), GFP_KERNEL); in arm_ni_probe()
670 if (!ni) in arm_ni_probe()
673 ni->dev = &pdev->dev; in arm_ni_probe()
674 ni->base = base; in arm_ni_probe()
675 ni->num_cds = num_cds; in arm_ni_probe()
676 ni->part = part; in arm_ni_probe()
677 ni->id = atomic_fetch_inc(&id); in arm_ni_probe()
678 ni->cpu = cpumask_local_spread(0, dev_to_node(ni->dev)); in arm_ni_probe()
679 platform_set_drvdata(pdev, ni); in arm_ni_probe()
681 ret = cpuhp_state_add_instance_nocalls(arm_ni_hp_state, &ni->cpuhp_node); in arm_ni_probe()
694 ret = arm_ni_init_cd(ni, &cd, res->start); in arm_ni_probe()
696 ni->cds[cd.id].pmu_base = NULL; in arm_ni_probe()
704 ret = arm_ni_init_irqs(ni); in arm_ni_probe()
713 { .compatible = "arm,ni-700" },
729 .name = "arm-ni",
738 static void arm_ni_pmu_migrate(struct arm_ni *ni, unsigned int cpu) in arm_ni_pmu_migrate() argument
740 ni_for_each_cd(ni, cd) { in arm_ni_pmu_migrate()
741 perf_pmu_migrate_context(&cd->pmu, ni->cpu, cpu); in arm_ni_pmu_migrate()
744 ni->cpu = cpu; in arm_ni_pmu_migrate()
749 struct arm_ni *ni; in arm_ni_pmu_online_cpu() local
752 ni = hlist_entry_safe(cpuhp_node, struct arm_ni, cpuhp_node); in arm_ni_pmu_online_cpu()
753 node = dev_to_node(ni->dev); in arm_ni_pmu_online_cpu()
754 if (cpu_to_node(ni->cpu) != node && cpu_to_node(cpu) == node) in arm_ni_pmu_online_cpu()
755 arm_ni_pmu_migrate(ni, cpu); in arm_ni_pmu_online_cpu()
761 struct arm_ni *ni; in arm_ni_pmu_offline_cpu() local
765 ni = hlist_entry_safe(cpuhp_node, struct arm_ni, cpuhp_node); in arm_ni_pmu_offline_cpu()
766 if (cpu != ni->cpu) in arm_ni_pmu_offline_cpu()
769 node = dev_to_node(ni->dev); in arm_ni_pmu_offline_cpu()
775 arm_ni_pmu_migrate(ni, target); in arm_ni_pmu_offline_cpu()
784 "perf/arm/ni:online", in arm_ni_init()
808 MODULE_DESCRIPTION("Arm NI-700 PMU driver");