From nobody Tue Oct 06 07:51:33 2026 X-Original-To: dev-commits-src-branches@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 4hzT3V2x8kz6cWZD for ; Tue, 06 Oct 2026 07:51:34 +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 4hzT3T49jdz4H1v for ; Tue, 06 Oct 2026 07:51:33 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1791273093; 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=P8pRFrKA2R4bJtel1HVjlwZ6f1YxR3UUQl226jJIdUo=; b=wv7gu+H2ZnllO5DOIX5tVf6QOU/paiF710E5Ark9mFQzFkP5P8VGA1XF0u8vPC4qJwiDEi GtLueUWEaECUmPoo1S7ID80LJkConqCw88Nt8y7t0NcTTXAjzjwi7HhqQ7qAeYXwTjE6Ge hxG0r6RXRCH/wDn6DXuwomGIitgNunxhWkCAB090jUDVXHkeV00J1QF8hDru5GyWgDQr6c F+ebpRMFF1iiEGXEfTaaX6KgkbgJfDeeInt6H6brIojsv18YNZ85tp8TGHVf80MfyPN71G SxnX6lDTAfkofqZLy3R0yy3aJHmEJ99rsto4SygmcRPUcHVE7NAYOpqe9NU6MA== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791273093; b=JLMnIRkkqKtSr5d4eU6uQ02VmhqON4sYPuveVFbsvE+JgM0uRL9Eg1yBxAR9vPCFSOn23M FPxzhJJcaIEhqE6wORdz19NjR4MgFO8Clux+40adWoCj9c2IUgborsOHDd6Zt3ptiK/VzN cSvSaCvvB9TXb/6TlpAYWfz3M+b+py9yFBpFV0fvnbifSuA7HT+GRZCH70MWLyY5eTp6EQ RlmsjPJN6EPhSffTGgDOGbQkaatirXok6nqbUaBS20gxzd+iOT3SrwP9PcDpiyxiA0RqyK 89TOY4MdGUbO5oe6KUZheexTyXwFaJJtN0WkuHHSDOl9xhoZRG+0C89Dw0DIyw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1791273093; 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=P8pRFrKA2R4bJtel1HVjlwZ6f1YxR3UUQl226jJIdUo=; b=vRwKlx2zlHYVI+Tpbv7PqgQEwIeatqB8uESF8XCOG/Wn57w6S1BwHiTUfWdBqHl7c5GH4v bjJHBsrZVFT4rc4GKExLQwDNf9ET7Wy9kC8aNLg6n8DTKdPXnekhMPk5VI5BJLz1j45l+Q 26nG5VIlsBGhz1sLnRrJeARwtcZs4de6wiT/6wstYjTn25qrimfxIL7/u3vWU72k8UZ9R4 iuEPeRgGjt9G2bBQ6Utr/PEoYbeh3ybpaf2nYw0/cfaiSjosbe5G2iyuKkQzpmRbkKYpnJ Ree/Z4lOntqe0s5wCdTOPOqpKnPxDp7GOS87ulFXWiAY9gpl45VWToJZ7ArLCQ== 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 4hzT3T34mzzxcg for ; Tue, 06 Oct 2026 07:51:33 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 18a47 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 06 Oct 2026 07:51:33 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Jaeyoon Choi Subject: git: 8dcd02bdf8a6 - stable/15 - ufshci: fix the Snapdragon X Elite reference clock List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@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: jaeyoon X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: 8dcd02bdf8a6f25fd541a4f0df9131395bfefc47 Auto-Submitted: auto-generated Date: Tue, 06 Oct 2026 07:51:33 +0000 Message-Id: <6ac4a885.18a47.5515fb5e@gitrepo.freebsd.org> The branch stable/15 has been updated by jaeyoon: URL: https://cgit.FreeBSD.org/src/commit/?id=8dcd02bdf8a6f25fd541a4f0df9131395bfefc47 commit 8dcd02bdf8a6f25fd541a4f0df9131395bfefc47 Author: Jaeyoon Choi AuthorDate: 2026-09-02 01:47:18 +0000 Commit: Jaeyoon Choi CommitDate: 2026-10-06 06:28:07 +0000 ufshci: fix the Snapdragon X Elite reference clock The driver's ACPI table set bRefClkFreq to 19.2 MHz. The Snapdragon X Elite feeds the device 38.4 MHz from its CXO. The firmware has no property for it. The device ran its PLL from the wrong base. Every HS mode failed. PWM still worked. The attribute is persistent. The wrong value survived reboots. Set 38.4 MHz in the table. Read the attribute first. Write it only when the value differs or the read fails. Log a changed value and a failed read. Verified on the Galaxy Book 4 Edge. Reviewed by: imp (mentor) Sponsored by: Samsung Electronics Differential Revision: https://reviews.freebsd.org/D59297 (cherry picked from commit 973783515e7db6e19550c57c8f9d94d907e3bd0e) --- sys/dev/ufshci/ufshci_acpi.c | 6 +++++- sys/dev/ufshci/ufshci_dev.c | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/sys/dev/ufshci/ufshci_acpi.c b/sys/dev/ufshci/ufshci_acpi.c index 94da0d3cb411..f96a4c29e15e 100644 --- a/sys/dev/ufshci/ufshci_acpi.c +++ b/sys/dev/ufshci/ufshci_acpi.c @@ -51,8 +51,12 @@ static struct ufshci_acpi_device { uint32_t ref_clk; uint32_t quirks; } ufshci_acpi_devices[] = { + /* + * The SoC feeds the device 38.4 MHz from its CXO. The firmware + * has no property for it. Verified on the Galaxy Book 4 Edge. + */ { "QCOM24A5", "Qualcomm Snapdragon X Elite UFS Host Controller", - UFSHCI_REF_CLK_19_2MHz, + UFSHCI_REF_CLK_38_4MHz, UFSHCI_QUIRK_REINIT_AFTER_MAX_GEAR_SWITCH | UFSHCI_QUIRK_BROKEN_LSDBS_MCQS_CAP }, { 0x00000000, NULL, 0, 0 } diff --git a/sys/dev/ufshci/ufshci_dev.c b/sys/dev/ufshci/ufshci_dev.c index 063b65aaf579..dd467f85c795 100644 --- a/sys/dev/ufshci/ufshci_dev.c +++ b/sys/dev/ufshci/ufshci_dev.c @@ -242,10 +242,27 @@ ufshci_dev_init_reference_clock(struct ufshci_controller *ctrlr) { int error; uint8_t index, selector; + uint64_t value; index = 0; /* bRefClkFreq is device type attribute */ selector = 0; /* bRefClkFreq is device type attribute */ + /* + * bRefClkFreq is a persistent attribute. Skip the write when + * the device already holds the wanted value. + */ + error = ufshci_dev_read_attribute(ctrlr, UFSHCI_ATTR_B_REF_CLK_FREQ, + index, selector, &value); + if (error != 0) { + ufshci_printf(ctrlr, "bRefClkFreq read failed, writing %u\n", + ctrlr->ref_clk); + } else if ((uint32_t)value == ctrlr->ref_clk) { + return (0); + } else { + ufshci_printf(ctrlr, "changing bRefClkFreq from %u to %u\n", + (uint32_t)value, ctrlr->ref_clk); + } + error = ufshci_dev_write_attribute(ctrlr, UFSHCI_ATTR_B_REF_CLK_FREQ, index, selector, ctrlr->ref_clk); if (error)