Commit 3dfee47b authored by Kai-Heng Feng's avatar Kai-Heng Feng Committed by Joerg Roedel
Browse files

iommu/amd: Disable IOMMU on Stoney Ridge systems

Serious screen flickering when Stoney Ridge outputs to a 4K monitor.

Use identity-mapping and PCI ATS doesn't help this issue.

According to Alex Deucher, IOMMU isn't enabled on Windows, so let's do
the same here to avoid screen flickering on 4K monitor.

Cc: Alex Deucher <alexander.deucher@amd.com>
Bug: https://gitlab.freedesktop.org/drm/amd/issues/961


Signed-off-by: default avatarKai-Heng Feng <kai.heng.feng@canonical.com>
Acked-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent 1ddb32da
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -2523,6 +2523,7 @@ static int __init early_amd_iommu_init(void)
	struct acpi_table_header *ivrs_base;
	acpi_status status;
	int i, remap_cache_sz, ret = 0;
	u32 pci_id;

	if (!amd_iommu_detected)
		return -ENODEV;
@@ -2610,6 +2611,16 @@ static int __init early_amd_iommu_init(void)
	if (ret)
		goto out;

	/* Disable IOMMU if there's Stoney Ridge graphics */
	for (i = 0; i < 32; i++) {
		pci_id = read_pci_config(0, i, 0, 0);
		if ((pci_id & 0xffff) == 0x1002 && (pci_id >> 16) == 0x98e4) {
			pr_info("Disable IOMMU on Stoney Ridge\n");
			amd_iommu_disabled = true;
			break;
		}
	}

	/* Disable any previously enabled IOMMUs */
	if (!is_kdump_kernel() || amd_iommu_disabled)
		disable_iommus();
@@ -2718,7 +2729,7 @@ static int __init state_next(void)
		ret = early_amd_iommu_init();
		init_state = ret ? IOMMU_INIT_ERROR : IOMMU_ACPI_FINISHED;
		if (init_state == IOMMU_ACPI_FINISHED && amd_iommu_disabled) {
			pr_info("AMD IOMMU disabled on kernel command-line\n");
			pr_info("AMD IOMMU disabled\n");
			init_state = IOMMU_CMDLINE_DISABLED;
			ret = -EINVAL;
		}