This source file includes following definitions.
- nv04_bus_intr
- nv04_bus_init
- nv04_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/gpio.h>
28
29 static void
30 nv04_bus_intr(struct nvkm_bus *bus)
31 {
32 struct nvkm_subdev *subdev = &bus->subdev;
33 struct nvkm_device *device = subdev->device;
34 u32 stat = nvkm_rd32(device, 0x001100) & nvkm_rd32(device, 0x001140);
35
36 if (stat & 0x00000001) {
37 nvkm_error(subdev, "BUS ERROR\n");
38 stat &= ~0x00000001;
39 nvkm_wr32(device, 0x001100, 0x00000001);
40 }
41
42 if (stat & 0x00000110) {
43 struct nvkm_gpio *gpio = device->gpio;
44 if (gpio)
45 nvkm_subdev_intr(&gpio->subdev);
46 stat &= ~0x00000110;
47 nvkm_wr32(device, 0x001100, 0x00000110);
48 }
49
50 if (stat) {
51 nvkm_error(subdev, "intr %08x\n", stat);
52 nvkm_mask(device, 0x001140, stat, 0x00000000);
53 }
54 }
55
56 static void
57 nv04_bus_init(struct nvkm_bus *bus)
58 {
59 struct nvkm_device *device = bus->subdev.device;
60 nvkm_wr32(device, 0x001100, 0xffffffff);
61 nvkm_wr32(device, 0x001140, 0x00000111);
62 }
63
64 static const struct nvkm_bus_func
65 nv04_bus = {
66 .init = nv04_bus_init,
67 .intr = nv04_bus_intr,
68 };
69
70 int
71 nv04_bus_new(struct nvkm_device *device, int index, struct nvkm_bus **pbus)
72 {
73 return nvkm_bus_new_(&nv04_bus, device, index, pbus);
74 }