xref: /linux/arch/x86/events/intel/uncore.c (revision ae814200e8393fa504dd246e98fcba8f5493de28)
1 // SPDX-License-Identifier: GPL-2.0-only
2 #include <linux/module.h>
3 
4 #include <asm/cpu_device_id.h>
5 #include <asm/intel-family.h>
6 #include <asm/msr.h>
7 #include "uncore.h"
8 #include "uncore_discovery.h"
9 
10 static bool uncore_no_discover;
11 module_param(uncore_no_discover, bool, 0);
12 MODULE_PARM_DESC(uncore_no_discover, "Don't enable the Intel uncore PerfMon discovery mechanism "
13 				     "(default: enable the discovery mechanism).");
14 struct intel_uncore_type *empty_uncore[] = { NULL, };
15 struct intel_uncore_type **uncore_msr_uncores = empty_uncore;
16 struct intel_uncore_type **uncore_pci_uncores = empty_uncore;
17 struct intel_uncore_type **uncore_mmio_uncores = empty_uncore;
18 
19 static bool pcidrv_registered;
20 struct pci_driver *uncore_pci_driver;
21 /* The PCI driver for the device which the uncore doesn't own. */
22 struct pci_driver *uncore_pci_sub_driver;
23 /* pci bus to socket mapping */
24 DEFINE_RAW_SPINLOCK(pci2phy_map_lock);
25 struct list_head pci2phy_map_head = LIST_HEAD_INIT(pci2phy_map_head);
26 struct pci_extra_dev *uncore_extra_pci_dev;
27 int __uncore_max_dies;
28 
29 /* mask of cpus that collect uncore events */
30 static cpumask_t uncore_cpu_mask;
31 
32 /* constraint for the fixed counter */
33 static struct event_constraint uncore_constraint_fixed =
34 	EVENT_CONSTRAINT(~0ULL, 1 << UNCORE_PMC_IDX_FIXED, ~0ULL);
35 struct event_constraint uncore_constraint_empty =
36 	EVENT_CONSTRAINT(0, 0, 0);
37 
38 MODULE_DESCRIPTION("Support for Intel uncore performance events");
39 MODULE_LICENSE("GPL");
40 
uncore_pcibus_to_dieid(struct pci_bus * bus)41 int uncore_pcibus_to_dieid(struct pci_bus *bus)
42 {
43 	struct pci2phy_map *map;
44 	int die_id = -1;
45 
46 	raw_spin_lock(&pci2phy_map_lock);
47 	list_for_each_entry(map, &pci2phy_map_head, list) {
48 		if (map->segment == pci_domain_nr(bus)) {
49 			die_id = map->pbus_to_dieid[bus->number];
50 			break;
51 		}
52 	}
53 	raw_spin_unlock(&pci2phy_map_lock);
54 
55 	return die_id;
56 }
57 
uncore_die_to_segment(int die)58 int uncore_die_to_segment(int die)
59 {
60 	struct pci_bus *bus = NULL;
61 
62 	/* Find first pci bus which attributes to specified die. */
63 	while ((bus = pci_find_next_bus(bus)) &&
64 	       (die != uncore_pcibus_to_dieid(bus)))
65 		;
66 
67 	return bus ? pci_domain_nr(bus) : -EINVAL;
68 }
69 
70 /* Note: This API can only be used when NUMA information is available. */
uncore_device_to_die(struct pci_dev * dev)71 int uncore_device_to_die(struct pci_dev *dev)
72 {
73 	int node = pcibus_to_node(dev->bus);
74 	int cpu;
75 
76 	for_each_cpu(cpu, cpumask_of_pcibus(dev->bus)) {
77 		struct cpuinfo_x86 *c = &cpu_data(cpu);
78 
79 		if (c->initialized && cpu_to_node(cpu) == node)
80 			return c->topo.logical_die_id;
81 	}
82 
83 	return -1;
84 }
85 
86 /*
87  * Using cpus_read_lock() to ensure cpu is not going down between
88  * looking at cpu_online_mask.
89  *
90  * The lock must be held by the caller.
91  */
uncore_die_to_cpu(int die)92 int uncore_die_to_cpu(int die)
93 {
94 	int res = -1, cpu;
95 
96 	for_each_online_cpu(cpu) {
97 		if (topology_logical_die_id(cpu) == die) {
98 			res = cpu;
99 			break;
100 		}
101 	}
102 	return res;
103 }
104 
uncore_free_pcibus_map(void)105 static void uncore_free_pcibus_map(void)
106 {
107 	struct pci2phy_map *map, *tmp;
108 
109 	list_for_each_entry_safe(map, tmp, &pci2phy_map_head, list) {
110 		list_del(&map->list);
111 		kfree(map);
112 	}
113 }
114 
__find_pci2phy_map(int segment)115 struct pci2phy_map *__find_pci2phy_map(int segment)
116 {
117 	struct pci2phy_map *map, *alloc = NULL;
118 	int i;
119 
120 	lockdep_assert_held(&pci2phy_map_lock);
121 
122 lookup:
123 	list_for_each_entry(map, &pci2phy_map_head, list) {
124 		if (map->segment == segment)
125 			goto end;
126 	}
127 
128 	if (!alloc) {
129 		raw_spin_unlock(&pci2phy_map_lock);
130 		alloc = kmalloc_obj(struct pci2phy_map);
131 		raw_spin_lock(&pci2phy_map_lock);
132 
133 		if (!alloc)
134 			return NULL;
135 
136 		goto lookup;
137 	}
138 
139 	map = alloc;
140 	alloc = NULL;
141 	map->segment = segment;
142 	for (i = 0; i < 256; i++)
143 		map->pbus_to_dieid[i] = -1;
144 	list_add_tail(&map->list, &pci2phy_map_head);
145 
146 end:
147 	kfree(alloc);
148 	return map;
149 }
150 
uncore_event_show(struct device * dev,struct device_attribute * attr,char * buf)151 ssize_t uncore_event_show(struct device *dev,
152 			  struct device_attribute *attr, char *buf)
153 {
154 	struct uncore_event_desc *event =
155 		container_of(attr, struct uncore_event_desc, attr);
156 	return sprintf(buf, "%s", event->config);
157 }
158 
uncore_pmu_to_box(struct intel_uncore_pmu * pmu,int cpu)159 struct intel_uncore_box *uncore_pmu_to_box(struct intel_uncore_pmu *pmu, int cpu)
160 {
161 	unsigned int dieid = topology_logical_die_id(cpu);
162 
163 	/*
164 	 * The unsigned check also catches the '-1' return value for non
165 	 * existent mappings in the topology map.
166 	 */
167 	return dieid < uncore_max_dies() ? pmu->boxes[dieid] : NULL;
168 }
169 
uncore_msr_read_counter(struct intel_uncore_box * box,struct perf_event * event)170 u64 uncore_msr_read_counter(struct intel_uncore_box *box, struct perf_event *event)
171 {
172 	u64 count;
173 
174 	rdmsrq(event->hw.event_base, count);
175 
176 	return count;
177 }
178 
uncore_mmio_exit_box(struct intel_uncore_box * box)179 void uncore_mmio_exit_box(struct intel_uncore_box *box)
180 {
181 	if (box->io_addr)
182 		iounmap(box->io_addr);
183 }
184 
uncore_mmio_read_counter(struct intel_uncore_box * box,struct perf_event * event)185 u64 uncore_mmio_read_counter(struct intel_uncore_box *box,
186 			     struct perf_event *event)
187 {
188 	if (!box->io_addr)
189 		return 0;
190 
191 	if (!uncore_mmio_is_valid_offset(box, event->hw.event_base))
192 		return 0;
193 
194 	return readq(box->io_addr + event->hw.event_base);
195 }
196 
197 /*
198  * generic get constraint function for shared match/mask registers.
199  */
200 struct event_constraint *
uncore_get_constraint(struct intel_uncore_box * box,struct perf_event * event)201 uncore_get_constraint(struct intel_uncore_box *box, struct perf_event *event)
202 {
203 	struct intel_uncore_extra_reg *er;
204 	struct hw_perf_event_extra *reg1 = &event->hw.extra_reg;
205 	struct hw_perf_event_extra *reg2 = &event->hw.branch_reg;
206 	unsigned long flags;
207 	bool ok = false;
208 
209 	/*
210 	 * reg->alloc can be set due to existing state, so for fake box we
211 	 * need to ignore this, otherwise we might fail to allocate proper
212 	 * fake state for this extra reg constraint.
213 	 */
214 	if (reg1->idx == EXTRA_REG_NONE ||
215 	    (!uncore_box_is_fake(box) && reg1->alloc))
216 		return NULL;
217 
218 	er = &box->shared_regs[reg1->idx];
219 	raw_spin_lock_irqsave(&er->lock, flags);
220 	if (!atomic_read(&er->ref) ||
221 	    (er->config1 == reg1->config && er->config2 == reg2->config)) {
222 		atomic_inc(&er->ref);
223 		er->config1 = reg1->config;
224 		er->config2 = reg2->config;
225 		ok = true;
226 	}
227 	raw_spin_unlock_irqrestore(&er->lock, flags);
228 
229 	if (ok) {
230 		if (!uncore_box_is_fake(box))
231 			reg1->alloc = 1;
232 		return NULL;
233 	}
234 
235 	return &uncore_constraint_empty;
236 }
237 
uncore_put_constraint(struct intel_uncore_box * box,struct perf_event * event)238 void uncore_put_constraint(struct intel_uncore_box *box, struct perf_event *event)
239 {
240 	struct intel_uncore_extra_reg *er;
241 	struct hw_perf_event_extra *reg1 = &event->hw.extra_reg;
242 
243 	/*
244 	 * Only put constraint if extra reg was actually allocated. Also
245 	 * takes care of event which do not use an extra shared reg.
246 	 *
247 	 * Also, if this is a fake box we shouldn't touch any event state
248 	 * (reg->alloc) and we don't care about leaving inconsistent box
249 	 * state either since it will be thrown out.
250 	 */
251 	if (uncore_box_is_fake(box) || !reg1->alloc)
252 		return;
253 
254 	er = &box->shared_regs[reg1->idx];
255 	atomic_dec(&er->ref);
256 	reg1->alloc = 0;
257 }
258 
uncore_shared_reg_config(struct intel_uncore_box * box,int idx)259 u64 uncore_shared_reg_config(struct intel_uncore_box *box, int idx)
260 {
261 	struct intel_uncore_extra_reg *er;
262 	unsigned long flags;
263 	u64 config;
264 
265 	er = &box->shared_regs[idx];
266 
267 	raw_spin_lock_irqsave(&er->lock, flags);
268 	config = er->config;
269 	raw_spin_unlock_irqrestore(&er->lock, flags);
270 
271 	return config;
272 }
273 
uncore_assign_hw_event(struct intel_uncore_box * box,struct perf_event * event,int idx)274 static void uncore_assign_hw_event(struct intel_uncore_box *box,
275 				   struct perf_event *event, int idx)
276 {
277 	struct hw_perf_event *hwc = &event->hw;
278 
279 	hwc->idx = idx;
280 	hwc->last_tag = ++box->tags[idx];
281 
282 	if (uncore_pmc_fixed(hwc->idx)) {
283 		hwc->event_base = uncore_fixed_ctr(box);
284 		hwc->config_base = uncore_fixed_ctl(box);
285 		return;
286 	}
287 
288 	if (intel_generic_uncore_assign_hw_event(event, box))
289 		return;
290 
291 	hwc->config_base = uncore_event_ctl(box, hwc->idx);
292 	hwc->event_base  = uncore_perf_ctr(box, hwc->idx);
293 }
294 
uncore_perf_event_update(struct intel_uncore_box * box,struct perf_event * event)295 void uncore_perf_event_update(struct intel_uncore_box *box, struct perf_event *event)
296 {
297 	u64 prev_count, new_count, delta;
298 	int shift;
299 
300 	if (uncore_pmc_freerunning(event->hw.idx))
301 		shift = 64 - uncore_freerunning_bits(box, event);
302 	else if (uncore_pmc_fixed(event->hw.idx))
303 		shift = 64 - uncore_fixed_ctr_bits(box);
304 	else
305 		shift = 64 - uncore_perf_ctr_bits(box);
306 
307 	/* the hrtimer might modify the previous event value */
308 again:
309 	prev_count = local64_read(&event->hw.prev_count);
310 	new_count = uncore_read_counter(box, event);
311 	if (local64_xchg(&event->hw.prev_count, new_count) != prev_count)
312 		goto again;
313 
314 	delta = (new_count << shift) - (prev_count << shift);
315 	delta >>= shift;
316 
317 	local64_add(delta, &event->count);
318 }
319 
320 /*
321  * The overflow interrupt is unavailable for SandyBridge-EP, is broken
322  * for SandyBridge. So we use hrtimer to periodically poll the counter
323  * to avoid overflow.
324  */
uncore_pmu_hrtimer(struct hrtimer * hrtimer)325 static enum hrtimer_restart uncore_pmu_hrtimer(struct hrtimer *hrtimer)
326 {
327 	struct intel_uncore_box *box;
328 	struct perf_event *event;
329 	int bit;
330 
331 	box = container_of(hrtimer, struct intel_uncore_box, hrtimer);
332 	if (!box->n_active || box->cpu != smp_processor_id())
333 		return HRTIMER_NORESTART;
334 
335 	/*
336 	 * handle boxes with an active event list as opposed to active
337 	 * counters
338 	 */
339 	list_for_each_entry(event, &box->active_list, active_entry) {
340 		uncore_perf_event_update(box, event);
341 	}
342 
343 	for_each_set_bit(bit, box->active_mask, UNCORE_PMC_IDX_MAX)
344 		uncore_perf_event_update(box, box->events[bit]);
345 
346 	hrtimer_forward_now(hrtimer, ns_to_ktime(box->hrtimer_duration));
347 	return HRTIMER_RESTART;
348 }
349 
uncore_pmu_start_hrtimer(struct intel_uncore_box * box)350 void uncore_pmu_start_hrtimer(struct intel_uncore_box *box)
351 {
352 	hrtimer_start(&box->hrtimer, ns_to_ktime(box->hrtimer_duration),
353 		      HRTIMER_MODE_REL_PINNED_HARD);
354 }
355 
uncore_pmu_cancel_hrtimer(struct intel_uncore_box * box)356 void uncore_pmu_cancel_hrtimer(struct intel_uncore_box *box)
357 {
358 	hrtimer_cancel(&box->hrtimer);
359 }
360 
uncore_pmu_init_hrtimer(struct intel_uncore_box * box)361 static void uncore_pmu_init_hrtimer(struct intel_uncore_box *box)
362 {
363 	hrtimer_setup(&box->hrtimer, uncore_pmu_hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD);
364 }
365 
uncore_alloc_box(struct intel_uncore_type * type,int node)366 static struct intel_uncore_box *uncore_alloc_box(struct intel_uncore_type *type,
367 						 int node)
368 {
369 	int i, size, numshared = type->num_shared_regs ;
370 	struct intel_uncore_box *box;
371 
372 	size = sizeof(*box) + numshared * sizeof(struct intel_uncore_extra_reg);
373 
374 	box = kzalloc_node(size, GFP_KERNEL, node);
375 	if (!box)
376 		return NULL;
377 
378 	for (i = 0; i < numshared; i++)
379 		raw_spin_lock_init(&box->shared_regs[i].lock);
380 
381 	uncore_pmu_init_hrtimer(box);
382 	box->cpu = -1;
383 	box->dieid = -1;
384 
385 	/* set default hrtimer timeout */
386 	box->hrtimer_duration = UNCORE_PMU_HRTIMER_INTERVAL;
387 
388 	INIT_LIST_HEAD(&box->active_list);
389 
390 	return box;
391 }
392 
393 /*
394  * Using uncore_pmu_event_init pmu event_init callback
395  * as a detection point for uncore events.
396  */
397 static int uncore_pmu_event_init(struct perf_event *event);
398 
is_box_event(struct intel_uncore_box * box,struct perf_event * event)399 static bool is_box_event(struct intel_uncore_box *box, struct perf_event *event)
400 {
401 	return &box->pmu->pmu == event->pmu;
402 }
403 
404 static int
uncore_collect_events(struct intel_uncore_box * box,struct perf_event * leader,bool dogrp)405 uncore_collect_events(struct intel_uncore_box *box, struct perf_event *leader,
406 		      bool dogrp)
407 {
408 	struct perf_event *event;
409 	int n, max_count;
410 
411 	max_count = box->pmu->type->num_counters;
412 	if (box->pmu->type->fixed_ctl)
413 		max_count++;
414 
415 	if (box->n_events >= max_count)
416 		return -EINVAL;
417 
418 	n = box->n_events;
419 
420 	if (is_box_event(box, leader)) {
421 		box->event_list[n] = leader;
422 		n++;
423 	}
424 
425 	if (!dogrp)
426 		return n;
427 
428 	for_each_sibling_event(event, leader) {
429 		if (!is_box_event(box, event) ||
430 		    event->state <= PERF_EVENT_STATE_OFF)
431 			continue;
432 
433 		if (n >= max_count)
434 			return -EINVAL;
435 
436 		box->event_list[n] = event;
437 		n++;
438 	}
439 	return n;
440 }
441 
442 static struct event_constraint *
uncore_get_event_constraint(struct intel_uncore_box * box,struct perf_event * event)443 uncore_get_event_constraint(struct intel_uncore_box *box, struct perf_event *event)
444 {
445 	struct intel_uncore_type *type = box->pmu->type;
446 	struct event_constraint *c;
447 
448 	if (type->ops->get_constraint) {
449 		c = type->ops->get_constraint(box, event);
450 		if (c)
451 			return c;
452 	}
453 
454 	if (event->attr.config == UNCORE_FIXED_EVENT)
455 		return &uncore_constraint_fixed;
456 
457 	if (type->constraints) {
458 		for_each_event_constraint(c, type->constraints) {
459 			if (constraint_match(c, event->hw.config))
460 				return c;
461 		}
462 	}
463 
464 	return &type->unconstrainted;
465 }
466 
uncore_put_event_constraint(struct intel_uncore_box * box,struct perf_event * event)467 static void uncore_put_event_constraint(struct intel_uncore_box *box,
468 					struct perf_event *event)
469 {
470 	if (box->pmu->type->ops->put_constraint)
471 		box->pmu->type->ops->put_constraint(box, event);
472 }
473 
uncore_assign_events(struct intel_uncore_box * box,int assign[],int n)474 static int uncore_assign_events(struct intel_uncore_box *box, int assign[], int n)
475 {
476 	unsigned long used_mask[BITS_TO_LONGS(UNCORE_PMC_IDX_MAX)];
477 	struct event_constraint *c;
478 	int i, wmin, wmax, ret = 0;
479 	struct hw_perf_event *hwc;
480 
481 	bitmap_zero(used_mask, UNCORE_PMC_IDX_MAX);
482 
483 	for (i = 0, wmin = UNCORE_PMC_IDX_MAX, wmax = 0; i < n; i++) {
484 		c = uncore_get_event_constraint(box, box->event_list[i]);
485 		box->event_constraint[i] = c;
486 		wmin = min(wmin, c->weight);
487 		wmax = max(wmax, c->weight);
488 	}
489 
490 	/* fastpath, try to reuse previous register */
491 	for (i = 0; i < n; i++) {
492 		hwc = &box->event_list[i]->hw;
493 		c = box->event_constraint[i];
494 
495 		/* never assigned */
496 		if (hwc->idx == -1)
497 			break;
498 
499 		/* constraint still honored */
500 		if (!test_bit(hwc->idx, c->idxmsk))
501 			break;
502 
503 		/* not already used */
504 		if (test_bit(hwc->idx, used_mask))
505 			break;
506 
507 		__set_bit(hwc->idx, used_mask);
508 		if (assign)
509 			assign[i] = hwc->idx;
510 	}
511 	/* slow path */
512 	if (i != n)
513 		ret = perf_assign_events(box->event_constraint, n,
514 					 wmin, wmax, n, assign);
515 
516 	if (!assign || ret) {
517 		for (i = 0; i < n; i++)
518 			uncore_put_event_constraint(box, box->event_list[i]);
519 	}
520 	return ret ? -EINVAL : 0;
521 }
522 
uncore_pmu_event_start(struct perf_event * event,int flags)523 void uncore_pmu_event_start(struct perf_event *event, int flags)
524 {
525 	struct intel_uncore_box *box = uncore_event_to_box(event);
526 	int idx = event->hw.idx;
527 
528 	if (WARN_ON_ONCE(idx == -1 || idx >= UNCORE_PMC_IDX_MAX))
529 		return;
530 
531 	/*
532 	 * Free running counter is read-only and always active.
533 	 * Use the current counter value as start point.
534 	 * There is no overflow interrupt for free running counter.
535 	 * Use hrtimer to periodically poll the counter to avoid overflow.
536 	 */
537 	if (uncore_pmc_freerunning(event->hw.idx)) {
538 		list_add_tail(&event->active_entry, &box->active_list);
539 		local64_set(&event->hw.prev_count,
540 			    uncore_read_counter(box, event));
541 		if (box->n_active++ == 0)
542 			uncore_pmu_start_hrtimer(box);
543 		return;
544 	}
545 
546 	if (WARN_ON_ONCE(!(event->hw.state & PERF_HES_STOPPED)))
547 		return;
548 
549 	event->hw.state = 0;
550 	box->events[idx] = event;
551 	box->n_active++;
552 	__set_bit(idx, box->active_mask);
553 
554 	local64_set(&event->hw.prev_count, uncore_read_counter(box, event));
555 	uncore_enable_event(box, event);
556 
557 	if (box->n_active == 1)
558 		uncore_pmu_start_hrtimer(box);
559 }
560 
uncore_pmu_event_stop(struct perf_event * event,int flags)561 void uncore_pmu_event_stop(struct perf_event *event, int flags)
562 {
563 	struct intel_uncore_box *box = uncore_event_to_box(event);
564 	struct hw_perf_event *hwc = &event->hw;
565 
566 	/* Cannot disable free running counter which is read-only */
567 	if (uncore_pmc_freerunning(hwc->idx)) {
568 		list_del(&event->active_entry);
569 		if (--box->n_active == 0)
570 			uncore_pmu_cancel_hrtimer(box);
571 		uncore_perf_event_update(box, event);
572 		return;
573 	}
574 
575 	if (__test_and_clear_bit(hwc->idx, box->active_mask)) {
576 		uncore_disable_event(box, event);
577 		box->n_active--;
578 		box->events[hwc->idx] = NULL;
579 		WARN_ON_ONCE(hwc->state & PERF_HES_STOPPED);
580 		hwc->state |= PERF_HES_STOPPED;
581 
582 		if (box->n_active == 0)
583 			uncore_pmu_cancel_hrtimer(box);
584 	}
585 
586 	if ((flags & PERF_EF_UPDATE) && !(hwc->state & PERF_HES_UPTODATE)) {
587 		/*
588 		 * Drain the remaining delta count out of a event
589 		 * that we are disabling:
590 		 */
591 		uncore_perf_event_update(box, event);
592 		hwc->state |= PERF_HES_UPTODATE;
593 	}
594 }
595 
uncore_pmu_event_add(struct perf_event * event,int flags)596 int uncore_pmu_event_add(struct perf_event *event, int flags)
597 {
598 	struct intel_uncore_box *box = uncore_event_to_box(event);
599 	struct hw_perf_event *hwc = &event->hw;
600 	int assign[UNCORE_PMC_IDX_MAX];
601 	int i, n, ret;
602 
603 	if (!box)
604 		return -ENODEV;
605 
606 	/*
607 	 * The free funning counter is assigned in event_init().
608 	 * The free running counter event and free running counter
609 	 * are 1:1 mapped. It doesn't need to be tracked in event_list.
610 	 */
611 	if (uncore_pmc_freerunning(hwc->idx)) {
612 		if (flags & PERF_EF_START)
613 			uncore_pmu_event_start(event, 0);
614 		return 0;
615 	}
616 
617 	ret = n = uncore_collect_events(box, event, false);
618 	if (ret < 0)
619 		return ret;
620 
621 	hwc->state = PERF_HES_UPTODATE | PERF_HES_STOPPED;
622 	if (!(flags & PERF_EF_START))
623 		hwc->state |= PERF_HES_ARCH;
624 
625 	ret = uncore_assign_events(box, assign, n);
626 	if (ret)
627 		return ret;
628 
629 	/* save events moving to new counters */
630 	for (i = 0; i < box->n_events; i++) {
631 		event = box->event_list[i];
632 		hwc = &event->hw;
633 
634 		if (hwc->idx == assign[i] &&
635 			hwc->last_tag == box->tags[assign[i]])
636 			continue;
637 		/*
638 		 * Ensure we don't accidentally enable a stopped
639 		 * counter simply because we rescheduled.
640 		 */
641 		if (hwc->state & PERF_HES_STOPPED)
642 			hwc->state |= PERF_HES_ARCH;
643 
644 		uncore_pmu_event_stop(event, PERF_EF_UPDATE);
645 	}
646 
647 	/* reprogram moved events into new counters */
648 	for (i = 0; i < n; i++) {
649 		event = box->event_list[i];
650 		hwc = &event->hw;
651 
652 		if (hwc->idx != assign[i] ||
653 			hwc->last_tag != box->tags[assign[i]])
654 			uncore_assign_hw_event(box, event, assign[i]);
655 		else if (i < box->n_events)
656 			continue;
657 
658 		if (hwc->state & PERF_HES_ARCH)
659 			continue;
660 
661 		uncore_pmu_event_start(event, 0);
662 	}
663 	box->n_events = n;
664 
665 	return 0;
666 }
667 
uncore_pmu_event_del(struct perf_event * event,int flags)668 void uncore_pmu_event_del(struct perf_event *event, int flags)
669 {
670 	struct intel_uncore_box *box = uncore_event_to_box(event);
671 	int i;
672 
673 	uncore_pmu_event_stop(event, PERF_EF_UPDATE);
674 
675 	/*
676 	 * The event for free running counter is not tracked by event_list.
677 	 * It doesn't need to force event->hw.idx = -1 to reassign the counter.
678 	 * Because the event and the free running counter are 1:1 mapped.
679 	 */
680 	if (uncore_pmc_freerunning(event->hw.idx))
681 		return;
682 
683 	for (i = 0; i < box->n_events; i++) {
684 		if (event == box->event_list[i]) {
685 			uncore_put_event_constraint(box, event);
686 
687 			for (++i; i < box->n_events; i++)
688 				box->event_list[i - 1] = box->event_list[i];
689 
690 			--box->n_events;
691 			break;
692 		}
693 	}
694 
695 	event->hw.idx = -1;
696 	event->hw.last_tag = ~0ULL;
697 }
698 
uncore_pmu_event_read(struct perf_event * event)699 void uncore_pmu_event_read(struct perf_event *event)
700 {
701 	struct intel_uncore_box *box = uncore_event_to_box(event);
702 	uncore_perf_event_update(box, event);
703 }
704 
705 /*
706  * validation ensures the group can be loaded onto the
707  * PMU if it was the only group available.
708  */
uncore_validate_group(struct intel_uncore_pmu * pmu,struct perf_event * event)709 static int uncore_validate_group(struct intel_uncore_pmu *pmu,
710 				struct perf_event *event)
711 {
712 	struct perf_event *leader = event->group_leader;
713 	struct intel_uncore_box *fake_box;
714 	int ret = -EINVAL, n;
715 
716 	/* The free running counter is always active. */
717 	if (uncore_pmc_freerunning(event->hw.idx))
718 		return 0;
719 
720 	fake_box = uncore_alloc_box(pmu->type, NUMA_NO_NODE);
721 	if (!fake_box)
722 		return -ENOMEM;
723 
724 	fake_box->pmu = pmu;
725 	/*
726 	 * the event is not yet connected with its
727 	 * siblings therefore we must first collect
728 	 * existing siblings, then add the new event
729 	 * before we can simulate the scheduling
730 	 */
731 	n = uncore_collect_events(fake_box, leader, true);
732 	if (n < 0)
733 		goto out;
734 
735 	fake_box->n_events = n;
736 	n = uncore_collect_events(fake_box, event, false);
737 	if (n < 0)
738 		goto out;
739 
740 	fake_box->n_events = n;
741 
742 	ret = uncore_assign_events(fake_box, NULL, n);
743 out:
744 	kfree(fake_box);
745 	return ret;
746 }
747 
uncore_pmu_event_init(struct perf_event * event)748 static int uncore_pmu_event_init(struct perf_event *event)
749 {
750 	struct intel_uncore_pmu *pmu;
751 	struct intel_uncore_box *box;
752 	struct hw_perf_event *hwc = &event->hw;
753 	int ret;
754 
755 	if (event->attr.type != event->pmu->type)
756 		return -ENOENT;
757 
758 	pmu = uncore_event_to_pmu(event);
759 	/* no device found for this pmu */
760 	if (!uncore_pmu_available(pmu))
761 		return -ENOENT;
762 
763 	/* Sampling not supported yet */
764 	if (hwc->sample_period)
765 		return -EINVAL;
766 
767 	/*
768 	 * Place all uncore events for a particular physical package
769 	 * onto a single cpu
770 	 */
771 	if (event->cpu < 0)
772 		return -EINVAL;
773 	box = uncore_pmu_to_box(pmu, event->cpu);
774 	if (!box || box->cpu < 0)
775 		return -EINVAL;
776 	event->cpu = box->cpu;
777 	event->pmu_private = box;
778 
779 	event->event_caps |= PERF_EV_CAP_READ_ACTIVE_PKG;
780 
781 	event->hw.idx = -1;
782 	event->hw.last_tag = ~0ULL;
783 	event->hw.extra_reg.idx = EXTRA_REG_NONE;
784 	event->hw.branch_reg.idx = EXTRA_REG_NONE;
785 
786 	if (event->attr.config == UNCORE_FIXED_EVENT) {
787 		/* no fixed counter */
788 		if (!pmu->type->fixed_ctl)
789 			return -EINVAL;
790 		/*
791 		 * if there is only one fixed counter, only the first pmu
792 		 * can access the fixed counter
793 		 */
794 		if (pmu->type->single_fixed && pmu->pmu_idx > 0)
795 			return -EINVAL;
796 
797 		/* fixed counters have event field hardcoded to zero */
798 		hwc->config = 0ULL;
799 	} else if (is_freerunning_event(event)) {
800 		hwc->config = event->attr.config;
801 		if (!check_valid_freerunning_event(box, event))
802 			return -EINVAL;
803 		event->hw.idx = UNCORE_PMC_IDX_FREERUNNING;
804 		/*
805 		 * The free running counter event and free running counter
806 		 * are always 1:1 mapped.
807 		 * The free running counter is always active.
808 		 * Assign the free running counter here.
809 		 */
810 		event->hw.event_base = uncore_freerunning_counter(box, event);
811 	} else {
812 		hwc->config = event->attr.config &
813 			      (pmu->type->event_mask | ((u64)pmu->type->event_mask_ext << 32));
814 		if (pmu->type->ops->hw_config) {
815 			ret = pmu->type->ops->hw_config(box, event);
816 			if (ret)
817 				return ret;
818 		}
819 	}
820 
821 	if (event->group_leader != event)
822 		ret = uncore_validate_group(pmu, event);
823 	else
824 		ret = 0;
825 
826 	return ret;
827 }
828 
uncore_pmu_enable(struct pmu * pmu)829 static void uncore_pmu_enable(struct pmu *pmu)
830 {
831 	struct intel_uncore_pmu *uncore_pmu;
832 	struct intel_uncore_box *box;
833 
834 	uncore_pmu = container_of(pmu, struct intel_uncore_pmu, pmu);
835 
836 	box = uncore_pmu_to_box(uncore_pmu, smp_processor_id());
837 	if (!box)
838 		return;
839 
840 	if (uncore_pmu->type->ops->enable_box)
841 		uncore_pmu->type->ops->enable_box(box);
842 }
843 
uncore_pmu_disable(struct pmu * pmu)844 static void uncore_pmu_disable(struct pmu *pmu)
845 {
846 	struct intel_uncore_pmu *uncore_pmu;
847 	struct intel_uncore_box *box;
848 
849 	uncore_pmu = container_of(pmu, struct intel_uncore_pmu, pmu);
850 
851 	box = uncore_pmu_to_box(uncore_pmu, smp_processor_id());
852 	if (!box)
853 		return;
854 
855 	if (uncore_pmu->type->ops->disable_box)
856 		uncore_pmu->type->ops->disable_box(box);
857 }
858 
uncore_get_attr_cpumask(struct device * dev,struct device_attribute * attr,char * buf)859 static ssize_t uncore_get_attr_cpumask(struct device *dev,
860 				struct device_attribute *attr, char *buf)
861 {
862 	struct intel_uncore_pmu *pmu = container_of(dev_get_drvdata(dev), struct intel_uncore_pmu, pmu);
863 
864 	return sysfs_emit(buf, "%*pbl\n", cpumask_pr_args(&pmu->cpu_mask));
865 }
866 
867 static DEVICE_ATTR(cpumask, S_IRUGO, uncore_get_attr_cpumask, NULL);
868 
869 static struct attribute *uncore_pmu_attrs[] = {
870 	&dev_attr_cpumask.attr,
871 	NULL,
872 };
873 
874 static const struct attribute_group uncore_pmu_attr_group = {
875 	.attrs = uncore_pmu_attrs,
876 };
877 
uncore_get_box_id(struct intel_uncore_type * type,struct intel_uncore_pmu * pmu)878 static inline int uncore_get_box_id(struct intel_uncore_type *type,
879 				    struct intel_uncore_pmu *pmu)
880 {
881 	if (type->boxes)
882 		return intel_uncore_find_discovery_unit_id(type->boxes, -1, pmu->pmu_idx);
883 
884 	return pmu->pmu_idx;
885 }
886 
uncore_get_alias_name(char * pmu_name,struct intel_uncore_pmu * pmu)887 void uncore_get_alias_name(char *pmu_name, struct intel_uncore_pmu *pmu)
888 {
889 	struct intel_uncore_type *type = pmu->type;
890 
891 	if (type->num_boxes == 1)
892 		sprintf(pmu_name, "uncore_type_%u", type->type_id);
893 	else {
894 		sprintf(pmu_name, "uncore_type_%u_%d",
895 			type->type_id, uncore_get_box_id(type, pmu));
896 	}
897 }
898 
uncore_get_pmu_name(struct intel_uncore_pmu * pmu)899 static void uncore_get_pmu_name(struct intel_uncore_pmu *pmu)
900 {
901 	struct intel_uncore_type *type = pmu->type;
902 
903 	/*
904 	 * No uncore block name in discovery table.
905 	 * Use uncore_type_&typeid_&boxid as name.
906 	 */
907 	if (!type->name) {
908 		uncore_get_alias_name(pmu->name, pmu);
909 		return;
910 	}
911 
912 	if (type->num_boxes == 1) {
913 		if (strlen(type->name) > 0)
914 			sprintf(pmu->name, "uncore_%s", type->name);
915 		else
916 			sprintf(pmu->name, "uncore");
917 	} else {
918 		/*
919 		 * Use the box ID from the discovery table if applicable.
920 		 */
921 		sprintf(pmu->name, "uncore_%s_%d", type->name,
922 			uncore_get_box_id(type, pmu));
923 	}
924 }
925 
uncore_pmu_register(struct intel_uncore_pmu * pmu)926 static int uncore_pmu_register(struct intel_uncore_pmu *pmu)
927 {
928 	int ret;
929 
930 	if (!pmu->type->pmu) {
931 		pmu->pmu = (struct pmu) {
932 			.attr_groups	= pmu->type->attr_groups,
933 			.task_ctx_nr	= perf_invalid_context,
934 			.pmu_enable	= uncore_pmu_enable,
935 			.pmu_disable	= uncore_pmu_disable,
936 			.event_init	= uncore_pmu_event_init,
937 			.add		= uncore_pmu_event_add,
938 			.del		= uncore_pmu_event_del,
939 			.start		= uncore_pmu_event_start,
940 			.stop		= uncore_pmu_event_stop,
941 			.read		= uncore_pmu_event_read,
942 			.module		= THIS_MODULE,
943 			.capabilities	= PERF_PMU_CAP_NO_EXCLUDE,
944 			.attr_update	= pmu->type->attr_update,
945 		};
946 	} else {
947 		pmu->pmu = *pmu->type->pmu;
948 		pmu->pmu.attr_groups = pmu->type->attr_groups;
949 		pmu->pmu.attr_update = pmu->type->attr_update;
950 	}
951 
952 	uncore_get_pmu_name(pmu);
953 
954 	ret = perf_pmu_register(&pmu->pmu, pmu->name, -1);
955 	if (!ret)
956 		uncore_pmu_set_registered(pmu);
957 	return ret;
958 }
959 
uncore_pmu_unregister(struct intel_uncore_pmu * pmu)960 static void uncore_pmu_unregister(struct intel_uncore_pmu *pmu)
961 {
962 	if (!uncore_pmu_registered(pmu))
963 		return;
964 	perf_pmu_unregister(&pmu->pmu);
965 
966 	/* Keep PMU_BROKEN_BIT sticky. */
967 	uncore_pmu_clear_registered(pmu);
968 }
969 
uncore_free_boxes(struct intel_uncore_pmu * pmu)970 static void uncore_free_boxes(struct intel_uncore_pmu *pmu)
971 {
972 	int die;
973 
974 	for (die = 0; die < uncore_max_dies(); die++)
975 		kfree(pmu->boxes[die]);
976 	kfree(pmu->boxes);
977 }
978 
uncore_type_exit(struct intel_uncore_type * type)979 static void uncore_type_exit(struct intel_uncore_type *type)
980 {
981 	struct intel_uncore_pmu *pmu = type->pmus;
982 	int i;
983 
984 	if (type->cleanup_mapping)
985 		type->cleanup_mapping(type);
986 
987 	if (type->cleanup_extra_boxes)
988 		type->cleanup_extra_boxes(type);
989 
990 	if (pmu) {
991 		for (i = 0; i < type->num_boxes; i++, pmu++) {
992 			uncore_pmu_unregister(pmu);
993 			uncore_free_boxes(pmu);
994 		}
995 		kfree(type->pmus);
996 		type->pmus = NULL;
997 	}
998 
999 	kfree(type->events_group);
1000 	type->events_group = NULL;
1001 }
1002 
uncore_types_exit(struct intel_uncore_type ** types)1003 static void uncore_types_exit(struct intel_uncore_type **types)
1004 {
1005 	for (; *types; types++)
1006 		uncore_type_exit(*types);
1007 }
1008 
uncore_type_init(struct intel_uncore_type * type)1009 static int __init uncore_type_init(struct intel_uncore_type *type)
1010 {
1011 	struct intel_uncore_pmu *pmus;
1012 	size_t size;
1013 	int i, j;
1014 
1015 	pmus = kzalloc_objs(*pmus, type->num_boxes);
1016 	if (!pmus)
1017 		return -ENOMEM;
1018 
1019 	size = uncore_max_dies() * sizeof(struct intel_uncore_box *);
1020 
1021 	for (i = 0; i < type->num_boxes; i++) {
1022 		pmus[i].pmu_idx	= i;
1023 		pmus[i].type	= type;
1024 		pmus[i].boxes	= kzalloc(size, GFP_KERNEL);
1025 		if (!pmus[i].boxes)
1026 			goto err;
1027 	}
1028 
1029 	type->pmus = pmus;
1030 	type->unconstrainted = (struct event_constraint)
1031 		__EVENT_CONSTRAINT(0, (1ULL << type->num_counters) - 1,
1032 				0, type->num_counters, 0, 0);
1033 
1034 	if (type->event_descs) {
1035 		struct {
1036 			struct attribute_group group;
1037 			struct attribute *attrs[];
1038 		} *attr_group;
1039 		for (i = 0; type->event_descs[i].attr.attr.name; i++);
1040 
1041 		attr_group = kzalloc_flex(*attr_group, attrs, i + 1);
1042 		if (!attr_group)
1043 			goto err;
1044 
1045 		attr_group->group.name = "events";
1046 		attr_group->group.attrs = attr_group->attrs;
1047 
1048 		for (j = 0; j < i; j++)
1049 			attr_group->attrs[j] = &type->event_descs[j].attr.attr;
1050 
1051 		type->events_group = &attr_group->group;
1052 	}
1053 
1054 	type->pmu_group = &uncore_pmu_attr_group;
1055 
1056 	if (type->set_mapping)
1057 		type->set_mapping(type);
1058 
1059 	return 0;
1060 
1061 err:
1062 	for (i = 0; i < type->num_boxes; i++)
1063 		kfree(pmus[i].boxes);
1064 	kfree(pmus);
1065 
1066 	return -ENOMEM;
1067 }
1068 
1069 static int __init
uncore_types_init(struct intel_uncore_type ** types)1070 uncore_types_init(struct intel_uncore_type **types)
1071 {
1072 	int ret;
1073 
1074 	for (; *types; types++) {
1075 		ret = uncore_type_init(*types);
1076 		if (ret)
1077 			return ret;
1078 	}
1079 	return 0;
1080 }
1081 
1082 /*
1083  * Get the die information of a PCI device.
1084  * @pdev: The PCI device.
1085  * @die: The die id which the device maps to.
1086  */
uncore_pci_get_dev_die_info(struct pci_dev * pdev,int * die)1087 static int uncore_pci_get_dev_die_info(struct pci_dev *pdev, int *die)
1088 {
1089 	*die = uncore_pcibus_to_dieid(pdev->bus);
1090 	if (*die < 0)
1091 		return -EINVAL;
1092 
1093 	return 0;
1094 }
1095 
1096 static struct intel_uncore_pmu *
uncore_pci_find_dev_pmu_from_types(struct pci_dev * pdev)1097 uncore_pci_find_dev_pmu_from_types(struct pci_dev *pdev)
1098 {
1099 	struct intel_uncore_type **types = uncore_pci_uncores;
1100 	struct intel_uncore_discovery_unit *unit;
1101 	struct intel_uncore_type *type;
1102 	struct rb_node *node;
1103 
1104 	for (; *types; types++) {
1105 		type = *types;
1106 
1107 		for (node = rb_first(type->boxes); node; node = rb_next(node)) {
1108 			unit = rb_entry(node, struct intel_uncore_discovery_unit, node);
1109 			if (pdev->devfn == UNCORE_DISCOVERY_PCI_DEVFN(unit->addr) &&
1110 			    pdev->bus->number == UNCORE_DISCOVERY_PCI_BUS(unit->addr) &&
1111 			    pci_domain_nr(pdev->bus) == UNCORE_DISCOVERY_PCI_DOMAIN(unit->addr))
1112 				return &type->pmus[unit->pmu_idx];
1113 		}
1114 	}
1115 
1116 	return NULL;
1117 }
1118 
1119 /*
1120  * Find the PMU of a PCI device.
1121  * @pdev: The PCI device.
1122  * @ids: The ID table of the available PCI devices with a PMU.
1123  *       If NULL, search the whole uncore_pci_uncores.
1124  */
1125 static struct intel_uncore_pmu *
uncore_pci_find_dev_pmu(struct pci_dev * pdev,const struct pci_device_id * ids)1126 uncore_pci_find_dev_pmu(struct pci_dev *pdev, const struct pci_device_id *ids)
1127 {
1128 	struct intel_uncore_pmu *pmu = NULL;
1129 	struct intel_uncore_type *type;
1130 	kernel_ulong_t data;
1131 	unsigned int devfn;
1132 
1133 	if (!ids)
1134 		return uncore_pci_find_dev_pmu_from_types(pdev);
1135 
1136 	while (ids && ids->vendor) {
1137 		if ((ids->vendor == pdev->vendor) &&
1138 		    (ids->device == pdev->device)) {
1139 			data = ids->driver_data;
1140 			devfn = PCI_DEVFN(UNCORE_PCI_DEV_DEV(data),
1141 					  UNCORE_PCI_DEV_FUNC(data));
1142 			if (devfn == pdev->devfn) {
1143 				type = uncore_pci_uncores[UNCORE_PCI_DEV_TYPE(data)];
1144 				pmu = &type->pmus[UNCORE_PCI_DEV_IDX(data)];
1145 				break;
1146 			}
1147 		}
1148 		ids++;
1149 	}
1150 	return pmu;
1151 }
1152 
uncore_box_setup(struct intel_uncore_pmu * pmu,struct intel_uncore_box * box)1153 static int uncore_box_setup(struct intel_uncore_pmu *pmu,
1154 			    struct intel_uncore_box *box)
1155 {
1156 	int ret;
1157 
1158 	if (uncore_pmu_broken(pmu))
1159 		return -ENODEV;
1160 
1161 	ret = uncore_box_init(box);
1162 	if (ret)
1163 		goto err;
1164 
1165 	/* First active box registers the pmu. */
1166 	if (atomic_inc_return(&pmu->activeboxes) > 1)
1167 		return 0;
1168 
1169 	ret = uncore_pmu_register(pmu);
1170 	if (ret) {
1171 		atomic_dec(&pmu->activeboxes);
1172 		goto err;
1173 	}
1174 
1175 	return 0;
1176 err:
1177 	/*
1178 	 * If any box fails, mark the per-package PMU as broken regardless of
1179 	 * whether it was registered or not.
1180 	 *
1181 	 * Don't decrement refcnt to avoid other in-die CPUs from trying to set
1182 	 * up the PMU box again.
1183 	 *
1184 	 * Don't kfree box; MSR and MMIO boxes are freed at module exit only.
1185 	 */
1186 	uncore_pmu_set_broken(pmu);
1187 	uncore_box_exit(box);
1188 	return ret;
1189 }
1190 
1191 /*
1192  * Register the PMU for a PCI device
1193  * @pdev: The PCI device.
1194  * @type: The corresponding PMU type of the device.
1195  * @pmu: The corresponding PMU of the device.
1196  * @die: The die id which the device maps to.
1197  */
uncore_pci_pmu_register(struct pci_dev * pdev,struct intel_uncore_type * type,struct intel_uncore_pmu * pmu,int die)1198 static int uncore_pci_pmu_register(struct pci_dev *pdev,
1199 				   struct intel_uncore_type *type,
1200 				   struct intel_uncore_pmu *pmu,
1201 				   int die)
1202 {
1203 	struct intel_uncore_box *box;
1204 	int ret;
1205 
1206 	if (WARN_ON_ONCE(pmu->boxes[die] != NULL))
1207 		return -EINVAL;
1208 
1209 	box = uncore_alloc_box(type, NUMA_NO_NODE);
1210 	if (!box) {
1211 		uncore_pmu_set_broken(pmu);
1212 		return -ENOMEM;
1213 	}
1214 
1215 	atomic_inc(&box->refcnt);
1216 	box->dieid = die;
1217 	box->pci_dev = pdev;
1218 	box->pmu = pmu;
1219 
1220 	ret = uncore_box_setup(pmu, box);
1221 	if (!ret)
1222 		pmu->boxes[die] = box;
1223 	else
1224 		kfree(box);
1225 
1226 	return ret;
1227 }
1228 
1229 /*
1230  * add a pci uncore device
1231  */
uncore_pci_probe(struct pci_dev * pdev,const struct pci_device_id * id)1232 static int uncore_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1233 {
1234 	struct intel_uncore_type *type;
1235 	struct intel_uncore_pmu *pmu = NULL;
1236 	int die, ret;
1237 
1238 	ret = uncore_pci_get_dev_die_info(pdev, &die);
1239 	if (ret)
1240 		return ret;
1241 
1242 	if (UNCORE_PCI_DEV_TYPE(id->driver_data) == UNCORE_EXTRA_PCI_DEV) {
1243 		int idx = UNCORE_PCI_DEV_IDX(id->driver_data);
1244 
1245 		uncore_extra_pci_dev[die].dev[idx] = pdev;
1246 		pci_set_drvdata(pdev, NULL);
1247 		return 0;
1248 	}
1249 
1250 	type = uncore_pci_uncores[UNCORE_PCI_DEV_TYPE(id->driver_data)];
1251 
1252 	/*
1253 	 * Some platforms, e.g.  Knights Landing, use a common PCI device ID
1254 	 * for multiple instances of an uncore PMU device type. We should check
1255 	 * PCI slot and func to indicate the uncore box.
1256 	 */
1257 	if (id->driver_data & ~0xffff) {
1258 		struct pci_driver *pci_drv = to_pci_driver(pdev->dev.driver);
1259 
1260 		pmu = uncore_pci_find_dev_pmu(pdev, pci_drv->id_table);
1261 		if (pmu == NULL)
1262 			return -ENODEV;
1263 	} else {
1264 		/*
1265 		 * for performance monitoring unit with multiple boxes,
1266 		 * each box has a different function id.
1267 		 */
1268 		pmu = &type->pmus[UNCORE_PCI_DEV_IDX(id->driver_data)];
1269 	}
1270 
1271 	ret = uncore_pci_pmu_register(pdev, type, pmu, die);
1272 
1273 	pci_set_drvdata(pdev, pmu->boxes[die]);
1274 
1275 	return ret;
1276 }
1277 
1278 /*
1279  * Unregister the PMU of a PCI device
1280  * @pmu: The corresponding PMU is unregistered.
1281  * @die: The die id which the device maps to.
1282  */
uncore_pci_pmu_unregister(struct intel_uncore_pmu * pmu,int die)1283 static void uncore_pci_pmu_unregister(struct intel_uncore_pmu *pmu, int die)
1284 {
1285 	struct intel_uncore_box *box = pmu->boxes[die];
1286 
1287 	if (!box)
1288 		return;
1289 
1290 	pmu->boxes[die] = NULL;
1291 	if (atomic_dec_return(&pmu->activeboxes) == 0)
1292 		uncore_pmu_unregister(pmu);
1293 	if (atomic_dec_return(&box->refcnt) == 0) {
1294 		uncore_box_exit(box);
1295 		kfree(box);
1296 	}
1297 }
1298 
uncore_pci_remove(struct pci_dev * pdev)1299 static void uncore_pci_remove(struct pci_dev *pdev)
1300 {
1301 	struct intel_uncore_box *box;
1302 	struct intel_uncore_pmu *pmu;
1303 	int i, die;
1304 
1305 	if (uncore_pci_get_dev_die_info(pdev, &die))
1306 		return;
1307 
1308 	box = pci_get_drvdata(pdev);
1309 	if (!box) {
1310 		for (i = 0; i < UNCORE_EXTRA_PCI_DEV_MAX; i++) {
1311 			if (uncore_extra_pci_dev[die].dev[i] == pdev) {
1312 				uncore_extra_pci_dev[die].dev[i] = NULL;
1313 				break;
1314 			}
1315 		}
1316 		return;
1317 	}
1318 
1319 	pmu = box->pmu;
1320 
1321 	pci_set_drvdata(pdev, NULL);
1322 
1323 	uncore_pci_pmu_unregister(pmu, die);
1324 }
1325 
uncore_bus_notify(struct notifier_block * nb,unsigned long action,void * data,const struct pci_device_id * ids)1326 static int uncore_bus_notify(struct notifier_block *nb,
1327 			     unsigned long action, void *data,
1328 			     const struct pci_device_id *ids)
1329 {
1330 	struct device *dev = data;
1331 	struct pci_dev *pdev = to_pci_dev(dev);
1332 	struct intel_uncore_pmu *pmu;
1333 	int die;
1334 
1335 	/* Unregister the PMU when the device is going to be deleted. */
1336 	if (action != BUS_NOTIFY_DEL_DEVICE)
1337 		return NOTIFY_DONE;
1338 
1339 	pmu = uncore_pci_find_dev_pmu(pdev, ids);
1340 	if (!pmu)
1341 		return NOTIFY_DONE;
1342 
1343 	if (uncore_pci_get_dev_die_info(pdev, &die))
1344 		return NOTIFY_DONE;
1345 
1346 	uncore_pci_pmu_unregister(pmu, die);
1347 
1348 	return NOTIFY_OK;
1349 }
1350 
uncore_pci_sub_bus_notify(struct notifier_block * nb,unsigned long action,void * data)1351 static int uncore_pci_sub_bus_notify(struct notifier_block *nb,
1352 				     unsigned long action, void *data)
1353 {
1354 	return uncore_bus_notify(nb, action, data,
1355 				 uncore_pci_sub_driver->id_table);
1356 }
1357 
1358 static struct notifier_block uncore_pci_sub_notifier = {
1359 	.notifier_call = uncore_pci_sub_bus_notify,
1360 };
1361 
uncore_pci_sub_driver_init(void)1362 static void uncore_pci_sub_driver_init(void)
1363 {
1364 	const struct pci_device_id *ids = uncore_pci_sub_driver->id_table;
1365 	struct intel_uncore_type *type;
1366 	struct intel_uncore_pmu *pmu;
1367 	struct pci_dev *pci_sub_dev;
1368 	bool notify = false;
1369 	unsigned int devfn;
1370 	int die;
1371 
1372 	while (ids && ids->vendor) {
1373 		pci_sub_dev = NULL;
1374 		type = uncore_pci_uncores[UNCORE_PCI_DEV_TYPE(ids->driver_data)];
1375 		/*
1376 		 * Search the available device, and register the
1377 		 * corresponding PMU.
1378 		 */
1379 		while ((pci_sub_dev = pci_get_device(PCI_VENDOR_ID_INTEL,
1380 						     ids->device, pci_sub_dev))) {
1381 			devfn = PCI_DEVFN(UNCORE_PCI_DEV_DEV(ids->driver_data),
1382 					  UNCORE_PCI_DEV_FUNC(ids->driver_data));
1383 			if (devfn != pci_sub_dev->devfn)
1384 				continue;
1385 
1386 			pmu = &type->pmus[UNCORE_PCI_DEV_IDX(ids->driver_data)];
1387 
1388 			if (uncore_pci_get_dev_die_info(pci_sub_dev, &die))
1389 				continue;
1390 
1391 			if (!uncore_pci_pmu_register(pci_sub_dev, type, pmu,
1392 						     die))
1393 				notify = true;
1394 		}
1395 		ids++;
1396 	}
1397 
1398 	if (notify && bus_register_notifier(&pci_bus_type, &uncore_pci_sub_notifier))
1399 		notify = false;
1400 
1401 	if (!notify)
1402 		uncore_pci_sub_driver = NULL;
1403 }
1404 
uncore_pci_bus_notify(struct notifier_block * nb,unsigned long action,void * data)1405 static int uncore_pci_bus_notify(struct notifier_block *nb,
1406 				     unsigned long action, void *data)
1407 {
1408 	return uncore_bus_notify(nb, action, data, NULL);
1409 }
1410 
1411 static struct notifier_block uncore_pci_notifier = {
1412 	.notifier_call = uncore_pci_bus_notify,
1413 };
1414 
1415 
uncore_pci_pmus_register(void)1416 static void uncore_pci_pmus_register(void)
1417 {
1418 	struct intel_uncore_type **types = uncore_pci_uncores;
1419 	struct intel_uncore_discovery_unit *unit;
1420 	struct intel_uncore_type *type;
1421 	struct intel_uncore_pmu *pmu;
1422 	struct rb_node *node;
1423 	struct pci_dev *pdev;
1424 
1425 	for (; *types; types++) {
1426 		type = *types;
1427 
1428 		for (node = rb_first(type->boxes); node; node = rb_next(node)) {
1429 			unit = rb_entry(node, struct intel_uncore_discovery_unit, node);
1430 			pdev = pci_get_domain_bus_and_slot(UNCORE_DISCOVERY_PCI_DOMAIN(unit->addr),
1431 							   UNCORE_DISCOVERY_PCI_BUS(unit->addr),
1432 							   UNCORE_DISCOVERY_PCI_DEVFN(unit->addr));
1433 
1434 			if (!pdev)
1435 				continue;
1436 			pmu = &type->pmus[unit->pmu_idx];
1437 			uncore_pci_pmu_register(pdev, type, pmu, unit->die);
1438 		}
1439 	}
1440 
1441 	bus_register_notifier(&pci_bus_type, &uncore_pci_notifier);
1442 }
1443 
uncore_pci_init(void)1444 static int __init uncore_pci_init(void)
1445 {
1446 	size_t size;
1447 	int ret;
1448 
1449 	size = uncore_max_dies() * sizeof(struct pci_extra_dev);
1450 	uncore_extra_pci_dev = kzalloc(size, GFP_KERNEL);
1451 	if (!uncore_extra_pci_dev) {
1452 		ret = -ENOMEM;
1453 		goto err;
1454 	}
1455 
1456 	ret = uncore_types_init(uncore_pci_uncores);
1457 	if (ret)
1458 		goto errtype;
1459 
1460 	if (uncore_pci_driver) {
1461 		uncore_pci_driver->probe = uncore_pci_probe;
1462 		uncore_pci_driver->remove = uncore_pci_remove;
1463 
1464 		ret = pci_register_driver(uncore_pci_driver);
1465 		if (ret)
1466 			goto errtype;
1467 	} else
1468 		uncore_pci_pmus_register();
1469 
1470 	if (uncore_pci_sub_driver)
1471 		uncore_pci_sub_driver_init();
1472 
1473 	pcidrv_registered = true;
1474 	return 0;
1475 
1476 errtype:
1477 	uncore_types_exit(uncore_pci_uncores);
1478 	kfree(uncore_extra_pci_dev);
1479 	uncore_extra_pci_dev = NULL;
1480 	uncore_free_pcibus_map();
1481 err:
1482 	uncore_pci_uncores = empty_uncore;
1483 	return ret;
1484 }
1485 
uncore_pci_exit(void)1486 static void uncore_pci_exit(void)
1487 {
1488 	if (pcidrv_registered) {
1489 		pcidrv_registered = false;
1490 		if (uncore_pci_sub_driver)
1491 			bus_unregister_notifier(&pci_bus_type, &uncore_pci_sub_notifier);
1492 		if (uncore_pci_driver)
1493 			pci_unregister_driver(uncore_pci_driver);
1494 		else
1495 			bus_unregister_notifier(&pci_bus_type, &uncore_pci_notifier);
1496 		uncore_types_exit(uncore_pci_uncores);
1497 		kfree(uncore_extra_pci_dev);
1498 		uncore_free_pcibus_map();
1499 	}
1500 }
1501 
uncore_die_has_box(struct intel_uncore_type * type,int die,unsigned int pmu_idx)1502 static bool uncore_die_has_box(struct intel_uncore_type *type,
1503 			       int die, unsigned int pmu_idx)
1504 {
1505 	if (!type->boxes)
1506 		return true;
1507 
1508 	if (intel_uncore_find_discovery_unit_id(type->boxes, die, pmu_idx) < 0)
1509 		return false;
1510 
1511 	return true;
1512 }
1513 
uncore_change_type_ctx(struct intel_uncore_type * type,int old_cpu,int new_cpu)1514 static void uncore_change_type_ctx(struct intel_uncore_type *type, int old_cpu,
1515 				   int new_cpu)
1516 {
1517 	struct intel_uncore_pmu *pmu = type->pmus;
1518 	struct intel_uncore_box *box;
1519 	int i, die;
1520 
1521 	die = topology_logical_die_id(old_cpu < 0 ? new_cpu : old_cpu);
1522 	for (i = 0; i < type->num_boxes; i++, pmu++) {
1523 		box = pmu->boxes[die];
1524 		if (!box)
1525 			continue;
1526 
1527 		if (old_cpu < 0) {
1528 			WARN_ON_ONCE(box->cpu != -1);
1529 			if (uncore_die_has_box(type, die, pmu->pmu_idx) &&
1530 			    !uncore_pmu_broken(pmu)) {
1531 				box->cpu = new_cpu;
1532 				cpumask_set_cpu(new_cpu, &pmu->cpu_mask);
1533 			}
1534 			continue;
1535 		}
1536 
1537 		WARN_ON_ONCE(box->cpu != -1 && box->cpu != old_cpu);
1538 		cpumask_clear_cpu(old_cpu, &pmu->cpu_mask);
1539 		if (new_cpu < 0) {
1540 			box->cpu = -1;
1541 			continue;
1542 		}
1543 
1544 		/* An inactive box doesn't need migration. */
1545 		if (box->cpu == -1)
1546 			continue;
1547 		uncore_pmu_cancel_hrtimer(box);
1548 		perf_pmu_migrate_context(&pmu->pmu, old_cpu, new_cpu);
1549 		box->cpu = new_cpu;
1550 		cpumask_set_cpu(new_cpu, &pmu->cpu_mask);
1551 	}
1552 }
1553 
uncore_change_context(struct intel_uncore_type ** uncores,int old_cpu,int new_cpu)1554 static void uncore_change_context(struct intel_uncore_type **uncores,
1555 				  int old_cpu, int new_cpu)
1556 {
1557 	for (; *uncores; uncores++)
1558 		uncore_change_type_ctx(*uncores, old_cpu, new_cpu);
1559 }
1560 
uncore_box_unref(struct intel_uncore_type ** types,int die)1561 static void uncore_box_unref(struct intel_uncore_type **types, int die)
1562 {
1563 	struct intel_uncore_type *type;
1564 	struct intel_uncore_pmu *pmu;
1565 	struct intel_uncore_box *box;
1566 	int i;
1567 
1568 	for (; *types; types++) {
1569 		type = *types;
1570 		pmu = type->pmus;
1571 		for (i = 0; i < type->num_boxes; i++, pmu++) {
1572 			box = pmu->boxes[die];
1573 			if (box && box->cpu >= 0 &&
1574 			    atomic_dec_return(&box->refcnt) == 0) {
1575 				if (uncore_box_active(box) &&
1576 				    atomic_dec_return(&pmu->activeboxes) == 0)
1577 					uncore_pmu_unregister(pmu);
1578 				uncore_box_exit(box);
1579 			}
1580 		}
1581 	}
1582 }
1583 
uncore_event_cpu_offline(unsigned int cpu)1584 static int uncore_event_cpu_offline(unsigned int cpu)
1585 {
1586 	int die, target;
1587 
1588 	/* Clear the references */
1589 	die = topology_logical_die_id(cpu);
1590 	uncore_box_unref(uncore_msr_uncores, die);
1591 	uncore_box_unref(uncore_mmio_uncores, die);
1592 
1593 	/* Check if exiting cpu is used for collecting uncore events */
1594 	if (!cpumask_test_and_clear_cpu(cpu, &uncore_cpu_mask))
1595 		return 0;
1596 
1597 	/* Find a new cpu to collect uncore events */
1598 	target = cpumask_any_but(topology_die_cpumask(cpu), cpu);
1599 
1600 	/* Migrate uncore events to the new target */
1601 	if (target < nr_cpu_ids)
1602 		cpumask_set_cpu(target, &uncore_cpu_mask);
1603 	else
1604 		target = -1;
1605 
1606 	uncore_change_context(uncore_msr_uncores, cpu, target);
1607 	uncore_change_context(uncore_mmio_uncores, cpu, target);
1608 	uncore_change_context(uncore_pci_uncores, cpu, target);
1609 	return 0;
1610 }
1611 
allocate_boxes(struct intel_uncore_type ** types,unsigned int die,unsigned int cpu)1612 static void allocate_boxes(struct intel_uncore_type **types,
1613 			 unsigned int die, unsigned int cpu)
1614 {
1615 	struct intel_uncore_box *box, *tmp;
1616 	struct intel_uncore_type *type;
1617 	struct intel_uncore_pmu *pmu;
1618 	LIST_HEAD(allocated);
1619 	int i;
1620 
1621 	/* Try to allocate all required boxes */
1622 	for (; *types; types++) {
1623 		type = *types;
1624 		pmu = type->pmus;
1625 		for (i = 0; i < type->num_boxes; i++, pmu++) {
1626 			if (pmu->boxes[die] || uncore_pmu_broken(pmu))
1627 				continue;
1628 			box = uncore_alloc_box(type, cpu_to_node(cpu));
1629 			if (!box) {
1630 				uncore_pmu_set_broken(pmu);
1631 				goto cleanup;
1632 			}
1633 			box->pmu = pmu;
1634 			box->dieid = die;
1635 			list_add(&box->active_list, &allocated);
1636 		}
1637 	}
1638 	/* Install them in the pmus */
1639 	list_for_each_entry_safe(box, tmp, &allocated, active_list) {
1640 		list_del_init(&box->active_list);
1641 		box->pmu->boxes[die] = box;
1642 	}
1643 	return;
1644 
1645 cleanup:
1646 	list_for_each_entry_safe(box, tmp, &allocated, active_list) {
1647 		list_del_init(&box->active_list);
1648 		kfree(box);
1649 	}
1650 }
1651 
uncore_box_ref(struct intel_uncore_type ** types,int die,unsigned int cpu)1652 static int uncore_box_ref(struct intel_uncore_type **types,
1653 			  int die, unsigned int cpu)
1654 {
1655 	struct intel_uncore_type *type;
1656 	struct intel_uncore_pmu *pmu;
1657 	struct intel_uncore_box *box;
1658 	int i;
1659 
1660 	for (; *types; types++) {
1661 		type = *types;
1662 		pmu = type->pmus;
1663 		for (i = 0; i < type->num_boxes; i++, pmu++) {
1664 			box = pmu->boxes[die];
1665 			if (box && box->cpu >= 0 && atomic_inc_return(&box->refcnt) == 1)
1666 				uncore_box_setup(pmu, box);
1667 		}
1668 	}
1669 	return 0;
1670 }
1671 
uncore_event_cpu_online(unsigned int cpu)1672 static int uncore_event_cpu_online(unsigned int cpu)
1673 {
1674 	int die, target;
1675 
1676 	die = topology_logical_die_id(cpu);
1677 	allocate_boxes(uncore_msr_uncores, die, cpu);
1678 	allocate_boxes(uncore_mmio_uncores, die, cpu);
1679 
1680 	/*
1681 	 * Check if there is an online cpu in the package
1682 	 * which collects uncore events already.
1683 	 */
1684 	target = cpumask_any_and(&uncore_cpu_mask, topology_die_cpumask(cpu));
1685 	if (target >= nr_cpu_ids) {
1686 		cpumask_set_cpu(cpu, &uncore_cpu_mask);
1687 		uncore_change_context(uncore_msr_uncores, -1, cpu);
1688 		uncore_change_context(uncore_mmio_uncores, -1, cpu);
1689 		uncore_change_context(uncore_pci_uncores, -1, cpu);
1690 	}
1691 
1692 	uncore_box_ref(uncore_msr_uncores, die, cpu);
1693 	uncore_box_ref(uncore_mmio_uncores, die, cpu);
1694 	return 0;
1695 }
1696 
uncore_pmu_types_init(struct intel_uncore_type ** types)1697 static int __init uncore_pmu_types_init(struct intel_uncore_type **types)
1698 {
1699 	int ret = uncore_types_init(types);
1700 	if (ret)
1701 		uncore_types_exit(types);
1702 
1703 	return ret;
1704 }
1705 
uncore_mmio_global_init(int die,u64 ctl)1706 static int uncore_mmio_global_init(int die, u64 ctl)
1707 {
1708 	void __iomem *io_addr;
1709 
1710 	io_addr = ioremap(ctl, sizeof(ctl));
1711 	if (!io_addr)
1712 		return -ENOMEM;
1713 
1714 	/* Clear freeze bit (0) to enable all counters. */
1715 	writel(0, io_addr);
1716 
1717 	iounmap(io_addr);
1718 	return 0;
1719 }
1720 
uncore_msr_global_init(int die,u64 msr)1721 static int uncore_msr_global_init(int die, u64 msr)
1722 {
1723 	int cpu = uncore_die_to_cpu(die);
1724 
1725 	if (cpu == -1)
1726 		return -ENODEV;
1727 
1728 	return wrmsrq_on_cpu(cpu, msr, 0);
1729 }
1730 
1731 static const struct uncore_plat_init nhm_uncore_init __initconst = {
1732 	.cpu_init = nhm_uncore_cpu_init,
1733 };
1734 
1735 static const struct uncore_plat_init snb_uncore_init __initconst = {
1736 	.cpu_init = snb_uncore_cpu_init,
1737 	.pci_init = snb_uncore_pci_init,
1738 };
1739 
1740 static const struct uncore_plat_init ivb_uncore_init __initconst = {
1741 	.cpu_init = snb_uncore_cpu_init,
1742 	.pci_init = ivb_uncore_pci_init,
1743 };
1744 
1745 static const struct uncore_plat_init hsw_uncore_init __initconst = {
1746 	.cpu_init = snb_uncore_cpu_init,
1747 	.pci_init = hsw_uncore_pci_init,
1748 };
1749 
1750 static const struct uncore_plat_init bdw_uncore_init __initconst = {
1751 	.cpu_init = snb_uncore_cpu_init,
1752 	.pci_init = bdw_uncore_pci_init,
1753 };
1754 
1755 static const struct uncore_plat_init snbep_uncore_init __initconst = {
1756 	.cpu_init = snbep_uncore_cpu_init,
1757 	.pci_init = snbep_uncore_pci_init,
1758 };
1759 
1760 static const struct uncore_plat_init nhmex_uncore_init __initconst = {
1761 	.cpu_init = nhmex_uncore_cpu_init,
1762 };
1763 
1764 static const struct uncore_plat_init ivbep_uncore_init __initconst = {
1765 	.cpu_init = ivbep_uncore_cpu_init,
1766 	.pci_init = ivbep_uncore_pci_init,
1767 };
1768 
1769 static const struct uncore_plat_init hswep_uncore_init __initconst = {
1770 	.cpu_init = hswep_uncore_cpu_init,
1771 	.pci_init = hswep_uncore_pci_init,
1772 };
1773 
1774 static const struct uncore_plat_init bdx_uncore_init __initconst = {
1775 	.cpu_init = bdx_uncore_cpu_init,
1776 	.pci_init = bdx_uncore_pci_init,
1777 };
1778 
1779 static const struct uncore_plat_init knl_uncore_init __initconst = {
1780 	.cpu_init = knl_uncore_cpu_init,
1781 	.pci_init = knl_uncore_pci_init,
1782 };
1783 
1784 static const struct uncore_plat_init skl_uncore_init __initconst = {
1785 	.cpu_init = skl_uncore_cpu_init,
1786 	.pci_init = skl_uncore_pci_init,
1787 };
1788 
1789 static const struct uncore_plat_init skx_uncore_init __initconst = {
1790 	.cpu_init = skx_uncore_cpu_init,
1791 	.pci_init = skx_uncore_pci_init,
1792 };
1793 
1794 static const struct uncore_plat_init icl_uncore_init __initconst = {
1795 	.cpu_init = icl_uncore_cpu_init,
1796 	.pci_init = skl_uncore_pci_init,
1797 };
1798 
1799 static const struct uncore_plat_init tgl_uncore_init __initconst = {
1800 	.cpu_init = tgl_uncore_cpu_init,
1801 	.mmio_init = tgl_uncore_mmio_init,
1802 };
1803 
1804 static const struct uncore_plat_init tgl_l_uncore_init __initconst = {
1805 	.cpu_init = tgl_uncore_cpu_init,
1806 	.mmio_init = tgl_l_uncore_mmio_init,
1807 };
1808 
1809 static const struct uncore_plat_init rkl_uncore_init __initconst = {
1810 	.cpu_init = tgl_uncore_cpu_init,
1811 	.pci_init = skl_uncore_pci_init,
1812 };
1813 
1814 static const struct uncore_plat_init adl_uncore_init __initconst = {
1815 	.cpu_init = adl_uncore_cpu_init,
1816 	.mmio_init = adl_uncore_mmio_init,
1817 };
1818 
1819 static const struct uncore_plat_init mtl_uncore_init __initconst = {
1820 	.cpu_init = mtl_uncore_cpu_init,
1821 	.mmio_init = adl_uncore_mmio_init,
1822 };
1823 
1824 static const struct uncore_plat_init lnl_uncore_init __initconst = {
1825 	.cpu_init = lnl_uncore_cpu_init,
1826 	.mmio_init = lnl_uncore_mmio_init,
1827 };
1828 
1829 static const struct uncore_plat_init ptl_uncore_init __initconst = {
1830 	.cpu_init = ptl_uncore_cpu_init,
1831 	.mmio_init = ptl_uncore_mmio_init,
1832 	.domain[0].discovery_base = UNCORE_DISCOVERY_MSR,
1833 	.domain[0].global_init = uncore_mmio_global_init,
1834 };
1835 
1836 static const struct uncore_plat_init nvl_uncore_init __initconst = {
1837 	.cpu_init = nvl_uncore_cpu_init,
1838 	.mmio_init = ptl_uncore_mmio_init,
1839 	.domain[0].discovery_base = PACKAGE_UNCORE_DISCOVERY_MSR,
1840 	.domain[0].global_init = uncore_mmio_global_init,
1841 };
1842 
1843 static const struct uncore_plat_init icx_uncore_init __initconst = {
1844 	.cpu_init = icx_uncore_cpu_init,
1845 	.pci_init = icx_uncore_pci_init,
1846 	.mmio_init = icx_uncore_mmio_init,
1847 };
1848 
1849 static const struct uncore_plat_init snr_uncore_init __initconst = {
1850 	.cpu_init = snr_uncore_cpu_init,
1851 	.pci_init = snr_uncore_pci_init,
1852 	.mmio_init = snr_uncore_mmio_init,
1853 };
1854 
1855 static const struct uncore_plat_init spr_uncore_init __initconst = {
1856 	.cpu_init = spr_uncore_cpu_init,
1857 	.pci_init = spr_uncore_pci_init,
1858 	.mmio_init = spr_uncore_mmio_init,
1859 	.domain[0].base_is_pci = true,
1860 	.domain[0].discovery_base = UNCORE_DISCOVERY_TABLE_DEVICE,
1861 	.domain[0].units_ignore = spr_uncore_units_ignore,
1862 };
1863 
1864 static const struct uncore_plat_init gnr_uncore_init __initconst = {
1865 	.cpu_init = gnr_uncore_cpu_init,
1866 	.pci_init = gnr_uncore_pci_init,
1867 	.mmio_init = gnr_uncore_mmio_init,
1868 	.domain[0].base_is_pci = true,
1869 	.domain[0].discovery_base = UNCORE_DISCOVERY_TABLE_DEVICE,
1870 	.domain[0].units_ignore = gnr_uncore_units_ignore,
1871 	.domain[0].global_init = uncore_msr_global_init,
1872 };
1873 
1874 static const struct uncore_plat_init dmr_uncore_init __initconst = {
1875 	.pci_init = dmr_uncore_pci_init,
1876 	.mmio_init = dmr_uncore_mmio_init,
1877 	.domain[0].base_is_pci = true,
1878 	.domain[0].discovery_base = DMR_UNCORE_DISCOVERY_TABLE_DEVICE,
1879 	.domain[0].units_ignore = dmr_uncore_imh_units_ignore,
1880 	.domain[1].discovery_base = CBB_UNCORE_DISCOVERY_MSR,
1881 	.domain[1].units_ignore = dmr_uncore_cbb_units_ignore,
1882 	.domain[1].global_init = uncore_mmio_global_init,
1883 };
1884 
1885 static const struct uncore_plat_init generic_uncore_init __initconst = {
1886 	.cpu_init = intel_uncore_generic_uncore_cpu_init,
1887 	.pci_init = intel_uncore_generic_uncore_pci_init,
1888 	.mmio_init = intel_uncore_generic_uncore_mmio_init,
1889 	.domain[0].base_is_pci = true,
1890 	.domain[0].discovery_base = PCI_ANY_ID,
1891 	.domain[1].discovery_base = UNCORE_DISCOVERY_MSR,
1892 };
1893 
1894 static const struct x86_cpu_id intel_uncore_match[] __initconst = {
1895 	X86_MATCH_VFM(INTEL_NEHALEM_EP,		&nhm_uncore_init),
1896 	X86_MATCH_VFM(INTEL_NEHALEM,		&nhm_uncore_init),
1897 	X86_MATCH_VFM(INTEL_WESTMERE,		&nhm_uncore_init),
1898 	X86_MATCH_VFM(INTEL_WESTMERE_EP,	&nhm_uncore_init),
1899 	X86_MATCH_VFM(INTEL_SANDYBRIDGE,	&snb_uncore_init),
1900 	X86_MATCH_VFM(INTEL_IVYBRIDGE,		&ivb_uncore_init),
1901 	X86_MATCH_VFM(INTEL_HASWELL,		&hsw_uncore_init),
1902 	X86_MATCH_VFM(INTEL_HASWELL_L,		&hsw_uncore_init),
1903 	X86_MATCH_VFM(INTEL_HASWELL_G,		&hsw_uncore_init),
1904 	X86_MATCH_VFM(INTEL_BROADWELL,		&bdw_uncore_init),
1905 	X86_MATCH_VFM(INTEL_BROADWELL_G,	&bdw_uncore_init),
1906 	X86_MATCH_VFM(INTEL_SANDYBRIDGE_X,	&snbep_uncore_init),
1907 	X86_MATCH_VFM(INTEL_NEHALEM_EX,		&nhmex_uncore_init),
1908 	X86_MATCH_VFM(INTEL_WESTMERE_EX,	&nhmex_uncore_init),
1909 	X86_MATCH_VFM(INTEL_IVYBRIDGE_X,	&ivbep_uncore_init),
1910 	X86_MATCH_VFM(INTEL_HASWELL_X,		&hswep_uncore_init),
1911 	X86_MATCH_VFM(INTEL_BROADWELL_X,	&bdx_uncore_init),
1912 	X86_MATCH_VFM(INTEL_BROADWELL_D,	&bdx_uncore_init),
1913 	X86_MATCH_VFM(INTEL_XEON_PHI_KNL,	&knl_uncore_init),
1914 	X86_MATCH_VFM(INTEL_XEON_PHI_KNM,	&knl_uncore_init),
1915 	X86_MATCH_VFM(INTEL_SKYLAKE,		&skl_uncore_init),
1916 	X86_MATCH_VFM(INTEL_SKYLAKE_L,		&skl_uncore_init),
1917 	X86_MATCH_VFM(INTEL_SKYLAKE_X,		&skx_uncore_init),
1918 	X86_MATCH_VFM(INTEL_KABYLAKE_L,		&skl_uncore_init),
1919 	X86_MATCH_VFM(INTEL_KABYLAKE,		&skl_uncore_init),
1920 	X86_MATCH_VFM(INTEL_COMETLAKE_L,	&skl_uncore_init),
1921 	X86_MATCH_VFM(INTEL_COMETLAKE,		&skl_uncore_init),
1922 	X86_MATCH_VFM(INTEL_ICELAKE_L,		&icl_uncore_init),
1923 	X86_MATCH_VFM(INTEL_ICELAKE_NNPI,	&icl_uncore_init),
1924 	X86_MATCH_VFM(INTEL_ICELAKE,		&icl_uncore_init),
1925 	X86_MATCH_VFM(INTEL_ICELAKE_D,		&icx_uncore_init),
1926 	X86_MATCH_VFM(INTEL_ICELAKE_X,		&icx_uncore_init),
1927 	X86_MATCH_VFM(INTEL_TIGERLAKE_L,	&tgl_l_uncore_init),
1928 	X86_MATCH_VFM(INTEL_TIGERLAKE,		&tgl_uncore_init),
1929 	X86_MATCH_VFM(INTEL_ROCKETLAKE,		&rkl_uncore_init),
1930 	X86_MATCH_VFM(INTEL_ALDERLAKE,		&adl_uncore_init),
1931 	X86_MATCH_VFM(INTEL_ALDERLAKE_L,	&adl_uncore_init),
1932 	X86_MATCH_VFM(INTEL_RAPTORLAKE,		&adl_uncore_init),
1933 	X86_MATCH_VFM(INTEL_RAPTORLAKE_P,	&adl_uncore_init),
1934 	X86_MATCH_VFM(INTEL_RAPTORLAKE_S,	&adl_uncore_init),
1935 	X86_MATCH_VFM(INTEL_METEORLAKE,		&mtl_uncore_init),
1936 	X86_MATCH_VFM(INTEL_METEORLAKE_L,	&mtl_uncore_init),
1937 	X86_MATCH_VFM(INTEL_ARROWLAKE,		&mtl_uncore_init),
1938 	X86_MATCH_VFM(INTEL_ARROWLAKE_U,	&mtl_uncore_init),
1939 	X86_MATCH_VFM(INTEL_ARROWLAKE_H,	&mtl_uncore_init),
1940 	X86_MATCH_VFM(INTEL_LUNARLAKE_M,	&lnl_uncore_init),
1941 	X86_MATCH_VFM(INTEL_PANTHERLAKE_L,	&ptl_uncore_init),
1942 	X86_MATCH_VFM(INTEL_WILDCATLAKE_L,	&ptl_uncore_init),
1943 	X86_MATCH_VFM(INTEL_NOVALAKE,		&nvl_uncore_init),
1944 	X86_MATCH_VFM(INTEL_NOVALAKE_L,		&nvl_uncore_init),
1945 	X86_MATCH_VFM(INTEL_SAPPHIRERAPIDS_X,	&spr_uncore_init),
1946 	X86_MATCH_VFM(INTEL_EMERALDRAPIDS_X,	&spr_uncore_init),
1947 	X86_MATCH_VFM(INTEL_GRANITERAPIDS_X,	&gnr_uncore_init),
1948 	X86_MATCH_VFM(INTEL_GRANITERAPIDS_D,	&gnr_uncore_init),
1949 	X86_MATCH_VFM(INTEL_ATOM_TREMONT_D,	&snr_uncore_init),
1950 	X86_MATCH_VFM(INTEL_ATOM_GRACEMONT,	&adl_uncore_init),
1951 	X86_MATCH_VFM(INTEL_ATOM_CRESTMONT_X,	&gnr_uncore_init),
1952 	X86_MATCH_VFM(INTEL_ATOM_CRESTMONT,	&gnr_uncore_init),
1953 	X86_MATCH_VFM(INTEL_ATOM_DARKMONT_X,	&gnr_uncore_init),
1954 	X86_MATCH_VFM(INTEL_DIAMONDRAPIDS_X,	&dmr_uncore_init),
1955 	{},
1956 };
1957 MODULE_DEVICE_TABLE(x86cpu, intel_uncore_match);
1958 
uncore_use_discovery(struct uncore_plat_init * config)1959 static bool uncore_use_discovery(struct uncore_plat_init *config)
1960 {
1961 	for (int i = 0; i < UNCORE_DISCOVERY_DOMAINS; i++) {
1962 		if (config->domain[i].discovery_base)
1963 			return true;
1964 	}
1965 
1966 	return false;
1967 }
1968 
intel_uncore_init(void)1969 static int __init intel_uncore_init(void)
1970 {
1971 	const struct x86_cpu_id *id;
1972 	struct uncore_plat_init *uncore_init;
1973 	int pret = 0, cret = 0, mret = 0, ret;
1974 
1975 	if (boot_cpu_has(X86_FEATURE_HYPERVISOR))
1976 		return -ENODEV;
1977 
1978 	__uncore_max_dies =
1979 		topology_max_packages() * topology_max_dies_per_package();
1980 
1981 	id = x86_match_cpu(intel_uncore_match);
1982 	if (!id) {
1983 		uncore_init = (struct uncore_plat_init *)&generic_uncore_init;
1984 		if (uncore_no_discover || !uncore_discovery(uncore_init))
1985 			return -ENODEV;
1986 	} else {
1987 		uncore_init = (struct uncore_plat_init *)id->driver_data;
1988 		if (uncore_no_discover && uncore_use_discovery(uncore_init))
1989 			return -ENODEV;
1990 		if (uncore_use_discovery(uncore_init) &&
1991 		    !uncore_discovery(uncore_init))
1992 			return -ENODEV;
1993 	}
1994 
1995 	if (uncore_init->pci_init) {
1996 		pret = uncore_init->pci_init();
1997 		if (!pret)
1998 			pret = uncore_pci_init();
1999 	}
2000 
2001 	if (uncore_init->cpu_init) {
2002 		uncore_init->cpu_init();
2003 		cret = uncore_pmu_types_init(uncore_msr_uncores);
2004 		if (cret)
2005 			uncore_msr_uncores = empty_uncore;
2006 	}
2007 
2008 	if (uncore_init->mmio_init) {
2009 		uncore_init->mmio_init();
2010 		mret = uncore_pmu_types_init(uncore_mmio_uncores);
2011 		if (mret)
2012 			uncore_mmio_uncores = empty_uncore;
2013 	}
2014 
2015 	if (cret && pret && mret) {
2016 		ret = -ENODEV;
2017 		goto free_discovery;
2018 	}
2019 
2020 	/* Install hotplug callbacks to setup the targets for each package */
2021 	ret = cpuhp_setup_state(CPUHP_AP_PERF_X86_UNCORE_ONLINE,
2022 				"perf/x86/intel/uncore:online",
2023 				uncore_event_cpu_online,
2024 				uncore_event_cpu_offline);
2025 	if (ret)
2026 		goto err;
2027 	return 0;
2028 
2029 err:
2030 	uncore_types_exit(uncore_msr_uncores);
2031 	uncore_types_exit(uncore_mmio_uncores);
2032 	uncore_pci_exit();
2033 free_discovery:
2034 	intel_uncore_clear_discovery_tables();
2035 	return ret;
2036 }
2037 module_init(intel_uncore_init);
2038 
intel_uncore_exit(void)2039 static void __exit intel_uncore_exit(void)
2040 {
2041 	cpuhp_remove_state(CPUHP_AP_PERF_X86_UNCORE_ONLINE);
2042 	uncore_types_exit(uncore_msr_uncores);
2043 	uncore_types_exit(uncore_mmio_uncores);
2044 	uncore_pci_exit();
2045 	intel_uncore_clear_discovery_tables();
2046 }
2047 module_exit(intel_uncore_exit);
2048