svn commit: r363274 - in head/sys: arm64/acpica dev/acpica
Ruslan Bukin
br at FreeBSD.org
Fri Jul 17 14:51:52 UTC 2020
Author: br
Date: Fri Jul 17 14:51:51 2020
New Revision: 363274
URL: https://svnweb.freebsd.org/changeset/base/363274
Log:
Add acpi_iort_map_pci_smmuv3().
This new function allows us to find the SMMU instance assigned
for a particular PCI RID.
Reviewed by: andrew
Sponsored by: DARPA, AFRL
Differential Revision: https://reviews.freebsd.org/D25687
Modified:
head/sys/arm64/acpica/acpi_iort.c
head/sys/dev/acpica/acpivar.h
Modified: head/sys/arm64/acpica/acpi_iort.c
==============================================================================
--- head/sys/arm64/acpica/acpi_iort.c Fri Jul 17 14:45:16 2020 (r363273)
+++ head/sys/arm64/acpica/acpi_iort.c Fri Jul 17 14:51:51 2020 (r363274)
@@ -160,7 +160,7 @@ iort_entry_lookup(struct iort_node *node, u_int id, u_
if (i == node->nentries)
return (NULL);
if ((entry->flags & ACPI_IORT_ID_SINGLE_MAPPING) == 0)
- *outid = entry->outbase + (id - entry->base);
+ *outid = entry->outbase + (id - entry->base);
else
*outid = entry->outbase;
return (entry->out_node);
@@ -562,5 +562,24 @@ acpi_iort_map_pci_msi(u_int seg, u_int rid, u_int *xre
/* return first node, we don't handle more than that now. */
*xref = node->entries.its[0].xref;
+ return (0);
+}
+
+int
+acpi_iort_map_pci_smmuv3(u_int seg, u_int rid, u_int *xref, u_int *sid)
+{
+ ACPI_IORT_SMMU_V3 *smmu;
+ struct iort_node *node;
+
+ node = iort_pci_rc_map(seg, rid, ACPI_IORT_NODE_SMMU_V3, sid);
+ if (node == NULL)
+ return (ENOENT);
+
+ /* This should be an SMMU node. */
+ KASSERT(node->type == ACPI_IORT_NODE_SMMU_V3, ("bad node"));
+
+ smmu = (ACPI_IORT_SMMU_V3 *)&node->data.smmu_v3;
+ *xref = smmu->BaseAddress;
+
return (0);
}
Modified: head/sys/dev/acpica/acpivar.h
==============================================================================
--- head/sys/dev/acpica/acpivar.h Fri Jul 17 14:45:16 2020 (r363273)
+++ head/sys/dev/acpica/acpivar.h Fri Jul 17 14:51:51 2020 (r363274)
@@ -556,6 +556,7 @@ int acpi_get_domain(device_t dev, device_t child, int
* 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_its_lookup(u_int its_id, u_int *xref, int *pxm);
#endif
#endif /* _KERNEL */
More information about the svn-src-all
mailing list