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

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

File Facts

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

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

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

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

static int
gk104_privring_init(struct nvkm_subdev *privring)
{
	struct nvkm_device *device = privring->device;
	nvkm_mask(device, 0x122318, 0x0003ffff, 0x00001000);
	nvkm_mask(device, 0x12231c, 0x0003ffff, 0x00000200);
	nvkm_mask(device, 0x122310, 0x0003ffff, 0x00000800);
	nvkm_mask(device, 0x122348, 0x0003ffff, 0x00000100);
	nvkm_mask(device, 0x1223b0, 0x0003ffff, 0x00000fff);
	nvkm_mask(device, 0x122348, 0x0003ffff, 0x00000200);
	nvkm_mask(device, 0x122358, 0x0003ffff, 0x00002880);
	return 0;
}

static const struct nvkm_subdev_func
gk104_privring = {
	.preinit = gk104_privring_init,
	.init = gk104_privring_init,
	.intr = gk104_privring_intr,
};

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

Annotation

Implementation Notes