|
@@ -302,21 +302,32 @@ int
|
|
|
gt215_clk_pre(struct nvkm_clk *clk, unsigned long *flags)
|
|
|
{
|
|
|
struct nvkm_device *device = clk->subdev.device;
|
|
|
- struct nvkm_fifo *fifo = nvkm_fifo(clk);
|
|
|
+ struct nvkm_fifo *fifo = device->fifo;
|
|
|
|
|
|
/* halt and idle execution engines */
|
|
|
nvkm_mask(device, 0x020060, 0x00070000, 0x00000000);
|
|
|
nvkm_mask(device, 0x002504, 0x00000001, 0x00000001);
|
|
|
/* Wait until the interrupt handler is finished */
|
|
|
- if (!nv_wait(clk, 0x000100, 0xffffffff, 0x00000000))
|
|
|
+ if (nvkm_msec(device, 2000,
|
|
|
+ if (!nvkm_rd32(device, 0x000100))
|
|
|
+ break;
|
|
|
+ ) < 0)
|
|
|
return -EBUSY;
|
|
|
|
|
|
if (fifo)
|
|
|
fifo->pause(fifo, flags);
|
|
|
|
|
|
- if (!nv_wait(clk, 0x002504, 0x00000010, 0x00000010))
|
|
|
+ if (nvkm_msec(device, 2000,
|
|
|
+ if (nvkm_rd32(device, 0x002504) & 0x00000010)
|
|
|
+ break;
|
|
|
+ ) < 0)
|
|
|
return -EIO;
|
|
|
- if (!nv_wait(clk, 0x00251c, 0x0000003f, 0x0000003f))
|
|
|
+
|
|
|
+ if (nvkm_msec(device, 2000,
|
|
|
+ u32 tmp = nvkm_rd32(device, 0x002504) & 0x0000003f;
|
|
|
+ if (tmp == 0x0000003f)
|
|
|
+ break;
|
|
|
+ ) < 0)
|
|
|
return -EIO;
|
|
|
|
|
|
return 0;
|
|
@@ -367,7 +378,10 @@ prog_pll(struct gt215_clk *clk, int idx, u32 pll, int dom)
|
|
|
nvkm_wr32(device, coef, info->pll);
|
|
|
nvkm_mask(device, ctrl, 0x00000015, 0x00000015);
|
|
|
nvkm_mask(device, ctrl, 0x00000010, 0x00000000);
|
|
|
- if (!nv_wait(clk, ctrl, 0x00020000, 0x00020000)) {
|
|
|
+ if (nvkm_msec(device, 2000,
|
|
|
+ if (nvkm_rd32(device, ctrl) & 0x00020000)
|
|
|
+ break;
|
|
|
+ ) < 0) {
|
|
|
nvkm_mask(device, ctrl, 0x00000010, 0x00000010);
|
|
|
nvkm_mask(device, src0, 0x00000101, 0x00000000);
|
|
|
return;
|