Преглед изворни кода

drm/nouveau/mc: implement support for PTOP interrupt routing

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Ben Skeggs пре 9 година
родитељ
комит
921be10d85
1 измењених фајлова са 11 додато и 2 уклоњено
  1. 11 2
      drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c

+ 11 - 2
drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.c

@@ -60,9 +60,18 @@ nvkm_mc_intr(struct nvkm_mc *mc, bool *handled)
 	struct nvkm_device *device = mc->subdev.device;
 	struct nvkm_subdev *subdev;
 	const struct nvkm_mc_map *map = mc->func->intr;
-	u32 stat, intr;
+	u32 stat, intr = nvkm_mc_intr_mask(mc);
+	u64 subdevs;
+
+	stat = nvkm_top_intr(device->top, intr, &subdevs);
+	while (subdevs) {
+		enum nvkm_devidx subidx = __ffs64(subdevs);
+		subdev = nvkm_device_subdev(device, subidx);
+		if (subdev)
+			nvkm_subdev_intr(subdev);
+		subdevs &= ~BIT_ULL(subidx);
+	}
 
-	stat = intr = nvkm_mc_intr_mask(mc);
 	while (map->stat) {
 		if (intr & map->stat) {
 			subdev = nvkm_device_subdev(device, map->unit);