aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2013-10-22 00:14:33 -0400
committerBen Skeggs <bskeggs@redhat.com>2013-11-08 00:39:50 -0500
commit0fef9d8a59abcd699761cb054b6c37a2bea9e31a (patch)
tree982020b12c17492c9e5054866543235dbffc7405
parent9a9d5c64ef8b744a50446a0467aaf49a3292ddff (diff)
drm/nvaa/mc: blacklist msi to off by default
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r--drivers/gpu/drm/nouveau/core/subdev/mc/base.c30
1 files changed, 19 insertions, 11 deletions
diff --git a/drivers/gpu/drm/nouveau/core/subdev/mc/base.c b/drivers/gpu/drm/nouveau/core/subdev/mc/base.c
index f3a416958b0e..fb3837c027da 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/mc/base.c
+++ b/drivers/gpu/drm/nouveau/core/subdev/mc/base.c
@@ -42,7 +42,7 @@ nouveau_mc_intr(int irq, void *arg)
42 if (intr == 0xffffffff) /* likely fallen off the bus */ 42 if (intr == 0xffffffff) /* likely fallen off the bus */
43 intr = 0x00000000; 43 intr = 0x00000000;
44 44
45 if (pmc->use_msi && oclass->msi_rearm) 45 if (pmc->use_msi)
46 oclass->msi_rearm(pmc); 46 oclass->msi_rearm(pmc);
47 47
48 if (intr) { 48 if (intr) {
@@ -111,20 +111,28 @@ nouveau_mc_create_(struct nouveau_object *parent, struct nouveau_object *engine,
111 return ret; 111 return ret;
112 112
113 switch (device->pdev->device & 0x0ff0) { 113 switch (device->pdev->device & 0x0ff0) {
114 case 0x00f0: /* BR02? */ 114 case 0x00f0:
115 case 0x02e0: /* BR02? */ 115 case 0x02e0:
116 pmc->use_msi = false; 116 /* BR02? NFI how these would be handled yet exactly */
117 break; 117 break;
118 default: 118 default:
119 pmc->use_msi = nouveau_boolopt(device->cfgopt, "NvMSI", true); 119 switch (device->chipset) {
120 case 0xaa: break; /* reported broken, nv also disable it */
121 default:
122 pmc->use_msi = true;
123 break;
124 }
125 }
126
127 pmc->use_msi = nouveau_boolopt(device->cfgopt, "NvMSI", pmc->use_msi);
128 if (pmc->use_msi && oclass->msi_rearm) {
129 pmc->use_msi = pci_enable_msi(device->pdev) == 0;
120 if (pmc->use_msi) { 130 if (pmc->use_msi) {
121 pmc->use_msi = pci_enable_msi(device->pdev) == 0; 131 nv_info(pmc, "MSI interrupts enabled\n");
122 if (pmc->use_msi) { 132 oclass->msi_rearm(pmc);
123 nv_info(pmc, "MSI interrupts enabled\n");
124 oclass->msi_rearm(pmc);
125 }
126 } 133 }
127 break; 134 } else {
135 pmc->use_msi = false;
128 } 136 }
129 137
130 ret = request_irq(device->pdev->irq, nouveau_mc_intr, 138 ret = request_irq(device->pdev->irq, nouveau_mc_intr,