Symbol: hns3_pmu
drivers/perf/hisilicon/hns3_pmu.c
1001
struct hns3_pmu *hns3_pmu,
drivers/perf/hisilicon/hns3_pmu.c
1009
return hns3_pmu_valid_bdf(hns3_pmu, bdf);
drivers/perf/hisilicon/hns3_pmu.c
1013
struct hns3_pmu *hns3_pmu)
drivers/perf/hisilicon/hns3_pmu.c
1021
pci_err(hns3_pmu->pdev, "Invalid pmu event\n");
drivers/perf/hisilicon/hns3_pmu.c
1031
return hns3_pmu_set_func_mode(event, hns3_pmu);
drivers/perf/hisilicon/hns3_pmu.c
1034
return hns3_pmu_set_func_queue_mode(event, hns3_pmu);
drivers/perf/hisilicon/hns3_pmu.c
1046
if (hns3_pmu_is_enabled_func_intr_mode(event, hns3_pmu, pmu_event)) {
drivers/perf/hisilicon/hns3_pmu.c
1130
struct hns3_pmu *hns3_pmu = to_hns3_pmu(event->pmu);
drivers/perf/hisilicon/hns3_pmu.c
1144
hns3_pmu_writel(hns3_pmu, HNS3_PMU_REG_EVENT_CTRL_LOW, idx, val);
drivers/perf/hisilicon/hns3_pmu.c
1147
hns3_pmu_writel(hns3_pmu, HNS3_PMU_REG_EVENT_CTRL_HIGH, idx, val);
drivers/perf/hisilicon/hns3_pmu.c
1150
hns3_pmu_set_qid_para(hns3_pmu, idx, bdf, queue_id);
drivers/perf/hisilicon/hns3_pmu.c
1153
static void hns3_pmu_enable_counter(struct hns3_pmu *hns3_pmu,
drivers/perf/hisilicon/hns3_pmu.c
1159
val = hns3_pmu_readl(hns3_pmu, HNS3_PMU_REG_EVENT_CTRL_LOW, idx);
drivers/perf/hisilicon/hns3_pmu.c
1161
hns3_pmu_writel(hns3_pmu, HNS3_PMU_REG_EVENT_CTRL_LOW, idx, val);
drivers/perf/hisilicon/hns3_pmu.c
1164
static void hns3_pmu_disable_counter(struct hns3_pmu *hns3_pmu,
drivers/perf/hisilicon/hns3_pmu.c
1170
val = hns3_pmu_readl(hns3_pmu, HNS3_PMU_REG_EVENT_CTRL_LOW, idx);
drivers/perf/hisilicon/hns3_pmu.c
1172
hns3_pmu_writel(hns3_pmu, HNS3_PMU_REG_EVENT_CTRL_LOW, idx, val);
drivers/perf/hisilicon/hns3_pmu.c
1175
static void hns3_pmu_enable_intr(struct hns3_pmu *hns3_pmu,
drivers/perf/hisilicon/hns3_pmu.c
1181
val = hns3_pmu_readl(hns3_pmu, HNS3_PMU_REG_EVENT_INTR_MASK, idx);
drivers/perf/hisilicon/hns3_pmu.c
1183
hns3_pmu_writel(hns3_pmu, HNS3_PMU_REG_EVENT_INTR_MASK, idx, val);
drivers/perf/hisilicon/hns3_pmu.c
1186
static void hns3_pmu_disable_intr(struct hns3_pmu *hns3_pmu,
drivers/perf/hisilicon/hns3_pmu.c
1192
val = hns3_pmu_readl(hns3_pmu, HNS3_PMU_REG_EVENT_INTR_MASK, idx);
drivers/perf/hisilicon/hns3_pmu.c
1194
hns3_pmu_writel(hns3_pmu, HNS3_PMU_REG_EVENT_INTR_MASK, idx, val);
drivers/perf/hisilicon/hns3_pmu.c
1197
static void hns3_pmu_clear_intr_status(struct hns3_pmu *hns3_pmu, u32 idx)
drivers/perf/hisilicon/hns3_pmu.c
1201
val = hns3_pmu_readl(hns3_pmu, HNS3_PMU_REG_EVENT_CTRL_LOW, idx);
drivers/perf/hisilicon/hns3_pmu.c
1203
hns3_pmu_writel(hns3_pmu, HNS3_PMU_REG_EVENT_CTRL_LOW, idx, val);
drivers/perf/hisilicon/hns3_pmu.c
1205
val = hns3_pmu_readl(hns3_pmu, HNS3_PMU_REG_EVENT_CTRL_LOW, idx);
drivers/perf/hisilicon/hns3_pmu.c
1207
hns3_pmu_writel(hns3_pmu, HNS3_PMU_REG_EVENT_CTRL_LOW, idx, val);
drivers/perf/hisilicon/hns3_pmu.c
1212
struct hns3_pmu *hns3_pmu = to_hns3_pmu(event->pmu);
drivers/perf/hisilicon/hns3_pmu.c
1214
return hns3_pmu_readq(hns3_pmu, event->hw.event_base, event->hw.idx);
drivers/perf/hisilicon/hns3_pmu.c
1219
struct hns3_pmu *hns3_pmu = to_hns3_pmu(event->pmu);
drivers/perf/hisilicon/hns3_pmu.c
1222
hns3_pmu_writeq(hns3_pmu, HNS3_PMU_REG_EVENT_COUNTER, idx, value);
drivers/perf/hisilicon/hns3_pmu.c
1223
hns3_pmu_writeq(hns3_pmu, HNS3_PMU_REG_EVENT_EXT_COUNTER, idx, value);
drivers/perf/hisilicon/hns3_pmu.c
1236
struct hns3_pmu *hns3_pmu = to_hns3_pmu(event->pmu);
drivers/perf/hisilicon/hns3_pmu.c
1248
event->cpu = hns3_pmu->on_cpu;
drivers/perf/hisilicon/hns3_pmu.c
1250
idx = hns3_pmu_get_event_idx(hns3_pmu);
drivers/perf/hisilicon/hns3_pmu.c
1252
pci_err(hns3_pmu->pdev, "Up to %u events are supported!\n",
drivers/perf/hisilicon/hns3_pmu.c
1259
ret = hns3_pmu_select_filter_mode(event, hns3_pmu);
drivers/perf/hisilicon/hns3_pmu.c
1261
pci_err(hns3_pmu->pdev, "Invalid filter, ret = %d.\n", ret);
drivers/perf/hisilicon/hns3_pmu.c
1266
pci_err(hns3_pmu->pdev, "Invalid event group.\n");
drivers/perf/hisilicon/hns3_pmu.c
1295
struct hns3_pmu *hns3_pmu = to_hns3_pmu(event->pmu);
drivers/perf/hisilicon/hns3_pmu.c
1306
hns3_pmu_enable_intr(hns3_pmu, hwc);
drivers/perf/hisilicon/hns3_pmu.c
1307
hns3_pmu_enable_counter(hns3_pmu, hwc);
drivers/perf/hisilicon/hns3_pmu.c
1314
struct hns3_pmu *hns3_pmu = to_hns3_pmu(event->pmu);
drivers/perf/hisilicon/hns3_pmu.c
1317
hns3_pmu_disable_counter(hns3_pmu, hwc);
drivers/perf/hisilicon/hns3_pmu.c
1318
hns3_pmu_disable_intr(hns3_pmu, hwc);
drivers/perf/hisilicon/hns3_pmu.c
1333
struct hns3_pmu *hns3_pmu = to_hns3_pmu(event->pmu);
drivers/perf/hisilicon/hns3_pmu.c
1340
idx = hns3_pmu_find_related_event_idx(hns3_pmu, event);
drivers/perf/hisilicon/hns3_pmu.c
1350
idx = hns3_pmu_get_event_idx(hns3_pmu);
drivers/perf/hisilicon/hns3_pmu.c
1355
hns3_pmu->hw_events[idx] = event;
drivers/perf/hisilicon/hns3_pmu.c
1366
struct hns3_pmu *hns3_pmu = to_hns3_pmu(event->pmu);
drivers/perf/hisilicon/hns3_pmu.c
1370
hns3_pmu->hw_events[hwc->idx] = NULL;
drivers/perf/hisilicon/hns3_pmu.c
1376
struct hns3_pmu *hns3_pmu = to_hns3_pmu(pmu);
drivers/perf/hisilicon/hns3_pmu.c
1379
val = readl(hns3_pmu->base + HNS3_PMU_REG_GLOBAL_CTRL);
drivers/perf/hisilicon/hns3_pmu.c
1381
writel(val, hns3_pmu->base + HNS3_PMU_REG_GLOBAL_CTRL);
drivers/perf/hisilicon/hns3_pmu.c
1386
struct hns3_pmu *hns3_pmu = to_hns3_pmu(pmu);
drivers/perf/hisilicon/hns3_pmu.c
1389
val = readl(hns3_pmu->base + HNS3_PMU_REG_GLOBAL_CTRL);
drivers/perf/hisilicon/hns3_pmu.c
1391
writel(val, hns3_pmu->base + HNS3_PMU_REG_GLOBAL_CTRL);
drivers/perf/hisilicon/hns3_pmu.c
1394
static int hns3_pmu_alloc_pmu(struct pci_dev *pdev, struct hns3_pmu *hns3_pmu)
drivers/perf/hisilicon/hns3_pmu.c
1400
hns3_pmu->base = pcim_iomap_table(pdev)[BAR_2];
drivers/perf/hisilicon/hns3_pmu.c
1401
if (!hns3_pmu->base) {
drivers/perf/hisilicon/hns3_pmu.c
1406
hns3_pmu->hw_clk_freq = readl(hns3_pmu->base + HNS3_PMU_REG_CLOCK_FREQ);
drivers/perf/hisilicon/hns3_pmu.c
1408
val = readl(hns3_pmu->base + HNS3_PMU_REG_BDF);
drivers/perf/hisilicon/hns3_pmu.c
1409
hns3_pmu->bdf_min = val & 0xffff;
drivers/perf/hisilicon/hns3_pmu.c
1410
hns3_pmu->bdf_max = val >> 16;
drivers/perf/hisilicon/hns3_pmu.c
1412
val = readl(hns3_pmu->base + HNS3_PMU_REG_DEVICE_ID);
drivers/perf/hisilicon/hns3_pmu.c
1418
hns3_pmu->pdev = pdev;
drivers/perf/hisilicon/hns3_pmu.c
1419
hns3_pmu->on_cpu = -1;
drivers/perf/hisilicon/hns3_pmu.c
1420
hns3_pmu->identifier = readl(hns3_pmu->base + HNS3_PMU_REG_VERSION);
drivers/perf/hisilicon/hns3_pmu.c
1421
hns3_pmu->pmu = (struct pmu) {
drivers/perf/hisilicon/hns3_pmu.c
1443
struct hns3_pmu *hns3_pmu = data;
drivers/perf/hisilicon/hns3_pmu.c
1447
intr_status = hns3_pmu_readl(hns3_pmu,
drivers/perf/hisilicon/hns3_pmu.c
1456
hns3_pmu_clear_intr_status(hns3_pmu, idx);
drivers/perf/hisilicon/hns3_pmu.c
1464
struct hns3_pmu *hns3_pmu;
drivers/perf/hisilicon/hns3_pmu.c
1466
hns3_pmu = hlist_entry_safe(node, struct hns3_pmu, node);
drivers/perf/hisilicon/hns3_pmu.c
1467
if (!hns3_pmu)
drivers/perf/hisilicon/hns3_pmu.c
1470
if (hns3_pmu->on_cpu == -1) {
drivers/perf/hisilicon/hns3_pmu.c
1471
hns3_pmu->on_cpu = cpu;
drivers/perf/hisilicon/hns3_pmu.c
1472
irq_set_affinity(hns3_pmu->irq, cpumask_of(cpu));
drivers/perf/hisilicon/hns3_pmu.c
1480
struct hns3_pmu *hns3_pmu;
drivers/perf/hisilicon/hns3_pmu.c
1483
hns3_pmu = hlist_entry_safe(node, struct hns3_pmu, node);
drivers/perf/hisilicon/hns3_pmu.c
1484
if (!hns3_pmu)
drivers/perf/hisilicon/hns3_pmu.c
1488
if (hns3_pmu->on_cpu != cpu)
drivers/perf/hisilicon/hns3_pmu.c
1496
perf_pmu_migrate_context(&hns3_pmu->pmu, cpu, target);
drivers/perf/hisilicon/hns3_pmu.c
1497
hns3_pmu->on_cpu = target;
drivers/perf/hisilicon/hns3_pmu.c
1498
irq_set_affinity(hns3_pmu->irq, cpumask_of(target));
drivers/perf/hisilicon/hns3_pmu.c
1511
struct hns3_pmu *hns3_pmu)
drivers/perf/hisilicon/hns3_pmu.c
1529
hns3_pmu->pmu.name, hns3_pmu);
drivers/perf/hisilicon/hns3_pmu.c
1535
hns3_pmu->irq = irq;
drivers/perf/hisilicon/hns3_pmu.c
1540
static int hns3_pmu_init_pmu(struct pci_dev *pdev, struct hns3_pmu *hns3_pmu)
drivers/perf/hisilicon/hns3_pmu.c
1544
ret = hns3_pmu_alloc_pmu(pdev, hns3_pmu);
drivers/perf/hisilicon/hns3_pmu.c
1548
ret = hns3_pmu_irq_register(pdev, hns3_pmu);
drivers/perf/hisilicon/hns3_pmu.c
1553
&hns3_pmu->node);
drivers/perf/hisilicon/hns3_pmu.c
1559
ret = perf_pmu_register(&hns3_pmu->pmu, hns3_pmu->pmu.name, -1);
drivers/perf/hisilicon/hns3_pmu.c
1563
&hns3_pmu->node);
drivers/perf/hisilicon/hns3_pmu.c
1571
struct hns3_pmu *hns3_pmu = pci_get_drvdata(pdev);
drivers/perf/hisilicon/hns3_pmu.c
1573
perf_pmu_unregister(&hns3_pmu->pmu);
drivers/perf/hisilicon/hns3_pmu.c
1575
&hns3_pmu->node);
drivers/perf/hisilicon/hns3_pmu.c
1601
struct hns3_pmu *hns3_pmu;
drivers/perf/hisilicon/hns3_pmu.c
1604
hns3_pmu = devm_kzalloc(&pdev->dev, sizeof(*hns3_pmu), GFP_KERNEL);
drivers/perf/hisilicon/hns3_pmu.c
1605
if (!hns3_pmu)
drivers/perf/hisilicon/hns3_pmu.c
1612
ret = hns3_pmu_init_pmu(pdev, hns3_pmu);
drivers/perf/hisilicon/hns3_pmu.c
1618
pci_set_drvdata(pdev, hns3_pmu);
drivers/perf/hisilicon/hns3_pmu.c
316
#define to_hns3_pmu(p) (container_of((p), struct hns3_pmu, pmu))
drivers/perf/hisilicon/hns3_pmu.c
461
struct hns3_pmu *hns3_pmu = to_hns3_pmu(dev_get_drvdata(dev));
drivers/perf/hisilicon/hns3_pmu.c
463
return sysfs_emit(buf, "0x%x\n", hns3_pmu->identifier);
drivers/perf/hisilicon/hns3_pmu.c
470
struct hns3_pmu *hns3_pmu = to_hns3_pmu(dev_get_drvdata(dev));
drivers/perf/hisilicon/hns3_pmu.c
472
return sysfs_emit(buf, "%d\n", hns3_pmu->on_cpu);
drivers/perf/hisilicon/hns3_pmu.c
479
struct hns3_pmu *hns3_pmu = to_hns3_pmu(dev_get_drvdata(dev));
drivers/perf/hisilicon/hns3_pmu.c
480
u16 bdf = hns3_pmu->bdf_min;
drivers/perf/hisilicon/hns3_pmu.c
490
struct hns3_pmu *hns3_pmu = to_hns3_pmu(dev_get_drvdata(dev));
drivers/perf/hisilicon/hns3_pmu.c
491
u16 bdf = hns3_pmu->bdf_max;
drivers/perf/hisilicon/hns3_pmu.c
501
struct hns3_pmu *hns3_pmu = to_hns3_pmu(dev_get_drvdata(dev));
drivers/perf/hisilicon/hns3_pmu.c
503
return sysfs_emit(buf, "%u\n", hns3_pmu->hw_clk_freq);
drivers/perf/hisilicon/hns3_pmu.c
736
static u32 hns3_pmu_readl(struct hns3_pmu *hns3_pmu, u32 reg_offset, u32 idx)
drivers/perf/hisilicon/hns3_pmu.c
740
return readl(hns3_pmu->base + offset);
drivers/perf/hisilicon/hns3_pmu.c
743
static void hns3_pmu_writel(struct hns3_pmu *hns3_pmu, u32 reg_offset, u32 idx,
drivers/perf/hisilicon/hns3_pmu.c
748
writel(val, hns3_pmu->base + offset);
drivers/perf/hisilicon/hns3_pmu.c
751
static u64 hns3_pmu_readq(struct hns3_pmu *hns3_pmu, u32 reg_offset, u32 idx)
drivers/perf/hisilicon/hns3_pmu.c
755
return readq(hns3_pmu->base + offset);
drivers/perf/hisilicon/hns3_pmu.c
758
static void hns3_pmu_writeq(struct hns3_pmu *hns3_pmu, u32 reg_offset, u32 idx,
drivers/perf/hisilicon/hns3_pmu.c
763
writeq(val, hns3_pmu->base + offset);
drivers/perf/hisilicon/hns3_pmu.c
772
static int hns3_pmu_find_related_event_idx(struct hns3_pmu *hns3_pmu,
drivers/perf/hisilicon/hns3_pmu.c
780
sibling = hns3_pmu->hw_events[idx];
drivers/perf/hisilicon/hns3_pmu.c
802
static int hns3_pmu_get_event_idx(struct hns3_pmu *hns3_pmu)
drivers/perf/hisilicon/hns3_pmu.c
807
if (!hns3_pmu->hw_events[idx])
drivers/perf/hisilicon/hns3_pmu.c
814
static bool hns3_pmu_valid_bdf(struct hns3_pmu *hns3_pmu, u16 bdf)
drivers/perf/hisilicon/hns3_pmu.c
818
if (bdf < hns3_pmu->bdf_min || bdf > hns3_pmu->bdf_max) {
drivers/perf/hisilicon/hns3_pmu.c
819
pci_err(hns3_pmu->pdev, "Invalid EP device: %#x!\n", bdf);
drivers/perf/hisilicon/hns3_pmu.c
823
pdev = pci_get_domain_bus_and_slot(pci_domain_nr(hns3_pmu->pdev->bus),
drivers/perf/hisilicon/hns3_pmu.c
827
pci_err(hns3_pmu->pdev, "Nonexistent EP device: %#x!\n", bdf);
drivers/perf/hisilicon/hns3_pmu.c
835
static void hns3_pmu_set_qid_para(struct hns3_pmu *hns3_pmu, u32 idx, u16 bdf,
drivers/perf/hisilicon/hns3_pmu.c
842
hns3_pmu_writel(hns3_pmu, HNS3_PMU_REG_EVENT_QID_PARA, idx, val);
drivers/perf/hisilicon/hns3_pmu.c
845
static bool hns3_pmu_qid_req_start(struct hns3_pmu *hns3_pmu, u32 idx)
drivers/perf/hisilicon/hns3_pmu.c
852
hns3_pmu_writel(hns3_pmu, HNS3_PMU_REG_EVENT_QID_CTRL, idx,
drivers/perf/hisilicon/hns3_pmu.c
856
err = readl_poll_timeout(hns3_pmu->base + reg_qid_ctrl, val,
drivers/perf/hisilicon/hns3_pmu.c
859
pci_err(hns3_pmu->pdev, "QID request timeout!\n");
drivers/perf/hisilicon/hns3_pmu.c
867
hns3_pmu_writel(hns3_pmu, HNS3_PMU_REG_EVENT_QID_CTRL, idx, 0);
drivers/perf/hisilicon/hns3_pmu.c
872
static bool hns3_pmu_valid_queue(struct hns3_pmu *hns3_pmu, u32 idx, u16 bdf,
drivers/perf/hisilicon/hns3_pmu.c
875
hns3_pmu_set_qid_para(hns3_pmu, idx, bdf, queue);
drivers/perf/hisilicon/hns3_pmu.c
877
return hns3_pmu_qid_req_start(hns3_pmu, idx);
drivers/perf/hisilicon/hns3_pmu.c
902
struct hns3_pmu *hns3_pmu)
drivers/perf/hisilicon/hns3_pmu.c
907
if (!hns3_pmu_valid_bdf(hns3_pmu, bdf))
drivers/perf/hisilicon/hns3_pmu.c
916
struct hns3_pmu *hns3_pmu)
drivers/perf/hisilicon/hns3_pmu.c
922
if (!hns3_pmu_valid_bdf(hns3_pmu, bdf))
drivers/perf/hisilicon/hns3_pmu.c
925
if (!hns3_pmu_valid_queue(hns3_pmu, hwc->idx, bdf, queue_id)) {
drivers/perf/hisilicon/hns3_pmu.c
926
pci_err(hns3_pmu->pdev, "Invalid queue: %u\n", queue_id);