int gf100_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **);
 int gk104_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **);
+int gk20a_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **);
 int gm107_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **);
 #endif
 
        }
 }
 
+void
+gf100_ltc_invalidate(struct nvkm_ltc *ltc)
+{
+       struct nvkm_device *device = ltc->subdev.device;
+       s64 taken;
+
+       nvkm_wr32(device, 0x70004, 0x00000001);
+       taken = nvkm_wait_msec(device, 2, 0x70004, 0x00000003, 0x00000000);
+       if (taken < 0)
+               nvkm_warn(<c->subdev, "LTC invalidate timeout\n");
+
+       if (taken > 0)
+               nvkm_debug(<c->subdev, "LTC invalidate took %lld ns\n", taken);
+}
+
+void
+gf100_ltc_flush(struct nvkm_ltc *ltc)
+{
+       struct nvkm_device *device = ltc->subdev.device;
+       s64 taken;
+
+       nvkm_wr32(device, 0x70010, 0x00000001);
+       taken = nvkm_wait_msec(device, 2, 0x70010, 0x00000003, 0x00000000);
+       if (taken < 0)
+               nvkm_warn(<c->subdev, "LTC flush timeout\n");
+
+       if (taken > 0)
+               nvkm_debug(<c->subdev, "LTC flush took %lld ns\n", taken);
+}
+
 /* TODO: Figure out tag memory details and drop the over-cautious allocation.
  */
 int
        .zbc = 16,
        .zbc_clear_color = gf100_ltc_zbc_clear_color,
        .zbc_clear_depth = gf100_ltc_zbc_clear_depth,
+       .invalidate = gf100_ltc_invalidate,
+       .flush = gf100_ltc_flush,
 };
 
 int
 
 void gf100_ltc_cbc_wait(struct nvkm_ltc *);
 void gf100_ltc_zbc_clear_color(struct nvkm_ltc *, int, const u32[4]);
 void gf100_ltc_zbc_clear_depth(struct nvkm_ltc *, int, const u32);
+void gf100_ltc_invalidate(struct nvkm_ltc *);
+void gf100_ltc_flush(struct nvkm_ltc *);
 #endif