aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c
diff options
context:
space:
mode:
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>2015-06-07 22:40:23 +0200
committerBen Skeggs <bskeggs@redhat.com>2015-08-28 12:39:59 +1000
commit50d138d7528c3370ebf3a54079091a35a60a23be (patch)
tree270083a38a9a7fc4ec98ec5e507c543fe5d8ecb6 /drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c
parentdrm/nouveau/pm: add concept of sources (diff)
downloadlinux-dev-50d138d7528c3370ebf3a54079091a35a60a23be.tar.xz
linux-dev-50d138d7528c3370ebf3a54079091a35a60a23be.zip
drm/nouveau/pm: allow to query the number of sources for a signal
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c')
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c
index dfafefd9facf..a9c57a20186a 100644
--- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c
@@ -91,6 +91,18 @@ nvkm_perfsig_find(struct nvkm_pm *ppm, uint8_t di, uint8_t si,
return &dom->signal[si];
}
+static u8
+nvkm_perfsig_count_perfsrc(struct nvkm_perfsig *sig)
+{
+ u8 source_nr = 0, i;
+
+ for (i = 0; i < ARRAY_SIZE(sig->source); i++) {
+ if (sig->source[i])
+ source_nr++;
+ }
+ return source_nr;
+}
+
/*******************************************************************************
* Perfmon object classes
******************************************************************************/
@@ -148,9 +160,9 @@ nvkm_perfmon_mthd_query_signal(struct nvkm_object *object, void *data, u32 size)
struct nvkm_device *device = nv_device(object);
struct nvkm_pm *ppm = (void *)object->engine;
struct nvkm_perfdom *dom;
+ struct nvkm_perfsig *sig;
const bool all = nvkm_boolopt(device->cfgopt, "NvPmShowAll", false);
const bool raw = nvkm_boolopt(device->cfgopt, "NvPmUnnamed", all);
- const char *name;
int ret, si;
nv_ioctl(object, "perfmon query signal size %d\n", size);
@@ -167,13 +179,17 @@ nvkm_perfmon_mthd_query_signal(struct nvkm_object *object, void *data, u32 size)
return -EINVAL;
if (si >= 0) {
- if (raw || !(name = dom->signal[si].name)) {
+ sig = &dom->signal[si];
+ if (raw || !sig->name) {
snprintf(args->v0.name, sizeof(args->v0.name),
"/%s/%02x", dom->name, si);
} else {
- strncpy(args->v0.name, name, sizeof(args->v0.name));
+ strncpy(args->v0.name, sig->name,
+ sizeof(args->v0.name));
}
+
args->v0.signal = si;
+ args->v0.source_nr = nvkm_perfsig_count_perfsrc(sig);
}
while (++si < dom->signal_nr) {