Browse Source

drm/nvaa/mc: blacklist msi to off by default

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Ben Skeggs 12 years ago
parent
commit
0fef9d8a59
1 changed files with 19 additions and 11 deletions
  1. 19 11
      drivers/gpu/drm/nouveau/core/subdev/mc/base.c

+ 19 - 11
drivers/gpu/drm/nouveau/core/subdev/mc/base.c

@@ -42,7 +42,7 @@ nouveau_mc_intr(int irq, void *arg)
 	if (intr == 0xffffffff) /* likely fallen off the bus */
 	if (intr == 0xffffffff) /* likely fallen off the bus */
 		intr = 0x00000000;
 		intr = 0x00000000;
 
 
-	if (pmc->use_msi && oclass->msi_rearm)
+	if (pmc->use_msi)
 		oclass->msi_rearm(pmc);
 		oclass->msi_rearm(pmc);
 
 
 	if (intr) {
 	if (intr) {
@@ -111,20 +111,28 @@ nouveau_mc_create_(struct nouveau_object *parent, struct nouveau_object *engine,
 		return ret;
 		return ret;
 
 
 	switch (device->pdev->device & 0x0ff0) {
 	switch (device->pdev->device & 0x0ff0) {
-	case 0x00f0: /* BR02? */
-	case 0x02e0: /* BR02? */
-		pmc->use_msi = false;
+	case 0x00f0:
+	case 0x02e0:
+		/* BR02? NFI how these would be handled yet exactly */
 		break;
 		break;
 	default:
 	default:
-		pmc->use_msi = nouveau_boolopt(device->cfgopt, "NvMSI", true);
+		switch (device->chipset) {
+		case 0xaa: break; /* reported broken, nv also disable it */
+		default:
+			pmc->use_msi = true;
+			break;
+		}
+	}
+
+	pmc->use_msi = nouveau_boolopt(device->cfgopt, "NvMSI", pmc->use_msi);
+	if (pmc->use_msi && oclass->msi_rearm) {
+		pmc->use_msi = pci_enable_msi(device->pdev) == 0;
 		if (pmc->use_msi) {
 		if (pmc->use_msi) {
-			pmc->use_msi = pci_enable_msi(device->pdev) == 0;
-			if (pmc->use_msi) {
-				nv_info(pmc, "MSI interrupts enabled\n");
-				oclass->msi_rearm(pmc);
-			}
+			nv_info(pmc, "MSI interrupts enabled\n");
+			oclass->msi_rearm(pmc);
 		}
 		}
-		break;
+	} else {
+		pmc->use_msi = false;
 	}
 	}
 
 
 	ret = request_irq(device->pdev->irq, nouveau_mc_intr,
 	ret = request_irq(device->pdev->irq, nouveau_mc_intr,