diff --git a/drivers/acpi/arm64/iort.c b/drivers/acpi/arm64/iort.c index 8fb25d43c811e82461760e6915769a5fe3b4c0d6..5cf4bfa0f4b4232118f00a35e88277c6eff44475 100644 --- a/drivers/acpi/arm64/iort.c +++ b/drivers/acpi/arm64/iort.c @@ -1085,12 +1085,23 @@ const struct iommu_ops *iort_iommu_configure(struct device *dev) return NULL; do { + u32 sid; parent = iort_node_map_platform_id(node, &streamid, IORT_IOMMU_TYPE, i++); if (parent) err = iort_iommu_xlate(dev, parent, streamid); + + if (!acpi_dev_prop_read_single(ACPI_COMPANION(dev), + "streamid", DEV_PROP_U32, &sid)) { + err = iommu_fwspec_add_ids(dev, &sid, 1); + if (err) + dev_info(dev, "failed to add ids\n"); + dev->iommu_fwspec->can_stall = true; + dev->iommu_fwspec->num_pasid_bits = 0x10; + } + } while (parent && !err); }