git: 451f0333b707 - main - sys: Make the iommu xref uintptr_t
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 08 Apr 2025 10:49:05 UTC
The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=451f0333b707642b4ffd88b7527fb7c401a6b3ef commit 451f0333b707642b4ffd88b7527fb7c401a6b3ef Author: Andrew Turner <andrew@FreeBSD.org> AuthorDate: 2025-04-08 10:48:22 +0000 Commit: Andrew Turner <andrew@FreeBSD.org> CommitDate: 2025-04-08 10:48:22 +0000 sys: Make the iommu xref uintptr_t On arm64 we use the iommu base address as an xref. This fails when the address has the lower 32-bits in common with another iommu as they will share an xref. Reviewed by: kib Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D48726 --- sys/arm64/acpica/acpi_iort.c | 4 ++-- sys/arm64/iommu/smmu.c | 4 ++-- sys/dev/acpica/acpivar.h | 7 ++++--- sys/dev/pci/pci_host_generic_acpi.c | 3 ++- sys/dev/pci/pci_host_generic_fdt.c | 2 +- sys/dev/pci/pcivar.h | 2 +- 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/sys/arm64/acpica/acpi_iort.c b/sys/arm64/acpica/acpi_iort.c index a0e24788b775..a180dc1a2a2c 100644 --- a/sys/arm64/acpica/acpi_iort.c +++ b/sys/arm64/acpica/acpi_iort.c @@ -630,7 +630,7 @@ acpi_iort_map_pci_msi(u_int seg, u_int rid, u_int *xref, u_int *devid) } int -acpi_iort_map_pci_smmuv3(u_int seg, u_int rid, u_int *xref, u_int *sid) +acpi_iort_map_pci_smmuv3(u_int seg, u_int rid, uint64_t *xref, u_int *sid) { ACPI_IORT_SMMU_V3 *smmu; struct iort_node *node; @@ -672,7 +672,7 @@ acpi_iort_map_named_msi(const char *devname, u_int rid, u_int *xref, } int -acpi_iort_map_named_smmuv3(const char *devname, u_int rid, u_int *xref, +acpi_iort_map_named_smmuv3(const char *devname, u_int rid, uint64_t *xref, u_int *devid) { ACPI_IORT_SMMU_V3 *smmu; diff --git a/sys/arm64/iommu/smmu.c b/sys/arm64/iommu/smmu.c index a832f6a6ec70..ec8e04ce117b 100644 --- a/sys/arm64/iommu/smmu.c +++ b/sys/arm64/iommu/smmu.c @@ -1781,7 +1781,7 @@ smmu_set_buswide(device_t dev, struct smmu_domain *domain, } static int -smmu_pci_get_sid(device_t child, u_int *xref0, u_int *sid0) +smmu_pci_get_sid(device_t child, uintptr_t *xref0, u_int *sid0) { struct pci_id_ofw_iommu pi; int err; @@ -1945,7 +1945,7 @@ static int smmu_find(device_t dev, device_t child) { struct smmu_softc *sc; - u_int xref; + uintptr_t xref; int err; sc = device_get_softc(dev); diff --git a/sys/dev/acpica/acpivar.h b/sys/dev/acpica/acpivar.h index d35504127c9c..106ec9038820 100644 --- a/sys/dev/acpica/acpivar.h +++ b/sys/dev/acpica/acpivar.h @@ -614,12 +614,13 @@ bus_get_cpus_t acpi_get_cpus; * ARM specific ACPI interfaces, relating to IORT table. */ int acpi_iort_map_pci_msi(u_int seg, u_int rid, u_int *xref, u_int *devid); -int acpi_iort_map_pci_smmuv3(u_int seg, u_int rid, u_int *xref, u_int *devid); +int acpi_iort_map_pci_smmuv3(u_int seg, u_int rid, uint64_t *xref, + u_int *devid); int acpi_iort_its_lookup(u_int its_id, u_int *xref, int *pxm); int acpi_iort_map_named_msi(const char *devname, u_int rid, u_int *xref, u_int *devid); -int acpi_iort_map_named_smmuv3(const char *devname, u_int rid, u_int *xref, - u_int *devid); +int acpi_iort_map_named_smmuv3(const char *devname, u_int rid, + uint64_t *xref, u_int *devid); #endif #endif /* _KERNEL */ #endif /* !_ACPIVAR_H_ */ diff --git a/sys/dev/pci/pci_host_generic_acpi.c b/sys/dev/pci/pci_host_generic_acpi.c index f12632e7205b..324ead5e8b87 100644 --- a/sys/dev/pci/pci_host_generic_acpi.c +++ b/sys/dev/pci/pci_host_generic_acpi.c @@ -411,7 +411,8 @@ generic_pcie_get_iommu(device_t pci, device_t child, uintptr_t *id) { struct generic_pcie_acpi_softc *sc; struct pci_id_ofw_iommu *iommu; - u_int iommu_sid, iommu_xref; + uint64_t iommu_xref; + u_int iommu_sid; uintptr_t rid; int err; diff --git a/sys/dev/pci/pci_host_generic_fdt.c b/sys/dev/pci/pci_host_generic_fdt.c index 73c6201dc14b..ffe63b82a234 100644 --- a/sys/dev/pci/pci_host_generic_fdt.c +++ b/sys/dev/pci/pci_host_generic_fdt.c @@ -367,7 +367,7 @@ generic_pcie_get_iommu(device_t pci, device_t child, uintptr_t *id) { struct pci_id_ofw_iommu *iommu; uint32_t iommu_rid; - uint32_t iommu_xref; + phandle_t iommu_xref; uint16_t pci_rid; phandle_t node; int err; diff --git a/sys/dev/pci/pcivar.h b/sys/dev/pci/pcivar.h index 14cb577dbedf..d1b7d28eae91 100644 --- a/sys/dev/pci/pcivar.h +++ b/sys/dev/pci/pcivar.h @@ -122,8 +122,8 @@ struct pcicfg_msix { }; struct pci_id_ofw_iommu { + uintptr_t xref; uint32_t id; - uint32_t xref; }; /* Interesting values for HyperTransport */