Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9ddd592a authored by Joerg Roedel's avatar Joerg Roedel
Browse files

iommu/amd: Make sure IOMMU interrupts are re-enabled on resume



Unfortunatly the interrupts for the event log and the
peripheral page-faults are only enabled at boot but not
re-enabled at resume. Fix that.

Cc: stable@vger.kernel.org
Signed-off-by: default avatarJoerg Roedel <joerg.roedel@amd.com>
parent cebd5fa4
Loading
Loading
Loading
Loading
+20 −10
Original line number Diff line number Diff line
@@ -1123,8 +1123,9 @@ static int iommu_setup_msi(struct amd_iommu *iommu)
{
	int r;

	if (pci_enable_msi(iommu->dev))
		return 1;
	r = pci_enable_msi(iommu->dev);
	if (r)
		return r;

	r = request_threaded_irq(iommu->dev->irq,
				 amd_iommu_int_handler,
@@ -1134,27 +1135,36 @@ static int iommu_setup_msi(struct amd_iommu *iommu)

	if (r) {
		pci_disable_msi(iommu->dev);
		return 1;
		return r;
	}

	iommu->int_enabled = true;
	iommu_feature_enable(iommu, CONTROL_EVT_INT_EN);

	if (iommu->ppr_log != NULL)
		iommu_feature_enable(iommu, CONTROL_PPFINT_EN);

	return 0;
}

static int iommu_init_msi(struct amd_iommu *iommu)
{
	int ret;

	if (iommu->int_enabled)
		return 0;
		goto enable_faults;

	if (pci_find_capability(iommu->dev, PCI_CAP_ID_MSI))
		return iommu_setup_msi(iommu);
		ret = iommu_setup_msi(iommu);
	else
		ret = -ENODEV;

	return 1;
	if (ret)
		return ret;

enable_faults:
	iommu_feature_enable(iommu, CONTROL_EVT_INT_EN);

	if (iommu->ppr_log != NULL)
		iommu_feature_enable(iommu, CONTROL_PPFINT_EN);

	return 0;
}

/****************************************************************************