[Nouveau] [PATCH 2/3] subdev/iccsense: Parse max and crit power level
Signed-off-by: Karol Herbst--- drm/nouveau/include/nvkm/subdev/iccsense.h | 3 +++ drm/nouveau/nvkm/subdev/iccsense/base.c| 20 ++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/drm/nouveau/include/nvkm/subdev/iccsense.h b/drm/nouveau/include/nvkm/subdev/iccsense.h index 3c2ddd9..b7a9b04 100644 --- a/drm/nouveau/include/nvkm/subdev/iccsense.h +++ b/drm/nouveau/include/nvkm/subdev/iccsense.h @@ -8,6 +8,9 @@ struct nvkm_iccsense { bool data_valid; struct list_head sensors; struct list_head rails; + + u32 power_w_max; + u32 power_w_crit; }; int gf100_iccsense_new(struct nvkm_device *, int index, struct nvkm_iccsense **); diff --git a/drm/nouveau/nvkm/subdev/iccsense/base.c b/drm/nouveau/nvkm/subdev/iccsense/base.c index f0af2a3..fecfa6a 100644 --- a/drm/nouveau/nvkm/subdev/iccsense/base.c +++ b/drm/nouveau/nvkm/subdev/iccsense/base.c @@ -26,6 +26,7 @@ #include #include #include +#include #include static bool @@ -216,10 +217,25 @@ nvkm_iccsense_oneinit(struct nvkm_subdev *subdev) { struct nvkm_iccsense *iccsense = nvkm_iccsense(subdev); struct nvkm_bios *bios = subdev->device->bios; + struct nvbios_power_budget budget; struct nvbios_iccsense stbl; - int i; + int i, ret; - if (!bios || nvbios_iccsense_parse(bios, ) || !stbl.nr_entry) + if (!bios) + return 0; + + ret = nvbios_power_budget_header(bios, ); + if (!ret && budget.cap_entry != 0xff) { + struct nvbios_power_budget_entry entry; + ret = nvbios_power_budget_entry(bios, , + budget.cap_entry, ); + if (!ret) { + iccsense->power_w_max = entry.avg_w; + iccsense->power_w_crit = entry.max_w; + } + } + + if (nvbios_iccsense_parse(bios, ) || !stbl.nr_entry) return 0; iccsense->data_valid = true; -- 2.10.2 ___ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau
Re: [Nouveau] [PATCH 2/3] subdev/iccsense: Parse max and crit power level
On 25 October 2016 7:28:10 a.m. GMT+02:00, Martin Pereswrote: >On 25/10/16 00:11, Karol Herbst wrote: >> Signed-off-by: Karol Herbst >> --- >> drm/nouveau/include/nvkm/subdev/iccsense.h | 3 +++ >> drm/nouveau/nvkm/subdev/iccsense/base.c| 13 - >> 2 files changed, 15 insertions(+), 1 deletion(-) > >What is the point of duplicating values here? Just store the parsed >bios >table, like we do for fan management. will have a look. I was just thinking that thise fields may mean something else depending on the context. There are already some weird things, like we only get one value for very short entries. But I guess it makes sense to keep it simple for now. ___ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau
Re: [Nouveau] [PATCH 2/3] subdev/iccsense: Parse max and crit power level
On 25/10/16 00:11, Karol Herbst wrote: Signed-off-by: Karol Herbst--- drm/nouveau/include/nvkm/subdev/iccsense.h | 3 +++ drm/nouveau/nvkm/subdev/iccsense/base.c| 13 - 2 files changed, 15 insertions(+), 1 deletion(-) What is the point of duplicating values here? Just store the parsed bios table, like we do for fan management. ___ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau
[Nouveau] [PATCH 2/3] subdev/iccsense: Parse max and crit power level
Signed-off-by: Karol Herbst--- drm/nouveau/include/nvkm/subdev/iccsense.h | 3 +++ drm/nouveau/nvkm/subdev/iccsense/base.c| 13 - 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/drm/nouveau/include/nvkm/subdev/iccsense.h b/drm/nouveau/include/nvkm/subdev/iccsense.h index 3c2ddd9..b7a9b04 100644 --- a/drm/nouveau/include/nvkm/subdev/iccsense.h +++ b/drm/nouveau/include/nvkm/subdev/iccsense.h @@ -8,6 +8,9 @@ struct nvkm_iccsense { bool data_valid; struct list_head sensors; struct list_head rails; + + u32 power_w_max; + u32 power_w_crit; }; int gf100_iccsense_new(struct nvkm_device *, int index, struct nvkm_iccsense **); diff --git a/drm/nouveau/nvkm/subdev/iccsense/base.c b/drm/nouveau/nvkm/subdev/iccsense/base.c index 658355f..4e2b074 100644 --- a/drm/nouveau/nvkm/subdev/iccsense/base.c +++ b/drm/nouveau/nvkm/subdev/iccsense/base.c @@ -26,6 +26,7 @@ #include #include #include +#include #include static bool @@ -216,10 +217,20 @@ nvkm_iccsense_oneinit(struct nvkm_subdev *subdev) { struct nvkm_iccsense *iccsense = nvkm_iccsense(subdev); struct nvkm_bios *bios = subdev->device->bios; + struct nvbios_power_budget budget; struct nvbios_iccsense stbl; int i; - if (!bios || nvbios_iccsense_parse(bios, ) || !stbl.nr_entry) + if (!bios) + return 0; + + if (!nvbios_power_budget_parse(bios, ) && budget.nr_entry && + budget.cap_entry != 0xff) { + iccsense->power_w_max = budget.entries[budget.cap_entry].avg_w; + iccsense->power_w_crit = budget.entries[budget.cap_entry].max_w; + } + + if (nvbios_iccsense_parse(bios, ) || !stbl.nr_entry) return 0; iccsense->data_valid = true; -- 2.10.0 ___ Nouveau mailing list Nouveau@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/nouveau