This source file includes following definitions.
- g94_bus_hwsq_exec
- g94_bus_new
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 #include "priv.h"
26
27 #include <subdev/timer.h>
28
29 static int
30 g94_bus_hwsq_exec(struct nvkm_bus *bus, u32 *data, u32 size)
31 {
32 struct nvkm_device *device = bus->subdev.device;
33 int i;
34
35 nvkm_mask(device, 0x001098, 0x00000008, 0x00000000);
36 nvkm_wr32(device, 0x001304, 0x00000000);
37 nvkm_wr32(device, 0x001318, 0x00000000);
38 for (i = 0; i < size; i++)
39 nvkm_wr32(device, 0x080000 + (i * 4), data[i]);
40 nvkm_mask(device, 0x001098, 0x00000018, 0x00000018);
41 nvkm_wr32(device, 0x00130c, 0x00000001);
42
43 if (nvkm_msec(device, 2000,
44 if (!(nvkm_rd32(device, 0x001308) & 0x00000100))
45 break;
46 ) < 0)
47 return -ETIMEDOUT;
48
49 return 0;
50 }
51
52 static const struct nvkm_bus_func
53 g94_bus = {
54 .init = nv50_bus_init,
55 .intr = nv50_bus_intr,
56 .hwsq_exec = g94_bus_hwsq_exec,
57 .hwsq_size = 128,
58 };
59
60 int
61 g94_bus_new(struct nvkm_device *device, int index, struct nvkm_bus **pbus)
62 {
63 return nvkm_bus_new_(&g94_bus, device, index, pbus);
64 }