Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Jul 2020 14:51:51 +0000 (UTC)
From:      Ruslan Bukin <br@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r363274 - in head/sys: arm64/acpica dev/acpica
Message-ID:  <202007171451.06HEppHc059792@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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 */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202007171451.06HEppHc059792>