Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

drm/nouveau/mc/gf100-: handle second interrupt tree



Doesn't fix any known issue, but best be safe in case control is handed
to us from firmware with these left enabled.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent d4c4cc83
Loading
Loading
Loading
Loading
+29 −3
Original line number Original line Diff line number Diff line
@@ -48,6 +48,32 @@ gf100_mc_intr[] = {
	{},
	{},
};
};


void
gf100_mc_intr_unarm(struct nvkm_mc *mc)
{
	struct nvkm_device *device = mc->subdev.device;
	nvkm_wr32(device, 0x000140, 0x00000000);
	nvkm_wr32(device, 0x000144, 0x00000000);
	nvkm_rd32(device, 0x000140);
}

void
gf100_mc_intr_rearm(struct nvkm_mc *mc)
{
	struct nvkm_device *device = mc->subdev.device;
	nvkm_wr32(device, 0x000140, 0x00000001);
	nvkm_wr32(device, 0x000144, 0x00000001);
}

u32
gf100_mc_intr_mask(struct nvkm_mc *mc)
{
	struct nvkm_device *device = mc->subdev.device;
	u32 intr0 = nvkm_rd32(device, 0x000100);
	u32 intr1 = nvkm_rd32(device, 0x000104);
	return intr0 | intr1;
}

static void
static void
gf100_mc_msi_rearm(struct nvkm_mc *mc)
gf100_mc_msi_rearm(struct nvkm_mc *mc)
{
{
@@ -64,9 +90,9 @@ static const struct nvkm_mc_func
gf100_mc = {
gf100_mc = {
	.init = nv50_mc_init,
	.init = nv50_mc_init,
	.intr = gf100_mc_intr,
	.intr = gf100_mc_intr,
	.intr_unarm = nv04_mc_intr_unarm,
	.intr_unarm = gf100_mc_intr_unarm,
	.intr_rearm = nv04_mc_intr_rearm,
	.intr_rearm = gf100_mc_intr_rearm,
	.intr_mask = nv04_mc_intr_mask,
	.intr_mask = gf100_mc_intr_mask,
	.msi_rearm = gf100_mc_msi_rearm,
	.msi_rearm = gf100_mc_msi_rearm,
	.unk260 = gf100_mc_unk260,
	.unk260 = gf100_mc_unk260,
};
};
+3 −3
Original line number Original line Diff line number Diff line
@@ -27,9 +27,9 @@ static const struct nvkm_mc_func
gf106_mc = {
gf106_mc = {
	.init = nv50_mc_init,
	.init = nv50_mc_init,
	.intr = gf100_mc_intr,
	.intr = gf100_mc_intr,
	.intr_unarm = nv04_mc_intr_unarm,
	.intr_unarm = gf100_mc_intr_unarm,
	.intr_rearm = nv04_mc_intr_rearm,
	.intr_rearm = gf100_mc_intr_rearm,
	.intr_mask = nv04_mc_intr_mask,
	.intr_mask = gf100_mc_intr_mask,
	.msi_rearm = nv40_mc_msi_rearm,
	.msi_rearm = nv40_mc_msi_rearm,
	.unk260 = gf100_mc_unk260,
	.unk260 = gf100_mc_unk260,
};
};
+3 −3
Original line number Original line Diff line number Diff line
@@ -27,9 +27,9 @@ static const struct nvkm_mc_func
gk20a_mc = {
gk20a_mc = {
	.init = nv50_mc_init,
	.init = nv50_mc_init,
	.intr = gf100_mc_intr,
	.intr = gf100_mc_intr,
	.intr_unarm = nv04_mc_intr_unarm,
	.intr_unarm = gf100_mc_intr_unarm,
	.intr_rearm = nv04_mc_intr_rearm,
	.intr_rearm = gf100_mc_intr_rearm,
	.intr_mask = nv04_mc_intr_mask,
	.intr_mask = gf100_mc_intr_mask,
	.msi_rearm = nv40_mc_msi_rearm,
	.msi_rearm = nv40_mc_msi_rearm,
};
};


+3 −0
Original line number Original line Diff line number Diff line
@@ -38,5 +38,8 @@ void nv50_mc_init(struct nvkm_mc *);
extern const struct nvkm_mc_intr nv50_mc_intr[];
extern const struct nvkm_mc_intr nv50_mc_intr[];


extern const struct nvkm_mc_intr gf100_mc_intr[];
extern const struct nvkm_mc_intr gf100_mc_intr[];
void gf100_mc_intr_unarm(struct nvkm_mc *);
void gf100_mc_intr_rearm(struct nvkm_mc *);
u32 gf100_mc_intr_mask(struct nvkm_mc *);
void gf100_mc_unk260(struct nvkm_mc *, u32);
void gf100_mc_unk260(struct nvkm_mc *, u32);
#endif
#endif