spe_pmu 103 drivers/perf/arm_spe_pmu.c static u32 arm_spe_pmu_cap_get(struct arm_spe_pmu *spe_pmu, int cap) spe_pmu 106 drivers/perf/arm_spe_pmu.c return !!(spe_pmu->features & arm_spe_pmu_feat_caps[cap]); spe_pmu 110 drivers/perf/arm_spe_pmu.c return spe_pmu->counter_sz; spe_pmu 112 drivers/perf/arm_spe_pmu.c return spe_pmu->min_period; spe_pmu 124 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu = dev_get_drvdata(dev); spe_pmu 130 drivers/perf/arm_spe_pmu.c arm_spe_pmu_cap_get(spe_pmu, cap)); spe_pmu 239 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu = dev_get_drvdata(dev); spe_pmu 241 drivers/perf/arm_spe_pmu.c return cpumap_print_to_pagebuf(true, buf, &spe_pmu->supported_cpus); spe_pmu 285 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu = to_spe_pmu(event->pmu); spe_pmu 290 drivers/perf/arm_spe_pmu.c if (period < spe_pmu->min_period) spe_pmu 291 drivers/perf/arm_spe_pmu.c period = spe_pmu->min_period; spe_pmu 360 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu = to_spe_pmu(handle->event->pmu); spe_pmu 377 drivers/perf/arm_spe_pmu.c if (limit - head < spe_pmu->max_record_sz) { spe_pmu 388 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu = to_spe_pmu(handle->event->pmu); spe_pmu 409 drivers/perf/arm_spe_pmu.c if (!IS_ALIGNED(head, spe_pmu->align)) { spe_pmu 410 drivers/perf/arm_spe_pmu.c unsigned long delta = roundup(head, spe_pmu->align) - head; spe_pmu 459 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu = to_spe_pmu(handle->event->pmu); spe_pmu 467 drivers/perf/arm_spe_pmu.c if (limit && (limit - head < spe_pmu->max_record_sz)) { spe_pmu 663 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu = to_spe_pmu(event->pmu); spe_pmu 670 drivers/perf/arm_spe_pmu.c !cpumask_test_cpu(event->cpu, &spe_pmu->supported_cpus)) spe_pmu 691 drivers/perf/arm_spe_pmu.c !(spe_pmu->features & SPE_PMU_FEAT_FILT_EVT)) spe_pmu 695 drivers/perf/arm_spe_pmu.c !(spe_pmu->features & SPE_PMU_FEAT_FILT_TYP)) spe_pmu 699 drivers/perf/arm_spe_pmu.c !(spe_pmu->features & SPE_PMU_FEAT_FILT_LAT)) spe_pmu 715 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu = to_spe_pmu(event->pmu); spe_pmu 717 drivers/perf/arm_spe_pmu.c struct perf_output_handle *handle = this_cpu_ptr(spe_pmu->handle); spe_pmu 748 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu = to_spe_pmu(event->pmu); spe_pmu 750 drivers/perf/arm_spe_pmu.c struct perf_output_handle *handle = this_cpu_ptr(spe_pmu->handle); spe_pmu 790 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu = to_spe_pmu(event->pmu); spe_pmu 794 drivers/perf/arm_spe_pmu.c if (!cpumask_test_cpu(cpu, &spe_pmu->supported_cpus)) spe_pmu 877 drivers/perf/arm_spe_pmu.c static int arm_spe_pmu_perf_init(struct arm_spe_pmu *spe_pmu) spe_pmu 883 drivers/perf/arm_spe_pmu.c struct device *dev = &spe_pmu->pdev->dev; spe_pmu 885 drivers/perf/arm_spe_pmu.c spe_pmu->pmu = (struct pmu) { spe_pmu 917 drivers/perf/arm_spe_pmu.c return perf_pmu_register(&spe_pmu->pmu, name, -1); spe_pmu 920 drivers/perf/arm_spe_pmu.c static void arm_spe_pmu_perf_destroy(struct arm_spe_pmu *spe_pmu) spe_pmu 922 drivers/perf/arm_spe_pmu.c perf_pmu_unregister(&spe_pmu->pmu); spe_pmu 929 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu = info; spe_pmu 930 drivers/perf/arm_spe_pmu.c struct device *dev = &spe_pmu->pdev->dev; spe_pmu 951 drivers/perf/arm_spe_pmu.c spe_pmu->align = 1 << fld; spe_pmu 952 drivers/perf/arm_spe_pmu.c if (spe_pmu->align > SZ_2K) { spe_pmu 961 drivers/perf/arm_spe_pmu.c spe_pmu->features |= SPE_PMU_FEAT_FILT_EVT; spe_pmu 964 drivers/perf/arm_spe_pmu.c spe_pmu->features |= SPE_PMU_FEAT_FILT_TYP; spe_pmu 967 drivers/perf/arm_spe_pmu.c spe_pmu->features |= SPE_PMU_FEAT_FILT_LAT; spe_pmu 970 drivers/perf/arm_spe_pmu.c spe_pmu->features |= SPE_PMU_FEAT_ARCH_INST; spe_pmu 973 drivers/perf/arm_spe_pmu.c spe_pmu->features |= SPE_PMU_FEAT_LDS; spe_pmu 976 drivers/perf/arm_spe_pmu.c spe_pmu->features |= SPE_PMU_FEAT_ERND; spe_pmu 982 drivers/perf/arm_spe_pmu.c spe_pmu->min_period = 256; spe_pmu 985 drivers/perf/arm_spe_pmu.c spe_pmu->min_period = 512; spe_pmu 988 drivers/perf/arm_spe_pmu.c spe_pmu->min_period = 768; spe_pmu 991 drivers/perf/arm_spe_pmu.c spe_pmu->min_period = 1024; spe_pmu 994 drivers/perf/arm_spe_pmu.c spe_pmu->min_period = 1536; spe_pmu 997 drivers/perf/arm_spe_pmu.c spe_pmu->min_period = 2048; spe_pmu 1000 drivers/perf/arm_spe_pmu.c spe_pmu->min_period = 3072; spe_pmu 1007 drivers/perf/arm_spe_pmu.c spe_pmu->min_period = 4096; spe_pmu 1012 drivers/perf/arm_spe_pmu.c spe_pmu->max_record_sz = 1 << fld; spe_pmu 1013 drivers/perf/arm_spe_pmu.c if (spe_pmu->max_record_sz > SZ_2K || spe_pmu->max_record_sz < 16) { spe_pmu 1026 drivers/perf/arm_spe_pmu.c spe_pmu->counter_sz = 12; spe_pmu 1031 drivers/perf/arm_spe_pmu.c cpumask_pr_args(&spe_pmu->supported_cpus), spe_pmu 1032 drivers/perf/arm_spe_pmu.c spe_pmu->max_record_sz, spe_pmu->align, spe_pmu->features); spe_pmu 1034 drivers/perf/arm_spe_pmu.c spe_pmu->features |= SPE_PMU_FEAT_DEV_PROBED; spe_pmu 1057 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu = info; spe_pmu 1060 drivers/perf/arm_spe_pmu.c enable_percpu_irq(spe_pmu->irq, IRQ_TYPE_NONE); spe_pmu 1065 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu = info; spe_pmu 1067 drivers/perf/arm_spe_pmu.c disable_percpu_irq(spe_pmu->irq); spe_pmu 1073 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu; spe_pmu 1075 drivers/perf/arm_spe_pmu.c spe_pmu = hlist_entry_safe(node, struct arm_spe_pmu, hotplug_node); spe_pmu 1076 drivers/perf/arm_spe_pmu.c if (!cpumask_test_cpu(cpu, &spe_pmu->supported_cpus)) spe_pmu 1079 drivers/perf/arm_spe_pmu.c __arm_spe_pmu_setup_one(spe_pmu); spe_pmu 1085 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu; spe_pmu 1087 drivers/perf/arm_spe_pmu.c spe_pmu = hlist_entry_safe(node, struct arm_spe_pmu, hotplug_node); spe_pmu 1088 drivers/perf/arm_spe_pmu.c if (!cpumask_test_cpu(cpu, &spe_pmu->supported_cpus)) spe_pmu 1091 drivers/perf/arm_spe_pmu.c __arm_spe_pmu_stop_one(spe_pmu); spe_pmu 1095 drivers/perf/arm_spe_pmu.c static int arm_spe_pmu_dev_init(struct arm_spe_pmu *spe_pmu) spe_pmu 1098 drivers/perf/arm_spe_pmu.c cpumask_t *mask = &spe_pmu->supported_cpus; spe_pmu 1101 drivers/perf/arm_spe_pmu.c ret = smp_call_function_any(mask, __arm_spe_pmu_dev_probe, spe_pmu, 1); spe_pmu 1102 drivers/perf/arm_spe_pmu.c if (ret || !(spe_pmu->features & SPE_PMU_FEAT_DEV_PROBED)) spe_pmu 1106 drivers/perf/arm_spe_pmu.c ret = request_percpu_irq(spe_pmu->irq, arm_spe_pmu_irq_handler, DRVNAME, spe_pmu 1107 drivers/perf/arm_spe_pmu.c spe_pmu->handle); spe_pmu 1117 drivers/perf/arm_spe_pmu.c &spe_pmu->hotplug_node); spe_pmu 1119 drivers/perf/arm_spe_pmu.c free_percpu_irq(spe_pmu->irq, spe_pmu->handle); spe_pmu 1124 drivers/perf/arm_spe_pmu.c static void arm_spe_pmu_dev_teardown(struct arm_spe_pmu *spe_pmu) spe_pmu 1126 drivers/perf/arm_spe_pmu.c cpuhp_state_remove_instance(arm_spe_pmu_online, &spe_pmu->hotplug_node); spe_pmu 1127 drivers/perf/arm_spe_pmu.c free_percpu_irq(spe_pmu->irq, spe_pmu->handle); spe_pmu 1131 drivers/perf/arm_spe_pmu.c static int arm_spe_pmu_irq_probe(struct arm_spe_pmu *spe_pmu) spe_pmu 1133 drivers/perf/arm_spe_pmu.c struct platform_device *pdev = spe_pmu->pdev; spe_pmu 1146 drivers/perf/arm_spe_pmu.c if (irq_get_percpu_devid_partition(irq, &spe_pmu->supported_cpus)) { spe_pmu 1151 drivers/perf/arm_spe_pmu.c spe_pmu->irq = irq; spe_pmu 1170 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu; spe_pmu 1182 drivers/perf/arm_spe_pmu.c spe_pmu = devm_kzalloc(dev, sizeof(*spe_pmu), GFP_KERNEL); spe_pmu 1183 drivers/perf/arm_spe_pmu.c if (!spe_pmu) { spe_pmu 1188 drivers/perf/arm_spe_pmu.c spe_pmu->handle = alloc_percpu(typeof(*spe_pmu->handle)); spe_pmu 1189 drivers/perf/arm_spe_pmu.c if (!spe_pmu->handle) spe_pmu 1192 drivers/perf/arm_spe_pmu.c spe_pmu->pdev = pdev; spe_pmu 1193 drivers/perf/arm_spe_pmu.c platform_set_drvdata(pdev, spe_pmu); spe_pmu 1195 drivers/perf/arm_spe_pmu.c ret = arm_spe_pmu_irq_probe(spe_pmu); spe_pmu 1199 drivers/perf/arm_spe_pmu.c ret = arm_spe_pmu_dev_init(spe_pmu); spe_pmu 1203 drivers/perf/arm_spe_pmu.c ret = arm_spe_pmu_perf_init(spe_pmu); spe_pmu 1210 drivers/perf/arm_spe_pmu.c arm_spe_pmu_dev_teardown(spe_pmu); spe_pmu 1212 drivers/perf/arm_spe_pmu.c free_percpu(spe_pmu->handle); spe_pmu 1218 drivers/perf/arm_spe_pmu.c struct arm_spe_pmu *spe_pmu = platform_get_drvdata(pdev); spe_pmu 1220 drivers/perf/arm_spe_pmu.c arm_spe_pmu_perf_destroy(spe_pmu); spe_pmu 1221 drivers/perf/arm_spe_pmu.c arm_spe_pmu_dev_teardown(spe_pmu); spe_pmu 1222 drivers/perf/arm_spe_pmu.c free_percpu(spe_pmu->handle);