<div dir="ltr">Thanks Tobias, I tried this but unfortunately the only effect was thta the boot was delayed by an additional 4 seconds :(<div>The original timeout is at <span style="color:rgb(0,0,0);font-family:"Courier New",Courier,monospace,arial,sans-serif;font-size:14px;white-space:pre-wrap">drivers/gpu/drm/nouveau/nvkm/subdev/secboot/ls_ucode_msgqueue.c</span><div>I tried to increase that timeout, but it did not seem to make a difference either.</div></div><div><br></div><div>I think I get this error less often when I have a cable plugged in the output of that card at boot, whereas I always get this error when I boot without a monitor attached to the card.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 13, 2017 at 2:28 PM, Tobias Klausmann <span dir="ltr"><<a href="mailto:tobias.johannes.klausmann@mni.thm.de" target="_blank">tobias.johannes.klausmann@mni.thm.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
the system fails to initialize your vbios using secureboot (i had a rare<br>
chance to on my system to witness it again), for now i traced it to<br>
acr_boot_falcon() in<br>
"linux/drivers/gpu/drm/<wbr>nouveau/nvkm/falcon/msgqueue_<wbr>0148cdec.c" where it<br>
throws -110 which is -ETIMEDOUT. You could try to increase the timeout<br>
and see if it helps something, similar to the following:<br>
<br>
<br>
diff --git a/drivers/gpu/drm/nouveau/<wbr>nvkm/falcon/msgqueue.c<br>
b/drivers/gpu/drm/nouveau/<wbr>nvkm/falcon/msgqueue.c<br>
index 77273b53672c..fc0cb187d80d 100644<br>
--- a/drivers/gpu/drm/nouveau/<wbr>nvkm/falcon/msgqueue.c<br>
+++ b/drivers/gpu/drm/nouveau/<wbr>nvkm/falcon/msgqueue.c<br>
@@ -326,7 +326,7 @@ nvkm_msgqueue_post(struct nvkm_msgqueue *priv, enum<br>
msgqueue_msg_priority prio,<br>
int ret;<br>
<br>
if (wait_init && !wait_for_completion_timeout(&<wbr>priv->init_done,<br>
- <wbr> msecs_to_jiffies(1000)))<br>
+ <wbr> msecs_to_jiffies(5000)))<br>
return -ETIMEDOUT;<br>
<br>
queue = priv->func->cmd_queue(priv, prio);<br>
<br>
diff --git a/drivers/gpu/drm/nouveau/<wbr>nvkm/falcon/msgqueue_0137c63d.<wbr>c<br>
b/drivers/gpu/drm/nouveau/<wbr>nvkm/falcon/msgqueue_0137c63d.<wbr>c<br>
index fec0273158f6..c2ae525a0780 100644<br>
--- a/drivers/gpu/drm/nouveau/<wbr>nvkm/falcon/msgqueue_0137c63d.<wbr>c<br>
+++ b/drivers/gpu/drm/nouveau/<wbr>nvkm/falcon/msgqueue_0137c63d.<wbr>c<br>
@@ -279,6 +279,7 @@ acr_boot_falcon(struct nvkm_msgqueue *priv, enum<br>
nvkm_secboot_falcon falcon)<br>
u32 flags;<br>
u32 falcon_id;<br>
} cmd;<br>
+ const struct nvkm_subdev *subdev = priv->falcon->owner;<br>
<br>
memset(&cmd, 0, sizeof(cmd));<br>
<br>
@@ -290,7 +291,8 @@ acr_boot_falcon(struct nvkm_msgqueue *priv, enum<br>
nvkm_secboot_falcon falcon)<br>
nvkm_msgqueue_post(priv, MSGQUEUE_MSG_PRIORITY_HIGH, &cmd.hdr,<br>
acr_boot_falcon_callback, &completed, true);<br>
<br>
- if (!wait_for_completion_timeout(<wbr>&completed,<br>
msecs_to_jiffies(1000)))<br>
+ nvkm_error(subdev, "waiting for timeout in acr_boot_falcon<br>
(msgqueue_0137bca5)\n");<br>
+ if (!wait_for_completion_timeout(<wbr>&completed,<br>
msecs_to_jiffies(5000)))<br>
return -ETIMEDOUT;<br>
<br>
return 0;<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
On 9/13/17 11:37 AM, Nicolas Mercier wrote:<br>
> I am still looking for a solution. I have hacked around in the code<br>
> and found out the following:<br>
> - Nouveau prefers using PCIE power managemet over ACPI Optimus calls.<br>
> I tried to force it to use Optimus ACPI calls, but there was an error<br>
> calling the ACPI method so it bails out and uses PCIE PM anyway.<br>
> - I tried to debug the PCIE pm states which internally uses ACPI to<br>
> turn power on/off. I could print different statuses here and there.<br>
> When the power is switched off, ACPI calls turn the power off then the<br>
> kernel successfully puts the device in state D3Cold (also turning off<br>
> power to the PCI Express port). When waking up, ACPI turns the power<br>
> on, apparently successfully (Device [PEGP] transitioned to D0). But a<br>
> read from the PCI bus to get the power state & other flags return<br>
> 65535 (~0) and the kernel fails to set the device in D0 (although ACPI<br>
> claims it is in D0)<br>
> The call to pci_raw_set_power_state (in drivers/pci/pci.c) seems to<br>
> fail because pci_read_config_word returns "~0" (and does not return<br>
> any error code)<br>
><br>
> I have tried different things; if I use pcie_port_pm=off, the NVidia<br>
> card goes to state D3Hot (if I am not mistaken, its PCIE port is still<br>
> powered) but that did not fix it. I tried to turn on or off different<br>
> PCI/PCIexpress features such as hotplug, PM and so on. The only thing<br>
> that works is that PM is fully disabled, which equals to the device<br>
> not being powered off, so that would be equivalent to nouveau.runpm=0,<br>
> which is not helping a lot. I have tried to force pcie aspm by<br>
> recompiling the ACPI table, still no luck.<br>
><br>
> I am still taking a look, but it seems like the problem comes from the<br>
> PCIExpress PM functions and ACPI, not directly from Nouveau<br>
><br>
> /n<br>
</div></div></blockquote></div><br></div>