From nobody Mon Dec 1 21:29:55 2025 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011063.outbound.protection.outlook.com [52.101.70.63]) (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 74A7A2C3769; Fri, 28 Nov 2025 03:14:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.63 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764299675; cv=fail; b=fLZDZFFAJ8B+0AHTBUzB0ciKyZxKEPp6csEYAruYVCYxmzKnu1rsjZe23HUlbPRggKhdxrCs7ZDVKuxnJp8bUfaSA6RLvUzULNjQ6p6XFaC3n6482NFnC4O1fUeRH2KOw72Rxg848lmgJNw0P4ATJfB1QIKvUzzniBZdy/e+0DI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764299675; c=relaxed/simple; bh=gWpGlSUweXzK5Eq80tcO9lZqrJ3hL5QibReFJkBecdE=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ZWJyQUudNpMXLm8FOM6jUV1PvCLu/0bcerLsnjUzb7PHYSQiI2rIWS95qmakr0n8RCKRNVnoNPcELyFqio/uRB3J5U7C0fB67o5wGiBWaWF78jzBiS6MmCYDCBBbkWEHtFdvfB/jhCW+frenOwABrgpI6xMr9590WhoWxefNG1E= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=C05Q2Qbn; arc=fail smtp.client-ip=52.101.70.63 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="C05Q2Qbn" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yxzaW3eFtGFJgyiGMWyOEU2aaK0Y6GarSHhY5eHxmIaF3dAxC9E/EhtKZm3K63Z2grjWtlkFwhya9i/wfGHclw2xSdkiaVt4eajjfY8O/9L5xLpQkeNmguiAW/uYpQXQrD650uSGI/eU1pBUvI/BeKpfA38IfTbIgBXxGrwkzWGgFP05jGWLzljBWaCtEbOjpWpXTHO3e3HG/VOQ8Ml6MAf9yN8A42JBZivKknCrd3XqiarkGOtrZcZEwIgDOK8c8Nwy4Mve23AomuZjktpI3b75gOr0wU8/AjhszEb2rIn4WV0YAl0KuYx9UBUBo7OtisnW/47A0oNWuXtFEc1Uig== 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=W7mrPE6FWDgG20UprDHcXbB90qG6Rs9tldg9oClPTpI=; b=Fh9RkSumNG4Zj/qwmeOPBvb5ZlyiHL2L5vkoUDWz7bBcPYzfqpLzWFBVoXIxSjSYHjq9L12hwr2pn3ezpPUYUvVzS37gMMJRekjjsY99/FzndzRd/Tr7anPu6wE951W+fsGe45XR3h74YEzj4g/X4qAr46wsjySBAFmfdHGCgoANUaN1U3VzMBKa5NkGxozFm2ow+iTH/wY30e28bL4bO+r/ib915rigQx3wEfJ82AUcwWASiZTWhKX5AlU1YYPKkGnnQeuvLe2k1gcij5dH/CMlf9/zlLly3sDojZ5l/g4F1/919dryBD3Yc1V89lGPRbnonF5J02M5G9H56546YQ== 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=W7mrPE6FWDgG20UprDHcXbB90qG6Rs9tldg9oClPTpI=; b=C05Q2QbnP9hqpsWr12iQUNDCl0V7+mzPRS48GgEc3dMyvNOcbXtoKl5QRcwDK5Lda4BQsDWIDbQo4wUS6wT3MLYHzjWw+1tKrJMUvjbZxqm3cQVqCWwKboZ4t/xEt1w9AmX6OLdBspnQ/O3u4bLXLp3HtbMaUxIdd5j1KZpuG5IiEKWMIqVzSnQj++tF5/TKhjC4ASTS3aaff5SxpDXDJJ0Y7UEqExbk/U5qYrH7/0RFlbqAh45snNJsZdq5dsFx+D5Xl7GOJ/lml4fBnJhRgtrMWPFYyiAQ8zFVIzIBCI25v9Ptu9Ym6yvX/8P1dMm8K8Otvudb8wZklKismPK6aQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from DB9PR04MB8461.eurprd04.prod.outlook.com (2603:10a6:10:2cf::20) by DB9PR04MB8429.eurprd04.prod.outlook.com (2603:10a6:10:242::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.15; Fri, 28 Nov 2025 03:14:30 +0000 Received: from DB9PR04MB8461.eurprd04.prod.outlook.com ([fe80::b1b9:faa9:901b:c197]) by DB9PR04MB8461.eurprd04.prod.outlook.com ([fe80::b1b9:faa9:901b:c197%4]) with mapi id 15.20.9366.012; Fri, 28 Nov 2025 03:14:30 +0000 From: "Peng Fan (OSS)" Date: Fri, 28 Nov 2025 11:14:10 +0800 Subject: [PATCH v6 1/6] dt-bindings: clock: Add spread spectrum definition Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-clk-ssc-v6-2-v6-1-cfafdb5d6811@nxp.com> References: <20251128-clk-ssc-v6-2-v6-0-cfafdb5d6811@nxp.com> In-Reply-To: <20251128-clk-ssc-v6-2-v6-0-cfafdb5d6811@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis , Brian Masney Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: SG2PR02CA0031.apcprd02.prod.outlook.com (2603:1096:3:18::19) To DB9PR04MB8461.eurprd04.prod.outlook.com (2603:10a6:10:2cf::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9PR04MB8461:EE_|DB9PR04MB8429:EE_ X-MS-Office365-Filtering-Correlation-Id: 5ad2ed14-a343-41c3-9e06-08de2e2c3f2e 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|376014|52116014|7416014|1800799024|19092799006|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?RWwyUUdDZU9PaHBYdlZ2UnJwQmVJK3NQWVNnSURzYTB1OTkxSUFtWmdJVnRm?= =?utf-8?B?MG9nd0VwUGlWZDlpdEtTQ0F2S0tpc0RFN3FzVkM3Ukpma3h5TlFSUjBrL29J?= =?utf-8?B?T1NmaVFveFBGUEQzZXlYQ1FXRlNIeFVzU3pGM0UwaGJxb3Zqa2tvOEkxcDdq?= =?utf-8?B?WUloSWIwczN5cUZsZHF4emh5SlYzZmNoM0pxb0NqY1JrQnYxRTVPMmo5MkRD?= =?utf-8?B?KzdEdmRiVWtrOExIajhUUFE1VWhHS00zZFg3OHF5aEFlRzQ2cjR6WTVBUjZT?= =?utf-8?B?Wlg5ejFvTjV4MW5OOUI3M1VsM0pNYll0S3didkt1MjM1bEhBZnFKaTlaeEc4?= =?utf-8?B?ZTY3dDNYNWhoSWw0dkpYQzhsUzFTOW95OTNVQ2daNTZxNFZ5emVqTTcyK1BZ?= =?utf-8?B?ekxNUFpDa01tWE85cjhwZ1JMMVhLRUpKYTFObzNhVmptRVRQcnpnUHZrMGdv?= =?utf-8?B?eGV5R1M3Qlc5N0NrN0pZUnZsUjdDNUQ3WW1Pano0NGQ0a0pSdFZKN0hNbEhF?= =?utf-8?B?eHMwVzRhaStzb3E5M1dTaTFIQ01jb0w2SkxieWN6T3oyK1JmN3lpYjhSdzFs?= =?utf-8?B?c1RhaGJLanF2Z1J3SmxlSHFsTzBhd1l0TVlseEhTeDcwRU5vb2VMeCtoRXhp?= =?utf-8?B?eGFqRlZZaFRJSjF1cE1rREQ1VlZITUJpdjdpcXdKdytUTjA5YmhmM3RBdTZN?= =?utf-8?B?Z0N6WmJQazRvdHgzd0wrN3duelZUaCtlcHN5NHM1cTdvb3RveWlvdTlDRDBN?= =?utf-8?B?dHZMamdEQVJaNlZNcDlyOFdaaGNDcFowRFkvaEJueUU0SjdoM0FUTENwNVB0?= =?utf-8?B?RjVLRnhnZDltdjVOS2ZpYkkxUDduTTJOV0xkQ0N4S3BzNkNrQjZrU0RPY3VO?= =?utf-8?B?TDE5T2xiNXdZSGYzTExJM0dmSkFkNktNenVTYWtQTTdwWjlvelh3czk2bnhZ?= =?utf-8?B?MkdCb05PM0hMcG5QdHhTLzQvT01TK1BReG9uRlRTaVBmWTBtdzJ4VWsrTUpJ?= =?utf-8?B?em5uQnR0TTU4MXZuMS9EYTh1SG5sRGRSTWwraDZXV21TUFZabjVxdFpqUU5U?= =?utf-8?B?OGhoRnoyQnV0ZjU2a1lxRlZ1bjVHbXFjUXorcmpsdXNDWjZvTWw4L3pvcEU5?= =?utf-8?B?SWxhSVZuMFNXNk1yVDh6LzZqWkh2bUpPai9heEVLeWZJZ2lRWVBVa3ptd0NW?= =?utf-8?B?aWtSZkpKREdqWTZKMXJYankyQTZYM0JXZXRSNUV0cXlScnFZS1RsMHRDOHZG?= =?utf-8?B?N1h2RjFJZytFY3lCWHFwUDFMQUNkWjJmNWFhUmtSRyt5MG1DQytWbGkxQW1X?= =?utf-8?B?QTlvcEYyYk9qc1ZKOG9vQy9MQVpIb01Xc0dWdkoyYVo5OFJTNFVUaDNtN1RD?= =?utf-8?B?RmhDYkNIK1hQVUowYnJwN0dwVDNWa2gycHRQbTVZN2FKaEU1WklzZ0xzTGlG?= =?utf-8?B?OGJLWGU3RC8vWHdSckpjYndzVjc4Ym9HSENCVEZuU3pCNmsxaGdRMjgzblY0?= =?utf-8?B?WmlMYmJMLzhRYjlEL09xUTVDZ09henVtdE5Ua3pYdVFsSjVCWm9rNklucTR2?= =?utf-8?B?TzlGVkpHUDBrbXVObWRUU3RlRlB2eFAzaGpaOEZ6YW9rTG5yQkVkSGFBMkZ2?= =?utf-8?B?RkNxS3NVTHE5S1A1TmNEN1VyYVI4SFlvak5LL3U3RzcwdmdncWlsbWYrUzMw?= =?utf-8?B?VGVXVVJmeWNIb1JvL29ZYldWUnQ0L0tjcWdvc2FpK24wa1NpSGhCTVllc1Nx?= =?utf-8?B?Q0VISkcyR1BZc21oS1RUWEdOQTAxWlNGMlV0QkVYQ09Yck9UeTJzbFA5S3Jr?= =?utf-8?B?ZXM1eEVBVnhjcHdIUk5FMDdJOUNDYW1ZRVI1ZDgyS0c5bnd4UUM1aTlaUStB?= =?utf-8?B?R2pWekhGN2Njb0xYUi9UTHBpTjdldDNHOWxiUU5JVFVWZ3p4bmd5UGpncVFq?= =?utf-8?B?ZytqTmxVQ0NVcS9ITFlOOEFXRXVoeTBGSlhKWTJIMk01aGJGR1kyT1UvbGpN?= =?utf-8?B?bzdTbFQ2dXAvbkZ3MmhPQzN3RXNxcWJuMVNjVzYwR1M2Zm8xclhRL1FoWXlB?= =?utf-8?Q?TlhMVs?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR04MB8461.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(7416014)(1800799024)(19092799006)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aEVOREt6VWFFUm5iQklrMGZiU0lXeldkYmV4YlVKZG81Mk8wS3REL2JKd1Y1?= =?utf-8?B?cjBFRzNXTVY1emc5RDZGTFpLWFozMjIyK1VIeG9CUTc0ZXpmTitiVTd5Kzl0?= =?utf-8?B?QU5pNFZrU3E1VEYwbEtNTDQ5dEM0dk5DalNFV2FsU0ZRMkZjNy9jOEZQVktF?= =?utf-8?B?UjZhUFdialZ5a2hPV1IzYzJXeW12VzJVNFhNeVBvMEZUMjBtYmhhM1diVzJt?= =?utf-8?B?bTFxcDI2ZXY2VXlhNDdmTGo1ZVVhMUMrWnAvNThHWis2Zyt1anVpTFpGSC9z?= =?utf-8?B?c2pON0VsVGNXd25KeUZ3d2xJOWJSc2hGdUl1eVExWGNreG5yUlJCcldEWHBD?= =?utf-8?B?N2gxMkh4bndNY09KaUpKd2htQ2pwQ3JhbjgzSEZ2S3dvWWllcFRjeWlESTNN?= =?utf-8?B?c29iZllKYXMvWTJocVE2ZDRsVHdKZmd4VFZjMTJ2UmNsT1VaQlRsNVRyVHcz?= =?utf-8?B?QmZEYWpEQmQ2cE8xWDU0NjJCaHJRODVtL0dWZWxFWTF3TkxyNVMwbDBaZGlB?= =?utf-8?B?eWtyOTRQeGxWUmVLZW5LTjlVbjBKS0JqcmJwS1BzNFdLdy8rRldBSVBvZWJQ?= =?utf-8?B?K3MwUFZRY2l6a3lZaGRpOTZoZU9ScmxYN1RxVk56SUttamdQSDJFS3YwVWI0?= =?utf-8?B?bGdWMVNiUGZaa3NuaXpzbmFYZUxQODIxSWZtbDBPOVZPWWtxUGdyNG1ETDR3?= =?utf-8?B?TjZ5NkUvUG1CdDV1NVBUS3ljTzRodUFUMUtLVmVEd1FvWUUzK3hKU3c4eUJF?= =?utf-8?B?NkErSjd2UDJYd21NMlcxcHk4ZkgwU2ZlUjFLaDdZRHRtczlkQkJVTXVqWVRP?= =?utf-8?B?T1ZkSVpmTjBKSEwxbGQreHFMeUlreUh3NTE3ODNzNmVjVlM5VjJPZCtIcmtY?= =?utf-8?B?YkhVZ3NWczBnUlVJeFl6bTRJVG9yVTVlTTd5M0dnTDlpK28zN2tHcnFqU3hp?= =?utf-8?B?elQzZ0lnOU1uTTVYSTdPd1A5WktMN083TG10SmNLN2tEZm9KMGtwREtTZ0I4?= =?utf-8?B?KzFzYWV5NG9XSGttS24vZlVtWmRaY3RML2FYNlRwMllDTG5UZ3BQUFY3YU9F?= =?utf-8?B?aUNRQk02QjNHK2x2bWlvQzJLS05VeDR2ZmFRT0lDRW5WSmJHVWY5aGxIVFhi?= =?utf-8?B?N3grK2EvMWxNMEIrakx3YVZQaVlPMW1nYkZuelE5STlJUzZhUExRWVB0c2tO?= =?utf-8?B?RWlJRytIOXFPY2tsR2hreTVDcFVZRE13UFN5RmRETVgwR0M3emhiWFFJNzg1?= =?utf-8?B?RnBieUJxMm53dFhTZHBmQ2FGQUtJS0o4a2VJbHBvNnllV2xHWE9aMHVmalpM?= =?utf-8?B?aUFjQ29ESkdWNU9uNnhaQ2psNG1hd0I3RERoZ3YrZFY0b2NCV3llVGIveGFu?= =?utf-8?B?U1ZzWG1KZ204SGVCdytCV0xFWXBTa1k5WTVvNG5Pc3lrT01VZkl5R3RlNkJ4?= =?utf-8?B?eHExUWpLazJRQjYrTjdzUnF6Mm9jSE1rdVIzT01kVlBGaHVtU2dRSlZ3VFBv?= =?utf-8?B?clZ3V3VCTCtMOWcvQnZGZS84cStEWHA3dnlnTytyWW0vWUo1NFF1SW1QVzVO?= =?utf-8?B?OHpEZDBERVE0ZWNJSVlEdUc1ZVh6SlZxOGdZUXdkWDB2T1AzY2M3YXowWlFC?= =?utf-8?B?QTdETnZZTDhGWnVDN09SdlExYXZCK2pya3dRU3FLNjI0YU9YQ0swMTRrNHBy?= =?utf-8?B?aThiZndIeG5vUVJhSEdpZ2dkbDYzKzNUOWVnYXdqZS9TZXJzWnNheFJqdktt?= =?utf-8?B?MGNpY2ZLU2t4dkU5SEFkN2Z4bHphWmZlaUw4anFMeG13Q0huTE9PQzJYVCtq?= =?utf-8?B?WkVCT2FORUtBRzdoM25SV2FvanRlb1pBRlVKVkFYRkdRVW5LN1h4S29JOW1H?= =?utf-8?B?S2VPN0pMdFViVkFpeksvaXFrbG5wTEJtMjJwQ0FiMGtPZXpYNDJIZzJjS0xT?= =?utf-8?B?dTBDNGt5VE9yMnJWWUZzYmVJeklROHdsZ3cyUk1aSFAvNU0xeXU2VGxwb1Ey?= =?utf-8?B?dFQzOEtpOU1FQm9DOTRLS2U0RU9TYWdteUhkcHF5a1dGN1hLTnFaK3JqWjIz?= =?utf-8?B?LzJQNHF1bkZEc1g1NHFlcUFNNm5NZlZ6My95UWxUUXk0YVFGeThvOGNRc2dJ?= =?utf-8?Q?fn+hFe2B/Rg0OHfHgh7YxJa1X?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5ad2ed14-a343-41c3-9e06-08de2e2c3f2e X-MS-Exchange-CrossTenant-AuthSource: DB9PR04MB8461.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Nov 2025 03:14:30.7860 (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: OATsJbUUZH+qwHdr5pDvyn5FtXCC5Qn1m3wlN1q2OY63terX0rGqQxFcZyaNfH+eqMo+lPtZSXgyO221wgmtMw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8429 From: Peng Fan Per dt-schema, the modulation methods are: down-spread(3), up-spread(2), center-spread(1), no-spread(0). So define them in dt-bindings to avoid write the magic number in device tree. Reviewed-by: Brian Masney Acked-by: Rob Herring (Arm) Signed-off-by: Peng Fan --- include/dt-bindings/clock/clock.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/include/dt-bindings/clock/clock.h b/include/dt-bindings/clock/= clock.h new file mode 100644 index 0000000000000000000000000000000000000000..155e2653a120bf10747bd7f4d47= f25e0493e0464 --- /dev/null +++ b/include/dt-bindings/clock/clock.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0-only OR MIT */ +/* + * Copyright 2025 NXP + */ + +#ifndef __DT_BINDINGS_CLOCK_H +#define __DT_BINDINGS_CLOCK_H + +#define CLK_SSC_NO_SPREAD 0 +#define CLK_SSC_CENTER_SPREAD 1 +#define CLK_SSC_UP_SPREAD 2 +#define CLK_SSC_DOWN_SPREAD 3 + +#endif /* __DT_BINDINGS_CLOCK_H */ --=20 2.37.1 From nobody Mon Dec 1 21:29:55 2025 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011012.outbound.protection.outlook.com [52.101.65.12]) (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 1E4EC2D4B61; Fri, 28 Nov 2025 03:14:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.12 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764299680; cv=fail; b=NYLPTVc9fY3TA1W28cW6FaOUE7T2hsuyOoHo/59nT6+qUdHhuUvviZroEFzFtUkBzcNnbDQFEBk1/4MP+P1sgDqixXp6n7XKPH+POQsIYL94uyn9shsc+vZBtmKHMLUne/KX+p8IHIZAf8f+Sn3SZpYn9QahZQDD/mmLE0LRPio= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764299680; c=relaxed/simple; bh=Mt/jrUUpbkLcQAhwBVHsez1FgJYBsRXp4+e3ep1kXuk=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=gea5T3RtfDnInjZeJoEQWD99FkpQqKvvvBhN7oapB+QyYhL4IuudomNFk1JZ/FUqhGpXefL1FutMGA+oL4gBYmXfN3SqHpsG4gXR/ck9NfPyytMm/y3vVNOac5CBDQX+BIzIH84WOFtli1wxKsim4OAhC+U3u7MvqEQqE676+lk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=UnyAlz7j; arc=fail smtp.client-ip=52.101.65.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="UnyAlz7j" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CNOGnd6y9/No8pCm+Z/IX0jWQdQ1OuGCu5eqanI85t0JofwkwAofNajkFC7JPz6SXlWej09INMwwSANAlWwU0WYGymD1Pj24E/hzYf4ea5qDY549+cv0BhAqlq4dDAoYdjpXO3XTp6vJaY309mV7hQKQIdD2x+XSOgsFwOU67phsWRpbOL9A/O6azlkhaYz00fVm4/74MLjT4Lrr73v2RAfiyU5/o/c+zpMgKKRX8hSy1XwN0iCFPx6e0NuqX8FVkoOI31Ig7JSqdVq+6K9e7xeQCaYot+UNmfggUrrBPnZ3c4V+LZHSX3nPS/9gW4ft2ciM3U0A3NoppZ8sBGQzGg== 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=2c5XWz8oWufzexQwuegXMhMlKH2LJSiXckPA8k6DY6Q=; b=OBidGPHrIxBswTJHGgPixCpjzL4yjiP5tWbcPXqrRii2dXz/7/B9a+KIy9W2llg4AUomypclF2zneAED81zSZLA0Fopde838xhK1oISMgSLaRCz8B1Ftm/e7oMfNmf6dpdv7kDATQbwmdrjGcwhU+bipTSfoN6WW71+3wz36Qfu0lUy8BIPkcmua9Z+YD2DR9WOdk4E3/YuhKwxbUEwfvnqjsLxducu6J1O5rpBH8Cp7NQfZLvr6fzOw8r/2KgV9iRk19FHTKAC/abdFDc031XFUa9O86CwevLrUAD3I2IIDRVFr8ZIB4i7irQPYoUxWlgcOIFUKuA0S+39CEGcG2w== 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=2c5XWz8oWufzexQwuegXMhMlKH2LJSiXckPA8k6DY6Q=; b=UnyAlz7jU1DnaYWOaExJ8D+cTskvzJIvN/5fv5XY6EgEm7oi2jTHW1VwW6pNAp5Oz6Y45LYUEw7GGIhJbvb7NsKmiYH2v76PjwmVjqXD/0D9EI6qc1UQJ/ZZYIO2VK8eIhhfvKxG3hjiZKE29oVXEGv0PHHnvUFejpUbm62TadS1NjASCoS9uD7n6Try3nR9C9uCmryWi51PeGX2gG8pKv5gEvA2vto57APf8Sr1jkLQG28ugutklMknNLUtYVJx/QQWQ3Kksu56Us3s+70AHwEEA/Vqqtd9DNacF/rC8Fbk95Jk55dIMLWfd4HPiayCopnmOwrPzVPAs4Upa9KgMg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from DB9PR04MB8461.eurprd04.prod.outlook.com (2603:10a6:10:2cf::20) by DB9PR04MB8429.eurprd04.prod.outlook.com (2603:10a6:10:242::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.15; Fri, 28 Nov 2025 03:14:35 +0000 Received: from DB9PR04MB8461.eurprd04.prod.outlook.com ([fe80::b1b9:faa9:901b:c197]) by DB9PR04MB8461.eurprd04.prod.outlook.com ([fe80::b1b9:faa9:901b:c197%4]) with mapi id 15.20.9366.012; Fri, 28 Nov 2025 03:14:35 +0000 From: "Peng Fan (OSS)" Date: Fri, 28 Nov 2025 11:14:11 +0800 Subject: [PATCH v6 2/6] clk: Introduce clk_hw_set_spread_spectrum Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-clk-ssc-v6-2-v6-2-cfafdb5d6811@nxp.com> References: <20251128-clk-ssc-v6-2-v6-0-cfafdb5d6811@nxp.com> In-Reply-To: <20251128-clk-ssc-v6-2-v6-0-cfafdb5d6811@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis , Brian Masney Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: SG2PR02CA0031.apcprd02.prod.outlook.com (2603:1096:3:18::19) To DB9PR04MB8461.eurprd04.prod.outlook.com (2603:10a6:10:2cf::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9PR04MB8461:EE_|DB9PR04MB8429:EE_ X-MS-Office365-Filtering-Correlation-Id: c86afbef-6ca5-41ee-9d9d-08de2e2c41da 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|376014|52116014|7416014|1800799024|19092799006|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?U2o0ckNyeGNucTVHWkZmY3VTNThZT2hOMElXaUwyM1dPK1FNQng1aENZNCtr?= =?utf-8?B?SzFjQnVTcHNSNlBlalBFYTEvdVFlZjNoZEJhbGlYb2NIcjlIcTBIcHJvbFBY?= =?utf-8?B?SmtrMlZEckRZb0w5THVQcW1obUkyRzJxU2lkQk43VTZzNnR1V1d0TVFTZjR5?= =?utf-8?B?KzJ5T3ppeE4wYnVQR09pam1uQ2xXbXJ6OUhiM0Vwc2NJWEhHTHdBR0M3c1F4?= =?utf-8?B?Y09zbW90UnYxb0R3SWJpNXZRbHNibUMxS1FaT05vNHcyNzkwcGpMT3dId0xH?= =?utf-8?B?NzlaYTVhQjc1eUoxQVVXOVVwaWhhdFphZ2w4ZUgxcXZJTGF2ZEZ1TjFFOTZl?= =?utf-8?B?bVh0SXlFRHduSXY3MzJCd0VBZUs5dnNjR3lKN2NEdDlZK1A3NHJkNi9FazZj?= =?utf-8?B?eTJHYTFTdktFR0NuUDVNd2tYcUtCTUU1UTVraXJNNG9VMjNjSFVieDRqVml0?= =?utf-8?B?d1h0TlhrMGNDWWJyWSsreU1Lb0tnN0ZVWXkzTjFxQjNYU1dIcnFIcTFxYURn?= =?utf-8?B?UUlwM3V5SnBVMzlUQmhTQzBUYytnT1k0VUN0eEZzQW82SW5ZT3pSeW9QaFE5?= =?utf-8?B?R3dBR2dSZTkvOER6aUpteFVySlNwSHgwbk54RVFrWEJsVHdZS0NtSllQd0Zv?= =?utf-8?B?WlZaT3ZESm9TTWQ1VFpyWEVpajNXN3haYklBVTc3SE90NVRYK01PSWhkaFpV?= =?utf-8?B?eTROcFo1VithdjRVd2hleUFDMVZpQ29VdWN0aDN3MEV5UjBiYmdudmZYQ29p?= =?utf-8?B?WXpsTmhOMXRQdGI5MnhmbHdSUVJRbERpNXMwZzFIQW00Y0l3eVNaYnJxM2xF?= =?utf-8?B?MGhUdGdUZktScnl1TlFjUGJkajZpZ2UvTUV4TDFKNis4eUppeW1TSDhSa1hW?= =?utf-8?B?VW5zNE1GWU8xbXRhblVCSExOK2MrMTl0K0tKMk5yWDgxSWRqN3FyQjNUOW9M?= =?utf-8?B?bDRrVnNVb29lL1FGR0VDVmRxS0VsVVVwa3c2QUZSdDBraWh5b1pnVXMyNVRl?= =?utf-8?B?VDRUMCtWOVlCa0c5c1dwenVoRjJZMmQ2bWlnVEpsS3lSdHJVRE02OEF4ZHls?= =?utf-8?B?Mi9HbmpMRyswMkZCRmhCaXN4ZFhCdGhVSUVzeDNGbFRWdW54RUJKQ0FOS0w3?= =?utf-8?B?cnZNZitZMUQ4ekZCMVRiMFJlZ0toSGIrYzlCaG8zdlF3bmdMdklJSCtwRXJY?= =?utf-8?B?MGRrZVVwWVQvdks1Umdja2Z4UG0vR3RMVmhvVzZjVTBMZUZxRC9wYUVFV1l5?= =?utf-8?B?Q0VuakRDZC83SkZScnBhNDAzU0d3SXVjaThUVFBXK3lnNFlrWXBab2MvbXJq?= =?utf-8?B?MEphYzR2emNLZzNlZmxnT29RK0VqZW9OL1gzUVJ4d1FIQ1FIVTR6cTh3eXJI?= =?utf-8?B?emw1dTlFcGI5MDZ4WjgyN2Ywd0M1ZTlMS3dwd2ZRRzF3elMvTzNCcndUZnc1?= =?utf-8?B?TndZSFhlQWxpRlNLaFNKd3VuQWtsTndhRERyNHFLY2RNTGc3cFV3ZXNHT1hE?= =?utf-8?B?cDlYQnJRUGlLaHRpTnBPWW9icEhkT05wdlUyRVdmYVBROE5pZ25oZ0xkem9Z?= =?utf-8?B?OURnL0JwaG0wSHkxMU5CYTkvTjRTbkhiUklkNmFLNnlCaXZGMExzZDNCbFQ0?= =?utf-8?B?QVRzU3JmSjQrQldLV2lyQ3piZE96cWNWM3dDMVVpZjVoYjFoako4SFk5bVRE?= =?utf-8?B?MUprY3dJa0dPdlZPNzd1cmEwYmZQbDVwbW54alZTWjBEVUVLcnFFa3VzZThK?= =?utf-8?B?QnV4Z1lHRVFHT3lqYTNsTVlMTWRsdkt5bDg2VWszelhzYWYvdWcrOTBUYldO?= =?utf-8?B?eE5rU1Qwck9qUmkwbTE5SkVkV0grUjdPYS9hSFZ1S255d1ZreFI2VGUzZi93?= =?utf-8?B?OEZiamZybHh5a1RRSkVDcldmdGVNODNMSHhlVmJOVFN0S2hDNy9EWkwwZnNN?= =?utf-8?B?QUk2ZllIZzkvOU1hL29XbXdRYXZKQW42TmYrUndjTWg5dWwxam1JWFlMdTk4?= =?utf-8?B?RVZEQ2RBRGduL29YK3dXenpTRGpQa2dGTzJ3OTlvR0x5Zyt1RTF4UGFrUk9Q?= =?utf-8?Q?uWWDLe?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR04MB8461.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(7416014)(1800799024)(19092799006)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NnU5NjRJSGRHUHB6YmNlT2hOSGs2NHFzK01CRlpuWDFkbE84TWh0THI2RnhD?= =?utf-8?B?Z0hNaXVhbUx4b0UrSW1vRlJ4TW9YaExUM1F6TTQ3UGVsdnJtSTBQTFp2bThi?= =?utf-8?B?UUQ3cktWdWc2bzRBTURZK3Q5cnBueWlQVmNBK3JYZHJhcXdJd2VBSkQrODc4?= =?utf-8?B?Vm5ITmNQK0NqNzdkMGhDbjVWM0tvUDhiNW9OeENuQ2daOHpMaEM5WmhBeTB1?= =?utf-8?B?RXJVL0tLTnBVZkg1R0pEOHQxT2RrRWdjYzBFdTdWdGFBTmFqRzUyRWFHWU5L?= =?utf-8?B?N2FnV2ZOa0Zabjd4WG9sQWdyNjBucFFveGFLYTArSVNPNk91YUhrM25hR0do?= =?utf-8?B?a0FCT1ZBbU5XYk5aUU5pSHFqbE5JWEd2Y2pKbExUSWxUaDlqZ3o2NkpwWk0x?= =?utf-8?B?RWRKeEI5OG9YQ05ha3VGSnVYa1RzakdocDdKeDJXVTZNaFlpM1NRbGpwM0lE?= =?utf-8?B?OGFQRHlSQTR4SmxpcW0rTzRuVXNNTys3RDZTaUxqSU54K05yZzYrOU5wS3h1?= =?utf-8?B?cUtHeHRlbVFjcUEwWUEwbXBLM09qeXV0eWdxK1RrVVZUMlYzWVJTclJ0YWlj?= =?utf-8?B?ekpNZDk2UkxHSnpwSERaMEx6M21qd3NsK1dSY1JPc1VjTUFHRHFZb2NTTmIr?= =?utf-8?B?Uk92ZW1WVHQ5cnpUNTBFalpFMkFQZzBxTnFFTXlVUXo5bEFRcENUR0hZeEU3?= =?utf-8?B?ZlpqUVpyYnl0Zm9acFd6Ti9Oa3o0NlNSYkxydC8wM3ovODlUZkVSaXFJaHpG?= =?utf-8?B?N1kzTnN3dlNGK0doL1lZc3pmc3RKM25ocEU2SVFWTitJK1Y4U0VLOXphdzhZ?= =?utf-8?B?K0JFTEc4SW9mVlU5VFl3Tk9pclhGZVhsTDVVTFBGOEhnR3FpNFUrVHA2ajZj?= =?utf-8?B?SWp6SzljT3dGL0xtSjczbjZQVTlvOWZjbzUzcnA5MVNXdngyVlZmb1c4TXd2?= =?utf-8?B?TTM3RWtmTlhDSWswdjl5ekdZZmNES2JpcXkwc2toVmxQVUhzTFhDU0JWM2lE?= =?utf-8?B?Z3EzNVZHdmU1R2dDVERiZ2JtVDk5RkI2eE1DWTBzMkdsT0Uyb25YR3J3N25y?= =?utf-8?B?Uy9QaHNVQmlCNkkrK2RSVlpmWXJsWjd6TVlIS05TalFjUjhoRnBML3ExSGxE?= =?utf-8?B?MEEzVnZNVjVQb3JXRlR3NCtTeHVUUGNnWm1NUHpTUkdYdjByejlnbld0Ylhu?= =?utf-8?B?YmQ0eExyL25wREdtRXdaV2hyVXY2V2VISWpRa01RbkFNWUNPT3V0R2VVREh2?= =?utf-8?B?OHY2OTFteHJJSTJveERzUzc3MGVJVDRjRnl3U3JZdmRJSnRlTDQ1a1JaNTJR?= =?utf-8?B?bXNYUmhCbEVUR2lkN1lueEgzN3JnK20vT2JwQi9waC9QYTZYUWJrV1YwWC9U?= =?utf-8?B?ZVd4UElueUl0RFpkTVJPeWkweHFURFhNZUF4RkxxWEU0N2wyYWZVbEZzZXlw?= =?utf-8?B?THBXaW43aDV6RjU3aExuaER4eDdSMGdaWVo5T01ySTF4eVcwb01nT09lYWtt?= =?utf-8?B?a2sxSDZpTHAxSzZhb2VrenVlaStSM2ZVbEFEbThFSW9NVFA0Mks3V3c3NVJw?= =?utf-8?B?QmdVM2s4NWxPcFM0OTNmT0pTandDWmtCc2EySy9qQ2ROMENPbjJqc3NXeFZQ?= =?utf-8?B?TWVlekJ6K1M2cFdJbDBsejR3Ui9RWFRBM1VBdjZ2LzR0R3ZuT1RKTE44RWF6?= =?utf-8?B?WWhteDhUanN2QlBZcnMwb3dicEJaaGpjMHRKSS9nSGpuVUtyZlJ3ZE9DSUhl?= =?utf-8?B?R2MrdVFBcG84OHlweFVqNWRpamUxaGJ3cy80UitNTUpYdkcvQUdQK0phd2dj?= =?utf-8?B?cGpjaVNUN2lvbWd5d1hVU3ptZTNERXNuZ0ZqSnJDVzRYTFhFL3FIYXNiOFJy?= =?utf-8?B?MHBRVC9wdkRBYUU4VVNjakVOOXE4cEdLUEhMOXZVRXUvaWRkM1VPVncxZFMv?= =?utf-8?B?ZG5MbGs0MVFqeTB1cDFYOHlKL05Yc3VERFEvUEdrUlB3TmZYL1ppT2tQRUJ6?= =?utf-8?B?UGMwa2pCQTBhcjgyeFlMWDM5SUU1T1ozbVR1OE0rYXdCbG56OFlpYmhFeDNu?= =?utf-8?B?OWxVa1VoOGY0b1lSQTlSV05tVGFmT2twRCtLbno4enk1MkozM0xEdlRSRTQ3?= =?utf-8?Q?J1u6neeT0JHxo+lMAi+kNypz3?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c86afbef-6ca5-41ee-9d9d-08de2e2c41da X-MS-Exchange-CrossTenant-AuthSource: DB9PR04MB8461.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Nov 2025 03:14:35.2642 (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: blJV1nHNCz/+CHMMgOb8SicAkze1xj8i+foo1r5SCRsc3P8Al82jTNmpDdp775aG/5weAu3/38f3jvLUrBUkPQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8429 From: Peng Fan Add clk_hw_set_spread_spectrum to configure a clock to enable spread spectrum feature. set_spread_spectrum ops is added for clk drivers to have their own hardware specific implementation. Reviewed-by: Brian Masney Signed-off-by: Peng Fan --- drivers/clk/clk.c | 27 +++++++++++++++++++++++++++ include/linux/clk-provider.h | 31 +++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 85d2f2481acf360f0618a4a382fb51250e9c2fc4..6cd941a729590b501d66101e352= b99e51ca18464 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -2784,6 +2784,33 @@ int clk_set_max_rate(struct clk *clk, unsigned long = rate) } EXPORT_SYMBOL_GPL(clk_set_max_rate); =20 +int clk_hw_set_spread_spectrum(struct clk_hw *hw, const struct clk_spread_= spectrum *ss_conf) +{ + struct clk_core *core; + int ret; + + if (!hw) + return 0; + + core =3D hw->core; + + clk_prepare_lock(); + + ret =3D clk_pm_runtime_get(core); + if (ret) + goto fail; + + if (core->ops->set_spread_spectrum) + ret =3D core->ops->set_spread_spectrum(hw, ss_conf); + + clk_pm_runtime_put(core); + +fail: + clk_prepare_unlock(); + return ret; +} +EXPORT_SYMBOL_GPL(clk_hw_set_spread_spectrum); + /** * clk_get_parent - return the parent of a clk * @clk: the clk whose parent gets returned diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 630705a47129453c241f1b1755f2c2f2a7ed8f77..9ec25bbccd613eafd77aca080dd= 7f51b1bfdadc1 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -6,6 +6,7 @@ #ifndef __LINUX_CLK_PROVIDER_H #define __LINUX_CLK_PROVIDER_H =20 +#include #include #include =20 @@ -84,6 +85,26 @@ struct clk_duty { unsigned int den; }; =20 +enum clk_ssc_method { + CLK_SPREAD_NO =3D CLK_SSC_NO_SPREAD, + CLK_SPREAD_CENTER =3D CLK_SSC_CENTER_SPREAD, + CLK_SPREAD_UP =3D CLK_SSC_UP_SPREAD, + CLK_SPREAD_DOWN =3D CLK_SSC_DOWN_SPREAD, +}; + +/** + * struct clk_spread_spectrum - Structure encoding spread spectrum of a cl= ock + * + * @modfreq_hz: Modulation frequency + * @spread_bp: Modulation percent in permyriad + * @method: Modulation method + */ +struct clk_spread_spectrum { + u32 modfreq_hz; + u32 spread_bp; + enum clk_ssc_method method; +}; + /** * struct clk_ops - Callback operations for hardware clocks; these are to * be provided by the clock implementation, and will be called by drivers @@ -178,6 +199,12 @@ struct clk_duty { * separately via calls to .set_parent and .set_rate. * Returns 0 on success, -EERROR otherwise. * + * @set_spread_spectrum: Optional callback used to configure the spread + * spectrum modulation frequency, percentage, and method + * to reduce EMI by spreading the clock frequency over a + * wider range. + * Returns 0 on success, -EERROR otherwise. + * * @recalc_accuracy: Recalculate the accuracy of this clock. The clock acc= uracy * is expressed in ppb (parts per billion). The parent accuracy is * an input parameter. @@ -255,6 +282,8 @@ struct clk_ops { int (*set_rate_and_parent)(struct clk_hw *hw, unsigned long rate, unsigned long parent_rate, u8 index); + int (*set_spread_spectrum)(struct clk_hw *hw, + const struct clk_spread_spectrum *ss_conf); unsigned long (*recalc_accuracy)(struct clk_hw *hw, unsigned long parent_accuracy); int (*get_phase)(struct clk_hw *hw); @@ -1430,6 +1459,8 @@ void clk_hw_get_rate_range(struct clk_hw *hw, unsigne= d long *min_rate, unsigned long *max_rate); void clk_hw_set_rate_range(struct clk_hw *hw, unsigned long min_rate, unsigned long max_rate); +int clk_hw_set_spread_spectrum(struct clk_hw *hw, + const struct clk_spread_spectrum *ss_conf); =20 static inline void __clk_hw_set_clk(struct clk_hw *dst, struct clk_hw *src) { --=20 2.37.1 From nobody Mon Dec 1 21:29:55 2025 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010038.outbound.protection.outlook.com [52.101.84.38]) (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 6F1212D876C; Fri, 28 Nov 2025 03:14:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.38 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764299684; cv=fail; b=j8D8MhGmbpi6VOivpulTi5UB8ijgj4hUE07TOFIlod8jDUtDyHGqNShmDnDJ/CsAaIDx2P8dHwb/bNkS3+ElgvVjJ6ti7tBCsxfaT6pGu5FhDddWtCKw6WHpEPgXhxPApP7jBOk5NZH9xe0UQk/RtistLlJbdDtmQZkntzDLid4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764299684; c=relaxed/simple; bh=8XJX8n/ShWYtbZxTSR/mmLpl5ImygHkucIcV2JXwwe0=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=XGZEzX6W52xDAk5jGur0YFIx9KraZVk0iR7c3PFW5QBajbDcGzVQ0sg4dNqMEDUglZyvN3uqM0bqRHdlQAvnyzX7GutwAoRE/UXAWVzeUIYBm2E3uvioK6e3wG/OWkspvPWyZxQU3J4dyW09nqyKoqE3P48TUFwD0XndTO8uj4E= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=s3aAib6x; arc=fail smtp.client-ip=52.101.84.38 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="s3aAib6x" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=olqSUVuVU/CSjpx0eGIN+rsn/BIW3xY9kSwPnKBMOcVjxF7Dqfgngrj8MXcXiK/LTM6rpf++km3SkLc1kmBL8gjsl8ltDPXvGv4wu+G/9xA5bmL0wdibSYQKGFk11aHxfHqKsgq4OfCG7/gmB5So+hJtTHh+hh8PqYw6nx24GYaEnVoUby4Daz7vTBof/LKPEKdhZiRz6sYD/zftz5sQ35E0gJuTag6ALyg6nM4FCxgo8EOIKOPdIvr9VEWjYldZOVFLIvCacqXj+LRP4h2dJ5mdi/sClvvLWe/ABZ4wYiZYCXL+ba6cza4W57t27tWBD9L4Bp6d3U9LCtowtjImKw== 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=AepLDexqaPlW0iL07yAh5yjTzdO/q203e43HencWD4U=; b=gOnCY5HI8pSTT2SOZtHsodBG/C09WbcK3eFzCcB8OmmI9V1lGYj0K96yTg6lsvMgEBWP2bWTJU/J5VQ/bLg075lTKZGkcK4Ddnf4H3DFsynUw8zeytnqYzJG/l1wbilzaGcQNoIkE32x9vyDE8obYmZZR2mzRXSym0hmsvtnBdiC/DgqhnSsmEN5jnhJYr5/1UQzMyKyt5XHf5SFiKQwgdKDR5bqRrqtyZDO8pqKEuBLe0bVgt/pJsE5KQVZb06aGPoHyEq5bskXiwVqmK8if84ozmQ/GEy5s3XUfDf0+/2/pswsyDA9YxoSUQfR1PecQ36YGhsSm1rpNTiWxFay1A== 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=AepLDexqaPlW0iL07yAh5yjTzdO/q203e43HencWD4U=; b=s3aAib6xwCu7aNpMjJffky4RhVBpSFaPqf1mSIHAiBOqW6nV93twkkaxhdRzSstwL9OSLaJbRBsszajtfGgDp1+Ffzm0d/FjyYiPW/aSGw6FNXcoa3iyVLOncGFyHRK9juFOOZ2B46+DgXQ5fBG3mI85gvkXZrjOTHaOKc8pejf4/Hlwnhz3B+G8hFc2iKHJ17kYPCgxhtJhOLoC6GbEFT2A0elc0DWiK54xyLnCYihWFMQJwTNdRIq3iCbl0pTGfe+g6kAJWSGDUf0k1A8pA7l/fPGiCbG7Ial7HnIXbG+V3rPrZ1zSLkgagb1YICcg8YHbgkv4gxOMXS+/Pyu7ow== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from DB9PR04MB8461.eurprd04.prod.outlook.com (2603:10a6:10:2cf::20) by DB9PR04MB8429.eurprd04.prod.outlook.com (2603:10a6:10:242::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.15; Fri, 28 Nov 2025 03:14:39 +0000 Received: from DB9PR04MB8461.eurprd04.prod.outlook.com ([fe80::b1b9:faa9:901b:c197]) by DB9PR04MB8461.eurprd04.prod.outlook.com ([fe80::b1b9:faa9:901b:c197%4]) with mapi id 15.20.9366.012; Fri, 28 Nov 2025 03:14:39 +0000 From: "Peng Fan (OSS)" Date: Fri, 28 Nov 2025 11:14:12 +0800 Subject: [PATCH v6 3/6] clk: conf: Support assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-clk-ssc-v6-2-v6-3-cfafdb5d6811@nxp.com> References: <20251128-clk-ssc-v6-2-v6-0-cfafdb5d6811@nxp.com> In-Reply-To: <20251128-clk-ssc-v6-2-v6-0-cfafdb5d6811@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis , Brian Masney Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: SG2PR02CA0031.apcprd02.prod.outlook.com (2603:1096:3:18::19) To DB9PR04MB8461.eurprd04.prod.outlook.com (2603:10a6:10:2cf::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9PR04MB8461:EE_|DB9PR04MB8429:EE_ X-MS-Office365-Filtering-Correlation-Id: 207a5811-c4bd-4945-3907-08de2e2c448a 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|376014|52116014|7416014|1800799024|19092799006|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?NU5vamVmalY5Zk43WW5UaHdLaVdxeHZVYU5zVHhaVWFlOWUzSDlQWUZMYTlP?= =?utf-8?B?eUxqQlczYnhHR2VqQjdSQ2J0enk1eHJuaVFIeDdtZFZETWJVSlZwMWNlWWRY?= =?utf-8?B?ZHYxS3pLQngzcTJjcE9GeURqMEpiOUNCSlF2c09PWlFSUHAvM01HMnRleGJz?= =?utf-8?B?bUtjRm1PaEtrdThqSVllMnVXaWlXL0Y3WXNzd0ZZOVgwbnNSeTdMVjlwbDBa?= =?utf-8?B?MXc1VWpmT2djTEVZU0hPRlhqL24zVno4SUU5b2NXd21hbXprL3l3N1FRUCtB?= =?utf-8?B?eUNEOTYwSjdWVnVrMGN2Sng0R2xyNGVDdjlOWVZmdDQzdUhCL012b0hVeHpa?= =?utf-8?B?L2pISlluWXR6Ryt1aFVSbkkyeFBnWXhHdnJrcmJlNGxFbFZ4emVWYUdsS3VN?= =?utf-8?B?QmhNVjlNNHJBMlZzNUs0RW9BS0c0eFhWazJ1QUhacWtoZFJzcTlTbEhWRDcx?= =?utf-8?B?ZXdDa3N6RlVGOTJjcUh6WHRieG1TVVI3MU5vb0QreENCbWZubTVzd2JTWDR4?= =?utf-8?B?MTBWRVI2ZHZuYWoxR2R4UjcvQmgwY0dwZE4wK3hTRDhzZURGakhCemR1ckJn?= =?utf-8?B?bjBUdXNUdEVndEFZcGJ3ZkRKZ3dhek1LWGV5WXdDZDU5ZzZ1MmdIbHVuQ2U3?= =?utf-8?B?T3BOR3FEalEyRTFWMHVsMEh2SlF1cGxuYjR1SkVsdld5WmdHcEVyNzN2OXRh?= =?utf-8?B?VXE5UmdpZGNma0g5YUJLSU40UkkrbkFVQ1dIOW1abEdCRG53b2Q3ZWoxMHdv?= =?utf-8?B?cXRnakJHODhnVFRiRC92Y2FJWVgyQ2xqbUlJM3lwdUMxcHI2ZXAxUVZ2YlNW?= =?utf-8?B?djByK1dObi9idFFGYWVaR1Z5ZTFmUmZacmVldkdTRU1UNmM5L2l5b2dIbFZt?= =?utf-8?B?ZWovWHJsaWhEM0pja1hpaCtXeUJVTnBodHcwdXRYWFVoL2dzZVhIWVJ5SEpt?= =?utf-8?B?TWQxTlp3YzJVYmZ3OXRwZkJHSHdEdk42Ym13M1BnUElFVkdJQjNHeXlSeE1G?= =?utf-8?B?S2J3WWVLNVVPdTc4azlYaXZJR3VzUTNETjdwMERMUEErZjQ3ZFhJMGYxYVJH?= =?utf-8?B?aWpXK21FUTRWSmNJQTQxNEV4amgvZWlCUExFV3V2NnlDVzlhUlR2dmFzTkQ0?= =?utf-8?B?R0RKdFUwNXZ0VGJvNHhHRUo4SmppM1VkZDkzc3JYY3A1cWRQdm5DcmovZVlS?= =?utf-8?B?Q3l3TzFKanMxQzNybS9TWDZwcXlSSzl0SFJtOFk2TEVnS0MvV2ZIUkJZeWJH?= =?utf-8?B?RjFNdWEyYTJLL3Q3d0VuT0JDWW45NEIvSE5rWWJ3S3Nib08rVmdmK0VUZ1pu?= =?utf-8?B?MktzbUZBNlF3NVlxWG9sZ3dlRm5WR0ZQbS9hM0twbDFBQW0raitGa1dTQU9O?= =?utf-8?B?YWlpQml1eHFSbzJKZlNzU3FNYzZmdER0MEtlWGdJeFhraDJzY2MwTlorQ0No?= =?utf-8?B?UWxmVzZoSGIrOUJVMWtxU1pzZWdITTlwSlRZTUlUdzlWbll4TXJmdG9uL0lE?= =?utf-8?B?WHdLaWFmU3RaRm82ZHk2akFMcVhLMnRLZ0xvb3JGa3NYRjdiRWRUbVkyRUFY?= =?utf-8?B?WVJ3NXY5eU9Ha3dGdElOTmJhc01WMkx2ZXpta2Vkam9NeUEzNS9lSnllWVV1?= =?utf-8?B?UGRNZDc3U1BHSmVTRnlkK0lFZzVRdTUyQW05aU5mUjc4T2tzSUN6VGFXcEpU?= =?utf-8?B?S25iWFJiUG5rbXEvc3E5emtYVUlKaktJK2FUU2JLYXptQk1Lb3M0NTNVSmto?= =?utf-8?B?VDluM0E3N3FiL3hWdVNZMEZ1Qy9MQmhpeWFWSnArNjVCcEZ4MHVET0hhbXVj?= =?utf-8?B?TDh5TE44QmxyVnNlTGpabWY3UWJhNy8zOVo5MUJXa0pwdXhlSy95U2VuSGZm?= =?utf-8?B?SGVJdzZ6QkpIQkVVMkUzNkwvYldKRGRRYkFod1MxZjY2a25GczA0ZnAxaFdO?= =?utf-8?B?VEcvOU5JTHlTV0dwTStVb3JSZmVObEc4UnB6WDQ0N25HeVd4bG1POHpiODhQ?= =?utf-8?B?dVBpeXpGcEVsK3JHNDZmQmVoWVUxRjVXcWQwL1hkMk5nTmF4QksxSkFkRU9U?= =?utf-8?Q?fPqs/S?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR04MB8461.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(7416014)(1800799024)(19092799006)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?emVMTWM3WlhOVmxTcFRBUlNKT0hzTjU1SWhVT3NmbXNxS0RZVzQwcW92cGE5?= =?utf-8?B?THBEUW14ZWxsN0Z4MHlneUxiU0Z4SnZXOFBuUlV1dDhUYzhtQkFzMnVOckZu?= =?utf-8?B?TldXWlRpYkVObzY1UGpWSHh2bHpyRHppcjNEY05lN2hBZmZCZUJMeWkyWG5m?= =?utf-8?B?TEVxUDl1emJWS2NwQjdmZW5iQUpSWVlKdnlmd3ZYdXdCUHhjSUwyd3FDT1cr?= =?utf-8?B?NmRnUEV0Yjl2M0RlTGx2bUJma0NxWHBrdjVNT3pWSmcxTisvdjVWbGpUVHB2?= =?utf-8?B?MjZ0cXVUdmh2TG1QQ1FyUUZhOW0vSnhNWStqU0xXRWpBbU1hUWw4S094aXRW?= =?utf-8?B?RmRVUG56SDlSSWxtK01qaXpJS1IrNzA3dkg4ZE8xUWk3ZVBRc3RyZWxTejVJ?= =?utf-8?B?bmFNdmw1K05JYmMrWFJxT0MvZTNwaTF0Z0c4TFhuNDBEcGt2UWgzUHlQeWlB?= =?utf-8?B?UU50K2NmTURMMWhPNUNLZnhJZk8rR3lIREF4K3NYdGhJQllUMW5JSjViLyt6?= =?utf-8?B?c3ZZT1daRzh4WkJSSlM2ZkJlZDhMckQwYWI1WVhtTS9Md0hxUHBPRk1RdWk3?= =?utf-8?B?RDJta2p4S25aakpUbFNPZEs3UURYYi94Smg5V2VhTTFlOEMyNytCNkw1V09F?= =?utf-8?B?cG9YclJHZmh4RXRyVFhQR3NYYWg3MExuZnJGLzFOSWlibEpSS2pLZGtGQnVh?= =?utf-8?B?NnJoSkFGUWlxQzJRMU1sTmNuU1I1WWwwN08wRmM5SWVtWFd2U1BrVEpHRjlZ?= =?utf-8?B?VHY0OGg5MWtmVDR5aWRaM1VzbkR3c0VwY2Qwci9Xc0RrVE1TYmZKVU50KzFR?= =?utf-8?B?MTJGVXllajU0MURGUGIwRVptVDFWZkphcWppSXRZYUpkeVFIdFBNeTloOGJv?= =?utf-8?B?YkFPWUpGZEJadXpGcHp3eDdxYzQ4MTlqUU4yNk5JcUp4empxWDYxVld0ZEdU?= =?utf-8?B?d25ERkFYaTA1UHBCZ1hoUjZNVnZ6bWFvQ2hSeVZjYjM1elVDaGpZWHlYYWdo?= =?utf-8?B?MXJTanVJcEcxT0dTOHhxNUZDdDdVY1R2Q2tlNGs2eW0xZ3FCMUYxdnkzRFZP?= =?utf-8?B?cXZGaytic3FQZy9Pa2cyeGtCZUZlY3A4THc0V0xaK2g5Q2ZDNkpPTWVTRS82?= =?utf-8?B?WlM0Q1V2bnp4cDRGOU1WWG9FY2NZTjFGalBLaG1qYXkxcHRoYW9vOTVQMnJJ?= =?utf-8?B?aU1mSEZIUHAzVnd1eElZdzFEc21HWFNQUXcySjNodlJlMVBCaE1aRHF5Z0cv?= =?utf-8?B?RmFtMVFhSDRPUFdrVkc1VHp1T3VzR3ZUMzVvbzBvNHlLMlhoVDhlaXVTV3NJ?= =?utf-8?B?Z2ptN0xHMkdlVHpJZXlTL1BOa1VaL215SHlkRURNeDdxRFA1SnFwLzBQcDVz?= =?utf-8?B?alVwVnY3bHFuaUtPL2FNVjBRYTZGWWNSV3FRZ0wrRVBiUTNxVnA5YmlRSks2?= =?utf-8?B?VlgwS0F1eHNnWnR1blFGaEFoZndQSjUvdUsrc0NPdi9ReHdxeU9VcGRScWRl?= =?utf-8?B?bDNBUnJ3Zks3VGNHUjhkSDE2cFFXTVVkMU5SQkJRdEJGaEh1ci9EaHFVVjdq?= =?utf-8?B?cEhRdFJCK3ZrcW0zdkJ1TWk2UDZlM1dhcFV6RUNVdGtoSTVJZ0pIWSs5QkpP?= =?utf-8?B?Z1laVjh6TDJnbTJCd3RHWmluM1BUU0xyUlAwelZOaHJUb3grMTZQaE5LYWg3?= =?utf-8?B?TmtOZ2ZWUWIrZjg3OFcrRlppNDlJTmhYbFZFTW5yNUViME5xMG44MDVsUExO?= =?utf-8?B?eUxscldGcTYxSkJFMytXcm1BdkF6aGl1ZVFOZmJNYW9QNlRRSDFGMDR3TzM3?= =?utf-8?B?WU1xL200V0plckI4SFd6OTBpb3RiTCs0UUwrZllwaDVYMzB3Rm1SUVZzT3JH?= =?utf-8?B?TGNiMEg3bjU3LzFnY3hGY2o3Yjc5MlFIdFZ5ZUpjRnNlcmRoMUVEU1liZkhD?= =?utf-8?B?ZGswNUZhTVZ5OGZrT1VwSHY0MmYvZmJpMFVLbW5xejcya1dtdFVTSno3Vzhq?= =?utf-8?B?QU96c1B5SzRGY1hZNEQ1YSt6VmFXdUlFY2JPdnJmejNBZmc0czNCL253VUgy?= =?utf-8?B?emdDWnZ6RDBQQlFmbVVML09nL3l6Vm9STE1hM2xIUW1Mcm1SSlZlZ3Y4ZWQ5?= =?utf-8?Q?nl+8GEVM//VCR5ufdsFaCrJ3U?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 207a5811-c4bd-4945-3907-08de2e2c448a X-MS-Exchange-CrossTenant-AuthSource: DB9PR04MB8461.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Nov 2025 03:14:39.7686 (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: iZXymHkuU4zSxF2kFl0lvxAKK3Ug3Q0C+7+s6FekZR+wrFw8kEC96QZFJvDEgXgfrG7876P6BWtWpumEEKV1eA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8429 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. Reviewed-by: Brian Masney Signed-off-by: Peng Fan --- drivers/clk/clk-conf.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 69 insertions(+) diff --git a/drivers/clk/clk-conf.c b/drivers/clk/clk-conf.c index 303a0bb26e54a95655ce094a35b989c97ebc6fd8..dd6083597db3f8f27d86abf5640= dfc3fb39a9b88 100644 --- a/drivers/clk/clk-conf.c +++ b/drivers/clk/clk-conf.c @@ -155,6 +155,71 @@ static int __set_clk_rates(struct device_node *node, b= ool clk_supplier) return 0; } =20 +static int __set_clk_spread_spectrum(struct device_node *node, bool clk_su= pplier) +{ + struct clk_spread_spectrum *sscs __free(kfree) =3D NULL; + u32 elem_size =3D sizeof(struct clk_spread_spectrum); + struct of_phandle_args clkspec; + int rc, count, index; + struct clk *clk; + + /* modfreq, spreadPercent, modmethod */ + count =3D of_property_count_elems_of_size(node, "assigned-clock-sscs", el= em_size); + if (count <=3D 0) + return 0; + + sscs =3D kcalloc(count, elem_size, GFP_KERNEL); + if (!sscs) + return -ENOMEM; + + rc =3D of_property_read_u32_array(node, "assigned-clock-sscs", (u32 *)ssc= s, + count * 3); + if (rc) + return rc; + + for (index =3D 0; index < count; index++) { + struct clk_spread_spectrum *conf =3D &sscs[index]; + struct clk_hw *hw; + + if (!conf->modfreq_hz && !conf->spread_bp && !conf->method) + continue; + + rc =3D of_parse_phandle_with_args(node, "assigned-clocks", "#clock-cells= ", + index, &clkspec); + if (rc < 0) { + /* skip empty (null) phandles */ + if (rc =3D=3D -ENOENT) + continue; + else + return rc; + } + + if (clkspec.np =3D=3D node && !clk_supplier) { + of_node_put(clkspec.np); + return 0; + } + + clk =3D of_clk_get_from_provider(&clkspec); + of_node_put(clkspec.np); + if (IS_ERR(clk)) { + if (PTR_ERR(clk) !=3D -EPROBE_DEFER) + pr_warn("clk: couldn't get clock %d for %pOF\n", + index, node); + return PTR_ERR(clk); + } + + hw =3D __clk_get_hw(clk); + rc =3D clk_hw_set_spread_spectrum(hw, conf); + if (rc < 0) + pr_err("clk: couldn't set %s clk spread spectrum %u %u %u: %d\n", + __clk_get_name(clk), conf->modfreq_hz, conf->spread_bp, + conf->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 +239,10 @@ int of_clk_set_defaults(struct device_node *node, bool= clk_supplier) if (!node) return 0; =20 + rc =3D __set_clk_spread_spectrum(node, clk_supplier); + if (rc < 0) + return rc; + rc =3D __set_clk_parents(node, clk_supplier); if (rc < 0) return rc; --=20 2.37.1 From nobody Mon Dec 1 21:29:55 2025 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013016.outbound.protection.outlook.com [40.107.162.16]) (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 311B72DC32E; Fri, 28 Nov 2025 03:14:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764299690; cv=fail; b=rSV2sw6N2zPRLJNToie53a4Lg0jOM2gPiGIitdzyGQul0DPAkdLV7889/psLiQtsgJFctcYTjXbp9Vc8p+lyC1TEUKlV3m769lmmuORO8lE5gGDlTPwXmcDxforRwO8jlwONZG165YrSvM0JL8k145VrqafNAqXumg7atiRNssY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764299690; c=relaxed/simple; bh=2mtUwFfnmwKNNQyu8izKYolFWmaJKZy+YuKhp8DvFz0=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ZDOGemVFri5extD/utJtbzZXW1Lr4OWuOz5kCRQfIc7NhFQrbW4+Ntu2Ze+DBSOVn1+as6u42mzLvXt6ifsaReUJfMPSvMx5RwyyWYeFBYmDzIjYpB2zkUREyOQq780w816uiIEU7kmIfFyA8GdSrBQLb0olPAS1jHwtyMwWbm0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=ELQqro3G; arc=fail smtp.client-ip=40.107.162.16 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="ELQqro3G" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YPiWJiQxUAM1n8VFEkLPqUpSRdtyIrqsSVUYHodPdeS7UHhRqK+21OIcULR+Aznz96OoliuzjWCjza/a3u8WOHfWUO6TE+CW6fUFwoa1RrIownUAD2We0tXlDEksDn2Y4A9fX9uyFi3g4WrGBpeyXi+QQD1Y1enUh6dODitnUrOOzqmMgLJdjr7A+GMvlIcRk9wOo7dI0wBwuVj0HwfD/8otNa+qxhrZUxWNNNC3UA5MocxlADtEXbs9BaK1qRGbsy/JfUl8JGPrgjw3z6ejswOteF8hvzfBi4tDFUPCythapHsDK240wQIePVhk9Z7Qh8K603wljdjFQq3Zesz23Q== 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=nmm6CXq/mUWEf+DXT9H9scV/KMyl4opnZvpDuoz+kJw=; b=ozL4XHl4ZReqc75idKbwQbKCSyQUX2czFvhGgJTmquY2tmVQPm4Yb6LA4EPn/vVIY6qbXF+Dq3IUyrpDKmehogIVzbISWBbe7zmOccZpy8oeZzX2BOmuNsEW+l2zFqIUritR+MH86BBmDJiTUjvxW7myc1mZ6vUp2TLsjXMbE2hG075Xxn76a+d7yhyChByld2PfhogPwOp3G7VeEmVAquDuHUtFXH2zu1LdWHEJkMXm6MtJYjqTHyAMnuZi/clq5y+SmL1jZnVg03IognQKI6rr0dBuqGflmHJz9SWsusQ+3PD3WMflWON14nX7l4jj+AqPZAs/oav/o/iSe3mmkQ== 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=nmm6CXq/mUWEf+DXT9H9scV/KMyl4opnZvpDuoz+kJw=; b=ELQqro3GC9ptTOPiSM2orXoOokkUyEcPXL6ELZI3kAWBXx1vdKMTs2CljxV0gHv+d9+nY3QjASJpBW7hEx2jeHoEwqktaa7RWpKC9ReWg5T35MdpVT/9nOwwDfo1L5/bky9YDq6u+UOp4RVamOSdODjmYdqNWMNXOEdF56i5drz3AwxXETyeoBAnuVJF9Vnx6TOmK9aIrD7cVfCDlstPNkrQ7mW0Zqhrtbh13wuFv+vqMeDIfFqTMOkgKop8LSp+8we/VQC32xd4X93ocuB03ankec4Ybss7qwShD+srSpBcvIBUBdTM8FlyBPw5SLEXRjiMRyZh8V1crKAK24BO2A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from DB9PR04MB8461.eurprd04.prod.outlook.com (2603:10a6:10:2cf::20) by DB9PR04MB8429.eurprd04.prod.outlook.com (2603:10a6:10:242::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.15; Fri, 28 Nov 2025 03:14:44 +0000 Received: from DB9PR04MB8461.eurprd04.prod.outlook.com ([fe80::b1b9:faa9:901b:c197]) by DB9PR04MB8461.eurprd04.prod.outlook.com ([fe80::b1b9:faa9:901b:c197%4]) with mapi id 15.20.9366.012; Fri, 28 Nov 2025 03:14:44 +0000 From: "Peng Fan (OSS)" Date: Fri, 28 Nov 2025 11:14:13 +0800 Subject: [PATCH v6 4/6] clk: Add KUnit tests for assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-clk-ssc-v6-2-v6-4-cfafdb5d6811@nxp.com> References: <20251128-clk-ssc-v6-2-v6-0-cfafdb5d6811@nxp.com> In-Reply-To: <20251128-clk-ssc-v6-2-v6-0-cfafdb5d6811@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis , Brian Masney Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: SG2PR02CA0031.apcprd02.prod.outlook.com (2603:1096:3:18::19) To DB9PR04MB8461.eurprd04.prod.outlook.com (2603:10a6:10:2cf::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9PR04MB8461:EE_|DB9PR04MB8429:EE_ X-MS-Office365-Filtering-Correlation-Id: 2e234c48-7f1f-485a-c62b-08de2e2c4747 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|376014|52116014|7416014|1800799024|19092799006|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?UnNHUUJvUkZPb1NSNzJiY2dNS3R1SDVGL2JQOG14VVBLTUI3K0RZNFlmUUNz?= =?utf-8?B?WHcrSUdFTVMxcU9YRWNwN0xIUmFHWkJZcG5CWW9TVDBGYjRYSGRERFdZYkhm?= =?utf-8?B?Nm5SekVvZ2drOXYvQTNwejhYY1hwbTZLVFV5azRNS0VrcG1XNlAvZUV6VC8r?= =?utf-8?B?YlA5MzNVdDAzQmR3cW9lTnh5SEU3dTVOa2x3YlVWcHRmMDE1QitsRlQ5bGVj?= =?utf-8?B?bURTZVhNVlBXRWdBZFY4MTh2TUlvaHVZZDkxVFpnZ2VrNXlMcElFNU82ZlhB?= =?utf-8?B?V2lSTEgxTmxHUUQwa0xIRXQyalVheVNlUEdKWWVKM3dtVzM2MmQ1Q2t3L1Fm?= =?utf-8?B?V0ducXUwQmE0cnhPclF3RDdmL1E5QlBkZitxS3lFUzdNVk8zaHdtZ0lVYmsr?= =?utf-8?B?czNQTXNnVHhZRmxDQ0VGelRSZHBSWklWQ3Z0cU1WOEowclRSRGdHb1c1UE1u?= =?utf-8?B?eVVkQ0FrYnRoZGFWekk5YmdaRWNrMDl6Yi9mQkNkT3lBeWxPY3UraGpIODFo?= =?utf-8?B?SmRYd3ZVN092SDBNYnlaVkxNUVI5QnhOeEJwRVZ5YzltdlF5NTFoYUVJV2lB?= =?utf-8?B?cTB0T1JQaDlYR2c4QnZ1RXZjaXdFZVN4QU9udUltcWFUNUY0emFnbzNCUE8r?= =?utf-8?B?VHQ2bldDYlRUSVMzN0k2a2Y2UDc4bVl4Qk5LaXRqMC9HNCs3RkJOVk5pN1Vs?= =?utf-8?B?a0hLNVBRcmpUeGEyZHY2QkRPc3RXSXRZUUdlZ1hnNkEzY01ENlhBMHl6R2l2?= =?utf-8?B?TUt2SHJmWDBYaXovNWdOK2lNU0lQekJRRTlOem81ZnZkVFFWd2M2TUg3eHJw?= =?utf-8?B?ZlR5c3lSQWxqSURPMHZjVXpDREdJU1hyc1g3NDBwTHc1alJiWU1FczYxMWlN?= =?utf-8?B?ajlCWW0ydldMd1F3SzJ6Yng4MGRYdGZkU201TzN6bjYxOUpQKzljREMxcnZI?= =?utf-8?B?eDlBRDdYek0xRk4zQjNQMXFZSDdMa0xJM2o5ckYzQUVMdWhtTXZWRll0Zk1h?= =?utf-8?B?ZWFYNWpZc25nY2NMSEZ3NWd2U2gvRGJMVEdZakNsWkNyMnJzdlVob3AwaU1t?= =?utf-8?B?cVBzNUw1S1llZ3UySDcxendEbS9zSDlDMUwrV2x4VWJRS3ludFNtUFRsd2sz?= =?utf-8?B?V2plaHlzbHZOcEx0N0xRSEsyMjZmMVQwNkJOZEE2VjZnU1V4MVRZMURCbUZM?= =?utf-8?B?dkdFeEIrVFNPVW04eTgvZGpBb3JOWElpanQ4UjZrWVNVL1pYVkJkcWtVcTln?= =?utf-8?B?TGU2WnN0cjVZRjl4Z0FQUWVVR0M1bGc2SHFLZkxESnpsSTR0QUlEOTllVnFK?= =?utf-8?B?TkN2ZmlIVG5mcmJya09nWFJ1UU5ockx3Vnd4dXJidVVVUlRVUFVHY3hFK2c2?= =?utf-8?B?S3NyUGFXSDl5WkVXM21aQm9aRldIU3U2b0Q0QmpESUxhVDlSOS9BcmpYL0ZJ?= =?utf-8?B?bmErY1d2bXlkTnpaRVFtWGhteHVZQ3MzU2RQRHQraHVrd1BWUElyVkErN1RY?= =?utf-8?B?M08vZGpmK1NFS0hDanIxeHpoRFlHTzZ4NitnYWRyeEtPMS9VUlJyZUhGc0RY?= =?utf-8?B?amcrMk1hdnBvZDJHQTFlZ0t4dWhiUEdUOXJ1SURBbCtGK1FPZzFYZEF4ZkVu?= =?utf-8?B?TTdxRkxGVXlicExQUzl1TUQ4TFhWY016TWV2ZzhKZWpWY0szYTFZWllpc3RD?= =?utf-8?B?cldCbmpFQlhuQlFjMXhMWlM3WXIzcHplS3VZWE9oSXZpaFp5MU5FSVlRWE9U?= =?utf-8?B?ZE04TEFCR0RTWlJhRStHdkRuZWV5YTJ4c2xYMHA1MlpzeUF6eTltODRHVVNi?= =?utf-8?B?NjNzaFI2cG0wN3VrVFRrMjB3clZNQVQwMnRMT29qaDZPTThUUDlVZDJxZGwy?= =?utf-8?B?MUQ4bUNWRWkxdkh1cDc2Q3RSQ0dQeUNyRzJkMnJNVGV0d2VBdHRVeFhsMlBu?= =?utf-8?B?MDBoVUFXd3FuV1BTQXdHRWFsUHorbWcyaWI1d0dOVTNNRThud1BrMlE2NWNL?= =?utf-8?B?ekZ1WExMRnJMRng0RGhobzdiNFZCakVScUc1K3V2dytoamVkWGxNYjV3NVp3?= =?utf-8?Q?ikS1Qu?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR04MB8461.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(7416014)(1800799024)(19092799006)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bForVzNUdkJPa251ZzloQmFaYnZJdWlMVWZ2SHVrMUIrT0dxOWFKdXBuUWpl?= =?utf-8?B?bmhBVEV5M2IvSzA4MXBpYk14enloTWF1K1J1Qis3dFIwbGdJdkRRY1lXdjRB?= =?utf-8?B?S3Y1OXgybDN1K0tUNTlKckVLVVBFT0FvWis0SXdkdkdoWUdiaEZXOTRweVRx?= =?utf-8?B?TDZXbFdyQzU5c0ZkQW9zTyswUGJsN29MNGo4dXpDc1l2QWxaWFYySkFoK0o0?= =?utf-8?B?MWdhcDFEanRiNWxhUW9YQS9qenNzUmd4VElDcUlhTE9VaUl3VUxzb0RtOFQ3?= =?utf-8?B?M21uWnp6VGlhQS84bEpDYXc2aWNXZ0lZQmtwMWhDd290T3ZheGFZYXNoNW1X?= =?utf-8?B?d2hyV29HbmQyVUtEZjNPbGloTzhYdi9obHZsVk9YMWZ0Ni9kR2tscEJSUWR4?= =?utf-8?B?ZTBtSjg5M2J4a3NHUmhEZ3lxcjlNRkc2VWQya0c1SDVwb2F2NmpyMDY4ZjJa?= =?utf-8?B?WjJETi83MjhKVHlYZ3UwRHM0aG1LaEFXUWFTalBQK2F2dmdrKzkxbWc0Vms4?= =?utf-8?B?WjZlS3hEMWxsbmN0L0tZZGlMVVBjZEtta3VjR0kyd0JwS1lnbmZ1dEhzRHpk?= =?utf-8?B?bkFSN0JRb0Nna0xmSjFrZFRWYnJnWUdHL0NMNHZZSm13Vm5HYXg1NjlZSEsx?= =?utf-8?B?Rm5Nd05wcVprM1FZOTlFZ3N4V0JhTEx6cVNLVlhmWHk5c1pkbVdBZml0RDYv?= =?utf-8?B?ZnRRcWVqd0xwRFRpSlR4UlJLNFoyaW1xOTRpSnJpMk1RNTFRNE05dGZpbkVj?= =?utf-8?B?RmxxdVRVcGZzWkM2U2NNcm12Nm1KdUY3MHBjY3pQSERjUnJqbzBjR25VeVl1?= =?utf-8?B?YkgyZGZJQ2JkYlFNdjBtZmFwOTZ6cnZKNHFwdnlFWkl3S0V4VzMyY2hlQlc4?= =?utf-8?B?Y1o5cHRjd3V1bkNWSWRraTBnektJclJycWZ4cVVmYTNNWGxWdDF3SEpuYUpR?= =?utf-8?B?QTdNR0RXU1d1Z0tiSStQd3g4a0lIT2U0VWhUSUtLQVcrSWUvRGpjeFRhbElM?= =?utf-8?B?Q0FMd3NkbHQ5c0Z1ck93TVdGM0FDM0hWL3o1RDlvYmRNNzhyRVJIVUszbG4z?= =?utf-8?B?VDhXTmFGU0RaRXhtZXNEcHN6ME93WDV6eUlsYjZhZVp3eU9xVE9pRkxvdlV3?= =?utf-8?B?Y041Y3Rrck9vUVVrcUt3VFJ3dXNrTEZLUWRTSENjSEdheXEvVlI3dWw2L0Fl?= =?utf-8?B?VEorSkNiMGtnNDUvaVhMeDlvNmI4UWdhYWs1L0lrRndjTzd5bWNQNFpibDY0?= =?utf-8?B?eXRYNHBhUENyRlBTS0ZyMzNkMi9yZGNYSjZRTnVMVG5DODZpK1N3dTNLYk9X?= =?utf-8?B?SGoxOSs5b29hVDlUc0VDWEVqVW14NmRBOEtGb3hBUTUwQkFUTjRhczJyWHh0?= =?utf-8?B?QVVKQWh1MGNBeGRiZ2IyQng0QmVMaGFXeEhZd0EwNjdNbzJ1OHJpWXl3TzUr?= =?utf-8?B?L1lkMENVR1d1MGZTZ3dXdDdlSUVqbCtUT1R5RzlKSVJuUE9yMG5YWDZPK3c0?= =?utf-8?B?TFB6eC9RQkdxcFVobVMvelQ5VUdmLzgyaHBJYjBhdkdIeUxCdjlGRVFwU0Zn?= =?utf-8?B?OFFCWXZaZDlaQXo3bjBGREszdGFYenJaWVVMcnp0MjMzdUZXdjRXcjlrRDZo?= =?utf-8?B?RURFUWtHSzIxMmtMaWxOM212bC81Y2Z6WWZiWEZ1U1VZRFhEU2h4QWQ4WlM3?= =?utf-8?B?b2libk1BMCsvZU9YZ2Z0TFBsRitiRjJFaDkzTnhZL2NQQno1a09HRGFlZUlz?= =?utf-8?B?WmwwSEpHcW9qY1d4empkZ2pna2tRVG9DUzNSQkNRMnhudDlPL29QNWpUbFE3?= =?utf-8?B?cU0vZ0RNZTZCcWhod1VTUGNKY09aMTA4OG05bDFJV1lTcWdUSTlGdFFEQTlx?= =?utf-8?B?YWlJOUN6ZHAvbkgvS0VoYVpjNjkvcTNzditRanZFMjU3QzY3UEEwN1RlbU1W?= =?utf-8?B?aWVCU3JOWU11d2UyYlZCVkRxbkpnSEdlY0dSUUVuSnl4d2s0aG42ZVpQdytX?= =?utf-8?B?bnlld3RXUGJBeHlzdjFjNVZCdzR2b29rejJGUisveXpMOGV1TFpJUlNqUTQ5?= =?utf-8?B?emp2ampXUmZZYlFXSG9iL3kzM2JvUGtxbERWZzFRRk4xalloSUtxcnFiUkNj?= =?utf-8?Q?oUlJR5m4fvEvbX0ZN2lJJH4yv?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2e234c48-7f1f-485a-c62b-08de2e2c4747 X-MS-Exchange-CrossTenant-AuthSource: DB9PR04MB8461.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Nov 2025 03:14:44.3936 (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: 4Ry5Dm0yG1nBbu+FIuqBu0HZVvdZhEsSzg+02ejwtix1KZQ2h9ZiK28obDAy9/khxTm7XyimV1LyrtqjENcGAg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8429 From: Peng Fan Spread spectrum configuration is part of clock frequency settings, and its behavior can be validated similarly to assigned clock rates. Extend the existing KUnit tests for assigned-clock-rates to cover assigned-clock-sscs by reusing the test framework. Add new test device trees: - kunit_clk_assigned_sscs_null.dtso - kunit_clk_assigned_sscs_null_consumer.dtso - kunit_clk_assigned_sscs_without.dtso - kunit_clk_assigned_sscs_without_consumer.dtso - kunit_clk_assigned_sscs_zero.dtso - kunit_clk_assigned_sscs_zero_consumer.dtso These tests cover various invalid configurations of assigned-clock-sscs, ensuring robustness and consistent error handling, similar to the coverage provided for assigned-clock-rates. Co-developed-by: Brian Masney Signed-off-by: Brian Masney Signed-off-by: Peng Fan --- drivers/clk/Makefile | 6 + drivers/clk/clk_test.c | 121 +++++++++++++++++= +++- drivers/clk/kunit_clk_assigned_rates.h | 10 ++ drivers/clk/kunit_clk_assigned_rates_multiple.dtso | 6 + ...kunit_clk_assigned_rates_multiple_consumer.dtso | 6 + drivers/clk/kunit_clk_assigned_rates_one.dtso | 3 + .../clk/kunit_clk_assigned_rates_one_consumer.dtso | 3 + .../clk/kunit_clk_assigned_rates_u64_multiple.dtso | 6 + ...t_clk_assigned_rates_u64_multiple_consumer.dtso | 6 + drivers/clk/kunit_clk_assigned_rates_u64_one.dtso | 3 + .../kunit_clk_assigned_rates_u64_one_consumer.dtso | 3 + drivers/clk/kunit_clk_assigned_sscs_null.dtso | 16 +++ .../clk/kunit_clk_assigned_sscs_null_consumer.dtso | 20 ++++ drivers/clk/kunit_clk_assigned_sscs_without.dtso | 15 +++ .../kunit_clk_assigned_sscs_without_consumer.dtso | 19 ++++ drivers/clk/kunit_clk_assigned_sscs_zero.dtso | 12 ++ .../clk/kunit_clk_assigned_sscs_zero_consumer.dtso | 16 +++ 17 files changed, 268 insertions(+), 3 deletions(-) diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index b74a1767ca2787a978db36b0055ea34cb909310e..9e8c989b24be0f7cfdf2325c9b1= 9d05e9d2a8eb9 100644 --- a/drivers/clk/Makefile +++ b/drivers/clk/Makefile @@ -18,6 +18,12 @@ clk-test-y :=3D clk_test.o \ kunit_clk_assigned_rates_without_consumer.dtbo.o \ kunit_clk_assigned_rates_zero.dtbo.o \ kunit_clk_assigned_rates_zero_consumer.dtbo.o \ + kunit_clk_assigned_sscs_null.dtbo.o \ + kunit_clk_assigned_sscs_null_consumer.dtbo.o \ + kunit_clk_assigned_sscs_without.dtbo.o \ + kunit_clk_assigned_sscs_without_consumer.dtbo.o \ + kunit_clk_assigned_sscs_zero.dtbo.o \ + kunit_clk_assigned_sscs_zero_consumer.dtbo.o \ kunit_clk_hw_get_dev_of_node.dtbo.o \ kunit_clk_parent_data_test.dtbo.o obj-$(CONFIG_COMMON_CLK) +=3D clk-divider.o diff --git a/drivers/clk/clk_test.c b/drivers/clk/clk_test.c index a268d7b5d4cb28ec1f029f828c31107f8e130556..97113b61c2841701a44603ca993= 5638374000a2e 100644 --- a/drivers/clk/clk_test.c +++ b/drivers/clk/clk_test.c @@ -28,6 +28,7 @@ static const struct clk_ops empty_clk_ops =3D { }; struct clk_dummy_context { struct clk_hw hw; unsigned long rate; + struct clk_spread_spectrum sscs; }; =20 static unsigned long clk_dummy_recalc_rate(struct clk_hw *hw, @@ -83,6 +84,17 @@ static int clk_dummy_set_rate(struct clk_hw *hw, return 0; } =20 +static int clk_dummy_set_spread_spectrum(struct clk_hw *hw, + const struct clk_spread_spectrum *ss_conf) +{ + struct clk_dummy_context *ctx =3D + container_of(hw, struct clk_dummy_context, hw); + + ctx->sscs =3D *ss_conf; + + return 0; +} + static int clk_dummy_single_set_parent(struct clk_hw *hw, u8 index) { if (index >=3D clk_hw_get_num_parents(hw)) @@ -100,18 +112,21 @@ static const struct clk_ops clk_dummy_rate_ops =3D { .recalc_rate =3D clk_dummy_recalc_rate, .determine_rate =3D clk_dummy_determine_rate, .set_rate =3D clk_dummy_set_rate, + .set_spread_spectrum =3D clk_dummy_set_spread_spectrum, }; =20 static const struct clk_ops clk_dummy_maximize_rate_ops =3D { .recalc_rate =3D clk_dummy_recalc_rate, .determine_rate =3D clk_dummy_maximize_rate, .set_rate =3D clk_dummy_set_rate, + .set_spread_spectrum =3D clk_dummy_set_spread_spectrum, }; =20 static const struct clk_ops clk_dummy_minimize_rate_ops =3D { .recalc_rate =3D clk_dummy_recalc_rate, .determine_rate =3D clk_dummy_minimize_rate, .set_rate =3D clk_dummy_set_rate, + .set_spread_spectrum =3D clk_dummy_set_spread_spectrum, }; =20 static const struct clk_ops clk_dummy_single_parent_ops =3D { @@ -3097,6 +3112,7 @@ struct clk_assigned_rates_context { * @overlay_end: Pointer to end of DT overlay to apply for test * @rate0: Initial rate of first clk * @rate1: Initial rate of second clk + * @sscs: Initial spread spectrum settings * @consumer_test: true if a consumer is being tested */ struct clk_assigned_rates_test_param { @@ -3105,6 +3121,7 @@ struct clk_assigned_rates_test_param { u8 *overlay_end; unsigned long rate0; unsigned long rate1; + struct clk_spread_spectrum sscs; bool consumer_test; }; =20 @@ -3116,7 +3133,7 @@ static void clk_assigned_rates_register_clk(struct kunit *test, struct clk_dummy_context *ctx, struct device_node *np, const char *name, - unsigned long rate) + unsigned long rate, const struct clk_spread_spectrum *sscs) { struct clk_init_data init =3D { }; =20 @@ -3124,6 +3141,7 @@ clk_assigned_rates_register_clk(struct kunit *test, init.ops =3D &clk_dummy_rate_ops; ctx->hw.init =3D &init; ctx->rate =3D rate; + ctx->sscs =3D *sscs; =20 KUNIT_ASSERT_EQ(test, 0, of_clk_hw_register_kunit(test, np, &ctx->hw)); KUNIT_ASSERT_EQ(test, ctx->rate, rate); @@ -3167,14 +3185,16 @@ static int clk_assigned_rates_test_init(struct kuni= t *test) KUNIT_ASSERT_LT(test, clk_cells, 2); =20 clk_assigned_rates_register_clk(test, &ctx->clk0, np, - "test_assigned_rate0", test_param->rate0); + "test_assigned_rate0", test_param->rate0, + &test_param->sscs); if (clk_cells =3D=3D 0) { KUNIT_ASSERT_EQ(test, 0, of_clk_add_hw_provider_kunit(test, np, of_clk_hw_simple_get, &ctx->clk0.hw)); } else if (clk_cells =3D=3D 1) { clk_assigned_rates_register_clk(test, &ctx->clk1, np, - "test_assigned_rate1", test_param->rate1); + "test_assigned_rate1", test_param->rate1, + &test_param->sscs); =20 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, data =3D kunit_kzalloc(test, struct_size(data, hws, 2), GFP_KERNEL)); @@ -3203,6 +3223,9 @@ static void clk_assigned_rates_assigns_one(struct kun= it *test) struct clk_assigned_rates_context *ctx =3D test->priv; =20 KUNIT_EXPECT_EQ(test, ctx->clk0.rate, ASSIGNED_RATES_0_RATE); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.modfreq_hz, ASSIGNED_SSCS_0_MODFREQ); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.spread_bp, ASSIGNED_SSCS_0_SPREAD); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.method, ASSIGNED_SSCS_0_METHOD); } =20 static void clk_assigned_rates_assigns_multiple(struct kunit *test) @@ -3210,7 +3233,13 @@ static void clk_assigned_rates_assigns_multiple(stru= ct kunit *test) struct clk_assigned_rates_context *ctx =3D test->priv; =20 KUNIT_EXPECT_EQ(test, ctx->clk0.rate, ASSIGNED_RATES_0_RATE); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.modfreq_hz, ASSIGNED_SSCS_0_MODFREQ); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.spread_bp, ASSIGNED_SSCS_0_SPREAD); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.method, ASSIGNED_SSCS_0_METHOD); KUNIT_EXPECT_EQ(test, ctx->clk1.rate, ASSIGNED_RATES_1_RATE); + KUNIT_EXPECT_EQ(test, ctx->clk1.sscs.modfreq_hz, ASSIGNED_SSCS_1_MODFREQ); + KUNIT_EXPECT_EQ(test, ctx->clk1.sscs.spread_bp, ASSIGNED_SSCS_1_SPREAD); + KUNIT_EXPECT_EQ(test, ctx->clk1.sscs.method, ASSIGNED_SSCS_1_METHOD); } =20 static void clk_assigned_rates_skips(struct kunit *test) @@ -3222,6 +3251,19 @@ static void clk_assigned_rates_skips(struct kunit *t= est) KUNIT_EXPECT_EQ(test, ctx->clk0.rate, test_param->rate0); } =20 +static void clk_assigned_sscs_skips(struct kunit *test) +{ + struct clk_assigned_rates_context *ctx =3D test->priv; + const struct clk_assigned_rates_test_param *test_param =3D test->param_va= lue; + + KUNIT_EXPECT_NE(test, ctx->clk0.sscs.modfreq_hz, ASSIGNED_SSCS_0_MODFREQ); + KUNIT_EXPECT_NE(test, ctx->clk0.sscs.spread_bp, ASSIGNED_SSCS_0_SPREAD); + KUNIT_EXPECT_NE(test, ctx->clk0.sscs.method, ASSIGNED_SSCS_0_METHOD); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.modfreq_hz, test_param->sscs.modfreq= _hz); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.spread_bp, test_param->sscs.spread_b= p); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.method, test_param->sscs.method); +} + OF_OVERLAY_DECLARE(kunit_clk_assigned_rates_one); OF_OVERLAY_DECLARE(kunit_clk_assigned_rates_one_consumer); OF_OVERLAY_DECLARE(kunit_clk_assigned_rates_u64_one); @@ -3384,6 +3426,77 @@ KUNIT_ARRAY_PARAM_DESC(clk_assigned_rates_skips, clk_assigned_rates_skips_test_params, desc) =20 +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_without); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_without_consumer); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_zero); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_zero_consumer); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_null); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_null_consumer); + +/* Test cases that skip changing the sscs due to malformed DT */ +static const struct clk_assigned_rates_test_param clk_assigned_sscs_skips_= test_params[] =3D { + { + /* + * Test that an assigned-clock-sscs property without an assigned-clocks + * property fails when the property is in the provider. + */ + .desc =3D "provider missing assigned-clocks", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_without), + .sscs =3D {50000, 60000, 3}, + }, + { + /* + * Test that an assigned-clock-rates property without an assigned-clocks + * property fails when the property is in the consumer. + */ + .desc =3D "consumer missing assigned-clocks", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_without_consumer), + .sscs =3D {50000, 60000, 3}, + .consumer_test =3D true, + }, + { + /* + * Test that an assigned-clock-rates property of zero doesn't + * set a rate when the property is in the provider. + */ + .desc =3D "provider assigned-clock-sscs of zero", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_zero), + .sscs =3D {50000, 60000, 3}, + }, + { + /* + * Test that an assigned-clock-rates property of zero doesn't + * set a rate when the property is in the consumer. + */ + .desc =3D "consumer assigned-clock-sscs of zero", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_zero_consumer), + .sscs =3D {50000, 60000, 3}, + .consumer_test =3D true, + }, + { + /* + * Test that an assigned-clocks property with a null phandle + * doesn't set a rate when the property is in the provider. + */ + .desc =3D "provider assigned-clocks null phandle", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_null), + .sscs =3D {50000, 60000, 3}, + }, + { + /* + * Test that an assigned-clocks property with a null phandle + * doesn't set a rate when the property is in the consumer. + */ + .desc =3D "provider assigned-clocks null phandle", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_null_consumer), + .sscs =3D {50000, 60000, 3}, + .consumer_test =3D true, + }, +}; +KUNIT_ARRAY_PARAM_DESC(clk_assigned_sscs_skips, + clk_assigned_sscs_skips_test_params, + desc) + static struct kunit_case clk_assigned_rates_test_cases[] =3D { KUNIT_CASE_PARAM(clk_assigned_rates_assigns_one, clk_assigned_rates_assigns_one_gen_params), @@ -3391,6 +3504,8 @@ static struct kunit_case clk_assigned_rates_test_case= s[] =3D { clk_assigned_rates_assigns_multiple_gen_params), KUNIT_CASE_PARAM(clk_assigned_rates_skips, clk_assigned_rates_skips_gen_params), + KUNIT_CASE_PARAM(clk_assigned_sscs_skips, + clk_assigned_sscs_skips_gen_params), {} }; =20 diff --git a/drivers/clk/kunit_clk_assigned_rates.h b/drivers/clk/kunit_clk= _assigned_rates.h index df2d84dcaa93511694b6da842debdc3cfd3a6c19..d7ae5ec2d25bed79b8438e8ce58= 0872131ce4286 100644 --- a/drivers/clk/kunit_clk_assigned_rates.h +++ b/drivers/clk/kunit_clk_assigned_rates.h @@ -1,8 +1,18 @@ /* SPDX-License-Identifier: GPL-2.0 */ + +#include + #ifndef _KUNIT_CLK_ASSIGNED_RATES_H #define _KUNIT_CLK_ASSIGNED_RATES_H =20 #define ASSIGNED_RATES_0_RATE 1600000 #define ASSIGNED_RATES_1_RATE 9700000 =20 +#define ASSIGNED_SSCS_0_MODFREQ 10000 +#define ASSIGNED_SSCS_0_SPREAD 30000 +#define ASSIGNED_SSCS_0_METHOD CLK_SSC_CENTER_SPREAD +#define ASSIGNED_SSCS_1_MODFREQ 20000 +#define ASSIGNED_SSCS_1_SPREAD 40000 +#define ASSIGNED_SSCS_1_METHOD CLK_SSC_UP_SPREAD + #endif diff --git a/drivers/clk/kunit_clk_assigned_rates_multiple.dtso b/drivers/c= lk/kunit_clk_assigned_rates_multiple.dtso index e600736e70f5041ddeb1bfb0d6074746a064e08a..6c54d65444d5d779c9fa4bb2a79= c4742dd88f6d0 100644 --- a/drivers/clk/kunit_clk_assigned_rates_multiple.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_multiple.dtso @@ -12,5 +12,11 @@ clk: kunit-clock { <&clk 1>; assigned-clock-rates =3D , ; + assigned-clock-sscs =3D , + ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_multiple_consumer.dtso b/= drivers/clk/kunit_clk_assigned_rates_multiple_consumer.dtso index 260aba458daf2bc57fde46b5442453e7de10faac..b1fee396c4b1e51341a41116856= 9d8351bb23b12 100644 --- a/drivers/clk/kunit_clk_assigned_rates_multiple_consumer.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_multiple_consumer.dtso @@ -16,5 +16,11 @@ kunit-clock-consumer { <&clk 1>; assigned-clock-rates =3D , ; + assigned-clock-sscs =3D , + ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_one.dtso b/drivers/clk/ku= nit_clk_assigned_rates_one.dtso index dd95ec9b1cf977883f71564a94602ae518937132..da6e91b9e6bda0ef2c8f601a08a= ef1f10fda4baa 100644 --- a/drivers/clk/kunit_clk_assigned_rates_one.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_one.dtso @@ -10,5 +10,8 @@ clk: kunit-clock { #clock-cells =3D <0>; assigned-clocks =3D <&clk>; assigned-clock-rates =3D ; + assigned-clock-sscs =3D ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_one_consumer.dtso b/drive= rs/clk/kunit_clk_assigned_rates_one_consumer.dtso index a41dca806318b031187c1b8739fcf71eb088a480..4b6e06048f863d014aed8222652= d6d9d38e9238b 100644 --- a/drivers/clk/kunit_clk_assigned_rates_one_consumer.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_one_consumer.dtso @@ -14,5 +14,8 @@ kunit-clock-consumer { compatible =3D "test,clk-consumer"; assigned-clocks =3D <&clk>; assigned-clock-rates =3D ; + assigned-clock-sscs =3D ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_u64_multiple.dtso b/drive= rs/clk/kunit_clk_assigned_rates_u64_multiple.dtso index 389b4e2eb7f74f1770ff5f5c4be5b45dd344dc9c..3a717dab2d00b7fdaff580e30ed= 2cc520683ef95 100644 --- a/drivers/clk/kunit_clk_assigned_rates_u64_multiple.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_u64_multiple.dtso @@ -12,5 +12,11 @@ clk: kunit-clock { <&clk 1>; assigned-clock-rates-u64 =3D /bits/ 64 , /bits/ 64 ; + assigned-clock-sscs =3D , + ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_u64_multiple_consumer.dts= o b/drivers/clk/kunit_clk_assigned_rates_u64_multiple_consumer.dtso index 3e117fd59b7da19cd8a603af77eff29175ce6900..cbee7cbad068f3336f0c8997a5b= 3e9af4db565c9 100644 --- a/drivers/clk/kunit_clk_assigned_rates_u64_multiple_consumer.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_u64_multiple_consumer.dtso @@ -16,5 +16,11 @@ kunit-clock-consumer { <&clk 1>; assigned-clock-rates-u64 =3D /bits/ 64 , /bits/ 64 ; + assigned-clock-sscs =3D , + ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_u64_one.dtso b/drivers/cl= k/kunit_clk_assigned_rates_u64_one.dtso index 87041264e8f544dafddf2e905efc89dc1f917c54..9b04d6927f0830a5621af1cbea5= 03a427b46bee0 100644 --- a/drivers/clk/kunit_clk_assigned_rates_u64_one.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_u64_one.dtso @@ -10,5 +10,8 @@ clk: kunit-clock { #clock-cells =3D <0>; assigned-clocks =3D <&clk>; assigned-clock-rates-u64 =3D /bits/ 64 ; + assigned-clock-sscs =3D ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_u64_one_consumer.dtso b/d= rivers/clk/kunit_clk_assigned_rates_u64_one_consumer.dtso index 3259c003aec0be3269ab60a4a3a95df69f8de1f8..4784d40520f4193e4f08c898138= 6f0772a063452 100644 --- a/drivers/clk/kunit_clk_assigned_rates_u64_one_consumer.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_u64_one_consumer.dtso @@ -14,5 +14,8 @@ kunit-clock-consumer { compatible =3D "test,clk-consumer"; assigned-clocks =3D <&clk>; assigned-clock-rates-u64 =3D /bits/ 64 ; + assigned-clock-sscs =3D ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_sscs_null.dtso b/drivers/clk/ku= nit_clk_assigned_sscs_null.dtso new file mode 100644 index 0000000000000000000000000000000000000000..43b2068c845dea53ea1328bb63a= 2f58a4b8ef339 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_null.dtso @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +#include "kunit_clk_assigned_rates.h" + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + assigned-clocks =3D <0>; + assigned-clock-sscs =3D ; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_null_consumer.dtso b/drive= rs/clk/kunit_clk_assigned_sscs_null_consumer.dtso new file mode 100644 index 0000000000000000000000000000000000000000..bda008f5aaa35e53af97863e4f2= e6d8a168cc053 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_null_consumer.dtso @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +#include "kunit_clk_assigned_rates.h" + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + }; + + kunit-clock-consumer { + compatible =3D "test,clk-consumer"; + assigned-clocks =3D <0>; + assigned-clock-sscs =3D ; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_without.dtso b/drivers/clk= /kunit_clk_assigned_sscs_without.dtso new file mode 100644 index 0000000000000000000000000000000000000000..08660846b55c12122bfb211c01c= 377a3a45223c9 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_without.dtso @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +#include "kunit_clk_assigned_rates.h" + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + assigned-clock-sscs =3D ; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_without_consumer.dtso b/dr= ivers/clk/kunit_clk_assigned_sscs_without_consumer.dtso new file mode 100644 index 0000000000000000000000000000000000000000..e1c089c6f0c0223f16f7ac9a396= e7ac7b821c967 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_without_consumer.dtso @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +#include "kunit_clk_assigned_rates.h" + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + }; + + kunit-clock-consumer { + compatible =3D "test,clk-consumer"; + assigned-clock-sscs =3D ; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_zero.dtso b/drivers/clk/ku= nit_clk_assigned_sscs_zero.dtso new file mode 100644 index 0000000000000000000000000000000000000000..f39f4e754e532c9c1b1fdf03470= 0e5af1f3f0779 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_zero.dtso @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + assigned-clocks =3D <&clk>; + assigned-clock-sscs =3D <0 0 0>; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_zero_consumer.dtso b/drive= rs/clk/kunit_clk_assigned_sscs_zero_consumer.dtso new file mode 100644 index 0000000000000000000000000000000000000000..d6bd7dfada7e2f455cb23e483b9= bd6ce24839e3a --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_zero_consumer.dtso @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + }; + + kunit-clock-consumer { + compatible =3D "test,clk-consumer"; + assigned-clocks =3D <&clk>; + assigned-clock-sscs =3D <0 0 0>; + }; +}; --=20 2.37.1 From nobody Mon Dec 1 21:29:55 2025 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010036.outbound.protection.outlook.com [52.101.84.36]) (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 9B9F72D2383; Fri, 28 Nov 2025 03:14:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.36 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764299695; cv=fail; b=qa5nK7dLpyi8YJqoH5Xkiz8F6gEmLO51FOPzwrYXPG0t/JyHm6lqvbQuS7u3KLxhM4MKvWqbEKmYdKSHtWgM78zoosTf/5bFu+fOgBV2gSYEkP+lKD0OpBfzRTaHuCPvQ/eqgOjDjm2vCaceQgheXw2Mb9yXqZNCXcX1rAW2Els= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764299695; c=relaxed/simple; bh=/K2kmrZYy1LANNEXF5bEI+9e0tLfh7x26PC1e0K/k8o=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=pSsMOv7UzDbgFcUo4gIE79/QkbYZPLam1EC5kPizgVfzKv6ekI+x3qxhg/5LyFicJb0rvfi5AUTtwfBR2wN8pw9s6LACOybEoJD1g8sRtRMlPiTd6ZPtpq7vWeWeHi5Oglf9JDuJGwnCMif1n6sJVINl2L6dijmO/qzBY2xiTzE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=uvY2NkJV; arc=fail smtp.client-ip=52.101.84.36 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="uvY2NkJV" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=T0iaWNums58WsC6KYzHvgS1r+3sakmLBtz4lh5XN63gnl4FJeWkQFIHZEDCk8jxx0nRQyUWMgyQtu9gO2n4t+PynEt90d8GErVvKdtSqtMPSu4HEDKb3u8qQZo8OicTscQq4N/0gy2z22FPVz56XjKkS/CbyfrYXQ61oFKUUiVeQq62IkSuEccVnpldyWbvv9rf4VjVrc1Pl4ZLIYdtHM8qVfIz7zX8V5smz8tUwovvTFBXdmsiNisqT+XomkDouX2yPDzDhssJ3tX3UNuoZo7QcF/jkQ1Rdn2ShboD0x7y8UIJ+mruDhHWoyTU3C23ywOyKDS5a0Nr5vc7xJBENYw== 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=mQZyyhQQelKMj9EWYnTr80NraBxCPj3LhCYVoeJVvuc=; b=NIfyd8Lmpx47tXSpBV74p7ZvakA96kHsmvSDNWNE9Roj08nILtfMZl3Z19v3bXLcFhKAQfTLhw1+Xp2NBgCioN23QL5+IEsuZq8PBlONxQDP5yCb7TlGfQ1oXfCOD9A8u8in2VMZqEtysQ8hsg/WNgv7+cis5uYFI51RmzdOdQ56rkG4iXUcFC3mwYb45iN4WwfpS7Zwdt18kFVui9FYcdvx2VRbfV4y9y27HyhrEAFD3TyyODYigLovkcgl9uRKfwpGvzZ5YTVWFfqaeApxXlcYz9T1Y2AwbaOuiKi0r54Ub0E2tGWhsVdWh5ECodOlx77EkJIcCEc1ynj2rYC7ow== 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=mQZyyhQQelKMj9EWYnTr80NraBxCPj3LhCYVoeJVvuc=; b=uvY2NkJV2RvjAPNU4pmZ50rPdY796MRto3Bl7IQQjXonYC9AtoIo4+vqoCwz27tMBDQ4G/NNFIdvZuug8bRZPp+xfrfXj2nA/Qa3MaQk/j/ja87aHc5kLidv94CJ/W9SKjs/jBa6CclmBcU2sN3Yr2jxynZzzISQ80/zvAAkhgwpNiJn6WxjW6uNWbUL/LkJDOfM9IAPnqPiJzAf2+0CnpengeXyBHNtiqkglGmncRjyMblvax0mSr5NlEnfLPbnG5MMSo8CzgvwpE93S9MRVnywDyLro0SK+6+RsHHDEtxUvT+cmzW5dp5hTwY2dY/qXJ284AiY4jSN9bO7SmNuXw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from DB9PR04MB8461.eurprd04.prod.outlook.com (2603:10a6:10:2cf::20) by DB9PR04MB8429.eurprd04.prod.outlook.com (2603:10a6:10:242::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.15; Fri, 28 Nov 2025 03:14:48 +0000 Received: from DB9PR04MB8461.eurprd04.prod.outlook.com ([fe80::b1b9:faa9:901b:c197]) by DB9PR04MB8461.eurprd04.prod.outlook.com ([fe80::b1b9:faa9:901b:c197%4]) with mapi id 15.20.9366.012; Fri, 28 Nov 2025 03:14:48 +0000 From: "Peng Fan (OSS)" Date: Fri, 28 Nov 2025 11:14:14 +0800 Subject: [PATCH v6 5/6] clk: scmi: Introduce common header for SCMI clock interface Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-clk-ssc-v6-2-v6-5-cfafdb5d6811@nxp.com> References: <20251128-clk-ssc-v6-2-v6-0-cfafdb5d6811@nxp.com> In-Reply-To: <20251128-clk-ssc-v6-2-v6-0-cfafdb5d6811@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis , Brian Masney Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: SG2PR02CA0031.apcprd02.prod.outlook.com (2603:1096:3:18::19) To DB9PR04MB8461.eurprd04.prod.outlook.com (2603:10a6:10:2cf::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9PR04MB8461:EE_|DB9PR04MB8429:EE_ X-MS-Office365-Filtering-Correlation-Id: 0ee4250a-4b2f-46a0-d8e5-08de2e2c49f3 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|376014|52116014|7416014|1800799024|19092799006|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?RW5RZ2JhUW4vTWJBaEtic2YydWgyYVV1TVV1QjBWeE5IS3pPN0tIWHB1VHBU?= =?utf-8?B?bHFRZWhkZjIyM2lpNzlxWGY0bTJpZ2F1cVZwZkYvNi9PUmp2TSsxcEgzRytv?= =?utf-8?B?NkM3dDNydUVNaUZKRHRtWUlvbFVwbFVweVNzeVBIcFVFN0tKZG8wMGVmY2tn?= =?utf-8?B?cVQ3TVQza1NFTDRCdEtVLzA4OVFydVpxZlREaDRVVmxSRzY4aGU1TGhLbTk0?= =?utf-8?B?WHM4T1dPNDdZRGxMRXNzazdUSmV5VUdCaFhUUjl0K0QzSGhYaWNJeVdQQXdS?= =?utf-8?B?UW9NSjlEbEd5d0REUHQra1M2dWFuWUtsMkQyY05adUh2cXlzWm9zLzdkcWF3?= =?utf-8?B?V21KcTVtY1ZHWk1XSzQxc25ibFc3WGt1d3pIMWRkRklRQ2I0VER6UDN6YWNU?= =?utf-8?B?OGo3U1NrRENmN2ZPd0haMjRGdWJCZDY0R1VJK2RIa1M4UlZxTEM4T09TbDA2?= =?utf-8?B?ZEpnc3JRTis0aWhkVi9ZSUxGTWdnVEExYU9kQ2ZhK0RTNzNmNUxhaHVYdFlS?= =?utf-8?B?MGFyc1Y2MkhiWXZuUFMxTGtLSURuSG9FTGlXMlVDM29aSDY5eThnNTRnT3hX?= =?utf-8?B?cVpTMHJyTUxYeWZPQ3BmNWFzclB1WE4xZUZiS1Fvc08xeFV5aFpjMXlCWXJR?= =?utf-8?B?Qmc2Zk00cFUvZVoxSVBKdHhFOE1hMmlkeDZoR0ppMHp1aDE3cXBEeCs3KzAr?= =?utf-8?B?QjgwYnY2S21GY0dvVFgxOUpycWxRNXR1blZMb08vQnVWYkVRdjVSeWRmSS96?= =?utf-8?B?cExUWE0yb09iKzQ0aER5MXlvQkpZMUQxZm5PM3RsZ3F3TXZvV3ZPTzhRVVZK?= =?utf-8?B?N241NXFHWS9lcEFRcFBnREFFS1hEZXhnYXY5Vnh5blZYeVMydVh4eHN6WUVD?= =?utf-8?B?aTdOdjV0eVBrSzEzeVo3aGlUQVIzWUFZRmJRb0p4a3dET0Q4d1dKSmF6Z0li?= =?utf-8?B?K2JxZEVyczRodjBxNGsrOHJ0cGtuTjBQemsrM3pyQXZtS1R1Ky9oZDBEbGxM?= =?utf-8?B?UTVJN1Nsa2NtNGFHK0tJYmpsZ0FlOXJiN2VDSEpoUy9uTEd6TDVuTEt2aHlF?= =?utf-8?B?N21WRGliMWRUb2Y1dXptelVRZnRpT0VpS2xEVlh0SXIxNHJqS2FGQVZ5d09s?= =?utf-8?B?QTdqZ1VSU2pOMWozbjl2aWxlWTBXQThmTThuMFphM0hFN2FUK2dGeThGNzM5?= =?utf-8?B?SmxVcVVXaW9YUi9YRzk0VGN1UWFVSGVEeEZkN0x2OEw3OWsrKzdwUVpRNDdn?= =?utf-8?B?ZUNyQ3dKTEhxemVHZHJ0NTJmQk5Wb3ZwdkFXdktsYUVWd20za2k0WHNSRE1E?= =?utf-8?B?TWg5cGhrVldraGNCMWM3UkJhQUNMUStUWVRRcWNvbVNtR25tL3MyOU43aG9p?= =?utf-8?B?VkswSHY4dWFWMzFZUVN1QVBLQ3l1ZDZRdmdGOTBOSEJGanhHSUI2YXdwZGJy?= =?utf-8?B?UzMvWFY2NmdTYTFoVUt6TGg3d3VHY0k2ZVRNWU84czZ6Umo5Q1pHTFdhK2FC?= =?utf-8?B?VGROR2hvRTZLS3Ura3UxVmIvSXJWL1JjOGVOR1d3Y1pPNXN1Z1VnMTdsT21Z?= =?utf-8?B?UW80VytoZXJ3dzV3Mzd5YU5sWG5ydmh0UTV1Z2hXcC9YNjlMQVM0TUtvOE1O?= =?utf-8?B?SlVRa21KaWtEaHFvRWVUdmg4aUNmOXZEQko2dldGYzJCNjJTQU0yOHhjNmZk?= =?utf-8?B?aGtEMWk4akZxc3RMd0phcmFRMVRnc1BpOXc4VHFna3hrd3hGNG1WbDc1MXpM?= =?utf-8?B?eXpOWENJVFZYV3llUFUyQ2haOTlkcitSWk1UQmhUSUVGeVRXVkk0ZTBncHFn?= =?utf-8?B?c3paYjRnTWJPejRKTHdMN2dMNFhMd2hRSm5DSi9JQTdTcGo0eU5hWDM4Qkd6?= =?utf-8?B?UC91ZitnK0JYT0FlZHZEa3kzakJyYlBrRlFzc3Y3M0huZW94Y1hrMlIxVnN4?= =?utf-8?B?Rk9PdWQyM1ZuTTJuL2FlWG1vd0hFamF0WnZuY21OQ1EyTlpOWk1nQVlaajg1?= =?utf-8?B?TWFUYnBib2p0VzVYUWo0bVhHVVAvSHZNUmJSUHkrcHAvWjlHSG1naFc3NkpE?= =?utf-8?Q?VAu0P4?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR04MB8461.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(7416014)(1800799024)(19092799006)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NGdmK21XeXpvV2NxNEZPRG5STS9XT0VibHFwVkxpSDdSOUlITTFhdFdpNzNz?= =?utf-8?B?TExRakQ3d1BEK0xTRnJtTWtCcmxDaENnMmRuYVVlWUZxU0pzNTduREtRcjNW?= =?utf-8?B?ZmtETGtsanpjaEV3bCs3d3BEV096b0MzODUvQkJENGd1MzNVQUMwM3ZhbmFn?= =?utf-8?B?S1pMRTdBR3ltY0NJTGVBc0xPNXJabVc0dXZmeCtiRDdEOXNIZHVoYVYwaFN6?= =?utf-8?B?ZmNXOE96d1dxckJHY3l6M0F4elNBR1ZVQTBJRTVUMFNwT1hhbWpPdXphaUpI?= =?utf-8?B?OER0ckJpNmVhQjdhMS81YU85WFpoWVkxc0FOQStRSU0yMEp3aWNNTEtvQ3VZ?= =?utf-8?B?VkdrWFNNdWFhbnJkS21jbFZ0ZjI1cEk3RmpuQXI4c2dwTk54UmxaUExIbjZh?= =?utf-8?B?Qm9IY3Fzbi9DWklMWDhOTzlwSGs1ay9VRXQzcUpsL0QwQVhpZWY2anRnWksx?= =?utf-8?B?ZlhzbHYwNkN2WTA4bGsyY3c4NFVBcktmdEswamNGajFBeGFTeTBQSklTVngr?= =?utf-8?B?YzhIYWlMcHRsYzhFRE4wV1BySnQwU3Y3K1haSDNpV3dZQXpIeFBpRVB6a242?= =?utf-8?B?R1NGMlV3TEU1ZWtwUUpoclZYamIxSTlmcjJ4R0dXbVVtRlhEdy9yaGxMTWxC?= =?utf-8?B?RGNYd0wxSW85WnplcWpaaVlQL0hDVFU1V0p4UCtpTWxqUDNyd09RZFFwTnpt?= =?utf-8?B?UjVuVGM4QWoycVNSVTVmVlNlVXFWem9KVDBBOGYxMnJLOWFVMEI5M2tFeVl6?= =?utf-8?B?TDZkK0Q3MitNdmZ0bXhJMW0xWm5qQ0lrQlZhK2d6bHY1YW1tdjl1cktsb2I2?= =?utf-8?B?a2huMFZZa1FYbXdmTk1TemNnZG80T3BFN0cybG16czJseDlxOUN4dXlpTzd6?= =?utf-8?B?eW9zS2hadG14bCtadUpIbzZsbW9FNVF6SFpvNVZDbXZWeUQwV2x3bXhjM0g1?= =?utf-8?B?Y3hQVStWSmxUMUNSR2VuQ2ZtcS9KZWsycHJoYVlSaXFxT29nMUZXS2ZYZFhJ?= =?utf-8?B?eDdOdjJrVXp4djB2ZVBUcllRVTZXRXoxYUwwTGpiMmtZekcxd1Qxb1NaalZI?= =?utf-8?B?ckVUdmI1S0lqMkVlODZkbjAzanJpL2FSenZkc01zWUVtV0dubHpDWEkyWWJG?= =?utf-8?B?c2FHR0NZU3J5aTJ5NjV1TEc1VHVSL3dHZmVQaWpEcTM1Y1NxSDl6ZVM2OGlU?= =?utf-8?B?bERPR3VxNVZKWjNVeDdHbytMVTh1SWNnaHN3Wkc0Y1dZM1FjKzRQNlhCQlJ3?= =?utf-8?B?SDNvOEFrLy8zOTNQVmRvYSt4QUdBVTcrenFOcjA3OVkwVDFvMVFadjFHUzEx?= =?utf-8?B?UHJVU1JGa2p0OXNzb2NpOWc2ZDBFRmZzZnJlQlJSempQaThsaVE4QXNvVGo4?= =?utf-8?B?R3lzQW8vZkZDc3BRcXhCRVJFRzhwazNxUCt0S0FQZWtndi9qdmR6VmhuUVRT?= =?utf-8?B?VU1taVhZYXZMY1hFdFhxcXRlTFRoR280WURBZmlETmtpRlRTRHlHM1A2RFZS?= =?utf-8?B?Q3JGSmpUUlRyZE5KTEJCNkZGREtVNmdDejNKMlFnTVF3ZDlPYzdBcU8rdFFO?= =?utf-8?B?aHNaL0xFSCttNUZySlkxOTJ1ajAwMXRmVWJGR0wxWmI4RElHOTR1bDZvOGQ4?= =?utf-8?B?SEcrZmFnWVRWOVloc3pJekJmYlMrWW56dVloMFBoVDFtaWJYZEF4Q0trcWY5?= =?utf-8?B?amZ0MlhmQjlsWW83MlROSkRuRHNHR09lUmpkay9YRVQyeU1zTldYRGMwZlJQ?= =?utf-8?B?dU0ySllPTjRRTVFob1c5bVNkdGxzNk1GUWJKQTZNR2kreE10Vy9WWkpRWDVa?= =?utf-8?B?MERpcHQ5Z0psZkZXZTNVYWxsalhVK1g4Tjl0QmxzTWtEOE9ibTB5MlBFeGs1?= =?utf-8?B?ZFQyWUwzMXZuUy9sUXlJSG1sT2hyYmx4ZS9Bd2JmcGF0ZGExY3B2bWc0dXFs?= =?utf-8?B?NVo4RW00SGhhM21JanlHclpTaGY2a0VBZWFWMnlRMTdsL1dwd0ZJSDZJRW5Q?= =?utf-8?B?Q2prRUpsTVRobmEvRnhIODJTMnV6Z2Q0VXF3R1RVLzFqTUpGT0lEL0NFSSs3?= =?utf-8?B?VWwxbEUxOWxDekhUMWI5dWNHdkxab1EvL0RnTDcydVhYblpEdHExVExLSHY5?= =?utf-8?Q?5Y3m5LPbTrYBOYMUtfT4rIgDR?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0ee4250a-4b2f-46a0-d8e5-08de2e2c49f3 X-MS-Exchange-CrossTenant-AuthSource: DB9PR04MB8461.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Nov 2025 03:14:48.8318 (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: p8bUlzfPBUEc3Fk/qZVf5mNnwcmtlyK7WDgW4WO+CPr5+wHmvFXGr6FeuubWA7ep/99wyhnozbjOL0MO/FXzUg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8429 From: Peng Fan Added a new header file 'clk-scmi.h' to define common structures and interfaces for the SCMI clock driver. This header will also be used by OEM-specific extensions to ensure consistency and reusability. Moved relevant structure definitions from the driver implementation to 'clk-scmi.h' to facilitate shared usage. Signed-off-by: Peng Fan --- drivers/clk/clk-scmi.c | 27 +-------------------------- drivers/clk/clk-scmi.h | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 26 deletions(-) diff --git a/drivers/clk/clk-scmi.c b/drivers/clk/clk-scmi.c index 6b286ea6f1218c802d0ebb782c75a19057581c20..bf85924d61985eb9e596419349e= b883e3817de73 100644 --- a/drivers/clk/clk-scmi.c +++ b/drivers/clk/clk-scmi.c @@ -14,32 +14,7 @@ #include #include =20 -#define NOT_ATOMIC false -#define ATOMIC true - -enum scmi_clk_feats { - SCMI_CLK_ATOMIC_SUPPORTED, - SCMI_CLK_STATE_CTRL_SUPPORTED, - SCMI_CLK_RATE_CTRL_SUPPORTED, - SCMI_CLK_PARENT_CTRL_SUPPORTED, - SCMI_CLK_DUTY_CYCLE_SUPPORTED, - SCMI_CLK_FEATS_COUNT -}; - -#define SCMI_MAX_CLK_OPS BIT(SCMI_CLK_FEATS_COUNT) - -static const struct scmi_clk_proto_ops *scmi_proto_clk_ops; - -struct scmi_clk { - u32 id; - struct device *dev; - struct clk_hw hw; - const struct scmi_clock_info *info; - const struct scmi_protocol_handle *ph; - struct clk_parent_data *parent_data; -}; - -#define to_scmi_clk(clk) container_of(clk, struct scmi_clk, hw) +const struct scmi_clk_proto_ops *scmi_proto_clk_ops; =20 static unsigned long scmi_clk_recalc_rate(struct clk_hw *hw, unsigned long parent_rate) diff --git a/drivers/clk/clk-scmi.h b/drivers/clk/clk-scmi.h new file mode 100644 index 0000000000000000000000000000000000000000..6ef6adc77c836dc2d599ff852cd= c941f217ee388 --- /dev/null +++ b/drivers/clk/clk-scmi.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright 2025 NXP + */ + +#ifndef __SCMI_CLK_H +#define __SCMI_CLK_H + +#include +#include +#include + +#define NOT_ATOMIC false +#define ATOMIC true + +enum scmi_clk_feats { + SCMI_CLK_ATOMIC_SUPPORTED, + SCMI_CLK_STATE_CTRL_SUPPORTED, + SCMI_CLK_RATE_CTRL_SUPPORTED, + SCMI_CLK_PARENT_CTRL_SUPPORTED, + SCMI_CLK_DUTY_CYCLE_SUPPORTED, + SCMI_CLK_FEATS_COUNT +}; + +#define SCMI_MAX_CLK_OPS BIT(SCMI_CLK_FEATS_COUNT) + +struct scmi_clk { + u32 id; + struct device *dev; + struct clk_hw hw; + const struct scmi_clock_info *info; + const struct scmi_protocol_handle *ph; + struct clk_parent_data *parent_data; +}; + +#define to_scmi_clk(clk) container_of(clk, struct scmi_clk, hw) + +extern const struct scmi_clk_proto_ops *scmi_proto_clk_ops; + +#endif --=20 2.37.1 From nobody Mon Dec 1 21:29:55 2025 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011003.outbound.protection.outlook.com [52.101.65.3]) (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 67BF22DE6E5; Fri, 28 Nov 2025 03:14:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.3 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764299700; cv=fail; b=VbBWRurxK8N1Gc5a59AbIbS9UwSnRaICbGMnIBlGixdIE/LRI2CTELVJJD8i9t11C+zZcTdk9nZ6fxlkyXgpt0QSo/AwFc8WoVCeCVub4yIuDDJZiBAqBLZqrT8+DstirU/QFk8/EmmXx35m8PUdSiM/imrq4XBULaxNdQj+SfM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764299700; c=relaxed/simple; bh=0k0JmNMzEuxw68RYlDUpJR99jff2TkJc8iC3A6fnV3E=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=RfFBuOSRgU/95XtvfKdgYaiw2CGiE/rFADJMoyy3pHPNJ2eMsrHCg4Y8b0N11cC42rLSdkx7PCWNQgYsGQogJzcdWKt7mSvUkQxqBW64DdEKj97TUPXB8q2VeR/PQe/wzo+kWX0hSRPIt+Si00Eta+jjNTHQ0srLUrGFeEhslCo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=M68ztqCY; arc=fail smtp.client-ip=52.101.65.3 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="M68ztqCY" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eEWC/xBur92syPKHRBLVObG9pfFseJQuYFk3hr0pitKqL5jv770i2Wjy2vZAr2O0cwMT14gEAciITrUSSCOCRjI3rM+1kvEospGkYmgoKwsFTkJeiyViCLJcY7ZL4ka2y6embwd8TozkBzjpI2OU5PmklgxROseeNd/JuhUxsLjwlJoO6wBxeUj1ZNjfF5vwOpiVwliRXF2qs8lvkxipyRtFS4yqTZgm4+J9X2rgmdSaiJHzU455GUoKdS81RDpEGnrVavaW5q9u436iN02LC0WSlH8Ss2W6mBjSm6qR/5+jr0hZjLvPvNRHPB3sxWgpWCBnVObMSz+9IyG1oKlRjQ== 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=5cxuJG21DsOwlcD3WvZG/izZpVQlox7FcT7lthS0/wE=; b=NV2WOAihmMLvJa+D9k1U7JrodjGKKVfrpS9j04ftfoV9lG7MhLCupefOPxD0rrDVY+QWReu/+5wem/9fbtFuLYAXR0J7pZcNmvNN1Eoz4hv/arC1oeFKrwJqkf7jWHancqnaFunDI+CuTiomH5/PPF9RzmVhO/qCTO5sjlm9GQhXWqh3n2AYB8Y2qBEcKChuBZAXUDgxUyjc8cvUg7FzWTaoOCfcEQqjCCeTQ488Q3DJkR2MiSTM1LiccGBnUgQqA2TE6Ccb8tREslAy5Iw/kcPB8rubRzdSsLVE8ZwAMSurI7Fv0C8LGQt5RJvh1ndBV124P/OWeCUeyLfLas9akw== 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=5cxuJG21DsOwlcD3WvZG/izZpVQlox7FcT7lthS0/wE=; b=M68ztqCYemktKvsRoHzLdUekWYK97AEEaAgXC+V8xE58kd1QI+hqMLcqt6FWZiBOtGD91Q9IKAnAhsxvVH3je+X4wB2IxcW+sOj0qLOYh16enrkUMcgzyaruAxSYCg4JJD70kMNgh1Hb7p0nACvinOlFIeGpxgdWZLuoap+bUPFAKfyS6Aw+WFBvhdSMKW9BTkJZCo9dMJ/TcREAUuSGa67p2urrDn/jvqCduW9sVok3TjC6FU5gXo/EqfXYvbsCaX4SvagLmW8fsT9vJvMJuzNUYNCBft1kToehCp2h18WpYds3no28lGF9s3W6ph76AmAE7AgVik18Z2JhQb0YwA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from DB9PR04MB8461.eurprd04.prod.outlook.com (2603:10a6:10:2cf::20) by DB9PR04MB8429.eurprd04.prod.outlook.com (2603:10a6:10:242::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.15; Fri, 28 Nov 2025 03:14:55 +0000 Received: from DB9PR04MB8461.eurprd04.prod.outlook.com ([fe80::b1b9:faa9:901b:c197]) by DB9PR04MB8461.eurprd04.prod.outlook.com ([fe80::b1b9:faa9:901b:c197%4]) with mapi id 15.20.9366.012; Fri, 28 Nov 2025 03:14:55 +0000 From: "Peng Fan (OSS)" Date: Fri, 28 Nov 2025 11:14:15 +0800 Subject: [PATCH v6 6/6] clk: scmi: Add i.MX95 OEM extension support for SCMI clock driver Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251128-clk-ssc-v6-2-v6-6-cfafdb5d6811@nxp.com> References: <20251128-clk-ssc-v6-2-v6-0-cfafdb5d6811@nxp.com> In-Reply-To: <20251128-clk-ssc-v6-2-v6-0-cfafdb5d6811@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis , Brian Masney Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: SG2PR02CA0031.apcprd02.prod.outlook.com (2603:1096:3:18::19) To DB9PR04MB8461.eurprd04.prod.outlook.com (2603:10a6:10:2cf::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9PR04MB8461:EE_|DB9PR04MB8429:EE_ X-MS-Office365-Filtering-Correlation-Id: 91424640-facf-44d7-5c7c-08de2e2c4c98 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|376014|52116014|7416014|1800799024|19092799006|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?R1p4cEhrVjZ3VWVNeHltdFU1QlFGVGpNSmFmdWlWalFjU1FEeHNRdlZWNmhS?= =?utf-8?B?c0VScDZEZjFOS3RIVU5zc1hwMU0xSy9WOG96ME5VUStHR3RmNm92TUorT2k2?= =?utf-8?B?TDdhNHdMaVNDTW1ZaUN2dEhKZGhPMDA1SloyekVNSzc4ZW5aYjZRRUYxQ05L?= =?utf-8?B?Umd0TDY5ejY3clFnQ1M2VitaaE5IRnErSzROUkpGQmhETUtNOEFXUTVobzlC?= =?utf-8?B?RFFoTjA3TjVnbTAxM2w4eVZzK0xnWXZ0ZEFiZFpuOWs0RkxKM2R6RVlQZG9O?= =?utf-8?B?YWZ6OCtmYk5JZ0dRRHBBUU8waFBrWE5UWEI5blFDTXB3YTI4ZWtHMENsU2NQ?= =?utf-8?B?QTJCdWx3YTk4UzYrcjFCZGZValZPN1pOV3JSRzZleHdNeU5JYm5PWWlueGo1?= =?utf-8?B?czJvL2tqS0YxTXdrbStVRGZsL3dreFJ3OWxHVFk2TWl3SFIyYUJlQzNxejFM?= =?utf-8?B?RmFVa052RkUyclk1dXFlcC9ZcGVxdFgvL0hISTdZejNiRmRDWCt5NW42Tm0w?= =?utf-8?B?SkpNQ1o2bDJ4V2dlQ2hjaWZsc3B3bDd1ZXpTTWNlUVZtUEp5OFVzVzFlTXZH?= =?utf-8?B?ekJmamxHMCsvRFdjREkreURYY2dVUVVmN3plRFFFSWFENGRXWE9pU25qNWFF?= =?utf-8?B?dlJLMGtPZ2hhVlJBQVNSUHRnMXpWSXlSb0gyZHJZTTExd3FVMlduUUUraXd4?= =?utf-8?B?aURIMlc1cExic2Q4VENFb2JMbEdEaSt3VlNNQ3hoMVVpRjNZSyt4SmhyMFpp?= =?utf-8?B?N0MyZkx6OEtibk5lSEk3bHNQMFpKUFIvampsWWlJN092WUtIV0haZm5CZTFq?= =?utf-8?B?ellyR0w0dkNsSE1Bb3dWV050b1JpdGNtWlNKQXRqOElkUnlzQUZYdmkxbldH?= =?utf-8?B?RTJlc2o4ZWdJZVhwY3JLTyt0dmJVREd0MTlxcU1QREhKSVBZQXdFZTVDMnV4?= =?utf-8?B?SVpyaUZyMmhGUTczd2lpRHIxc05ydFA4QTlhR29KZktoNGhLQ045czI2SnAw?= =?utf-8?B?UHBpeVlBRGE2TWxabDI3aFBRSjlhQy84b3llVWYxVDlRdWxVNlRSaEZ5ckFp?= =?utf-8?B?aVRTUWdFWURRQ3dPOWh5bkpOVWJkUXhpbzUrM04xVUFvQkdmNmZkY0NrdUhX?= =?utf-8?B?ZkM4cEY0RDFvRHVqTDZXQkJTcnVMaEh2UC9FSXFUNkpXcGRGSzk5MHhKZStz?= =?utf-8?B?TWV4VmYvc1pnWWowQUl5ZWphZVJqZWUwcGtxSlZxN3VVZUZNYTNiTzZOeHo2?= =?utf-8?B?bGMrekpxRDluQ2llamJSaXhIUlY4aFoxenRabUJIN0M5R2JOSFdrSVJBeFFP?= =?utf-8?B?U3dpN0h6VW9Xb2VNSmxpbGROZ1RERkZNL2JmV3lzYkRKMENuaDRYTWhOOFBT?= =?utf-8?B?eThRVCtaZVE1K3UzSnpER1lQZm10eWFLMitVTGRQaFBkOXpnaVZ1SWZqMDI0?= =?utf-8?B?VndWL01QaXlHVjIydE5SSUYrOCtSU0p5QWRJTVRVMWtmUmYxSkkzQWJUVzZ6?= =?utf-8?B?VHRFUC90YVVBbkF4M1k0Rm1ySVNaZ0JVTU1sb1FGV3hkT2ZIVytZMTRPSlFu?= =?utf-8?B?VC8yTDhMUnF0clpxbWZJNjgrTFB6WTJ2VXVMc0tmb1RLU2tmakFnc3FzVXNs?= =?utf-8?B?UlBzNjNWZ04wd2lENkVDZExJOFZrN1dVWW4ydlpGYk5VL2I4WGJnTmJGaUFW?= =?utf-8?B?dGo2Zml5ZnZVdUpNd3lnaUVxVC9nWjFrTlpOU0NOeDh3VzkrWWdiQnZhR1JN?= =?utf-8?B?QzJsTU5weFY3Nmxtc21RN2Rzd2NHcHA3SHVtWVpOZDdBY2FDemd5Q000VnVq?= =?utf-8?B?ZEhPYUkxemdaT0F5TUpUN1lEalhrRjVuZlRkY0FRVkFpOWZwSk5NdWhSSEtY?= =?utf-8?B?dHBHUTdKT2NjVFcxMUlPZi9HN3RhOTFTejg2bXU4N3Fid1RtUmF2RUU1QlNq?= =?utf-8?B?RThXVis1UWlROUp1MTVQQUE5aTk3b1VMUzFBRWxCbFZVZ0tndjY0bG1HOWl0?= =?utf-8?B?Qys4Y3dybFI4NE01U1VTdHdCVWlHVHV4ZHNJT1ZlUi85VVMxbGx6Y0hzeWYv?= =?utf-8?Q?2US0yS?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR04MB8461.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(7416014)(1800799024)(19092799006)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YWczWlQ5MUdUMEVZdzFPWDZDaUloVGhUcWpNUG9xNTJvK3l6ZTBVc1ZuLzFy?= =?utf-8?B?RmVucWc2NU5CdzAybDZrV055cW0xY1E3djJqNUN5c3k3U2xqUGtLd0JFRzlz?= =?utf-8?B?ZGllMWd4QmdUNGs5ZG5pTC9Qb28zcTFZOWFZaEp3d3IzT2paamJhYmg1dk5U?= =?utf-8?B?RDFaLzZWRjVaSDdOUXprZkFPOE4vQnVKVkxMUWQ2K0h3UmdJQitTMWFmQnNt?= =?utf-8?B?ZkNPSjZQYXR2SHgzVXNPMSs4QjFmYy90N0dUZXltalRYc2lpWXZLcFlsdSt0?= =?utf-8?B?bk91OEh6K3RzVzZ3Wmg2bHczdDgzZENuMHVKKzIvdFlac0MvWDZDanlHTGFD?= =?utf-8?B?V2dFalhsZzJKZGlpY0VZVm9NajVaMWMwQUNDcWlTUWk1a3RDTDA3K3hKTDdK?= =?utf-8?B?NHBUUXpWYXVYMjZDZnhXc2l5K1U3UkhaVjhIZkE4SHJoaUg1SW9FMGRDbi92?= =?utf-8?B?LzNaaXFvU3dLU2x3SWgrLzd6TERxU1U4eCtXME9CdXAzeElXdjl2L0NINzdi?= =?utf-8?B?ZWt6OGM1L1hIODZkWTkySW5wQkw2VnUxaG9aalBKNGVlTFF2RXhDZGN1R01o?= =?utf-8?B?byt6VW9HbVpkeXJ6RnpaM0loanNZSittVWVuZm5OSVhMLzVHbndDUGd2MDdW?= =?utf-8?B?eUJJZytmM1dUMjlMZ3lOUEVGQi9XeDlJKzZiNk4vQklmWnFUbythMXRqNFpF?= =?utf-8?B?RHE3Y0pYZUpoeTVYVEVnTk8yQ3VORlNQK0cyNUMwSDNKWWVhOEF2bXNEWnRm?= =?utf-8?B?UjV3UkkzcldJWmhvdWxFcVYzcitOQ0l6bXVoVEZkT3lOSDlJNDVBOTdobnNG?= =?utf-8?B?VE14K2xWdGt2UkR5bGR1SmRxRXhKcjlITWI3UGZuZS95UjNqL2l0dFIrME1x?= =?utf-8?B?bHpXZlY5K3FxOFBnaDB4c1h1VzhxVkdMVEwvTUZpanBidk9mTmpEQ2twcGVE?= =?utf-8?B?MzZxL3ZUVUpDYWUwL1RqTHdwTEdiRXZndlJKVjFGQlBFR1lqazFaU0FXUFlp?= =?utf-8?B?cHVJUm9pWjBYM3NPdGFFK0FoR0Ryditia1Zubk0zVHc1bHpYNlUvUUErSUJT?= =?utf-8?B?aENmdVZZL1JvNWlHMkR6YjFGSUtNbmNJK21hTUg1VjhhV2tPZXYwQTNjNWxv?= =?utf-8?B?Zk90d2NqNzZGajFPSDlMSm42RjUvYi9yQmpSNm5uVmpOcC9qRStUbE4vSUNt?= =?utf-8?B?NWF6NjRzd1c1c3JEUnJJeVZuSmNab2dHb0F2ekV5WURnbklQMlc5NkFPTkdj?= =?utf-8?B?WmdHUUtBaENtV3AxRXFPeGFmT2lGSmVhaWp0ZE5rZXUzdm1BcVZaOEIyb2VX?= =?utf-8?B?UjIzRGJUbzFZc1IzbHFjeHRvUFcvVmplMEhTL3J4NWN5YmZlVWVuQzJkbWcr?= =?utf-8?B?UUplY0VSYkpWbmVWZHo4Z1U5VUxnUmRiTXBwNnJET0V6cjArUVJkc1lZZTN2?= =?utf-8?B?ZzBiMXQxWXB0RG9PYzRwTGhrQlBBaVVoYk5uK1YzSlZvc1FEMVZRWHRzblFn?= =?utf-8?B?bHl0dUJJSHVxMlBZQm8rRmtJK0ZVTll6RWRhUWlUWlkxWFdmL29JRFJVQkxN?= =?utf-8?B?dDYzZzZTbEJYT0hhOS8rSmlaem50aUJuVnRYN0ZDNHlJV0RSK2dTTEIzRWpw?= =?utf-8?B?c1lpM1J6WWZpWjJMRlBub3BJd0lRRkJ2RHkrbkF3bkUxRThQY01CckxiaHdE?= =?utf-8?B?RUhkNDVsOXRubHJ2RVJLeDc0M2MxL1JkYjVmS2orNmM1R2E5OW1GRTZLZEVC?= =?utf-8?B?cmRFbzlZQUs1UDlXYWRma3dyMXUvdERrZ1NRajRLU0VSMzZkNXZ5S2IwVGpH?= =?utf-8?B?QXUrdlpUOXlYU1BzU3p0VTlWaWtzN0F2RXYxRFYzVXFBenV4d0pYTmVwZDBh?= =?utf-8?B?czdLdFRINzUxMURXYk0rL3JlT2NTNmM5TnpwSVMyd0daQlRLQmlMZDJCMlVa?= =?utf-8?B?ZStwSjczbmFKelJzaU5DSC8vUDRFQXQyUlhENmV1c3hLOUlwZ1VuWWNOVVVV?= =?utf-8?B?Rmp6a3J1NkFtS3d6bVFRVkJUdkJqZzd4V29kZzUyM3FxT28yZ0NlQktxeEhI?= =?utf-8?B?MHRwcnV5czlEZEdRamRQVUxPL2ZURWRwMFMwUWFtUkdRRWVqOFZpWGhrVVBt?= =?utf-8?Q?MTYWis3OfiM5U+NwO3X63Sxjt?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 91424640-facf-44d7-5c7c-08de2e2c4c98 X-MS-Exchange-CrossTenant-AuthSource: DB9PR04MB8461.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Nov 2025 03:14:53.9876 (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: FpqC5ImjD6qUn/piSvxTyjS0R4XH+imPxaCkwGJmC8NJXf/Mx1eFLa8qCnlSPxJ+KHV1ARTaNaNi/su6ElN4dw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB8429 From: Peng Fan - Introduce 'clk-scmi-oem.c' to support vendor-specific OEM extensions for the SCMI clock driver, allows clean integration of vendor-specific features without impacting the core SCMI clock driver logic. - Extend 'clk-scmi.h' with 'scmi_clk_oem' structure and related declarations. - Initialize OEM extensions via 'scmi_clk_oem_init()'. - Support querying OEM-specific features and setting spread spectrum. - Pass 'scmi_device' to 'scmi_clk_ops_select()' for OEM data access. Signed-off-by: Peng Fan --- drivers/clk/Makefile | 2 +- drivers/clk/clk-scmi-oem.c | 103 +++++++++++++++++++++++++++++++++++++++++= ++++ drivers/clk/clk-scmi.c | 19 +++++++-- drivers/clk/clk-scmi.h | 11 +++++ 4 files changed, 131 insertions(+), 4 deletions(-) diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index 9e8c989b24be0f7cfdf2325c9b19d05e9d2a8eb9..fd54e2fe3c429362b93457d0e34= 9e1deab2320f3 100644 --- a/drivers/clk/Makefile +++ b/drivers/clk/Makefile @@ -95,7 +95,7 @@ obj-$(CONFIG_COMMON_CLK_RP1) +=3D clk-rp1.o obj-$(CONFIG_COMMON_CLK_RPMI) +=3D clk-rpmi.o obj-$(CONFIG_COMMON_CLK_HI655X) +=3D clk-hi655x.o obj-$(CONFIG_COMMON_CLK_S2MPS11) +=3D clk-s2mps11.o -obj-$(CONFIG_COMMON_CLK_SCMI) +=3D clk-scmi.o +obj-$(CONFIG_COMMON_CLK_SCMI) +=3D clk-scmi.o clk-scmi-oem.o obj-$(CONFIG_COMMON_CLK_SCPI) +=3D clk-scpi.o obj-$(CONFIG_COMMON_CLK_SI5341) +=3D clk-si5341.o obj-$(CONFIG_COMMON_CLK_SI5351) +=3D clk-si5351.o diff --git a/drivers/clk/clk-scmi-oem.c b/drivers/clk/clk-scmi-oem.c new file mode 100644 index 0000000000000000000000000000000000000000..fd81aca7bfca254669ee117ebd5= 1e481a74cdcb4 --- /dev/null +++ b/drivers/clk/clk-scmi-oem.c @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * The Vendor OEM extension for System Control and Power Interface (SCMI) + * Protocol based clock driver + * + * Copyright 2025 NXP + */ + +#include +#include +#include +#include + +#include "clk-scmi.h" + +#define SCMI_CLOCK_CFG_IMX_SSC 0x80 +#define SCMI_CLOCK_IMX_SS_PERCENTAGE_MASK GENMASK(7, 0) +#define SCMI_CLOCK_IMX_SS_MOD_FREQ_MASK GENMASK(23, 8) +#define SCMI_CLOCK_IMX_SS_ENABLE_MASK BIT(24) + +struct scmi_clk_oem_info { + char *vendor_id; + char *sub_vendor_id; + char *compatible; + const void *data; +}; + +static int +scmi_clk_imx_set_spread_spectrum(struct clk_hw *hw, + const struct clk_spread_spectrum *ss_conf) +{ + struct scmi_clk *clk =3D to_scmi_clk(hw); + int ret; + u32 val; + + /* + * extConfigValue[7:0] - spread percentage (%) + * extConfigValue[23:8] - Modulation Frequency + * extConfigValue[24] - Enable/Disable + * extConfigValue[31:25] - Reserved + */ + val =3D FIELD_PREP(SCMI_CLOCK_IMX_SS_PERCENTAGE_MASK, ss_conf->spread_bp = / 10000); + val |=3D FIELD_PREP(SCMI_CLOCK_IMX_SS_MOD_FREQ_MASK, ss_conf->modfreq_hz); + if (ss_conf->method !=3D CLK_SPREAD_NO) + val |=3D SCMI_CLOCK_IMX_SS_ENABLE_MASK; + ret =3D scmi_proto_clk_ops->config_oem_set(clk->ph, clk->id, + SCMI_CLOCK_CFG_IMX_SSC, + val, false); + if (ret) + dev_warn(clk->dev, + "Failed to set spread spectrum(%u,%u,%u) for clock ID %d\n", + ss_conf->modfreq_hz, ss_conf->spread_bp, ss_conf->method, + clk->id); + + return ret; +} + +static int +scmi_clk_imx_query_oem_feats(const struct scmi_protocol_handle *ph, u32 id, + unsigned int *feats_key) +{ + int ret; + u32 val; + + ret =3D scmi_proto_clk_ops->config_oem_get(ph, id, + SCMI_CLOCK_CFG_IMX_SSC, + &val, NULL, false); + if (!ret) + *feats_key |=3D BIT(SCMI_CLK_EXT_OEM_SSC_SUPPORTED); + + return 0; +} + +static const struct scmi_clk_oem scmi_clk_oem_imx =3D { + .query_ext_oem_feats =3D scmi_clk_imx_query_oem_feats, + .set_spread_spectrum =3D scmi_clk_imx_set_spread_spectrum, +}; + +const struct scmi_clk_oem_info info[] =3D { + { SCMI_IMX_VENDOR, SCMI_IMX_SUBVENDOR, NULL, &scmi_clk_oem_imx }, +}; + +int scmi_clk_oem_init(struct scmi_device *sdev) +{ + const struct scmi_handle *handle =3D sdev->handle; + int i, size =3D ARRAY_SIZE(info); + + for (i =3D 0; i < size; i++) { + if (strcmp(handle->version->vendor_id, info[i].vendor_id) || + strcmp(handle->version->sub_vendor_id, info[i].sub_vendor_id)) + continue; + if (info[i].compatible && + !of_machine_is_compatible(info[i].compatible)) + continue; + + break; + } + + if (i < size) + dev_set_drvdata(&sdev->dev, (void *)info[i].data); + + return 0; +} diff --git a/drivers/clk/clk-scmi.c b/drivers/clk/clk-scmi.c index bf85924d61985eb9e596419349eb883e3817de73..1ed2091e3d4a951c8662db4c94d= ee4b9c98b8326 100644 --- a/drivers/clk/clk-scmi.c +++ b/drivers/clk/clk-scmi.c @@ -14,6 +14,8 @@ #include #include =20 +#include "clk-scmi.h" + const struct scmi_clk_proto_ops *scmi_proto_clk_ops; =20 static unsigned long scmi_clk_recalc_rate(struct clk_hw *hw, @@ -242,6 +244,7 @@ static int scmi_clk_ops_init(struct device *dev, struct= scmi_clk *sclk, static const struct clk_ops * scmi_clk_ops_alloc(struct device *dev, unsigned long feats_key) { + struct scmi_clk_oem *oem_data =3D dev_get_drvdata(dev); struct clk_ops *ops; =20 ops =3D devm_kzalloc(dev, sizeof(*ops), GFP_KERNEL); @@ -288,11 +291,15 @@ scmi_clk_ops_alloc(struct device *dev, unsigned long = feats_key) ops->set_duty_cycle =3D scmi_clk_set_duty_cycle; } =20 + if (oem_data && (feats_key & BIT(SCMI_CLK_EXT_OEM_SSC_SUPPORTED))) + ops->set_spread_spectrum =3D oem_data->set_spread_spectrum; + return ops; } =20 /** * scmi_clk_ops_select() - Select a proper set of clock operations + * @sdev: pointer to the SCMI device * @sclk: A reference to an SCMI clock descriptor * @atomic_capable: A flag to indicate if atomic mode is supported by the * transport @@ -317,8 +324,8 @@ scmi_clk_ops_alloc(struct device *dev, unsigned long fe= ats_key) * NULL otherwise. */ static const struct clk_ops * -scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic_capable, - unsigned int atomic_threshold_us, +scmi_clk_ops_select(struct scmi_device *sdev, struct scmi_clk *sclk, + bool atomic_capable, unsigned int atomic_threshold_us, const struct clk_ops **clk_ops_db, size_t db_size) { int ret; @@ -326,6 +333,7 @@ scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic_= capable, const struct scmi_clock_info *ci =3D sclk->info; unsigned int feats_key =3D 0; const struct clk_ops *ops; + struct scmi_clk_oem *oem_data =3D dev_get_drvdata(&sdev->dev); =20 /* * Note that when transport is atomic but SCMI protocol did not @@ -350,6 +358,9 @@ scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic_= capable, &val, NULL, false); if (!ret) feats_key |=3D BIT(SCMI_CLK_DUTY_CYCLE_SUPPORTED); + + if (oem_data && oem_data->query_ext_oem_feats) + oem_data->query_ext_oem_feats(sclk->ph, sclk->id, &feats_key); } =20 if (WARN_ON(feats_key >=3D db_size)) @@ -407,6 +418,8 @@ static int scmi_clocks_probe(struct scmi_device *sdev) clk_data->num =3D count; hws =3D clk_data->hws; =20 + scmi_clk_oem_init(sdev); + transport_is_atomic =3D handle->is_transport_atomic(handle, &atomic_threshold_us); =20 @@ -438,7 +451,7 @@ static int scmi_clocks_probe(struct scmi_device *sdev) * to avoid sharing the devm_ allocated clk_ops between multiple * SCMI clk driver instances. */ - scmi_ops =3D scmi_clk_ops_select(sclk, transport_is_atomic, + scmi_ops =3D scmi_clk_ops_select(sdev, sclk, transport_is_atomic, atomic_threshold_us, scmi_clk_ops_db, ARRAY_SIZE(scmi_clk_ops_db)); diff --git a/drivers/clk/clk-scmi.h b/drivers/clk/clk-scmi.h index 6ef6adc77c836dc2d599ff852cdc941f217ee388..d7f63f36c56d155f728325efd6b= cf7fe2585b170 100644 --- a/drivers/clk/clk-scmi.h +++ b/drivers/clk/clk-scmi.h @@ -7,6 +7,7 @@ #define __SCMI_CLK_H =20 #include +#include #include #include =20 @@ -19,6 +20,7 @@ enum scmi_clk_feats { SCMI_CLK_RATE_CTRL_SUPPORTED, SCMI_CLK_PARENT_CTRL_SUPPORTED, SCMI_CLK_DUTY_CYCLE_SUPPORTED, + SCMI_CLK_EXT_OEM_SSC_SUPPORTED, SCMI_CLK_FEATS_COUNT }; =20 @@ -37,4 +39,13 @@ struct scmi_clk { =20 extern const struct scmi_clk_proto_ops *scmi_proto_clk_ops; =20 +struct scmi_clk_oem { + int (*query_ext_oem_feats)(const struct scmi_protocol_handle *ph, + u32 id, unsigned int *feats_key); + int (*set_spread_spectrum)(struct clk_hw *hw, + const struct clk_spread_spectrum *ss_conf); +}; + +int scmi_clk_oem_init(struct scmi_device *dev); + #endif --=20 2.37.1