drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf100.c

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

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf100.c
Extension
.c
Size
3954 bytes
Lines
123
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 (intr0 & stat) {
			gf100_privring_intr_hub(privring, i);
			intr0 &= ~stat;
		}
	}

	for (i = 0; (intr0 & 0xffff0000) && i < ropnr; i++) {
		u32 stat = 0x00010000 << i;
		if (intr0 & stat) {
			gf100_privring_intr_rop(privring, i);
			intr0 &= ~stat;
		}
	}

	for (i = 0; intr1 && i < gpcnr; i++) {
		u32 stat = 0x00000001 << i;
		if (intr1 & stat) {
			gf100_privring_intr_gpc(privring, i);
			intr1 &= ~stat;
		}
	}

	nvkm_mask(device, 0x121c4c, 0x0000003f, 0x00000002);
	nvkm_msec(device, 2000,
		if (!(nvkm_rd32(device, 0x121c4c) & 0x0000003f))
			break;
	);
}

static int
gf100_privring_init(struct nvkm_subdev *privring)
{
	struct nvkm_device *device = privring->device;
	nvkm_mask(device, 0x122310, 0x0003ffff, 0x00000800);
	nvkm_wr32(device, 0x12232c, 0x00100064);
	nvkm_wr32(device, 0x122330, 0x00100064);
	nvkm_wr32(device, 0x122334, 0x00100064);
	nvkm_mask(device, 0x122348, 0x0003ffff, 0x00000100);
	return 0;
}

static const struct nvkm_subdev_func
gf100_privring = {
	.init = gf100_privring_init,
	.intr = gf100_privring_intr,
};

int
gf100_privring_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst,
		   struct nvkm_subdev **pprivring)
{
	return nvkm_subdev_new_(&gf100_privring, device, type, inst, pprivring);
}

Annotation

Implementation Notes