aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2011-11-01 14:20:30 -0400
committerDave Airlie <airlied@redhat.com>2011-11-03 13:53:14 -0400
commita18cee15ed4c8b6a35f96b7b26a46bac32e04bd9 (patch)
tree6f8a83f0b43505b4236ca51ae4fb5aa832a9d644 /drivers
parent01e718ec194e30b3e8eb3858c742c13649757efc (diff)
drm/radeon/kms: add MSI module parameter
Allow the user to override whether MSIs are enabled or not on supported ASICs. MSIs are disabled by default on IGP chips as they tend not to work. However certain IGP chips only seem to work with MSIs enabled. I suspect this is a chipset or bios issue, but I'm not sure what the proper fix is. This will at least make diagnosing and working around the problem much easier. See: https://bugs.freedesktop.org/show_bug.cgi?id=37679 Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Cc: stable@kernel.org Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/radeon/radeon.h1
-rw-r--r--drivers/gpu/drm/radeon/radeon_drv.c4
-rw-r--r--drivers/gpu/drm/radeon/radeon_irq_kms.c6
3 files changed, 11 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 83b76db7bcfd..e94c6f18a157 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -93,6 +93,7 @@ extern int radeon_audio;
93extern int radeon_disp_priority; 93extern int radeon_disp_priority;
94extern int radeon_hw_i2c; 94extern int radeon_hw_i2c;
95extern int radeon_pcie_gen2; 95extern int radeon_pcie_gen2;
96extern int radeon_msi;
96 97
97/* 98/*
98 * Copy from radeon_drv.h so we don't have to include both and have conflicting 99 * Copy from radeon_drv.h so we don't have to include both and have conflicting
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index e71d2ed7fa11..c12b0775d688 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -118,6 +118,7 @@ int radeon_audio = 0;
118int radeon_disp_priority = 0; 118int radeon_disp_priority = 0;
119int radeon_hw_i2c = 0; 119int radeon_hw_i2c = 0;
120int radeon_pcie_gen2 = 0; 120int radeon_pcie_gen2 = 0;
121int radeon_msi = -1;
121 122
122MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers"); 123MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers");
123module_param_named(no_wb, radeon_no_wb, int, 0444); 124module_param_named(no_wb, radeon_no_wb, int, 0444);
@@ -164,6 +165,9 @@ module_param_named(hw_i2c, radeon_hw_i2c, int, 0444);
164MODULE_PARM_DESC(pcie_gen2, "PCIE Gen2 mode (1 = enable)"); 165MODULE_PARM_DESC(pcie_gen2, "PCIE Gen2 mode (1 = enable)");
165module_param_named(pcie_gen2, radeon_pcie_gen2, int, 0444); 166module_param_named(pcie_gen2, radeon_pcie_gen2, int, 0444);
166 167
168MODULE_PARM_DESC(msi, "MSI support (1 = enable, 0 = disable, -1 = auto)");
169module_param_named(msi, radeon_msi, int, 0444);
170
167static int radeon_suspend(struct drm_device *dev, pm_message_t state) 171static int radeon_suspend(struct drm_device *dev, pm_message_t state)
168{ 172{
169 drm_radeon_private_t *dev_priv = dev->dev_private; 173 drm_radeon_private_t *dev_priv = dev->dev_private;
diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c
index 914d9ee8fd35..8f86aeb26693 100644
--- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
+++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
@@ -118,6 +118,12 @@ static bool radeon_msi_ok(struct radeon_device *rdev)
118 if (rdev->flags & RADEON_IS_AGP) 118 if (rdev->flags & RADEON_IS_AGP)
119 return false; 119 return false;
120 120
121 /* force MSI on */
122 if (radeon_msi == 1)
123 return true;
124 else if (radeon_msi == 0)
125 return false;
126
121 /* Quirks */ 127 /* Quirks */
122 /* HP RS690 only seems to work with MSIs. */ 128 /* HP RS690 only seems to work with MSIs. */
123 if ((rdev->pdev->device == 0x791f) && 129 if ((rdev->pdev->device == 0x791f) &&