On Mon, 15 Jul 2019 at 22:26, Ilia Mirkin <imirkin@xxxxxxxxxxxx> wrote: > > Please add a config override to skip this, since we'll invariably get > it wrong for some setup, and should be able to provide users with > workarounds while the issue is being worked out. Yeah, this makes me nervous as well. In the very least, I'd like a config option, but I'm still wondering if perhaps we shouldn't limit this to a warning (which people tend to report) for a while first too. Also, what's NV's behaviour here? Do they refuse to load, or do they do something like force the GPU into its lowest pstate? Ben. > > On Mon, Jul 15, 2019 at 5:43 AM Mark Menzynski <mmenzyns@xxxxxxxxxx> wrote: > > > > 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. > > > > Tested on TU104, GP106 and GF100. > > > > Signed-off-by: Mark Menzynski <mmenzyns@xxxxxxxxxx> > > --- > > 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 > > Nouveau@xxxxxxxxxxxxxxxxxxxxx > > https://lists.freedesktop.org/mailman/listinfo/nouveau > _______________________________________________ > Nouveau mailing list > Nouveau@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/nouveau _______________________________________________ Nouveau mailing list Nouveau@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/nouveau