Mark Menzynski
2019-Jul-18 08:07 UTC
[Nouveau] [PATCH v3 0/4] Refuse to load if power cable are not connected
Added config override for power checks. Mark Menzynski (4): bios/gpio: sort gpios by values gpio: fail if gpu external power is missing gpio: check the gpio function 16 in the power check as well gpio: check function 76 in the power check as well drm/nouveau/include/nvkm/subdev/bios/gpio.h | 5 +++- drm/nouveau/nvkm/subdev/gpio/base.c | 32 +++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) -- 2.21.0
Mark Menzynski
2019-Jul-18 08:07 UTC
[Nouveau] [PATCH v3 1/4] bios/gpio: sort gpios by values
One gpio was in wrong place, moved it for better readability. Signed-off-by: Mark Menzynski <mmenzyns at redhat.com> --- drm/nouveau/include/nvkm/subdev/bios/gpio.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drm/nouveau/include/nvkm/subdev/bios/gpio.h b/drm/nouveau/include/nvkm/subdev/bios/gpio.h index b71a3555..2f40935f 100644 --- a/drm/nouveau/include/nvkm/subdev/bios/gpio.h +++ b/drm/nouveau/include/nvkm/subdev/bios/gpio.h @@ -3,9 +3,9 @@ #define __NVBIOS_GPIO_H__ enum dcb_gpio_func_name { DCB_GPIO_PANEL_POWER = 0x01, + DCB_GPIO_FAN = 0x09, DCB_GPIO_TVDAC0 = 0x0c, DCB_GPIO_TVDAC1 = 0x2d, - DCB_GPIO_FAN = 0x09, DCB_GPIO_FAN_SENSE = 0x3d, DCB_GPIO_LOGO_LED_PWM = 0x84, DCB_GPIO_UNUSED = 0xff, -- 2.21.0
Mark Menzynski
2019-Jul-18 08:07 UTC
[Nouveau] [PATCH v3 2/4] gpio: fail if gpu external power is missing
Currently, nouveau doesn't check if GPU is missing power. This patch makes nouveau fail when this happens on latest GPUs. It checks GPIO function 121 (External Power Emergency), which should detect power problems on GPU initialization. This can be disabled with nouveau.config=NvPowerChecks=1 Tested on TU104, GP106 and GF100. v3: * Add config override for disabling power checks 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 | 30 +++++++++++++++++++++ 2 files changed, 31 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..72289e2e 100644 --- a/drm/nouveau/nvkm/subdev/gpio/base.c +++ b/drm/nouveau/nvkm/subdev/gpio/base.c @@ -23,6 +23,7 @@ */ #include "priv.h" +#include <core/option.h> #include <core/notify.h> static int @@ -182,12 +183,41 @@ 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); + + if (nvkm_boolopt(subdev->device->cfgopt, "NvPowerChecks", true)) + { + 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) + continue; + + nvkm_error(&gpio->subdev, + "GPU is missing power, check its power cables. " + "Boot with nouveau.config=NvPowerChecks=0 to disable.\n"); + return -EINVAL; + } + } + return 0; } -- 2.21.0
Mark Menzynski
2019-Jul-18 08:07 UTC
[Nouveau] [PATCH v3 3/4] gpio: check the gpio function 16 in the power check as well
Added GPIO is "Thermal and External Power Detect". It's uncertain if this GPIO is set on GPU initialization or only if a change is detected by the GPU at runtime. This GPIO can be found in Rankine and Curie and rarely on Tesla GPUs VBIOS. Untested, wrote according to documentation. 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 | 1 + 2 files changed, 2 insertions(+) diff --git a/drm/nouveau/include/nvkm/subdev/bios/gpio.h b/drm/nouveau/include/nvkm/subdev/bios/gpio.h index a70ec9e8..fc2b5fb0 100644 --- a/drm/nouveau/include/nvkm/subdev/bios/gpio.h +++ b/drm/nouveau/include/nvkm/subdev/bios/gpio.h @@ -5,6 +5,7 @@ enum dcb_gpio_func_name { DCB_GPIO_PANEL_POWER = 0x01, DCB_GPIO_FAN = 0x09, DCB_GPIO_TVDAC0 = 0x0c, + DCB_GPIO_THERM_EXT_POWER_EVENT = 0x10, DCB_GPIO_TVDAC1 = 0x2d, DCB_GPIO_FAN_SENSE = 0x3d, DCB_GPIO_EXT_POWER_LOW = 0x79, diff --git a/drm/nouveau/nvkm/subdev/gpio/base.c b/drm/nouveau/nvkm/subdev/gpio/base.c index 72289e2e..cc56637f 100644 --- a/drm/nouveau/nvkm/subdev/gpio/base.c +++ b/drm/nouveau/nvkm/subdev/gpio/base.c @@ -184,6 +184,7 @@ static const struct dmi_system_id gpio_reset_ids[] = { }; static enum dcb_gpio_func_name power_checks[] = { + DCB_GPIO_THERM_EXT_POWER_EVENT, DCB_GPIO_EXT_POWER_LOW, }; -- 2.21.0
Mark Menzynski
2019-Jul-18 08:07 UTC
[Nouveau] [PATCH v3 4/4] gpio: check function 76 in the power check as well
Added GPIO is "Power Alert". It's uncertain if this GPIO is set on GPU initialization or only if a change is detected by the GPU at runtime. This GPIO can be found on Tesla and sometimes on Fermi GPUs. Untested, wrote according to documentation. 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 | 1 + 2 files changed, 2 insertions(+) diff --git a/drm/nouveau/include/nvkm/subdev/bios/gpio.h b/drm/nouveau/include/nvkm/subdev/bios/gpio.h index fc2b5fb0..784c5f22 100644 --- a/drm/nouveau/include/nvkm/subdev/bios/gpio.h +++ b/drm/nouveau/include/nvkm/subdev/bios/gpio.h @@ -8,6 +8,7 @@ enum dcb_gpio_func_name { DCB_GPIO_THERM_EXT_POWER_EVENT = 0x10, DCB_GPIO_TVDAC1 = 0x2d, DCB_GPIO_FAN_SENSE = 0x3d, + DCB_GPIO_POWER_ALERT = 0x4c, DCB_GPIO_EXT_POWER_LOW = 0x79, DCB_GPIO_LOGO_LED_PWM = 0x84, DCB_GPIO_UNUSED = 0xff, diff --git a/drm/nouveau/nvkm/subdev/gpio/base.c b/drm/nouveau/nvkm/subdev/gpio/base.c index cc56637f..ab541f26 100644 --- a/drm/nouveau/nvkm/subdev/gpio/base.c +++ b/drm/nouveau/nvkm/subdev/gpio/base.c @@ -185,6 +185,7 @@ static const struct dmi_system_id gpio_reset_ids[] = { static enum dcb_gpio_func_name power_checks[] = { DCB_GPIO_THERM_EXT_POWER_EVENT, + DCB_GPIO_POWER_ALERT, DCB_GPIO_EXT_POWER_LOW, }; -- 2.21.0
Ben Skeggs
2019-Jul-22 04:09 UTC
[Nouveau] [PATCH v3 0/4] Refuse to load if power cable are not connected
I've merged these patches to my tree. Thank you, Ben. On Thu, 18 Jul 2019 at 18:07, Mark Menzynski <mmenzyns at redhat.com> wrote:> > Added config override for power checks. > > Mark Menzynski (4): > bios/gpio: sort gpios by values > gpio: fail if gpu external power is missing > gpio: check the gpio function 16 in the power check as well > gpio: check function 76 in the power check as well > > drm/nouveau/include/nvkm/subdev/bios/gpio.h | 5 +++- > drm/nouveau/nvkm/subdev/gpio/base.c | 32 +++++++++++++++++++++ > 2 files changed, 36 insertions(+), 1 deletion(-) > > -- > 2.21.0 > > _______________________________________________ > Nouveau mailing list > Nouveau at lists.freedesktop.org > lists.freedesktop.org/mailman/listinfo/nouveau
Reasonably Related Threads
- [PATCH v2 0/4] Refuse to load if power cables are not connected
- [PATCH 0/4] Refuse to load if the power cable are not connected
- [PATCH v2 2/4] gpio: fail if gpu external power is missing
- [PATCH 3/4] gpio: added power check for another GPIO
- [PATCH v2 2/4] gpio: fail if gpu external power is missing