| From a18cee15ed4c8b6a35f96b7b26a46bac32e04bd9 Mon Sep 17 00:00:00 2001 |
| From: Alex Deucher <alexander.deucher@amd.com> |
| Date: Tue, 1 Nov 2011 14:20:30 -0400 |
| Subject: drm/radeon/kms: add MSI module parameter |
| |
| From: Alex Deucher <alexander.deucher@amd.com> |
| |
| commit a18cee15ed4c8b6a35f96b7b26a46bac32e04bd9 upstream. |
| |
| 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> |
| Signed-off-by: Dave Airlie <airlied@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/gpu/drm/radeon/radeon.h | 1 + |
| drivers/gpu/drm/radeon/radeon_drv.c | 4 ++++ |
| drivers/gpu/drm/radeon/radeon_irq_kms.c | 6 ++++++ |
| 3 files changed, 11 insertions(+) |
| |
| --- a/drivers/gpu/drm/radeon/radeon.h |
| +++ b/drivers/gpu/drm/radeon/radeon.h |
| @@ -93,6 +93,7 @@ extern int radeon_audio; |
| extern int radeon_disp_priority; |
| extern int radeon_hw_i2c; |
| extern int radeon_pcie_gen2; |
| +extern int radeon_msi; |
| |
| /* |
| * Copy from radeon_drv.h so we don't have to include both and have conflicting |
| --- a/drivers/gpu/drm/radeon/radeon_drv.c |
| +++ b/drivers/gpu/drm/radeon/radeon_drv.c |
| @@ -118,6 +118,7 @@ int radeon_audio = 0; |
| int radeon_disp_priority = 0; |
| int radeon_hw_i2c = 0; |
| int radeon_pcie_gen2 = 0; |
| +int radeon_msi = -1; |
| |
| MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers"); |
| module_param_named(no_wb, radeon_no_wb, int, 0444); |
| @@ -164,6 +165,9 @@ module_param_named(hw_i2c, radeon_hw_i2c |
| MODULE_PARM_DESC(pcie_gen2, "PCIE Gen2 mode (1 = enable)"); |
| module_param_named(pcie_gen2, radeon_pcie_gen2, int, 0444); |
| |
| +MODULE_PARM_DESC(msi, "MSI support (1 = enable, 0 = disable, -1 = auto)"); |
| +module_param_named(msi, radeon_msi, int, 0444); |
| + |
| static int radeon_suspend(struct drm_device *dev, pm_message_t state) |
| { |
| drm_radeon_private_t *dev_priv = dev->dev_private; |
| --- 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_ |
| if (rdev->flags & RADEON_IS_AGP) |
| return false; |
| |
| + /* force MSI on */ |
| + if (radeon_msi == 1) |
| + return true; |
| + else if (radeon_msi == 0) |
| + return false; |
| + |
| /* Quirks */ |
| /* HP RS690 only seems to work with MSIs. */ |
| if ((rdev->pdev->device == 0x791f) && |