1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
2fbe96f29SStephane Eranian #include <sys/types.h>
3f67001a4SArnaldo Carvalho de Melo #include <errno.h>
4fbe96f29SStephane Eranian #include <unistd.h>
5fbe96f29SStephane Eranian #include <stdio.h>
6fbe96f29SStephane Eranian #include <stdlib.h>
7fbe96f29SStephane Eranian #include <string.h>
8531d2410SArnaldo Carvalho de Melo #include <linux/stringify.h>
9379649cfSSukadev Bhattiprolu #include "header.h"
1033583e69SAnju T Sudhakar #include "utils_header.h"
111e1a873dSKajol Jain #include "metricgroup.h"
121e1a873dSKajol Jain #include <api/fs/fs.h>
13fbe96f29SStephane Eranian
14fbe96f29SStephane Eranian int
get_cpuid(char * buffer,size_t sz)15fbe96f29SStephane Eranian get_cpuid(char *buffer, size_t sz)
16fbe96f29SStephane Eranian {
17fbe96f29SStephane Eranian unsigned long pvr;
18fbe96f29SStephane Eranian int nb;
19fbe96f29SStephane Eranian
20fbe96f29SStephane Eranian pvr = mfspr(SPRN_PVR);
21fbe96f29SStephane Eranian
22e7f01d1eSArnaldo Carvalho de Melo nb = scnprintf(buffer, sz, "%lu,%lu$", PVR_VER(pvr), PVR_REV(pvr));
23fbe96f29SStephane Eranian
24fbe96f29SStephane Eranian /* look for end marker to ensure the entire data fit */
25fbe96f29SStephane Eranian if (strchr(buffer, '$')) {
26fbe96f29SStephane Eranian buffer[nb-1] = '\0';
27fbe96f29SStephane Eranian return 0;
28fbe96f29SStephane Eranian }
29f67001a4SArnaldo Carvalho de Melo return ENOBUFS;
30fbe96f29SStephane Eranian }
31ce88f27cSSukadev Bhattiprolu
32ce88f27cSSukadev Bhattiprolu char *
get_cpuid_str(struct perf_pmu * pmu __maybe_unused)3354e32dc0SGanapatrao Kulkarni get_cpuid_str(struct perf_pmu *pmu __maybe_unused)
34ce88f27cSSukadev Bhattiprolu {
35ce88f27cSSukadev Bhattiprolu char *bufp;
36ce88f27cSSukadev Bhattiprolu
37ce88f27cSSukadev Bhattiprolu if (asprintf(&bufp, "%.8lx", mfspr(SPRN_PVR)) < 0)
38ce88f27cSSukadev Bhattiprolu bufp = NULL;
39ce88f27cSSukadev Bhattiprolu
40ce88f27cSSukadev Bhattiprolu return bufp;
41ce88f27cSSukadev Bhattiprolu }
421e1a873dSKajol Jain
arch_get_runtimeparam(const struct pmu_metric * pm)43db95818eSIan Rogers int arch_get_runtimeparam(const struct pmu_metric *pm)
441e1a873dSKajol Jain {
451e1a873dSKajol Jain int count;
46f5a489dcSKajol Jain char path[PATH_MAX] = "/devices/hv_24x7/interface/";
47f5a489dcSKajol Jain
48*1fa0c371SIan Rogers strcat(path, pm->aggr_mode == PerChip ? "sockets" : "coresperchip");
49f5a489dcSKajol Jain return sysfs__read_int(path, &count) < 0 ? 1 : count;
501e1a873dSKajol Jain }
51