* [PATCH v3] iommu/amd: Allow matching ACPI HID devices without matching UIDs
@ 2025-05-12 17:30 Mario Limonciello
2025-05-14 9:05 ` Vasant Hegde
2025-05-16 6:48 ` Joerg Roedel
0 siblings, 2 replies; 3+ messages in thread
From: Mario Limonciello @ 2025-05-12 17:30 UTC (permalink / raw)
To: mario.limonciello, joro, will
Cc: Suravee Suthikulpanit, Vasant Hegde, Paul Blinzer, iommu
From: Mario Limonciello <mario.limonciello@amd.com>
A BIOS upgrade has changed the IVRS DTE UID for a device that no
longer matches the UID in the SSDT. In this case there is only
one ACPI device on the system with that _HID but the _UID mismatch.
IVRS:
```
Subtable Type : F0 [Device Entry: ACPI HID Named Device]
Device ID : 0060
Data Setting (decoded below) : 40
INITPass : 0
EIntPass : 0
NMIPass : 0
Reserved : 0
System MGMT : 0
LINT0 Pass : 1
LINT1 Pass : 0
ACPI HID : "MSFT0201"
ACPI CID : 0000000000000000
UID Format : 02
UID Length : 09
UID : "\_SB.MHSP"
```
SSDT:
```
Device (MHSP)
{
Name (_ADR, Zero) // _ADR: Address
Name (_HID, "MSFT0201") // _HID: Hardware ID
Name (_UID, One) // _UID: Unique ID
```
To handle this case; while enumerating ACPI devices in
get_acpihid_device_id() count the number of matching ACPI devices with
a matching _HID. If there is exactly one _HID match then accept it even
if the UID doesn't match. Other operating systems allow this, but the
current IVRS spec leaves some ambiguity whether to allow or disallow it.
This should be clarified in future revisions of the spec. Output
'Firmware Bug' for this case to encourage it to be solved in the BIOS.
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
v3:
* Count HID matches as well (cover # HID w/o UID > 2)
* Drop level of indentation with early bail on error
* Show number of matches in error message
* Adjust commit message
Cc: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
Cc: Vasant Hegde <Vasant.Hegde@amd.com>
Cc: Paul Blinzer <Paul.Blinzer@amd.com>
---
drivers/iommu/amd/iommu.c | 33 ++++++++++++++++++++++++++++-----
1 file changed, 28 insertions(+), 5 deletions(-)
diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c
index b19e8c0f48fa2..0c909d0d59bfd 100644
--- a/drivers/iommu/amd/iommu.c
+++ b/drivers/iommu/amd/iommu.c
@@ -109,7 +109,9 @@ static inline int get_acpihid_device_id(struct device *dev,
struct acpihid_map_entry **entry)
{
struct acpi_device *adev = ACPI_COMPANION(dev);
- struct acpihid_map_entry *p;
+ struct acpihid_map_entry *p, *p1 = NULL;
+ int hid_count = 0;
+ bool fw_bug;
if (!adev)
return -ENODEV;
@@ -117,12 +119,33 @@ static inline int get_acpihid_device_id(struct device *dev,
list_for_each_entry(p, &acpihid_map, list) {
if (acpi_dev_hid_uid_match(adev, p->hid,
p->uid[0] ? p->uid : NULL)) {
- if (entry)
- *entry = p;
- return p->devid;
+ p1 = p;
+ fw_bug = false;
+ hid_count = 1;
+ break;
+ }
+
+ /*
+ * Count HID matches w/o UID, raise FW_BUG but allow exactly one match
+ */
+ if (acpi_dev_hid_match(adev, p->hid)) {
+ p1 = p;
+ hid_count++;
+ fw_bug = true;
}
}
- return -EINVAL;
+
+ if (!p1)
+ return -EINVAL;
+ if (fw_bug)
+ dev_err_once(dev, FW_BUG "No ACPI device matched UID, but %d device%s matched HID.\n",
+ hid_count, hid_count > 1 ? "s" : "");
+ if (hid_count > 1)
+ return -EINVAL;
+ if (entry)
+ *entry = p1;
+
+ return p1->devid;
}
static inline int get_device_sbdf_id(struct device *dev)
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH v3] iommu/amd: Allow matching ACPI HID devices without matching UIDs
2025-05-12 17:30 [PATCH v3] iommu/amd: Allow matching ACPI HID devices without matching UIDs Mario Limonciello
@ 2025-05-14 9:05 ` Vasant Hegde
2025-05-16 6:48 ` Joerg Roedel
1 sibling, 0 replies; 3+ messages in thread
From: Vasant Hegde @ 2025-05-14 9:05 UTC (permalink / raw)
To: Mario Limonciello, mario.limonciello, joro, will
Cc: Suravee Suthikulpanit, Paul Blinzer, iommu
On 5/12/2025 11:00 PM, Mario Limonciello wrote:
> From: Mario Limonciello <mario.limonciello@amd.com>
>
> A BIOS upgrade has changed the IVRS DTE UID for a device that no
> longer matches the UID in the SSDT. In this case there is only
> one ACPI device on the system with that _HID but the _UID mismatch.
>
> IVRS:
> ```
> Subtable Type : F0 [Device Entry: ACPI HID Named Device]
> Device ID : 0060
> Data Setting (decoded below) : 40
> INITPass : 0
> EIntPass : 0
> NMIPass : 0
> Reserved : 0
> System MGMT : 0
> LINT0 Pass : 1
> LINT1 Pass : 0
> ACPI HID : "MSFT0201"
> ACPI CID : 0000000000000000
> UID Format : 02
> UID Length : 09
> UID : "\_SB.MHSP"
> ```
>
> SSDT:
> ```
> Device (MHSP)
> {
> Name (_ADR, Zero) // _ADR: Address
> Name (_HID, "MSFT0201") // _HID: Hardware ID
> Name (_UID, One) // _UID: Unique ID
> ```
>
> To handle this case; while enumerating ACPI devices in
> get_acpihid_device_id() count the number of matching ACPI devices with
> a matching _HID. If there is exactly one _HID match then accept it even
> if the UID doesn't match. Other operating systems allow this, but the
> current IVRS spec leaves some ambiguity whether to allow or disallow it.
> This should be clarified in future revisions of the spec. Output
> 'Firmware Bug' for this case to encourage it to be solved in the BIOS.
>
> Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
> ---
> v3:
> * Count HID matches as well (cover # HID w/o UID > 2)
> * Drop level of indentation with early bail on error
> * Show number of matches in error message
> * Adjust commit message
> Cc: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
> Cc: Vasant Hegde <Vasant.Hegde@amd.com>
> Cc: Paul Blinzer <Paul.Blinzer@amd.com>
Reviewed-by: Vasant Hegde <vasant.hegde@amd.com>
-Vasant
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH v3] iommu/amd: Allow matching ACPI HID devices without matching UIDs
2025-05-12 17:30 [PATCH v3] iommu/amd: Allow matching ACPI HID devices without matching UIDs Mario Limonciello
2025-05-14 9:05 ` Vasant Hegde
@ 2025-05-16 6:48 ` Joerg Roedel
1 sibling, 0 replies; 3+ messages in thread
From: Joerg Roedel @ 2025-05-16 6:48 UTC (permalink / raw)
To: Mario Limonciello
Cc: mario.limonciello, will, Suravee Suthikulpanit, Vasant Hegde,
Paul Blinzer, iommu
On Mon, May 12, 2025 at 12:30:32PM -0500, Mario Limonciello wrote:
> drivers/iommu/amd/iommu.c | 33 ++++++++++++++++++++++++++++-----
> 1 file changed, 28 insertions(+), 5 deletions(-)
Applied, thanks.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-05-16 6:48 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-12 17:30 [PATCH v3] iommu/amd: Allow matching ACPI HID devices without matching UIDs Mario Limonciello
2025-05-14 9:05 ` Vasant Hegde
2025-05-16 6:48 ` Joerg Roedel
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.