[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