From: Lu Baolu <baolu.lu@linux.intel.com>
To: Joerg Roedel <joro@8bytes.org>, Will Deacon <will@kernel.org>,
Robin Murphy <robin.murphy@arm.com>,
Kevin Tian <kevin.tian@intel.com>
Cc: jani.saarinen@intel.com, iommu@lists.linux.dev,
linux-kernel@vger.kernel.org, Lu Baolu <baolu.lu@linux.intel.com>,
stable@vger.kernel.org
Subject: [PATCH 1/1] iommu/vt-d: Prevent boot failure with devices requiring ATS
Date: Wed, 4 Sep 2024 14:07:05 +0800 [thread overview]
Message-ID: <20240904060705.90452-1-baolu.lu@linux.intel.com> (raw)
SOC-integrated devices on some platforms require their PCI ATS enabled
for operation when the IOMMU is in scalable mode. Those devices are
reported via ACPI/SATC table with the ATC_REQUIRED bit set in the Flags
field.
The PCI subsystem offers the 'pci=noats' kernel command to disable PCI
ATS on all devices. Using 'pci=noat' with devices that require PCI ATS
can cause a conflict, leading to boot failure, especially if the device
is a graphics device.
To prevent this issue, check PCI ATS support before enumerating the IOMMU
devices. If any device requires PCI ATS, but PCI ATS is disabled by
'pci=noats', switch the IOMMU to operate in legacy mode to ensure
successful booting.
Fixes: 97f2f2c5317f ("iommu/vt-d: Enable ATS for the devices in SATC table")
Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12036
Cc: stable@vger.kernel.org
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
---
drivers/iommu/intel/iommu.c | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 4aa070cf56e7..8f275e046e91 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -3127,10 +3127,26 @@ int dmar_iommu_notify_scope_dev(struct dmar_pci_notify_info *info)
(void *)satc + satc->header.length,
satc->segment, satcu->devices,
satcu->devices_cnt);
- if (ret > 0)
- break;
- else if (ret < 0)
+ if (ret < 0)
return ret;
+
+ if (ret > 0) {
+ /*
+ * The device requires PCI/ATS when the IOMMU
+ * works in the scalable mode. If PCI/ATS is
+ * disabled using the pci=noats kernel parameter,
+ * the IOMMU will default to legacy mode. Users
+ * are informed of this change.
+ */
+ if (intel_iommu_sm && satcu->atc_required &&
+ !pci_ats_supported(info->dev)) {
+ pci_warn(info->dev,
+ "PCI/ATS not supported, system working in IOMMU legacy mode\n");
+ intel_iommu_sm = 0;
+ }
+
+ break;
+ }
} else if (info->event == BUS_NOTIFY_REMOVED_DEVICE) {
if (dmar_remove_dev_scope(info, satc->segment,
satcu->devices, satcu->devices_cnt))
--
2.34.1
next reply other threads:[~2024-09-04 6:11 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-04 6:07 Lu Baolu [this message]
2024-09-04 6:49 ` [PATCH 1/1] iommu/vt-d: Prevent boot failure with devices requiring ATS Tian, Kevin
2024-09-04 7:49 ` Baolu Lu
2024-09-04 8:17 ` Tian, Kevin
2024-09-05 2:49 ` Baolu Lu
2024-09-05 4:24 ` Ethan Zhao
2024-09-04 18:00 ` Mark Pearson
2024-09-05 3:45 ` Baolu Lu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240904060705.90452-1-baolu.lu@linux.intel.com \
--to=baolu.lu@linux.intel.com \
--cc=iommu@lists.linux.dev \
--cc=jani.saarinen@intel.com \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=robin.murphy@arm.com \
--cc=stable@vger.kernel.org \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox