Loading drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h +3 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,9 @@ struct nvkm_mc { bool use_msi; }; void nvkm_mc_intr_unarm(struct nvkm_mc *); void nvkm_mc_intr_rearm(struct nvkm_mc *); u32 nvkm_mc_intr_mask(struct nvkm_mc *); void nvkm_mc_unk260(struct nvkm_mc *, u32 data); int nv04_mc_new(struct nvkm_device *, int, struct nvkm_mc **); Loading drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c +21 −11 Original line number Diff line number Diff line Loading @@ -32,13 +32,24 @@ nvkm_mc_unk260(struct nvkm_mc *mc, u32 data) mc->func->unk260(mc, data); } static inline u32 void nvkm_mc_intr_unarm(struct nvkm_mc *mc) { return mc->func->intr_unarm(mc); } void nvkm_mc_intr_rearm(struct nvkm_mc *mc) { return mc->func->intr_rearm(mc); } u32 nvkm_mc_intr_mask(struct nvkm_mc *mc) { struct nvkm_device *device = mc->subdev.device; u32 intr = nvkm_rd32(device, 0x000100); if (intr == 0xffffffff) /* likely fallen off the bus */ intr = 0x00000000; u32 intr = mc->func->intr_mask(mc); if (WARN_ON_ONCE(intr == 0xffffffff)) intr = 0; /* likely fallen off the bus */ return intr; } Loading @@ -52,8 +63,7 @@ nvkm_mc_intr(int irq, void *arg) struct nvkm_subdev *unit; u32 intr; nvkm_wr32(device, 0x000140, 0x00000000); nvkm_rd32(device, 0x000140); nvkm_mc_intr_unarm(mc); intr = nvkm_mc_intr_mask(mc); if (mc->use_msi) mc->func->msi_rearm(mc); Loading @@ -74,14 +84,15 @@ nvkm_mc_intr(int irq, void *arg) nvkm_error(subdev, "unknown intr %08x\n", stat); } nvkm_wr32(device, 0x000140, 0x00000001); nvkm_mc_intr_rearm(mc); return intr ? IRQ_HANDLED : IRQ_NONE; } static int nvkm_mc_fini(struct nvkm_subdev *subdev, bool suspend) { nvkm_wr32(subdev->device, 0x000140, 0x00000000); struct nvkm_mc *mc = nvkm_mc(subdev); nvkm_mc_intr_unarm(mc); return 0; } Loading @@ -96,10 +107,9 @@ static int nvkm_mc_init(struct nvkm_subdev *subdev) { struct nvkm_mc *mc = nvkm_mc(subdev); struct nvkm_device *device = mc->subdev.device; if (mc->func->init) mc->func->init(mc); nvkm_wr32(device, 0x000140, 0x00000001); nvkm_mc_intr_rearm(mc); return 0; } Loading drivers/gpu/drm/nouveau/nvkm/subdev/mc/g94.c +3 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,9 @@ static const struct nvkm_mc_func g94_mc = { .init = nv50_mc_init, .intr = nv50_mc_intr, .intr_unarm = nv04_mc_intr_unarm, .intr_rearm = nv04_mc_intr_rearm, .intr_mask = nv04_mc_intr_mask, .msi_rearm = nv40_mc_msi_rearm, }; Loading drivers/gpu/drm/nouveau/nvkm/subdev/mc/g98.c +3 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,9 @@ static const struct nvkm_mc_func g98_mc = { .init = nv50_mc_init, .intr = g98_mc_intr, .intr_unarm = nv04_mc_intr_unarm, .intr_rearm = nv04_mc_intr_rearm, .intr_mask = nv04_mc_intr_mask, .msi_rearm = nv40_mc_msi_rearm, }; Loading drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c +3 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,9 @@ static const struct nvkm_mc_func gf100_mc = { .init = nv50_mc_init, .intr = gf100_mc_intr, .intr_unarm = nv04_mc_intr_unarm, .intr_rearm = nv04_mc_intr_rearm, .intr_mask = nv04_mc_intr_mask, .msi_rearm = gf100_mc_msi_rearm, .unk260 = gf100_mc_unk260, }; Loading Loading
drivers/gpu/drm/nouveau/include/nvkm/subdev/mc.h +3 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,9 @@ struct nvkm_mc { bool use_msi; }; void nvkm_mc_intr_unarm(struct nvkm_mc *); void nvkm_mc_intr_rearm(struct nvkm_mc *); u32 nvkm_mc_intr_mask(struct nvkm_mc *); void nvkm_mc_unk260(struct nvkm_mc *, u32 data); int nv04_mc_new(struct nvkm_device *, int, struct nvkm_mc **); Loading
drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c +21 −11 Original line number Diff line number Diff line Loading @@ -32,13 +32,24 @@ nvkm_mc_unk260(struct nvkm_mc *mc, u32 data) mc->func->unk260(mc, data); } static inline u32 void nvkm_mc_intr_unarm(struct nvkm_mc *mc) { return mc->func->intr_unarm(mc); } void nvkm_mc_intr_rearm(struct nvkm_mc *mc) { return mc->func->intr_rearm(mc); } u32 nvkm_mc_intr_mask(struct nvkm_mc *mc) { struct nvkm_device *device = mc->subdev.device; u32 intr = nvkm_rd32(device, 0x000100); if (intr == 0xffffffff) /* likely fallen off the bus */ intr = 0x00000000; u32 intr = mc->func->intr_mask(mc); if (WARN_ON_ONCE(intr == 0xffffffff)) intr = 0; /* likely fallen off the bus */ return intr; } Loading @@ -52,8 +63,7 @@ nvkm_mc_intr(int irq, void *arg) struct nvkm_subdev *unit; u32 intr; nvkm_wr32(device, 0x000140, 0x00000000); nvkm_rd32(device, 0x000140); nvkm_mc_intr_unarm(mc); intr = nvkm_mc_intr_mask(mc); if (mc->use_msi) mc->func->msi_rearm(mc); Loading @@ -74,14 +84,15 @@ nvkm_mc_intr(int irq, void *arg) nvkm_error(subdev, "unknown intr %08x\n", stat); } nvkm_wr32(device, 0x000140, 0x00000001); nvkm_mc_intr_rearm(mc); return intr ? IRQ_HANDLED : IRQ_NONE; } static int nvkm_mc_fini(struct nvkm_subdev *subdev, bool suspend) { nvkm_wr32(subdev->device, 0x000140, 0x00000000); struct nvkm_mc *mc = nvkm_mc(subdev); nvkm_mc_intr_unarm(mc); return 0; } Loading @@ -96,10 +107,9 @@ static int nvkm_mc_init(struct nvkm_subdev *subdev) { struct nvkm_mc *mc = nvkm_mc(subdev); struct nvkm_device *device = mc->subdev.device; if (mc->func->init) mc->func->init(mc); nvkm_wr32(device, 0x000140, 0x00000001); nvkm_mc_intr_rearm(mc); return 0; } Loading
drivers/gpu/drm/nouveau/nvkm/subdev/mc/g94.c +3 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,9 @@ static const struct nvkm_mc_func g94_mc = { .init = nv50_mc_init, .intr = nv50_mc_intr, .intr_unarm = nv04_mc_intr_unarm, .intr_rearm = nv04_mc_intr_rearm, .intr_mask = nv04_mc_intr_mask, .msi_rearm = nv40_mc_msi_rearm, }; Loading
drivers/gpu/drm/nouveau/nvkm/subdev/mc/g98.c +3 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,9 @@ static const struct nvkm_mc_func g98_mc = { .init = nv50_mc_init, .intr = g98_mc_intr, .intr_unarm = nv04_mc_intr_unarm, .intr_rearm = nv04_mc_intr_rearm, .intr_mask = nv04_mc_intr_mask, .msi_rearm = nv40_mc_msi_rearm, }; Loading
drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.c +3 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,9 @@ static const struct nvkm_mc_func gf100_mc = { .init = nv50_mc_init, .intr = gf100_mc_intr, .intr_unarm = nv04_mc_intr_unarm, .intr_rearm = nv04_mc_intr_rearm, .intr_mask = nv04_mc_intr_mask, .msi_rearm = gf100_mc_msi_rearm, .unk260 = gf100_mc_unk260, }; Loading