From nobody Sat Oct 4 08:08:46 2025 Received: from smtpbgbr1.qq.com (smtpbgbr1.qq.com [54.207.19.206]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 30A841F416B; Tue, 19 Aug 2025 01:35:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.207.19.206 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755567363; cv=none; b=pBoLZy8D4hSBcHSpMwinFzBYtYzVgCH7URQXGZvn41Bj/7u+isGOg0Dp3ddsvl3oCVHdYCfZc8pIbCjzyhLvbUCPRnZpu6WneR3BlaaGMUjWTqPU5xUTBT9o+sd4lxGcSfCU1Vxg6w60dggpgjoMwjM+Iavt4pZXF8g6opBMUZU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755567363; c=relaxed/simple; bh=/hJv0mzHXIS6bEs1DcXOmRFXRROo56LNrivXaAlRwYY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VppVspq4IDEABiv0nEiRNXnBlT5/rt1PNojWnxAIYRx1aaxGe2J2GozQNXjKXqCRi3z0reS7D9IYxQvQBe/ZRDOxjHv0NH3s7BGiD276b8GMa7mRpR1rCYJAOlTlos7+FRRwF4ZXYjqAdVy43fFF6mvD9W+JgU9t+7C5mF8Krmc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux.spacemit.com; spf=none smtp.mailfrom=linux.spacemit.com; dkim=pass (1024-bit key) header.d=linux.spacemit.com header.i=@linux.spacemit.com header.b=LgYiPgTl; arc=none smtp.client-ip=54.207.19.206 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux.spacemit.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.spacemit.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.spacemit.com header.i=@linux.spacemit.com header.b="LgYiPgTl" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.spacemit.com; s=mxsw2412; t=1755567326; bh=SK3FakjrDopXlK4b5FMuZJRoz8l5i/5MUhXQJMfoKCo=; h=From:Date:Subject:MIME-Version:Message-Id:To; b=LgYiPgTlN03SYxiLsZ7lLzwWKcAOkTNw1U8hM5WlQhODZlCAUTPpMK9OVXYdpfqe9 URiGNBiL4c03FgzA2FJo8ILcUqeUIo6LwOZlp0y0TvLRszhtYkmnrmYcMOyYvFeT6L XFBYemz/x6uY70qNKhL3QlLVt/yo6z1uAMoozWSg= X-QQ-mid: zesmtpsz8t1755567320t10858b5e X-QQ-Originating-IP: 2YKpn87vCa46PGfFmKGjP3sxuCDc0QCYQ4bnMNTeHms= Received: from = ( [61.145.255.150]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 19 Aug 2025 09:35:17 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 6033226300495281637 EX-QQ-RecipientCnt: 17 From: Troy Mitchell Date: Tue, 19 Aug 2025 09:35:09 +0800 Subject: [PATCH v4 1/3] dt-bindings: clock: spacemit: introduce i2s pre-clock to fix i2s clock Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250819-k1-clk-i2s-generation-v4-1-80174edd04eb@linux.spacemit.com> References: <20250819-k1-clk-i2s-generation-v4-0-80174edd04eb@linux.spacemit.com> In-Reply-To: <20250819-k1-clk-i2s-generation-v4-0-80174edd04eb@linux.spacemit.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Yixun Lan , Alex Elder , Haylen Chu , Inochi Amaoto Cc: linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, linux-kernel@vger.kernel.org, Jinmei Wei , Troy Mitchell , Krzysztof Kozlowski X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1755567312; l=1199; i=troy.mitchell@linux.spacemit.com; s=20250710; h=from:subject:message-id; bh=/hJv0mzHXIS6bEs1DcXOmRFXRROo56LNrivXaAlRwYY=; b=lxfwkInvVlzITCkxhNZsnwfYrvWEuKp82wNatT2pHJ7c2Na1nYQNMachZD/QUYBYCbYyqzu5t TOYFEJc7KhJDompSouwpMPXpIEMdM3C5qrjPrUfhqOAkdSE1S584k4/ X-Developer-Key: i=troy.mitchell@linux.spacemit.com; a=ed25519; pk=lQa7BzLrq8DfZnChqmwJ5qQk8fP2USmY/4xZ2/MSsXc= X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpsz:linux.spacemit.com:qybglogicsvrsz:qybglogicsvrsz3a-0 X-QQ-XMAILINFO: NyqxpP01dmH56y/keP2ITShVG99cGlVLdkQlyTyMZSG3yUZpfj7U72Aq NBtY+7yzzpNxCErLVZvYzhHGUQ3Sc//pLehFgKcrDl+157sAEEH4v6IYejGfteshfpcEOyn 7eTDJCFm2IHMH0WgZkUe09gvcuw2j7sG86fsoWm7yt2TTDwFnAIfSvpdgazLyp4sKq244AY hxn4B5rdCGgqpGfa9tVFqicqpxcCfrFAoDAORB/77Se3T4nlL3yNbhUhvhzK8CUfqRT4ftK n63Fg5hYRexVpXdaNT80HXe3PJohDUORz5RyXJXXZuMN+BhdH9W7Bhco5eHtupqDNXl3e2L TEBNJLd3ujdy1TIR7SiKe/FkI18/tCJPrTj7QFjRzUT6vTYzb+hQtEEoQYNkWvEzFfWMqTe UoMmfrM8cN5YowXzuS8ybssCRD6In/owVyGdiHjgofvqto4Mofp93uVchTSBxsJHwRA/e6M 9DCKOw2ash4/0V8Dbmz8xtLuSR7JwvgvEKIzhIt9U922UX9qD7k6nzCOKpSaq8wNDDrEsjH ZizJwbCbFksvM5R/+grGrGw0bCa1KKwdC1LO5jUqW/8Gdxjt9z3+b05sBSI9oBRTQwPh1jp 7e4lD+KMhRSN4WjJ/1hMN0HhKT0qmsZ0Og1O8aGUcwjjRU+GJes0VyOeTY8GIquaainf8b7 DeEJKP6vpN9iv7PC58Hr4x6xU65dwx97l2ZS1M3gnl8L0oE6UtsgttXaK+mJJr6Vl+giGU2 GNc4DwfNFkUxTnJLqBZwLwS5KsA8Y0tSJmYT38TnAbBzNhViKNkRTV7WYrCMvY0HJUF65fj EZ4dKNSPuz3GxA/butj7PJJTwnH4A7UXVbu2qCrIiy0Fq6zXcCBJfKeRzHINyqnJkRm937M ydUqIq0qD9NqJWa/gXQ/NR3MmcNPSf//7QH/CZdz1mhq6odPL4l/4rFWMOXwG35ELF8rK73 wY6MdPbB1YrrhO7Z33FFPl2POo7cnZpxlQwlFhj7YwuYmeo4AzajEJQJUBLUY+m4fM4gMcp /xgiqrtiSOYu/O8WC+Mi20XuUU8QFP4GgV+BtetRBXFKy3HkpaDFJi6mQFhDYLhn+QQ1ea6 TC1df4h6ilYxgeU/tCVChEmfq32LOCYY2H1Bj1kOl/rzDK7cua9xKw= X-QQ-XMRINFO: M/715EihBoGSf6IYSX1iLFg= X-QQ-RECHKSPAM: 0 Previously, the K1 clock driver did not include the parent clocks of the I2S sysclk. Introduce pre-clock to fix I2S clock. Otherwise, the I2S clock may not work as expected. This patch adds their definitions to allow proper registration in the driver and usage in the device tree. Fixes: 1b72c59db0add ("clk: spacemit: Add clock support for SpacemiT K1 SoC= ") Acked-by: Krzysztof Kozlowski Signed-off-by: Troy Mitchell --- include/dt-bindings/clock/spacemit,k1-syscon.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/dt-bindings/clock/spacemit,k1-syscon.h b/include/dt-bi= ndings/clock/spacemit,k1-syscon.h index 2714c3fe66cd5b49e12c8b20689f5b01da36b774..ad62525be43a909633f8d3a65ec= e1acd60ba8052 100644 --- a/include/dt-bindings/clock/spacemit,k1-syscon.h +++ b/include/dt-bindings/clock/spacemit,k1-syscon.h @@ -77,6 +77,10 @@ #define CLK_I2S_BCLK 30 #define CLK_APB 31 #define CLK_WDT_BUS 32 +#define CLK_I2S_153P6 33 +#define CLK_I2S_153P6_BASE 34 +#define CLK_I2S_SYSCLK_SRC 35 +#define CLK_I2S_BCLK_FACTOR 36 =20 /* MPMU resets */ #define RESET_WDT 0 --=20 2.50.1 From nobody Sat Oct 4 08:08:46 2025 Received: from smtpbguseast2.qq.com (smtpbguseast2.qq.com [54.204.34.130]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 87EFC1F03C5; Tue, 19 Aug 2025 01:35:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.204.34.130 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755567339; cv=none; b=V+KlT/dfPZONVS+ueTWUl/cgAA44fLPXiXuHXil+iLHqHJwPB6lViZZdonHddEktyWESnWz2tsktNKKW0aqTMV8LKq3OMnEb/KtcsVuyyvVgTkqx2j/zkk+p6blg5I/EIKUuqapR8atle3ZEL146qPWsCWM0DWydY97jNGjCTHI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755567339; c=relaxed/simple; bh=wdMPiVIeJsJzFwdu5LLU9FO4SL7n/gJ/QmRKRGDI5Co=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pIV/7YXm4ftWE67dUFrEbAXLGnQcY+tcpEGLZ4hezmQpDlhpO68lPnl4uGU4brbUTJsLQJP5/l96If6O5DrrVZrm8JB2CvzsE3HszuGcnPq6lE4an3rL+ufP71cxQhR4j6G2y5i2HvumqgHWfBul8Jluj0Zx0zodUZAtU2wKHsY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux.spacemit.com; spf=none smtp.mailfrom=linux.spacemit.com; dkim=pass (1024-bit key) header.d=linux.spacemit.com header.i=@linux.spacemit.com header.b=jyTix/ku; arc=none smtp.client-ip=54.204.34.130 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux.spacemit.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.spacemit.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.spacemit.com header.i=@linux.spacemit.com header.b="jyTix/ku" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.spacemit.com; s=mxsw2412; t=1755567325; bh=fgMPbHla/RHj3NVfFAEZIZq6Vq/k5kuht5xvr+kXOT0=; h=From:Date:Subject:MIME-Version:Message-Id:To; b=jyTix/kuLgR+700TPPDZiPW/RyP2UEQngj9FnKwJyhXciKWaCGDTf5dclP6NF3AhD 6yfixNk2/o54JUPwT4LELLE6xSrS0+lluNe1VieI/wnVKwDqn3bc/cMSyBFxmcEknu AC+G0CGc2b3jGCmXfPifgGQ+rD7heZSs/mMsbgOA= X-QQ-mid: zesmtpgz9t1755567324tc7ddb23a X-QQ-Originating-IP: A3TFw07MyzdE9155DEy/FetY79CGxV5ka6P9joBSQeA= Received: from = ( [61.145.255.150]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 19 Aug 2025 09:35:22 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 4631062309127417572 EX-QQ-RecipientCnt: 16 From: Troy Mitchell Date: Tue, 19 Aug 2025 09:35:10 +0800 Subject: [PATCH v4 2/3] clk: spacemit: introduce pre-div for ddn clock Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250819-k1-clk-i2s-generation-v4-2-80174edd04eb@linux.spacemit.com> References: <20250819-k1-clk-i2s-generation-v4-0-80174edd04eb@linux.spacemit.com> In-Reply-To: <20250819-k1-clk-i2s-generation-v4-0-80174edd04eb@linux.spacemit.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Yixun Lan , Alex Elder , Haylen Chu , Inochi Amaoto Cc: linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, linux-kernel@vger.kernel.org, Jinmei Wei , Troy Mitchell X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1755567312; l=4272; i=troy.mitchell@linux.spacemit.com; s=20250710; h=from:subject:message-id; bh=wdMPiVIeJsJzFwdu5LLU9FO4SL7n/gJ/QmRKRGDI5Co=; b=Q96ug52EU2Of0CxnUDnM1QxIBiIB6dMVI3LNmdn95jtmBy6J49sjtf0UQlZIK6LCsXkS7hvlT GShMocafTUADz1shi8qPp6VGkCF/l6kJst+nFIuet3CgGN9G0euqG2j X-Developer-Key: i=troy.mitchell@linux.spacemit.com; a=ed25519; pk=lQa7BzLrq8DfZnChqmwJ5qQk8fP2USmY/4xZ2/MSsXc= X-QQ-SENDSIZE: 520 Feedback-ID: zesmtpgz:linux.spacemit.com:qybglogicsvrsz:qybglogicsvrsz3a-0 X-QQ-XMAILINFO: MfNNfhyevLfQqjeUwZbVBIIDq6L92UOAHS14XXAgE0QP9uejH1UBTkUQ tqZK5bxSKEcp8F0FD35Qoibvx0Qa4GemoDFRw3TAXgoqKaCWhbjnQdwnq5lWkbKw8D/JKHe p+SaPJPz8zgv77BfofgNKsmNv951Xk1w4o5aO6JOsKt1tTJ+MltAb2ytymdViStSbpw8Qk3 amzPSa7hTP8Mc7mCQUzzu7bVrZmTg9+WlXrXKI4Q2jwSy/kKFKLCgtk6CN6R1qMk8yyY7Cx vitex0w3taNRKFy0OPE9zMYqVcgbCr2bp+M7ypTbeUEV9G5EKEwGoq8mTZ2SWAnZHVGrH9c V1lQrt7ePqZgzX3f3tKZFsSW5Zz3ELnMinjznGSzyrrYexs+p9+i9nB6RhAMANBi2kAezyf k2GYvRaw4spMD4M2zqoMZeX1mpjsTUcYRQY3z8CBjhWKTafnC3kGrDvVF4r6+mNc8f7I7Sb E8JpibhhrON1DnN3e7GyZvjAZcJgnEgYcI/0bl6/HEn1PiHasGX5lxqsOfeXH8zBGWO9N+t 6XwZgBxFZccko/U3o/hlHKg9gxnxPZwJMYTiKgoznWu9z/ktmTvre+2FB8NQ0ZcbCpHEM9a +VP99cNl+rTeKtExmtgrw0fUEafODB+dia6Jx2mCffWQw49FYLWCBfriD5DdATcCeXYU5Mo q+ucr2ya9uuCfLAW9mWiaLHH1aJnOAkIes/dcSFelmVEsxF52XRdTO4OKk4o9VDTY4dN2Uu Jsdjwz4b1c2gnMKbsxPY6gFzx5tf/KTSt4AhBoQ+QI7rjxxQNl2mY2Az9HO5XrfTNsWV5j4 j/19c0IyP4wegbLvCzOug3F1gAeWU4pHE+C01vjK0nIZ2TRkr/7y6sUHCK8chQqk+s6aCfz gx7otbpVdG7owUb+h7y/A9qSkwz5NaEcXwnCHrzNtmeQvQ+Ah7oM4+5r0Jg30llFlwUrPKw ZtQ/ckekgh6/6FnpiPrOZSEmHpBleuX2ya7COfFRdB2z2Nl34yHC9LSU9bWKSeYHqKKYTJ5 fgeZVRWAFlN99TxeKKDjgw6my7e4ZHDzJQO205umk3foYFbin/uINBV4VvZJ+YdXZ2LCae4 0Dh9K/sPgs5u0hpsFIhrofAIVGJTLEbi2l6nSBXaYL+Uq4aIqOa9lOwwvMOuAkt/GzVBjlY gL0BB3NroUm6bTcZiPj+LUW6SRC5wjDeWDzoW+lT4Is29Dw= X-QQ-XMRINFO: Mp0Kj//9VHAxr69bL5MkOOs= X-QQ-RECHKSPAM: 0 The original DDN operations applied an implicit divide-by-2, which should not be a default behavior. This patch removes that assumption, letting each clock define its actual behavior explicitly. Reviewed-by: Haylen Chu Signed-off-by: Troy Mitchell --- drivers/clk/spacemit/ccu-k1.c | 4 ++-- drivers/clk/spacemit/ccu_ddn.c | 12 ++++++------ drivers/clk/spacemit/ccu_ddn.h | 6 ++++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/drivers/clk/spacemit/ccu-k1.c b/drivers/clk/spacemit/ccu-k1.c index 65e6de030717afa60eefab7bda88f9a13b857650..7155824673fb450971439873b6b= 6163faf48c7e5 100644 --- a/drivers/clk/spacemit/ccu-k1.c +++ b/drivers/clk/spacemit/ccu-k1.c @@ -136,8 +136,8 @@ CCU_GATE_DEFINE(pll1_d3_819p2, CCU_PARENT_HW(pll1_d3), = MPMU_ACGR, BIT(14), 0); CCU_GATE_DEFINE(pll1_d2_1228p8, CCU_PARENT_HW(pll1_d2), MPMU_ACGR, BIT(16)= , 0); =20 CCU_GATE_DEFINE(slow_uart, CCU_PARENT_NAME(osc), MPMU_ACGR, BIT(1), CLK_IG= NORE_UNUSED); -CCU_DDN_DEFINE(slow_uart1_14p74, pll1_d16_153p6, MPMU_SUCCR, 16, 13, 0, 13= , 0); -CCU_DDN_DEFINE(slow_uart2_48, pll1_d4_614p4, MPMU_SUCCR_1, 16, 13, 0, 13, = 0); +CCU_DDN_DEFINE(slow_uart1_14p74, pll1_d16_153p6, MPMU_SUCCR, 16, 13, 0, 13= , 2, 0); +CCU_DDN_DEFINE(slow_uart2_48, pll1_d4_614p4, MPMU_SUCCR_1, 16, 13, 0, 13, = 2, 0); =20 CCU_GATE_DEFINE(wdt_clk, CCU_PARENT_HW(pll1_d96_25p6), MPMU_WDTPCR, BIT(1)= , 0); =20 diff --git a/drivers/clk/spacemit/ccu_ddn.c b/drivers/clk/spacemit/ccu_ddn.c index be311b045698e95a688a35858a8ac1bcfbffd2c7..06d86748182bd1959cdab5c18d0= a882ee25dcade 100644 --- a/drivers/clk/spacemit/ccu_ddn.c +++ b/drivers/clk/spacemit/ccu_ddn.c @@ -22,21 +22,21 @@ =20 #include "ccu_ddn.h" =20 -static unsigned long ccu_ddn_calc_rate(unsigned long prate, - unsigned long num, unsigned long den) +static unsigned long ccu_ddn_calc_rate(unsigned long prate, unsigned long = num, + unsigned long den, unsigned int pre_div) { - return prate * den / 2 / num; + return prate * den / pre_div / num; } =20 static unsigned long ccu_ddn_calc_best_rate(struct ccu_ddn *ddn, unsigned long rate, unsigned long prate, unsigned long *num, unsigned long *den) { - rational_best_approximation(rate, prate / 2, + rational_best_approximation(rate, prate / ddn->pre_div, ddn->den_mask >> ddn->den_shift, ddn->num_mask >> ddn->num_shift, den, num); - return ccu_ddn_calc_rate(prate, *num, *den); + return ccu_ddn_calc_rate(prate, *num, *den, ddn->pre_div); } =20 static long ccu_ddn_round_rate(struct clk_hw *hw, unsigned long rate, @@ -58,7 +58,7 @@ static unsigned long ccu_ddn_recalc_rate(struct clk_hw *h= w, unsigned long prate) num =3D (val & ddn->num_mask) >> ddn->num_shift; den =3D (val & ddn->den_mask) >> ddn->den_shift; =20 - return ccu_ddn_calc_rate(prate, num, den); + return ccu_ddn_calc_rate(prate, num, den, ddn->pre_div); } =20 static int ccu_ddn_set_rate(struct clk_hw *hw, unsigned long rate, diff --git a/drivers/clk/spacemit/ccu_ddn.h b/drivers/clk/spacemit/ccu_ddn.h index a52fabe77d62eba16426867a9c13481e72f025c0..4838414a8e8dc04af49d3b8d392= 80efedbd75616 100644 --- a/drivers/clk/spacemit/ccu_ddn.h +++ b/drivers/clk/spacemit/ccu_ddn.h @@ -18,13 +18,14 @@ struct ccu_ddn { unsigned int num_shift; unsigned int den_mask; unsigned int den_shift; + unsigned int pre_div; }; =20 #define CCU_DDN_INIT(_name, _parent, _flags) \ CLK_HW_INIT_HW(#_name, &_parent.common.hw, &spacemit_ccu_ddn_ops, _flags) =20 #define CCU_DDN_DEFINE(_name, _parent, _reg_ctrl, _num_shift, _num_width, \ - _den_shift, _den_width, _flags) \ + _den_shift, _den_width, _pre_div, _flags) \ static struct ccu_ddn _name =3D { \ .common =3D { \ .reg_ctrl =3D _reg_ctrl, \ @@ -33,7 +34,8 @@ static struct ccu_ddn _name =3D { \ .num_mask =3D GENMASK(_num_shift + _num_width - 1, _num_shift), \ .num_shift =3D _num_shift, \ .den_mask =3D GENMASK(_den_shift + _den_width - 1, _den_shift), \ - .den_shift =3D _den_shift, \ + .den_shift =3D _den_shift, \ + .pre_div =3D _pre_div, \ } =20 static inline struct ccu_ddn *hw_to_ccu_ddn(struct clk_hw *hw) --=20 2.50.1 From nobody Sat Oct 4 08:08:46 2025 Received: from smtpbg151.qq.com (smtpbg151.qq.com [18.169.211.239]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BADAE230269; Tue, 19 Aug 2025 01:35:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=18.169.211.239 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755567352; cv=none; b=oikRpdKA6gB/iDk26ZrY2LPs4yVdywp9mX+BNr2W8gK6i3mVp/AyA376HBM6edWfHlTLw4MWGgBzCnHBlnkLetcwmxBEOZXnoVNSX68JpEmVNpGQR1mqlrGLQw5+5ErtYqqFyF8v9JMVAnSguxXU2qD+8YhzWl7QDr18YSPK/Do= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755567352; c=relaxed/simple; bh=cbYO9pZP3k7Ta6Ig4gCsEs6GQb+qs2EuZyhEONUipoQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Kwm5vo283feQ5Rs3gLtFjCYkQkwKgdAm7BNbOvEwJFyCzOW4on1LMTOO00getsivH164wXlfxSfvWDNZFUGiRtdF84WE+x6OAXo6ZM+IXDP98CnY6i2LtPVTkuQUkxXuTookl3kvcwXZ/lACGBNaOYLjQsjs9nVI3DWIAmBhQdk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux.spacemit.com; spf=none smtp.mailfrom=linux.spacemit.com; dkim=pass (1024-bit key) header.d=linux.spacemit.com header.i=@linux.spacemit.com header.b=EQ3at5az; arc=none smtp.client-ip=18.169.211.239 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=linux.spacemit.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.spacemit.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.spacemit.com header.i=@linux.spacemit.com header.b="EQ3at5az" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.spacemit.com; s=mxsw2412; t=1755567329; bh=uhl8/t0StcVqCaIWEKD+VuekI6N7mwpFLjkaIlWp5yw=; h=From:Date:Subject:MIME-Version:Message-Id:To; b=EQ3at5azQ8aYnyLn82PEuvhoL6PapiDIcshDoSU2YbXiy5XoTlGSkS5dhMflNnDsT elZ14fBMyAXGGuJun5CwQ7ZkGB8MSuhbmttTyVqwmh0g/dl02u0edbJV43Asc0B5Jb nmejDhFlpkuQAYTlxSa70oKMyhKF0pTQqP13aqvU= X-QQ-mid: esmtpgz10t1755567327t312bb98c X-QQ-Originating-IP: iIZs0ikRtkS/JR0i6or1EkTqIWUaffHSmjp2ixQuz30= Received: from = ( [61.145.255.150]) by bizesmtp.qq.com (ESMTP) with id ; Tue, 19 Aug 2025 09:35:25 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 12480758067493020977 EX-QQ-RecipientCnt: 16 From: Troy Mitchell Date: Tue, 19 Aug 2025 09:35:11 +0800 Subject: [PATCH v4 3/3] clk: spacemit: fix i2s clock Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250819-k1-clk-i2s-generation-v4-3-80174edd04eb@linux.spacemit.com> References: <20250819-k1-clk-i2s-generation-v4-0-80174edd04eb@linux.spacemit.com> In-Reply-To: <20250819-k1-clk-i2s-generation-v4-0-80174edd04eb@linux.spacemit.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Yixun Lan , Alex Elder , Haylen Chu , Inochi Amaoto Cc: linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, linux-kernel@vger.kernel.org, Jinmei Wei , Troy Mitchell X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1755567313; l=4010; i=troy.mitchell@linux.spacemit.com; s=20250710; h=from:subject:message-id; bh=cbYO9pZP3k7Ta6Ig4gCsEs6GQb+qs2EuZyhEONUipoQ=; b=t5XOT52tWGiOmBs4rOz5QVFCAK7ITGOYNwnrlciH8aM2d6IIZ2C8YkmqNKa9jpLE2wLrM/PuA doV1k5Qt+g7CfXA/hJHL/QNk7LDMqztlWm1EgWJHTb/4s4zYoLqlanY X-Developer-Key: i=troy.mitchell@linux.spacemit.com; a=ed25519; pk=lQa7BzLrq8DfZnChqmwJ5qQk8fP2USmY/4xZ2/MSsXc= X-QQ-SENDSIZE: 520 Feedback-ID: esmtpgz:linux.spacemit.com:qybglogicsvrsz:qybglogicsvrsz3a-0 X-QQ-XMAILINFO: Mjc5Shoq7MT/bc2/K5mBRkhYj7Dpkql/PbUeEAlc6F+C9pv9zBt8/vnA MyCATrn47mcqpw3RCTCXJI2zrbnaiZJ7remXhQNyf95rLM75mFb2iZS8qRxmzkMyZBlPhC1 qjQ751tbj9jyljIojTWPSon1oyzymwkJTVqujMI+HsrmF80UtT8mR4y0yqGXHwQgfe7cnkp FZJFKLXmUN4fBl9/5b/s6B+jMdzhQpFfC67FdaEFEUT7fIVV+kV8v8QA7ifrEMaJJvi0gMB ezNzvlYfsXJNCROZrHTQ+w6tJX3E5SlwHphIFp12pqUyRsCeVNj+he6BTljwmKZD5k8Gbdp gpW9wT1LJZWGWLq3TggZXxBeuct1bI74E/gjl/5ZMRglonAmi815YtLTI3a+AJ1HdZ55VDJ sVN5YYQdI60FMvSo7TY2QeFPL/RXwSfWx0+Wcj7H22tOVjaoimFPv68+zXP79yNyVRVVfPO +9TnVg6eGgtCjCeo3ZCVWrJkbp0j3NxxMnSgqf1GvKHnqot8WDmaoViDw9J/DuryXobHIQI zVHLv6L5qcogkjxkHsLg/pjteW5y7bDDj+9B/xB4Zb6gZgNiE25PS+6FmdSZELtD737pqQD lul1Trx2HkB5dRSSc0iMpRrpXZGoTLSu1RJ4glIx/pUASrvcmSrHJQSKUdsARfxunWk0FXj nmYPsQI3WubUyOqmVMhWnJ0Cvlf+DJVLaebf2KTBz9De4VflFSNhBImsipTRcMhb7Qi07n8 pkHK0gMkZEtyT67chG+Lz3zErlkZ7Rr23vJWiAC9FsPsYV9byy22ramttqYn2KkW3xuIyP7 eo5tVBWwqAK4efsICGtHwpkv6E6X0yw/0md69OO3ssJMq7Esq/C+YuFv6ALHdDCr7zZLYkS NZfUR0MWdzTAdWhfI/PRcUYOs9qLqPBeo7FW4JSVyHdiHIUlvZ7DX9Lc8A5io2QnaI1x55q 48kJXM4iyGGakEYuDZTiStcCXkNV13ClyHtzbeRncIrNDOhZEOd/iO98eys8Dswk4gk2hwD OgUviuwqxI4QwgMpcyLsY7wIKlvAVY6Ho/TwwO1BqvA3XHkIUPJta1Rkj0eP0uEESyzlxxZ wRoVewTUbkIUI/cA0/XbfysSfLD54GQgqLc57HC9qCX0Oek/GJx8RKEeEV/kFlFDlyRerjt BEDU X-QQ-XMRINFO: NS+P29fieYNw95Bth2bWPxk= X-QQ-RECHKSPAM: 0 Defining i2s_bclk and i2s_sysclk as fixed-rate clocks is insufficient for real I2S use cases. Moreover, the current I2S clock configuration does not work as expected due to missing parent clocks. This patch adds the missing parent clocks, defines i2s_sysclk as a DDN clock, and i2s_bclk as a DIV clock. A special note for i2s_bclk: From the register definition, the i2s_bclk divider always implies an additional 1/2 factor. The following table shows the correspondence between index and frequency division coefficients: | index | div | |-------|-------| | 0 | 2 | | 1 | 4 | | 2 | 6 | | 3 | 8 | From a software perspective, introducing i2s_bclk_factor as the parent of i2s_bclk is sufficient to address the issue. The I2S-related clock registers can be found here [1]. Link: https://developer.spacemit.com/documentation?token=3DLCrKwWDasiJuROkVNusc2p= WTnEb [1] Fixes: 1b72c59db0add ("clk: spacemit: Add clock support for SpacemiT K1 SoC= ") Co-developer: Jinmei Wei Suggested-by: Haylen Chu Signed-off-by: Jinmei Wei Signed-off-by: Troy Mitchell --- drivers/clk/spacemit/ccu-k1.c | 28 ++++++++++++++++++++++++++-- include/soc/spacemit/k1-syscon.h | 1 + 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/drivers/clk/spacemit/ccu-k1.c b/drivers/clk/spacemit/ccu-k1.c index 7155824673fb450971439873b6b6163faf48c7e5..50b472a2721121414f33e9fac63= 70f544e6b8229 100644 --- a/drivers/clk/spacemit/ccu-k1.c +++ b/drivers/clk/spacemit/ccu-k1.c @@ -141,8 +141,28 @@ CCU_DDN_DEFINE(slow_uart2_48, pll1_d4_614p4, MPMU_SUCC= R_1, 16, 13, 0, 13, 2, 0); =20 CCU_GATE_DEFINE(wdt_clk, CCU_PARENT_HW(pll1_d96_25p6), MPMU_WDTPCR, BIT(1)= , 0); =20 -CCU_FACTOR_GATE_DEFINE(i2s_sysclk, CCU_PARENT_HW(pll1_d16_153p6), MPMU_ISC= CR, BIT(31), 50, 1); -CCU_FACTOR_GATE_DEFINE(i2s_bclk, CCU_PARENT_HW(i2s_sysclk), MPMU_ISCCR, BI= T(29), 1, 1); +CCU_FACTOR_DEFINE(i2s_153p6, CCU_PARENT_HW(pll1_d8_307p2), 2, 1); + +static const struct clk_parent_data i2s_153p6_base_parents[] =3D { + CCU_PARENT_HW(i2s_153p6), + CCU_PARENT_HW(pll1_d8_307p2), +}; +CCU_MUX_DEFINE(i2s_153p6_base, i2s_153p6_base_parents, MPMU_FCCR, 29, 1, 0= ); + +static const struct clk_parent_data i2s_sysclk_src_parents[] =3D { + CCU_PARENT_HW(pll1_d96_25p6), + CCU_PARENT_HW(i2s_153p6_base) +}; +CCU_MUX_GATE_DEFINE(i2s_sysclk_src, i2s_sysclk_src_parents, MPMU_ISCCR, 30= , 1, BIT(31), 0); + +CCU_DDN_DEFINE(i2s_sysclk, i2s_sysclk_src, MPMU_ISCCR, 0, 15, 15, 12, 1, 0= ); + +CCU_FACTOR_DEFINE(i2s_bclk_factor, CCU_PARENT_HW(i2s_sysclk), 2, 1); +/* + * Divider of i2s_bclk always implies a 1/2 factor, which is + * described by i2s_bclk_factor. + */ +CCU_DIV_GATE_DEFINE(i2s_bclk, CCU_PARENT_HW(i2s_bclk_factor), MPMU_ISCCR, = 27, 2, BIT(29), 0); =20 static const struct clk_parent_data apb_parents[] =3D { CCU_PARENT_HW(pll1_d96_25p6), @@ -756,6 +776,10 @@ static struct clk_hw *k1_ccu_mpmu_hws[] =3D { [CLK_I2S_BCLK] =3D &i2s_bclk.common.hw, [CLK_APB] =3D &apb_clk.common.hw, [CLK_WDT_BUS] =3D &wdt_bus_clk.common.hw, + [CLK_I2S_153P6] =3D &i2s_153p6.common.hw, + [CLK_I2S_153P6_BASE] =3D &i2s_153p6_base.common.hw, + [CLK_I2S_SYSCLK_SRC] =3D &i2s_sysclk_src.common.hw, + [CLK_I2S_BCLK_FACTOR] =3D &i2s_bclk_factor.common.hw, }; =20 static const struct spacemit_ccu_data k1_ccu_mpmu_data =3D { diff --git a/include/soc/spacemit/k1-syscon.h b/include/soc/spacemit/k1-sys= con.h index c59bd7a38e5b4219121341b9c0d9ffda13a9c3e2..354751562c55523ef8a22be931d= dd8aca9651084 100644 --- a/include/soc/spacemit/k1-syscon.h +++ b/include/soc/spacemit/k1-syscon.h @@ -30,6 +30,7 @@ to_spacemit_ccu_adev(struct auxiliary_device *adev) =20 /* MPMU register offset */ #define MPMU_POSR 0x0010 +#define MPMU_FCCR 0x0008 #define POSR_PLL1_LOCK BIT(27) #define POSR_PLL2_LOCK BIT(28) #define POSR_PLL3_LOCK BIT(29) --=20 2.50.1