1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#include "mem.h"
23#include "vmm.h"
24
25#include <subdev/fb.h>
26
27#include <nvif/class.h>
28
29const u8 *
30gm200_mmu_kind(struct nvkm_mmu *mmu, int *count)
31{
32 static const u8
33 kind[256] = {
34 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0x01,
35 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
36 0xff, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11,
37 0x11, 0x11, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff,
38 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x27,
39 0x28, 0x29, 0x2a, 0x2b, 0xff, 0xff, 0xff, 0xff,
40 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
41 0xff, 0xff, 0x26, 0x27, 0x28, 0x29, 0x26, 0x27,
42 0x28, 0x29, 0xff, 0xff, 0xff, 0xff, 0x46, 0xff,
43 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
44 0xff, 0x46, 0x46, 0x46, 0x46, 0xff, 0xff, 0xff,
45 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
46 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
47 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
48 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
49 0xff, 0xff, 0xff, 0x7b, 0xff, 0xff, 0xff, 0xff,
50 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0x7b,
51 0x7b, 0x7b, 0xff, 0x8b, 0x8c, 0x8d, 0x8e, 0xff,
52 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
53 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
54 0xff, 0xff, 0xff, 0x8b, 0x8c, 0x8d, 0x8e, 0xa7,
55 0xa8, 0xa9, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff,
56 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
57 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa7,
58 0xa8, 0xa9, 0xaa, 0xc3, 0xff, 0xff, 0xff, 0xff,
59 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xc3, 0xc3,
60 0xc3, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
61 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe,
62 0xfe, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff,
63 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xfe, 0xff,
64 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
65 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xfd, 0xfe, 0xff
66 };
67 *count = ARRAY_SIZE(kind);
68 return kind;
69}
70
71static const struct nvkm_mmu_func
72gm200_mmu = {
73 .dma_bits = 40,
74 .mmu = {{ -1, -1, NVIF_CLASS_MMU_GF100}},
75 .mem = {{ -1, 0, NVIF_CLASS_MEM_GF100}, gf100_mem_new, gf100_mem_map },
76 .vmm = {{ -1, 0, NVIF_CLASS_VMM_GM200}, gm200_vmm_new },
77 .kind = gm200_mmu_kind,
78 .kind_sys = true,
79};
80
81static const struct nvkm_mmu_func
82gm200_mmu_fixed = {
83 .dma_bits = 40,
84 .mmu = {{ -1, -1, NVIF_CLASS_MMU_GF100}},
85 .mem = {{ -1, 0, NVIF_CLASS_MEM_GF100}, gf100_mem_new, gf100_mem_map },
86 .vmm = {{ -1, -1, NVIF_CLASS_VMM_GM200}, gm200_vmm_new_fixed },
87 .kind = gm200_mmu_kind,
88 .kind_sys = true,
89};
90
91int
92gm200_mmu_new(struct nvkm_device *device, int index, struct nvkm_mmu **pmmu)
93{
94 if (device->fb->page)
95 return nvkm_mmu_new_(&gm200_mmu_fixed, device, index, pmmu);
96 return nvkm_mmu_new_(&gm200_mmu, device, index, pmmu);
97}
98