From patchwork Wed Feb 5 09:49:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Peng Fan (OSS)" X-Patchwork-Id: 13960757 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E41EFC02192 for ; Wed, 5 Feb 2025 09:55:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Cc:To: In-Reply-To:References:Message-Id:Content-Transfer-Encoding:Content-Type: Subject:Date:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=YuO9we0+22ZHGv9exjceCoS+0fKOhyayQhSWy+90s9s=; b=4EmAw2U7QohqdF4LhUB9pQ76H0 KscD9Sz3yxMzpOeGF8/ZgTCZl1pgh3AQFhwg6xZ605VElCfkqwHJnlPJnSuheEr4GE0ngAtdiWWwF dt+6wUlYS5tWwmxqvKKHcYtrizkJkX2T1TecLDvAvnCM17n50ncqWPGtHg/Xk6/slP2s47F29Ro4u xQqMIYik32stqh+zDF3oOB+e46Ef04SRvG+2QTGeKOC+GTKVJ+syev3OAeMdpNTUqLGQGZL2vLcBg GDpkYucJEwONwAa7oJRAsyHnOP6odNTp2AUQvTx4AzYq77D3TYJB5438UkzYsaj5iu7DryXDhd6/n aJjC+3CA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tfc7c-00000002m5z-46aj; Wed, 05 Feb 2025 09:55:04 +0000 Received: from mail-northeuropeazlp170130004.outbound.protection.outlook.com ([2a01:111:f403:c200::4] helo=DUZPR83CU001.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tfc3i-00000002l9M-2YGE for linux-arm-kernel@lists.infradead.org; Wed, 05 Feb 2025 09:51:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Mz9MdULP84EmHwaMJnTFfAdHXzJikGl0iO8GJJ2RVy7dwoKOrIhcWpdPeZ84uJDnfChz9Y45b3xm6oVwKIJJYeYP/NdfUp9ZPz1ooagQq1U5ztmK2Ckw05BBd7U3Jjzv9jclLhPZ5SICingpsf9QfD5gmwZtlG1IdbVlU0CE3VRAG8bpwXv+H2aXaijWMYpQFprgdX0hJ4p9gnZub/Ngxc7PYJ8a6lIrEgdrbsf460VdxXMOTr3C3Kblzbkj1oUZ9uQmWnQnPiT5XN8OBow4/8dJJ9u6bSbRsEX1ETbMOOkP3eMzhrK88FseB4SqhiKHtrvnmoEw8HLOvtwmjxGV+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=YuO9we0+22ZHGv9exjceCoS+0fKOhyayQhSWy+90s9s=; b=h6G7vH4dfTzekbZJVDW1d0afSTM51J4/1cuB/8m1ass9avFyvYxgJAPfMQFXJIn28RBTnvoPUcBfMQxJC4Mqr4g/sfxqZR7C9HwOYvI5bT8CyRY8bAPLIVNl6X264MR1mOMdUSKOtqPizWIPrphVgPH1qvms4NGGhCEOZwAOeR70rRximpssBXa142iAD98sW7rAkwEgkD6/umVZZiWZm1U2C8kp0c2/Z2xoLeuZWfG1DK9M3J4D6XUZQyLqN23aBGuS32eR1x07EMdj+spRF59ibRk+dX7ZoFJ/Rf56TIv+fBvbfS+MvZgWLGh659ih7xlznivUaKlCLVA7eToo5g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YuO9we0+22ZHGv9exjceCoS+0fKOhyayQhSWy+90s9s=; b=ixnZ8c8nJU+u5STbOYJpaScoi6eeRyUgkbnUiH2f8iVvR6LPQP/dmHJ3jIlYv6JlXkIKwvgpqodRt2+hsxi//0rcm0zwaBDM5oanBdvcmL136FKJBwtNVnhHB90GRRfG/Xpet8qK74pWEjU67xYNx+2teeauzxoKGo+MzJRDTKy2YWzBRhHq6LAWUCPf5pRKdCIWjTFnnihd2nFBDhuzP0p2jz73MttH6m5vdB5zaXMnV9QV9mdSf6VPZtDfHAcAS8t/5PhnHVokWYSGP3kbk2hc+0uTiAXr8W84BDtD/sCHhh/HZpe0StXa3HEIZWOTuF42uirQSek9PkZTdup5tQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by AS8PR04MB7783.eurprd04.prod.outlook.com (2603:10a6:20b:2a4::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Wed, 5 Feb 2025 09:50:58 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%3]) with mapi id 15.20.8398.025; Wed, 5 Feb 2025 09:50:58 +0000 From: "Peng Fan (OSS)" Date: Wed, 05 Feb 2025 17:49:52 +0800 Subject: [PATCH v2 2/4] clk: conf: Support assigned-clock-sscs Message-Id: <20250205-clk-ssc-v2-2-fa73083caa92@nxp.com> References: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> In-Reply-To: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> To: Michael Turquette , Stephen Boyd , Russell King , Sudeep Holla , Cristian Marussi , Abel Vesa Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Rob Herring , Krzysztof Kozlowski , Dario Binacchi , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , imx@lists.linux.dev, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1738749007; l=2974; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=uyR6TUrIVOws23hW9VEyZgxU8YuEl7WFQo0HvLWbyc4=; b=ebQ0jEbKo5D7iWUb3MyG5+W2cVbDnOEijoMz0TP1SKmacytUoZBo0QxxEmQ4waH5ib3/g5OGY oIfx8lApQDLAw744xT0eusE3G7R2FQMwBJvg1+z3cyuDAr6/9skcDR6 X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR02CA0037.apcprd02.prod.outlook.com (2603:1096:4:196::8) To PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|AS8PR04MB7783:EE_ X-MS-Office365-Filtering-Correlation-Id: 46efdc5a-3bbc-460a-8941-08dd45ca975c X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|52116014|376014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?Dh+YaKXzMxiNEqw5xWHNinOaoCdHE2J?= =?utf-8?q?Aos3rq6Ol/wz5aQ9AeSTuNcD4wFCnVmYq+b7BKjfYWlA2N5lMJapzvt3o5p7CQ7+R?= =?utf-8?q?KWjnJ0/LJmkh0qFj4T4O0fArUyGa1WBZX35B+fAQvWJQ82Qrc2XZ+XIQf1t5GPGFj?= =?utf-8?q?1gPU3g9+KIoqpdi2NQx/svihyp0yHoMM9K+UKU3b+qh4dUrP23TVi+bXtoSQ1qnbD?= =?utf-8?q?lKejbNdAnA5khXFC39QqbCQklkMMq3KhJm3S2qXS22CSnXbDAGXr+zs/zSdxIh34k?= =?utf-8?q?inNWiUroIz8hUABmjo4O+mhG4N2Cnbwg455fCZPfzvmA5KsRmgXHvkuI3AjfZkmDk?= =?utf-8?q?Wj1k0MhxEa7m54CsMzBe/LRgRw4HhPU8gAcZs0zqMUkHNu53rRrWhuRQcljMWukP7?= =?utf-8?q?aHIjK5IKzx3gUgIlEdcUnDAd8vmFPOGk6n7V/u+AAp1193CMo6LDguGa0RG1lURmO?= =?utf-8?q?DhY57qemp/7tdVo+MIaOU7T4LctaDaHjWH7zf5oT1pXOAHCQ6kTo0xrdjfd5BRL7t?= =?utf-8?q?DbREA1XKc7yfL3VgP5O7ocIdEiWM/KASMi7bvqJ8PWNPln0fnVdBjIAqizyU5nG4d?= =?utf-8?q?kbZvNxQ5nO3KsIXv2nwOtwmYBEJUcVbp3wnmqbnDvCLXsI8YBpdRHb3VooyZKQ4MY?= =?utf-8?q?2T23JMK7rsDTge7sa6tCwf8hmqJuWHyh/s93OeKmEIOlKNQTE3AtZDu5VMtYNCL9D?= =?utf-8?q?I1b2/uufBqgMhGM4Gg3svv5JX2K7dkK7Kh3bkJKE5pzHdOgbKUqJmX8mzfi4L3E6W?= =?utf-8?q?D0cL8hwwFgO6O02Xt1Q3M+E3l6buJpbGUdzzzDYxn0E1JfrcS01IvCwQV0izfPQSk?= =?utf-8?q?dIpdAmtArbiYsUU/f+QM1hvI+DHuHovgiIwzrQy2QlkV1k7kYEFEwa0oLYanrBbJS?= =?utf-8?q?o8F4qx2SWPCVfryZSLLzyK20Ymoe4qivNQTFpq5LS15SKjJ+7lMjR5ELj23zSusCh?= =?utf-8?q?ap/GAt781V6l1qisS9SuUf+Pd/rcKViQDUPJSk7538bW+UwKwqaqH0TNRlMDGWqiy?= =?utf-8?q?08tPcfhp6TZCvgMbQcinVtgbZRdKRVKc2hOpcMmoX4tD1mLkrenHoWnr1OL4fVW93?= =?utf-8?q?jz3MDq5qah0wLrCl+KJ/kUkuPKi9aGECm2HnsJMntCYoBMB7YIDUUCgJY+xQAbgjs?= =?utf-8?q?YCIqylN3mtZN2oTzfLVJe+VJ6xv+o2tp70xok7CWxG9U7a8/y5mY0pVcZOg6l/q8w?= =?utf-8?q?i3UrOfLaXGUT0VWV8dON5jqD3q3DrGaHOJo/bD2ceEIIMSv5+GxE0QaoPDg/a/DDf?= =?utf-8?q?gc+uzwJl9n3uAkToEBwA0yGfvNbi5hFpLMUquTEHQ1v9KAAzGNQDA+p8HYmxIQTQE?= =?utf-8?q?19kyI6Uk0fBI+kupLjkJGGrI2Mb2HgTFjj0FkBN7ZVbjLzyh3MAQ6N4YgH893wbnf?= =?utf-8?q?XX4vcpg//fb?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(52116014)(376014)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?BZl5KxHcx1ijVA1F/5o9ugKNB9e5?= =?utf-8?q?jMP/8djj+a0avV2Yz0uqsXcERgw3duiRJHSEuk3MlMIksrMUCfso9l7ygMZgs1qOA?= =?utf-8?q?YVmWy1H/6YOLaZxD5/tnKgyVBQt4Jqun5od0rzoGAfceI3Ql7Gf7zxQwJEiTcVUDI?= =?utf-8?q?cG2ByvxuvN8CL2eqgjjAay/5jFTbT+WNirC+ihG3Hl6EbhT1bwjQLHdbgm77aqHbq?= =?utf-8?q?UTGf8YL+C2vdLHLxKpTbCyYRoLjKNBLbiyR66XH3TSvan7x/E4ICMrzVpkV15NvCS?= =?utf-8?q?kJ9DWAlh9MQLAenHvRsWm2TCkKYRLqNFgfn6n+VUThroNv0MACAtbzn9AXWaxo3kE?= =?utf-8?q?1zdXMAskdtHFCGhsvaH7cBYC4eQQri3pPMuo2sr4d3qZm6/oxBwYmHIrGoOfsZf/4?= =?utf-8?q?AGy/d6hY16qUVwgnbBens7mGyutEThX1i3fbnOfHg5xupyaFO23VpfO2/3nIqKBNT?= =?utf-8?q?otOibq8nXEp/+uUE5OcZXNgv6DH/OwOZv84sXNZwHqkWxv+KH7jwXQEWSr009VCgz?= =?utf-8?q?xE4vQU+R/5IJhGzfL7Z+7gw+y/AbbuX/VqxVQSi1oz4/hhFUcT8qQf+3oBNWp8gez?= =?utf-8?q?3yoTIrqb3Cr1vi6rze+D0ASu17b+muoGrSe1gCIEAoavZAquhMvgEMRNRveoiqGJD?= =?utf-8?q?WFtVUCW3fLX8iuAY66O1GE7lN3rYzE+OSf+4nEypfXTCaA+h7QC2WxaKu6LExOecs?= =?utf-8?q?AMg6CnaiPpQTWQnG7Aq0loWS6hjvWfZkRY7sLXoLox1UrX9IgpPHUGeTV9QIaO3Iy?= =?utf-8?q?kKfWIUsqBmYlYQmXmsmVUDUkXZ7z0oPbI5cAwto2yUz5m/W2O+lKMIWrDyVRYDQcD?= =?utf-8?q?PH2HDktHSK3+4VY1350/QF413NZlZEmF9/A6zVSVzdN4Ks9w7DplZG5lU0byZmN2D?= =?utf-8?q?+2827pJ63puIKd34WbNLiBu/QoLwFWBntHFXUtA3uQQaHIyYIRZOQU6uexuSoiwov?= =?utf-8?q?BIh4yEUR1Wvbr9v6fyE+QzaMp02C24MjnyZ30Xi1MTLnSk5K6/MljDEv5ZnAUfdO1?= =?utf-8?q?KZ9kvxRLEy0GRVKXsgY6vIXWaGdaiGQCKSADiDVUj7MepL6QwAOdQDNscC4DHftfH?= =?utf-8?q?sE5tNtA552v7wuQbabALiUQbGLibNnB5aKtuLTFAabl1rH+rOveW3/0JtZjM1vguo?= =?utf-8?q?6jfj6/zmihnm6o3eiQPEuZ+m2avuz7LhBWraNrfqjY1QuFPOGAw6z46ydSTIFe3Z6?= =?utf-8?q?JUNMNf/nQItfoAHdgtM3XgeQjDPRksokxrXE79UFjDgIt6J9Zy3XIRc4etMDC5y5O?= =?utf-8?q?kPzBqILqr8vkhZ2TDh/WFVZXuTyAXgyLYUu+yGd/5bF0imcW3LfhtSvAF83h7Vv/P?= =?utf-8?q?Dc5Lo54I0Xfq40AzPQHMM47nEppv31EOsTLa+SQFJExQMmMI0fSpPtMEuy8akK4NM?= =?utf-8?q?HZc2I6zC/zzDKVysaQtyHi2pybJbtmmxdgzRe+4ZnVUkGeTPcZ40Y9mldF/NcxlIF?= =?utf-8?q?j/OD7FJlOF+y8MBn3mCQBn0oDyNWHRXaF/v0C5gxkL7nJqUA9q40BfY23n9c7shna?= =?utf-8?q?Oxx2a575K0hp?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 46efdc5a-3bbc-460a-8941-08dd45ca975c X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Feb 2025 09:50:58.3038 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Io+7gP/2CbHbE0mQuj9IAFvkuFaxq7r5rc2ij40yrAo7/tgzTFDcKovVext+nPZtZhFJYPMNsFJIOi3cMOs/fg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB7783 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250205_015102_725830_9C0C64A8 X-CRM114-Status: GOOD ( 16.77 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Peng Fan Parse the Spread Spectrum Configuration(SSC) from device tree and configure them before using the clock. Each SSC is three u32 elements which means '', so assigned-clock-sscs is an array of multiple three u32 elements. Signed-off-by: Peng Fan --- drivers/clk/clk-conf.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/drivers/clk/clk-conf.c b/drivers/clk/clk-conf.c index 303a0bb26e54a95655ce094a35b989c97ebc6fd8..9046a7710236839a30a72dc15c5fcebdbed5e9c6 100644 --- a/drivers/clk/clk-conf.c +++ b/drivers/clk/clk-conf.c @@ -155,6 +155,72 @@ static int __set_clk_rates(struct device_node *node, bool clk_supplier) return 0; } +static int __set_clk_spread_spectrum(struct device_node *node, bool clk_supplier) +{ + u32 *sscs __free(kfree) = NULL; + u32 elem_size = sizeof(u32) * 3; + struct of_phandle_args clkspec; + int rc, count, index; + struct clk *clk; + + /* modfreq, spreadPercent, modmethod */ + count = of_property_count_elems_of_size(node, "assigned-clock-sscs", elem_size); + if (count > 0) { + sscs = kcalloc(count, elem_size, GFP_KERNEL); + if (!sscs) + return -ENOMEM; + rc = of_property_read_u32_array(node, + "assigned-clock-sscs", + sscs, count * 3); + } else { + return 0; + } + + if (rc) + return rc; + + for (index = 0; index < count; index++) { + u32 modfreq = sscs[index * 3], spreaddepth = sscs[index * 3 + 1]; + u32 method = sscs[index * 3 + 2]; + struct clk_hw *hw; + + if (modfreq || spreaddepth || method) { + rc = of_parse_phandle_with_args(node, "assigned-clocks", + "#clock-cells", index, &clkspec); + if (rc < 0) { + /* skip empty (null) phandles */ + if (rc == -ENOENT) + continue; + else + return rc; + } + + if (clkspec.np == node && !clk_supplier) { + of_node_put(clkspec.np); + return 0; + } + + clk = of_clk_get_from_provider(&clkspec); + of_node_put(clkspec.np); + if (IS_ERR(clk)) { + if (PTR_ERR(clk) != -EPROBE_DEFER) + pr_warn("clk: couldn't get clock %d for %pOF\n", + index, node); + return PTR_ERR(clk); + } + + hw = __clk_get_hw(clk); + rc = clk_hw_set_spread_spectrum(hw, modfreq, spreaddepth, method, true); + if (rc < 0) + pr_err("clk: couldn't set %s clk spread spectrum %u %u %u: %d\n", + __clk_get_name(clk), modfreq, spreaddepth, method, rc); + clk_put(clk); + } + } + + return 0; +} + /** * of_clk_set_defaults() - parse and set assigned clocks configuration * @node: device node to apply clock settings for @@ -174,6 +240,10 @@ int of_clk_set_defaults(struct device_node *node, bool clk_supplier) if (!node) return 0; + rc = __set_clk_spread_spectrum(node, clk_supplier); + if (rc < 0) + return rc; + rc = __set_clk_parents(node, clk_supplier); if (rc < 0) return rc;