From nobody Sat Oct 4 09:39:46 2025 Received: from smtpbguseast1.qq.com (smtpbguseast1.qq.com [54.204.34.129]) (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 5082C220687; Mon, 18 Aug 2025 09:29:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.204.34.129 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755509349; cv=none; b=VQ/mioH32DF4eArL2hPI+ZnbInJ/y3zGe6i7BCij37xR2QDtaCgPEV42aMXW4aAb0Dr3Z0zC1N/YYEl3I6OjlhR6cyZumHYgqw3MPwQv9us2naoS/YZbLUIhS54gxe3bmcp+nJ1UyNGwtTtUuE/OlZBjy+srlMGDcEmq/WSJXEY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755509349; c=relaxed/simple; bh=/hJv0mzHXIS6bEs1DcXOmRFXRROo56LNrivXaAlRwYY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=B/LCi4gi26bd9klP0N6XVxRhbpV0Ys3k8Cc6IfFotZXVGPrQplrrgKj59a14/zvWbC4E/d9FRB96dyHLmQmV0reLgmNljF3Q72juyV4CiNB++mmuCruZ4mR0tKHzIflViXup8PllXXxTDLDjyN+3V3qrtKUiwnqkZ5RQRCAyF7g= 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=bP130bh1; arc=none smtp.client-ip=54.204.34.129 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="bP130bh1" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.spacemit.com; s=mxsw2412; t=1755509320; bh=SK3FakjrDopXlK4b5FMuZJRoz8l5i/5MUhXQJMfoKCo=; h=From:Date:Subject:MIME-Version:Message-Id:To; b=bP130bh1M4cf2F50uTkxyZa+hsCNY6ClaNJneQ1wUof6VDX8mn8NDD/FbWYyCOrTs +rRX/ua++DLTLnYsFpoAvg7BKJmt2tDGNoVJzxdnd0H6gPwFEInWPPOR6su1AX1oFt OrlcsUm4vaAd/lHRnqhp6COVcupgEa2KafqSqhwg= X-QQ-mid: esmtpsz21t1755509314tc4b3f005 X-QQ-Originating-IP: L38W9V9/NIsHLDRox8+OFBX7sY7Zm9fj9dMmiK4F+k0= Received: from = ( [14.123.254.114]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 18 Aug 2025 17:28:31 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 2456046681612972940 EX-QQ-RecipientCnt: 17 From: Troy Mitchell Date: Mon, 18 Aug 2025 17:28:20 +0800 Subject: [PATCH v3 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: <20250818-k1-clk-i2s-generation-v3-1-8139b22ae709@linux.spacemit.com> References: <20250818-k1-clk-i2s-generation-v3-0-8139b22ae709@linux.spacemit.com> In-Reply-To: <20250818-k1-clk-i2s-generation-v3-0-8139b22ae709@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=1755509307; l=1199; i=troy.mitchell@linux.spacemit.com; s=20250710; h=from:subject:message-id; bh=/hJv0mzHXIS6bEs1DcXOmRFXRROo56LNrivXaAlRwYY=; b=ZtadIMTCPcMoagONLw2fcK0RfQQmIg9zoCpUCUgEN+CJ8bCi+82+iMoYoG1qE3w4cjauBbzxA HfHdrwxXtpDAGFvrB4k/veMHhwIUHtM5WEzH7JMVsKAH+BPEXvNtw2Z X-Developer-Key: i=troy.mitchell@linux.spacemit.com; a=ed25519; pk=lQa7BzLrq8DfZnChqmwJ5qQk8fP2USmY/4xZ2/MSsXc= X-QQ-SENDSIZE: 520 Feedback-ID: esmtpsz:linux.spacemit.com:qybglogicsvrsz:qybglogicsvrsz3a-0 X-QQ-XMAILINFO: NDTr/OXP+ntDO3t+2bNJzDKugs0wXL//a3Ht0i5JETb+Yr5ToK8R/0BW FBOZ2SgfRk9cORHfvHa+ZtDFP6+TRUVGsitpE0SeIMUQlQDGgKlt9j6fsuzJ1DMi8+RZ7mP YuYxiaFN7WAdk/RfW2wPfoynOzO/vLtRCfUGZ7a/hBd1WCKf2KRgHm0MVJA2/LLtFh46A8m YN+Nl+dLOzJUe0ABxupzogTFIRUwmjMcjkPFnpk5fGzowxOZXkMpyEsUqHwSMMnJcn+95qZ O3F5OoFDypwt4AnRe4k/xwVDBpP65PXFhA2oUwpF68kYq9HKEPQl20n1SUqkm6twVJCDWPT scELFyV+/H5YUODgfWOSl0uQVgT978gOi8PSGGi4CIB8Rc3htoTPobG1ZVWbJgDRkOnaCmB iZvlG4VxODIOIH0yD6U5P/Iv6FUl/mVkiFJbC2/I6gZGNaLFbrNVTnk3wuNvs3KbMIm3O61 4tTq7/W6gYUaQApeU0wyyjvOld3R4LAS3KIysEMq96cLMwFFyvHbIZHvg/1Gx4CLK+YTmE3 uXHI9yCmqeOgJ4+MgFYYt90N2dXLdu09rTjWgxTuaIu9ZhhbXl+vvFgVdGdvd+JdVUyo397 npUBUKIaWOL1Mh+OY8YQsEG8fucZJT/LHerItU67cM2818FMODyHP2y/PlUv3swkzRAD0AF DNAd3meVgswyuGVC5W/XQfrfhUukGklWbZCHg9V75YsbEwioRM7YWfSDFSkSl+U+7KfIjWa fSi/cKFZZfL0ewsXRNGupTdDjFy7Dvp4fhs+u2ENe4MM7OS3SOe7G6gbBQGhfttYau1mHZt xtB6bauoSSzepnBQ52v1tfMU384cHbhSPagJewYN2WdAskGiuG3VJ+8r3KXU9PLizIHEgJr 1zIGt8VbigfP/AmAgfXjZoz9AMwQI6y3BpWNcJwCdnNOMafFPhfzC5TSPbYOD2BK0QqVuDI ylb4mXaVsPcO3E4fu3TaZywkHc71NoTx3vLfm3eaAjE6lDwGL6EtP59fPgDvuqGuOxFqWxT WaZyAN8AcEtZjYz2uJ3kHED4DvkngZOEZkHtJYQz3qZQ5azinh2DbiY0m0zjhfJHt/WpEhi aVDYIJQaT0dmXZrEsYdg5r0kfBm9EOIb/La8xi5W2D7M05eE3EXMHw= X-QQ-XMRINFO: MSVp+SPm3vtS1Vd6Y4Mggwc= 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 09:39:46 2025 Received: from smtpbgjp3.qq.com (smtpbgjp3.qq.com [54.92.39.34]) (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 2327D220687; Mon, 18 Aug 2025 09:28:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=54.92.39.34 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755509336; cv=none; b=nKqxcKwMO9f2//wON7/F5+qT5dawlC9q32eiU4HZSM0Nw5za1LmyrJsdFhtNqC1x+zZMfFQ2RFhu90QPG/nqxEn/wKEnarOvceiorGAybp9YtIZ7xrATtZlfAOV685L6H8wDbhTU7oIMr6r9dGAU1D2bO9aq1x8xcgQqdIFU6ao= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755509336; c=relaxed/simple; bh=FOB7j1hlhVZDsG+zyDRMWyOCbt8PIEXCVAaCiq/WXRc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nf/aBzGsmGjk2s3ZFIzMbd+UVWmGLeENf/aHubDSdnlFkDXkqcm50187e+ec0smGQbn2E7IbcyXKoKQya5TGxxi2MAw6on28XnlOZ3RivoHlQCCWIkRaEzwGNqFopTckDLIPxppte593o/RusJplRcxNO27qqEhjwrbneK2bIug= 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=c2L9gJ+G; arc=none smtp.client-ip=54.92.39.34 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="c2L9gJ+G" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.spacemit.com; s=mxsw2412; t=1755509319; bh=P0uoMf5MS5hqK/AadmBbjxqCSSW+t8LKJc1Paz1/HdI=; h=From:Date:Subject:MIME-Version:Message-Id:To; b=c2L9gJ+GZUI2IhrlapTezgMA1hwdXeTzdf1ySEYLc0G2aa57WQ+M0BkMI4e28KPdp wI8gGt4r7wVU6pAZUUKmqxzUmY35UIpl6PwR+Xz2xtsCG+eZ0bwaCRPntA+WyLW9HB AG9ER5Dxi/iJUqPsOOPYn2pIzYLMxefhtd6Lvh+0= X-QQ-mid: zesmtpsz6t1755509318tefe082fa X-QQ-Originating-IP: h/AA42SpewFkwa0CFAT8ZKkIBNMIUI7l+DNAVLVoz1M= Received: from = ( [14.123.254.114]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 18 Aug 2025 17:28:35 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 14834764785882491220 EX-QQ-RecipientCnt: 16 From: Troy Mitchell Date: Mon, 18 Aug 2025 17:28:21 +0800 Subject: [PATCH v3 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: <20250818-k1-clk-i2s-generation-v3-2-8139b22ae709@linux.spacemit.com> References: <20250818-k1-clk-i2s-generation-v3-0-8139b22ae709@linux.spacemit.com> In-Reply-To: <20250818-k1-clk-i2s-generation-v3-0-8139b22ae709@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=1755509307; l=4228; i=troy.mitchell@linux.spacemit.com; s=20250710; h=from:subject:message-id; bh=FOB7j1hlhVZDsG+zyDRMWyOCbt8PIEXCVAaCiq/WXRc=; b=M/lFs4kyl89mj2sEORYsOaGP3qlKajC1gTtgFdc/qX9ZBRO7aDVIo9wGpaaLa6UjHn9XEOTSZ O5QXfiPnJeZC/zgHitor1IuClRtwCBaR92PmkyrzarTgog/NntUIRYC 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: NELwyfGakffP+9L3bDaMONw9vb6nlkH+SL0tIki6+Lhoki/bBZ+oRp91 MqgF6/sfSTp2XFH9IIwVYLl+8Nuxclypjb/v9hTn+IFW4qE8l63OhJKSepg/x/2tOv2G0cz 6AbpzKufG+eT72YEo/ViNTV/8e0Hkn1mkcvmwdTXDF/WE7PrR9bmU4cAFnIAT2vYSAs3cez 3cHKLPXEg0bddeDcnaa7t9Ll504V9zQCDPZU5Zq+tZHWDK7PaS4T/uoZ2vF9f1weDn2BHdp M9Hxzadt2hdoDamDrmMzTb+g0wLZloN3tJ+Nz8ynl3eMtjBDZYEX8B/bvHVV/J6ideBiZnS LDcu0Yb6BBscVddoQUBtwmGOglZd/ctw5P+Bp/glCal8CY9bAwMxsQCGCYtAETPP0tgQoug 7q/P7Rt4sjc9cndzlnBA0uN1QnA6htw0Ph8kB4AFleurSRMghMFvkQd7t1UaTfMOjoCSLaB oG3kbnWuFVM0stzHDNJAXintwHh+CegIGPckL88E7fBJZLlDzc1GwmLi79TZTi9dMw3JohY OGbLildh6Ees+3zduj1RZnX1uS33ijlV1Tp/inG2aFFAc+sQMNCXlLVs9Fk1ItFs1wlXx9R gTfukO8PImQsAoueknhJvxg7N6Pxu8jffFVhEf+JM7XUawP5j3228EtOHYU93vM0BBxNRYn lGI1HxP/tVnvHS4WLzZ9m1N4kZpFi1ODLxWKBJJXiMyewM+VpaJU8Ajx+LtzL/wKedyr7mv UI/m69qE2igLhKRKYVvOExZOXL3dhEaUARPKIm6kTlrv+MrObmg7kFMaWkhjCuYEXIN6CYD cJlqjaJ8UzNxEY1zLchmwjmmf79Fa6SG63fMO1eJpwD7L9q1GB8sBprvuVmrWEA9U/yE5a4 swcddASc6YEjslnXdw8oNul644wexl0NZGjC3TclFebZB/4fX6Klpt/QDKF/b3TbmtWRl+F YvkrKx81dZnp9yNMn45giWbd8BnQS4FCAnl7So4zI3lJAzWCXRx27q/eqACo/LwTEOiNh1e LqiBHzBuJO+ijYqzKgdYqHQL/XVu84Is8i8a3cqyh1hXU+ax7Zsjiiek41X5oZYT7LV6mvk bgoz5S58/Fn1vDViZs3KfJD7d5um8fhuRsmbeMeVEOy X-QQ-XMRINFO: NyFYKkN4Ny6FSmKK/uo/jdU= 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. Signed-off-by: Troy Mitchell Reviewed-by: Haylen Chu --- 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 09:39:46 2025 Received: from bg1.exmail.qq.com (bg1.exmail.qq.com [114.132.65.219]) (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 31EAF30EF6C; Mon, 18 Aug 2025 09:29:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=114.132.65.219 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755509354; cv=none; b=e2PylMaz1rNf7G0SHXBpXhj6Ni34l4PJxRDbKCbJ95xbV2rZM0MgFzO06yyWhpxWUa9ap46DhuF//BLjzWoM1g48/HrTKI0X3yffLWnr39adYEEWk4uRRzU9QvYrxHO2vUXRKJqMSFPwrLVXtB9BRCRYzn0xqeCQDzWEQ1U81n4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755509354; c=relaxed/simple; bh=EbxNhhULS7njhbvu3e7GjERZF4MmhlDW5guLkzvyZP4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=X0zikphuFVgGYxGRyEXAg6Bp9REYDV6m6Sl10NFS+wR6WK97LOQWgvlSpisxpERE+Mg9/f46qQBy34fxLPTLq8gt8l4/X2CezBMIqLNK5CoXihwu3SsFEYL9+63hCB3bqvDTuvxbLK2WFJsx/9UBOuJ2FR156/KC92xGhHiTyAA= 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=NHMquLN8; arc=none smtp.client-ip=114.132.65.219 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="NHMquLN8" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.spacemit.com; s=mxsw2412; t=1755509323; bh=gcsRKHyAKuMtB+ZuHSQSM7MM8/icoYyw0uVo9I/iac4=; h=From:Date:Subject:MIME-Version:Message-Id:To; b=NHMquLN8mmrPgmGH08tPxZWxhwgF8yJ9HZkbQ7yUVEmqI+A8mz++tvJx0j5hi9QD5 FleXMP/K+qHXAQ6Tn37D1pTRyW/XXOQUwr9xI6Sme5DkF5++P7AG/Eh80HoFXqKjEd hkHbZ+9s2/tYR3ZAmJCNDtBM6SgN02eOb5UM+ezQ= X-QQ-mid: esmtpsz21t1755509322t40396246 X-QQ-Originating-IP: B3DkngCQnn0bbz9w7FXWq/lfnZGvWROgMlt3PBsCQy8= Received: from = ( [14.123.254.114]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 18 Aug 2025 17:28:39 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 16519149024286198019 EX-QQ-RecipientCnt: 16 From: Troy Mitchell Date: Mon, 18 Aug 2025 17:28:22 +0800 Subject: [PATCH v3 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: <20250818-k1-clk-i2s-generation-v3-3-8139b22ae709@linux.spacemit.com> References: <20250818-k1-clk-i2s-generation-v3-0-8139b22ae709@linux.spacemit.com> In-Reply-To: <20250818-k1-clk-i2s-generation-v3-0-8139b22ae709@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=1755509307; l=4733; i=troy.mitchell@linux.spacemit.com; s=20250710; h=from:subject:message-id; bh=EbxNhhULS7njhbvu3e7GjERZF4MmhlDW5guLkzvyZP4=; b=c0A8Dxfc6KBKkPbV9tt0qoy/mYxWLZhU7nqpIZSp7tr0i5kxJIeA12u+q5lGGBGPFh+y1JtJk c+jkw2SU6PyAXlo+xKUN9avrR2Awz55sq+It+J+QpXjwn7tILizpJtR X-Developer-Key: i=troy.mitchell@linux.spacemit.com; a=ed25519; pk=lQa7BzLrq8DfZnChqmwJ5qQk8fP2USmY/4xZ2/MSsXc= X-QQ-SENDSIZE: 520 Feedback-ID: esmtpsz:linux.spacemit.com:qybglogicsvrsz:qybglogicsvrsz3a-0 X-QQ-XMAILINFO: M+Qa/yP3m2vGCAhUJiJg8RjSxFqRv6mp0DHJa6FCcIqJ7WEhdSs5ucr+ 7jkTgHZ2xYhsCa7nJzpVKGKQNsyVJ+OqdujsBSLWU/HBwiRPBDJtFkyMfqHf2UKvNWiLc+8 ZwwJRCLGbeDFYomj94mCTDC33ClXps2BFcFCQe3M+OQNBw2WzjJWyVhU+Y72W5oVb9VvFCl jU4dXh4FNdXjdAo8QQq9Vs3mp6xjSepnLLWja/ixN74Y/PoBxiE/DhSVpRaiq/oBh2EBRie l2ZrgBzhEcBc+XwSCaTGMMQjF+2TA5i1yKVBR+bgQxyqtqCxFtxTp6lPtK7Glt+2YaPqOdR Y90fihELssYbn9RPtegE0BhlJZEmwZGsR0Db7gLNXLa+M4ePEJew7QXdRfdce5XJJwGa4ar /Yli//5kwRsPucVm5rivsSGsmpz5sGwB9IsQLg6Kra3qCDrSArGjL3oOwhejPL54b8q0JCl k5mAVX1MR6+Qm6Ae6Ad/HkutCCEZXCk+D7+vHunJi5I96i76jB9kcoyNcWfmNkunDQkbd/z N5ZoXlLLToPAKvcaHb+m7Y43ZDxTOTh7XXX4E8ktMQEHNnfHfDYWEpCC0k7nMbgMsFkNi0J z8oG0JUfiKY6HMQ28kAKr3WzY/ve3zRdVvjjPe0PDtmIlV51uYW6TQGC9hDmNe90imT0NXB ZfYKSPqpmjuLjBfk2Mu+C6WdDDTRzpUe1yQGEy3L54TCtDoNeCSTBucpeCb5udaVlNVupHc /ftsbVGVxGd5vAmbuUvqdL2J4buHu7tCKOZGLYcIsfzukaIAds/izyj+oLG5EmVw+NATRsZ 520GnbCmpADk7zDE/zdVi2j8eThPuhMSv8bEPSPN9HEauKaQ3RhUw6EpZLDy2DZgrGsAQCe rHWRutUgqiK1Ucw9SE86ZZVPFc4wginY1zPFFUogJ6i15s1PuYwOqDCpetsgDsRHYob36ld yWgOYSriC+aKi2iImckfMH2k1o9wrPj7EEoAYWQ9BlBCTctiKkAr4C7cldMrWBZutOnEBo+ cDBCMiNpfGrYtAwmnlAC6IXqB/jW3xBWJv32LHsS/JIaQ7oHVMV6yswOf97TsXiOuun4LJx EX9pZTJgmZ7t7Nc8URR7TUgt5Zo57guiaH1UQFecPpEWmaoXdKaxhXcYvYC+f/m2MqH8As1 u19F2tlZIS17gLc= X-QQ-XMRINFO: OWPUhxQsoeAVDbp3OJHYyFg= 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 definition of register, The i2s_bclk is a non-linear, discrete divider clock. The following table shows the correspondence between index and frequency division coefficients: | index | div | |-------|-------| | 0 | 2 | | 1 | 4 | | 2 | 6 | | 2 | 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 | 29 +++++++++++++++++++++++++++-- drivers/clk/spacemit/ccu_mix.h | 2 +- include/soc/spacemit/k1-syscon.h | 1 + 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/drivers/clk/spacemit/ccu-k1.c b/drivers/clk/spacemit/ccu-k1.c index 7155824673fb450971439873b6b6163faf48c7e5..b2c426b629a37a9901bbced26fc= 55c5f1b34eba5 100644 --- a/drivers/clk/spacemit/ccu-k1.c +++ b/drivers/clk/spacemit/ccu-k1.c @@ -141,8 +141,29 @@ 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); +/* + * i2s_bclk is a non-linear discrete divider clock. + * Using i2s_bclk_factor as its parent simplifies software handling + * and avoids dealing with the non-linear division directly. + */ +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 +777,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/drivers/clk/spacemit/ccu_mix.h b/drivers/clk/spacemit/ccu_mix.h index 54d40cd39b2752260f57d2a96eb8d3eed8116ecd..5b5c3bb958167a68736587e9097= a1ca6f94d22fa 100644 --- a/drivers/clk/spacemit/ccu_mix.h +++ b/drivers/clk/spacemit/ccu_mix.h @@ -130,7 +130,7 @@ static struct ccu_mix _name =3D { \ } =20 #define CCU_DIV_GATE_DEFINE(_name, _parent, _reg_ctrl, _shift, _width, \ - _mask_gate, _flags) \ + _mask_gate, _flags) \ static struct ccu_mix _name =3D { \ .gate =3D CCU_GATE_INIT(_mask_gate), \ .div =3D CCU_DIV_INIT(_shift, _width), \ 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