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
Apparently Analagous 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