Lines Matching +full:re +full:- +full:sampling
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
113 phw = &powerpc_pcpu[cpu]->pc_ppcpmcs[ri]; in powerpc_describe()
115 snprintf(pi->pm_name, sizeof(pi->pm_name), "POWERPC-%d", ri); in powerpc_describe()
116 pi->pm_class = powerpc_pcpu[cpu]->pc_class; in powerpc_describe()
118 if (phw->phw_state & PMC_PHW_FLAG_IS_ENABLED) { in powerpc_describe()
119 pi->pm_enabled = TRUE; in powerpc_describe()
120 *ppmc = phw->phw_pmc; in powerpc_describe()
122 pi->pm_enabled = FALSE; in powerpc_describe()
133 *ppm = powerpc_pcpu[cpu]->pc_ppcpmcs[ri].phw_pmc; in powerpc_get_config()
148 PMCDBG1(MDP,INI,1,"powerpc-init cpu=%d", cpu); in powerpc_pcpu_init()
152 pac->pc_class = in powerpc_pcpu_init()
153 md->pmd_classdep[PMC_MDEP_CLASS_INDEX_POWERPC].pcd_class; in powerpc_pcpu_init()
156 first_ri = md->pmd_classdep[PMC_MDEP_CLASS_INDEX_POWERPC].pcd_ri; in powerpc_pcpu_init()
157 KASSERT(pc != NULL, ("[powerpc,%d] NULL per-cpu pointer", __LINE__)); in powerpc_pcpu_init()
159 for (i = 0, phw = pac->pc_ppcpmcs; i < ppc_max_pmcs; i++, phw++) { in powerpc_pcpu_init()
160 phw->phw_state = PMC_PHW_FLAG_IS_ENABLED | in powerpc_pcpu_init()
162 phw->phw_pmc = NULL; in powerpc_pcpu_init()
163 pc->pc_hwpmcs[i + first_ri] = phw; in powerpc_pcpu_init()
172 PMCDBG1(MDP,INI,1,"powerpc-fini cpu=%d", cpu); in powerpc_pcpu_fini()
193 if (a->pm_class != ppc_class) in powerpc_allocate_pmc()
196 caps = a->pm_caps; in powerpc_allocate_pmc()
198 pe = a->pm_ev; in powerpc_allocate_pmc()
223 pm->pm_md.pm_powerpc.pm_powerpc_evsel = config; in powerpc_allocate_pmc()
225 PMCDBG3(MDP,ALL,1,"powerpc-allocate cpu=%d ri=%d -> config=0x%x", in powerpc_allocate_pmc()
238 ("[powerpc,%d] illegal row-index %d", __LINE__, ri)); in powerpc_release_pmc()
240 phw = &powerpc_pcpu[cpu]->pc_ppcpmcs[ri]; in powerpc_release_pmc()
241 KASSERT(phw->phw_pmc == NULL, in powerpc_release_pmc()
242 ("[powerpc,%d] PHW pmc %p non-NULL", __LINE__, phw->phw_pmc)); in powerpc_release_pmc()
251 PMCDBG2(MDP,STA,1,"powerpc-start cpu=%d ri=%d", cpu, ri); in powerpc_start_pmc()
252 powerpc_set_pmc(cpu, ri, pm->pm_md.pm_powerpc.pm_powerpc_evsel); in powerpc_start_pmc()
260 PMCDBG2(MDP,STO,1, "powerpc-stop cpu=%d ri=%d", cpu, ri); in powerpc_stop_pmc()
270 PMCDBG3(MDP,CFG,1, "powerpc-config cpu=%d ri=%d pm=%p", cpu, ri, pm); in powerpc_config_pmc()
275 ("[powerpc,%d] illegal row-index %d", __LINE__, ri)); in powerpc_config_pmc()
277 phw = &powerpc_pcpu[cpu]->pc_ppcpmcs[ri]; in powerpc_config_pmc()
279 KASSERT(pm == NULL || phw->phw_pmc == NULL, in powerpc_config_pmc()
280 ("[powerpc,%d] pm=%p phw->pm=%p hwpmc not unconfigured", in powerpc_config_pmc()
281 __LINE__, pm, phw->phw_pmc)); in powerpc_config_pmc()
283 phw->phw_pmc = pm; in powerpc_config_pmc()
375 * than reload count in sampling mode. in powerpc_read_pmc()
379 r = pm->pm_sc.pm_reloadcount; in powerpc_read_pmc()
400 PMCDBG5(MDP,REA,1,"ppc-read cpu=%d ri=%d -> %jx (%jx,%jx)", in powerpc_read_pmc()
415 ("[powerpc,%d] illegal row-index %d", __LINE__, ri)); in powerpc_write_pmc()
422 "powerpc-write cpu=%d ri=%d: PMC value is too big: %jx", in powerpc_write_pmc()
428 PMCDBG5(MDP,WRI,1,"powerpc-write cpu=%d ri=%d -> %jx (%jx,%jx)", in powerpc_write_pmc()
454 * Look for a running, sampling PMC which has overflowed in powerpc_pmc_intr()
464 * If pm is available and in sampling mode, use reload in powerpc_pmc_intr()
468 if ((pm = pc->pc_ppcpmcs[i].phw_pmc) != NULL && in powerpc_pmc_intr()
470 if (pm->pm_state != PMC_STATE_RUNNING) { in powerpc_pmc_intr()
472 pm->pm_sc.pm_reloadcount); in powerpc_pmc_intr()
496 /* Reload sampling count */ in powerpc_pmc_intr()
497 powerpc_write_pmc(cpu, i, pm, pm->pm_sc.pm_reloadcount); in powerpc_pmc_intr()
506 * Re-enable PERF exceptions if we were able to find the interrupt in powerpc_pmc_intr()
514 "pmc_intr: couldn't find interrupting PMC on cpu %d - " in powerpc_pmc_intr()
565 error = -1; in pmc_md_initialize()
583 PMCDBG0(MDP, INI, 1, "powerpc-finalize"); in pmc_md_finalize()
587 ("[powerpc,%d] non-null pcpu cpu %d", __LINE__, i)); in pmc_md_finalize()
609 /* Check if 32-bit mode. */ in pmc_save_user_callchain()
610 if (!(tf->srr1 & PSL_SF)) { in pmc_save_user_callchain()