aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iommu/amd_iommu_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/iommu/amd_iommu_init.c')
-rw-r--r--drivers/iommu/amd_iommu_init.c30
1 files changed, 20 insertions, 10 deletions
diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
index 526652a7385..182b80ba79c 100644
--- a/drivers/iommu/amd_iommu_init.c
+++ b/drivers/iommu/amd_iommu_init.c
@@ -1123,8 +1123,9 @@ static int iommu_setup_msi(struct amd_iommu *iommu)
1123{ 1123{
1124 int r; 1124 int r;
1125 1125
1126 if (pci_enable_msi(iommu->dev)) 1126 r = pci_enable_msi(iommu->dev);
1127 return 1; 1127 if (r)
1128 return r;
1128 1129
1129 r = request_threaded_irq(iommu->dev->irq, 1130 r = request_threaded_irq(iommu->dev->irq,
1130 amd_iommu_int_handler, 1131 amd_iommu_int_handler,
@@ -1134,27 +1135,36 @@ static int iommu_setup_msi(struct amd_iommu *iommu)
1134 1135
1135 if (r) { 1136 if (r) {
1136 pci_disable_msi(iommu->dev); 1137 pci_disable_msi(iommu->dev);
1137 return 1; 1138 return r;
1138 } 1139 }
1139 1140
1140 iommu->int_enabled = true; 1141 iommu->int_enabled = true;
1141 iommu_feature_enable(iommu, CONTROL_EVT_INT_EN);
1142
1143 if (iommu->ppr_log != NULL)
1144 iommu_feature_enable(iommu, CONTROL_PPFINT_EN);
1145 1142
1146 return 0; 1143 return 0;
1147} 1144}
1148 1145
1149static int iommu_init_msi(struct amd_iommu *iommu) 1146static int iommu_init_msi(struct amd_iommu *iommu)
1150{ 1147{
1148 int ret;
1149
1151 if (iommu->int_enabled) 1150 if (iommu->int_enabled)
1152 return 0; 1151 goto enable_faults;
1153 1152
1154 if (pci_find_capability(iommu->dev, PCI_CAP_ID_MSI)) 1153 if (pci_find_capability(iommu->dev, PCI_CAP_ID_MSI))
1155 return iommu_setup_msi(iommu); 1154 ret = iommu_setup_msi(iommu);
1155 else
1156 ret = -ENODEV;
1156 1157
1157 return 1; 1158 if (ret)
1159 return ret;
1160
1161enable_faults:
1162 iommu_feature_enable(iommu, CONTROL_EVT_INT_EN);
1163
1164 if (iommu->ppr_log != NULL)
1165 iommu_feature_enable(iommu, CONTROL_PPFINT_EN);
1166
1167 return 0;
1158} 1168}
1159 1169
1160/**************************************************************************** 1170/****************************************************************************