From 920c58a7119bb5d23d21f361a395acb79e693521 Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Tue, 8 Nov 2016 11:54:24 +1000 Subject: [PATCH] drm/nouveau/devinit/gm200: replace while loops with PTIMER-based timeout loops It appears to be safe to access PTIMER on an unposted board with newer chipsets. Signed-off-by: Ben Skeggs --- .../gpu/drm/nouveau/nvkm/subdev/devinit/gm200.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.c b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.c index a410c0db8a08..d749278b4332 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.c @@ -26,6 +26,7 @@ #include #include #include +#include static void pmu_code(struct nv50_devinit *init, u32 pmu, u32 img, u32 len, bool sec) @@ -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); @@ -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?) */ -- 2.20.1