Lines Matching +full:recv +full:- +full:empty

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * APM X-Gene SoC PMU (Performance Monitor Unit)
79 #define GET_CNTR(ev) (ev->hw.idx)
80 #define GET_EVENTID(ev) (ev->hw.config & 0xFFULL)
81 #define GET_AGENTID(ev) (ev->hw.config_base & 0xFFFFFFFFUL)
82 #define GET_AGENT1ID(ev) ((ev->hw.config_base >> 32) & 0xFFFFFFFFUL)
171 return sysfs_emit(buf, "%s\n", (char *) eattr->var); in xgene_pmu_format_show()
181 XGENE_PMU_FORMAT_ATTR(l3c_eventid, "config:0-7"),
182 XGENE_PMU_FORMAT_ATTR(l3c_agentid, "config1:0-9"),
187 XGENE_PMU_FORMAT_ATTR(iob_eventid, "config:0-7"),
188 XGENE_PMU_FORMAT_ATTR(iob_agentid, "config1:0-63"),
193 XGENE_PMU_FORMAT_ATTR(mcb_eventid, "config:0-5"),
194 XGENE_PMU_FORMAT_ATTR(mcb_agentid, "config1:0-9"),
199 XGENE_PMU_FORMAT_ATTR(mc_eventid, "config:0-28"),
224 XGENE_PMU_FORMAT_ATTR(l3c_eventid, "config:0-39"),
229 XGENE_PMU_FORMAT_ATTR(iob_eventid, "config:0-47"),
234 XGENE_PMU_FORMAT_ATTR(iob_slow_eventid, "config:0-16"),
239 XGENE_PMU_FORMAT_ATTR(mcb_eventid, "config:0-35"),
244 XGENE_PMU_FORMAT_ATTR(mc_eventid, "config:0-44"),
282 return sysfs_emit(buf, "config=0x%llx\n", pmu_attr->id); in xgene_pmu_event_show()
289 XGENE_PMU_EVENT_ATTR(cycle-count, 0x00),
290 XGENE_PMU_EVENT_ATTR(cycle-count-div-64, 0x01),
291 XGENE_PMU_EVENT_ATTR(read-hit, 0x02),
292 XGENE_PMU_EVENT_ATTR(read-miss, 0x03),
293 XGENE_PMU_EVENT_ATTR(write-need-replacement, 0x06),
294 XGENE_PMU_EVENT_ATTR(write-not-need-replacement, 0x07),
295 XGENE_PMU_EVENT_ATTR(tq-full, 0x08),
296 XGENE_PMU_EVENT_ATTR(ackq-full, 0x09),
297 XGENE_PMU_EVENT_ATTR(wdb-full, 0x0a),
298 XGENE_PMU_EVENT_ATTR(bank-fifo-full, 0x0b),
299 XGENE_PMU_EVENT_ATTR(odb-full, 0x0c),
300 XGENE_PMU_EVENT_ATTR(wbq-full, 0x0d),
301 XGENE_PMU_EVENT_ATTR(bank-conflict-fifo-issue, 0x0e),
302 XGENE_PMU_EVENT_ATTR(bank-fifo-issue, 0x0f),
307 XGENE_PMU_EVENT_ATTR(cycle-count, 0x00),
308 XGENE_PMU_EVENT_ATTR(cycle-count-div-64, 0x01),
309 XGENE_PMU_EVENT_ATTR(axi0-read, 0x02),
310 XGENE_PMU_EVENT_ATTR(axi0-read-partial, 0x03),
311 XGENE_PMU_EVENT_ATTR(axi1-read, 0x04),
312 XGENE_PMU_EVENT_ATTR(axi1-read-partial, 0x05),
313 XGENE_PMU_EVENT_ATTR(csw-read-block, 0x06),
314 XGENE_PMU_EVENT_ATTR(csw-read-partial, 0x07),
315 XGENE_PMU_EVENT_ATTR(axi0-write, 0x10),
316 XGENE_PMU_EVENT_ATTR(axi0-write-partial, 0x11),
317 XGENE_PMU_EVENT_ATTR(axi1-write, 0x13),
318 XGENE_PMU_EVENT_ATTR(axi1-write-partial, 0x14),
319 XGENE_PMU_EVENT_ATTR(csw-inbound-dirty, 0x16),
324 XGENE_PMU_EVENT_ATTR(cycle-count, 0x00),
325 XGENE_PMU_EVENT_ATTR(cycle-count-div-64, 0x01),
326 XGENE_PMU_EVENT_ATTR(csw-read, 0x02),
327 XGENE_PMU_EVENT_ATTR(csw-write-request, 0x03),
328 XGENE_PMU_EVENT_ATTR(mcb-csw-stall, 0x04),
329 XGENE_PMU_EVENT_ATTR(cancel-read-gack, 0x05),
334 XGENE_PMU_EVENT_ATTR(cycle-count, 0x00),
335 XGENE_PMU_EVENT_ATTR(cycle-count-div-64, 0x01),
336 XGENE_PMU_EVENT_ATTR(act-cmd-sent, 0x02),
337 XGENE_PMU_EVENT_ATTR(pre-cmd-sent, 0x03),
338 XGENE_PMU_EVENT_ATTR(rd-cmd-sent, 0x04),
339 XGENE_PMU_EVENT_ATTR(rda-cmd-sent, 0x05),
340 XGENE_PMU_EVENT_ATTR(wr-cmd-sent, 0x06),
341 XGENE_PMU_EVENT_ATTR(wra-cmd-sent, 0x07),
342 XGENE_PMU_EVENT_ATTR(pde-cmd-sent, 0x08),
343 XGENE_PMU_EVENT_ATTR(sre-cmd-sent, 0x09),
344 XGENE_PMU_EVENT_ATTR(prea-cmd-sent, 0x0a),
345 XGENE_PMU_EVENT_ATTR(ref-cmd-sent, 0x0b),
346 XGENE_PMU_EVENT_ATTR(rd-rda-cmd-sent, 0x0c),
347 XGENE_PMU_EVENT_ATTR(wr-wra-cmd-sent, 0x0d),
348 XGENE_PMU_EVENT_ATTR(in-rd-collision, 0x0e),
349 XGENE_PMU_EVENT_ATTR(in-wr-collision, 0x0f),
350 XGENE_PMU_EVENT_ATTR(collision-queue-not-empty, 0x10),
351 XGENE_PMU_EVENT_ATTR(collision-queue-full, 0x11),
352 XGENE_PMU_EVENT_ATTR(mcu-request, 0x12),
353 XGENE_PMU_EVENT_ATTR(mcu-rd-request, 0x13),
354 XGENE_PMU_EVENT_ATTR(mcu-hp-rd-request, 0x14),
355 XGENE_PMU_EVENT_ATTR(mcu-wr-request, 0x15),
356 XGENE_PMU_EVENT_ATTR(mcu-rd-proceed-all, 0x16),
357 XGENE_PMU_EVENT_ATTR(mcu-rd-proceed-cancel, 0x17),
358 XGENE_PMU_EVENT_ATTR(mcu-rd-response, 0x18),
359 XGENE_PMU_EVENT_ATTR(mcu-rd-proceed-speculative-all, 0x19),
360 XGENE_PMU_EVENT_ATTR(mcu-rd-proceed-speculative-cancel, 0x1a),
361 XGENE_PMU_EVENT_ATTR(mcu-wr-proceed-all, 0x1b),
362 XGENE_PMU_EVENT_ATTR(mcu-wr-proceed-cancel, 0x1c),
387 XGENE_PMU_EVENT_ATTR(cycle-count, 0x00),
388 XGENE_PMU_EVENT_ATTR(read-hit, 0x01),
389 XGENE_PMU_EVENT_ATTR(read-miss, 0x02),
390 XGENE_PMU_EVENT_ATTR(index-flush-eviction, 0x03),
391 XGENE_PMU_EVENT_ATTR(write-caused-replacement, 0x04),
392 XGENE_PMU_EVENT_ATTR(write-not-caused-replacement, 0x05),
393 XGENE_PMU_EVENT_ATTR(clean-eviction, 0x06),
394 XGENE_PMU_EVENT_ATTR(dirty-eviction, 0x07),
398 XGENE_PMU_EVENT_ATTR(tq-bank-conflict-issue-stall, 0x0b),
399 XGENE_PMU_EVENT_ATTR(tq-full, 0x0c),
400 XGENE_PMU_EVENT_ATTR(ackq-full, 0x0d),
401 XGENE_PMU_EVENT_ATTR(wdb-full, 0x0e),
402 XGENE_PMU_EVENT_ATTR(odb-full, 0x10),
403 XGENE_PMU_EVENT_ATTR(wbq-full, 0x11),
404 XGENE_PMU_EVENT_ATTR(input-req-async-fifo-stall, 0x12),
405 XGENE_PMU_EVENT_ATTR(output-req-async-fifo-stall, 0x13),
406 XGENE_PMU_EVENT_ATTR(output-data-async-fifo-stall, 0x14),
407 XGENE_PMU_EVENT_ATTR(total-insertion, 0x15),
408 XGENE_PMU_EVENT_ATTR(sip-insertions-r-set, 0x16),
409 XGENE_PMU_EVENT_ATTR(sip-insertions-r-clear, 0x17),
410 XGENE_PMU_EVENT_ATTR(dip-insertions-r-set, 0x18),
411 XGENE_PMU_EVENT_ATTR(dip-insertions-r-clear, 0x19),
412 XGENE_PMU_EVENT_ATTR(dip-insertions-force-r-set, 0x1a),
415 XGENE_PMU_EVENT_ATTR(old-replacement, 0x1d),
416 XGENE_PMU_EVENT_ATTR(young-replacement, 0x1e),
417 XGENE_PMU_EVENT_ATTR(r-set-replacement, 0x1f),
418 XGENE_PMU_EVENT_ATTR(r-clear-replacement, 0x20),
419 XGENE_PMU_EVENT_ATTR(old-r-replacement, 0x21),
420 XGENE_PMU_EVENT_ATTR(old-nr-replacement, 0x22),
421 XGENE_PMU_EVENT_ATTR(young-r-replacement, 0x23),
422 XGENE_PMU_EVENT_ATTR(young-nr-replacement, 0x24),
423 XGENE_PMU_EVENT_ATTR(bloomfilter-clearing, 0x25),
424 XGENE_PMU_EVENT_ATTR(generation-flip, 0x26),
425 XGENE_PMU_EVENT_ATTR(vcc-droop-detected, 0x27),
430 XGENE_PMU_EVENT_ATTR(cycle-count, 0x00),
431 XGENE_PMU_EVENT_ATTR(pa-req-buf-alloc-all, 0x01),
432 XGENE_PMU_EVENT_ATTR(pa-req-buf-alloc-rd, 0x02),
433 XGENE_PMU_EVENT_ATTR(pa-req-buf-alloc-wr, 0x03),
434 XGENE_PMU_EVENT_ATTR(pa-all-cp-req, 0x04),
435 XGENE_PMU_EVENT_ATTR(pa-cp-blk-req, 0x05),
436 XGENE_PMU_EVENT_ATTR(pa-cp-ptl-req, 0x06),
437 XGENE_PMU_EVENT_ATTR(pa-cp-rd-req, 0x07),
438 XGENE_PMU_EVENT_ATTR(pa-cp-wr-req, 0x08),
439 XGENE_PMU_EVENT_ATTR(ba-all-req, 0x09),
440 XGENE_PMU_EVENT_ATTR(ba-rd-req, 0x0a),
441 XGENE_PMU_EVENT_ATTR(ba-wr-req, 0x0b),
442 XGENE_PMU_EVENT_ATTR(pa-rd-shared-req-issued, 0x10),
443 XGENE_PMU_EVENT_ATTR(pa-rd-exclusive-req-issued, 0x11),
444 XGENE_PMU_EVENT_ATTR(pa-wr-invalidate-req-issued-stashable, 0x12),
445 XGENE_PMU_EVENT_ATTR(pa-wr-invalidate-req-issued-nonstashable, 0x13),
446 XGENE_PMU_EVENT_ATTR(pa-wr-back-req-issued-stashable, 0x14),
447 XGENE_PMU_EVENT_ATTR(pa-wr-back-req-issued-nonstashable, 0x15),
448 XGENE_PMU_EVENT_ATTR(pa-ptl-wr-req, 0x16),
449 XGENE_PMU_EVENT_ATTR(pa-ptl-rd-req, 0x17),
450 XGENE_PMU_EVENT_ATTR(pa-wr-back-clean-data, 0x18),
451 XGENE_PMU_EVENT_ATTR(pa-wr-back-cancelled-on-SS, 0x1b),
452 XGENE_PMU_EVENT_ATTR(pa-barrier-occurrence, 0x1c),
453 XGENE_PMU_EVENT_ATTR(pa-barrier-cycles, 0x1d),
454 XGENE_PMU_EVENT_ATTR(pa-total-cp-snoops, 0x20),
455 XGENE_PMU_EVENT_ATTR(pa-rd-shared-snoop, 0x21),
456 XGENE_PMU_EVENT_ATTR(pa-rd-shared-snoop-hit, 0x22),
457 XGENE_PMU_EVENT_ATTR(pa-rd-exclusive-snoop, 0x23),
458 XGENE_PMU_EVENT_ATTR(pa-rd-exclusive-snoop-hit, 0x24),
459 XGENE_PMU_EVENT_ATTR(pa-rd-wr-invalid-snoop, 0x25),
460 XGENE_PMU_EVENT_ATTR(pa-rd-wr-invalid-snoop-hit, 0x26),
461 XGENE_PMU_EVENT_ATTR(pa-req-buffer-full, 0x28),
462 XGENE_PMU_EVENT_ATTR(cswlf-outbound-req-fifo-full, 0x29),
463 XGENE_PMU_EVENT_ATTR(cswlf-inbound-snoop-fifo-backpressure, 0x2a),
464 XGENE_PMU_EVENT_ATTR(cswlf-outbound-lack-fifo-full, 0x2b),
465 XGENE_PMU_EVENT_ATTR(cswlf-inbound-gack-fifo-backpressure, 0x2c),
466 XGENE_PMU_EVENT_ATTR(cswlf-outbound-data-fifo-full, 0x2d),
467 XGENE_PMU_EVENT_ATTR(cswlf-inbound-data-fifo-backpressure, 0x2e),
468 XGENE_PMU_EVENT_ATTR(cswlf-inbound-req-backpressure, 0x2f),
473 XGENE_PMU_EVENT_ATTR(cycle-count, 0x00),
474 XGENE_PMU_EVENT_ATTR(pa-axi0-rd-req, 0x01),
475 XGENE_PMU_EVENT_ATTR(pa-axi0-wr-req, 0x02),
476 XGENE_PMU_EVENT_ATTR(pa-axi1-rd-req, 0x03),
477 XGENE_PMU_EVENT_ATTR(pa-axi1-wr-req, 0x04),
478 XGENE_PMU_EVENT_ATTR(ba-all-axi-req, 0x07),
479 XGENE_PMU_EVENT_ATTR(ba-axi-rd-req, 0x08),
480 XGENE_PMU_EVENT_ATTR(ba-axi-wr-req, 0x09),
481 XGENE_PMU_EVENT_ATTR(ba-free-list-empty, 0x10),
486 XGENE_PMU_EVENT_ATTR(cycle-count, 0x00),
487 XGENE_PMU_EVENT_ATTR(req-receive, 0x01),
488 XGENE_PMU_EVENT_ATTR(rd-req-recv, 0x02),
489 XGENE_PMU_EVENT_ATTR(rd-req-recv-2, 0x03),
490 XGENE_PMU_EVENT_ATTR(wr-req-recv, 0x04),
491 XGENE_PMU_EVENT_ATTR(wr-req-recv-2, 0x05),
492 XGENE_PMU_EVENT_ATTR(rd-req-sent-to-mcu, 0x06),
493 XGENE_PMU_EVENT_ATTR(rd-req-sent-to-mcu-2, 0x07),
494 XGENE_PMU_EVENT_ATTR(rd-req-sent-to-spec-mcu, 0x08),
495 XGENE_PMU_EVENT_ATTR(rd-req-sent-to-spec-mcu-2, 0x09),
496 XGENE_PMU_EVENT_ATTR(glbl-ack-recv-for-rd-sent-to-spec-mcu, 0x0a),
497 XGENE_PMU_EVENT_ATTR(glbl-ack-go-recv-for-rd-sent-to-spec-mcu, 0x0b),
498 XGENE_PMU_EVENT_ATTR(glbl-ack-nogo-recv-for-rd-sent-to-spec-mcu, 0x0c),
499 XGENE_PMU_EVENT_ATTR(glbl-ack-go-recv-any-rd-req, 0x0d),
500 XGENE_PMU_EVENT_ATTR(glbl-ack-go-recv-any-rd-req-2, 0x0e),
501 XGENE_PMU_EVENT_ATTR(wr-req-sent-to-mcu, 0x0f),
502 XGENE_PMU_EVENT_ATTR(gack-recv, 0x10),
503 XGENE_PMU_EVENT_ATTR(rd-gack-recv, 0x11),
504 XGENE_PMU_EVENT_ATTR(wr-gack-recv, 0x12),
505 XGENE_PMU_EVENT_ATTR(cancel-rd-gack, 0x13),
506 XGENE_PMU_EVENT_ATTR(cancel-wr-gack, 0x14),
507 XGENE_PMU_EVENT_ATTR(mcb-csw-req-stall, 0x15),
508 XGENE_PMU_EVENT_ATTR(mcu-req-intf-blocked, 0x16),
509 XGENE_PMU_EVENT_ATTR(mcb-mcu-rd-intf-stall, 0x17),
510 XGENE_PMU_EVENT_ATTR(csw-rd-intf-blocked, 0x18),
511 XGENE_PMU_EVENT_ATTR(csw-local-ack-intf-blocked, 0x19),
512 XGENE_PMU_EVENT_ATTR(mcu-req-table-full, 0x1a),
513 XGENE_PMU_EVENT_ATTR(mcu-stat-table-full, 0x1b),
514 XGENE_PMU_EVENT_ATTR(mcu-wr-table-full, 0x1c),
515 XGENE_PMU_EVENT_ATTR(mcu-rdreceipt-resp, 0x1d),
516 XGENE_PMU_EVENT_ATTR(mcu-wrcomplete-resp, 0x1e),
517 XGENE_PMU_EVENT_ATTR(mcu-retryack-resp, 0x1f),
518 XGENE_PMU_EVENT_ATTR(mcu-pcrdgrant-resp, 0x20),
519 XGENE_PMU_EVENT_ATTR(mcu-req-from-lastload, 0x21),
520 XGENE_PMU_EVENT_ATTR(mcu-req-from-bypass, 0x22),
521 XGENE_PMU_EVENT_ATTR(volt-droop-detect, 0x23),
526 XGENE_PMU_EVENT_ATTR(cycle-count, 0x00),
527 XGENE_PMU_EVENT_ATTR(act-sent, 0x01),
528 XGENE_PMU_EVENT_ATTR(pre-sent, 0x02),
529 XGENE_PMU_EVENT_ATTR(rd-sent, 0x03),
530 XGENE_PMU_EVENT_ATTR(rda-sent, 0x04),
531 XGENE_PMU_EVENT_ATTR(wr-sent, 0x05),
532 XGENE_PMU_EVENT_ATTR(wra-sent, 0x06),
533 XGENE_PMU_EVENT_ATTR(pd-entry-vld, 0x07),
534 XGENE_PMU_EVENT_ATTR(sref-entry-vld, 0x08),
535 XGENE_PMU_EVENT_ATTR(prea-sent, 0x09),
536 XGENE_PMU_EVENT_ATTR(ref-sent, 0x0a),
537 XGENE_PMU_EVENT_ATTR(rd-rda-sent, 0x0b),
538 XGENE_PMU_EVENT_ATTR(wr-wra-sent, 0x0c),
539 XGENE_PMU_EVENT_ATTR(raw-hazard, 0x0d),
540 XGENE_PMU_EVENT_ATTR(war-hazard, 0x0e),
541 XGENE_PMU_EVENT_ATTR(waw-hazard, 0x0f),
542 XGENE_PMU_EVENT_ATTR(rar-hazard, 0x10),
543 XGENE_PMU_EVENT_ATTR(raw-war-waw-hazard, 0x11),
544 XGENE_PMU_EVENT_ATTR(hprd-lprd-wr-req-vld, 0x12),
545 XGENE_PMU_EVENT_ATTR(lprd-req-vld, 0x13),
546 XGENE_PMU_EVENT_ATTR(hprd-req-vld, 0x14),
547 XGENE_PMU_EVENT_ATTR(hprd-lprd-req-vld, 0x15),
548 XGENE_PMU_EVENT_ATTR(wr-req-vld, 0x16),
549 XGENE_PMU_EVENT_ATTR(partial-wr-req-vld, 0x17),
550 XGENE_PMU_EVENT_ATTR(rd-retry, 0x18),
551 XGENE_PMU_EVENT_ATTR(wr-retry, 0x19),
552 XGENE_PMU_EVENT_ATTR(retry-gnt, 0x1a),
553 XGENE_PMU_EVENT_ATTR(rank-change, 0x1b),
554 XGENE_PMU_EVENT_ATTR(dir-change, 0x1c),
555 XGENE_PMU_EVENT_ATTR(rank-dir-change, 0x1d),
556 XGENE_PMU_EVENT_ATTR(rank-active, 0x1e),
557 XGENE_PMU_EVENT_ATTR(rank-idle, 0x1f),
558 XGENE_PMU_EVENT_ATTR(rank-pd, 0x20),
559 XGENE_PMU_EVENT_ATTR(rank-sref, 0x21),
560 XGENE_PMU_EVENT_ATTR(queue-fill-gt-thresh, 0x22),
561 XGENE_PMU_EVENT_ATTR(queue-rds-gt-thresh, 0x23),
562 XGENE_PMU_EVENT_ATTR(queue-wrs-gt-thresh, 0x24),
563 XGENE_PMU_EVENT_ATTR(phy-updt-complt, 0x25),
564 XGENE_PMU_EVENT_ATTR(tz-fail, 0x26),
565 XGENE_PMU_EVENT_ATTR(dram-errc, 0x27),
566 XGENE_PMU_EVENT_ATTR(dram-errd, 0x28),
567 XGENE_PMU_EVENT_ATTR(rd-enq, 0x29),
568 XGENE_PMU_EVENT_ATTR(wr-enq, 0x2a),
569 XGENE_PMU_EVENT_ATTR(tmac-limit-reached, 0x2b),
570 XGENE_PMU_EVENT_ATTR(tmaw-tracker-full, 0x2c),
607 return cpumap_print_to_pagebuf(true, buf, &pmu_dev->parent->cpu); in cpumask_show()
694 cntr = find_first_zero_bit(pmu_dev->cntr_assign_mask, in get_next_avail_cntr()
695 pmu_dev->max_counters); in get_next_avail_cntr()
696 if (cntr == pmu_dev->max_counters) in get_next_avail_cntr()
697 return -ENOSPC; in get_next_avail_cntr()
698 set_bit(cntr, pmu_dev->cntr_assign_mask); in get_next_avail_cntr()
705 clear_bit(cntr, pmu_dev->cntr_assign_mask); in clear_avail_cntr()
710 writel(PCPPMU_INTENMASK, xgene_pmu->pcppmu_csr + PCPPMU_INTMASK_REG); in xgene_pmu_mask_int()
715 writel(PCPPMU_V3_INTENMASK, xgene_pmu->pcppmu_csr + PCPPMU_INTMASK_REG); in xgene_pmu_v3_mask_int()
720 writel(PCPPMU_INTCLRMASK, xgene_pmu->pcppmu_csr + PCPPMU_INTMASK_REG); in xgene_pmu_unmask_int()
726 xgene_pmu->pcppmu_csr + PCPPMU_INTMASK_REG); in xgene_pmu_v3_unmask_int()
732 return readl(pmu_dev->inf->csr + PMU_PMEVCNTR0 + (4 * idx)); in xgene_pmu_read_counter32()
741 * v3 has 64-bit counter registers composed by 2 32-bit registers in xgene_pmu_read_counter64()
757 writel(val, pmu_dev->inf->csr + PMU_PMEVCNTR0 + (4 * idx)); in xgene_pmu_write_counter32()
768 /* v3 has 64-bit counter registers composed by 2 32-bit registers */ in xgene_pmu_write_counter64()
776 writel(val, pmu_dev->inf->csr + PMU_PMEVTYPER0 + (4 * idx)); in xgene_pmu_write_evttype()
782 writel(val, pmu_dev->inf->csr + PMU_PMAMR0); in xgene_pmu_write_agentmsk()
791 writel(val, pmu_dev->inf->csr + PMU_PMAMR1); in xgene_pmu_write_agent1msk()
802 val = readl(pmu_dev->inf->csr + PMU_PMCNTENSET); in xgene_pmu_enable_counter()
804 writel(val, pmu_dev->inf->csr + PMU_PMCNTENSET); in xgene_pmu_enable_counter()
812 val = readl(pmu_dev->inf->csr + PMU_PMCNTENCLR); in xgene_pmu_disable_counter()
814 writel(val, pmu_dev->inf->csr + PMU_PMCNTENCLR); in xgene_pmu_disable_counter()
822 val = readl(pmu_dev->inf->csr + PMU_PMINTENSET); in xgene_pmu_enable_counter_int()
824 writel(val, pmu_dev->inf->csr + PMU_PMINTENSET); in xgene_pmu_enable_counter_int()
832 val = readl(pmu_dev->inf->csr + PMU_PMINTENCLR); in xgene_pmu_disable_counter_int()
834 writel(val, pmu_dev->inf->csr + PMU_PMINTENCLR); in xgene_pmu_disable_counter_int()
841 val = readl(pmu_dev->inf->csr + PMU_PMCR); in xgene_pmu_reset_counters()
843 writel(val, pmu_dev->inf->csr + PMU_PMCR); in xgene_pmu_reset_counters()
850 val = readl(pmu_dev->inf->csr + PMU_PMCR); in xgene_pmu_start_counters()
852 writel(val, pmu_dev->inf->csr + PMU_PMCR); in xgene_pmu_start_counters()
859 val = readl(pmu_dev->inf->csr + PMU_PMCR); in xgene_pmu_stop_counters()
861 writel(val, pmu_dev->inf->csr + PMU_PMCR); in xgene_pmu_stop_counters()
867 struct xgene_pmu *xgene_pmu = pmu_dev->parent; in xgene_perf_pmu_enable()
868 bool enabled = !bitmap_empty(pmu_dev->cntr_assign_mask, in xgene_perf_pmu_enable()
869 pmu_dev->max_counters); in xgene_perf_pmu_enable()
874 xgene_pmu->ops->start_counters(pmu_dev); in xgene_perf_pmu_enable()
880 struct xgene_pmu *xgene_pmu = pmu_dev->parent; in xgene_perf_pmu_disable()
882 xgene_pmu->ops->stop_counters(pmu_dev); in xgene_perf_pmu_disable()
887 struct xgene_pmu_dev *pmu_dev = to_pmu_dev(event->pmu); in xgene_perf_event_init()
888 struct hw_perf_event *hw = &event->hw; in xgene_perf_event_init()
892 if (event->attr.type != event->pmu->type) in xgene_perf_event_init()
893 return -ENOENT; in xgene_perf_event_init()
897 * Therefore, it does not support per-process mode. in xgene_perf_event_init()
900 if (is_sampling_event(event) || event->attach_state & PERF_ATTACH_TASK) in xgene_perf_event_init()
901 return -EINVAL; in xgene_perf_event_init()
903 if (event->cpu < 0) in xgene_perf_event_init()
904 return -EINVAL; in xgene_perf_event_init()
909 * but can lead to issues for off-core PMUs, where each in xgene_perf_event_init()
914 event->cpu = cpumask_first(&pmu_dev->parent->cpu); in xgene_perf_event_init()
916 hw->config = event->attr.config; in xgene_perf_event_init()
923 hw->config_base = event->attr.config1; in xgene_perf_event_init()
929 if (event->group_leader->pmu != event->pmu && in xgene_perf_event_init()
930 !is_software_event(event->group_leader)) in xgene_perf_event_init()
931 return -EINVAL; in xgene_perf_event_init()
933 for_each_sibling_event(sibling, event->group_leader) { in xgene_perf_event_init()
934 if (sibling->pmu != event->pmu && in xgene_perf_event_init()
936 return -EINVAL; in xgene_perf_event_init()
944 struct xgene_pmu_dev *pmu_dev = to_pmu_dev(event->pmu); in xgene_perf_enable_event()
945 struct xgene_pmu *xgene_pmu = pmu_dev->parent; in xgene_perf_enable_event()
947 xgene_pmu->ops->write_evttype(pmu_dev, GET_CNTR(event), in xgene_perf_enable_event()
949 xgene_pmu->ops->write_agentmsk(pmu_dev, ~((u32)GET_AGENTID(event))); in xgene_perf_enable_event()
950 if (pmu_dev->inf->type == PMU_TYPE_IOB) in xgene_perf_enable_event()
951 xgene_pmu->ops->write_agent1msk(pmu_dev, in xgene_perf_enable_event()
954 xgene_pmu->ops->enable_counter(pmu_dev, GET_CNTR(event)); in xgene_perf_enable_event()
955 xgene_pmu->ops->enable_counter_int(pmu_dev, GET_CNTR(event)); in xgene_perf_enable_event()
960 struct xgene_pmu_dev *pmu_dev = to_pmu_dev(event->pmu); in xgene_perf_disable_event()
961 struct xgene_pmu *xgene_pmu = pmu_dev->parent; in xgene_perf_disable_event()
963 xgene_pmu->ops->disable_counter(pmu_dev, GET_CNTR(event)); in xgene_perf_disable_event()
964 xgene_pmu->ops->disable_counter_int(pmu_dev, GET_CNTR(event)); in xgene_perf_disable_event()
969 struct xgene_pmu_dev *pmu_dev = to_pmu_dev(event->pmu); in xgene_perf_event_set_period()
970 struct xgene_pmu *xgene_pmu = pmu_dev->parent; in xgene_perf_event_set_period()
971 struct hw_perf_event *hw = &event->hw; in xgene_perf_event_set_period()
981 local64_set(&hw->prev_count, val); in xgene_perf_event_set_period()
982 xgene_pmu->ops->write_counter(pmu_dev, hw->idx, val); in xgene_perf_event_set_period()
987 struct xgene_pmu_dev *pmu_dev = to_pmu_dev(event->pmu); in xgene_perf_event_update()
988 struct xgene_pmu *xgene_pmu = pmu_dev->parent; in xgene_perf_event_update()
989 struct hw_perf_event *hw = &event->hw; in xgene_perf_event_update()
993 prev_raw_count = local64_read(&hw->prev_count); in xgene_perf_event_update()
994 new_raw_count = xgene_pmu->ops->read_counter(pmu_dev, GET_CNTR(event)); in xgene_perf_event_update()
996 if (local64_cmpxchg(&hw->prev_count, prev_raw_count, in xgene_perf_event_update()
1000 delta = (new_raw_count - prev_raw_count) & pmu_dev->max_period; in xgene_perf_event_update()
1002 local64_add(delta, &event->count); in xgene_perf_event_update()
1012 struct xgene_pmu_dev *pmu_dev = to_pmu_dev(event->pmu); in xgene_perf_start()
1013 struct xgene_pmu *xgene_pmu = pmu_dev->parent; in xgene_perf_start()
1014 struct hw_perf_event *hw = &event->hw; in xgene_perf_start()
1016 if (WARN_ON_ONCE(!(hw->state & PERF_HES_STOPPED))) in xgene_perf_start()
1019 WARN_ON_ONCE(!(hw->state & PERF_HES_UPTODATE)); in xgene_perf_start()
1020 hw->state = 0; in xgene_perf_start()
1025 u64 prev_raw_count = local64_read(&hw->prev_count); in xgene_perf_start()
1027 xgene_pmu->ops->write_counter(pmu_dev, GET_CNTR(event), in xgene_perf_start()
1037 struct hw_perf_event *hw = &event->hw; in xgene_perf_stop()
1039 if (hw->state & PERF_HES_UPTODATE) in xgene_perf_stop()
1043 WARN_ON_ONCE(hw->state & PERF_HES_STOPPED); in xgene_perf_stop()
1044 hw->state |= PERF_HES_STOPPED; in xgene_perf_stop()
1046 if (hw->state & PERF_HES_UPTODATE) in xgene_perf_stop()
1050 hw->state |= PERF_HES_UPTODATE; in xgene_perf_stop()
1055 struct xgene_pmu_dev *pmu_dev = to_pmu_dev(event->pmu); in xgene_perf_add()
1056 struct hw_perf_event *hw = &event->hw; in xgene_perf_add()
1058 hw->state = PERF_HES_UPTODATE | PERF_HES_STOPPED; in xgene_perf_add()
1061 hw->idx = get_next_avail_cntr(pmu_dev); in xgene_perf_add()
1062 if (hw->idx < 0) in xgene_perf_add()
1063 return -EAGAIN; in xgene_perf_add()
1066 pmu_dev->pmu_counter_event[hw->idx] = event; in xgene_perf_add()
1076 struct xgene_pmu_dev *pmu_dev = to_pmu_dev(event->pmu); in xgene_perf_del()
1077 struct hw_perf_event *hw = &event->hw; in xgene_perf_del()
1085 pmu_dev->pmu_counter_event[hw->idx] = NULL; in xgene_perf_del()
1092 if (pmu_dev->parent->version == PCP_PMU_V3) in xgene_init_perf()
1093 pmu_dev->max_period = PMU_V3_CNT_MAX_PERIOD; in xgene_init_perf()
1095 pmu_dev->max_period = PMU_CNT_MAX_PERIOD; in xgene_init_perf()
1097 xgene_pmu = pmu_dev->parent; in xgene_init_perf()
1098 if (xgene_pmu->version == PCP_PMU_V1) in xgene_init_perf()
1099 pmu_dev->max_counters = 1; in xgene_init_perf()
1101 pmu_dev->max_counters = PMU_MAX_COUNTERS; in xgene_init_perf()
1104 pmu_dev->pmu = (struct pmu) { in xgene_init_perf()
1105 .attr_groups = pmu_dev->attr_groups, in xgene_init_perf()
1119 xgene_pmu->ops->stop_counters(pmu_dev); in xgene_init_perf()
1120 xgene_pmu->ops->reset_counters(pmu_dev); in xgene_init_perf()
1122 return perf_pmu_register(&pmu_dev->pmu, name, -1); in xgene_init_perf()
1128 struct device *dev = xgene_pmu->dev; in xgene_pmu_dev_add()
1133 return -ENOMEM; in xgene_pmu_dev_add()
1134 pmu->parent = xgene_pmu; in xgene_pmu_dev_add()
1135 pmu->inf = &ctx->inf; in xgene_pmu_dev_add()
1136 ctx->pmu_dev = pmu; in xgene_pmu_dev_add()
1138 switch (pmu->inf->type) { in xgene_pmu_dev_add()
1140 if (!(xgene_pmu->l3c_active_mask & pmu->inf->enable_mask)) in xgene_pmu_dev_add()
1141 return -ENODEV; in xgene_pmu_dev_add()
1142 if (xgene_pmu->version == PCP_PMU_V3) in xgene_pmu_dev_add()
1143 pmu->attr_groups = l3c_pmu_v3_attr_groups; in xgene_pmu_dev_add()
1145 pmu->attr_groups = l3c_pmu_attr_groups; in xgene_pmu_dev_add()
1148 if (xgene_pmu->version == PCP_PMU_V3) in xgene_pmu_dev_add()
1149 pmu->attr_groups = iob_fast_pmu_v3_attr_groups; in xgene_pmu_dev_add()
1151 pmu->attr_groups = iob_pmu_attr_groups; in xgene_pmu_dev_add()
1154 if (xgene_pmu->version == PCP_PMU_V3) in xgene_pmu_dev_add()
1155 pmu->attr_groups = iob_slow_pmu_v3_attr_groups; in xgene_pmu_dev_add()
1158 if (!(xgene_pmu->mcb_active_mask & pmu->inf->enable_mask)) in xgene_pmu_dev_add()
1159 return -ENODEV; in xgene_pmu_dev_add()
1160 if (xgene_pmu->version == PCP_PMU_V3) in xgene_pmu_dev_add()
1161 pmu->attr_groups = mcb_pmu_v3_attr_groups; in xgene_pmu_dev_add()
1163 pmu->attr_groups = mcb_pmu_attr_groups; in xgene_pmu_dev_add()
1166 if (!(xgene_pmu->mc_active_mask & pmu->inf->enable_mask)) in xgene_pmu_dev_add()
1167 return -ENODEV; in xgene_pmu_dev_add()
1168 if (xgene_pmu->version == PCP_PMU_V3) in xgene_pmu_dev_add()
1169 pmu->attr_groups = mc_pmu_v3_attr_groups; in xgene_pmu_dev_add()
1171 pmu->attr_groups = mc_pmu_attr_groups; in xgene_pmu_dev_add()
1174 return -EINVAL; in xgene_pmu_dev_add()
1177 if (xgene_init_perf(pmu, ctx->name)) { in xgene_pmu_dev_add()
1178 dev_err(dev, "%s PMU: Failed to init perf driver\n", ctx->name); in xgene_pmu_dev_add()
1179 return -ENODEV; in xgene_pmu_dev_add()
1182 dev_info(dev, "%s PMU registered\n", ctx->name); in xgene_pmu_dev_add()
1189 struct xgene_pmu *xgene_pmu = pmu_dev->parent; in _xgene_pmu_isr()
1190 void __iomem *csr = pmu_dev->inf->csr; in _xgene_pmu_isr()
1194 xgene_pmu->ops->stop_counters(pmu_dev); in _xgene_pmu_isr()
1196 if (xgene_pmu->version == PCP_PMU_V3) in _xgene_pmu_isr()
1205 if (xgene_pmu->version == PCP_PMU_V1) in _xgene_pmu_isr()
1207 else if (xgene_pmu->version == PCP_PMU_V2) in _xgene_pmu_isr()
1213 struct perf_event *event = pmu_dev->pmu_counter_event[idx]; in _xgene_pmu_isr()
1224 xgene_pmu->ops->start_counters(pmu_dev); in _xgene_pmu_isr()
1234 raw_spin_lock(&xgene_pmu->lock); in xgene_pmu_isr()
1237 val = readl(xgene_pmu->pcppmu_csr + PCPPMU_INTSTATUS_REG); in xgene_pmu_isr()
1238 if (xgene_pmu->version == PCP_PMU_V3) { in xgene_pmu_isr()
1250 list_for_each_entry(ctx, &xgene_pmu->mcpmus, next) { in xgene_pmu_isr()
1251 _xgene_pmu_isr(irq, ctx->pmu_dev); in xgene_pmu_isr()
1255 list_for_each_entry(ctx, &xgene_pmu->mcbpmus, next) { in xgene_pmu_isr()
1256 _xgene_pmu_isr(irq, ctx->pmu_dev); in xgene_pmu_isr()
1260 list_for_each_entry(ctx, &xgene_pmu->l3cpmus, next) { in xgene_pmu_isr()
1261 _xgene_pmu_isr(irq, ctx->pmu_dev); in xgene_pmu_isr()
1265 list_for_each_entry(ctx, &xgene_pmu->iobpmus, next) { in xgene_pmu_isr()
1266 _xgene_pmu_isr(irq, ctx->pmu_dev); in xgene_pmu_isr()
1270 raw_spin_unlock(&xgene_pmu->lock); in xgene_pmu_isr()
1283 dev_err(&pdev->dev, "ioremap failed for CSW CSR resource\n"); in acpi_pmu_probe_active_mcb_mcu_l3c()
1289 dev_err(&pdev->dev, "ioremap failed for MCBA CSR resource\n"); in acpi_pmu_probe_active_mcb_mcu_l3c()
1295 dev_err(&pdev->dev, "ioremap failed for MCBB CSR resource\n"); in acpi_pmu_probe_active_mcb_mcu_l3c()
1299 xgene_pmu->l3c_active_mask = 0x1; in acpi_pmu_probe_active_mcb_mcu_l3c()
1304 xgene_pmu->mcb_active_mask = 0x3; in acpi_pmu_probe_active_mcb_mcu_l3c()
1307 xgene_pmu->mc_active_mask = in acpi_pmu_probe_active_mcb_mcu_l3c()
1311 xgene_pmu->mcb_active_mask = 0x1; in acpi_pmu_probe_active_mcb_mcu_l3c()
1314 xgene_pmu->mc_active_mask = in acpi_pmu_probe_active_mcb_mcu_l3c()
1331 dev_err(&pdev->dev, "ioremap failed for CSW CSR resource\n"); in acpi_pmu_v3_probe_active_mcb_mcu_l3c()
1340 xgene_pmu->mcb_active_mask = 0x3; in acpi_pmu_v3_probe_active_mcb_mcu_l3c()
1342 xgene_pmu->l3c_active_mask = 0xFF; in acpi_pmu_v3_probe_active_mcb_mcu_l3c()
1345 xgene_pmu->mc_active_mask = 0xFF; in acpi_pmu_v3_probe_active_mcb_mcu_l3c()
1347 xgene_pmu->mc_active_mask = 0x33; in acpi_pmu_v3_probe_active_mcb_mcu_l3c()
1349 xgene_pmu->mc_active_mask = 0x11; in acpi_pmu_v3_probe_active_mcb_mcu_l3c()
1352 xgene_pmu->mcb_active_mask = 0x1; in acpi_pmu_v3_probe_active_mcb_mcu_l3c()
1354 xgene_pmu->l3c_active_mask = 0x0F; in acpi_pmu_v3_probe_active_mcb_mcu_l3c()
1357 xgene_pmu->mc_active_mask = 0x0F; in acpi_pmu_v3_probe_active_mcb_mcu_l3c()
1359 xgene_pmu->mc_active_mask = 0x03; in acpi_pmu_v3_probe_active_mcb_mcu_l3c()
1361 xgene_pmu->mc_active_mask = 0x01; in acpi_pmu_v3_probe_active_mcb_mcu_l3c()
1371 struct device_node *np = pdev->dev.of_node; in fdt_pmu_probe_active_mcb_mcu_l3c()
1374 csw_map = syscon_regmap_lookup_by_phandle(np, "regmap-csw"); in fdt_pmu_probe_active_mcb_mcu_l3c()
1376 dev_err(&pdev->dev, "unable to get syscon regmap csw\n"); in fdt_pmu_probe_active_mcb_mcu_l3c()
1380 mcba_map = syscon_regmap_lookup_by_phandle(np, "regmap-mcba"); in fdt_pmu_probe_active_mcb_mcu_l3c()
1382 dev_err(&pdev->dev, "unable to get syscon regmap mcba\n"); in fdt_pmu_probe_active_mcb_mcu_l3c()
1386 mcbb_map = syscon_regmap_lookup_by_phandle(np, "regmap-mcbb"); in fdt_pmu_probe_active_mcb_mcu_l3c()
1388 dev_err(&pdev->dev, "unable to get syscon regmap mcbb\n"); in fdt_pmu_probe_active_mcb_mcu_l3c()
1392 xgene_pmu->l3c_active_mask = 0x1; in fdt_pmu_probe_active_mcb_mcu_l3c()
1394 return -EINVAL; in fdt_pmu_probe_active_mcb_mcu_l3c()
1398 xgene_pmu->mcb_active_mask = 0x3; in fdt_pmu_probe_active_mcb_mcu_l3c()
1402 xgene_pmu->mc_active_mask = in fdt_pmu_probe_active_mcb_mcu_l3c()
1406 xgene_pmu->mcb_active_mask = 0x1; in fdt_pmu_probe_active_mcb_mcu_l3c()
1410 xgene_pmu->mc_active_mask = in fdt_pmu_probe_active_mcb_mcu_l3c()
1420 if (has_acpi_companion(&pdev->dev)) { in xgene_pmu_probe_active_mcb_mcu_l3c()
1421 if (xgene_pmu->version == PCP_PMU_V3) in xgene_pmu_probe_active_mcb_mcu_l3c()
1454 struct device *dev = xgene_pmu->dev; in acpi_get_pmu_hw_inf()
1477 if (resource_type(rentry->res) == IORESOURCE_MEM) { in acpi_get_pmu_hw_inf()
1478 res = *rentry->res; in acpi_get_pmu_hw_inf()
1496 /* A PMU device node without enable-bit-index is always enabled */ in acpi_get_pmu_hw_inf()
1497 rc = acpi_dev_get_property(adev, "enable-bit-index", in acpi_get_pmu_hw_inf()
1502 enable_bit = (int) obj->integer.value; in acpi_get_pmu_hw_inf()
1504 ctx->name = xgene_pmu_dev_name(dev, type, enable_bit); in acpi_get_pmu_hw_inf()
1505 if (!ctx->name) { in acpi_get_pmu_hw_inf()
1509 inf = &ctx->inf; in acpi_get_pmu_hw_inf()
1510 inf->type = type; in acpi_get_pmu_hw_inf()
1511 inf->csr = dev_csr; in acpi_get_pmu_hw_inf()
1512 inf->enable_mask = 1 << enable_bit; in acpi_get_pmu_hw_inf()
1537 for (id = ids; id->id[0] || id->cls; id++) { in xgene_pmu_acpi_match_type()
1555 if (!adev || acpi_bus_get_status(adev) || !adev->status.present) in acpi_pmu_dev_add()
1562 ctx = acpi_get_pmu_hw_inf(xgene_pmu, adev, (u32)acpi_id->driver_data); in acpi_pmu_dev_add()
1568 devm_kfree(xgene_pmu->dev, ctx); in acpi_pmu_dev_add()
1572 switch (ctx->inf.type) { in acpi_pmu_dev_add()
1574 list_add(&ctx->next, &xgene_pmu->l3cpmus); in acpi_pmu_dev_add()
1577 list_add(&ctx->next, &xgene_pmu->iobpmus); in acpi_pmu_dev_add()
1580 list_add(&ctx->next, &xgene_pmu->iobpmus); in acpi_pmu_dev_add()
1583 list_add(&ctx->next, &xgene_pmu->mcbpmus); in acpi_pmu_dev_add()
1586 list_add(&ctx->next, &xgene_pmu->mcpmus); in acpi_pmu_dev_add()
1595 struct device *dev = xgene_pmu->dev; in acpi_pmu_probe_pmu_dev()
1601 return -EINVAL; in acpi_pmu_probe_pmu_dev()
1607 return -ENODEV; in acpi_pmu_probe_pmu_dev()
1624 struct device *dev = xgene_pmu->dev; in fdt_get_pmu_hw_inf()
1646 /* A PMU device node without enable-bit-index is always enabled */ in fdt_get_pmu_hw_inf()
1647 if (of_property_read_u32(np, "enable-bit-index", &enable_bit)) in fdt_get_pmu_hw_inf()
1650 ctx->name = xgene_pmu_dev_name(dev, type, enable_bit); in fdt_get_pmu_hw_inf()
1651 if (!ctx->name) { in fdt_get_pmu_hw_inf()
1656 inf = &ctx->inf; in fdt_get_pmu_hw_inf()
1657 inf->type = type; in fdt_get_pmu_hw_inf()
1658 inf->csr = dev_csr; in fdt_get_pmu_hw_inf()
1659 inf->enable_mask = 1 << enable_bit; in fdt_get_pmu_hw_inf()
1670 for_each_child_of_node(pdev->dev.of_node, np) { in fdt_pmu_probe_pmu_dev()
1674 if (of_device_is_compatible(np, "apm,xgene-pmu-l3c")) in fdt_pmu_probe_pmu_dev()
1676 else if (of_device_is_compatible(np, "apm,xgene-pmu-iob")) in fdt_pmu_probe_pmu_dev()
1678 else if (of_device_is_compatible(np, "apm,xgene-pmu-mcb")) in fdt_pmu_probe_pmu_dev()
1680 else if (of_device_is_compatible(np, "apm,xgene-pmu-mc")) in fdt_pmu_probe_pmu_dev()
1690 devm_kfree(xgene_pmu->dev, ctx); in fdt_pmu_probe_pmu_dev()
1694 switch (ctx->inf.type) { in fdt_pmu_probe_pmu_dev()
1696 list_add(&ctx->next, &xgene_pmu->l3cpmus); in fdt_pmu_probe_pmu_dev()
1699 list_add(&ctx->next, &xgene_pmu->iobpmus); in fdt_pmu_probe_pmu_dev()
1702 list_add(&ctx->next, &xgene_pmu->iobpmus); in fdt_pmu_probe_pmu_dev()
1705 list_add(&ctx->next, &xgene_pmu->mcbpmus); in fdt_pmu_probe_pmu_dev()
1708 list_add(&ctx->next, &xgene_pmu->mcpmus); in fdt_pmu_probe_pmu_dev()
1719 if (has_acpi_companion(&pdev->dev)) in xgene_pmu_probe_pmu_dev()
1773 { .compatible = "apm,xgene-pmu", .data = &xgene_pmu_data },
1774 { .compatible = "apm,xgene-pmu-v2", .data = &xgene_pmu_v2_data },
1793 if (cpumask_empty(&xgene_pmu->cpu)) in xgene_pmu_online_cpu()
1794 cpumask_set_cpu(cpu, &xgene_pmu->cpu); in xgene_pmu_online_cpu()
1797 WARN_ON(irq_set_affinity(xgene_pmu->irq, &xgene_pmu->cpu)); in xgene_pmu_online_cpu()
1809 if (!cpumask_test_and_clear_cpu(cpu, &xgene_pmu->cpu)) in xgene_pmu_offline_cpu()
1815 list_for_each_entry(ctx, &xgene_pmu->mcpmus, next) { in xgene_pmu_offline_cpu()
1816 perf_pmu_migrate_context(&ctx->pmu_dev->pmu, cpu, target); in xgene_pmu_offline_cpu()
1818 list_for_each_entry(ctx, &xgene_pmu->mcbpmus, next) { in xgene_pmu_offline_cpu()
1819 perf_pmu_migrate_context(&ctx->pmu_dev->pmu, cpu, target); in xgene_pmu_offline_cpu()
1821 list_for_each_entry(ctx, &xgene_pmu->l3cpmus, next) { in xgene_pmu_offline_cpu()
1822 perf_pmu_migrate_context(&ctx->pmu_dev->pmu, cpu, target); in xgene_pmu_offline_cpu()
1824 list_for_each_entry(ctx, &xgene_pmu->iobpmus, next) { in xgene_pmu_offline_cpu()
1825 perf_pmu_migrate_context(&ctx->pmu_dev->pmu, cpu, target); in xgene_pmu_offline_cpu()
1828 cpumask_set_cpu(target, &xgene_pmu->cpu); in xgene_pmu_offline_cpu()
1830 WARN_ON(irq_set_affinity(xgene_pmu->irq, &xgene_pmu->cpu)); in xgene_pmu_offline_cpu()
1850 xgene_pmu = devm_kzalloc(&pdev->dev, sizeof(*xgene_pmu), GFP_KERNEL); in xgene_pmu_probe()
1852 return -ENOMEM; in xgene_pmu_probe()
1853 xgene_pmu->dev = &pdev->dev; in xgene_pmu_probe()
1856 dev_data = device_get_match_data(&pdev->dev); in xgene_pmu_probe()
1858 return -ENODEV; in xgene_pmu_probe()
1859 version = dev_data->id; in xgene_pmu_probe()
1862 xgene_pmu->ops = &xgene_pmu_v3_ops; in xgene_pmu_probe()
1864 xgene_pmu->ops = &xgene_pmu_ops; in xgene_pmu_probe()
1866 INIT_LIST_HEAD(&xgene_pmu->l3cpmus); in xgene_pmu_probe()
1867 INIT_LIST_HEAD(&xgene_pmu->iobpmus); in xgene_pmu_probe()
1868 INIT_LIST_HEAD(&xgene_pmu->mcbpmus); in xgene_pmu_probe()
1869 INIT_LIST_HEAD(&xgene_pmu->mcpmus); in xgene_pmu_probe()
1871 xgene_pmu->version = version; in xgene_pmu_probe()
1872 dev_info(&pdev->dev, "X-Gene PMU version %d\n", xgene_pmu->version); in xgene_pmu_probe()
1874 xgene_pmu->pcppmu_csr = devm_platform_ioremap_resource(pdev, 0); in xgene_pmu_probe()
1875 if (IS_ERR(xgene_pmu->pcppmu_csr)) { in xgene_pmu_probe()
1876 dev_err(&pdev->dev, "ioremap failed for PCP PMU resource\n"); in xgene_pmu_probe()
1877 return PTR_ERR(xgene_pmu->pcppmu_csr); in xgene_pmu_probe()
1882 return -EINVAL; in xgene_pmu_probe()
1884 rc = devm_request_irq(&pdev->dev, irq, xgene_pmu_isr, in xgene_pmu_probe()
1886 dev_name(&pdev->dev), xgene_pmu); in xgene_pmu_probe()
1888 dev_err(&pdev->dev, "Could not request IRQ %d\n", irq); in xgene_pmu_probe()
1892 xgene_pmu->irq = irq; in xgene_pmu_probe()
1894 raw_spin_lock_init(&xgene_pmu->lock); in xgene_pmu_probe()
1899 dev_warn(&pdev->dev, "Unknown MCB/MCU active status\n"); in xgene_pmu_probe()
1900 xgene_pmu->mcb_active_mask = 0x1; in xgene_pmu_probe()
1901 xgene_pmu->mc_active_mask = 0x1; in xgene_pmu_probe()
1906 &xgene_pmu->node); in xgene_pmu_probe()
1908 dev_err(&pdev->dev, "Error %d registering hotplug", rc); in xgene_pmu_probe()
1915 dev_err(&pdev->dev, "No PMU perf devices found!\n"); in xgene_pmu_probe()
1920 xgene_pmu->ops->unmask_int(xgene_pmu); in xgene_pmu_probe()
1926 &xgene_pmu->node); in xgene_pmu_probe()
1936 perf_pmu_unregister(&ctx->pmu_dev->pmu); in xgene_pmu_dev_cleanup()
1942 struct xgene_pmu *xgene_pmu = dev_get_drvdata(&pdev->dev); in xgene_pmu_remove()
1944 xgene_pmu_dev_cleanup(xgene_pmu, &xgene_pmu->l3cpmus); in xgene_pmu_remove()
1945 xgene_pmu_dev_cleanup(xgene_pmu, &xgene_pmu->iobpmus); in xgene_pmu_remove()
1946 xgene_pmu_dev_cleanup(xgene_pmu, &xgene_pmu->mcbpmus); in xgene_pmu_remove()
1947 xgene_pmu_dev_cleanup(xgene_pmu, &xgene_pmu->mcpmus); in xgene_pmu_remove()
1949 &xgene_pmu->node); in xgene_pmu_remove()
1958 .name = "xgene-pmu",