xgene_pmu 94 drivers/perf/xgene_pmu.c struct xgene_pmu *parent; xgene_pmu 104 drivers/perf/xgene_pmu.c void (*mask_int)(struct xgene_pmu *pmu); xgene_pmu 105 drivers/perf/xgene_pmu.c void (*unmask_int)(struct xgene_pmu *pmu); xgene_pmu 713 drivers/perf/xgene_pmu.c static inline void xgene_pmu_mask_int(struct xgene_pmu *xgene_pmu) xgene_pmu 715 drivers/perf/xgene_pmu.c writel(PCPPMU_INTENMASK, xgene_pmu->pcppmu_csr + PCPPMU_INTMASK_REG); xgene_pmu 718 drivers/perf/xgene_pmu.c static inline void xgene_pmu_v3_mask_int(struct xgene_pmu *xgene_pmu) xgene_pmu 720 drivers/perf/xgene_pmu.c writel(PCPPMU_V3_INTENMASK, xgene_pmu->pcppmu_csr + PCPPMU_INTMASK_REG); xgene_pmu 723 drivers/perf/xgene_pmu.c static inline void xgene_pmu_unmask_int(struct xgene_pmu *xgene_pmu) xgene_pmu 725 drivers/perf/xgene_pmu.c writel(PCPPMU_INTCLRMASK, xgene_pmu->pcppmu_csr + PCPPMU_INTMASK_REG); xgene_pmu 728 drivers/perf/xgene_pmu.c static inline void xgene_pmu_v3_unmask_int(struct xgene_pmu *xgene_pmu) xgene_pmu 731 drivers/perf/xgene_pmu.c xgene_pmu->pcppmu_csr + PCPPMU_INTMASK_REG); xgene_pmu 872 drivers/perf/xgene_pmu.c struct xgene_pmu *xgene_pmu = pmu_dev->parent; xgene_pmu 879 drivers/perf/xgene_pmu.c xgene_pmu->ops->start_counters(pmu_dev); xgene_pmu 885 drivers/perf/xgene_pmu.c struct xgene_pmu *xgene_pmu = pmu_dev->parent; xgene_pmu 887 drivers/perf/xgene_pmu.c xgene_pmu->ops->stop_counters(pmu_dev); xgene_pmu 950 drivers/perf/xgene_pmu.c struct xgene_pmu *xgene_pmu = pmu_dev->parent; xgene_pmu 952 drivers/perf/xgene_pmu.c xgene_pmu->ops->write_evttype(pmu_dev, GET_CNTR(event), xgene_pmu 954 drivers/perf/xgene_pmu.c xgene_pmu->ops->write_agentmsk(pmu_dev, ~((u32)GET_AGENTID(event))); xgene_pmu 956 drivers/perf/xgene_pmu.c xgene_pmu->ops->write_agent1msk(pmu_dev, xgene_pmu 959 drivers/perf/xgene_pmu.c xgene_pmu->ops->enable_counter(pmu_dev, GET_CNTR(event)); xgene_pmu 960 drivers/perf/xgene_pmu.c xgene_pmu->ops->enable_counter_int(pmu_dev, GET_CNTR(event)); xgene_pmu 966 drivers/perf/xgene_pmu.c struct xgene_pmu *xgene_pmu = pmu_dev->parent; xgene_pmu 968 drivers/perf/xgene_pmu.c xgene_pmu->ops->disable_counter(pmu_dev, GET_CNTR(event)); xgene_pmu 969 drivers/perf/xgene_pmu.c xgene_pmu->ops->disable_counter_int(pmu_dev, GET_CNTR(event)); xgene_pmu 975 drivers/perf/xgene_pmu.c struct xgene_pmu *xgene_pmu = pmu_dev->parent; xgene_pmu 987 drivers/perf/xgene_pmu.c xgene_pmu->ops->write_counter(pmu_dev, hw->idx, val); xgene_pmu 993 drivers/perf/xgene_pmu.c struct xgene_pmu *xgene_pmu = pmu_dev->parent; xgene_pmu 999 drivers/perf/xgene_pmu.c new_raw_count = xgene_pmu->ops->read_counter(pmu_dev, GET_CNTR(event)); xgene_pmu 1018 drivers/perf/xgene_pmu.c struct xgene_pmu *xgene_pmu = pmu_dev->parent; xgene_pmu 1032 drivers/perf/xgene_pmu.c xgene_pmu->ops->write_counter(pmu_dev, GET_CNTR(event), xgene_pmu 1095 drivers/perf/xgene_pmu.c struct xgene_pmu *xgene_pmu; xgene_pmu 1102 drivers/perf/xgene_pmu.c xgene_pmu = pmu_dev->parent; xgene_pmu 1103 drivers/perf/xgene_pmu.c if (xgene_pmu->version == PCP_PMU_V1) xgene_pmu 1124 drivers/perf/xgene_pmu.c xgene_pmu->ops->stop_counters(pmu_dev); xgene_pmu 1125 drivers/perf/xgene_pmu.c xgene_pmu->ops->reset_counters(pmu_dev); xgene_pmu 1131 drivers/perf/xgene_pmu.c xgene_pmu_dev_add(struct xgene_pmu *xgene_pmu, struct xgene_pmu_dev_ctx *ctx) xgene_pmu 1133 drivers/perf/xgene_pmu.c struct device *dev = xgene_pmu->dev; xgene_pmu 1139 drivers/perf/xgene_pmu.c pmu->parent = xgene_pmu; xgene_pmu 1145 drivers/perf/xgene_pmu.c if (!(xgene_pmu->l3c_active_mask & pmu->inf->enable_mask)) xgene_pmu 1147 drivers/perf/xgene_pmu.c if (xgene_pmu->version == PCP_PMU_V3) xgene_pmu 1153 drivers/perf/xgene_pmu.c if (xgene_pmu->version == PCP_PMU_V3) xgene_pmu 1159 drivers/perf/xgene_pmu.c if (xgene_pmu->version == PCP_PMU_V3) xgene_pmu 1163 drivers/perf/xgene_pmu.c if (!(xgene_pmu->mcb_active_mask & pmu->inf->enable_mask)) xgene_pmu 1165 drivers/perf/xgene_pmu.c if (xgene_pmu->version == PCP_PMU_V3) xgene_pmu 1171 drivers/perf/xgene_pmu.c if (!(xgene_pmu->mc_active_mask & pmu->inf->enable_mask)) xgene_pmu 1173 drivers/perf/xgene_pmu.c if (xgene_pmu->version == PCP_PMU_V3) xgene_pmu 1194 drivers/perf/xgene_pmu.c struct xgene_pmu *xgene_pmu = pmu_dev->parent; xgene_pmu 1199 drivers/perf/xgene_pmu.c xgene_pmu->ops->stop_counters(pmu_dev); xgene_pmu 1201 drivers/perf/xgene_pmu.c if (xgene_pmu->version == PCP_PMU_V3) xgene_pmu 1210 drivers/perf/xgene_pmu.c if (xgene_pmu->version == PCP_PMU_V1) xgene_pmu 1212 drivers/perf/xgene_pmu.c else if (xgene_pmu->version == PCP_PMU_V2) xgene_pmu 1229 drivers/perf/xgene_pmu.c xgene_pmu->ops->start_counters(pmu_dev); xgene_pmu 1236 drivers/perf/xgene_pmu.c struct xgene_pmu *xgene_pmu = dev_id; xgene_pmu 1240 drivers/perf/xgene_pmu.c raw_spin_lock_irqsave(&xgene_pmu->lock, flags); xgene_pmu 1243 drivers/perf/xgene_pmu.c val = readl(xgene_pmu->pcppmu_csr + PCPPMU_INTSTATUS_REG); xgene_pmu 1244 drivers/perf/xgene_pmu.c if (xgene_pmu->version == PCP_PMU_V3) { xgene_pmu 1256 drivers/perf/xgene_pmu.c list_for_each_entry(ctx, &xgene_pmu->mcpmus, next) { xgene_pmu 1261 drivers/perf/xgene_pmu.c list_for_each_entry(ctx, &xgene_pmu->mcbpmus, next) { xgene_pmu 1266 drivers/perf/xgene_pmu.c list_for_each_entry(ctx, &xgene_pmu->l3cpmus, next) { xgene_pmu 1271 drivers/perf/xgene_pmu.c list_for_each_entry(ctx, &xgene_pmu->iobpmus, next) { xgene_pmu 1276 drivers/perf/xgene_pmu.c raw_spin_unlock_irqrestore(&xgene_pmu->lock, flags); xgene_pmu 1281 drivers/perf/xgene_pmu.c static int acpi_pmu_probe_active_mcb_mcu_l3c(struct xgene_pmu *xgene_pmu, xgene_pmu 1309 drivers/perf/xgene_pmu.c xgene_pmu->l3c_active_mask = 0x1; xgene_pmu 1314 drivers/perf/xgene_pmu.c xgene_pmu->mcb_active_mask = 0x3; xgene_pmu 1317 drivers/perf/xgene_pmu.c xgene_pmu->mc_active_mask = xgene_pmu 1321 drivers/perf/xgene_pmu.c xgene_pmu->mcb_active_mask = 0x1; xgene_pmu 1324 drivers/perf/xgene_pmu.c xgene_pmu->mc_active_mask = xgene_pmu 1331 drivers/perf/xgene_pmu.c static int acpi_pmu_v3_probe_active_mcb_mcu_l3c(struct xgene_pmu *xgene_pmu, xgene_pmu 1352 drivers/perf/xgene_pmu.c xgene_pmu->mcb_active_mask = 0x3; xgene_pmu 1354 drivers/perf/xgene_pmu.c xgene_pmu->l3c_active_mask = 0xFF; xgene_pmu 1357 drivers/perf/xgene_pmu.c xgene_pmu->mc_active_mask = 0xFF; xgene_pmu 1359 drivers/perf/xgene_pmu.c xgene_pmu->mc_active_mask = 0x33; xgene_pmu 1361 drivers/perf/xgene_pmu.c xgene_pmu->mc_active_mask = 0x11; xgene_pmu 1364 drivers/perf/xgene_pmu.c xgene_pmu->mcb_active_mask = 0x1; xgene_pmu 1366 drivers/perf/xgene_pmu.c xgene_pmu->l3c_active_mask = 0x0F; xgene_pmu 1369 drivers/perf/xgene_pmu.c xgene_pmu->mc_active_mask = 0x0F; xgene_pmu 1371 drivers/perf/xgene_pmu.c xgene_pmu->mc_active_mask = 0x03; xgene_pmu 1373 drivers/perf/xgene_pmu.c xgene_pmu->mc_active_mask = 0x01; xgene_pmu 1379 drivers/perf/xgene_pmu.c static int fdt_pmu_probe_active_mcb_mcu_l3c(struct xgene_pmu *xgene_pmu, xgene_pmu 1404 drivers/perf/xgene_pmu.c xgene_pmu->l3c_active_mask = 0x1; xgene_pmu 1410 drivers/perf/xgene_pmu.c xgene_pmu->mcb_active_mask = 0x3; xgene_pmu 1414 drivers/perf/xgene_pmu.c xgene_pmu->mc_active_mask = xgene_pmu 1418 drivers/perf/xgene_pmu.c xgene_pmu->mcb_active_mask = 0x1; xgene_pmu 1422 drivers/perf/xgene_pmu.c xgene_pmu->mc_active_mask = xgene_pmu 1429 drivers/perf/xgene_pmu.c static int xgene_pmu_probe_active_mcb_mcu_l3c(struct xgene_pmu *xgene_pmu, xgene_pmu 1433 drivers/perf/xgene_pmu.c if (xgene_pmu->version == PCP_PMU_V3) xgene_pmu 1434 drivers/perf/xgene_pmu.c return acpi_pmu_v3_probe_active_mcb_mcu_l3c(xgene_pmu, xgene_pmu 1437 drivers/perf/xgene_pmu.c return acpi_pmu_probe_active_mcb_mcu_l3c(xgene_pmu, xgene_pmu 1440 drivers/perf/xgene_pmu.c return fdt_pmu_probe_active_mcb_mcu_l3c(xgene_pmu, pdev); xgene_pmu 1474 drivers/perf/xgene_pmu.c xgene_pmu_dev_ctx *acpi_get_pmu_hw_inf(struct xgene_pmu *xgene_pmu, xgene_pmu 1477 drivers/perf/xgene_pmu.c struct device *dev = xgene_pmu->dev; xgene_pmu 1561 drivers/perf/xgene_pmu.c struct xgene_pmu *xgene_pmu = data; xgene_pmu 1574 drivers/perf/xgene_pmu.c ctx = acpi_get_pmu_hw_inf(xgene_pmu, adev, (u32)acpi_id->driver_data); xgene_pmu 1578 drivers/perf/xgene_pmu.c if (xgene_pmu_dev_add(xgene_pmu, ctx)) { xgene_pmu 1580 drivers/perf/xgene_pmu.c devm_kfree(xgene_pmu->dev, ctx); xgene_pmu 1586 drivers/perf/xgene_pmu.c list_add(&ctx->next, &xgene_pmu->l3cpmus); xgene_pmu 1589 drivers/perf/xgene_pmu.c list_add(&ctx->next, &xgene_pmu->iobpmus); xgene_pmu 1592 drivers/perf/xgene_pmu.c list_add(&ctx->next, &xgene_pmu->iobpmus); xgene_pmu 1595 drivers/perf/xgene_pmu.c list_add(&ctx->next, &xgene_pmu->mcbpmus); xgene_pmu 1598 drivers/perf/xgene_pmu.c list_add(&ctx->next, &xgene_pmu->mcpmus); xgene_pmu 1604 drivers/perf/xgene_pmu.c static int acpi_pmu_probe_pmu_dev(struct xgene_pmu *xgene_pmu, xgene_pmu 1607 drivers/perf/xgene_pmu.c struct device *dev = xgene_pmu->dev; xgene_pmu 1616 drivers/perf/xgene_pmu.c acpi_pmu_dev_add, NULL, xgene_pmu, NULL); xgene_pmu 1625 drivers/perf/xgene_pmu.c static int acpi_pmu_probe_pmu_dev(struct xgene_pmu *xgene_pmu, xgene_pmu 1633 drivers/perf/xgene_pmu.c xgene_pmu_dev_ctx *fdt_get_pmu_hw_inf(struct xgene_pmu *xgene_pmu, xgene_pmu 1636 drivers/perf/xgene_pmu.c struct device *dev = xgene_pmu->dev; xgene_pmu 1676 drivers/perf/xgene_pmu.c static int fdt_pmu_probe_pmu_dev(struct xgene_pmu *xgene_pmu, xgene_pmu 1687 drivers/perf/xgene_pmu.c ctx = fdt_get_pmu_hw_inf(xgene_pmu, np, PMU_TYPE_L3C); xgene_pmu 1689 drivers/perf/xgene_pmu.c ctx = fdt_get_pmu_hw_inf(xgene_pmu, np, PMU_TYPE_IOB); xgene_pmu 1691 drivers/perf/xgene_pmu.c ctx = fdt_get_pmu_hw_inf(xgene_pmu, np, PMU_TYPE_MCB); xgene_pmu 1693 drivers/perf/xgene_pmu.c ctx = fdt_get_pmu_hw_inf(xgene_pmu, np, PMU_TYPE_MC); xgene_pmu 1700 drivers/perf/xgene_pmu.c if (xgene_pmu_dev_add(xgene_pmu, ctx)) { xgene_pmu 1702 drivers/perf/xgene_pmu.c devm_kfree(xgene_pmu->dev, ctx); xgene_pmu 1708 drivers/perf/xgene_pmu.c list_add(&ctx->next, &xgene_pmu->l3cpmus); xgene_pmu 1711 drivers/perf/xgene_pmu.c list_add(&ctx->next, &xgene_pmu->iobpmus); xgene_pmu 1714 drivers/perf/xgene_pmu.c list_add(&ctx->next, &xgene_pmu->iobpmus); xgene_pmu 1717 drivers/perf/xgene_pmu.c list_add(&ctx->next, &xgene_pmu->mcbpmus); xgene_pmu 1720 drivers/perf/xgene_pmu.c list_add(&ctx->next, &xgene_pmu->mcpmus); xgene_pmu 1728 drivers/perf/xgene_pmu.c static int xgene_pmu_probe_pmu_dev(struct xgene_pmu *xgene_pmu, xgene_pmu 1732 drivers/perf/xgene_pmu.c return acpi_pmu_probe_pmu_dev(xgene_pmu, pdev); xgene_pmu 1733 drivers/perf/xgene_pmu.c return fdt_pmu_probe_pmu_dev(xgene_pmu, pdev); xgene_pmu 1796 drivers/perf/xgene_pmu.c struct xgene_pmu *xgene_pmu = hlist_entry_safe(node, struct xgene_pmu, xgene_pmu 1799 drivers/perf/xgene_pmu.c if (cpumask_empty(&xgene_pmu->cpu)) xgene_pmu 1800 drivers/perf/xgene_pmu.c cpumask_set_cpu(cpu, &xgene_pmu->cpu); xgene_pmu 1803 drivers/perf/xgene_pmu.c WARN_ON(irq_set_affinity(xgene_pmu->irq, &xgene_pmu->cpu)); xgene_pmu 1810 drivers/perf/xgene_pmu.c struct xgene_pmu *xgene_pmu = hlist_entry_safe(node, struct xgene_pmu, xgene_pmu 1815 drivers/perf/xgene_pmu.c if (!cpumask_test_and_clear_cpu(cpu, &xgene_pmu->cpu)) xgene_pmu 1821 drivers/perf/xgene_pmu.c list_for_each_entry(ctx, &xgene_pmu->mcpmus, next) { xgene_pmu 1824 drivers/perf/xgene_pmu.c list_for_each_entry(ctx, &xgene_pmu->mcbpmus, next) { xgene_pmu 1827 drivers/perf/xgene_pmu.c list_for_each_entry(ctx, &xgene_pmu->l3cpmus, next) { xgene_pmu 1830 drivers/perf/xgene_pmu.c list_for_each_entry(ctx, &xgene_pmu->iobpmus, next) { xgene_pmu 1834 drivers/perf/xgene_pmu.c cpumask_set_cpu(target, &xgene_pmu->cpu); xgene_pmu 1836 drivers/perf/xgene_pmu.c WARN_ON(irq_set_affinity(xgene_pmu->irq, &xgene_pmu->cpu)); xgene_pmu 1845 drivers/perf/xgene_pmu.c struct xgene_pmu *xgene_pmu; xgene_pmu 1858 drivers/perf/xgene_pmu.c xgene_pmu = devm_kzalloc(&pdev->dev, sizeof(*xgene_pmu), GFP_KERNEL); xgene_pmu 1859 drivers/perf/xgene_pmu.c if (!xgene_pmu) xgene_pmu 1861 drivers/perf/xgene_pmu.c xgene_pmu->dev = &pdev->dev; xgene_pmu 1862 drivers/perf/xgene_pmu.c platform_set_drvdata(pdev, xgene_pmu); xgene_pmu 1884 drivers/perf/xgene_pmu.c xgene_pmu->ops = &xgene_pmu_v3_ops; xgene_pmu 1886 drivers/perf/xgene_pmu.c xgene_pmu->ops = &xgene_pmu_ops; xgene_pmu 1888 drivers/perf/xgene_pmu.c INIT_LIST_HEAD(&xgene_pmu->l3cpmus); xgene_pmu 1889 drivers/perf/xgene_pmu.c INIT_LIST_HEAD(&xgene_pmu->iobpmus); xgene_pmu 1890 drivers/perf/xgene_pmu.c INIT_LIST_HEAD(&xgene_pmu->mcbpmus); xgene_pmu 1891 drivers/perf/xgene_pmu.c INIT_LIST_HEAD(&xgene_pmu->mcpmus); xgene_pmu 1893 drivers/perf/xgene_pmu.c xgene_pmu->version = version; xgene_pmu 1894 drivers/perf/xgene_pmu.c dev_info(&pdev->dev, "X-Gene PMU version %d\n", xgene_pmu->version); xgene_pmu 1897 drivers/perf/xgene_pmu.c xgene_pmu->pcppmu_csr = devm_ioremap_resource(&pdev->dev, res); xgene_pmu 1898 drivers/perf/xgene_pmu.c if (IS_ERR(xgene_pmu->pcppmu_csr)) { xgene_pmu 1900 drivers/perf/xgene_pmu.c return PTR_ERR(xgene_pmu->pcppmu_csr); xgene_pmu 1909 drivers/perf/xgene_pmu.c dev_name(&pdev->dev), xgene_pmu); xgene_pmu 1915 drivers/perf/xgene_pmu.c xgene_pmu->irq = irq; xgene_pmu 1917 drivers/perf/xgene_pmu.c raw_spin_lock_init(&xgene_pmu->lock); xgene_pmu 1920 drivers/perf/xgene_pmu.c rc = xgene_pmu_probe_active_mcb_mcu_l3c(xgene_pmu, pdev); xgene_pmu 1923 drivers/perf/xgene_pmu.c xgene_pmu->mcb_active_mask = 0x1; xgene_pmu 1924 drivers/perf/xgene_pmu.c xgene_pmu->mc_active_mask = 0x1; xgene_pmu 1929 drivers/perf/xgene_pmu.c &xgene_pmu->node); xgene_pmu 1936 drivers/perf/xgene_pmu.c rc = xgene_pmu_probe_pmu_dev(xgene_pmu, pdev); xgene_pmu 1943 drivers/perf/xgene_pmu.c xgene_pmu->ops->unmask_int(xgene_pmu); xgene_pmu 1949 drivers/perf/xgene_pmu.c &xgene_pmu->node); xgene_pmu 1954 drivers/perf/xgene_pmu.c xgene_pmu_dev_cleanup(struct xgene_pmu *xgene_pmu, struct list_head *pmus) xgene_pmu 1965 drivers/perf/xgene_pmu.c struct xgene_pmu *xgene_pmu = dev_get_drvdata(&pdev->dev); xgene_pmu 1967 drivers/perf/xgene_pmu.c xgene_pmu_dev_cleanup(xgene_pmu, &xgene_pmu->l3cpmus); xgene_pmu 1968 drivers/perf/xgene_pmu.c xgene_pmu_dev_cleanup(xgene_pmu, &xgene_pmu->iobpmus); xgene_pmu 1969 drivers/perf/xgene_pmu.c xgene_pmu_dev_cleanup(xgene_pmu, &xgene_pmu->mcbpmus); xgene_pmu 1970 drivers/perf/xgene_pmu.c xgene_pmu_dev_cleanup(xgene_pmu, &xgene_pmu->mcpmus); xgene_pmu 1972 drivers/perf/xgene_pmu.c &xgene_pmu->node);