From nobody Mon May 09 19:14:17 2022
X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id D14F81ABDD97;
Mon, 9 May 2022 19:14:17 +0000 (UTC)
(envelope-from git@FreeBSD.org)
Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256
client-signature RSA-PSS (4096 bits) client-digest SHA256)
(Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK))
by mx1.freebsd.org (Postfix) with ESMTPS id 4KxrSn5X0Jz3mn2;
Mon, 9 May 2022 19:14:17 +0000 (UTC)
(envelope-from git@FreeBSD.org)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim;
t=1652123657;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:mime-version:mime-version:content-type:content-type:
content-transfer-encoding:content-transfer-encoding;
bh=b2KA0/XBf/o3jKrVBeV3M+L617l3qfxgHox1RVuxxzM=;
b=GXb2LNZ+QFnUo9poZpCSxpkWD7KFSsKHr2dt9kjxTENqQGA2xoF4M/3RF57UChyvPxH4tY
zjTpUWcTV1wMmEaooJ57G1Nvm20Yx8LbT0n/7e+i/cGYH6AeObCLQO5J9NcK8JMDmJ5vSy
8+5lOy6zoI9qMzZyRoX0dv3pUqZ97qSw2rLa7z7E49/H4S1wSmPUEYEoeu++OUDh1qtjz2
y9q+5C1kZEK6uSHIzo2ZeAl66S+9UfUgpqy3jx885+kk6eUiucAD3URYl14LzbYVM5FsTD
RwkZ2pE1iS0ju/PAHuUNITXx1dBQuHEoRdDemGCNft+m6RWG+dy5R/Q4sRdlvg==
Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256)
(Client did not present a certificate)
by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9DC4E16C2A;
Mon, 9 May 2022 19:14:17 +0000 (UTC)
(envelope-from git@FreeBSD.org)
Received: from gitrepo.freebsd.org ([127.0.1.44])
by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 249JEHMF071662;
Mon, 9 May 2022 19:14:17 GMT
(envelope-from git@gitrepo.freebsd.org)
Received: (from git@localhost)
by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 249JEHaJ071661;
Mon, 9 May 2022 19:14:17 GMT
(envelope-from git)
Date: Mon, 9 May 2022 19:14:17 GMT
Message-Id: <202205091914.249JEHaJ071661@gitrepo.freebsd.org>
To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org,
dev-commits-src-main@FreeBSD.org
From: Ruslan Bukin
Subject: git: b7fca06bbf3f - main - Split-out SID-getting code to a separate functions. Also ensure we are dealing with PCI-class devices.
List-Id: Commit messages for all branches of the src repository
List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all
List-Help:
List-Post:
List-Subscribe:
List-Unsubscribe:
Sender: owner-dev-commits-src-all@freebsd.org
X-BeenThere: dev-commits-src-all@freebsd.org
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Git-Committer: br
X-Git-Repository: src
X-Git-Refname: refs/heads/main
X-Git-Reftype: branch
X-Git-Commit: b7fca06bbf3f24313cb513842ad0078df43d211a
Auto-Submitted: auto-generated
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org;
s=dkim; t=1652123657;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:mime-version:mime-version:content-type:content-type:
content-transfer-encoding:content-transfer-encoding;
bh=b2KA0/XBf/o3jKrVBeV3M+L617l3qfxgHox1RVuxxzM=;
b=jqHgZkb6nN1ibUp6ga8P0kOyHXnkIbjtidJDRXhcrcmpRDV9egmrPbW5jOa2QhKc7coQbR
tIi9GNR/73PnaFgX51/bKqqQt3is19WPezG+ThM3XOm6UOex+j6CPEFRU+nrL2xkpBIyED
EMUPjVy7U0mcDQn8yi3uH3r24smMd5epwjRXCywcguU2cxS+6zzadIb7JkrFix+Yp9TeCJ
UI/CihRgzN1zwUkpeIoTKp7ldVkiQHo5QGA4yD221q4XbeKCT7JXFJv5yKN2D3bbSZYmpC
hqSYXGyrLei+gsS65HnR2gY1xTaXQl2dAdNyKijZWEEXxm5r7Pxjd9knTyoPuQ==
ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1652123657; a=rsa-sha256; cv=none;
b=fEVoE7fVmun6a5hlnAf6qX4j6obXoUE7iCwbu1LvQRiWohHGLpQEoqAaRicZE5RigOheNR
OaDvnhPIONNaO38o5HZhUIVdAG/TW2DIdYeWqz2NhivVjfpmN+gjUCWukJzVJZtwVeyjqq
gnYIgXsOgxhFUck5PLYqhHrO+4tdmhxDb5K9VrbRES51gGoS+UJbCSbKdMbdVmxQFacbBA
0k380pT5HEnf1rS6Q7zvwHzwrOdRKPIEcr4VaLn/Oau3uYAkD6mZgUuLRda5VlymY17yvU
kvc8lLKMrO9SSYBF/2/NMtyUPYUrA+qDqYXtQbDomh2fDdk8R2ipegaTskLflw==
ARC-Authentication-Results: i=1;
mx1.freebsd.org;
none
X-ThisMailContainsUnwantedMimeParts: N
The branch main has been updated by br:
URL: https://cgit.FreeBSD.org/src/commit/?id=b7fca06bbf3f24313cb513842ad0078df43d211a
commit b7fca06bbf3f24313cb513842ad0078df43d211a
Author: Ruslan Bukin
AuthorDate: 2022-05-09 19:08:01 +0000
Commit: Ruslan Bukin
CommitDate: 2022-05-09 19:13:57 +0000
Split-out SID-getting code to a separate functions.
Also ensure we are dealing with PCI-class devices.
Sponsored by: UKRI
---
sys/arm64/iommu/smmu.c | 57 ++++++++++++++++++++++++++++++++++++++------------
1 file changed, 44 insertions(+), 13 deletions(-)
diff --git a/sys/arm64/iommu/smmu.c b/sys/arm64/iommu/smmu.c
index e1197db34375..20971a2d7e41 100644
--- a/sys/arm64/iommu/smmu.c
+++ b/sys/arm64/iommu/smmu.c
@@ -1760,6 +1760,42 @@ smmu_set_buswide(device_t dev, struct smmu_domain *domain,
return (0);
}
+#ifdef DEV_ACPI
+static int
+smmu_pci_get_sid_acpi(device_t child, u_int *sid0)
+{
+ uint16_t rid;
+ u_int xref;
+ int seg;
+ int err;
+ int sid;
+
+ seg = pci_get_domain(child);
+ rid = pci_get_rid(child);
+
+ err = acpi_iort_map_pci_smmuv3(seg, rid, &xref, &sid);
+ if (err == 0)
+ *sid0 = sid;
+
+ return (err);
+}
+#endif
+
+#ifdef FDT
+static int
+smmu_pci_get_sid_fdt(device_t child, u_int *sid0)
+{
+ struct pci_id_ofw_iommu pi;
+ int err;
+
+ err = pci_get_id(child, PCI_ID_OFW_IOMMU, (uintptr_t *)&pi);
+ if (err == 0)
+ *sid0 = pi.id;
+
+ return (err);
+}
+#endif
+
static struct iommu_ctx *
smmu_ctx_alloc(device_t dev, struct iommu_domain *iodom, device_t child,
bool disabled)
@@ -1767,28 +1803,23 @@ smmu_ctx_alloc(device_t dev, struct iommu_domain *iodom, device_t child,
struct smmu_domain *domain;
struct smmu_softc *sc;
struct smmu_ctx *ctx;
-#ifdef DEV_ACPI
- uint16_t rid;
- u_int xref;
- int seg;
-#else
- struct pci_id_ofw_iommu pi;
-#endif
+ devclass_t pci_class;
u_int sid;
int err;
sc = device_get_softc(dev);
domain = (struct smmu_domain *)iodom;
+ pci_class = devclass_find("pci");
+ if (device_get_devclass(device_get_parent(child)) != pci_class)
+ return (NULL);
+
#ifdef DEV_ACPI
- seg = pci_get_domain(child);
- rid = pci_get_rid(child);
- err = acpi_iort_map_pci_smmuv3(seg, rid, &xref, &sid);
+ err = smmu_pci_get_sid_acpi(child, &sid);
#else
- err = pci_get_id(child, PCI_ID_OFW_IOMMU, (uintptr_t *)&pi);
- sid = pi.id;
+ err = smmu_pci_get_sid_fdt(child, &sid);
#endif
- if (err != 0)
+ if (err)
return (NULL);
if (sc->features & SMMU_FEATURE_2_LVL_STREAM_TABLE) {