From nobody Mon Sep 21 15:26:10 2026 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 4hpRry5CY6z6sldr for ; Mon, 21 Sep 2026 15:26:10 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hpRry3CWCz4b5P for ; Mon, 21 Sep 2026 15:26:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790004370; 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=QozpbEN2MqGXO/Ko7xPA7z+zvFxwDyR/WhPQTnWErJs=; b=lndlt+kFvBqPXnQ3WGBa3mdrfp/q8zcq8ppgfeA1qORqfMqJuxZyGKmvcP9tq1KESjvcd1 Hu7eyE9U4k/1Y3jW2FLYYy9eBtUcLTF600kNZzxlOENx1mAPlv3m16J2o2ase786jsys45 c2sAenP4N9OeNzjzsyNXnXhB7PGZuMVDo8Hd7XI5KukN18Sqnc6QBIs5wvQUwaPXtlpZUv moBQCLoFP2OpoipHJwaDt4s7lmX3oKfpIIZ2/ZooiLuDB41CQKFsQHY+bVLFToSVDDr2UM naVLOGcLu635A+EzfJyKlrAEkE281D54HtnSbMDYRvQcydN4EIzr6U1M7hn9dQ== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1790004370; b=UNjfUpPuoUkJ30ZhnjCa0peSsGLux4fX4FVc30BqCm9ynZ2++MiVJM1emFW3VcztuuLgy3 H6BWTColx10Amb3W7tNaQ4WCpbcPaNmNQTwpOdteJDdMVGUd50h8Cl9o/H1aYagV4OYB3s lv2mU61dgzYfcnYV8NdlUlAEdeNdeAZ0LEdSazk1a3A02E8n5dVCKzOmwHXpwudj8g50n4 pgCoSHqIgOvIKNATokS8LJPFNMik4/ZzfhzHA71P+P6RkKcJm3roR8uHAPA97nii/bpCl9 7A6fTNNz/rPpOz0zXsTqwA5hoIS0Pzi9AsONzy6TQbXGe3AjbwR3Iwt7sMScjw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1790004370; 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=QozpbEN2MqGXO/Ko7xPA7z+zvFxwDyR/WhPQTnWErJs=; b=v6KntIZqnBxK8p52IaCWYLhrPjqy0Kwf3WQQJbL4cQ8pkWYfxE3YResyykYvufXNpNCBu0 jwrbh2TCxOby38hofKom3SxP/EEvocv2y2z20ZzdgvFHFKkxS6cf9bhWVGwgxXap3S2TjG R+NSUHN3HPssKTugCPRpUu+CbR+mCYQ0+ft1TNHsAhNmvOC7WcJv11sFoA7bzPa3IF13J6 NNux4S2qm7MxC3sqGjAYLPLD3YsxjfFL0uU0+ZjF7uu0DM3NptpUjg5NHg5es6TrIpj+RE DH6iGmRHE1DXh/MK1UcDmyITfSOeOcPpIJkteR/RpnIA1rJgBt16ri9Av7YTKA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hpRry1z16zQ44 for ; Mon, 21 Sep 2026 15:26:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 307b4 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 21 Sep 2026 15:26:10 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: 0689a5ea451b - main - arm64/smmu: Support polling for sync completion 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: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0689a5ea451bdef62f7e81ffb3e5f580c5c99b2b Auto-Submitted: auto-generated Date: Mon, 21 Sep 2026 15:26:10 +0000 Message-Id: <6ab14c92.307b4.2eebc17e@gitrepo.freebsd.org> The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=0689a5ea451bdef62f7e81ffb3e5f580c5c99b2b commit 0689a5ea451bdef62f7e81ffb3e5f580c5c99b2b Author: Andrew Turner AuthorDate: 2026-09-18 11:29:02 +0000 Commit: Andrew Turner CommitDate: 2026-09-18 11:29:02 +0000 arm64/smmu: Support polling for sync completion When the hardware doesn't support MSIs we need to poll to wait for sync operations to complete. Add support for this to support booting on this hardware. Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D59488 --- sys/arm64/iommu/smmu.c | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/sys/arm64/iommu/smmu.c b/sys/arm64/iommu/smmu.c index d5f79c9a2801..930c97a8aeb3 100644 --- a/sys/arm64/iommu/smmu.c +++ b/sys/arm64/iommu/smmu.c @@ -245,7 +245,7 @@ smmu_q_empty(struct smmu_queue *q) return (0); } -static int __unused +static int smmu_q_consumed(struct smmu_queue *q, uint32_t prod) { @@ -254,7 +254,7 @@ smmu_q_consumed(struct smmu_queue *q, uint32_t prod) return (1); if ((Q_WRP(q, q->lc.cons) != Q_WRP(q, prod)) && - (Q_IDX(q, q->lc.cons) <= Q_IDX(q, prod))) + (Q_IDX(q, q->lc.cons) < Q_IDX(q, prod))) return (1); return (0); @@ -567,6 +567,30 @@ smmu_poll_until_consumed(struct smmu_softc *sc, struct smmu_queue *q) } } +static void +smmu_sync_wait_poll(struct smmu_softc *sc, struct smmu_queue *q) +{ + sbintime_t start; + int prod; + + prod = q->lc.prod; + + start = getsbinuptime(); + do { + if (smmu_q_consumed(q, prod)) + return; + if ((sc->features & SMMU_FEATURE_SEV) != 0) + wfe(); + else + DELAY(100); + + q->lc.cons = bus_read_4(sc->res[0], q->cons_off); + } while ((getsbinuptime() - start) < SBT_1S); + + if (!smmu_q_consumed(q, prod)) + device_printf(sc->dev, "Failed to sync\n"); +} + static void smmu_sync_wait_msi(struct smmu_softc *sc, struct smmu_queue *q) { @@ -604,11 +628,18 @@ smmu_sync(struct smmu_softc *sc) prod = q->lc.prod; /* Enqueue sync command. */ + memset(&cmd, 0, sizeof(cmd)); cmd.opcode = CMD_SYNC; - cmd.sync.msiaddr = q->paddr + Q_IDX(q, prod) * CMDQ_ENTRY_DWORDS * 8; + if ((sc->features & SMMU_FEATURE_MSI) != 0) { + cmd.sync.msiaddr = q->paddr + + Q_IDX(q, prod) * CMDQ_ENTRY_DWORDS * 8; + } smmu_cmdq_enqueue_cmd(sc, &cmd); - smmu_sync_wait_msi(sc, q); + if ((sc->features & SMMU_FEATURE_MSI) != 0) + smmu_sync_wait_msi(sc, q); + else + smmu_sync_wait_poll(sc, q); return (0); }