[Nouveau] [PATCH] pmu: use nvkm_msec instead of do while
Karol Herbst
nouveau at karolherbst.de
Sat Nov 14 11:18:01 PST 2015
I hit this while loop in an error state of the gpu
Signed-off-by: Karol Herbst <nouveau at karolherbst.de>
---
drm/nouveau/nvkm/subdev/pmu/base.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/drm/nouveau/nvkm/subdev/pmu/base.c b/drm/nouveau/nvkm/subdev/pmu/base.c
index fafbe2a..398b6a8 100644
--- a/drm/nouveau/nvkm/subdev/pmu/base.c
+++ b/drm/nouveau/nvkm/subdev/pmu/base.c
@@ -106,9 +106,15 @@ nvkm_pmu_send(struct nvkm_pmu *pmu, u32 reply[2],
}
/* acquire data segment access */
- do {
+ nvkm_wr32(device, 0x10a580, 0x00000001);
+ if (nvkm_msec(device, 2000,
+ if (nvkm_rd32(device, 0x10a580) == 0x00000001)
+ break;
nvkm_wr32(device, 0x10a580, 0x00000001);
- } while (nvkm_rd32(device, 0x10a580) != 0x00000001);
+ ) < 0) {
+ mutex_unlock(&subdev->mutex);
+ return -EBUSY;
+ }
/* write the packet */
nvkm_wr32(device, 0x10a1c0, 0x01000000 | (((addr & 0x07) << 4) +
--
2.6.3
More information about the Nouveau
mailing list