Skip to content

Commit

Permalink
drm/nouveau/devinit/gm200: replace while loops with PTIMER-based time…
Browse files Browse the repository at this point in the history
…out loops

It appears to be safe to access PTIMER on an unposted board with newer
chipsets.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
  • Loading branch information
Ben Skeggs committed Nov 16, 2016
1 parent d91ccec commit 920c58a
Showing 1 changed file with 11 additions and 4 deletions.
15 changes: 11 additions & 4 deletions drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include <subdev/bios.h>
#include <subdev/bios/bit.h>
#include <subdev/bios/pmu.h>
#include <subdev/timer.h>

static void
pmu_code(struct nv50_devinit *init, u32 pmu, u32 img, u32 len, bool sec)
Expand Down Expand Up @@ -128,8 +129,11 @@ gm200_devinit_post(struct nvkm_devinit *base, bool post)
nvkm_mask(device, 0x000200, 0x00002000, 0x00000000);
nvkm_mask(device, 0x000200, 0x00002000, 0x00002000);
nvkm_rd32(device, 0x000200);
while (nvkm_rd32(device, 0x10a10c) & 0x00000006) {
}
if (nvkm_msec(device, 2000,
if (!(nvkm_rd32(device, 0x10a10c) & 0x00000006))
break;
) < 0)
return -ETIMEDOUT;
}

ret = pmu_load(init, 0x04, post, &exec, &args);
Expand All @@ -156,8 +160,11 @@ gm200_devinit_post(struct nvkm_devinit *base, bool post)
if (post) {
nvkm_wr32(device, 0x10a040, 0x00005000);
pmu_exec(init, exec);
while (!(nvkm_rd32(device, 0x10a040) & 0x00002000)) {
}
if (nvkm_msec(device, 2000,
if (nvkm_rd32(device, 0x10a040) & 0x00002000)
break;
) < 0)
return -ETIMEDOUT;
}

/* load and execute some other ucode image (bios therm?) */
Expand Down

0 comments on commit 920c58a

Please sign in to comment.