xref: /openbmc/linux/tools/perf/arch/powerpc/util/header.c (revision 1fa0c371)
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