0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #include "mem.h"
0025 #include "vmm.h"
0026
0027 #include <nvif/class.h>
0028
0029 const u8 *
0030 nv50_mmu_kind(struct nvkm_mmu *base, int *count, u8 *invalid)
0031 {
0032
0033
0034
0035
0036
0037
0038
0039
0040 static const u8
0041 kind[128] = {
0042 0x01, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
0043 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
0044 0x01, 0x01, 0x01, 0x01, 0x7f, 0x7f, 0x7f, 0x7f,
0045 0x02, 0x02, 0x02, 0x02, 0x7f, 0x7f, 0x7f, 0x7f,
0046 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x7f,
0047 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x7f,
0048 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
0049 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
0050 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
0051 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x7f, 0x7f,
0052 0x7f, 0x7f, 0x7f, 0x7f, 0x01, 0x01, 0x01, 0x7f,
0053 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
0054 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x7f,
0055 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02,
0056 0x01, 0x7f, 0x02, 0x7f, 0x01, 0x7f, 0x02, 0x7f,
0057 0x01, 0x01, 0x02, 0x02, 0x01, 0x01, 0x7f, 0x7f
0058 };
0059 *count = ARRAY_SIZE(kind);
0060 *invalid = 0x7f;
0061 return kind;
0062 }
0063
0064 static const struct nvkm_mmu_func
0065 nv50_mmu = {
0066 .dma_bits = 40,
0067 .mmu = {{ -1, -1, NVIF_CLASS_MMU_NV50}},
0068 .mem = {{ -1, 0, NVIF_CLASS_MEM_NV50}, nv50_mem_new, nv50_mem_map },
0069 .vmm = {{ -1, -1, NVIF_CLASS_VMM_NV50}, nv50_vmm_new, false, 0x1400 },
0070 .kind = nv50_mmu_kind,
0071 };
0072
0073 int
0074 nv50_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
0075 struct nvkm_mmu **pmmu)
0076 {
0077 return nvkm_mmu_new_(&nv50_mmu, device, type, inst, pmmu);
0078 }