[Nouveau] [PATCH 2/2] secboot: fix falcon reset

Alexandre Courbot acourbot at nvidia.com
Wed Mar 9 11:30:22 UTC 2016


The falcon reset procedure expecting a falcon in an initialized state,
which was accidentally provided by the PMU subdev. Make sure that
secboot can manage the falcon on its own.

Signed-off-by: Alexandre Courbot <acourbot at nvidia.com>
---
 drm/nouveau/nvkm/subdev/secboot/base.c | 22 +++++++---------------
 1 file changed, 7 insertions(+), 15 deletions(-)

diff --git a/drm/nouveau/nvkm/subdev/secboot/base.c b/drm/nouveau/nvkm/subdev/secboot/base.c
index 05c62549c39b..520facf9bc07 100644
--- a/drm/nouveau/nvkm/subdev/secboot/base.c
+++ b/drm/nouveau/nvkm/subdev/secboot/base.c
@@ -95,24 +95,16 @@ static int
 nvkm_secboot_falcon_disable(struct nvkm_secboot *sb)
 {
 	struct nvkm_device *device = sb->subdev.device;
-	int ret;
 
-	ret = falcon_clear_halt_interrupt(device, sb->base);
-	if (ret)
-		return ret;
+	/* disable IRQs and wait for any previous code to complete */
+	nvkm_mask(device, 0x644, sb->irq_mask, 0x0);
+	nvkm_mask(device, 0x640, sb->irq_mask, 0x0);
+	nvkm_wr32(device, sb->base + 0x014, 0xff);
 
-	ret = falcon_wait_idle(device, sb->base);
-	if (ret)
-		return ret;
+	falcon_wait_idle(device, sb->base);
 
-	if ((nvkm_rd32(device, 0x200) & sb->enable_mask) != 0) {
-		/* disable IRQs */
-		nvkm_mask(device, 0x644, sb->irq_mask, 0x0);
-		nvkm_mask(device, 0x640, sb->irq_mask, 0x0);
-		nvkm_wr32(device, sb->base + 0x014, 0xff);
-		/* disable engine */
-		nvkm_mask(device, 0x200, sb->enable_mask, 0x0);
-	}
+	/* disable engine */
+	nvkm_mask(device, 0x200, sb->enable_mask, 0x0);
 
 	return 0;
 }
-- 
2.7.2



More information about the Nouveau mailing list