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
0030
0031
0032 const u8 *
0033 gf100_mmu_kind(struct nvkm_mmu *mmu, int *count, u8 *invalid)
0034 {
0035 static const u8
0036 kind[256] = {
0037 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0x01,
0038 0x01, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
0039 0xff, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11,
0040 0x11, 0x11, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff,
0041 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x27,
0042 0x28, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0043 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0044 0xff, 0xff, 0x26, 0x27, 0x28, 0x29, 0x26, 0x27,
0045 0x28, 0x29, 0xff, 0xff, 0xff, 0xff, 0x46, 0xff,
0046 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0047 0xff, 0x46, 0x46, 0x46, 0x46, 0xff, 0xff, 0xff,
0048 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0049 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0050 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0051 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0052 0xff, 0xff, 0xff, 0x7b, 0xff, 0xff, 0xff, 0xff,
0053 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0x7b,
0054 0x7b, 0x7b, 0xff, 0x8b, 0x8c, 0x8d, 0x8e, 0xff,
0055 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0056 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0057 0xff, 0xff, 0xff, 0x8b, 0x8c, 0x8d, 0x8e, 0xa7,
0058 0xa8, 0xa9, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff,
0059 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0060 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa7,
0061 0xa8, 0xa9, 0xaa, 0xc3, 0xff, 0xff, 0xff, 0xff,
0062 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xc3, 0xc3,
0063 0xc3, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0064 0xfe, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe,
0065 0xfe, 0xff, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff,
0066 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xfe, 0xff,
0067 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
0068 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xfd, 0xfe, 0xff
0069 };
0070
0071 *count = ARRAY_SIZE(kind);
0072 *invalid = 0xff;
0073 return kind;
0074 }
0075
0076 static const struct nvkm_mmu_func
0077 gf100_mmu = {
0078 .dma_bits = 40,
0079 .mmu = {{ -1, -1, NVIF_CLASS_MMU_GF100}},
0080 .mem = {{ -1, 0, NVIF_CLASS_MEM_GF100}, gf100_mem_new, gf100_mem_map },
0081 .vmm = {{ -1, -1, NVIF_CLASS_VMM_GF100}, gf100_vmm_new },
0082 .kind = gf100_mmu_kind,
0083 .kind_sys = true,
0084 };
0085
0086 int
0087 gf100_mmu_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
0088 struct nvkm_mmu **pmmu)
0089 {
0090 return nvkm_mmu_new_(&gf100_mmu, device, type, inst, pmmu);
0091 }