diff options
author | Samuel Pitoiset <samuel.pitoiset@gmail.com> | 2015-06-07 23:40:23 +0300 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2015-08-28 05:39:59 +0300 |
commit | 50d138d7528c3370ebf3a54079091a35a60a23be (patch) | |
tree | 270083a38a9a7fc4ec98ec5e507c543fe5d8ecb6 /drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c | |
parent | e82661e23c60fc41424ca138820d729d8e4a2226 (diff) | |
download | linux-50d138d7528c3370ebf3a54079091a35a60a23be.tar.xz |
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.c | 22 |
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) { |