#include <subdev/bios.h>
 #include <subdev/bios/extdev.h>
 #include <subdev/bios/iccsense.h>
+#include <subdev/bios/power_budget.h>
 #include <subdev/i2c.h>
 
 static bool
 {
        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) || !stbl.nr_entry)
+       if (!bios)
+               return 0;
+
+       ret = nvbios_power_budget_header(bios, &budget);
+       if (!ret && budget.cap_entry != 0xff) {
+               struct nvbios_power_budget_entry entry;
+               ret = nvbios_power_budget_entry(bios, &budget,
+                                               budget.cap_entry, &entry);
+               if (!ret) {
+                       iccsense->power_w_max  = entry.avg_w;
+                       iccsense->power_w_crit = entry.max_w;
+               }
+       }
+
+       if (nvbios_iccsense_parse(bios, &stbl) || !stbl.nr_entry)
                return 0;
 
        iccsense->data_valid = true;