From: Ben Skeggs Date: Tue, 8 Nov 2016 01:54:24 +0000 (+1000) Subject: drm/nouveau/devinit/gm200: replace while loops with PTIMER-based timeout loops X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=920c58a7119bb5d23d21f361a395acb79e693521;p=GitHub%2Fmoto-9609%2Fandroid_kernel_motorola_exynos9610.git 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 --- 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?) */