| From a52a2f3d5001ef8a3c37145acc46a7ac97ec4434 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 9 Nov 2022 07:26:52 -0700 |
| Subject: PCI: vmd: Disable MSI remapping after suspend |
| |
| From: Nirmal Patel <nirmal.patel@linux.intel.com> |
| |
| [ Upstream commit d899aa668498c07ff217b666ae9712990306e682 ] |
| |
| MSI remapping is disabled by VMD driver for Intel's Icelake and |
| newer systems in order to improve performance by setting |
| VMCONFIG_MSI_REMAP. By design VMCONFIG_MSI_REMAP register is cleared |
| by firmware during boot. The same register gets cleared when system |
| is put in S3 power state. VMD driver needs to set this register again |
| in order to avoid interrupt issues with devices behind VMD if MSI |
| remapping was disabled before. |
| |
| Link: https://lore.kernel.org/r/20221109142652.450998-1-nirmal.patel@linux.intel.com |
| Fixes: ee81ee84f873 ("PCI: vmd: Disable MSI-X remapping when possible") |
| Signed-off-by: Nirmal Patel <nirmal.patel@linux.intel.com> |
| Signed-off-by: Lorenzo Pieralisi <lpieralisi@kernel.org> |
| Reviewed-by: Francisco Munoz <francisco.munoz.ruiz@linux.intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/pci/controller/vmd.c | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| diff --git a/drivers/pci/controller/vmd.c b/drivers/pci/controller/vmd.c |
| index e06e9f4fc50f..98e0746e681c 100644 |
| --- a/drivers/pci/controller/vmd.c |
| +++ b/drivers/pci/controller/vmd.c |
| @@ -980,6 +980,11 @@ static int vmd_resume(struct device *dev) |
| struct vmd_dev *vmd = pci_get_drvdata(pdev); |
| int err, i; |
| |
| + if (vmd->irq_domain) |
| + vmd_set_msi_remapping(vmd, true); |
| + else |
| + vmd_set_msi_remapping(vmd, false); |
| + |
| for (i = 0; i < vmd->msix_count; i++) { |
| err = devm_request_irq(dev, vmd->irqs[i].virq, |
| vmd_irq, IRQF_NO_THREAD, |
| -- |
| 2.35.1 |
| |