|
@@ -108,6 +108,27 @@ void radeon_driver_irq_uninstall_kms(struct drm_device *dev)
|
|
|
radeon_irq_set(rdev);
|
|
|
}
|
|
|
|
|
|
+static bool radeon_msi_ok(struct radeon_device *rdev)
|
|
|
+{
|
|
|
+ /* RV370/RV380 was first asic with MSI support */
|
|
|
+ if (rdev->family < CHIP_RV380)
|
|
|
+ return false;
|
|
|
+
|
|
|
+ /* MSIs don't work on AGP */
|
|
|
+ if (rdev->flags & RADEON_IS_AGP)
|
|
|
+ return false;
|
|
|
+
|
|
|
+ if (rdev->flags & RADEON_IS_IGP) {
|
|
|
+ /* APUs work fine with MSIs */
|
|
|
+ if (rdev->family >= CHIP_PALM)
|
|
|
+ return true;
|
|
|
+ /* lots of IGPs have problems with MSIs */
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+}
|
|
|
+
|
|
|
int radeon_irq_kms_init(struct radeon_device *rdev)
|
|
|
{
|
|
|
int i;
|
|
@@ -124,12 +145,8 @@ int radeon_irq_kms_init(struct radeon_device *rdev)
|
|
|
}
|
|
|
/* enable msi */
|
|
|
rdev->msi_enabled = 0;
|
|
|
- /* MSIs don't seem to work reliably on all IGP
|
|
|
- * chips. Disable MSI on them for now.
|
|
|
- */
|
|
|
- if ((rdev->family >= CHIP_RV380) &&
|
|
|
- ((!(rdev->flags & RADEON_IS_IGP)) || (rdev->family >= CHIP_PALM)) &&
|
|
|
- (!(rdev->flags & RADEON_IS_AGP))) {
|
|
|
+
|
|
|
+ if (radeon_msi_ok(rdev)) {
|
|
|
int ret = pci_enable_msi(rdev->pdev);
|
|
|
if (!ret) {
|
|
|
rdev->msi_enabled = 1;
|