[Nouveau] [PATCH 2/4] gpio: checking if gpu power cable is connected
Mark Menzynski
mmenzyns at redhat.com
Thu Jul 11 14:11:51 UTC 2019
Tested on TU104, GP106 and GF100
Signed-off-by: Mark Menzynski <mmenzyns at redhat.com>
---
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
More information about the Nouveau
mailing list