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 */