From nobody Mon Sep 28 21:03:56 2026 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010061.outbound.protection.outlook.com [52.101.84.61]) (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 76D723F8ED3; Mon, 17 Aug 2026 10:55:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786964160; cv=fail; b=LbeSRTrVQKDo7a7P7X+4MxMtJ2D7kMvvhrNOE721k+qJ98kCEHy6RoqrJ+/iCbz3Sl1bUaHikmOBdnK15Bxk89m026VnHrrDkX8GZxAG1P2zXCvcgfh/GHgmqPOFCJ4d0F0eBPZoedBezgib55yQphk1PjlgSOmO3dG+LF1XtM0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786964160; c=relaxed/simple; bh=NjwtBJwFgDMZ5Uzb12c2RnzCHEaks2V5F7sGbzpAks0=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=FCnNsAJdUSQiFR3U7RNwnIGxij4XCaYX58ySalKLAKVmPFo1sGy9BoMvzBrJ2wI6SLtUA72XkukJwG8ZHNH9/ulBeysJzcxBH+DfzrUKnyAWP5G2NYvvBz7PcbAN/7cCotaDlkezPj6k3PUba20lEzYEUMQ9DnOZABUyoeJhx8M= 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=Wpjn46fd; arc=fail smtp.client-ip=52.101.84.61 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="Wpjn46fd" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=w9evo6pIf/45vbRxtt3tBkLklMGZBXX9Sp8fbVnFJk9UO3+prWSb17VGHuKkc/WlxVauDTtSdogUtNpQnBscG9peFzyMkbgZr1p1jyr+wsCq4isovYCWp7WMS4W1EeyT+QtMKJw/ACb1O+9zARK3EoBMhkDUYyyfW6oeJ9WDEdZhYbsClhSmA5htkfckP1krLyBSuKdlvLR9ZiRozyuz1zMI7tDvEH3v9urly2uCZ2Ib8pE91Jo+h95PlwqcKOZmf3kxg/SbD9cZ0KFSLPt2S97u0wxCQfsm0mWagY8ydwZ1EeJBc/qYpg7pqMIi1uaRyaaqC4U6Pzub7gjkZWQnQQ== 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=+GvpOqNTXmhcBMJKr7mll4R6caW94N7lWlWX9pq3mNA=; b=eh6hJpn/LyPb3inPzSNBqAHd4SnaZBH/I+f+OvWtGMLb3AmG/tt+UgkNsXQOCTM5Ls6r6+z5eJ6AHAUP88jtYfQ6RXJZmnoOh73tKIharT8N1qmaWqhgyXB0ojSALEdz6a0b0TpLGRm1RkGDbzuCsi/WbNTyMY19YIQCyehR31KCMul7qw7jpGpsL5TVs3iwmHK3shUXPZ6nVJQKvPSese0A8uu+Zfv9KjlsI/s5v1ySaL1dIqt8rHF5KEIh19Zxwa4jJP08budYnB6rePKmViZAng9z0fY/ZuE29tefqBtwybNgU2u4z+xsQU/QVd47dr+cxW2wAExHFUwev2bkxA== 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=+GvpOqNTXmhcBMJKr7mll4R6caW94N7lWlWX9pq3mNA=; b=Wpjn46fd2bonrqh3k0WBFM1RZSwIeeBCue2wHQucikXE1hlsNp01ntqsLLR8U4i7asineslPobOPcZhuaDfa3q/y1KdltVrIqwPVoIM5pxYGAhbPjNh2en4FYsRl0dxmmpUTsp5DagCuYJJ5DLb/lNxxPw3b6zRk9vjjfDvzopFP+EnrH3ztHcBzjTgc1Tw5bkD9pTkC+8CijgK9HJ7s72Ausnzfc7Iqa4gRN9Fse9b2a6/VgQ3e0d9g5No7tn/BKTrrIhgLuo+UXY/LQIoHIQxyL2D2MIMOtTjdgTdAJ4bG0eqdBo7VnmQK5lKFvsLWcd8r5eM/Od8mIKvZCw4Kog== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AM8PR04MB7874.eurprd04.prod.outlook.com (2603:10a6:20b:24d::9) by GV1PR04MB9072.eurprd04.prod.outlook.com (2603:10a6:150:23::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.17; Mon, 17 Aug 2026 10:55:48 +0000 Received: from AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9]) by AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9%6]) with mapi id 15.21.0315.016; Mon, 17 Aug 2026 10:55:48 +0000 From: "Peng Fan (OSS)" Date: Mon, 17 Aug 2026 18:59:32 +0800 Subject: [PATCH v11 1/6] dt-bindings: clock: Add spread spectrum definition Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260817-clk-v11-v11-1-36e9bc701b11@nxp.com> References: <20260817-clk-v11-v11-0-36e9bc701b11@nxp.com> In-Reply-To: <20260817-clk-v11-v11-0-36e9bc701b11@nxp.com> To: Michael Turquette , Stephen Boyd , Brian Masney , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis 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.16-dev-7bc12 X-ClientProxiedBy: SI2P153CA0006.APCP153.PROD.OUTLOOK.COM (2603:1096:4:140::22) To AM8PR04MB7874.eurprd04.prod.outlook.com (2603:10a6:20b:24d::9) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM8PR04MB7874:EE_|GV1PR04MB9072:EE_ X-MS-Office365-Filtering-Correlation-Id: db4b1280-9aa4-40b4-fbd3-08defc4e18a4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|19092799006|1800799024|7416014|376014|366016|10067099003|11063799006|56012099006|22082099003|18002099003|3023799007; X-Microsoft-Antispam-Message-Info: 0W74yg0DiNA8RNk7vhgExn/uBw2DiEHISU/ugnQLtAoX3lXoK14US3CloyjLQpxwCDNiBMk6nVTz4K5CAMkmIQI41lcC3hMX5ZCgeXLF9XCghqRYAz02PUdsLalzUvuYhIuenV5NnvXTsNHfUjFWNTCtU0pL850h6SYorynPOArmEYHg0phZGrYPta5rz+vIlWB+sZElJ71fuw7zr7QiIee+j/MG5XNA5ITcqIqKAV3LZ5atGlE80zQyuRxt8+WF8s2jwdCTG1ZIKw7pjrUHDzRvBJOEqS6wQDPZcso+NT+vBKEgTnm7OL97YCfNtS/AYPZ0VOTJwcTzmDlYFoLJjEHWq7IVM3/Hq4Nh+ITdh7XSKOpaOOCmQ0wwWVrh/H7gNy2mZj6Eg3uEnFX+1V/Y7S7IW3UmzeCDJSPSta7Ib9jcKZ8/P7tRs52mw0CjFbW6KMlHvh+0qLTYFl6VK6eFcxg0W3J4lGZCeqmpbZ+gXGy4/enH0oQij+iTHqzL3Wk0DglPrYaDp++E0omH4TFPDedQEmnVC+Q31DyGEn1svYA1l4AWl77sZXdV/PMj7m3SGwamUrCvmUdbO8FYVbzemVKqZaSRJvO+mMWy4RGA8R3XwZx1Cu973rTV8Tee6/0PTcUhX2t4KFZq015elRgcm2gBpUoDSGXI3+7RlFJ3nOU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM8PR04MB7874.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(19092799006)(1800799024)(7416014)(376014)(366016)(10067099003)(11063799006)(56012099006)(22082099003)(18002099003)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R2NyK1pENnE5UVAxN3lUVlN6QTZYTEkwZmtpVHd2cnY0RzJZamF0M24rOTRD?= =?utf-8?B?TUlYM1RTcWlMMUFIUGxUY09wSXFFLzltdmpMbStIaU9oRHJSWnNYSER2ZWRs?= =?utf-8?B?MFVxR3ZnbEhycjFIUXJhUjQvUFVyTGg4S0I4T0tGekNJTkU2ZXpmQ21EZFow?= =?utf-8?B?SVJvZVVMY3hhSjVIMlF1UlQvby9INFdSbTVLTEMvQjBLR3ErYlR3M2gzL2Rv?= =?utf-8?B?REIxL3IyK1phR1NpVUFWNkIwaC84dmJLQysrWmE5WDBvZVgyK05FRStJcEZW?= =?utf-8?B?QnJFQWJWaWk3V3dOS0tnaVg0K2tlVWlnUzNBU29NQTJwUXNEV295alFlTnZ0?= =?utf-8?B?QnNWbWcxNXEwSHgxK3UraTBTLzNVLzRvWVZsL2szV0hLK0YrTzhSTDRZekRH?= =?utf-8?B?Ni9VRmxjL1dpM0VlT2dwYmsreTV0TDV0L1I0bkZ5RDcxQXpXVEJ0eVV0MTdv?= =?utf-8?B?TUZoaFIvQ3NQSndic2lnTnVvVElTc2MwNGhUaWJoTDRod2pQblNQcnBacHl2?= =?utf-8?B?WnZQdmt4YVVSWVZTS0hNNW5Ka3o2RVBIMFdCSUJYbEdzWXRWS2p5MUpZTUox?= =?utf-8?B?bEJ3NnlHcFUvN0VVbXlkbTNPeDlLSHRha0xFRlVyYjAzaHVhZVp5amdHbTRE?= =?utf-8?B?VkowVjlUbFhJdENjZ2sra1d0OTRqSFFqMXE5RWdHaVEzLzgxUFlFRlcyei9w?= =?utf-8?B?MnJtS1lHckZrekpZeGJtVE5KYjd0ejZxMXdYNWZjd0VNMFAycHdYOTVuWGhT?= =?utf-8?B?dkt1a3ovelEwSm4vMjR3cml2SEFsZHhhNVZUK0k0LzJNaG9LczFJN0J6MitD?= =?utf-8?B?ZHFCZFVpQi9qL2l4NHhhOGdNYzk4ZWpmdjk2MHVjOWVYcm12VXVVVlkwZkht?= =?utf-8?B?WWhvZTVjbVBrcmJGbXBXYVN3K0ZMeFhVc25aWVFsNng3SHhROTJiMXd1V2t3?= =?utf-8?B?SWJra2F2amdkdHFjcml2ZCtGdGJQK0F6YnFhNkw1MHpUVlMvbUtJeXZhVWxr?= =?utf-8?B?NVBpVy93VDBpRnB0eE40dmVXQVVyZGsvQkpCNzVHeGZwMmw3Q2VEOUdRQ1ZN?= =?utf-8?B?WmN4Y0psdzVwQkRHMmYvU1RibEdVSVVtRHRRRUYvWmhsbTJoR1pwcXZhbEFo?= =?utf-8?B?cVphVjllUTE4M3hxMDNVbnM5bUZWWkRnejh5ZTdidGhhVWRTdGZDQWVUMlhq?= =?utf-8?B?ZDdvb3MzUVFvVXIyRy8rTWFtMHErMVNJVStGQS9kNzgxUmNVbEZ0aXBlVFBq?= =?utf-8?B?U0VTR2FGQVcrb2hGYmwyY1RVTWlYdFUwWDNaSTlMV0x0cFVVWmhkSTJDSFpF?= =?utf-8?B?UzdFYW81aDVqUFZTYk1iM2I5ZGMxV0VBdlNlSjVGRXJURjcrUWlueDU5RjZw?= =?utf-8?B?QW1mTDgxdm51eHBSbUpmNlJZMUdTeGlrc1dlWWp2MGJ6bGlmRDBrczE3Mkho?= =?utf-8?B?WXdEWXVHeDVxRExxeXBsQndEWFUvWjl3Qnc2azRRbVZnVTFpUGxGc1laQkJv?= =?utf-8?B?R0JpYThDVmNZWU1JWUR0ZFFnUkFtS0VOeDAzd2xUSmozN09rbFExOTRaUitw?= =?utf-8?B?RzRwbldQQzFOYkJ4YmFKYTZmQVdrQ2p0dysyNUVIMXc2cmJwbWlSUTU4bzNq?= =?utf-8?B?bnhHaFZncGMyQWJFdEMwZTBIZ1JxekJBTUhQdTgvbG42Szk4WkVyWVN0RmtD?= =?utf-8?B?THJDZkhCK2k0ckJ6TXc0T3hmRGNPZytzazUzdGpuekJWR2M4bGJBajdjRUd4?= =?utf-8?B?eXF1cWVpRmNjQVBlMERVUnlxWTA5TWJ0U2FFNndGSHVCR1VTYzNVY2dyMUJL?= =?utf-8?B?UDc3N1BrTy9zNmZmSzBHblBzaXhPQkNIZUd2ZXFwWWRhOGdaT3RoR1pML2NQ?= =?utf-8?B?RFljcURqbGFOOTdjcnlnV25yc3JoSWlVbmttaHlITjlkY2drVGQ5MmxMeUtW?= =?utf-8?B?WDVDNjhHdm1HSWpQQmswWmM0cktxWnJ1ZEdKaG9DalljRElOWlkwMHRoclMr?= =?utf-8?B?ekk0WHZrQjkxRG0yK2RLVFRlaFc5RExNY2hLODJEdm9yeUZMR05uZnViK01L?= =?utf-8?B?c0NJclhrUlo0TXRhR2lxcWxGWFFMUUJiaFc5d3k0clpnaGZjM29LM01OQWtN?= =?utf-8?B?UUtXcEJ6aSttVVgrYmpDNm5PdVRnWit3ZHp1eVhZazNBZWFqSHRSMHhuYWV1?= =?utf-8?B?MkE1NUtDcXVLdk9KNTUyeW9xSFhXTURPbG00MVpjVmhuWnpYaVVDQWYxaW05?= =?utf-8?B?eGFrak4wRW91OVlOckVzWGdraDN4MzVadGtBUldMK2NqOHNsVVJJaGlLWUxD?= =?utf-8?B?SDlMR3VJdHczV0QxbTB3QksyRGZMUi9ic082aWpETXRVVjdxaDdha3hNZzY2?= =?utf-8?Q?YRVRUVz3cZ0LVI9Nvv0H0fGV5PKBl1mshliz2?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: db4b1280-9aa4-40b4-fbd3-08defc4e18a4 X-MS-Exchange-CrossTenant-AuthSource: AM8PR04MB7874.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2026 10:55:48.5452 (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: 8KZvBciVB0FEnvJziKSOmRIVJ0NHlz7I13VBQysRj46SgRg2OMl1hKjx18YWXlVkVO+lEzBKMwnkY0/RxO5jMrcHckvGm8pdAGfGkvsJTqvpyUG0gqxbt+ATCZs2sqQU X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR04MB9072 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) Reviewed-by: Sebin Francis 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 0000000000000..155e2653a120b --- /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.34.1 From nobody Mon Sep 28 21:03:56 2026 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010061.outbound.protection.outlook.com [52.101.84.61]) (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 255D33F9F4C; Mon, 17 Aug 2026 10:56:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786964167; cv=fail; b=sDm0gUo3xUI8kYH0jpKm4OTAGnLXN1O6E6A1xL5YYGJv47GigfkldCV9L1CQzR1B3rkpqi0QFRrnT/1sEkh4Cu+ySBrnH7nLWlIT/GCD5b7qQxthIrpKj5kRxQ1mIJLbnmMF+7T9EMWiMWr65WbkQmKPr/UiWrJlkSHmXbdAzUI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786964167; c=relaxed/simple; bh=Tuxkkg5IuPJj4DUuwYSVnd8/Ntmi+TwaAPBv6Id1NkE=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=a0AMEBXaUcNvkpcS3+iTJiCJ4iFi1R7DOnPi1HkN+gjk0NSKtOyMpe5tYfYwaJ6gCunti7GegNwlqQQrNIYd2GTZmIXJYk4CvnJvRpPVoGDuzpO/ilY4wVVAD0u6paUyA9FNoPaibCb676N3x5aItF90M8Bpm3stlt72QYom5Sk= 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=m6Vscrhl; arc=fail smtp.client-ip=52.101.84.61 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="m6Vscrhl" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NbqD/lYcLbV+JEaEqgyfiNf/ol7s8slzRNB3SAHgYyVixoTcg5ibcasOKlCUsmvQA2pma5sH8PiWW7lr/njx8gPONDhRrX9mnBAYwC8XpL3K0bF1AjlLwBdnYjsbdum5ttpud2a5djelWe6jne91efpToqBShMruftPGemA2nM8zvy30te+5uPqD3nPMpSnB5oDlRpyC/v6wvC4zZHTSRYbQO/C/8TKsjW9hbJl+x0LfvCGHhGsJYXhUmth2GdRLH7xJ1OHcb62DK4g70KcczifPsnsGqutdrFcSZpj+FdnpCffwHZGwglAEac63vMejPXGCuj85458DxoDk5ASNnw== 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=IK3TcodsKCtXkhtkpAvnGXwGzZSHHw6XfhLXSzl59E4=; b=efONFT3ZtQl+nM3v6F3naetL/pgvJ0YwQGQrk4rh+SagSnTLrzmtiFbblUR65U0tAwXA2mxvQulDHEb4KhQM44y2bXABKWR2fdNJd4haHDf3ScyJdBnwFEC1GWwowSJ6PTVMxbUd4rMFemV0aV1dPhKdFWPWKejGIWHjB4ZKDZx03Pce0jd82n/YJ9okdP2lVHlq3GRKzDsl32ShzsT3wX2boxhfEgd2NLu/OrzoVVwjzmSIDrU9wX4DBLHLt9+izqbuKB9c6vY1ydUkKwqTfmAPILYPKQIDjr3BLd+WRiLBIA09S5LgW328/OSnUsErtjukBCEpVUh55VmMxnGPAA== 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=IK3TcodsKCtXkhtkpAvnGXwGzZSHHw6XfhLXSzl59E4=; b=m6VscrhlXdz93cnWOI5sEy9Xd7WGkDd9UG6xfSUCkUE8AhN5aF4sgFNH2gAREauLF60aE86bOxEK9rM90wiSoJBRJtDDzbV/IQ7q0TKgSL7FZPHGw4hFbj+T11/mzHid+5iAo6psIFMNZ5AlCQvfMsF9ctrMGiXQJNgxkz8wJLh+uiizPCs0ho7xfXHUTRevUxBLsBqQliCl461l3Xffl/39934NM9HsEET1bo3fQiK1KtQVYeyGSme/WBZfUlf/YDsrvLIyjdWeBl8Hp7JZ4uP1ONh0O+iW0yxoF0WdRbY/HNLxs3UXMlE2AXe7/Ooo7E32U9yLwddyde3qgosBDg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AM8PR04MB7874.eurprd04.prod.outlook.com (2603:10a6:20b:24d::9) by GV1PR04MB9072.eurprd04.prod.outlook.com (2603:10a6:150:23::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.17; Mon, 17 Aug 2026 10:55:54 +0000 Received: from AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9]) by AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9%6]) with mapi id 15.21.0315.016; Mon, 17 Aug 2026 10:55:54 +0000 From: "Peng Fan (OSS)" Date: Mon, 17 Aug 2026 18:59:33 +0800 Subject: [PATCH v11 2/6] clk: Introduce clk_hw_set_spread_spectrum Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260817-clk-v11-v11-2-36e9bc701b11@nxp.com> References: <20260817-clk-v11-v11-0-36e9bc701b11@nxp.com> In-Reply-To: <20260817-clk-v11-v11-0-36e9bc701b11@nxp.com> To: Michael Turquette , Stephen Boyd , Brian Masney , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis 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.16-dev-7bc12 X-ClientProxiedBy: SI2PR01CA0045.apcprd01.prod.exchangelabs.com (2603:1096:4:193::19) To AM8PR04MB7874.eurprd04.prod.outlook.com (2603:10a6:20b:24d::9) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM8PR04MB7874:EE_|GV1PR04MB9072:EE_ X-MS-Office365-Filtering-Correlation-Id: 306ae3d9-4d91-4ce9-cde1-08defc4e1bef X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|19092799006|1800799024|7416014|376014|366016|10067099003|11063799006|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: 76KKXVLWVGml51Y59Q/4uDs/EZp9YbhIenkdYYnMgjUss/mMa3AL4V2nqYWHYY+jx/yMrj2SMJqgx5VNEGyOnZkeLD6czauFTw75kZwquI+U7BRRUC/L9kG1gj/ascC7Ifok+nPU5xI9NWH7yWuvcTfNo1h4yg2MwsBYBtzr6h783HYOTy5IxERorOQXoxV4Lo17douz3OvbLAOhr7/cZqjYaUFVUFglGjZPeaTA/oEjt3D2oqRWdCnS64LK4Pm+j9CNfLqjmD0qgfDPJhdmcMCdGk5InLZe2PiwGd9VHVqvZStMomZ8bKhj6IEONp7UDH8gsxMFTTa9nEgLyafjXy7sP/5NaHKgSriEPnl8nSHYc3dCa1ihySrJQL1K0UFWLQpKyG1EbdY2iRRTtHV6u1weWiRYB+1fM1PERTEl59dCtTprlbWOduFg1jJoTozc+VI2CeTXJdPLwJ0qhydVdPW5v9fu2YxoyVsLAMwXSfs7kOUUAF84TbdhAu3cTcGJQmIZU1L8K/x6xdYthHWRMfrXqP8DFP7y8DbmMkjLO2yeka8Ydwdfm5/uONWLRHCHT7Ivn/cO1sUGQP1GnJOEssfC7MMhlorrb0/bZKJSnmDNjWO3R+VeYZDDBF3viT2LT95JAwgX96TnbQYpRjeTbHxUcVlz8GjCL6EYIANArbc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM8PR04MB7874.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(19092799006)(1800799024)(7416014)(376014)(366016)(10067099003)(11063799006)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?L3ExRHY2TFQvZnBTc1kvWnZDZDFGdVVzUGpuaWo4UWEyOEFnN1lURy9wdVlk?= =?utf-8?B?d1g4VUg0Znk2bXA5elNoS25oa0Q5S1FCbDRhcUs1VnAyNkRIeitTeHBXS0Iv?= =?utf-8?B?dXZWOW1XRmdOSnl5ZzhmRzFPdXcwcnJzRGVUQW1LN3o4a092clVvTnBDc2M1?= =?utf-8?B?ZVdQaWRrbHhkR25rNXRNU3p6dENTSkptQTU5czk2bFM1LzZ6Nytic1FZRnVP?= =?utf-8?B?dUFBRHBTNW10Z1h1ZXp6L1JkZExFSCt2NW5IbVI3WVVoZUd2WUpVYjBtOXRo?= =?utf-8?B?bG96UWVPU3hFeCtzWURYbUhWdW85V1JlOHREak1hMDRTUWhFNm15UlJGN3Bo?= =?utf-8?B?WWRJSGpqSWVmSFdMUUxqY0tURjNUYjBTbmFTM0RkaUU3cXRVUVRPaDgyQzI3?= =?utf-8?B?NUFHWjdPS2pJd3M4ZjMvSklFMk13WVM3eDF6bGErdUxJVWFMWURwSXhwNnRS?= =?utf-8?B?bnNJWU8vMVU3clhoZlhROE1mMlRQMWhWTVZpK0JwdFFHNGgrcVVvTnJDV015?= =?utf-8?B?NENtS1k5QmlzMkIyZkUrVjkvZlVaMlFaMFN1VGo2TUFBMWc0bTA3Z0pvdEwz?= =?utf-8?B?OTJpZnpuMzBQWkRoZkc2a2ZrbDIza3dWNitNUkRVTjVNNlJ1OWdIT21Cb1hw?= =?utf-8?B?Tnl6QWpSaURISExpQVlMd0p5WVZLYzdSQkMrdEFKZFJEUmJCd0RzL2tPK3Iy?= =?utf-8?B?NUp0WkhVK2wrRmtwbm9Fdk1tS2Jod2JmNlZ6Y0d1VXFQV290YlE4eEVDRk5O?= =?utf-8?B?OElkRXYrZ096b093MU91WWd3bUNwb0tkSWFuamRMeS9RRGFEY3VLVjhzcTFX?= =?utf-8?B?ZWh1bjRoY0xKeUtqS0N4d0UyRzQzTWF0SVJGc0pPaDdxQXVkbE42czlmMEdL?= =?utf-8?B?T2VGUlI4YzRscW9pbjFUNlBpdDR2VUJKZXYvRlhOd254VTdHaXR6MSs3d1Rn?= =?utf-8?B?cllFOElKdWJ3YWpqVkZKbWxhOTEyM2kvejNFRlVKNS9zR0NWQjhyaUJhUGZn?= =?utf-8?B?Tk1lSUNQTStHdzlZb3lNcmFQc05QMGROREpxd0Vka2NWVkJUYkFGbXNPcVov?= =?utf-8?B?KzdGRzBZQVJaZ2lkdUpuWGt5L2xwY0Zxb3Z4VytyOXBtVnRKcXpWRGFMVWhm?= =?utf-8?B?VGU2NDQ5VnhidnNZSExIYTBPdVhwUGlJdk8yeStuT25pcU1QT2djdndRVEhF?= =?utf-8?B?UTFOZWF6RVVKRlpjVTlWd0JNSWNESWlYdXN2SlhtcXpnd0p5ay9BL3FVWERE?= =?utf-8?B?V3h0RGk5L1RZYmNHb3RhTkRCUWtoWWZkaExSSmkvUFpyZ3RGeTI4M3ZXd244?= =?utf-8?B?dEhtRFZrd1ZSdWNnQ3cydU5JcitYN0I5WXcwT1p4aUFVTUZ4dlpYZEx6aThi?= =?utf-8?B?aWdGWHpWS2V5Zk9vaEtLVTdESDR0ZWQ4c1hMZWRVL3lxYUcyaEh4WlFvWjJB?= =?utf-8?B?T05SbWJlRjJwTTh3NUw3ayt2cGFhaWY0ZXNOdVd5WUtQeExHTkpYVXFsak9F?= =?utf-8?B?elZCek9LL3RjeEkwOTJENHlwYzlyeVZYSmZPenRrMFVUZ3JjT3BhemdSSHNV?= =?utf-8?B?STV2ZHZ5UWY0SmtSS2hmU1BuYW92NEdhQjUxZXNRK29lZE5zYXhFMjdsaEw5?= =?utf-8?B?clJpeEVFQ3FSc2tuWmxZUkd2V2haZVVtSTIvY05sOUE0bENZZjNrSW1HT3A3?= =?utf-8?B?VUk2TXF0MFBNNU5sNE1QcFRJWmpUaDRQcmxsVzliRHduNnlKa3BlcTE5Ti9k?= =?utf-8?B?c08vcTdrQlZpOVVKZ0NyS0JiUDl3YU1yeUw2ckdjckI4ZnpUejM0OERtR0Fl?= =?utf-8?B?VENBZU91VG05d1ZrZERkS1hrVEpzbDJwQ2ZVSy9zV0VHM3hLTytCcEpuTWxX?= =?utf-8?B?RVJiWlE2R2RNd1R4RWpwRUdHeFJ5MGV4NG9oNVZJa0xIUm1QZjR3L0c5Tlgz?= =?utf-8?B?dzBLTisyaUZSZHk1TGRqYm9LbE5XRE1mTU4wOVBqZ0NMUHlqMHBhSmdTenIr?= =?utf-8?B?TTFCdVBScEg5MWtlb2hzZGFZWkMxRWlnSTA0QkcrV1NkOWVyOWFhckdaZGlT?= =?utf-8?B?NElNM2FJdUVpWTlVNlQwOFlYN21JTm1VT3o1ZmpkU2lDRTFOMyt4TG1tWDZP?= =?utf-8?B?bXZXNWZVYUhEV2c3K1hibTlmS1Qrb040M1QyTG9tWnpQc05kWDBGdDZBOW5P?= =?utf-8?B?MlpKSm01bFNUdi9MTEJnd1JueFo0ME9oRUJ5RGFZN1ZSc0tjbFdnQzdnOHh0?= =?utf-8?B?VEc0ZmpjT1o5a0tyNkFEWGc5ZXdTa1J6NGlpb0hHVVVaNzBxb1c0UXJDbE5s?= =?utf-8?B?cGF0SnlnN2EzSFV3N0tVUGx4N3VIQ1g5U3pFa3prYkxjSnVzYVkvWDJMWmd4?= =?utf-8?Q?3Y9T/q8pYrPQHUe/Z75PFqR0PxVpS/9Fs/tKj?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 306ae3d9-4d91-4ce9-cde1-08defc4e1bef X-MS-Exchange-CrossTenant-AuthSource: AM8PR04MB7874.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2026 10:55:54.0929 (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: X9nhRWojrLSX1Mia/vu28+K0rjt5QlZJfJMF9EZsVt444ul+N/nJqvKmDB+i8v/GNTa62bl4LRQZPOSdNDOmpRyV7kqyQjw7dOgqz6v1YGq/aKOI6V3ChXnZhqja2nRw X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR04MB9072 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 Reviewed-by: Sebin Francis 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 048adfa86a5d0..8c78621cde253 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -2774,6 +2774,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 aba71f5dcc216..ad57bd18b536e 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 @@ -174,6 +195,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. @@ -249,6 +276,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); @@ -1468,6 +1497,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.34.1 From nobody Mon Sep 28 21:03:56 2026 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010061.outbound.protection.outlook.com [52.101.84.61]) (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 9C1313F8EA2; Mon, 17 Aug 2026 10:56:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786964176; cv=fail; b=LAteam1OHDBQRPUKd670sJrpjg7elna5LaQ3S96wL/xu4Xr1D8i/xKKlwhPpnzLNEtQPBDfkpAO51sfrkgK8qJrs23Y+4GcoWRroqzA56SzjCe6V6WcQtMIC0ao+hjf1nepHjc4h7qrAbc4aNxqfu/K8+oTqGAzmBQNB0YoTfuA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786964176; c=relaxed/simple; bh=kLp2NqrkfbmhQJFDqFpTvNT/SgYyaRRAlHCXHa/h0lU=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=m3ueGwU9uwjA0gbPJKHGsxnXSxhVx+7eeCGIfD1SCzxdgf+hXDnod8oVWlyvXds5FuT+YrgwuTy2lEVjc5px6sUg3MWTrRQCwPBPLDiN6N1XUWw+YDFUF+rD00NLG7LQafR6ccX3HfGkwjLEcCbmzz6oDRt6jKB2G8ZAYAmFed4= 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=pju7ycXy; arc=fail smtp.client-ip=52.101.84.61 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="pju7ycXy" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=w0KT8o5QO6VQY1gd/69HqnLAHe8ATfbGL9U6IcY9AQpNuPjFc71t/TsUadYBTg0ytSo5phUkgEeX5y1cZfhyB56yR4CechclQ4YHYRQB2hhq36r4UQMmViHDZ8Z/E1r0nAnGsSzh00Dj+Iilz1M6kIbzPARgV/Jo5m1EGQXZ2+c4fiUXuCFoKzaYlZagl7TrGQ08vpxhcLseqj3Db9OdwpRD+VQXKigUPv9V/9u7cX412ZCyI6WqCrpc2U4d9/WtmKQ4GF4ejKYYovOaxR7J9lnGw0l99utKMgL0cvUiHZzRPFxoLjyYFaM4XEHh0mDZCPfybYOqJkCwzAbawZXwCA== 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=aYqmm2w1jmXSUnJl9Me6aVmrGxiG2TsCH5dxgpjBCrk=; b=f2Ht+eoUmw3KIyYpdw6SwHIwBJDbi2yYeTGBDi22jdhbQcGCyb9XDrcYEk43cEKkyB8H1j96jz90lUG4v5TInD2uG21YW2oAKKbwL5KqjeTgw2nYqhHKXDSVIeCkwo+EHBYrlR017ApCedlRHQgx7K3rfJTFCZ4kV+4O+MBcFR+HwgefZbJ8mGwo0+41F3NnVay/iKE3NK3ePwI483QmyJaM1O5g5BV+JAzOgbhy6PWeTdvoC4tiYbm/igNTUztl+piHuAV8pjxSGMuUdwiMb8l5+THKee2ar1ce7HXLF/5horzJqB/MbAx3AnZ8vsg7KLekDnRSQ+WTfXos0AiNAQ== 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=aYqmm2w1jmXSUnJl9Me6aVmrGxiG2TsCH5dxgpjBCrk=; b=pju7ycXyc2iM2KVX+HRCL5sOsMMbOVHNXDmPJyAeHOUIGrmNSIl5d9hHEv4ddPTgvSokmYByQzKJ5bnKorXLyJ6fY7+72laDBwXmoMJyshh6eygS3IX7O3OeLZK+QT/tL+tv35H19LQ0XdSy+4LRMozlaeH8sv1tLaCOgo4rqy7GTwGhwN9Hy3HLC5eBXu+QBM7t8dF4dYqQMwN1rQhsjWkUMmrrdqmIvCkSS6YN70qmZoKuRyW9dlY/j5K0T9X2I3bTkoH0jJ+R6dwamrs2jMu13q5MUdI4CrZ7MViLvLU4sTFnEO4vyjdZrLKxbIm5upZ9IA9nMM3pywsLCnnyBA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AM8PR04MB7874.eurprd04.prod.outlook.com (2603:10a6:20b:24d::9) by GV1PR04MB9072.eurprd04.prod.outlook.com (2603:10a6:150:23::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.17; Mon, 17 Aug 2026 10:55:59 +0000 Received: from AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9]) by AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9%6]) with mapi id 15.21.0315.016; Mon, 17 Aug 2026 10:55:59 +0000 From: "Peng Fan (OSS)" Date: Mon, 17 Aug 2026 18:59:34 +0800 Subject: [PATCH v11 3/6] clk: conf: Support assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260817-clk-v11-v11-3-36e9bc701b11@nxp.com> References: <20260817-clk-v11-v11-0-36e9bc701b11@nxp.com> In-Reply-To: <20260817-clk-v11-v11-0-36e9bc701b11@nxp.com> To: Michael Turquette , Stephen Boyd , Brian Masney , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis 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.16-dev-7bc12 X-ClientProxiedBy: SI3PR02CA0008.apcprd02.prod.outlook.com (2603:1096:4:295::16) To AM8PR04MB7874.eurprd04.prod.outlook.com (2603:10a6:20b:24d::9) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM8PR04MB7874:EE_|GV1PR04MB9072:EE_ X-MS-Office365-Filtering-Correlation-Id: b738b358-9153-4b0f-10fb-08defc4e1f11 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|19092799006|1800799024|7416014|376014|366016|6133799003|10067099003|11063799006|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: lCOSKeY4W6gENZVuznC5RVpen01/VwWtHAAixuRqUMNlDh8vNUZPICBE6DgfG1SgC8NdC9CB7Il2e/f7AY+Zvr4Z6xi6EN4NTcynBogMxG95DO/xQIEwi0PBRgZryqRJelgaQLHlIlV28NT1zCKMPVwzE3MmpWHTdu098aPSans8JunJ6II9zinC+wB1RXQ62qHqSDanMh1G1QrcfnvX98ZqWLqfz2NSAiY9Lx+ASyenmda4frGbc/5GY19no84FNPjMqLwjcL6EpjhkocESIvwLUMJf8CU4gG7nRx1ueLv2Z26u7s4TJB4OKCfgegwkY8oFo27uDCXxGHJrQJpTYfnF62u+qseGIycWpygp7LDaF1+/lxwAYG36/vSNFlMqxSSyPPt7j8pZKUU/VvxhxtvN0a9mfNXM/2h0jJyjpDn3ewi1hDnB6nMhMvId6DlZL7Q8Eovkrdv+dJuowG9ULs2CTkgDxLoADP9xLwDnuqz4RjI3oyQttF+icme81DPwKjiUDhLwnjUgJzwFCETQR7Px4sS/oDOc+eu1Ba2/RnzQOHj7fGQxHhKnwV45IFbsSYEA1IHbLmAiv+5L/fXI2P+zcETWDL1F4pqvgKBi2kUNrMw41FRbywCZKZ1A/+pGTPjxqNGDFvgtC6i0n/vp8gQVfjvECSuz/8wnIodw2o8= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM8PR04MB7874.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(19092799006)(1800799024)(7416014)(376014)(366016)(6133799003)(10067099003)(11063799006)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RFNDR1NwalJpazN5VnZzbHR3cFpPekZzMzlyQ2JhY2xuaExyUWJzSVMza3dL?= =?utf-8?B?WFE5ZEM5REtHOThjNytSWWhwdENWZHN4ZzJ6K0dHcUVRbjdGQXhVR2FWK1VX?= =?utf-8?B?RlZwUnJJcmpPNExsdjQram1ZOGJZZit1SEQvcmJ2MmpJNDN0ZkE2TW9VS1lP?= =?utf-8?B?VHdEWDZoMHJMcnIwZFYxbElMNkdrNmd0YUdHZndaUzdONDhzZ2tnbWlOT2J6?= =?utf-8?B?dWhlei9Ma1lTYjFUejc4NE1aMkkyTGVHNWcyb281eFpsbVpNWGtlZjZDeGUy?= =?utf-8?B?enFFaHpUZG0vWlJPUHNHZUZ3QWFjdFUyTCs1Y2NsVnA1VStQWHI1NWJJRnFY?= =?utf-8?B?ajRLckVTY0VlV2ZvY3kxYWs5RHhQS0JJcXd5N1V6M2pFdmRjZGVDdXVUZjF0?= =?utf-8?B?dWNNTGlCV2kyTTZwMWZXRWkzZnhWcUpPT3VhQlpUd3NQM1JZdlpCSVFHak8w?= =?utf-8?B?TFd6TXIxK1ZxYVBYK3crVUQxM3dJMlFpUWFyOTV4ejVGa09yK2g2b04wNmxp?= =?utf-8?B?dTZGTXBEMVVQb3Z4V3hNMmNublZ2NzhZSlNyY2hqdHRvMTMrY29jY092OC8v?= =?utf-8?B?T0U4NmhVTFRxSFFhOTFJbUlBb29jSkthTzU0aVlibWJVa0grTTNYL1c4ZGlw?= =?utf-8?B?eEYwWHVBSTg5alhzVEp4SzVwdk5LbHVZUG14V0dkbG4rNVJEWTM4d24zRXVJ?= =?utf-8?B?VE5hNTZxUWxGenBjSmU3dlZjRWxzSWNweDh2SEpLazhYc1RySzdXMzZLMGVi?= =?utf-8?B?SER2OENEYTRVV3Y4YWlBamJrZTNZWjVyU3RzWVNJRUIyNmFpcVVPdW1ZOEhk?= =?utf-8?B?c0Zreld1NTkrUW5zMVRpUXJaaGVyUDU2Yy9zLzQwZVhaSnJKaUVkRFpJcFlD?= =?utf-8?B?eXJ3aERVSWpJYU9jZlByZDFJTWl2VFpzVUt2TFA2ZFBTTXpCMGc2VXJrd3Rp?= =?utf-8?B?S1lWZUdpWTF6K2JCVzlheTlaNHJaT1RnWXZDWVVXL053cW9nTGdBQ3dmbUdH?= =?utf-8?B?TUl6NFhYS3Mva3RKM2RTdWJnVGxBZ1NUL0p6RndEcCtpWmtQbXJ4ckQ5eGcx?= =?utf-8?B?VTRmTGRFaW1OVkxGYWt2aFRHV2NaSlRrQmJDNVhFd1hteU9Mbzk4czRTRUdl?= =?utf-8?B?QWJhMUhmQ1hESUNSdnAvanYrMzF6UVlEZzhmSmRIUVZ5N2JKUDdUMWJ2SGpX?= =?utf-8?B?bE9kNndXN2VXcDlLdHI4SmhBWnU0d0o0QisvejNyYTlwN1V1N3JHOUpNMmJB?= =?utf-8?B?ek54UE1jZG9ua2FobUV0MGVGUG00citscDZoVkJ2T1duRzRrV21LeWljU1I2?= =?utf-8?B?czEvaVFrSkJrVHdIcm1UTFBRQkV5blVOcVhILzgxdmpSN05BT3B0UWtCZUdq?= =?utf-8?B?UGxtNVF3aU1NN1dhM1JnTVFMVXQvUU1vVWxvWFhUVUZzVE0vZEZLekRWVDJE?= =?utf-8?B?ZzFkdkZBblNuYTRUa0VYL0JONG4vZ0tQa21CQ0FVZDQ0RzM1UXpkY2ZmUVJv?= =?utf-8?B?dEExQWJXVTR2cVI1SHIyTlNQUFBPN1FybDNiUjRBaGNQelU2QnJqOVNNU0to?= =?utf-8?B?eTByU1FWMzVUZytsS004NVllbkFYak5zZ2tEUDlsRUxHd3JGcEtOSHRhQS9H?= =?utf-8?B?R0lmdnNNQVVEUWc1a0xIWkR2dWJqeWVrY0w5T3Z6TnhpQ0hmeDl1bHBFYWJn?= =?utf-8?B?QXcyTmFpcVlRNSsxWStobnRuOWF1ZTgyTEx0RWdXcjdiNXdvdEdqS0JJajY0?= =?utf-8?B?NjA3aXVzYldBNUR6aXpaOW1uWmxKOUhVTk1rdi9Id2lOdVR0cmMzcCtlZGpl?= =?utf-8?B?VjB0U3lOMiszdEJZSy85NjAwYVlPeWhJcC9JaUNHQUZzenBySkNPT0FIRU5l?= =?utf-8?B?T3FScElNMEd2aXRjanprdnRsbEl1SklPeEdvOWtTekk3d2xseDVTYzRmS2lD?= =?utf-8?B?NnhrQSs2d1JRaW1ZeE9obk1XL3NBNlVCQVR2TFdIOHNzdm9kRHBZT2RVb015?= =?utf-8?B?SndRRGFEMjZzbFhHY3F4S2pSRHBZVktkVnQ3KzRYemhrS29Xb0RmK0tCTkpC?= =?utf-8?B?VHFkY2haQWs2NjJtMkJDVjNDTFZpK2huZ2UxUDlvdy9JVlA4UVNTL253NEJk?= =?utf-8?B?YVZ0YVlCVUFCeGRGVGJQbEVmaGtwSlo3ZHVQZGo4WG5nYll3OE9CUkhVbisr?= =?utf-8?B?d2dnTmRGc2JBZTh4UXNvcVlKLzkrb2dMSFA5RFpzSEZpOGlvck1NOG1Cc3pK?= =?utf-8?B?VlVxeUdURS9iSHBmZHJ2WkdnWE95WENteDh1Z0ZjMHp2TEdFY2NuZWZENmh0?= =?utf-8?B?R0hWUi9mV05kaWZTaG8xbzN0bkY5RS9BY3lRR1FtSFdzeXA4K05DZG9CU05i?= =?utf-8?Q?MkRGP1/2tD1Ps42xHKVifkZxcO8LzzkEIJOFz?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b738b358-9153-4b0f-10fb-08defc4e1f11 X-MS-Exchange-CrossTenant-AuthSource: AM8PR04MB7874.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2026 10:55:59.2981 (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: sXxnbN83s+vhUvfqnPS7nkoX/TnpI5Vk8aK2oPXa2mCEsBkA+yfLRciZM+Po0zGJvMp8AZbV3da4QaMUg3a1lxNjYHIsyoo7/jKrLa3336YDOaoaJ7xAasVQWIZMdHCJ X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR04MB9072 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 Reviewed-by: Sebin Francis Signed-off-by: Peng Fan --- drivers/clk/clk-conf.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 76 insertions(+) diff --git a/drivers/clk/clk-conf.c b/drivers/clk/clk-conf.c index 303a0bb26e54a..550b8ae375a2c 100644 --- a/drivers/clk/clk-conf.c +++ b/drivers/clk/clk-conf.c @@ -155,6 +155,78 @@ 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) +{ + u32 elem_size =3D sizeof(struct clk_spread_spectrum); + struct clk_spread_spectrum *sscs; + 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) + goto free_sscs; + + 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) { + rc =3D 0; + continue; + } else + goto free_sscs; + } + + if (clkspec.np =3D=3D node && !clk_supplier) { + of_node_put(clkspec.np); + goto free_sscs; + } + + 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); + rc =3D PTR_ERR(clk); + goto free_sscs; + } + + 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); + /* Do not fail */ + rc =3D 0; + } + clk_put(clk); + } + +free_sscs: + kfree(sscs); + return rc; +} + /** * of_clk_set_defaults() - parse and set assigned clocks configuration * @node: device node to apply clock settings for @@ -174,6 +246,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.34.1 From nobody Mon Sep 28 21:03:56 2026 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010061.outbound.protection.outlook.com [52.101.84.61]) (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 304833FD12A; Mon, 17 Aug 2026 10:56:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786964187; cv=fail; b=GbTJgJac5mJKHmC+EV3cDnP6D2hvmHwrH9LPUcB3hqLMbPO8BMRBvCUVMo0mFZimkZfhPV+t2cHG1iV2pQ2e9uEyjYj5Wx/U8qC3qM5relGFrJ3VlIfI4V3IGRzvUwfrWqtUDBZbiLjixGpwpkWwABV/V+ZvAklWt1H19mFWkv8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786964187; c=relaxed/simple; bh=FolSliqcOMZplaheNMJAM0OqHVmYKgIrlrI3pirmAGg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=hanE5FlqFjL5gxgWa55HvrZDzPiZoR6NUQ6TcNjK6okQqMK9zCutkkpc27UlZ6FnUdEjIyUqAeWWKV61F6gX2M2Hgicw0m2bUeKoiSXYcXjJNE7ndZ80q5nby5SVileVF/0mSsKrBkE3krUwTTb3r/522ONNXfj+yXGJSDLI01o= 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=bvrYqhcy; arc=fail smtp.client-ip=52.101.84.61 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="bvrYqhcy" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=j/Xp1kpIFIdrEnlhY831IyaUbqFQqvLaRdyYEpYgF/36NKHwArTgA1Vfeu3lnnyCGRoKbqaSE26rLcIp8BpvCtvO0oVxH1sfsAdWpdugtZ7mrDotq1oqx18aATWxV55XgnrDYaNX6jHrK/5DEsMQue9Ffp4Zil3JI+GcU/cXYMuRCa27e2xLBTJCO8uhjHbSIAPMOQ3JBLu5Vi5FMrY1tgE8jAa17IUV4knWCBmgtZh+Wzdkt+hLPkGkO44wOPYaBo5pAk+3aScSwSxY4h4oTgPrDLlrQTun+aNBVmK/spWkrpMo/yZXw6HgWyEaNN9IAUG/YSZatPFI3VVCBh+hZg== 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=LyiLYMwcXtd1FqPQTW4zPAlZXWSJwppqXoPqH3OQ+7U=; b=OJjxYeOGI6ncpVTy2rYrnEX3GmPrJzCPgdy6FwBv9Zzf5dUul7MLFOK9XkixTk0WSEKOERDZncmD/s9YV1VJv9fJFQ+V7gthaaVF1uAZDhiyIWVnMrIxD06iMfJe8u1PR39T3XMjFaXKSj2/MjpdAyjX/UE3UvrHKn/8s3iphUjogmQGBpd5CN3INnvBvlaCJqNdG8iKcVPcvNl35rgnW3O27Yo7pURU7qqyDKRbQc1zkSD6e2i7NRWvWrIJtgK0juuvXc9PE0b/XD/RH+a/cWS6+E75ekHqjtVLWFyiSE2zAfMoLuUhUelIDVCLEfpcauElK/ISNHXZkQ0kAMsAkA== 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=LyiLYMwcXtd1FqPQTW4zPAlZXWSJwppqXoPqH3OQ+7U=; b=bvrYqhcyghpYJe5sKfS+h6lFyNVMqlkOfzcis3bhpZmCc9DQlwyLxULDF9dQjZ7ONziCDbzKLT9t20zkaZMmz06keiidJGXVGVThi85SHrEVjNzgSAcHRySsqjBLHfbANkOhHaVUAK6ltqpfHQAJbc3W5TbF9U3dFX5cL8+1M7xTdNMJF0rjeoAO1DJAAfWAH8A+tkasHZt5GgvvhE8Cl7Dr0HhwmfAMm2rJyj447uAHQfeWVQJdeXHuWMY4njoQiM7cpFvzxeXIjB9ZhJsp5d5i+oyRiGGES80c0S4UfT+dvoBLC1WCQD24aBztVfchKKJHUYkkxgAoVOVlsb2+Lg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AM8PR04MB7874.eurprd04.prod.outlook.com (2603:10a6:20b:24d::9) by GV1PR04MB9072.eurprd04.prod.outlook.com (2603:10a6:150:23::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.17; Mon, 17 Aug 2026 10:56:04 +0000 Received: from AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9]) by AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9%6]) with mapi id 15.21.0315.016; Mon, 17 Aug 2026 10:56:04 +0000 From: "Peng Fan (OSS)" Date: Mon, 17 Aug 2026 18:59:35 +0800 Subject: [PATCH v11 4/6] clk: Add KUnit tests for assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260817-clk-v11-v11-4-36e9bc701b11@nxp.com> References: <20260817-clk-v11-v11-0-36e9bc701b11@nxp.com> In-Reply-To: <20260817-clk-v11-v11-0-36e9bc701b11@nxp.com> To: Michael Turquette , Stephen Boyd , Brian Masney , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis 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.16-dev-7bc12 X-ClientProxiedBy: SI1PR02CA0054.apcprd02.prod.outlook.com (2603:1096:4:1f5::13) To AM8PR04MB7874.eurprd04.prod.outlook.com (2603:10a6:20b:24d::9) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM8PR04MB7874:EE_|GV1PR04MB9072:EE_ X-MS-Office365-Filtering-Correlation-Id: 9b31108a-c64f-4b17-d9df-08defc4e220a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|19092799006|1800799024|7416014|376014|366016|10067099003|11063799006|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: aangbOwtg48lzpRmYk9QX/EDfnO2q0tAOkwFC05oS6gwd4imnUpPj6DPQOr9eq2lICwGFVFITagFzg8ovhJ5UwKZ4TEUr2G3sSJ6ADmLXFIdxqsswZFoUjX6yiJ5QckaufcxDgra6v6J9muiCbWNDy52+9cS0sE/fN4nZ+SUzLwLEJhyje0WlyHuMvJ5SbyysZTBgfIxJWf0Zc5sNcHL4vs5xGDrGu6XDYSFWh9njyiucYlWFiqxb5HNz1IOEg9XP56KeJI/gWqzWL7NavBOSOndlQPX1lwBpJmGev71HUlZ0UiSl/xBeZ4Od2hgtE7ayKomypfcfhh/WczzxILiE17KHPVSpJyKHi3zJ82eZ7fvD468zqKwvAEwkR9Q3uwwcn3Cxnhd2chsZT1cNKNgiiMjI3NehiPpHVJTrouwClJ2KVyYUMYxrsmuy4kDpKZ6nhje+XWl2uJVXNfbAvh4sG8ucjhMfrA0104qmB4tVErB6nIh9tlEHMT9dFmjal8gU3jtPFDZUFLhzKi3rKXGp5RXswHOlX2wMgOCsad4x5SSA7Ovl0TTt9UU4KoIPj+WI5TGmmK8gXFDbhPr9csSOQI1DhM9YSYhPH0ayFkm1phWStI7Pd2uaXBuDFvs8GAza8HgS+ax9435qIS0A/wLguwoqG8XVSS6jcllD6dl+L4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM8PR04MB7874.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(19092799006)(1800799024)(7416014)(376014)(366016)(10067099003)(11063799006)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Y21XWUhNOFIrRTlDVVB0UXpJMElkdlE2RlVnT1RwTXFzYUNPazhZVkNlOUwy?= =?utf-8?B?ZG41c3dPZE9tMU1sNSs3NitKQnJKc24zaGJmcDFGQ1dqeVE1T1lUZVRnaENB?= =?utf-8?B?VVp4UkU1SzZWSHV1dlFFMVAyQ2pwQmhkOEJxS0pTKzVpaXZMOVZ4ZkozOUwv?= =?utf-8?B?aks4QXZaeDNPR0cxeVp4MWRwbWdjaVN1MVJ2Si9lSTd5TVpjZE9iYm85MDZW?= =?utf-8?B?YmNOWmZWODQ3ck5ac0pqMDVTVmcyQ3RXbmNJN3M5OEdlQk9pQ2doZlJwL2Fq?= =?utf-8?B?UjlBSHA0bm03T285WGtVNmNTeEgxcSszOVZuTkkrRHhJRlozVXJ4elhnRGFr?= =?utf-8?B?d3RLWWcyUzBvL2sraWJjZHloUHVwbEtTdE5SclZpUG8rZ2xRN0hRdjhTZFhp?= =?utf-8?B?UG9ESjlpNTEvdTdieU04ZFRGejFVODNHcUlZZFo2L1d4OXlsaGFlUm1kb3Yv?= =?utf-8?B?czZ2WUxvdXhBbFBLcE4vRDUzSlR3bWlMQ0dxRzNxQUpObXFxUXBDZVpTY1Zi?= =?utf-8?B?dlZJU3lsT1RXTGNKSU5waFlTNjZFdnNnQUdEeENybGhZQTFHTnBKK0JjQWpa?= =?utf-8?B?QnVCNDRRNjdsa2hxWGJkOFhDV2IxUkFrOXA5MmNidGJxOEhtVWRXTlFRSHJu?= =?utf-8?B?c2hFSXVyRmo3V0NpRElmRVQ4UlR5SUdIUElsdFZmVEo2eE9OdmNIaFBEN1J3?= =?utf-8?B?YWZQQU12NUhoeUdYeVZUN2JobmxwYnQ4T21Cd1Q3S2JBODVuSjhOMWNoaVpD?= =?utf-8?B?aXlvVjIvZWcrWFdhVmJWNlRoTlRranlvQmd5Sm04Z2RraTJiR20rSCthN3JK?= =?utf-8?B?SW9KeTl0c0VuWFlBYU1xVXJPa2c3OE9NdmNva2syb2g1eGhKcUtqU3ZYWnpz?= =?utf-8?B?aXUxVjc2d0lpWHpVOWpBTW5XNEhzQVFDZ3MrbWp0Mkp1MEd3dzJsQmtWRDV5?= =?utf-8?B?WGZXOEtQa0ZVZFdER3FleUZXdXY3eDFJSHdFL2FUTWw2NE01REJXN091Wmhj?= =?utf-8?B?NFNtRTVEM0srSzU4eG5zS3AvZ1FYRnZMalpEK0hsakNQcEtDQW1tc0xOS2ZW?= =?utf-8?B?WmJBOEdyZWZTaCtPcURRVlJLTHAwclh1SmpUVTZkZVJpcC9ocEUrTDkrSjd1?= =?utf-8?B?T0RCT2t4N0t6VFg3cFo1OTllMHZweVRyZ2dQYld3TFBYbDRWaWl1c3dGT2du?= =?utf-8?B?dXpWQmFQeWNodmZiUzJNTHQyWlBpaERwNm1VYkVjQWFsajA0Q1o2TWVibEN2?= =?utf-8?B?eFpoaHRNdmtRY0VVdlgrZTRta0hVa2c4a1FaWEVCOEhLdHVaSVBrMXk2bnIx?= =?utf-8?B?VUIybllLcEVwNGR1UVBRc2tscDc5TkZHbE5PVURJenQ4WW1aNWpaZ2lFQTJV?= =?utf-8?B?bnJLditDWUVaUGI2ajVUdkxXTkU0b0h4Y05kYXY0RnZ5V2FxcEIzSmJLamJm?= =?utf-8?B?MzdFQ2NpbUJhU0NaYWk3bUV1R0JMQ1l3Qm4yblAvRHZyRHFLMXRDaG5Oblky?= =?utf-8?B?cVRhcU1mdzJ2TVVxUnZ4RWJIczlKMVhYazlEVUFXVzdGYkpnQ1lyR0M4QTNW?= =?utf-8?B?QVBLN0tHY1p5cWFhWUN1TzZpcHlGQXNTRWdiQmdiV0IrZDAzcUpYSEdvQ1Qv?= =?utf-8?B?U2RkZGxtbTNORStDTnJuWnhtVzl0V2RLbmpjeVN2cS9nUDh4SCs3cFJqOHIr?= =?utf-8?B?eUM2WDFMTUVUek42UmZvRE1ETGlSenJtWG43blJvRWNzUlVsRzFiN0x3RXhy?= =?utf-8?B?eGtmNEZzNEw2M0E2WHVnS2tMb2wwb1BjVlN6R3ZTQUVtTXM2WW8xSFc0NWZo?= =?utf-8?B?MmEvZlByY3BYNE5sZmsyVDVWdnZqZWdDa3hYVWR4QlJ3YmprcHpPaHFCcmlj?= =?utf-8?B?eDYva2pLNC8vZ1dhTkwraHlLZUR5NzAxMWN2aEV0c3VoRkhuVmwxT1QydmdI?= =?utf-8?B?MmF0ckZzaE01NFJPU2g1aXZTMkhPNTFmRzdxN2ZLdWtkMzRqdUJHbXdENklJ?= =?utf-8?B?ZFAvM3FBU0JlMzdVWUhvQUVXdW9IL1drM0ZVek5wbjFiT3FMb2poQURhWWo4?= =?utf-8?B?R2tJSDlUVUNZOTRNM21TSWZJMk9VYXl1VUpVSWhBdlRQV1FMaHRDb3lrenE1?= =?utf-8?B?aEFBTUlLZ2xld1NURU9oTW5ydnArYmpQSFI4K1lONkRkSFFUeDNpSEsyVlNo?= =?utf-8?B?amsrdE4xS010MVN0SkhMQ3hKTFZvMkhEdi8xWnVZaXgrY3UrZGFYcnB5Vm4r?= =?utf-8?B?akxwOWVja2N5NWZicWVEeExLVE5iOUNVMXJaWEljaCtFWExIQ29pS21xUTI1?= =?utf-8?B?VGtjbWQrVjhaNG1zcVgxRGxDWUM3V1htc0VxR2hhOFovVmRhbEREeUk2cDZW?= =?utf-8?Q?tbuyeIdTP/2AT0JS4N1pbqmsAvUhHL4JhSKZL?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9b31108a-c64f-4b17-d9df-08defc4e220a X-MS-Exchange-CrossTenant-AuthSource: AM8PR04MB7874.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2026 10:56:04.4554 (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: eP2dJV8f/SY6qoX8df8M666joyeF3svRn77PMglpaev6VFM5tfMRh3G1aB2L7+CPYIjrjtayzSwoUy6FeSGXt8/kk4/gt9ykhOM4L3D7Z1UDMudIi8T5UvTzLlfvhnk9 X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR04MB9072 From: Peng Fan Add KUnit test coverage for the assigned-clock-sscs DT property that configures spread spectrum on clocks before they are used. Extend the existing test infrastructure to support spread spectrum: - Add struct clk_spread_spectrum field to clk_dummy_context and a clk_dummy_set_spread_spectrum callback - Wire set_spread_spectrum into all dummy clock ops - Extend clk_assigned_rates_register_clk and test parameter struct to propagate initial SSCS values Add a new separate test suite clk_assigned_sscs with three categories: 1. clk_assigned_sscs_assigns_one =E2=80=94 verifies that a single assigned-clock-sscs entry correctly configures spread spectrum on one clock, testing both provider and consumer paths 2. clk_assigned_sscs_assigns_multiple =E2=80=94 verifies that multiple assigned-clock-sscs entries configure spread spectrum on two clocks, testing both provider and consumer paths 3. clk_assigned_sscs_skips =E2=80=94 verifies that malformed DT properties are correctly skipped without error: missing assigned-clocks, zero-valued SSCS, and null phandles, tested for both provider and consumer scenarios New DT overlays are added for all test scenarios: - kunit_clk_assigned_sscs_one{,consumer} =E2=80=94 single valid entry - kunit_clk_assigned_sscs_multiple{,consumer} =E2=80=94 two valid entries - kunit_clk_assigned_sscs_without{,consumer} =E2=80=94 missing assigned-c= locks - kunit_clk_assigned_sscs_zero{,consumer} =E2=80=94 all-zero SSCS values - kunit_clk_assigned_sscs_null{,consumer} =E2=80=94 null phandle Co-developed-by: Brian Masney Signed-off-by: Brian Masney Signed-off-by: Peng Fan --- drivers/clk/Makefile | 10 + drivers/clk/clk_test.c | 203 +++++++++++++++++= +++- drivers/clk/kunit_clk_assigned_rates.h | 10 + .../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_multiple.dtso | 20 ++ .../kunit_clk_assigned_sscs_multiple_consumer.dtso | 24 +++ drivers/clk/kunit_clk_assigned_sscs_null.dtso | 16 ++ .../clk/kunit_clk_assigned_sscs_null_consumer.dtso | 20 ++ drivers/clk/kunit_clk_assigned_sscs_one.dtso | 16 ++ .../clk/kunit_clk_assigned_sscs_one_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, 416 insertions(+), 3 deletions(-) diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index 6899e32e14aa6..3a73b81c2ec08 100644 --- a/drivers/clk/Makefile +++ b/drivers/clk/Makefile @@ -18,6 +18,16 @@ 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_one.dtbo.o \ + kunit_clk_assigned_sscs_one_consumer.dtbo.o \ + kunit_clk_assigned_sscs_multiple.dtbo.o \ + kunit_clk_assigned_sscs_multiple_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 b1961daac5e22..824adc95e0b2f 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)); @@ -3403,6 +3423,182 @@ static struct kunit_suite clk_assigned_rates_suite = =3D { .init =3D clk_assigned_rates_test_init, }; =20 +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_one); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_one_consumer); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_multiple); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_multiple_consumer); +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); + +static void clk_assigned_sscs_assigns_one(struct kunit *test) +{ + struct clk_assigned_rates_context *ctx =3D test->priv; + + 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); +} + +/* Test cases that assign sscs for one clk */ +static const struct clk_assigned_rates_test_param clk_assigned_sscs_assign= s_one_test_params[] =3D { + { + /* + * Test that a single cell assigned-clock-sscs property + * assigns the sscs when the property is in the provider. + */ + .desc =3D "provider assigns", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_one), + }, + { + /* + * Test that a single cell assigned-clock-sscs property + * assigns the sscs when the property is in the consumer. + */ + .desc =3D "consumer assigns", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_one_consumer), + .consumer_test =3D true, + }, +}; +KUNIT_ARRAY_PARAM_DESC(clk_assigned_sscs_assigns_one, + clk_assigned_sscs_assigns_one_test_params, desc) + +static void clk_assigned_sscs_assigns_multiple(struct kunit *test) +{ + struct clk_assigned_rates_context *ctx =3D test->priv; + + 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.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); +} + +/* Test cases that assign sscs for multiple clks */ +static const +struct clk_assigned_rates_test_param clk_assigned_sscs_assigns_multiple_te= st_params[] =3D { + { + /* + * Test that a multiple cell assigned-clock-sscs property + * assigns the sscs when the property is in the provider. + */ + .desc =3D "provider assigns", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_multiple), + }, + { + /* + * Test that a multiple cell assigned-clock-sscs property + * assigns the sscs when the property is in the consumer. + */ + .desc =3D "consumer assigns", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_multiple_consumer), + .consumer_test =3D true, + }, +}; +KUNIT_ARRAY_PARAM_DESC(clk_assigned_sscs_assigns_multiple, + clk_assigned_sscs_assigns_multiple_test_params, + desc) + +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); +} + +/* 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-sscs 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-sscs property of zero doesn't + * set sscs 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-sscs property of zero doesn't + * set sscs 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 sscs 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 sscs when the property is in the consumer. + */ + .desc =3D "consumer 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_sscs_test_cases[] =3D { + KUNIT_CASE_PARAM(clk_assigned_sscs_assigns_one, + clk_assigned_sscs_assigns_one_gen_params), + KUNIT_CASE_PARAM(clk_assigned_sscs_assigns_multiple, + clk_assigned_sscs_assigns_multiple_gen_params), + KUNIT_CASE_PARAM(clk_assigned_sscs_skips, + clk_assigned_sscs_skips_gen_params), + {} +}; + +/* + * Test suite for assigned-clock-sscs DT property. + */ +static struct kunit_suite clk_assigned_sscs_suite =3D { + .name =3D "clk_assigned_sscs", + .test_cases =3D clk_assigned_sscs_test_cases, + .init =3D clk_assigned_rates_test_init, +}; + static const struct clk_init_data clk_hw_get_dev_of_node_init_data =3D { .name =3D "clk_hw_get_dev_of_node", .ops =3D &empty_clk_ops, @@ -3544,6 +3740,7 @@ static struct kunit_suite clk_hw_get_dev_of_node_test= _suite =3D { =20 kunit_test_suites( &clk_assigned_rates_suite, + &clk_assigned_sscs_suite, &clk_hw_get_dev_of_node_test_suite, &clk_leaf_mux_set_rate_parent_test_suite, &clk_test_suite, diff --git a/drivers/clk/kunit_clk_assigned_rates.h b/drivers/clk/kunit_clk= _assigned_rates.h index df2d84dcaa935..d7ae5ec2d25be 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_u64_multiple.dtso b/drive= rs/clk/kunit_clk_assigned_rates_u64_multiple.dtso index 389b4e2eb7f74..3a717dab2d00b 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 3e117fd59b7da..cbee7cbad068f 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 87041264e8f54..9b04d6927f083 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 3259c003aec0b..4784d40520f41 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_multiple.dtso b/drivers/cl= k/kunit_clk_assigned_sscs_multiple.dtso new file mode 100644 index 0000000000000..e3472f95987c3 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_multiple.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 <1>; + assigned-clocks =3D <&clk 0>, + <&clk 1>; + assigned-clock-sscs =3D , + ; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_multiple_consumer.dtso b/d= rivers/clk/kunit_clk_assigned_sscs_multiple_consumer.dtso new file mode 100644 index 0000000000000..6e8971bd272ab --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_multiple_consumer.dtso @@ -0,0 +1,24 @@ +// 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 <1>; + }; + + kunit-clock-consumer { + compatible =3D "test,clk-consumer"; + assigned-clocks =3D <&clk 0>, + <&clk 1>; + 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 0000000000000..43b2068c845de --- /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 0000000000000..bda008f5aaa35 --- /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_one.dtso b/drivers/clk/kun= it_clk_assigned_sscs_one.dtso new file mode 100644 index 0000000000000..91f585b5d8c9b --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_one.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 <&clk>; + assigned-clock-sscs =3D ; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_one_consumer.dtso b/driver= s/clk/kunit_clk_assigned_sscs_one_consumer.dtso new file mode 100644 index 0000000000000..0bc8a03c20412 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_one_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 <&clk>; + 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 0000000000000..08660846b55c1 --- /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 0000000000000..e1c089c6f0c02 --- /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 0000000000000..f39f4e754e532 --- /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 0000000000000..d6bd7dfada7e2 --- /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.34.1 From nobody Mon Sep 28 21:03:56 2026 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010061.outbound.protection.outlook.com [52.101.84.61]) (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 9A59E3F7895; Mon, 17 Aug 2026 10:56:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786964191; cv=fail; b=hGMjCK55ogUr8wECWTvDHSznGPcJnBtouHR8eqIkSL7ZxGHzTUHPgpIGgfbk47kssnuP6saGKeUIAlovVA3viE2M0ctCF2g2I29USjhZ8+7iWpBGVjG+ghkRye2lkbpEkVFCrW5Itu16pqZ5oFaWJlqvB9kvYgLl2i+7Ma63dpY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786964191; c=relaxed/simple; bh=4CK/3bE0yn0NlMwz0Xo60VRXHlIkruvIuWlIRUz/S7g=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=XAJB73AfsW7sA66iUcZLbuTXvcCtYZXZKzegvmPBRmxQZDEpeUf9REtuHl9kaGHGESSQWF+cW6Jo9SouME6PUO/QWjwZLkWfJd122WgXV0Iy4a/TCGJo1YkwK8uX5HCJcv+HB8+dDnJgV80i9sm6PDfyNZQ26CYvocncA0PqVWY= 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=cG21YKdD; arc=fail smtp.client-ip=52.101.84.61 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="cG21YKdD" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=t/U9OgPffl4RMeuMocCkATuxVSu2qbQA7hGR+S4Lek9gfOKrRul35KtcpZJbMCMVd6pG8wVdM28cUb4oVnEYI0+dhYmq49jl2uVOcuv1FFSXSZe04iuVtR/G9LWSs88QeTX5/2AnVpz0MqDxtAVBIb/pc5h1KeKws+XDH7/CTCZ3RQk055Wj/oVkEfblS/d/kH+pY0uyC7/fGY1HsTghHlly3ez0lbyOuv7aQpfcVl4bWWlO7mM4OynpVs5ILniJjM17Lm5xrq86nwZMHAZTUkDbYwOGcDF2vAOUKBjhOkxpQo/fdJF3NL/DekKM55JfLA5JwBDlaj31tEeWxwb7Og== 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=P5NVoMvtQMK61916v8Blqy/6+Zj8q0q39lvdVHTpHRo=; b=AamN5Swao/WGUmWIeOU2CaObGaP454Y2nvRltaRoW4z6bGbyt0lAZXvkNatVgs0zn7nU8xxjD/TXG39J2MK5JqxF8KbFDAwKFoJL+Uqor4T3dISiom8JLFthmGMsIJcLst2KeU1cNpO+c8FQE17z6oQAeSGkVHSTe0LqMEprm1HUCTSIO7FHtLO1BjUPoy/re5QkR18MIMBS1BUhR3h8CE11SkEiUs8R+s7HNApg7jVhuOOXZ1Z9YL0bbIe0OMEYYTQ+kV737gT6xJSjO+hogEn52CM4H/Wr2FZ1W3BUuPTGpIOab9IGstKK36rqSDgVIzLyj6XqY5OE8tvWNgxhkQ== 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=P5NVoMvtQMK61916v8Blqy/6+Zj8q0q39lvdVHTpHRo=; b=cG21YKdD54tBPhbvpRELCv76/HB+varQXZQdyu6jBjVA2bMbf9TaDNRWoo6FML75K3YGBAf25XHdQb27bgObKR+VySjs3EVdpiSQSM04QS7AViQTKo0Z3fZmDMm5mTKSSWz8PRZDVkEQDuX/XPDAaUcsj4cro5xsTI0keXhtjFTTNSbZelPOMzsra3JyYHg/IAohL+t3RqhRTlQc0i5OiGH9DvvEgfuCOyOqENcqfzbc3zBIGFxc9LhzT4hHtOXaxrS60DFu0y/McZh+jAiQoZqOKc27A7Z1eRcRufDUOtqUjwS8+jDCPKkBImZKyWaEJgWYdIJaDu4UwnKuunE4Ig== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AM8PR04MB7874.eurprd04.prod.outlook.com (2603:10a6:20b:24d::9) by GV1PR04MB9072.eurprd04.prod.outlook.com (2603:10a6:150:23::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.17; Mon, 17 Aug 2026 10:56:09 +0000 Received: from AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9]) by AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9%6]) with mapi id 15.21.0315.016; Mon, 17 Aug 2026 10:56:09 +0000 From: "Peng Fan (OSS)" Date: Mon, 17 Aug 2026 18:59:36 +0800 Subject: [PATCH v11 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: <20260817-clk-v11-v11-5-36e9bc701b11@nxp.com> References: <20260817-clk-v11-v11-0-36e9bc701b11@nxp.com> In-Reply-To: <20260817-clk-v11-v11-0-36e9bc701b11@nxp.com> To: Michael Turquette , Stephen Boyd , Brian Masney , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis 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.16-dev-7bc12 X-ClientProxiedBy: SI1PR02CA0060.apcprd02.prod.outlook.com (2603:1096:4:1f5::17) To AM8PR04MB7874.eurprd04.prod.outlook.com (2603:10a6:20b:24d::9) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM8PR04MB7874:EE_|GV1PR04MB9072:EE_ X-MS-Office365-Filtering-Correlation-Id: 5f4e9cd5-8335-4ece-884a-08defc4e2526 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|19092799006|1800799024|7416014|376014|366016|10067099003|11063799006|56012099006|22082099003|18002099003|3023799007; X-Microsoft-Antispam-Message-Info: c8EQFuIMtvE6HKVr6UJulTFjFkkamaR2dtSEvniPUiR1GCG8OynHpbbLsR+RjFGuxuynG/s7/WWRu/AI5qsnSzw3yh+IF9FXr5NeKnRIvRydeaK/DK46zg7M8+oK80czXzl4WxWCNrouOVBmPo6wExSUJWEc3ldWzRFJev4q8YkIsguZn3il0nhT9gjAC0nj8/aVFOlTbv3y/umhVyQGZKz2/Azsf3oDqYOpFB6ArRoWyLy9PP2MYCGEE7a1aHbWZ+3KBsFm/1awPxR1LmoOVDYRalZpTlnWlxFaxOdyLeNj+XBKslDFCVr9TgjwSVb26MprBvVGvcJXUOtG6oWyRnjXmsNjILT559xPOjJMFV4CzksgduOZVyA2zAtrOaW/WqfLr5/CknBpynz+IdCBefz74HW8yF0vOW1T8rRjrOIfs+8yJzbCFDXZ/k+D1XJqC3bKXL6WvL+gsVd8c1xlqv6AZm8QdMBwqNOxPjKW2+/7vagP/I/BQocZSGWoMIqPVivpyXAvZJvgyqhUAJA4r0AzJPu/h/b3Ovv3gmSiG/+czxzJ1k/XvrYKuEYNMLy3/Y09F+c96OYtN5hjxHmVCM/3bixG+l6MaomCgmEB5mjl8MR2roELuofFQ6gJTv8cMYeQm3WHdVwIPJyALqMJdgImh1RuUrf9qYdpYx0X7l0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM8PR04MB7874.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(19092799006)(1800799024)(7416014)(376014)(366016)(10067099003)(11063799006)(56012099006)(22082099003)(18002099003)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MkhIWjNwK3c4VlVoeUxXZXkwTGRDdEpEV3pEMjJQc2djK2l4dGlxZXhha01F?= =?utf-8?B?aHYvTVBWbFQ2VXo0TE4wZmptUXJEaU9jR1VjSHNCTitGdDhVMnNKdnc0K1g1?= =?utf-8?B?RDJxNk4zb1RDekQ2emZJM1g2S3dXUzY1aU1vRFZDM1g0WWpSdS90TnI5bHlU?= =?utf-8?B?cEgxNzlOZHcrTk9wT1N5azdva0QzT2cyNTU5TDlhNmJGdkFsL3FWNi90eXVX?= =?utf-8?B?Tm91K203N3c0NHA4b0p5bVBGNThSZW5lMXlOQ0x0cGRLZnNMek5DblExOWlF?= =?utf-8?B?WjJzTVJQdmdXQ3A4WWp5dlIrRnFVRXhBaHpsRGFrS1hpTDVJYlNXSjVEaG1R?= =?utf-8?B?MlpMdVp2bXZFVWl6ckFTTHZmMlRqT0VYT3Rhb1BwNmZ0QW11N0tTaThEcTJU?= =?utf-8?B?V2p2c1ZsUlZGd3BpRkw0R2s5ZlR0MWFmN25GdzNyc2t1MVZ3VUVBNW03dFEx?= =?utf-8?B?N1FZTGlaRkp6Mnh2ZE85b3g2RnluWFowbVZVL1E2aDZiOFVlM0N5TnZiOWpl?= =?utf-8?B?L2tsUnF1MnZxQ01OMVk1UnlMWEpCckV0SGh2Q25wVHk5RkZyYmE4Q01DUVE4?= =?utf-8?B?UEZZOEorNnE0OEhRVlVGUmQ1YzlwMWx2Nm95cHNFeWdXNXZnU1VFVjU1YVZM?= =?utf-8?B?bEFMc1NkdlkzckhQM0x2akZXUjBnKzZUWk0vbm1qOUFybEhGbkRMeGh0TTBz?= =?utf-8?B?NENsK2F2ai9zUUhvQWUzS2Z6T3I4TytiajVTZ1p1VVVVd0x3U29vNlpXUk83?= =?utf-8?B?THRWT1dXWDEyQ0FXMWVHNG1RTGVHaHNmS3hpUE1EdkMyL2VXcWJrMG5ZWlJq?= =?utf-8?B?eXhpMzVPeWdJVWtsZTNEOVVabDlYUVRHRkZCS01JQ0diSVFQVUNuSlhsaDRM?= =?utf-8?B?TUVXUjV6YU1aK0NSc2JZRVo3T2pTR3Fxa3UzbTBoZ1dzTE52UTNOVytnTG1r?= =?utf-8?B?WjRoT3dNdnc4VVNRWGxrb0lNTkJ2Y3I1U2lESGtBbWdMdkx0bHJxQWZzajdp?= =?utf-8?B?RjAwYUVoamYyNXRmVEM3VlVITDhGaWZZODJQUUhOTmFCWWgwNVprRi9BQ1ZQ?= =?utf-8?B?MXBVZ3hZYVhhUEM5UzkzUDhVbDJNSXA2L1pEbG9hUUc5QUpjQmIvTGVHelpS?= =?utf-8?B?MCtzM2JMS0gyTHp4dGI5NElXdXhxYWFsTDhEZ25reEJ2NlAxaEVNbHBsSG1H?= =?utf-8?B?a2xuWHJNd1J4Nkk0NElhTlluSC9KWUw3TlMyTUlQbEVvMGdieEFOUHRFUDFU?= =?utf-8?B?SURzZituMlc0OGw4T0MwQjliSnJBTWpOWUhIajdiWTZuRUFUbGllanFGTGJ2?= =?utf-8?B?UDRnMmUrNDBrUlJzMGQyOXN4QTZQT0tpM1FOclNYallkQzZUTS9yaDhoMFJ5?= =?utf-8?B?WTdFNE9ZamNZTHNqMWFEa2xJRktkeUVpYjV4QldQNFFPV3ZzUllCSmx0WWN3?= =?utf-8?B?S2t6MHdDaWo5N1JXTDVsdEpDTzBuK29EL2pTTnFPZkFrUk9mTDBYelIwcVky?= =?utf-8?B?NU5kcFNpeVJVWS9VV1lza3NEQTBZVDJTYUkxRmVMSnpXbnpGaHVKQWNLL0hr?= =?utf-8?B?ZVNyRWR2Ty9ybFo3dkRPVzE2QkNxTGZ1dmFlODUvRUZVWE00cnMvUVJoNGY4?= =?utf-8?B?eFI4Unl6eFRSWEI2MDROLzQzbGlRQk5YeDV4YytiQkt4ZjM5TU1ZUFN4SXlh?= =?utf-8?B?bEhmL3U5R3U0OFRyb1dxRXdXT1hmRGtzL0xqVFVXTmk2QkxIcGpOcWZObXFS?= =?utf-8?B?WHMwY055VWFlOWNycStTZlo1eko0SXNyTitmcHdhMkI2RlM0RFQ3RjlXZkVh?= =?utf-8?B?OHNJd3R4YjNpTXZQWlRpL21lcWZlem9VVjdMOWEvUHJjVWh2cWNkaklMZkpy?= =?utf-8?B?OVpkbk11MjdQTldDZlBqalNPVy9qVFFyclEweGxTbWpEckhnMHBiQkR1OHNn?= =?utf-8?B?anQvK28vbnBpKzhid3ZZQWVCY2NHQU4xMDNKdDZFcm9vV1VLWWI0bHZYU3l4?= =?utf-8?B?OVVzV2xuMGExNE5mclZOKzNMbXRmQzRaYnZYbWhMNEFHekRGREdweFgrc2tX?= =?utf-8?B?R3kyRjdPQzgyVjBSUk4xMzY2YW9XaDdwQkN5cEdFVnowcHlacHhpOExKV0lm?= =?utf-8?B?azg0a0tnb3Niemk3RlVHQUkwUzRSZlVhR3EvNlAvK0x5SU9BNW03eTNSZHE2?= =?utf-8?B?OW5IVVhJTFFWMCt4OXlONGU2OFpuOWJ6cDVFTDdRSzBsOEJKMlBvTzBiakRq?= =?utf-8?B?S2k4LzVlTzZwOEJUZHp4SkN1UmVEV3NabTdmVDBWK1lNdkwzTC9sUTAweG5T?= =?utf-8?B?SXR1NWZ6VERUNm9tM0ROV1YzL3lYWEdORTdmRzVQYm5DU1hJL05ZUjAxemZh?= =?utf-8?Q?DOvZOxIPW8C96+Dmtaw+N4rPX08GC3zyPHKvB?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5f4e9cd5-8335-4ece-884a-08defc4e2526 X-MS-Exchange-CrossTenant-AuthSource: AM8PR04MB7874.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2026 10:56:09.6722 (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: ZLmhSftDu/HTTH+o88kYQc3LSeE4PsSmAi2VAILSw74M4dakpxfjp6D6LmB6YcaiYSHFjOEzLy+zvAU4t4ezDtcmOOomBUecJo1E6KRaFFO+vblGg/kMIDkBFSvqqSw2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV1PR04MB9072 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. Reviewed-by: Sebin Francis Reviewed-by: Cristian Marussi 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 7c562559ad8bb..d88e78cc9a12e 100644 --- a/drivers/clk/clk-scmi.c +++ b/drivers/clk/clk-scmi.c @@ -13,32 +13,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 0000000000000..6ef6adc77c836 --- /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.34.1 From nobody Mon Sep 28 21:03:56 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011061.outbound.protection.outlook.com [52.101.65.61]) (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 15E523EAC68; Mon, 17 Aug 2026 10:56:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786964187; cv=fail; b=NNJDn3mzaVdKxJajJxc+wtge3H308AvgdwcpTpMQWMwRT2aNbOkDGMqb3X2O7lQzZS6Hharl3X+84shq2MVb1shMW493zq5eymLuU0cUBbsqWE19c/o/3g0OFLKxX5QMMuq+QCNHauQ1k7oOFF96jI2eDS4eL7rjsXJlzGPRyV0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786964187; c=relaxed/simple; bh=6wqKcduliaAImEnU+6fyFMA/quCnbMgwLea1/sGh2Og=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=SZg2h7hDmoNVgwDqIwMiB8/fNfB+pdItdo9t2/n9Z1zpw/cGuM9G3VPwUWfDw734CFILBYGR9cKMvRoTypDcMslzlBZJvrYYN1aMk9ySmxRXvZJ2wdLxBeKjxeV6x3FNCZCyMy4ajVNAhm7rUcBVGGRJP/woyhkwPVJFnRBM7FU= 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=YgtSV5sz; arc=fail smtp.client-ip=52.101.65.61 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="YgtSV5sz" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DMHH0MmTrP1yCH68N2ApzwjZIpNe8SfhziuQ4kWNtwnUCwzrt4RQ9/FfOG9o2hurbxBQhD2oMjdrkmI6USKkoU+ewkEN0cs4UB59latHQ/+mz3g8cPkzoV6BDO7MlCQi3cgCghBibNo77ufL8/t0GCK+AbuuBBaBqeHu8pmNj0cAOUcoFTGhzma2c3NfvHl5HHlaZaWSRgUluQLMWGM3dYpoyQ9L/Ljzt9ICvNXQYsqI/2CWtrtYR/yw+WEJMi6w40n8PXkSPxZ2NtHpgqtfYwYQW1kaFQIJf+Sh36CzIx88UesxCIW0+Mu6m8Z5Nd4LkwfPa7aaaeZ7w6UKsi8/QA== 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=mSpO18o9tXPIKhoLFK/NSS4JAqgN4CVzwc6GyfZ+c/A=; b=Oo+dVfgCIktcoK2bw0sFqFrYbm+n4Uh1pXYHJvWZouC95JodYideDD4vKGnSFLDeVTlXhEBBhDFOrvSjgpk8OJX0N+NbIch4YJl+3GPQRSHW8XEYc0hnH+Np2Yy9wp2JHcbVQFpLLrs16qFVFa+fg76m7PQV5K6amUWZ/BesuKaFYaIooG7PDUd9N9xwGeP2cfpnRYv3opP5eIH1JRku9MzXkiOpcnjek+cX1muy6zqd1ZgNMWXWMO2zJmxqfzQrGOn399BYARKiOrC1HtPmJw/cPtJhd7+wSXAuFcIR7w58vnVjMHE1fdJWNmRw9B4umHt0xHI64z6R5jQrOQTAfw== 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=mSpO18o9tXPIKhoLFK/NSS4JAqgN4CVzwc6GyfZ+c/A=; b=YgtSV5sz9qU2ozbGyDVg2nK80hmHoIUu+bUGoa3v0n0E2wQoHbxGTMiM2KGvLkf3UXHwDfwFbgMl7zTW18KsNJfgFAzCFOGns/cEADlv4f0WMQs2DTAoCzQb/OAPHqmE3ckiisDXw3PhVOnTQ3O5La24FRBNrxJMgr7oGT30PotNtZdHnY5/zwGh6/ln9qhxz8GEwEVo0KZEanTYnt35TVY3Ozis2D5antIFkqdm6xP9jxOH5iLG9d9LdRNJtPW6Oy+5zJTmxomnQADFN0oO9YvrjcxjfYqAskfbuwDRpw0qgvQ9G9xjzaB8S/XkgtrMRrqXazY6VZ8Vpef+tXFisA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from AM8PR04MB7874.eurprd04.prod.outlook.com (2603:10a6:20b:24d::9) by AM7PR04MB6949.eurprd04.prod.outlook.com (2603:10a6:20b:102::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.17; Mon, 17 Aug 2026 10:56:15 +0000 Received: from AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9]) by AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9%6]) with mapi id 15.21.0315.016; Mon, 17 Aug 2026 10:56:14 +0000 From: "Peng Fan (OSS)" Date: Mon, 17 Aug 2026 18:59:37 +0800 Subject: [PATCH v11 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: <20260817-clk-v11-v11-6-36e9bc701b11@nxp.com> References: <20260817-clk-v11-v11-0-36e9bc701b11@nxp.com> In-Reply-To: <20260817-clk-v11-v11-0-36e9bc701b11@nxp.com> To: Michael Turquette , Stephen Boyd , Brian Masney , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis 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.16-dev-7bc12 X-ClientProxiedBy: SI3PR01CA0005.apcprd01.prod.exchangelabs.com (2603:1096:4:296::13) To AM8PR04MB7874.eurprd04.prod.outlook.com (2603:10a6:20b:24d::9) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM8PR04MB7874:EE_|AM7PR04MB6949:EE_ X-MS-Office365-Filtering-Correlation-Id: 02fef3f3-b607-4ec6-e15f-08defc4e284f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|19092799006|376014|1800799024|366016|23010399003|3023799007|10067099003|56012099006|5023799004|11063799006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: Vmt/lUPLmUCnYY998m0nSmbUgf5reOlKpyGVOmNo9Zvuv5HDhQfLK7j8s2ynkMFuDWT8RLChRcVCG1mk0N+Z6A0qgEBnzNnCo7dofQJIpJvJ2bof9bo3KioLThy+mNcBV1QKo2IHq94614ggqDQ9ebYddQlGOaE0Yne62z7sVIiy3Ci3xWVqHQ1AlF71s7J3HfQqXtARMBUQOb7TQxfqwwMuY1LvM9XA47QJIk1re2FgahqthqeZRFZ4+JeFZiqGuuTHWG+kuMegQ9Pj93WDIchqwAvOkF6boqxl4NJtn4kxcIrqXZ4iAlFdn2svA6Ms/NKOJx275DVJ4Xiov8xnbaPvM/s3Tnk9A/R4qi4de515zEr1Yk0UYi2ydD+R9I3B7dqQVzUcvfkkYnSMkHYiX08oNfkJkDmZaCqSHCIUHwe/ii4gF/sbKWpkWz5pgm/3wQpmuq2vtyA+XBoiPcT6Nupd7a+Kg+u3Jf93fi0OrHq7URs5WsMeBYie7L+N6p2WS1H/F/6YwQtmFpePvJ2DsCUHwaLvGq6ioyfH6QkLP1nt4PoyKU0fXWUGbtc1NjWcHXViLZNNuygn5R7N2Kdvu4ObBuoIe/bjNq06BnBhrMHOXm4DZS7V745YIJnh7A+max9ImWbWmDf/cnd0Ned7UYMJIe99OmsuV1Y5u9KWjfg= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM8PR04MB7874.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(19092799006)(376014)(1800799024)(366016)(23010399003)(3023799007)(10067099003)(56012099006)(5023799004)(11063799006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bjRZcnJFN2x5cVJxU2JHeUZDZzVBcXRzeUt1VWkxK1IyYzNBTmZTakZvZGxN?= =?utf-8?B?RDJnVzArRWlYZnFHc0M0TVVjRnhtRHpoVlpCbitOanVjQnpzdmxuYnR5R3lR?= =?utf-8?B?TnlwMCtaczh2anNnU21lUWxkRjVMQzRkWktHTWMyaXdBVlVPM05tZSt6WWdk?= =?utf-8?B?djJNZUZBdVZkbWE0LzBoNGx2bXhTMVJSTkNldGd2NzVxZ1Ztcm9TcVBkNEdu?= =?utf-8?B?NUo1Ny80Ui9PTjkxRlpsRldvQ3RIaXZremN6YkNaRWtQUWtzQ3dLNHMxcVd1?= =?utf-8?B?SlhOemtQd0NGL0ZTQXlLRXZCSlEvRjR3SjVBNU0wd2Z2UEQ0RG9XeXYxR1FY?= =?utf-8?B?VGFLZ1M2VDNHUWRzV2tBUU00bDBnTFJzQ0VmZkcrRUFzcXk4alBmb0VnMzhs?= =?utf-8?B?STRLRThsR2JleUkvK3BhRTVSdVN4SElTQkcyL25SbTIzSjdpLzhiaHFpb2FH?= =?utf-8?B?TDkxS2xHNThDQWM2SWFjTWVIM1llOFJuOU03Y3NlVnBVVlgybXFFNlVzN3dY?= =?utf-8?B?aWlhYWlyMUV5MWg0Um5Nc0lENy9zeUg4OVpnZFp3MU8weHhNSjZQV2ZvZmxO?= =?utf-8?B?bnpKNm02VDB4ZXlCRElaalRVbGdUNDBYS0JBREJadmhBQzZRVzFJdlNpWEFN?= =?utf-8?B?MFN5UTVtZnMxTzEwV2JDNGxRdGtIdGpBVWRMTjhxMTdyRG15QTZ1c285OElJ?= =?utf-8?B?L25oTGk0MHZIM1dpT210QXVzOUJrUG43bG1SaUFVdzc0OWlJL0NhMlRPVFZq?= =?utf-8?B?MUsyN2toQ3dxeTFRSktob2p3d0RvVVl5WkpEVnplUno0Vzc0Q1lzMVMyM0lw?= =?utf-8?B?WkJkUTk3NE1FWGFCTkd1bnk1YVhaUTFLcDVYT09ZQmlhcGw1OGQzLzZvWGg3?= =?utf-8?B?Wm1NOFgwbU1XRnZqVXJEc2svcm1jNzdqVVZEeFo3TnJqSDBENVMyNDQ0eHV5?= =?utf-8?B?UHVNMmtqdWFzZGlFUmtUbUVBOEswN0RzS05yZlQ2b1F6bjdnNWhZRkpJa01y?= =?utf-8?B?Rm9Qek1rbnRTeUM4TktDMGxaSVk5OVMxZTJKMTE4Q3V1ZDRYOGwyWHNKU2Va?= =?utf-8?B?SHdoZUdQOFpSNFFxRkJzMjdCUjd4WVp3ekxBMThubGcySEhJS1A5czlNZ0wr?= =?utf-8?B?bGxmMlJuYUpsbzFCelZyTGVCQloxK3dIWS9SZTE5eHA1YVNYbE5oaTRjcE9D?= =?utf-8?B?YnVpcFIzY3FuZytUa0hqa05QdWdsVnZRYUdNMUtkalBaRHJBanc3WWtyWG1k?= =?utf-8?B?NXlRdStTbXdLMjltaFhsVzhUSWM5Z0dMcVp0SWlXZWZVN242bWVMS0Q3Y2RN?= =?utf-8?B?Z3E5T0dmb1RPSzNHSnhDQzNNL1pVWWppa1BUUVdQNTJFalN1T25OdU1JWEZT?= =?utf-8?B?cFc4K1kxY2JPdXkxa2xxazNzUzRHVnIwUmd3MVBNZ1R2UzRlR0hkTmF6ZkdN?= =?utf-8?B?SXNJVHVhYWxxZUhTcWoxeVloQTI3OVAraENUL3BxTUVPK3NXM1hZeUZ2azFu?= =?utf-8?B?ZmJQbFcvOHloRzVPSk1ERnNiWndWSW1tU1pEdHdyZzI3V0tSY0EvVDRpTVFk?= =?utf-8?B?enE2dVlkbndoN0tTN2tyVlRteXU1YnI0ak5ySUtIUDhmOTNoUWFnMUxYWnlI?= =?utf-8?B?US9vVDQrL29xTXUrcWJjRmVEVGtmM0dBYVNReVV6eXcxaFNCVjdFY2pvM2p1?= =?utf-8?B?T2J3bGY4RHZ3dEw3aDA4SXluSnRVa1JQbkxDZ3ByN0pnK0lGV1VNc0duY0RB?= =?utf-8?B?K25GbytqendUaW1NMUNSTmV3SHFOVk9SNmY2OWdSd25lUkhYR1FVb1VaZEo1?= =?utf-8?B?RDd5QTltVEQxK0pjd0pqczNIUXR3RVZ2bjJaOXdHNStveU5Yd0lrQ2dHTXNo?= =?utf-8?B?WXo2MlQ5NzVNOFJucmIvL1RmU2hFT01EZng4MUJBUWh5amtITlkwaUc4VkdQ?= =?utf-8?B?cDZjcFJObWxaT0lVOFV1N3RveTNoWVRJaXRsbUM3T3g3V2NrNnJuSk12VTlp?= =?utf-8?B?YU42OWJ1Ujd0QW5Kb1dISGwvcTMyeDBKU0ZCYmN1VnZrbGg1aHJ6QWJRbEZv?= =?utf-8?B?ZFVzYjlvUFdGWUVRdDdleTVuMSt6WHNzOUVjM0p5ZlczTUw5VHRlWTlNREVa?= =?utf-8?B?Zy9jRkFsczlFWWZIeDBoaXpCM3JYSWhWZDhDcTkrTnRvT3pOb01SUGFKblZl?= =?utf-8?B?TlhsTnIrcmxQVGxJbmZJZXJkMUJYUXRPZHM0b2g3RnJBbERZYVVpNTd6SC9h?= =?utf-8?B?ZmtadURqbXVZaTNsR3N2ckxhY1M0MlBiaXMybFczWmw3NXNLbTd5NVFQTUU4?= =?utf-8?B?ZHpYNUNJM1JVVlpJRFVCZHZFSkpGNHlFZWdLVXUwS2RlM0hHYzlXb3RpclhO?= =?utf-8?Q?vAykDNgXc6x8wTyZR6znHgTt7e+IBYyRJti8c?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 02fef3f3-b607-4ec6-e15f-08defc4e284f X-MS-Exchange-CrossTenant-AuthSource: AM8PR04MB7874.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2026 10:56:14.8787 (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: l+GeIlljXBsSds5d2x5B7+ezEQ1fqXa2brkdEVEiktGfKwU14SHOp9MhT5eAn8dVbAhUqr30x5gPtMllON3NcmJYZjxyJ5dC0w4bHJ0GThEw3mbr2XVCcA/c/ZbVniGy X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB6949 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. Reviewed-by: Sebin Francis Reviewed-by: Cristian Marussi Signed-off-by: Peng Fan --- drivers/clk/Makefile | 3 +- drivers/clk/clk-scmi-oem.c | 108 +++++++++++++++++++++++++++++++++++++++++= ++++ drivers/clk/clk-scmi.c | 19 ++++++-- drivers/clk/clk-scmi.h | 11 +++++ 4 files changed, 137 insertions(+), 4 deletions(-) diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index 3a73b81c2ec08..bceaf4d75dbb4 100644 --- a/drivers/clk/Makefile +++ b/drivers/clk/Makefile @@ -98,7 +98,8 @@ 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 +scmi-clk-y :=3D clk-scmi.o clk-scmi-oem.o +obj-$(CONFIG_COMMON_CLK_SCMI) +=3D scmi-clk.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 0000000000000..be11d359b4ec3 --- /dev/null +++ b/drivers/clk/clk-scmi-oem.c @@ -0,0 +1,108 @@ +// 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) + +/* + * Selection is based on SCMI vendor_id/sub_vendor_id and optional machine + * compatible string, without involving impl_ver. impl_ver=E2=80=91specifi= c behavior + * should be considered a bug and handled via SCMI Quirk framework. + */ +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, +}; + +static 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 d88e78cc9a12e..2dd50c5b4ea8f 100644 --- a/drivers/clk/clk-scmi.c +++ b/drivers/clk/clk-scmi.c @@ -13,6 +13,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, @@ -210,6 +212,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); @@ -256,11 +259,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 @@ -285,8 +292,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; @@ -294,6 +301,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 @@ -318,6 +326,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)) @@ -375,6 +386,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 @@ -406,7 +419,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 6ef6adc77c836..d7f63f36c56d1 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.34.1