Tested on TU104, GP106 and GF100

Signed-off-by: Mark Menzynski <[email protected]>
---
 drm/nouveau/include/nvkm/subdev/bios/gpio.h |  1 +
 drm/nouveau/nvkm/subdev/gpio/base.c         | 23 +++++++++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/drm/nouveau/include/nvkm/subdev/bios/gpio.h 
b/drm/nouveau/include/nvkm/subdev/bios/gpio.h
index 2f40935f..a70ec9e8 100644
--- a/drm/nouveau/include/nvkm/subdev/bios/gpio.h
+++ b/drm/nouveau/include/nvkm/subdev/bios/gpio.h
@@ -7,6 +7,7 @@ enum dcb_gpio_func_name {
        DCB_GPIO_TVDAC0 = 0x0c,
        DCB_GPIO_TVDAC1 = 0x2d,
        DCB_GPIO_FAN_SENSE = 0x3d,
+       DCB_GPIO_EXT_POWER_LOW = 0x79,
        DCB_GPIO_LOGO_LED_PWM = 0x84,
        DCB_GPIO_UNUSED = 0xff,
        DCB_GPIO_VID0 = 0x04,
diff --git a/drm/nouveau/nvkm/subdev/gpio/base.c 
b/drm/nouveau/nvkm/subdev/gpio/base.c
index 1399d923..c4685807 100644
--- a/drm/nouveau/nvkm/subdev/gpio/base.c
+++ b/drm/nouveau/nvkm/subdev/gpio/base.c
@@ -182,12 +182,35 @@ static const struct dmi_system_id gpio_reset_ids[] = {
        { }
 };
 
+static enum dcb_gpio_func_name power_checks[] = {
+       DCB_GPIO_EXT_POWER_LOW,
+};
+
 static int
 nvkm_gpio_init(struct nvkm_subdev *subdev)
 {
        struct nvkm_gpio *gpio = nvkm_gpio(subdev);
+       struct dcb_gpio_func func;
+       int ret;
+       int i;
+
        if (dmi_check_system(gpio_reset_ids))
                nvkm_gpio_reset(gpio, DCB_GPIO_UNUSED);
+
+       for (i = 0; i < ARRAY_SIZE(power_checks); ++i) {
+               ret = nvkm_gpio_find(gpio, 0, power_checks[i], DCB_GPIO_UNUSED,
+                                    &func);
+               if (ret)
+                       continue;
+
+               ret = nvkm_gpio_get(gpio, 0, func.func, func.line);
+               if (ret) {
+                       nvkm_error(&gpio->subdev,
+                                  "not enough power, check GPU power cable\n");
+                       return -EINVAL;
+               }
+       }
+
        return 0;
 }
 
-- 
2.21.0

_______________________________________________
Nouveau mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to