From nobody Mon Feb 9 09:01:14 2026 Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 58CA52288D5; Sat, 3 Jan 2026 07:26:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=140.211.166.183 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767425213; cv=none; b=O5qPlGyOci6EfDMW1S16fxomgY3pLSctWiUrBbSnsPlry8kC4fQqyVBapBGqtSTp1vix+ZAuU9X33od8exIJg2vauIxOweC5Y7b7uzwAkNseCdIdLAV6xjwGnJsE7aZR2qDiRSnzvwa8OYRwE5ZE36Boa21zfv8h9sbqN7M8J2g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767425213; c=relaxed/simple; bh=xNlizd+/tLBFwWM/QUTD8wjj7jKVFFciZx8duLxiagc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AsNYDGDliIRIGz9Mlpx6oVZP5VSogaf06iGLzquN2cy1s56M1Ute+OhNO2S+TG1IkhbZCKPISAtNKpFVsAvVQY0fJwNKMKgK5BCc2X/mEEZ6NX/IfTd9gG8BF86PXMoABtXJXSCTi7UfKU26/7SWZYaEetREvNSDODAdIKaLPK0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gentoo.org; spf=pass smtp.mailfrom=gentoo.org; arc=none smtp.client-ip=140.211.166.183 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gentoo.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gentoo.org Received: from [127.0.0.1] (unknown [116.232.18.222]) (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) (Authenticated sender: dlan) by smtp.gentoo.org (Postfix) with ESMTPSA id 30C403417FE; Sat, 03 Jan 2026 07:26:46 +0000 (UTC) From: Yixun Lan Date: Sat, 03 Jan 2026 15:26:12 +0800 Subject: [PATCH v3 1/4] clk: spacemit: prepare common ccu header 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: <20260103-06-k1-clk-common-v3-1-6061d9f69eef@gentoo.org> References: <20260103-06-k1-clk-common-v3-0-6061d9f69eef@gentoo.org> In-Reply-To: <20260103-06-k1-clk-common-v3-0-6061d9f69eef@gentoo.org> To: Stephen Boyd , Michael Turquette , Philipp Zabel Cc: Alex Elder , Guodong Xu , Inochi Amaoto , linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Yixun Lan X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1893; i=dlan@gentoo.org; h=from:subject:message-id; bh=xNlizd+/tLBFwWM/QUTD8wjj7jKVFFciZx8duLxiagc=; b=owEB6QIW/ZANAwAKATGq6kdZTbvtAcsmYgBpWMSjMsasj4EDOZgwIbQGVcwaiPbE8iIjU7r6p 4583BmjhTWJAq8EAAEKAJkWIQS1urjJwxtxFWcCI9wxqupHWU277QUCaVjEoxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMSwyLDJfFIAAAAAALgAoaXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5 maWZ0aGhvcnNlbWFuLm5ldEI1QkFCOEM5QzMxQjcxMTU2NzAyMjNEQzMxQUFFQTQ3NTk0REJCRU QACgkQMarqR1lNu+1DYg//UHandxt5TxGFWljk13yi5AVTCy4MAGyNLCxiIvQq/FqbkuYctKb7g hUU+Gq4QdNxFIdFnkEpBG/g1Vy5DRgYU/XPTjWfSeJB+6coa4Hj6PQT1DFMMs7KswIBggnK4k1s 99tJKNhBOWEM4FVZnO8t/OYrwqA29GGWbTljD0xU453xqoSIE0rKrbtv50mhBaFT0xz0y4Nnz2R xUxZqufnHBF+3N8cF2Psd4KVpayaIszFF+86uRqkJJLpK45PHvjYvEMqr2t/bv8oaUIKYtDKFjQ glhlBdCRIrRM1uLUD9FadIl2YxmL8qzSQA4Bid8+Y2KRH9R+rzB1kEiRzm9esfWBKj99SgJ2mQC cQi05e0xwe5S9DUQO6YJnpOeMyBCdefDB5KeP9+k1luS2aPHL0v0N8nGBL0VnbZCK6ar+q8VUSQ OkWUqq72L+IjqosVNKS3kq3YR5j7j+WaQ0wCTtPRslCyAZrhk0NOHmFwaYUsQ5JYUTGvzcjRPL9 jlCTzRG0XVqcYdTYnsy6FWMzunpjHR6VUh8M2WRv6qpOvJ2OacP5tQ7Wyp5xpvelo+Yyjq+F8cU /M3Cf4J6e5asxAQEqL7R1nvIehxzx5/Sn6t5V2ggkQxB0RXzqawn2AHlrhf0v8HsB2jSYErFQYa egbqdz/okiAnmyZsuCiBhPHvgy9wC0= X-Developer-Key: i=dlan@gentoo.org; a=openpgp; fpr=50B03A1A5CBCD33576EF8CD7920C0DBCAABEFD55 In order to prepare adding clock driver for new K3 SoC, extract generic code to a separate common ccu header file, so they are not defined in K1 SoC-specific file, and then can be shared by all clock drivers. Signed-off-by: Yixun Lan Reviewed-by: Alex Elder --- include/soc/spacemit/ccu.h | 21 +++++++++++++++++++++ include/soc/spacemit/k1-syscon.h | 12 +----------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/include/soc/spacemit/ccu.h b/include/soc/spacemit/ccu.h new file mode 100644 index 000000000000..84dcdecccc05 --- /dev/null +++ b/include/soc/spacemit/ccu.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef __SOC_SPACEMIT_CCU_H__ +#define __SOC_SPACEMIT_CCU_H__ + +#include +#include + +/* Auxiliary device used to represent a CCU reset controller */ +struct spacemit_ccu_adev { + struct auxiliary_device adev; + struct regmap *regmap; +}; + +static inline struct spacemit_ccu_adev * +to_spacemit_ccu_adev(struct auxiliary_device *adev) +{ + return container_of(adev, struct spacemit_ccu_adev, adev); +} + +#endif /* __SOC_SPACEMIT_CCU_H__ */ diff --git a/include/soc/spacemit/k1-syscon.h b/include/soc/spacemit/k1-sys= con.h index 354751562c55..0be7a2e8d445 100644 --- a/include/soc/spacemit/k1-syscon.h +++ b/include/soc/spacemit/k1-syscon.h @@ -5,17 +5,7 @@ #ifndef __SOC_K1_SYSCON_H__ #define __SOC_K1_SYSCON_H__ =20 -/* Auxiliary device used to represent a CCU reset controller */ -struct spacemit_ccu_adev { - struct auxiliary_device adev; - struct regmap *regmap; -}; - -static inline struct spacemit_ccu_adev * -to_spacemit_ccu_adev(struct auxiliary_device *adev) -{ - return container_of(adev, struct spacemit_ccu_adev, adev); -} +#include "ccu.h" =20 /* APBS register offset */ #define APBS_PLL1_SWCR1 0x100 --=20 2.52.0 From nobody Mon Feb 9 09:01:14 2026 Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 525B7257855; Sat, 3 Jan 2026 07:26:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=140.211.166.183 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767425220; cv=none; b=e/3qzaBWGnKwTjQluYSNKT+iJLYGFuwqwH5alkhr7vdRTBqmyJ1ULCErimtnXRC/qE+dijogJuLWQnLwPFXbQHoNwgcoGFd2yEsEoJnb1mzj/wk+xenFvq5ouq3jDHWHlNlnVDkBOnPTCX0oZuJNDb6VM6+CJLSOYJGR48BNMZU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767425220; c=relaxed/simple; bh=K0IJLaeneB5SNTST27Lw8J0YScDYYBejIzMdFyw7xCk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dEFZJ1vxBU6HU07OrRBKxcBsJVkAXiH4vQvt1uvf18sILFx1UDP4KNioD5vaAgJqXQ4GJ65dCfxr4FmAg3F6Y+Ydk5aOsopsSclhtd13zdKRFK9WtEveXdpA62crWj5+l4gBcT9WI78dWOjmkt8itjEO6dsJetm3bIGBesTW7HY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gentoo.org; spf=pass smtp.mailfrom=gentoo.org; arc=none smtp.client-ip=140.211.166.183 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gentoo.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gentoo.org Received: from [127.0.0.1] (unknown [116.232.18.222]) (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) (Authenticated sender: dlan) by smtp.gentoo.org (Postfix) with ESMTPSA id 14539340FC1; Sat, 03 Jan 2026 07:26:52 +0000 (UTC) From: Yixun Lan Date: Sat, 03 Jan 2026 15:26:13 +0800 Subject: [PATCH v3 2/4] clk: spacemit: extract common ccu functions 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: <20260103-06-k1-clk-common-v3-2-6061d9f69eef@gentoo.org> References: <20260103-06-k1-clk-common-v3-0-6061d9f69eef@gentoo.org> In-Reply-To: <20260103-06-k1-clk-common-v3-0-6061d9f69eef@gentoo.org> To: Stephen Boyd , Michael Turquette , Philipp Zabel Cc: Alex Elder , Guodong Xu , Inochi Amaoto , linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Yixun Lan , Yao Zi X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=12258; i=dlan@gentoo.org; h=from:subject:message-id; bh=K0IJLaeneB5SNTST27Lw8J0YScDYYBejIzMdFyw7xCk=; b=owEB6QIW/ZANAwAKATGq6kdZTbvtAcsmYgBpWMSmHR+PdhBGHHE1Ob7ljxF+R8sF7DFvZTJ2w 0LuRl+oR/yJAq8EAAEKAJkWIQS1urjJwxtxFWcCI9wxqupHWU277QUCaVjEphsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMSwyLDJfFIAAAAAALgAoaXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5 maWZ0aGhvcnNlbWFuLm5ldEI1QkFCOEM5QzMxQjcxMTU2NzAyMjNEQzMxQUFFQTQ3NTk0REJCRU QACgkQMarqR1lNu+2kog//QevM92NZIFFqPzTdxy5Izcb9OOT9/L+u5xW68f3Vfw3Cp6T0xCx3J IqEecZ3r1ta5RArKG8QoaySDWqFBqIh1BsE2GfV39NFqZCFbJBF38HkxsySYGSFwQ/Q5W4eb+2X FQmOewR2yKe5ExclY/rPwTXAdZ9cQHLxKNRi0m/o/ffrm7ez7aNq3v+IfMDVqGmkTLhdfyxvaSU xAQdMPwEGIU6YtMZ+vh+wIyw4HBOCgigYcDVmvsalm5GrZ64PkFEkq6zPBrsbmGBJInz94Hfaf9 jzFc9Pxa06559HrcM7qdMi0EFC6FfbE/uKR0HH44M8VU65QWi/ytNDzMfaG7lMhP69v2D6qr8Bw CZycPbC/JtPeDeyBxaavwbesZtZqxc3Q40i6EAnss0MMerm+eVsIdIHRDo7FflpPHVRYNK1EUhU 4pmWvdo0DfrP09wSE2QnzDOjxPOuNNoq1WxP2w50gDGw4+4qMd/zXMKe+KSmTMC4gjMTt1YzCsZ jdZ4LfSk5cxUu/rA8MBvATKLSyO2lqGOrVvRgd7WlPPPygsWGIqPCUvHTa4UfWgW1fA0vXUglQw sB4yHojHsojdsXDkNMlTFOdObYsHS3ls8lr2sZwDBOO5LodAGGg6oSmR+emCZkMf5RDCr0PZYZH SVCO/F2jdceWZ87ersFt8gZsZZ1ZIs= X-Developer-Key: i=dlan@gentoo.org; a=openpgp; fpr=50B03A1A5CBCD33576EF8CD7920C0DBCAABEFD55 Refactor the probe function of SpacemiT's clock, and extract a common ccu file, so new clock driver added in the future can share the same code, which would lower the burden of maintenance. Since this commit changes the module name where the auxiliary device registered, the auxiliary device id need to be adjusted. Idea of the patch comes from the review of K3 clock driver, please refer to this disucssion[1] for more detail. Link: https://lore.kernel.org/all/aTo8sCPpVM1o9PKX@pie/ [1] Suggested-by: Yao Zi Signed-off-by: Yixun Lan Reviewed-by: Alex Elder --- drivers/clk/spacemit/ccu-k1.c | 179 ++--------------------------------= ---- drivers/clk/spacemit/ccu_common.c | 171 ++++++++++++++++++++++++++++++++++= ++ drivers/clk/spacemit/ccu_common.h | 10 +++ 3 files changed, 186 insertions(+), 174 deletions(-) diff --git a/drivers/clk/spacemit/ccu-k1.c b/drivers/clk/spacemit/ccu-k1.c index 01d9485b615d..02c792a73759 100644 --- a/drivers/clk/spacemit/ccu-k1.c +++ b/drivers/clk/spacemit/ccu-k1.c @@ -5,15 +5,10 @@ */ =20 #include -#include #include -#include -#include -#include #include #include #include -#include #include =20 #include "ccu_common.h" @@ -23,14 +18,6 @@ =20 #include =20 -struct spacemit_ccu_data { - const char *reset_name; - struct clk_hw **hws; - size_t num; -}; - -static DEFINE_IDA(auxiliary_ids); - /* APBS clocks start, APBS region contains and only contains all PLL clock= s */ =20 /* @@ -1001,167 +988,6 @@ static const struct spacemit_ccu_data k1_ccu_apbc2_d= ata =3D { .reset_name =3D "apbc2-reset", }; =20 -static int spacemit_ccu_register(struct device *dev, - struct regmap *regmap, - struct regmap *lock_regmap, - const struct spacemit_ccu_data *data) -{ - struct clk_hw_onecell_data *clk_data; - int i, ret; - - /* Nothing to do if the CCU does not implement any clocks */ - if (!data->hws) - return 0; - - clk_data =3D devm_kzalloc(dev, struct_size(clk_data, hws, data->num), - GFP_KERNEL); - if (!clk_data) - return -ENOMEM; - - clk_data->num =3D data->num; - - for (i =3D 0; i < data->num; i++) { - struct clk_hw *hw =3D data->hws[i]; - struct ccu_common *common; - const char *name; - - if (!hw) { - clk_data->hws[i] =3D ERR_PTR(-ENOENT); - continue; - } - - name =3D hw->init->name; - - common =3D hw_to_ccu_common(hw); - common->regmap =3D regmap; - common->lock_regmap =3D lock_regmap; - - ret =3D devm_clk_hw_register(dev, hw); - if (ret) { - dev_err(dev, "Cannot register clock %d - %s\n", - i, name); - return ret; - } - - clk_data->hws[i] =3D hw; - } - - ret =3D devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, clk_data); - if (ret) - dev_err(dev, "failed to add clock hardware provider (%d)\n", ret); - - return ret; -} - -static void spacemit_cadev_release(struct device *dev) -{ - struct auxiliary_device *adev =3D to_auxiliary_dev(dev); - - ida_free(&auxiliary_ids, adev->id); - kfree(to_spacemit_ccu_adev(adev)); -} - -static void spacemit_adev_unregister(void *data) -{ - struct auxiliary_device *adev =3D data; - - auxiliary_device_delete(adev); - auxiliary_device_uninit(adev); -} - -static int spacemit_ccu_reset_register(struct device *dev, - struct regmap *regmap, - const char *reset_name) -{ - struct spacemit_ccu_adev *cadev; - struct auxiliary_device *adev; - int ret; - - /* Nothing to do if the CCU does not implement a reset controller */ - if (!reset_name) - return 0; - - cadev =3D kzalloc(sizeof(*cadev), GFP_KERNEL); - if (!cadev) - return -ENOMEM; - - cadev->regmap =3D regmap; - - adev =3D &cadev->adev; - adev->name =3D reset_name; - adev->dev.parent =3D dev; - adev->dev.release =3D spacemit_cadev_release; - adev->dev.of_node =3D dev->of_node; - ret =3D ida_alloc(&auxiliary_ids, GFP_KERNEL); - if (ret < 0) - goto err_free_cadev; - adev->id =3D ret; - - ret =3D auxiliary_device_init(adev); - if (ret) - goto err_free_aux_id; - - ret =3D auxiliary_device_add(adev); - if (ret) { - auxiliary_device_uninit(adev); - return ret; - } - - return devm_add_action_or_reset(dev, spacemit_adev_unregister, adev); - -err_free_aux_id: - ida_free(&auxiliary_ids, adev->id); -err_free_cadev: - kfree(cadev); - - return ret; -} - -static int k1_ccu_probe(struct platform_device *pdev) -{ - struct regmap *base_regmap, *lock_regmap =3D NULL; - const struct spacemit_ccu_data *data; - struct device *dev =3D &pdev->dev; - int ret; - - base_regmap =3D device_node_to_regmap(dev->of_node); - if (IS_ERR(base_regmap)) - return dev_err_probe(dev, PTR_ERR(base_regmap), - "failed to get regmap\n"); - - /* - * The lock status of PLLs locate in MPMU region, while PLLs themselves - * are in APBS region. Reference to MPMU syscon is required to check PLL - * status. - */ - if (of_device_is_compatible(dev->of_node, "spacemit,k1-pll")) { - struct device_node *mpmu =3D of_parse_phandle(dev->of_node, - "spacemit,mpmu", 0); - if (!mpmu) - return dev_err_probe(dev, -ENODEV, - "Cannot parse MPMU region\n"); - - lock_regmap =3D device_node_to_regmap(mpmu); - of_node_put(mpmu); - - if (IS_ERR(lock_regmap)) - return dev_err_probe(dev, PTR_ERR(lock_regmap), - "failed to get lock regmap\n"); - } - - data =3D of_device_get_match_data(dev); - - ret =3D spacemit_ccu_register(dev, base_regmap, lock_regmap, data); - if (ret) - return dev_err_probe(dev, ret, "failed to register clocks\n"); - - ret =3D spacemit_ccu_reset_register(dev, base_regmap, data->reset_name); - if (ret) - return dev_err_probe(dev, ret, "failed to register resets\n"); - - return 0; -} - static const struct of_device_id of_k1_ccu_match[] =3D { { .compatible =3D "spacemit,k1-pll", @@ -1195,6 +1021,11 @@ static const struct of_device_id of_k1_ccu_match[] = =3D { }; MODULE_DEVICE_TABLE(of, of_k1_ccu_match); =20 +static int k1_ccu_probe(struct platform_device *pdev) +{ + return spacemit_ccu_probe(pdev, "spacemit,k1-pll"); +} + static struct platform_driver k1_ccu_driver =3D { .driver =3D { .name =3D "spacemit,k1-ccu", diff --git a/drivers/clk/spacemit/ccu_common.c b/drivers/clk/spacemit/ccu_c= ommon.c index 4412c4104dab..5f05b17f8452 100644 --- a/drivers/clk/spacemit/ccu_common.c +++ b/drivers/clk/spacemit/ccu_common.c @@ -1,6 +1,177 @@ // SPDX-License-Identifier: GPL-2.0-only =20 +#include +#include +#include #include +#include +#include +#include + +#include "ccu_common.h" + +static DEFINE_IDA(auxiliary_ids); +static int spacemit_ccu_register(struct device *dev, + struct regmap *regmap, + struct regmap *lock_regmap, + const struct spacemit_ccu_data *data) +{ + struct clk_hw_onecell_data *clk_data; + int i, ret; + + /* Nothing to do if the CCU does not implement any clocks */ + if (!data->hws) + return 0; + + clk_data =3D devm_kzalloc(dev, struct_size(clk_data, hws, data->num), + GFP_KERNEL); + if (!clk_data) + return -ENOMEM; + + clk_data->num =3D data->num; + + for (i =3D 0; i < data->num; i++) { + struct clk_hw *hw =3D data->hws[i]; + struct ccu_common *common; + const char *name; + + if (!hw) { + clk_data->hws[i] =3D ERR_PTR(-ENOENT); + continue; + } + + name =3D hw->init->name; + + common =3D hw_to_ccu_common(hw); + common->regmap =3D regmap; + common->lock_regmap =3D lock_regmap; + + ret =3D devm_clk_hw_register(dev, hw); + if (ret) { + dev_err(dev, "Cannot register clock %d - %s\n", + i, name); + return ret; + } + + clk_data->hws[i] =3D hw; + } + + ret =3D devm_of_clk_add_hw_provider(dev, of_clk_hw_onecell_get, clk_data); + if (ret) + dev_err(dev, "failed to add clock hardware provider (%d)\n", ret); + + return ret; +} + +static void spacemit_cadev_release(struct device *dev) +{ + struct auxiliary_device *adev =3D to_auxiliary_dev(dev); + + ida_free(&auxiliary_ids, adev->id); + kfree(to_spacemit_ccu_adev(adev)); +} + +static void spacemit_adev_unregister(void *data) +{ + struct auxiliary_device *adev =3D data; + + auxiliary_device_delete(adev); + auxiliary_device_uninit(adev); +} + +static int spacemit_ccu_reset_register(struct device *dev, + struct regmap *regmap, + const char *reset_name) +{ + struct spacemit_ccu_adev *cadev; + struct auxiliary_device *adev; + int ret; + + /* Nothing to do if the CCU does not implement a reset controller */ + if (!reset_name) + return 0; + + cadev =3D kzalloc(sizeof(*cadev), GFP_KERNEL); + if (!cadev) + return -ENOMEM; + + cadev->regmap =3D regmap; + + adev =3D &cadev->adev; + adev->name =3D reset_name; + adev->dev.parent =3D dev; + adev->dev.release =3D spacemit_cadev_release; + adev->dev.of_node =3D dev->of_node; + ret =3D ida_alloc(&auxiliary_ids, GFP_KERNEL); + if (ret < 0) + goto err_free_cadev; + adev->id =3D ret; + + ret =3D auxiliary_device_init(adev); + if (ret) + goto err_free_aux_id; + + ret =3D auxiliary_device_add(adev); + if (ret) { + auxiliary_device_uninit(adev); + return ret; + } + + return devm_add_action_or_reset(dev, spacemit_adev_unregister, adev); + +err_free_aux_id: + ida_free(&auxiliary_ids, adev->id); +err_free_cadev: + kfree(cadev); + + return ret; +} + +int spacemit_ccu_probe(struct platform_device *pdev, const char *compat) +{ + struct regmap *base_regmap, *lock_regmap =3D NULL; + const struct spacemit_ccu_data *data; + struct device *dev =3D &pdev->dev; + int ret; + + base_regmap =3D device_node_to_regmap(dev->of_node); + if (IS_ERR(base_regmap)) + return dev_err_probe(dev, PTR_ERR(base_regmap), + "failed to get regmap\n"); + + /* + * The lock status of PLLs locate in MPMU region, while PLLs themselves + * are in APBS region. Reference to MPMU syscon is required to check PLL + * status. + */ + if (compat && of_device_is_compatible(dev->of_node, compat)) { + struct device_node *mpmu =3D of_parse_phandle(dev->of_node, + "spacemit,mpmu", 0); + if (!mpmu) + return dev_err_probe(dev, -ENODEV, + "Cannot parse MPMU region\n"); + + lock_regmap =3D device_node_to_regmap(mpmu); + of_node_put(mpmu); + + if (IS_ERR(lock_regmap)) + return dev_err_probe(dev, PTR_ERR(lock_regmap), + "failed to get lock regmap\n"); + } + + data =3D of_device_get_match_data(dev); + + ret =3D spacemit_ccu_register(dev, base_regmap, lock_regmap, data); + if (ret) + return dev_err_probe(dev, ret, "failed to register clocks\n"); + + ret =3D spacemit_ccu_reset_register(dev, base_regmap, data->reset_name); + if (ret) + return dev_err_probe(dev, ret, "failed to register resets\n"); + + return 0; +} +EXPORT_SYMBOL_NS_GPL(spacemit_ccu_probe, "CLK_SPACEMIT"); =20 MODULE_DESCRIPTION("SpacemiT CCU common clock driver"); MODULE_LICENSE("GPL"); diff --git a/drivers/clk/spacemit/ccu_common.h b/drivers/clk/spacemit/ccu_c= ommon.h index da72f3836e0b..7ae244b5eace 100644 --- a/drivers/clk/spacemit/ccu_common.h +++ b/drivers/clk/spacemit/ccu_common.h @@ -7,6 +7,8 @@ #ifndef _CCU_COMMON_H_ #define _CCU_COMMON_H_ =20 +#include +#include #include =20 struct ccu_common { @@ -36,6 +38,12 @@ static inline struct ccu_common *hw_to_ccu_common(struct= clk_hw *hw) return container_of(hw, struct ccu_common, hw); } =20 +struct spacemit_ccu_data { + const char *reset_name; + struct clk_hw **hws; + size_t num; +}; + #define ccu_read(c, reg) \ ({ \ u32 tmp; \ @@ -45,4 +53,6 @@ static inline struct ccu_common *hw_to_ccu_common(struct = clk_hw *hw) #define ccu_update(c, reg, mask, val) \ regmap_update_bits((c)->regmap, (c)->reg_##reg, mask, val) =20 +int spacemit_ccu_probe(struct platform_device *pdev, const char *compat); + #endif /* _CCU_COMMON_H_ */ --=20 2.52.0 From nobody Mon Feb 9 09:01:14 2026 Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0225F26A0DD; Sat, 3 Jan 2026 07:27:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=140.211.166.183 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767425225; cv=none; b=rEBeX7DU82Rhe4Zsjr5C271Qxds8nzZzbUdBG5TfKFka2xzHam37befsCbeT8giXuPUxHBHg+ySSzxA6R0VvCs/wXjF3f3X3YCLkVO74tZfATQOR7lKj7JJa/Q0jvcuZlJ1elrs+cJI+7Io1eyGqfo7CzwlKhX075L+OLAt4suw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767425225; c=relaxed/simple; bh=a0l0Hwtc8AX9/uTm8puy0kd/nzf/RxGqjZIZTzVv96M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=N2TX3pWjNIc6SxSATxfQ7t8jzQ1S1uQ6T+otxBsYFiDM331sZ43L9ojXfmkmJ2F3poW7xiOg/5M1sZ9/D+BMKWgylL+YGdRHnBJZPmOSmb99cLEkEbmU2PYwI9JhvgahYKPTFrKVEtNplF2yMZzRb9XLsn3l9etK6arQ6XuxftY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gentoo.org; spf=pass smtp.mailfrom=gentoo.org; arc=none smtp.client-ip=140.211.166.183 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gentoo.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gentoo.org Received: from [127.0.0.1] (unknown [116.232.18.222]) (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) (Authenticated sender: dlan) by smtp.gentoo.org (Postfix) with ESMTPSA id 52C8F3417FE; Sat, 03 Jan 2026 07:26:58 +0000 (UTC) From: Yixun Lan Date: Sat, 03 Jan 2026 15:26:14 +0800 Subject: [PATCH v3 3/4] clk: spacemit: add platform SoC prefix to reset name 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: <20260103-06-k1-clk-common-v3-3-6061d9f69eef@gentoo.org> References: <20260103-06-k1-clk-common-v3-0-6061d9f69eef@gentoo.org> In-Reply-To: <20260103-06-k1-clk-common-v3-0-6061d9f69eef@gentoo.org> To: Stephen Boyd , Michael Turquette , Philipp Zabel Cc: Alex Elder , Guodong Xu , Inochi Amaoto , linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Yixun Lan X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2118; i=dlan@gentoo.org; h=from:subject:message-id; bh=a0l0Hwtc8AX9/uTm8puy0kd/nzf/RxGqjZIZTzVv96M=; b=owEB6QIW/ZANAwAKATGq6kdZTbvtAcsmYgBpWMSqrrh3fUziF5/wgj9P0hv3eufyArdSVEIfu G7O5m0rT6qJAq8EAAEKAJkWIQS1urjJwxtxFWcCI9wxqupHWU277QUCaVjEqhsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMSwyLDJfFIAAAAAALgAoaXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5 maWZ0aGhvcnNlbWFuLm5ldEI1QkFCOEM5QzMxQjcxMTU2NzAyMjNEQzMxQUFFQTQ3NTk0REJCRU QACgkQMarqR1lNu+3g4g/9EDeNvG2pbBYxE9jt07jAd5giC77CrVOu5lEvMtA9EQ8mNQtidhnrF soK9/0MZ+teAeSweejMVxv+wOHaEoXX1pY8ve4ri7N66ZtCqq6UhbZiB1IG6J1VktWPDpiGzR55 rynXgGToP3lON2jkmsLDYAHHa4h1chQZpzOF9UHem4SrN31m/mBC9I4xi3/DMeOTwN43eVGoNn+ wCnNew8AJjTzzMnaLOrNTRDeZR1wcDVdLTLPNOT+TjB20aWAiReduDDfZSJu/xW0RlPnf54inK8 N+d2kVfVcz9ht3nXRMiupDYr9ytMP1FLJycjtAgRbTTVUjFaKZaun+i+voAkaRKT0iQKZJF8SoU aTeSvP1FD8qqapuMLzCDdjIURswx1GbSUBq3JfO6O0JDnkWXp6LuKlMiEpoa0qOXKpfSoeLH2Go nJMTJS2ApUEjo6sr34im1QZ28aqD71Jxrfq8aynzGgz9jCbIsV3YqG12rXd3VUhn0EbwsW8/RsZ w1Xm2WxxgX21EPkrswAHyTklkC15hbCOPGHbZV+Dli9VmHRc9m8fSZwTFJ2JZJ/zuTj+3ZjvLB7 GY4IAOYJqseRQrxxluxGobcbwHk/vnsmY0pmQbHVnTvmAznAu+oal/hl/GEauLlsWqWkceDNx/f CceQDhCJHv+i9yHWkaRkYdJXJINNsc= X-Developer-Key: i=dlan@gentoo.org; a=openpgp; fpr=50B03A1A5CBCD33576EF8CD7920C0DBCAABEFD55 This change is needed for adding future new SpacemiT K3 reset driver. Since both K1 and K3 reset code register via the same module which its name changed to spacemit_ccu, it's necessary to encode the platform/SoC in the reset auxiliary device name to distinguish them, otherwise two reset drivers will claim to support same "compatible" auxiliary device even in the case of only one CCU clock driver got registered, which in the end lead to a broken reset driver. Signed-off-by: Yixun Lan Reviewed-by: Alex Elder --- drivers/clk/spacemit/ccu-k1.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/clk/spacemit/ccu-k1.c b/drivers/clk/spacemit/ccu-k1.c index 02c792a73759..dee14d25f75d 100644 --- a/drivers/clk/spacemit/ccu-k1.c +++ b/drivers/clk/spacemit/ccu-k1.c @@ -789,7 +789,7 @@ static struct clk_hw *k1_ccu_mpmu_hws[] =3D { }; =20 static const struct spacemit_ccu_data k1_ccu_mpmu_data =3D { - .reset_name =3D "mpmu-reset", + .reset_name =3D "k1-mpmu-reset", .hws =3D k1_ccu_mpmu_hws, .num =3D ARRAY_SIZE(k1_ccu_mpmu_hws), }; @@ -900,7 +900,7 @@ static struct clk_hw *k1_ccu_apbc_hws[] =3D { }; =20 static const struct spacemit_ccu_data k1_ccu_apbc_data =3D { - .reset_name =3D "apbc-reset", + .reset_name =3D "k1-apbc-reset", .hws =3D k1_ccu_apbc_hws, .num =3D ARRAY_SIZE(k1_ccu_apbc_hws), }; @@ -971,21 +971,21 @@ static struct clk_hw *k1_ccu_apmu_hws[] =3D { }; =20 static const struct spacemit_ccu_data k1_ccu_apmu_data =3D { - .reset_name =3D "apmu-reset", + .reset_name =3D "k1-apmu-reset", .hws =3D k1_ccu_apmu_hws, .num =3D ARRAY_SIZE(k1_ccu_apmu_hws), }; =20 static const struct spacemit_ccu_data k1_ccu_rcpu_data =3D { - .reset_name =3D "rcpu-reset", + .reset_name =3D "k1-rcpu-reset", }; =20 static const struct spacemit_ccu_data k1_ccu_rcpu2_data =3D { - .reset_name =3D "rcpu2-reset", + .reset_name =3D "k1-rcpu2-reset", }; =20 static const struct spacemit_ccu_data k1_ccu_apbc2_data =3D { - .reset_name =3D "apbc2-reset", + .reset_name =3D "k1-apbc2-reset", }; =20 static const struct of_device_id of_k1_ccu_match[] =3D { --=20 2.52.0 From nobody Mon Feb 9 09:01:14 2026 Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8398723BD1B; Sat, 3 Jan 2026 07:27:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=140.211.166.183 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767425228; cv=none; b=RPaVOg10osTN/nRCx+J2L8KY/l2aYmd1nv20t+ot4tLG6JT4St+6of/u3+TkdrD3l08jcbgioHslojiwnZFdGsw0Pd+Kjywqmp8pXPQfRAPT3s6TafFeQH5FmJCRhT6RL2vvcPdXLAKy79az6S27px2ERbZ30i74TjXl91oRmy4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767425228; c=relaxed/simple; bh=zX/4qEo/Fm6O0cbgUCvQ6GVe+DPSF8s25eCUmnf2qUQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pfXzB2vyKmuTtE6iQ2nmnf2C7H4uLkpCMnl5Ia7Vd+mG2dV1a1Q8l4cWFRETC135125RXMnmoWxCGIKtP/JOzDeYKkQdun8rqesqzGF0WgLlUq53+6iBowNhMe8ISLXd+zQo8upzHxcCXeknPNdfqcFwJWnslxEiwd6f7iQS0IQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gentoo.org; spf=pass smtp.mailfrom=gentoo.org; arc=none smtp.client-ip=140.211.166.183 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gentoo.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gentoo.org Received: from [127.0.0.1] (unknown [116.232.18.222]) (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) (Authenticated sender: dlan) by smtp.gentoo.org (Postfix) with ESMTPSA id 3B42B341E7B; Sat, 03 Jan 2026 07:27:02 +0000 (UTC) From: Yixun Lan Date: Sat, 03 Jan 2026 15:26:15 +0800 Subject: [PATCH v3 4/4] reset: spacemit: fix auxiliary device id 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: <20260103-06-k1-clk-common-v3-4-6061d9f69eef@gentoo.org> References: <20260103-06-k1-clk-common-v3-0-6061d9f69eef@gentoo.org> In-Reply-To: <20260103-06-k1-clk-common-v3-0-6061d9f69eef@gentoo.org> To: Stephen Boyd , Michael Turquette , Philipp Zabel Cc: Alex Elder , Guodong Xu , Inochi Amaoto , linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, linux-riscv@lists.infradead.org, spacemit@lists.linux.dev, Yixun Lan X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=979; i=dlan@gentoo.org; h=from:subject:message-id; bh=zX/4qEo/Fm6O0cbgUCvQ6GVe+DPSF8s25eCUmnf2qUQ=; b=owEB6QIW/ZANAwAKATGq6kdZTbvtAcsmYgBpWMStJpUS3UYf8rEdkVomPqtVtP/dlWvqu3wkk P61QmbryzKJAq8EAAEKAJkWIQS1urjJwxtxFWcCI9wxqupHWU277QUCaVjErRsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMSwyLDJfFIAAAAAALgAoaXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5 maWZ0aGhvcnNlbWFuLm5ldEI1QkFCOEM5QzMxQjcxMTU2NzAyMjNEQzMxQUFFQTQ3NTk0REJCRU QACgkQMarqR1lNu+2J2hAAgFknf+s5p+06k4LgUhusHp3VVobF4c9Ii57EJgYVCXhghn3K+8frz O9iEjLi9fy/agfM7hJ6b8xQvsh5w6BxatapMh3zymUh5pBBLOVo+LnXqRYe+fuPGIW2RRRfBAer J9zl0KF8hcVilKY0B2JJno5PXekPC7dUR+qxVuDK/18+v3yKJ3K5d45nrGN4Uh3P6gUi9R2w4wt bmQx1YLWCtwzBV2+CygujEeo+qOw59AaWRF0XNJyYdVY5mqtIrbE33y3ikGe469PqW/Bx7p7Klu y/4E9N67amhGD7N97K3tm9mWTTT6XQkEiEzanxCyFMhgQOYnaD94IZIJymhXn6Kq4DCH3BD2GEt oR0JCU08ymWVLfkI1H88SB3V1oOFDMY02YwDeL9KNsuCllmOFl6Eu8iNSXx33tZ5d1uzE6dVtXD ZQuYapz+I4I5HtTVUD4702GSZdl/lSVIw+8tAGvworOatDk/OHtfkszR5Z35cGC0pd75K2H/PHw p/Sz1bhFXJNRg6j7CUS4x1mlyZ8pX0Q85f1hFnfUm0ayL3K2z8H6rjINYUcCsBhlq5Wge8fM1Im XYeMTt4NBbwFSKHLarOdZMkXvbsfiURVrOpVZ1tha56olIFZjWQddiVo/tpdNTwIvD4gjoWnmcG 6t9BkJHm3mJttAf0N73Wwa9Zmc1OdY= X-Developer-Key: i=dlan@gentoo.org; a=openpgp; fpr=50B03A1A5CBCD33576EF8CD7920C0DBCAABEFD55 Due to the auxiliary register procedure moved to ccu common module where the module name changed to spacemit_ccu, then the reset auxiliary device register id also need to be adjusted in order to prepare for adding new K3 reset driver, otherwise two reset drivers will claim to support same "compatible" auxiliary device. Signed-off-by: Yixun Lan Acked-by: Philipp Zabel Reviewed-by: Alex Elder --- drivers/reset/reset-spacemit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/reset/reset-spacemit.c b/drivers/reset/reset-spacemit.c index e1272aff28f7..cc7fd1f8750d 100644 --- a/drivers/reset/reset-spacemit.c +++ b/drivers/reset/reset-spacemit.c @@ -278,7 +278,7 @@ static int spacemit_reset_probe(struct auxiliary_device= *adev, =20 #define K1_AUX_DEV_ID(_unit) \ { \ - .name =3D "spacemit_ccu_k1." #_unit "-reset", \ + .name =3D "spacemit_ccu.k1-" #_unit "-reset", \ .driver_data =3D (kernel_ulong_t)&k1_ ## _unit ## _reset_data, \ } =20 --=20 2.52.0