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 */
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to