0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 #include "gf100.h"
0023
0024 #include <subdev/timer.h>
0025
0026 void
0027 gm107_bar_bar1_wait(struct nvkm_bar *bar)
0028 {
0029 struct nvkm_device *device = bar->subdev.device;
0030 nvkm_msec(device, 2000,
0031 if (!(nvkm_rd32(device, 0x001710) & 0x00000003))
0032 break;
0033 );
0034 }
0035
0036 static void
0037 gm107_bar_bar2_wait(struct nvkm_bar *bar)
0038 {
0039 struct nvkm_device *device = bar->subdev.device;
0040 nvkm_msec(device, 2000,
0041 if (!(nvkm_rd32(device, 0x001710) & 0x0000000c))
0042 break;
0043 );
0044 }
0045
0046 static const struct nvkm_bar_func
0047 gm107_bar_func = {
0048 .dtor = gf100_bar_dtor,
0049 .oneinit = gf100_bar_oneinit,
0050 .bar1.init = gf100_bar_bar1_init,
0051 .bar1.fini = gf100_bar_bar1_fini,
0052 .bar1.wait = gm107_bar_bar1_wait,
0053 .bar1.vmm = gf100_bar_bar1_vmm,
0054 .bar2.init = gf100_bar_bar2_init,
0055 .bar2.fini = gf100_bar_bar2_fini,
0056 .bar2.wait = gm107_bar_bar2_wait,
0057 .bar2.vmm = gf100_bar_bar2_vmm,
0058 .flush = g84_bar_flush,
0059 };
0060
0061 int
0062 gm107_bar_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
0063 struct nvkm_bar **pbar)
0064 {
0065 return gf100_bar_new_(&gm107_bar_func, device, type, inst, pbar);
0066 }