From nobody Fri Oct 30 07:35:24 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 4jGCYn0t4xz6yNnw for ; Fri, 30 Oct 2026 07:35:25 +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) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4jGCYn0GJ0z4pnN for ; Fri, 30 Oct 2026 07:35:25 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793345725; 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=0tGHN8T4BfWgdjSV67EFIF3t1x1ob0jseXl4GgQmf0U=; b=JQgdVHMN76V6yXpTo5vkjZE6I6Mfp4NgUtHUjDwrl/nEZ7H6kxQ1GQjMTDVWPIthvpq+no 2fd471cALrdnMfCynIAiadep9moA4+au3zUrJrtoi/3KBsz0y2dUkg0CiACmV7KEzyXWMv fPDUu5FmJ/qa3+SFPeXPFKZ/nw8E3voC6rhtA/y0cWtz20J6ntX0bk13gXvoz1Sy2rK7OT Mt8+OjEjOt19TJiKU/CSVM9B937yGPQkdXji5MK0detgaBBunqSOd59SvzKB8B8PSO0xL2 TaFVaVrjDzp8xv64DDtFkEjs7YbKTxz6FKrXJ35ZGj/E7qCMrz186Su3offYow== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1793345725; b=eL8t9yMCEQHCPDjd/cF5NyX6t0lO5zjt7b6b49e+k0rPIbft7ty3lJOMs3RIRwhQvhqRkL MXhR//F8GUGpCCdSUJFn0qruDM0mttPKa92CkAbKwmkLAxQwq9EkW9+xO/VLKLz3bJQFjh iiR2NvDtNKpqLW/bDRdi+SEe6sDJgMnujeWfZWVGG1BZeJ9IAXHnAxyt0LNs8PkmGxYsmI 82xHOZRnVOIYO7dpW578dfVGv5lW5OHZwYBEhdvBZCuRTitYfj2612ihpqIELpkqrb4DyE hIZoEQxgWTLYx4ONRR/+NVNkwjVsk6pkLFOwNxvcRh6i7QJH5NgCm3wWm12N/Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793345725; 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=0tGHN8T4BfWgdjSV67EFIF3t1x1ob0jseXl4GgQmf0U=; b=VphYPebSH9WF6X1Lhc2RriNjXHR2wOsFy7bK9CEDwPg4fHuVgrSEa9pt3qaBkH9dyZXTJZ VcjX34601+FuFtd8IOmC+l+pa0JE4K2fcnTeFHw24QcWf6Nu+G65UI+qWCve3Y8Br5QI5E ZREWQwurPxzzJ6SMhITSg2Zi3/07xvR0G5nZuPgAosY8twAIvvoCdqpiRJF0g5FtLI5+BM MWkzZ1XbVWSwO4UhSXzrwkRJ/YSIUfq5GYKYBn30/ed1gENE53B/m+JZNy3R4uXqNJr6ja goGuiDGZsoMyNQIuDqWUE3ZNt/dU5jMMv9rnZ2TW9h2i8cLbdM3CO66IR35agQ== 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 4jGCYm6g2dzGvr for ; Fri, 30 Oct 2026 07:35:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1fd17 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 30 Oct 2026 07:35:24 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Emmanuel Vadot Subject: git: a2ae5a27ce08 - main - clk: Add a clknode method to get and set the phase List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: Commit messages for all branches of the src repository 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: manu X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a2ae5a27ce0898221e2fdbf7fdf2aee6a9925096 Auto-Submitted: auto-generated Date: Fri, 30 Oct 2026 07:35:24 +0000 Message-Id: <6ae448bc.1fd17.5b57577a@gitrepo.freebsd.org> The branch main has been updated by manu: URL: https://cgit.FreeBSD.org/src/commit/?id=a2ae5a27ce0898221e2fdbf7fdf2aee6a9925096 commit a2ae5a27ce0898221e2fdbf7fdf2aee6a9925096 Author: Emmanuel Vadot AuthorDate: 2026-10-20 08:09:18 +0000 Commit: Emmanuel Vadot CommitDate: 2026-10-30 07:35:11 +0000 clk: Add a clknode method to get and set the phase Add clknode_get_phase/clknode_set_phase (and the clk_get_phase and clk_set_phase consumer API) so that clocks which can shift their phase, such as the MMC sample and drive clocks of some SoCs, can expose it. Reviewed by: mmel Differential Revision: https://reviews.freebsd.org/D60883 --- sys/dev/clk/clk.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++ sys/dev/clk/clk.h | 4 ++++ sys/dev/clk/clknode_if.m | 20 +++++++++++++++++ 3 files changed, 82 insertions(+) diff --git a/sys/dev/clk/clk.c b/sys/dev/clk/clk.c index 5c74d84cacc8..e2073dfe7f99 100644 --- a/sys/dev/clk/clk.c +++ b/sys/dev/clk/clk.c @@ -1228,6 +1228,64 @@ clk_test_freq(clk_t clk, uint64_t freq, int flags) return (rv); } +int +clknode_set_phase(struct clknode *clknode, int degrees) +{ + int rv; + + CLK_TOPO_ASSERT(); + + CLKNODE_XLOCK(clknode); + rv = CLKNODE_SET_PHASE(clknode, degrees); + CLKNODE_UNLOCK(clknode); + return (rv); +} + +int +clknode_get_phase(struct clknode *clknode, int *degrees) +{ + int rv; + + CLK_TOPO_ASSERT(); + + CLKNODE_XLOCK(clknode); + rv = CLKNODE_GET_PHASE(clknode, degrees); + CLKNODE_UNLOCK(clknode); + return (rv); +} + +int +clk_set_phase(clk_t clk, int degrees) +{ + int rv; + struct clknode *clknode; + + clknode = clk->clknode; + KASSERT(clknode->ref_cnt > 0, + ("Attempt to access unreferenced clock: %s\n", clknode->name)); + + CLK_TOPO_XLOCK(); + rv = clknode_set_phase(clknode, degrees); + CLK_TOPO_UNLOCK(); + return (rv); +} + +int +clk_get_phase(clk_t clk, int *degrees) +{ + int rv; + struct clknode *clknode; + + clknode = clk->clknode; + KASSERT(clknode->ref_cnt > 0, + ("Attempt to access unreferenced clock: %s\n", clknode->name)); + + CLK_TOPO_SLOCK(); + rv = clknode_get_phase(clknode, degrees); + CLK_TOPO_UNLOCK(); + return (rv); +} + int clk_get_parent(clk_t clk, clk_t *parent) { diff --git a/sys/dev/clk/clk.h b/sys/dev/clk/clk.h index 4702e8741a67..6f9aa75b46dd 100644 --- a/sys/dev/clk/clk.h +++ b/sys/dev/clk/clk.h @@ -116,6 +116,8 @@ int clknode_set_freq(struct clknode *clknode, uint64_t freq, int flags, int enablecnt); int clknode_test_freq(struct clknode *clknode, uint64_t freq, int flags, int enablecnt, uint64_t *out_freq); +int clknode_set_phase(struct clknode *clknode, int degrees); +int clknode_get_phase(struct clknode *clknode, int *degrees); int clknode_enable(struct clknode *clknode); int clknode_disable(struct clknode *clknode); int clknode_stop(struct clknode *clknode, int depth); @@ -129,6 +131,8 @@ int clk_release(clk_t clk); int clk_get_freq(clk_t clk, uint64_t *freq); int clk_set_freq(clk_t clk, uint64_t freq, int flags); int clk_test_freq(clk_t clk, uint64_t freq, int flags); +int clk_set_phase(clk_t clk, int degrees); +int clk_get_phase(clk_t clk, int *degrees); int clk_enable(clk_t clk); int clk_disable(clk_t clk); int clk_stop(clk_t clk); diff --git a/sys/dev/clk/clknode_if.m b/sys/dev/clk/clknode_if.m index 7269ee03bd74..95b0f64bee41 100644 --- a/sys/dev/clk/clknode_if.m +++ b/sys/dev/clk/clknode_if.m @@ -87,3 +87,23 @@ METHOD int set_mux { struct clknode *clk; int idx; }; + +# +# Set clock phase (in degrees) +# Return: ENXIO - method is not implemented +# 0 - success +# +METHOD int set_phase { + struct clknode *clk; + int degrees; +}; + +# +# Get clock phase (in degrees) +# Return: ENXIO - method is not implemented +# 0 - success +# +METHOD int get_phase { + struct clknode *clk; + int *degrees; +};