Commit ebb195db authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/mc: move NV_PMC_ENABLE bashing to chipset-specific code



Ampere needs different handling here, most of what we touch has moved.

We probably want to refactor these interfaces in general, but I'm not
yet sure how they should look, this will get the job done for now.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
parent fe76fe49
Loading
Loading
Loading
Loading
+6 −11
Original line number Diff line number Diff line
@@ -73,9 +73,8 @@ nvkm_mc_reset(struct nvkm_device *device, enum nvkm_subdev_type type, int inst)
{
	u64 pmc_enable = nvkm_mc_reset_mask(device, true, type, inst);
	if (pmc_enable) {
		nvkm_mask(device, 0x000200, pmc_enable, 0x00000000);
		nvkm_mask(device, 0x000200, pmc_enable, pmc_enable);
		nvkm_rd32(device, 0x000200);
		device->mc->func->device->disable(device->mc, pmc_enable);
		device->mc->func->device->enable(device->mc, pmc_enable);
	}
}

@@ -84,17 +83,15 @@ nvkm_mc_disable(struct nvkm_device *device, enum nvkm_subdev_type type, int inst
{
	u64 pmc_enable = nvkm_mc_reset_mask(device, false, type, inst);
	if (pmc_enable)
		nvkm_mask(device, 0x000200, pmc_enable, 0x00000000);
		device->mc->func->device->disable(device->mc, pmc_enable);
}

void
nvkm_mc_enable(struct nvkm_device *device, enum nvkm_subdev_type type, int inst)
{
	u64 pmc_enable = nvkm_mc_reset_mask(device, false, type, inst);
	if (pmc_enable) {
		nvkm_mask(device, 0x000200, pmc_enable, pmc_enable);
		nvkm_rd32(device, 0x000200);
	}
	if (pmc_enable)
		device->mc->func->device->enable(device->mc, pmc_enable);
}

bool
@@ -102,11 +99,9 @@ nvkm_mc_enabled(struct nvkm_device *device, enum nvkm_subdev_type type, int inst
{
	u64 pmc_enable = nvkm_mc_reset_mask(device, false, type, inst);

	return (pmc_enable != 0) &&
	       ((nvkm_rd32(device, 0x000200) & pmc_enable) == pmc_enable);
	return (pmc_enable != 0) && device->mc->func->device->enabled(device->mc, pmc_enable);
}


static int
nvkm_mc_init(struct nvkm_subdev *subdev)
{
+1 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ g84_mc = {
	.init = nv50_mc_init,
	.intr = &nv04_mc_intr,
	.intrs = g84_mc_intrs,
	.device = &nv04_mc_device,
	.reset = g84_mc_reset,
};

+1 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ g98_mc = {
	.init = nv50_mc_init,
	.intr = &nv04_mc_intr,
	.intrs = g98_mc_intrs,
	.device = &nv04_mc_device,
	.reset = g98_mc_reset,
};

+1 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
static const struct nvkm_mc_func
ga100_mc = {
	.init = nv50_mc_init,
	.device = &nv04_mc_device,
	.reset = gk104_mc_reset,
};

+1 −0
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ gf100_mc = {
	.intrs = gf100_mc_intrs,
	.intr_nonstall = true,
	.reset = gf100_mc_reset,
	.device = &nv04_mc_device,
	.unk260 = gf100_mc_unk260,
};

Loading