Alexandre Courbot
2016-Mar-09 11:30 UTC
[Nouveau] [PATCH 1/2] secboot: don't use hardcoded mask to enable falcon
The IRQ mask of the PMU falcon was left - replace it with the proper irq_mask variable. Signed-off-by: Alexandre Courbot <acourbot at nvidia.com> --- drm/nouveau/nvkm/subdev/secboot/base.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drm/nouveau/nvkm/subdev/secboot/base.c b/drm/nouveau/nvkm/subdev/secboot/base.c index b718ba79177c..05c62549c39b 100644 --- a/drm/nouveau/nvkm/subdev/secboot/base.c +++ b/drm/nouveau/nvkm/subdev/secboot/base.c @@ -85,8 +85,8 @@ nvkm_secboot_falcon_enable(struct nvkm_secboot *sb) /* enable IRQs */ nvkm_wr32(device, sb->base + 0x010, 0xff); - nvkm_mask(device, 0x640, sb->irq_mask, 0x1000000); - nvkm_mask(device, 0x644, sb->irq_mask, 0x1000000); + nvkm_mask(device, 0x640, sb->irq_mask, sb->irq_mask); + nvkm_mask(device, 0x644, sb->irq_mask, sb->irq_mask); return 0; } -- 2.7.2
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
Reasonably Related Threads
- [PATCH v2 2/5] core: add support for secure boot
- [PATCH v2 0/5] nouveau: add secure boot support for dGPU and Tegra
- [PATCH v3 00/11] nouveau: add secure boot support for dGPU and Tegra
- [PATCH v2 2/5] core: add support for secure boot
- [PATCH 0/8] Falcon library