drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.c
Extension
.c
Size
3209 bytes
Lines
100
Domain
Driver Families
Bucket
drivers/gpu
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

if (i != save >> 4) {
				nvkm_mask(device, 0x9a065c, 0x000000f0, i << 4);
				nvbios_init(subdev, nvbios_rd32(bios, data));
			}
		}
		nvkm_mask(device, 0x9a065c, 0x000000f0, save);
	}

	nvkm_mask(device, 0x9a0584, 0x11000000, 0x00000000);
	nvkm_wr32(device, 0x10ecc0, 0xffffffff);
	nvkm_mask(device, 0x9a0160, 0x00000010, 0x00000010);
	return 0;
}

static u32
gp100_ram_probe_fbpa(struct nvkm_device *device, int fbpa)
{
	return nvkm_rd32(device, 0x90020c + (fbpa * 0x4000));
}

static const struct nvkm_ram_func
gp100_ram = {
	.upper = 0x1000000000ULL,
	.probe_fbp = gm107_ram_probe_fbp,
	.probe_fbp_amount = gm200_ram_probe_fbp_amount,
	.probe_fbpa_amount = gp100_ram_probe_fbpa,
	.init = gp100_ram_init,
};

int
gp100_ram_new(struct nvkm_fb *fb, struct nvkm_ram **pram)
{
	struct nvkm_ram *ram;

	if (!(ram = *pram = kzalloc_obj(*ram)))
		return -ENOMEM;

	return gf100_ram_ctor(&gp100_ram, fb, ram);

}

Annotation

Implementation Notes