[Nouveau] [PATCH 2/3] subdev/iccsense: Parse max and crit power level

2016-11-12 Thread Karol Herbst
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

2016-10-25 Thread Karol Herbst


On 25 October 2016 7:28:10 a.m. GMT+02:00, Martin Peres  
wrote:
>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

2016-10-24 Thread Martin Peres

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

2016-10-24 Thread Karol Herbst
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