Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/hwpmc/hwpmc_mpc7xxx.c
Show First 20 Lines • Show All 378 Lines • ▼ Show 20 Lines | KASSERT(ri >= 0 && ri < MPC7XXX_MAX_PMCS, | ||||
("[powerpc,%d] illegal row index %d", __LINE__, ri)); | ("[powerpc,%d] illegal row index %d", __LINE__, ri)); | ||||
pm = powerpc_pcpu[cpu]->pc_ppcpmcs[ri].phw_pmc; | pm = powerpc_pcpu[cpu]->pc_ppcpmcs[ri].phw_pmc; | ||||
KASSERT(pm, | KASSERT(pm, | ||||
("[core,%d] cpu %d ri %d pmc not configured", __LINE__, cpu, | ("[core,%d] cpu %d ri %d pmc not configured", __LINE__, cpu, | ||||
ri)); | ri)); | ||||
tmp = mpc7xxx_pmcn_read(ri); | tmp = mpc7xxx_pmcn_read(ri); | ||||
PMCDBG(MDP,REA,2,"ppc-read id=%d -> %jd", ri, tmp); | PMCDBG2(MDP,REA,2,"ppc-read id=%d -> %jd", ri, tmp); | ||||
if (PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm))) | if (PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm))) | ||||
*v = POWERPC_PERFCTR_VALUE_TO_RELOAD_COUNT(tmp); | *v = POWERPC_PERFCTR_VALUE_TO_RELOAD_COUNT(tmp); | ||||
else | else | ||||
*v = tmp; | *v = tmp; | ||||
return 0; | return 0; | ||||
} | } | ||||
static int | static int | ||||
mpc7xxx_write_pmc(int cpu, int ri, pmc_value_t v) | mpc7xxx_write_pmc(int cpu, int ri, pmc_value_t v) | ||||
{ | { | ||||
struct pmc *pm; | struct pmc *pm; | ||||
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(), | KASSERT(cpu >= 0 && cpu < pmc_cpu_max(), | ||||
("[powerpc,%d] illegal CPU value %d", __LINE__, cpu)); | ("[powerpc,%d] illegal CPU value %d", __LINE__, cpu)); | ||||
KASSERT(ri >= 0 && ri < MPC7XXX_MAX_PMCS, | KASSERT(ri >= 0 && ri < MPC7XXX_MAX_PMCS, | ||||
("[powerpc,%d] illegal row-index %d", __LINE__, ri)); | ("[powerpc,%d] illegal row-index %d", __LINE__, ri)); | ||||
pm = powerpc_pcpu[cpu]->pc_ppcpmcs[ri].phw_pmc; | pm = powerpc_pcpu[cpu]->pc_ppcpmcs[ri].phw_pmc; | ||||
if (PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm))) | if (PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm))) | ||||
v = POWERPC_RELOAD_COUNT_TO_PERFCTR_VALUE(v); | v = POWERPC_RELOAD_COUNT_TO_PERFCTR_VALUE(v); | ||||
PMCDBG(MDP,WRI,1,"powerpc-write cpu=%d ri=%d v=%jx", cpu, ri, v); | PMCDBG3(MDP,WRI,1,"powerpc-write cpu=%d ri=%d v=%jx", cpu, ri, v); | ||||
mpc7xxx_pmcn_write(ri, v); | mpc7xxx_pmcn_write(ri, v); | ||||
return 0; | return 0; | ||||
} | } | ||||
static int | static int | ||||
mpc7xxx_config_pmc(int cpu, int ri, struct pmc *pm) | mpc7xxx_config_pmc(int cpu, int ri, struct pmc *pm) | ||||
{ | { | ||||
struct pmc_hw *phw; | struct pmc_hw *phw; | ||||
PMCDBG(MDP,CFG,1, "cpu=%d ri=%d pm=%p", cpu, ri, pm); | PMCDBG3(MDP,CFG,1, "cpu=%d ri=%d pm=%p", cpu, ri, pm); | ||||
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(), | KASSERT(cpu >= 0 && cpu < pmc_cpu_max(), | ||||
("[powerpc,%d] illegal CPU value %d", __LINE__, cpu)); | ("[powerpc,%d] illegal CPU value %d", __LINE__, cpu)); | ||||
KASSERT(ri >= 0 && ri < MPC7XXX_MAX_PMCS, | KASSERT(ri >= 0 && ri < MPC7XXX_MAX_PMCS, | ||||
("[powerpc,%d] illegal row-index %d", __LINE__, ri)); | ("[powerpc,%d] illegal row-index %d", __LINE__, ri)); | ||||
phw = &powerpc_pcpu[cpu]->pc_ppcpmcs[ri]; | phw = &powerpc_pcpu[cpu]->pc_ppcpmcs[ri]; | ||||
▲ Show 20 Lines • Show All 122 Lines • ▼ Show 20 Lines | |||||
{ | { | ||||
int first_ri, i; | int first_ri, i; | ||||
struct pmc_cpu *pc; | struct pmc_cpu *pc; | ||||
struct powerpc_cpu *pac; | struct powerpc_cpu *pac; | ||||
struct pmc_hw *phw; | struct pmc_hw *phw; | ||||
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(), | KASSERT(cpu >= 0 && cpu < pmc_cpu_max(), | ||||
("[powerpc,%d] wrong cpu number %d", __LINE__, cpu)); | ("[powerpc,%d] wrong cpu number %d", __LINE__, cpu)); | ||||
PMCDBG(MDP,INI,1,"powerpc-init cpu=%d", cpu); | PMCDBG1(MDP,INI,1,"powerpc-init cpu=%d", cpu); | ||||
powerpc_pcpu[cpu] = pac = malloc(sizeof(struct powerpc_cpu), M_PMC, | powerpc_pcpu[cpu] = pac = malloc(sizeof(struct powerpc_cpu), M_PMC, | ||||
M_WAITOK|M_ZERO); | M_WAITOK|M_ZERO); | ||||
pac->pc_ppcpmcs = malloc(sizeof(struct pmc_hw) * MPC7XXX_MAX_PMCS, | pac->pc_ppcpmcs = malloc(sizeof(struct pmc_hw) * MPC7XXX_MAX_PMCS, | ||||
M_PMC, M_WAITOK|M_ZERO); | M_PMC, M_WAITOK|M_ZERO); | ||||
pac->pc_class = PMC_CLASS_PPC7450; | pac->pc_class = PMC_CLASS_PPC7450; | ||||
pc = pmc_pcpu[cpu]; | pc = pmc_pcpu[cpu]; | ||||
first_ri = md->pmd_classdep[PMC_MDEP_CLASS_INDEX_POWERPC].pcd_ri; | first_ri = md->pmd_classdep[PMC_MDEP_CLASS_INDEX_POWERPC].pcd_ri; | ||||
▲ Show 20 Lines • Show All 62 Lines • ▼ Show 20 Lines | if (caps & PMC_CAP_SYSTEM) | ||||
config |= POWERPC_PMC_KERNEL_ENABLE; | config |= POWERPC_PMC_KERNEL_ENABLE; | ||||
if (caps & PMC_CAP_USER) | if (caps & PMC_CAP_USER) | ||||
config |= POWERPC_PMC_USER_ENABLE; | config |= POWERPC_PMC_USER_ENABLE; | ||||
if ((caps & (PMC_CAP_USER | PMC_CAP_SYSTEM)) == 0) | if ((caps & (PMC_CAP_USER | PMC_CAP_SYSTEM)) == 0) | ||||
config |= POWERPC_PMC_ENABLE; | config |= POWERPC_PMC_ENABLE; | ||||
pm->pm_md.pm_powerpc.pm_powerpc_evsel = config; | pm->pm_md.pm_powerpc.pm_powerpc_evsel = config; | ||||
PMCDBG(MDP,ALL,2,"powerpc-allocate ri=%d -> config=0x%x", ri, config); | PMCDBG2(MDP,ALL,2,"powerpc-allocate ri=%d -> config=0x%x", ri, config); | ||||
return 0; | return 0; | ||||
} | } | ||||
static int | static int | ||||
mpc7xxx_release_pmc(int cpu, int ri, struct pmc *pmc) | mpc7xxx_release_pmc(int cpu, int ri, struct pmc *pmc) | ||||
{ | { | ||||
struct pmc_hw *phw; | struct pmc_hw *phw; | ||||
Show All 16 Lines | mpc7xxx_intr(int cpu, struct trapframe *tf) | ||||
int i, error, retval; | int i, error, retval; | ||||
uint32_t config; | uint32_t config; | ||||
struct pmc *pm; | struct pmc *pm; | ||||
struct powerpc_cpu *pac; | struct powerpc_cpu *pac; | ||||
KASSERT(cpu >= 0 && cpu < pmc_cpu_max(), | KASSERT(cpu >= 0 && cpu < pmc_cpu_max(), | ||||
("[powerpc,%d] out of range CPU %d", __LINE__, cpu)); | ("[powerpc,%d] out of range CPU %d", __LINE__, cpu)); | ||||
PMCDBG(MDP,INT,1, "cpu=%d tf=%p um=%d", cpu, (void *) tf, | PMCDBG3(MDP,INT,1, "cpu=%d tf=%p um=%d", cpu, (void *) tf, | ||||
TRAPF_USERMODE(tf)); | TRAPF_USERMODE(tf)); | ||||
retval = 0; | retval = 0; | ||||
pac = powerpc_pcpu[cpu]; | pac = powerpc_pcpu[cpu]; | ||||
config = mfspr(SPR_MMCR0) & ~SPR_MMCR0_FC; | config = mfspr(SPR_MMCR0) & ~SPR_MMCR0_FC; | ||||
▲ Show 20 Lines • Show All 73 Lines • Show Last 20 Lines |