diff options
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_irq_kms.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c index 93da85515cd2..91de37a0fde2 100644 --- a/drivers/gpu/drm/radeon/radeon_irq_kms.c +++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c | |||
@@ -108,6 +108,27 @@ void radeon_driver_irq_uninstall_kms(struct drm_device *dev) | |||
108 | radeon_irq_set(rdev); | 108 | radeon_irq_set(rdev); |
109 | } | 109 | } |
110 | 110 | ||
111 | static bool radeon_msi_ok(struct radeon_device *rdev) | ||
112 | { | ||
113 | /* RV370/RV380 was first asic with MSI support */ | ||
114 | if (rdev->family < CHIP_RV380) | ||
115 | return false; | ||
116 | |||
117 | /* MSIs don't work on AGP */ | ||
118 | if (rdev->flags & RADEON_IS_AGP) | ||
119 | return false; | ||
120 | |||
121 | if (rdev->flags & RADEON_IS_IGP) { | ||
122 | /* APUs work fine with MSIs */ | ||
123 | if (rdev->family >= CHIP_PALM) | ||
124 | return true; | ||
125 | /* lots of IGPs have problems with MSIs */ | ||
126 | return false; | ||
127 | } | ||
128 | |||
129 | return true; | ||
130 | } | ||
131 | |||
111 | int radeon_irq_kms_init(struct radeon_device *rdev) | 132 | int radeon_irq_kms_init(struct radeon_device *rdev) |
112 | { | 133 | { |
113 | int i; | 134 | int i; |
@@ -124,12 +145,8 @@ int radeon_irq_kms_init(struct radeon_device *rdev) | |||
124 | } | 145 | } |
125 | /* enable msi */ | 146 | /* enable msi */ |
126 | rdev->msi_enabled = 0; | 147 | rdev->msi_enabled = 0; |
127 | /* MSIs don't seem to work reliably on all IGP | 148 | |
128 | * chips. Disable MSI on them for now. | 149 | if (radeon_msi_ok(rdev)) { |
129 | */ | ||
130 | if ((rdev->family >= CHIP_RV380) && | ||
131 | ((!(rdev->flags & RADEON_IS_IGP)) || (rdev->family >= CHIP_PALM)) && | ||
132 | (!(rdev->flags & RADEON_IS_AGP))) { | ||
133 | int ret = pci_enable_msi(rdev->pdev); | 150 | int ret = pci_enable_msi(rdev->pdev); |
134 | if (!ret) { | 151 | if (!ret) { |
135 | rdev->msi_enabled = 1; | 152 | rdev->msi_enabled = 1; |