Lines Matching +full:free +full:- +full:running

1 /* SPDX-License-Identifier: GPL-2.0 */
5 #include <asm/intel-family.h>
6 #include <linux/io-64-nonatomic-lo-hi.h>
37 #define UNCORE_IGNORE_END -1
165 /* event config registers are 8-byte apart */
260 if (offset < box->pmu->type->mmio_map_size) in uncore_mmio_is_valid_offset()
264 offset, box->pmu->type->name); in uncore_mmio_is_valid_offset()
272 return box->pmu->type->box_ctl + in uncore_mmio_box_ctl()
273 box->pmu->type->mmio_offset * box->pmu->pmu_idx; in uncore_mmio_box_ctl()
278 return box->pmu->type->box_ctl; in uncore_pci_box_ctl()
283 return box->pmu->type->fixed_ctl; in uncore_pci_fixed_ctl()
288 return box->pmu->type->fixed_ctr; in uncore_pci_fixed_ctr()
294 if (test_bit(UNCORE_BOX_FLAG_CTL_OFFS8, &box->flags)) in uncore_pci_event_ctl()
295 return idx * 8 + box->pmu->type->event_ctl; in uncore_pci_event_ctl()
297 return idx * 4 + box->pmu->type->event_ctl; in uncore_pci_event_ctl()
303 return idx * 8 + box->pmu->type->perf_ctr; in uncore_pci_perf_ctr()
308 struct intel_uncore_pmu *pmu = box->pmu; in uncore_msr_box_offset()
309 return pmu->type->msr_offsets ? in uncore_msr_box_offset()
310 pmu->type->msr_offsets[pmu->pmu_idx] : in uncore_msr_box_offset()
311 pmu->type->msr_offset * pmu->pmu_idx; in uncore_msr_box_offset()
316 if (!box->pmu->type->box_ctl) in uncore_msr_box_ctl()
318 return box->pmu->type->box_ctl + uncore_msr_box_offset(box); in uncore_msr_box_ctl()
323 if (!box->pmu->type->fixed_ctl) in uncore_msr_fixed_ctl()
325 return box->pmu->type->fixed_ctl + uncore_msr_box_offset(box); in uncore_msr_fixed_ctl()
330 return box->pmu->type->fixed_ctr + uncore_msr_box_offset(box); in uncore_msr_fixed_ctr()
335 * In the uncore document, there is no event-code assigned to free running
336 * counters. Some events need to be defined to indicate the free running
337 * counters. The events are encoded as event-code + umask-code.
339 * The event-code for all free running counters is 0xff, which is the same as
342 * The umask-code is used to distinguish a fixed counter and a free running
343 * counter, and different types of free running counters.
344 * - For fixed counters, the umask-code is 0x0X.
346 * - For free running counters, the umask-code uses the rest of the space.
348 * X stands for the type of free running counters, which starts from 1.
349 * Y stands for the index of free running counters of same type, which
352 * For example, there are three types of IIO free running counters on Skylake
354 * The event-code for all the free running counters is 0xff.
356 * which umask-code starts from 0x10.
359 * the second type, which umask-code starts from 0x20.
371 return ((((config >> 8) - UNCORE_FREERUNNING_UMASK_START) >> 4) & 0xf); in uncore_freerunning_type()
378 unsigned int type = uncore_freerunning_type(event->hw.config); in uncore_freerunning_counter()
379 unsigned int idx = uncore_freerunning_idx(event->hw.config); in uncore_freerunning_counter()
380 struct intel_uncore_pmu *pmu = box->pmu; in uncore_freerunning_counter()
382 return pmu->type->freerunning[type].counter_base + in uncore_freerunning_counter()
383 pmu->type->freerunning[type].counter_offset * idx + in uncore_freerunning_counter()
384 (pmu->type->freerunning[type].box_offsets ? in uncore_freerunning_counter()
385 pmu->type->freerunning[type].box_offsets[pmu->pmu_idx] : in uncore_freerunning_counter()
386 pmu->type->freerunning[type].box_offset * pmu->pmu_idx); in uncore_freerunning_counter()
392 if (test_bit(UNCORE_BOX_FLAG_CFL8_CBOX_MSR_OFFS, &box->flags)) { in uncore_msr_event_ctl()
394 (box->pmu->type->pair_ctr_ctl ? 2 * idx : idx); in uncore_msr_event_ctl()
396 return box->pmu->type->event_ctl + in uncore_msr_event_ctl()
397 (box->pmu->type->pair_ctr_ctl ? 2 * idx : idx) + in uncore_msr_event_ctl()
405 if (test_bit(UNCORE_BOX_FLAG_CFL8_CBOX_MSR_OFFS, &box->flags)) { in uncore_msr_perf_ctr()
407 (box->pmu->type->pair_ctr_ctl ? 2 * idx : idx); in uncore_msr_perf_ctr()
409 return box->pmu->type->perf_ctr + in uncore_msr_perf_ctr()
410 (box->pmu->type->pair_ctr_ctl ? 2 * idx : idx) + in uncore_msr_perf_ctr()
418 if (box->pci_dev || box->io_addr) in uncore_fixed_ctl()
427 if (box->pci_dev || box->io_addr) in uncore_fixed_ctr()
436 if (box->pci_dev || box->io_addr) in uncore_event_ctl()
445 if (box->pci_dev || box->io_addr) in uncore_perf_ctr()
453 return box->pmu->type->perf_ctr_bits; in uncore_perf_ctr_bits()
458 return box->pmu->type->fixed_ctr_bits; in uncore_fixed_ctr_bits()
465 unsigned int type = uncore_freerunning_type(event->hw.config); in uncore_freerunning_bits()
467 return box->pmu->type->freerunning[type].bits; in uncore_freerunning_bits()
473 unsigned int type = uncore_freerunning_type(event->hw.config); in uncore_num_freerunning()
475 return box->pmu->type->freerunning[type].num_counters; in uncore_num_freerunning()
481 return box->pmu->type->num_freerunning_types; in uncore_num_freerunning_types()
487 unsigned int type = uncore_freerunning_type(event->hw.config); in check_valid_freerunning_event()
488 unsigned int idx = uncore_freerunning_idx(event->hw.config); in check_valid_freerunning_event()
496 return box->pmu->type->num_counters; in uncore_num_counters()
501 u64 cfg = event->attr.config; in is_freerunning_event()
514 return -EINVAL; in uncore_freerunning_hw_config()
520 box->pmu->type->ops->disable_event(box, event); in uncore_disable_event()
526 box->pmu->type->ops->enable_event(box, event); in uncore_enable_event()
532 return box->pmu->type->ops->read_counter(box, event); in uncore_read_counter()
537 if (!test_and_set_bit(UNCORE_BOX_FLAG_INITIATED, &box->flags)) { in uncore_box_init()
538 if (box->pmu->type->ops->init_box) in uncore_box_init()
539 box->pmu->type->ops->init_box(box); in uncore_box_init()
545 if (test_and_clear_bit(UNCORE_BOX_FLAG_INITIATED, &box->flags)) { in uncore_box_exit()
546 if (box->pmu->type->ops->exit_box) in uncore_box_exit()
547 box->pmu->type->ops->exit_box(box); in uncore_box_exit()
553 return (box->dieid < 0); in uncore_box_is_fake()
558 return container_of(event->pmu, struct intel_uncore_pmu, pmu); in uncore_event_to_pmu()
563 return event->pmu_private; in uncore_event_to_box()