xref: /linux/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp102.c (revision 46040ea8a6a58e5645d91ffa3ead7ed8fd633d56)
1 // SPDX-License-Identifier: MIT
2 #include "ram.h"
3 
4 #include <subdev/bios.h>
5 
6 static const struct nvkm_ram_func
7 gp102_ram = {
8 	.init = gp100_ram_init,
9 };
10 
11 int
gp102_ram_new(struct nvkm_fb * fb,struct nvkm_ram ** pram)12 gp102_ram_new(struct nvkm_fb *fb, struct nvkm_ram **pram)
13 {
14 	enum nvkm_ram_type type = nvkm_fb_bios_memtype(fb->subdev.device->bios);
15 	const u32 rsvd_head = ( 256 * 1024); /* vga memory */
16 	const u32 rsvd_tail = (1024 * 1024); /* vbios etc */
17 	u64 size = fb->func->vidmem.size(fb);
18 	int ret;
19 
20 	ret = nvkm_ram_new_(&gp102_ram, fb, type, size, pram);
21 	if (ret)
22 		return ret;
23 
24 	nvkm_mm_fini(&(*pram)->vram);
25 
26 	return nvkm_mm_init(&(*pram)->vram, NVKM_RAM_MM_NORMAL,
27 			    rsvd_head >> NVKM_RAM_MM_SHIFT,
28 			    (size - rsvd_head - rsvd_tail) >> NVKM_RAM_MM_SHIFT,
29 			    1);
30 
31 }
32