git: 49ee1a7ef0b1 - main - Create a common function to get the SMMU sid
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 24 Apr 2023 11:52:10 UTC
The branch main has been updated by andrew:
URL: https://cgit.FreeBSD.org/src/commit/?id=49ee1a7ef0b164ce70408651621a0195c7c6930f
commit 49ee1a7ef0b164ce70408651621a0195c7c6930f
Author: Andrew Turner <andrew@FreeBSD.org>
AuthorDate: 2023-04-24 11:47:44 +0000
Commit: Andrew Turner <andrew@FreeBSD.org>
CommitDate: 2023-04-24 11:47:44 +0000
Create a common function to get the SMMU sid
Now the PCI drivers have a common interface to read the IOMMU xref
and SID create a common function to read it. This fixes an issue where
we will call into an ACPI specific function when booting with FDT when
both are enabled.
Sponsored by: Arm Ltd
Differential Revision: https://reviews.freebsd.org/D39183
---
sys/arm64/iommu/smmu.c | 41 +++--------------------------------------
1 file changed, 3 insertions(+), 38 deletions(-)
diff --git a/sys/arm64/iommu/smmu.c b/sys/arm64/iommu/smmu.c
index 923b77e2d5b2..9a9d7a4f6c2f 100644
--- a/sys/arm64/iommu/smmu.c
+++ b/sys/arm64/iommu/smmu.c
@@ -1799,34 +1799,8 @@ smmu_set_buswide(device_t dev, struct smmu_domain *domain,
return (0);
}
-#ifdef DEV_ACPI
static int
-smmu_pci_get_sid_acpi(device_t child, u_int *xref0, u_int *sid0)
-{
- uint16_t rid;
- u_int xref;
- int seg;
- int err;
- int sid;
-
- seg = pci_get_domain(child);
- rid = pci_get_rid(child);
-
- err = acpi_iort_map_pci_smmuv3(seg, rid, &xref, &sid);
- if (err == 0) {
- if (sid0)
- *sid0 = sid;
- if (xref0)
- *xref0 = xref;
- }
-
- return (err);
-}
-#endif
-
-#ifdef FDT
-static int
-smmu_pci_get_sid_fdt(device_t child, u_int *xref0, u_int *sid0)
+smmu_pci_get_sid(device_t child, u_int *xref0, u_int *sid0)
{
struct pci_id_ofw_iommu pi;
int err;
@@ -1841,7 +1815,6 @@ smmu_pci_get_sid_fdt(device_t child, u_int *xref0, u_int *sid0)
return (err);
}
-#endif
static struct iommu_ctx *
smmu_ctx_alloc(device_t dev, struct iommu_domain *iodom, device_t child,
@@ -1885,11 +1858,7 @@ smmu_ctx_init(device_t dev, struct iommu_ctx *ioctx)
pci_class = devclass_find("pci");
if (device_get_devclass(device_get_parent(ctx->dev)) == pci_class) {
-#ifdef DEV_ACPI
- err = smmu_pci_get_sid_acpi(ctx->dev, NULL, &sid);
-#else
- err = smmu_pci_get_sid_fdt(ctx->dev, NULL, &sid);
-#endif
+ err = smmu_pci_get_sid(ctx->dev, NULL, &sid);
if (err)
return (err);
@@ -2000,11 +1969,7 @@ smmu_find(device_t dev, device_t child)
sc = device_get_softc(dev);
-#ifdef DEV_ACPI
- err = smmu_pci_get_sid_acpi(child, &xref, NULL);
-#else
- err = smmu_pci_get_sid_fdt(child, &xref, NULL);
-#endif
+ err = smmu_pci_get_sid(child, &xref, NULL);
if (err)
return (ENOENT);