From nobody Sat Jun 13 17:29:54 2026 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011000.outbound.protection.outlook.com [52.101.70.0]) (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 226833793B6; Fri, 12 Jun 2026 08:43:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.0 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781253807; cv=fail; b=rNLzPemTJDn1/i06W/Qk1ML30bNzUAhQSZtQAmslZghIhXPNG8GfUljzreVQw1yvfKtyGS+ZZz4iXarCe0FKm8oLWHoREs2AvrrgaMYlgN4gjBXGKsDPpu/e7Hi4xAi7LwNly4McicYRX2QEGlSbtF7zXDg/ZfnURcKqy1io/LI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781253807; c=relaxed/simple; bh=NjwtBJwFgDMZ5Uzb12c2RnzCHEaks2V5F7sGbzpAks0=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ZucpAjfjAP8kbkCr4OPgMhD4DSz2D0FS7GRpjTQih/+mNDN5kVpi1ONpUjJKzqK84Axtit/T1PC4JkPtMa+vVORPLG1+aaaXkCf5YiUd146xWOYz5rW+hTwdZIBIf2bqqxX9qiqJ+rNoWeIxQlvqBwgqzS5P+tg1ZyZ7aASYkdc= 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=dyAc9wGy; arc=fail smtp.client-ip=52.101.70.0 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="dyAc9wGy" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HcR5lIx4GjHXgAjxj2qolCjVk6iF6dJt8aF9896QwUROSKybAPQ52YFZ19UZZupKJvbcMqAHTsNm9Odd0G5ErY6nez4LBfU/APUj/vUehRBl2nht+PeGL0IqitolkG6jGnSp/f2ACSbcXeqJZ42hyiXUKyAZXsiCh1x07VF/hamPlAJ96p+m1qkrv+ATBEgdDOchmBIYwYpE+XFB1x4CgK+IsuMKwoU8vda+HPpg1EX54D0RsMmXJfC2pWcYF9fGVQ377wcDpBhfcOcx7Kx9TPR2mq4o7/LDqwrpUv+NOKJwrbfxZxCYWBz4Ngjdbntg5OkZTCIe+COkyVZ+TZPEQA== 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=NKswTD/0ZoF2Fw1rVvRXv26CiGHiIigFgQM1FWnhl8kZ707zM6COinqdWQ7VQuBu76SS8Pl/DJD3aC7wv/di9rFP7NCgcD0XsmNRNg/jRvdKggOjovW/MtKrldHYq8k7ihI1xVjgqKBDeXRNOlvcTx0mX9Z/7PF6wZoU8prQOuI642F6gtKMdpoi3P2gf4kyVuI0Q02CvSub9RzPiPAyAQwFLz9TmQ+hv93cj0CA6rYpOaxbRog+P7RMXZFwXtO8W7pNlZyst8PyMXyrE7MeJP/4EvmBNTSYec3ThIOMRdn/YjcDsGTsJs1r0dSCC46ebTiNpSdhRrkWE+HV2Y9GqQ== 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=dyAc9wGyNlZUWc26cyypRCOn21y8cwV4upfsNyHgStkYIDWs7k9zP9ImUugI5Lnv4Btk1J/mAXSOB/3Xkzr6GaRe0A4DKHces72k44fTzInlhzOTxm8/tFSo4UrykCBbDol1rgCAif9aP2V7/SJ4TQ/v5vvZwF94InWu/4U3Iy1SGqPGSVwW38yQfQNoaN+4tluW35/Qp4PblVpZRMahQfcbwe7IL3R5Om9U6HqWAhMhogB90/h19O1iRx7gmdGtKg21ppmOABYY2tSQmhRd7S4ELDZt0GgMGCEm3J+b1ELWDwEFGQP2ltk15nZ6kn0+YCmispG2A0C6GeELYr/c0w== 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 GV2PR04MB12293.eurprd04.prod.outlook.com (2603:10a6:150:32b::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.17; Fri, 12 Jun 2026 08:43:21 +0000 Received: from AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9]) by AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9%4]) with mapi id 15.21.0113.013; Fri, 12 Jun 2026 08:43:20 +0000 From: "Peng Fan (OSS)" Date: Fri, 12 Jun 2026 16:46:23 +0800 Subject: [PATCH v10 1/6] dt-bindings: clock: Add spread spectrum definition Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260612-clk-v10-v10-1-eb92484eda38@nxp.com> References: <20260612-clk-v10-v10-0-eb92484eda38@nxp.com> In-Reply-To: <20260612-clk-v10-v10-0-eb92484eda38@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: MA5P287CA0134.INDP287.PROD.OUTLOOK.COM (2603:1096:a01:1d2::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_|GV2PR04MB12293:EE_ X-MS-Office365-Filtering-Correlation-Id: f49312c3-79b8-4d77-1c18-08dec85ea7b4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|366016|7416014|23010399003|1800799024|376014|3023799007|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: 323/cTBqfptrWPC4yMcK8R0T+07bHOrpMAUXS7oBvRLDKOR18Tfh5tOGx2iv/9qS+CP5k2xXF/3enuYsy4lkP6Q5zcO0Gn/Bp9uVFYmY818Y90DC75oRGSbuCirEKr9vnHPd8gPnRS9+TEx43KTeCKRRQFYXQ4oPJ4es1nApSydMb2ft7j0ZpXIITrcz/75VfkvzntC5XgPPFKtjyDjk5XzDsl+6d2C5/NjK1YvingoPicaTqoNxtk4ANK3f3sEkCFgXAOmE5up23XwMFmK5ObquZtTIJpb9qEk4I+x7q5RR7TElTlTIMZZ6cGqUMtO6NZntZqUykHjxm3kXrqbwQ+KXuMLSCdQM9XtlaBvnYrMpCB7EPOcr085+RdaqwBAxkHWAAy+P/cqXoQ+OEYdeddK+svLivO8ET/agLGFomcz6fJ77zj9n/HpdJZIO1ew1gzW8HZ66T7hY2NiuZyrLDenbTDx7P2kL53iW2ArK6ew3n3DDy9RY4IWIKSuU1VjUZWBrJJ3X/jBGYHESDey2r9J1Bp96Y74em0OupqQpHbh3QNN1hjU4YRUylf1qqF8Zozpy97m24qkb6NhuybWjJaiyVrvthHzWgR9CR/7RaoUzOrUc09JubKdgdk752UpXECsUsWC3Q+NQlWvCyZF025K+DfL8nQFVqALxle4wXK7/R7aLZbdXftI1wl+l1CFv 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)(19092799006)(366016)(7416014)(23010399003)(1800799024)(376014)(3023799007)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YUlmUnRnNEtuVkRvZFo3RWR4U0syQzV6THUrZ3F0VnhpeE1YajIvcGVvbnlG?= =?utf-8?B?aXltcDNrWHJWWWw1U0hsMUY1OUo5Y0FBeTRmK3NhVFJsRHV3STIxTXpNUlZn?= =?utf-8?B?MnJIM0tKVlRad09WcWtmek1uRWM2S25JSHRYTk92WW1wM3VNMmVUajlYRFdx?= =?utf-8?B?MUhXTVFTSFJDb2liU0hCc2ZUbkhVTlEvbEk4QTZZemZMWEx4WS9LSmVuRndi?= =?utf-8?B?SlJrZUtVOHNFeVNuYTZKTy9LdGdLdWVDbjl3U0MzUHhSZU94akxQdHhHYy9a?= =?utf-8?B?NW5TU0RpOFFibmhCVHN3Z1k3S0dkdGxhN054R09hQ3VOcXVscCs5a2piL2Ni?= =?utf-8?B?cEtxSnZQSXdCMEpmK2JWVTlhdVFhUXdyeWpCSEdzS0hOT2hLWk9xZlR6bWVv?= =?utf-8?B?elJDOFlCZExaNkdFNloxWjQ4RFVsYXZnbGxVK0FWRmpLZzF4cXBUWkQ4dGJx?= =?utf-8?B?VWNOaXZHSllsWWNmVHYxUGVaNndnVm5XWS9OZ0hnNE1ORnZXSUZEZ01HcTNO?= =?utf-8?B?QlBMaWhxeXowbm1Bay93QVo1aVdvMEM2MWdIK1lDWUNORUFnY3UxeW1Ud1o2?= =?utf-8?B?RHNubU1PYzVyRFc2ejRoanViajE0V0dhZHVCaVhUc0pOTjljdEsycEsyTm9I?= =?utf-8?B?MzBPUldzYUo5UDV6UGQ1cWpMSlZveEloY0hMdVFaQ054N0JsTklObUFhaWZT?= =?utf-8?B?R3lCTGFjcVZ2MzVwa3V6NHI3VFlmdEUrakxWclRRZ2g1SjNCSnQyaCswb2JI?= =?utf-8?B?NEZBMnNKanROb0NrQTZnQUFEalErakR5M1U1SXEvS3lKVWh2cEk3d0x5dThy?= =?utf-8?B?a0YvU3hlS0c0VHM2WXU0UXZ5YmNHQ0dQT3RVNXVsUUVCei8yck1Tc3kzeWtF?= =?utf-8?B?UjdRSEx4NHNLMVpCdWVFMWVwM0tOTXhDTEQrK3JkMjQxb1dQeUxFeXVaSXpO?= =?utf-8?B?U1p2Vy9OMVlibUZGREVaTldYVlJPbUJGZFhvdXdwRi9ieXRER1FseElKSUYw?= =?utf-8?B?NWN5RWVXVVJadDY5cGV0ZFZxTk1aT082NmJQakpmdWZ5S1gzc1ZQVnAxbHNj?= =?utf-8?B?dDd5MVA3L1A1Zlpmc2pQTjE3cnFZc2pDRDlFOFJTR0FoT0dHc1ZackJwQXpj?= =?utf-8?B?ZTVSSm1tcWROTXJwWkJUVllwUlJhKzBJYk1HK3l3WTFSWlN0OHZJd3l1QjVu?= =?utf-8?B?Yk5Pc2NNYlMxMDU3Sy9IZzZNZzhxSWxMdUx6Z3dEeGQ2UE51a3pxYnNrcWNw?= =?utf-8?B?VEszaTc1NEQzNkhnZEtUUCtPajRJbk9hdkNlYnh0ZWV2VGNDQXVxbkNaK2NB?= =?utf-8?B?TmJlTkxTNmVldzBYOXJGeWhwNVFtemYxMTFIaC9HaS9Gb2ZtdmlERmtkUXh6?= =?utf-8?B?akdnV2Y0UjVkQWRVczNpZ1hLSWQ0VElvZFlFVjFwN3FOZFZWbCtrVVZENEI3?= =?utf-8?B?T0MxN0crVVdpN2o1V0xCc2t1N25GU2ZtMy9GQldFMnNHMm1GWnYwdzFZNEFo?= =?utf-8?B?Y1RQdEFoQy92dm84OGp0REJWcFZVNU1pRVVxKzBiRVlOV2lwdndCTEw1ekYz?= =?utf-8?B?OWs5ZjdCUGtxdU8zS0F5REZzY1pZYnhnTlhnU2xLMmlSNkpIeTlIbytlUHQx?= =?utf-8?B?N0ZrMUs0dEdESElUN1M4NEh1Z3lzeTdVUUdXRXdMT0VST0ttZmk1TE0ySmhr?= =?utf-8?B?VHJxVXdqL3NkaWxtcHowTUVzeW9RRTR3V2pnT3BTK0xxL0Nzb1RDNDFiVVFY?= =?utf-8?B?eHBYaEJhdlkzWFVpdmZ5cEtKemdCSnpPMTRKS2taMmExNkJiYnNScWoxZklv?= =?utf-8?B?QVRBWlRXejZmd2lOcUo4L0NEQ05TalNNQmIxVWRwQnR6UWpYazdnZ25CMTJu?= =?utf-8?B?d2kxblBrSmR0TnZKbHJRN3FrQUNGZ0F6U0NMV0wvZXFNYzlHb0ZWVUx3QnVB?= =?utf-8?B?UFVkcDVSK2VrdlZhSVVMQis0VEhMYUdPMTBnZG1oNSt2WkVrQmlpOFl0andE?= =?utf-8?B?cWsxUjg1QVAzTHMydEZ6NDdqYlJDMU9KNDVhZWdOSi9vQkVQWG1XQ3JuRnZk?= =?utf-8?B?RjU3VmpiajVTSW1NdUtvQWoxYldIaHIyMUQ1aWtYTXJYd01KeVNFUDNMQytE?= =?utf-8?B?WDN6WnptKzUvQ0swMDM1by9xancwSXJxdmxKTFVUaDFNbHJIZ2JCY0xBc1JG?= =?utf-8?B?MlRQTGVMWEZGUlJIbityQ1FHNnlWR2tub3FJdTlhK1lwS1k3V0VmMWw3MEVG?= =?utf-8?B?MVpsTHcveWFKbWdPTU5Yczd1TGE5UjNXaEE3R3o5cVVMa3hVbzcrNEhsSW84?= =?utf-8?B?dFhEMUc2Q0ZCWjlFTVpGOHR0V0dXcFNCMDJhbnl1RXY1MC9sYzk3bTFxVjhk?= =?utf-8?Q?+rd9Bb4u6yBRTAXb2b5q0rxIYDl3NAWmP8AQK?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f49312c3-79b8-4d77-1c18-08dec85ea7b4 X-MS-Exchange-CrossTenant-AuthSource: AM8PR04MB7874.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2026 08:43:20.0409 (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: eiW9PSS1o34W8hv9HGDmblKlJzvEUCZjBcyyQqTpsf8zP/Ul7FA2CHBtaVu5xVwPDAnKgmWkgkwCOLN6fRL8TooN6AibLeeJpQoeW/3UW8jGIr6fw13G4nR5kCwTvEjw X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB12293 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 Sat Jun 13 17:29:54 2026 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11013021.outbound.protection.outlook.com [52.101.72.21]) (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 BEEBA37700D; Fri, 12 Jun 2026 08:43:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.21 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781253812; cv=fail; b=FgtCkmI+hQE2P5M3lRxxgUn7IsdrG7TelJhV53l2SIus3cMPdIO4UYQHojpTDeAu3bV0sB160Bro0U6iBsxHjxHDbFAozM4XFFu6NT/LtzVGNC9JEmJA1BYt7+AlJDL1QqPKP+doweWePK39151labKL3EIeri7HjS8bvRgT1gs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781253812; c=relaxed/simple; bh=/44ih6xD+C2FXEPqNH55yD5Lr0HFKAFMu8CWx3hYuxs=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=sMWBdX1R2qi6fOxPsiqNWErreeGK02wjTUpa2Oq/yEnqq1tHkIMDQd9fJrrTMF79pyPGNaedpTJkItRZUVUzCTupuQuLpvWmvFv1nPfKefS+kuawdUaqTWqeISNSjNcGQfYnqMywfd/HjHv9eUpOYg51Ykz+fvmYWTO/frnuixw= 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=Ft77+K/5; arc=fail smtp.client-ip=52.101.72.21 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="Ft77+K/5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FB+KTf4b7oIgxB68di1D1agHOtfcu3F4JPRW+BOXOfA1W5+GdZLy/DFrawMwvJFXduYOFDw0gg4wn6gngRaWEDCepTKv33HQVSidm9kPI1Ni9PFTYB1XSUfMsNQrrfS1LebCaEcXB9FEXnWVFcENfMDj0aSaImFfwbUuymVBYW4M/m1K9JPZuu3J8zjWcLCvz2Sdq2HzpaCQ4m22fZkHeshyOh27QgNEmbNmXGkmfPpbsKlq7G2lMEXyT7BU/dUyX8Sg3QwnG1PpFnJa0XvezXor0J0/pP3y+c0NJyhzaJDkSt1slXwkA4jwbfazxtNMa+KU01W0Unvvx31gu8gAaw== 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=jxwi8CA7EbuDp0eohPDdnrkQtv3Kmw7GTbPdUMZuy7Q=; b=BjOOcyLXgOV9H8BRkdNIZJAGhp6cQzR9vI6dZyRO9/kt1mJM7FEqbgf1EQRuWNwm7A8H7wVqydQ12kFHQqD/yK1UrUfCaKP+QhvMXg8MnvQOv8OFHY9tFehtVvjZ4cdt8KptJa8npGAIfU4BaO1A1ls0dkKOZ9xFLYwEE7Vd8767R+8XwELqIrtr9dwieoiKvGAYeL6BFpAdd0oYylT/vcUbSXMy/WC34BWdBdNky94sA4+E71ClygHOho5lpsIzznV6JvXJHjzmfSOaz0izjF8cGu0j84EK9jhpiCzp9z4EI0N6Rl6xmNfZkqUANOirqrWXuhKY9xyZa7LMAQ+RAQ== 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=jxwi8CA7EbuDp0eohPDdnrkQtv3Kmw7GTbPdUMZuy7Q=; b=Ft77+K/5Os3BRtA5HDsed8arNyt/7pfRrohHq0SNYN7DOmJ5VJW3Eh5bNQlIr5+H7GBDNAY3yW48/WMa9yrzTq0Iqn997Qi4BHwwhPMQQBrsRS8aTkcsKTuyseNuymEw81d3V8DGtj37tLVnIAXPvYg85VYMSlScFnc8fC9O2pjjaOE8O9AA4NSmjvckFDcpkYuhu+xBVdkbFBtK2hV4V4wYHdO6lGaJlvcOEz+WVUaZKhfqu9f1Vq/WjyPMP/SQbNmiW/2zR7+4QA/5pgTs/dIXSacWRHkn67py2uR64wPZpB4Zq5sWtBAundoBW9bQLOCTE7DCjmthSOit6zg16A== 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 GV2PR04MB12293.eurprd04.prod.outlook.com (2603:10a6:150:32b::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.17; Fri, 12 Jun 2026 08:43:26 +0000 Received: from AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9]) by AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9%4]) with mapi id 15.21.0113.013; Fri, 12 Jun 2026 08:43:26 +0000 From: "Peng Fan (OSS)" Date: Fri, 12 Jun 2026 16:46:24 +0800 Subject: [PATCH v10 2/6] clk: Introduce clk_hw_set_spread_spectrum Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260612-clk-v10-v10-2-eb92484eda38@nxp.com> References: <20260612-clk-v10-v10-0-eb92484eda38@nxp.com> In-Reply-To: <20260612-clk-v10-v10-0-eb92484eda38@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: MA0PR01CA0019.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:b8::6) 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_|GV2PR04MB12293:EE_ X-MS-Office365-Filtering-Correlation-Id: a31fff98-110e-49c3-e761-08dec85eabb3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|366016|7416014|23010399003|1800799024|376014|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: nijXI5iBp6jYawq5x/RlghTf8HXZ6gZbh/O9KwMyDbs6TPnx6fGPOGw4c6RolkZ1wajUtxjjHNUYURQBn14iHnr6hT7FI4h/k0lJEaY6rcn1lGiy5VsAKzJCNTOOVFHxYLOsdGBg1HFjXVoL2m15AvLZk5gln2ehfw2m3eUyIuzcYjN7yk/3M7ln0tXp9/N8HuBh0SG/b5i2tA9eCqfX7F+RW57PoCjLuzt0lq04F2o2+JFrWF27/vPfzlA8chRcVWMc1RQwc9gkvWgaXoPONt9dZePPxNhjFaF0EsLdamrdjW51oz4AOF57IkQ1dN36jwkTkmOXDYr0Cx7OztUfQZE3wFmaDF1tj9xovRjCEWZuvmDzLBtNt9AiBnNLht98gcs6KBZOBfM57bgO9aHbZb0Xfz5Emprc5G3gXPwj1cApTlJSC5YPOG06WXAtjUFKafjfQnehJ2NPW2yc23gNjfMbjGdEpGmrljvumIR/LoNS7nPzmx2rXXcigS81f72gkmU2dkv5Qo9+PxdwaAPan5Qp9O+XI9wvW9q/wUw8lUHdolyYyyGOLIksdl116Qp1xxia+ialthAUOjygdtW52GXrQdgDUKCdQOGj81CyfrTbl5rybxSc/l4eG6iqU7oF57KEBZPl8dPisHXpC9SMwfPzd2PtfeLh/xaForyyR094VQQW0Jzhj5UJcpfNllzw 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)(19092799006)(366016)(7416014)(23010399003)(1800799024)(376014)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZUlKbkJxMVZsUTRsRUVUM01rWDA4dmRPbG9KNEp3N3A5NnBmY3liUWk1aStl?= =?utf-8?B?MzloaW1UVFBoY0sxVDRCRUVhdXlLVU0wQm1KU0ZrTmJUbDBiODExaHh5S1g3?= =?utf-8?B?SnYwaHFRNjBFTzE1d3pvVFZhQldUdndKR2ZwUkpIRzJ6TjV1WkF6SVNYVHBP?= =?utf-8?B?M2RCRmp3L3VOeEhCWnY2RlR1TmRDUzZmZ1JxS0NQNEJvKzh5UW1KOVZSWXFD?= =?utf-8?B?TUp4R3M1RjRWVEI5Z08wRTRSR2lmQmFERzZ2S1JsVnhNWkxJa0FHcWNCUUpP?= =?utf-8?B?YmRyTjZIT0lwQythd2prMnNIb2lyeG5jTkRVaUVEL2w0Q0pJelNSc21mTVQ0?= =?utf-8?B?STg5c0svVGZ6NlVzY3YrbEpuUXYwemhtOUZEZWtHQmh2R2Z4QkdKQVlKbFVU?= =?utf-8?B?S2pPVHNuZlBkRE8yZlVCeUgwVFJLZ1U2R0pCNmd2eDFJcFZXZXBUMCtheVRp?= =?utf-8?B?eFJucFUxK1M0Z1ZYMFJwQVZPUUhyVGFQZW9iemplRzRLUmtRM0pOYXpWVmlW?= =?utf-8?B?R0ZlQURvbnRENUR1bmJDbFBYNkU3WWs4NEtBSXhMd1Jrd3A4OWU3MnFqOWtZ?= =?utf-8?B?WTVGNXJFZFZKYTA5T1hvUTA1c3JSUERZUWtOTENUQVVpL0xQNmF2OXB0QnRW?= =?utf-8?B?WUVIZzdwT0o4aW01M0s0SkY1cVQ5N1hPK0NJZDNTOEhMV3JOMTZUZUpYQzQz?= =?utf-8?B?dnRXYy9tZlN0K0hRMTZ6cGJWZFFzRmVqZVFRTXFqejFmTVlPaDNqVVVra0tB?= =?utf-8?B?aFRKb0UyWjliK2FnSllBMzJtS3FjVTdlQy9kR1F3NVNHRGI5dmJnbnVwR3ZR?= =?utf-8?B?TjlINmZmaUVuTmhDWnpUSUdvV1lwRHJYd2NoQWFjelUxeHd0Q2VCZXlVVkJn?= =?utf-8?B?azhoVDcwT00zQWdZTXFwNkNCYjg0RDdwcVc1TUpvcVhSeEJtZ25ESjhkaDJo?= =?utf-8?B?U1FMbFRrWHdWc3dwQ3hQYkozWUZaN1lycnJMcldLdnIwYi84ZDZieGFuVWJ4?= =?utf-8?B?YVl6OXR6bmN1RnJrYjFMUVdqcE5WWXVISUdTazhNamlmbFIza3oweFVhQlNC?= =?utf-8?B?eVBrc0g2WXhPRHk2c1A0ZTFzTDF0b3AzWi91UWpBTXZtWHVWK1RtYkpQbUI4?= =?utf-8?B?MzhhV3doYktHekpwdmVFL1c2dDF2bW9XaThSaTZ6US9PbTJnclR2U1dZWno0?= =?utf-8?B?WndHNXpvbUdMelhZV00rNDhRZ0pEUi9qL01VQ04xL0VCalczVVY4djJwc3Ar?= =?utf-8?B?M1crNk5oazFHNWZOLzcxT3Y0WFhTK1g0QVlGYkpoLzNFUTRDbmpQRmhuaGlE?= =?utf-8?B?bWgxVlRuSUhTeUsyY2toYWJ5QzhzVzhiSlBTa091TXl3cEoxRzh0SjdwWlo0?= =?utf-8?B?UFJKcUw4OThvQXdEWmNULzRDZi9UWTQzN3d2b0JTY0pVSTdvVG8zRktZUHpQ?= =?utf-8?B?b25BdlFrZldNU1dheXpYRjBCNHQ5bVovVk1SM0JOYXFoU2xWYlB3WlZ4QmRV?= =?utf-8?B?M0doekFXQVNEVDl2Y0JhT2UrRlYrbWN4eDZESFRILzR2ajV4Mmh0T3FrM3JG?= =?utf-8?B?TWwrZTl1WTV1M0FLMXFqUXMxSXdONXZUTVlRckxra2h2ZlVHNFJ6c1lzV1hr?= =?utf-8?B?a01rM1JnSHJ5c3poTzRLWEc4UjVUSndWTWxNMkdsbzIxOHdKcHV0cXl5RUlX?= =?utf-8?B?dXgwS0g1QXRubXl1VmtkNGI0d2dRcDIwNXNaTGo4SzlPNEd1WlJENS8xNnky?= =?utf-8?B?Z3hwcWkwTUtLK1Fqa3pseG9sc3VZODd0RTZCbnNBVkwxTEFHaStpUGkwYWZT?= =?utf-8?B?a0dSQ2FZMGN2M0NDOUtCVkttZkg2c09iK2FiaTRHd2c2ei9wbWkvaUtSRzJW?= =?utf-8?B?MzNOd3FwUnZ2WHFLdzZjdTZ2dzJBRW9naURGMDNKTkJoVW1Cc1BkWlhSc253?= =?utf-8?B?b2ttS3FXZVFlN015NVplaGh1VXBxYTVVczVrenZSTVRuUkZ1VkFOMEpZRlJC?= =?utf-8?B?MVY3QXFXTUdRT2dSVnUvZnkvNk9RQjU0ajVNZzA5OGJPRzBzaHF2ZUd2SUp1?= =?utf-8?B?WFdTTXlBYUZDL2Jkc1NMU3MyMmQySTNqVHpOUjJzdStpcHRra3lrRWNOd2pk?= =?utf-8?B?YVlCWGtJYW9jVkhjUXFsak5oVktjMTZiMWkreFJBR2dVNmpDR3ZsWEtsWDRU?= =?utf-8?B?cnU4b2hYd3JBbXhWWGNNL2kyRmFuREdYcmNnY3Z2aUVqNHVLZndTWmN2TURa?= =?utf-8?B?RnQ0RGhBYzFiUGpaZnJETWJVVkZJdmVsWFM4RVIvaVJhTmVsa1h1SGNQWlIw?= =?utf-8?B?MnhhSjY1dDdIU0lsWHlSYW5pMW04VUR4SG00RWRadnNFcXRVSUVUbUc0RlVS?= =?utf-8?Q?oVe1jCvKoY/P7CG1cFzpIXV0g3AB93QnrY/wL?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a31fff98-110e-49c3-e761-08dec85eabb3 X-MS-Exchange-CrossTenant-AuthSource: AM8PR04MB7874.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2026 08:43:26.7294 (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: tsjoeIc23Fuu5Ijg5yMLP71em9V6Cb73m1ESp02wkYXTaO9qSfWY2rGmMFxWwQ7cyFHje8IREmreoxJ6Y1Xx1dVpyNI9GarRuKY8QXb2rOqNOgw/HXI48m4fMgioPef6 X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB12293 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 b01a38fef8cf2..7d3747378739c 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); @@ -1436,6 +1465,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 Sat Jun 13 17:29:54 2026 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011061.outbound.protection.outlook.com [52.101.70.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 AEC43374A04; Fri, 12 Jun 2026 08:43:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781253819; cv=fail; b=lgyJ9GX+s0dTtjWo0GXmakUwVJ/R8I+E9hGyqXnjUaHlM31j+FZ5kc7xbuXqb9UA59qXmUG2tel9E39GpGT4DJViO8tZh/gCEopW0gRd8vw63ZQRYQCTIy5/UxWJtxjz7k/w/6ChI4rKSjCpT80iOMfPT0BhOuAR6kWSSpgS4zY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781253819; c=relaxed/simple; bh=kLp2NqrkfbmhQJFDqFpTvNT/SgYyaRRAlHCXHa/h0lU=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ruFwI2w+07GmqI/k/SPQq5BCqdl4bpzj/nVbBDEQDK/uSCb7C42MYVdChWB8SPH3f2lvm2TUYcv9J7vDFd2lK+8OYIfDdNZvH1bm4hE4PhQ9G3k4zZ5oGx9z2iPqDVQ+bmNBy0jZ/dqc+C3etby+zRYbvNL28uAmOuayM1ZC2nc= 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=Bhsvfz1F; arc=fail smtp.client-ip=52.101.70.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="Bhsvfz1F" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rXdQFpzlzuABMiWxpopcQbOqc4bdKeeYx0FO0QxTRa8rgFwtXLDbf7WtKU0+yzQ5wzV73uHZg/gNuUoUFdIKY6TdXraxVU0gQ+6kkKK5ofMo6n7IFk9O4h44w261OUbDjFDNFLq6PECLrCzcWO+dddL9299A4OvMEh1zj/oQuSkrZAt3Qqa+qdSQbJl9uuKcxajkqGu8bovIPw/E+aSUXOuc+44Csa2+KYH6yNAo/QoXLrC6VKt7XbZQYUvrpEroDDSB9vEtiefqTVR+VyoAa7e/nv6iRtnO15+u5c1CRzr1qpRCOnG3E6e8qPahsEGzAwD25liX4Vkkrc0uuXoBwQ== 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=XflkkJlIE918yu8bqyxxoS0EXaJMqUBSz97tBFiu91c/ZF5VJLLyYL0wrXC5py5gMJcXRjv2rUDaPIXK29gJH6N8gltbE4WHm7D8d19liGcSaqaZ3vi5WCLoh/E8SlFdA2OxVHaJeAesTbiClg2NKiBqNXdEIHkx81OVFHwQIVGxjcTot+Yv5QnUyWr/0uxEHurlZ6mj74H8TTEOVOXYiWyXSdi+WEA0a12hk4I7En+yQOjtEW4CEc9o3Eds+fkVLGR2ZfEkynbxE16itBR4GA5+0mblF8tHgQspI+8EgZuMmvwmM6KUqewQoadtzfGopakzKISspIwPBQ+IVFBheQ== 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=Bhsvfz1FNhl/0n/+wj5HZCZjKtuJp62g8nbBEK3nJP9lGvTmhnffdW00qgYcRkesGcmkfEkdHjXwahioO2uHTrQLYy5jnat5Yn9a5srq8rF8JdCY2BS6nI222d28zDe5avVpWhIaK+9St5/f1bJjBa276RwBinDfm5u+l6x68vvw8ufVgnmZhJ7ZkNybRRfyn7AP8ovHZjEb+nuI9SM8oKVjbHyYQ9W9kNrcsJYXVRshT2LylkBWq/dj5oDSzcR7eChIaIE2jZxWcKp46JPbGEMOdfXV4sj6bwud4hgQZzQWHTlymWDzC1lbvi9WTj+9SantS8EKOA1WnYsbxwZAbg== 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 GV2PR04MB12293.eurprd04.prod.outlook.com (2603:10a6:150:32b::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.17; Fri, 12 Jun 2026 08:43:32 +0000 Received: from AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9]) by AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9%4]) with mapi id 15.21.0113.013; Fri, 12 Jun 2026 08:43:32 +0000 From: "Peng Fan (OSS)" Date: Fri, 12 Jun 2026 16:46:25 +0800 Subject: [PATCH v10 3/6] clk: conf: Support assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260612-clk-v10-v10-3-eb92484eda38@nxp.com> References: <20260612-clk-v10-v10-0-eb92484eda38@nxp.com> In-Reply-To: <20260612-clk-v10-v10-0-eb92484eda38@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: MA5P287CA0274.INDP287.PROD.OUTLOOK.COM (2603:1096:a01:1f2::14) 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_|GV2PR04MB12293:EE_ X-MS-Office365-Filtering-Correlation-Id: 89f6b921-05f3-44cd-2312-08dec85eaf38 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|366016|7416014|23010399003|1800799024|376014|6133799003|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: 3jBqm/uAtwUyvwEDzB2hLp1qG8ILyryKnfe8OmS4hvqp0aNejf7zYKaD4CpTf2On6/BRlzHcPqH4h7XEc6Q0QCB4zUxw4YQzIQ6ecd+DspumnCeH8zKdvm+gbz1eXnKjEZlMDxdQqhgq9OByAVij0ANGBGVcHywS9Xq3tz0azCHUjwGQSwvacfpk10B+EG5GItlXSpqo5QcXuwSbHPIBH8IMXhysiwQE5b+urOAzvlgPwIdpWn9A3ObOFwiscmmULXaasHOH7liTdcu0jaCggCKU/8sTqYBlnems61D6TeqWfrFreoHWSUyeqHRKG575REibwEL+68ZLrIq3Kllfd5WjixoKEiaWcC7ahHaknxcmgT6wH0JGuMevdJbz3Cz7EZbJ4959xFxg1uCB52+umef6KoM24zXySV/CVlJug02jv1II8D5op9kn8A/bWiuqqKGPeFYAIaMX3t0nlglELsrt6ooBSjAt2EQgqvcbTudydYP/kBEoKyPgIV7ogcjO//81ICnvnnH3BH4c8VJrvJ/YLisYjuR4l6ei70HtM/yHww+dBYTh/jSLQ+Ucq3bUnJqF/9LkM2G55eo3rdlGzWek3mQHLf8A/114cRkGqI8pohZXbHKIwuGvfS2epAvmtoZC+4SMyJqBYaEh8vxQYdtM4h3Vq75poBFbFZDBzUOIcD0N30KH06UVVAbbMDBE 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)(19092799006)(366016)(7416014)(23010399003)(1800799024)(376014)(6133799003)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZHZHSy9RcjVTYzcrZDVkdmRzbytJemE1VzBkR2lwdGxsZTlya2NSOHBycEUr?= =?utf-8?B?UVhDc1FWQ253cWNLelRrYTE2Qlp2N1ZnblVjUWJnSGRTK3hJTVhCNTZ5V2JP?= =?utf-8?B?YmhUUVh0UW1mV3hvRXBGWmRTd1Fxb0tJWHZWQWNSSzZraUhxem05V3Uwb1hn?= =?utf-8?B?S3hteTNJR2NweXBmdldBV2NWUHNiVU9QQjg4Vis4RXlEN052TWRqaU1wRkhi?= =?utf-8?B?b2dDdTVnY3dkREdRaGc3ZW8rVFNFbSs3ZmxMV281YXc5MHR3bzRtSUlLTmN6?= =?utf-8?B?d0lGQW03N2o1c3Y2aUtSQVNVSjVuY01wMkY5emVLbTBqNENIZXgwNkthWUw3?= =?utf-8?B?NGNNOWdYT3JENG82SmE3aHBnR1I0bmdiazdWSll2bEhyV0drd3VBUUZzWEhs?= =?utf-8?B?WmlMTGgvcDZZQ2tMdElaZUJqTTkrTVN2LzRuQVlndnl0a1lrQmNSMWRYREcr?= =?utf-8?B?M2RGelhxYTM1a081OGp1aVQ1WVJ0SHc2aGFuMzlvWkdwNmVESmFoU1FwVEpl?= =?utf-8?B?a3JpOStZM2tPRVY1bmYrM1dXbXltVjFjZ05reEtpQ1JlZjk5Q1NwTmg4dUJl?= =?utf-8?B?RUNNcFc1MkYzTlNaNHFiVHJyMGU2bGQwUTJEeVJWSVlWcDNPUzhDdmJxQVlP?= =?utf-8?B?VW5mOWlBK3dhK1dTZFZmUGhZdGlaRUZ1cFh2dmNpeHk1TkpOT0FMSWMvU3pl?= =?utf-8?B?Um9VdXgzeFFMeDI4SW8wVFJWTktPNFlYckZXeFJDQy9NR29JeVI3Ri9Pbkt5?= =?utf-8?B?RG1XZjY1SkNPaDYvbGxLcjkxVHZ6b00zYkNGTmhSMTQraWl3dUpYT1ZTVy9h?= =?utf-8?B?RzZZVGpOU1FVQm1vNXE5ZlhYaDUrKzJ2Uk83QUp6cCt4bUVmVGFoU3duSjJ1?= =?utf-8?B?d2gxMVY3Y3ZSbkZFQ1J4WHZtWHFvRnRRcmY5N3lNMDBWRWMzT0dncHl3aFVC?= =?utf-8?B?Wml0V1RSLzA1N2gyMzRwWGYzMTNUeHBOQlZObFpnNTlZZmRmS3NDMjdndVNm?= =?utf-8?B?RTlFVGtQdmlWcXZhVUROWWxYcmwyRFBFRXFGVHZIUHdNRWdIalZ4LzlGY1Mv?= =?utf-8?B?dnZnVDJMRWRyL2h1RXFTbUM5R01RR3IvV3B1ZzE0VkhvcHErYXZKQWdaa3Zn?= =?utf-8?B?dW85R2k5K00zQVJEQXBjTUQ4OHFtNGJjeUp4Z3ovRmFnMDgzajd5WmYyOE9R?= =?utf-8?B?bytoS2tNVGpuaHVJcE9TRnZkQnhpNDVsZVVwenV5dnZDbUdoZS9VOXloVVdB?= =?utf-8?B?K2RyQW5jMWFYa3pQZ25UeXZkS3dkTU9lTjZNY1FmUVROWFF2Tk8vQ05BK0Z1?= =?utf-8?B?S1hpT1FOaE5Jb0k0L3hGNFkwMlVJc1FqSWtkNWRyQ21iMkd1MHpmZUs3eElz?= =?utf-8?B?eEJBZ0tBSFRNUzdHclFkR1JZSU9nTFVPQlZrcGoyQTRmMWJqVmJCNzFhMGox?= =?utf-8?B?UkZzek45VmlQeVNqYmVMNlAvdkpPdmhFY3ZEUzcrQ3c4QzFTSnNEY3NlUkU1?= =?utf-8?B?ekpsaU1NTW9xOTNlUnNseSs3aGlqK3U2QTc3SXhBZUFtNVZWM2ZDNU12cUd5?= =?utf-8?B?ZzU1RXh2Tk5VSnpXN2F2azd2bDE3bDQxT1BFbElxaFhtMDJ4bDMxUjBVdlc1?= =?utf-8?B?Z3gxRldpT3p3VnpaOVo3RmhUbnlUaGlpRlBJZE1YVXNGU0x4bUt6VWFOTzkw?= =?utf-8?B?eS9PaFJQdlg3ODhGcWZEYWMyTE03QXp0cFhGallmaUJoTG5CZ0NuZHh0ekdr?= =?utf-8?B?QlJvM0ovemVhQlRPTVg3MFM0ZGRZT3gwVTNWNzZ0SWpJWThKUGUyUUpCSHA5?= =?utf-8?B?a1J5MDVrQzQxajBmZUhXbVFtbW1RS0RmWFhvM0QyMTgxbVZTUWdJUzd2TXJW?= =?utf-8?B?c3U2b3E0Y2xIVkl0SVoxajNYKzZIUUk2Z3I4cUFnMy9BTi9ZalB1SU42N0lI?= =?utf-8?B?OVk5OXlBL0RRZ3NDTURRcENRKzJ2ZExNeEppUXlJellYTEJkZ3p6Z2hZbVlF?= =?utf-8?B?SitzMlRUSzh0SGUwSkhEdzdvcU13TXVXY3ArT0cycUM2YTRRWnVHS2VwNDJC?= =?utf-8?B?NnFGdmFhUEV1R1VGVnhoV25EMXR0WndHVzVZQWlvUm1Dd0xBRTJXRkZoWEtL?= =?utf-8?B?OVBmOFNQYmxTOXYwVXlqb2tCVHlSNnpkZ2VEWE1oUE9jOEtjZ1hUQ2cyVHlv?= =?utf-8?B?MmRrb3FzWVcrbXVPakF2aCtZbmdTcyt1aktkb0pFQmVGWkJrMjBCdVY4QUpa?= =?utf-8?B?WHdvYlJmdEt0Rm9QRkZsdVYwUzJ6bllGSTVzbU5CNmE3UjNuN0Vqdk1peXA1?= =?utf-8?B?MHh6S0xHVkJneWpWbDFtdTk0OTV6MHVDRlU1emJUaXZpOXhuakUzT29mVjJx?= =?utf-8?Q?U1NTHtIiFGEuizu4/PXB9p89Hzn8GTusap3ih?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 89f6b921-05f3-44cd-2312-08dec85eaf38 X-MS-Exchange-CrossTenant-AuthSource: AM8PR04MB7874.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2026 08:43:32.6564 (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: qKcvu4tzTokPKwE0G3cxbK6KqBM4qWJMZfaluLz3hez53lKi/yQReWYHgzGWyrnFJlkyymMnXGtRiHdl0ch58EBA1GhCNIzyMPQn+PCegZ6KpfOgQI8yCfHjP2sQy5X2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB12293 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 Sat Jun 13 17:29:54 2026 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010043.outbound.protection.outlook.com [52.101.84.43]) (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 9B80437F8C3; Fri, 12 Jun 2026 08:43:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.43 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781253825; cv=fail; b=WYqRAErSGITgSWmYMU5LmrT/JD+PTYlESSvsqd/FG7zHFneAmxW2a776mvmED//XkPUyiOSULCIgr8H1JfpbYJVEBXwDdboAdB3qHNXHnUBc8tpdkovLfMTPwg9rgAV7nl8b0X42K47Rmc7FjUwOyvM21GfJeuxoocCrG1sNNmU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781253825; c=relaxed/simple; bh=vh10/+ZfzemYTuspYL1pQPpQb7G6DKK0QHUj5cLkSRE=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=UrQGfeD6rhL1impzK6tttThZ/TGWLBJUIp0RyZqa8CqaNsKu6ZUmhzBCVNg+W/E64TyVP6/zucqgamdqc1B5fhKawTyIwoATCxdMcZnORHv6MSYPv7DK/P5WtszehC0iHKRS1sOzilvYu7p0ceOSEIYBlwV8h8GIrLkh9bCZDwo= 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=odFcJ6wY; arc=fail smtp.client-ip=52.101.84.43 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="odFcJ6wY" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fv4/5JuoI8O6E9t3sK4kClsThqHeFqwfwbE/YNCVWY7k+QSHJo7/rFqhwhEjbnjAdQl7GSJMW0W5aHCA8+STaJMpRT0ur2Jq9yWU/Hu784K7DzYJxgknWVSGLiJS6V/rzl8//Niixhg45L0q15nzfT0a081A6nZtPGAWppG0BjwbXorKmxdrdLQYpvQ+/clyHz/n16TJlbQmxOlqb3c7ktMp9uHLK+xr3Gi5q/Pg+HqVQknKdkyQ1Ij1CWHZeRz6FTwZWKCNVNwDqn+gy89W9VmtgYlo9ObAvDbmn1zPGfwG2WtgqvL6i+Okhfao22EW7J1ThHYvaKBXKZhu1Xu7JQ== 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=WsLPAal6SwCHdbZGNd0yGXa01g8279vptOZbmmn/NQc=; b=LMfRNexQOW0unakCDqF4YAYr4sNMzeE7+MHJsRRS0QW/B1i5RxF4vjFPo5jnm5oVZbTlSX5R17CorCYH8nAQO8ptRYcIcIWbZWJMDfjrXJNQjcDE6O3hhEAiTs6ybKHRc1wjwkN9oSea0y5wuTnzWzdcn+iQlQ1L670m39PZUhR154Kfr6VpuiiAW3Jh3XczHZ4dq4a3BME8PE+nHle4W418+Aza15ig3Fk4Jg4IrKs+qV9MDuml/XuLn6YmkugH+g884g1Aey9O+QIPiBVXmNVzVP2CikSvCG3y6PvMG6G/3ZloLcX5s78mzSQujZx/+nyzqLzS6lRY9NmtH/TOcQ== 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=WsLPAal6SwCHdbZGNd0yGXa01g8279vptOZbmmn/NQc=; b=odFcJ6wYh/zovQioMJl8Z30izIJzaooSxe6DfeabtJgGZ00QfJdNxGDY/cZ98nqr56JeklxM/nuF75KbsxR9CyGbEgYLPmrNAo5lo93Cqb2gpMUD1IDKNGnIKkAk0Coa/0qlidAKsONmCUtYZHioowjdxs1gc/ZG9vtslrXTD6T2Xc/s7ZUBFSPzY5KZys3pflqDZc1C3tC99TRKUfXvtWvQTkbk7H1BvC1woSvX+wcAo3bq+xE6duFhbMm28yL/U3VFFgJmvJVx40sAo9+wt1BDWldPw2AV7qT5ESsUUFAwr545lW8f/R3bdlr5N5N8KCyh+YeuHRIAeOtF13wKMw== 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 GV2PR04MB12293.eurprd04.prod.outlook.com (2603:10a6:150:32b::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.17; Fri, 12 Jun 2026 08:43:38 +0000 Received: from AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9]) by AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9%4]) with mapi id 15.21.0113.013; Fri, 12 Jun 2026 08:43:38 +0000 From: "Peng Fan (OSS)" Date: Fri, 12 Jun 2026 16:46:26 +0800 Subject: [PATCH v10 4/6] clk: Add KUnit tests for assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260612-clk-v10-v10-4-eb92484eda38@nxp.com> References: <20260612-clk-v10-v10-0-eb92484eda38@nxp.com> In-Reply-To: <20260612-clk-v10-v10-0-eb92484eda38@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: MA5PR01CA0012.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:174::7) 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_|GV2PR04MB12293:EE_ X-MS-Office365-Filtering-Correlation-Id: 6f38935f-6d3f-4353-aba0-08dec85eb2c0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|366016|7416014|23010399003|1800799024|376014|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: enKlXwBgKjT92lGU46EZuCROm8w+JFcHWRNYTmLn/QrVe/e37TBQdjO9coINk54fNMRby82iNEftoHh4D7GBtfxgY0M3+CFqjgethPNiDN48r7Ee9cXqw56/wmojfCX/5FFWHo5xL6l5GFHbUzNgi/xqUeh8vcXHjVWawG228CEiZetYb0WTbG/MK8aadz/nbNEcj4DOKsEgStKPi5hi/cqm3UkQg9C1ncidyGJhkJ2Rku9jyKc9sm/yvaqzaxjG1PWTdpm++10UtObBxHnHXwZQCqhhBaIZQoueY56pquXtdtx5NypEPH0K93sj1SezCJ175u41Pzo+ULL5KG9GvU7kVnKdTYL+kbggZaNmtWUgU7PJzEF4JVm91MTWmZOySMFaNz9VqUai0IT4REtYdnL7ZPBdasNyj3i110/t+flt6nBf93/OpInqdXX/T6OcOeN/5LYfDps8Jg40rrq+8Uzz/oc7xYTVg3wSr9UgxvFMLqPvcqBkEN37pVEM2UuYIqWJVNTbHTLI3lssNA6bN1zewq5bkEPsE4COnXvzIogtyU/PYz30Wq1AjttkgebTgegRf6jT33T+j1hjHPdGd1YxNwlOQ/zlmh1K2hP7Ye4JK/EjU77kj9CW1eBxEiX2eau/h7VaAGBhBao7U3ISbvizMAcLSy0BS9RViEXfYsY0VIfaDPEo2e5vc7rJvDys 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)(19092799006)(366016)(7416014)(23010399003)(1800799024)(376014)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Q1gxYVpWZHV1ZzY5d0ZENnRFdnNNN1FWbGhpa09BdlprWHAxUm5jdG9YWndP?= =?utf-8?B?SXJHUC9Icjc0YzZsRFl1MjkyVzhoNlRrd0F2bS9iR0thY0JmUXZYK3VwdFdP?= =?utf-8?B?disxRGdrTnNOQ0tDSjhaeVorNWNTYnBDeUcxUmF0QzFJaFRGZUhsTWhCS3Yy?= =?utf-8?B?RHQ0SXRCN0NHbFl5VEQwYTRPTWdOMHJnaWxlUjRtaGRqQnhQTkRzK0YvdTF5?= =?utf-8?B?VVhTSzdWQVRWMkFaQTV6VmJEVnJNYk1YVzRpZEx3K041Wk8ybXN1RzQ4TG9V?= =?utf-8?B?TzVLRWZ4VTdQdThWNWhlalFadXA1M3VnTHhJRHQ4NS8rVXRJZHZKSTlpcS8y?= =?utf-8?B?RGFtcUtXVzRLaHFKbWtuZ0RtbmRpdWlTclN5VEh4MytoUHkzNlNwOU9iWHFF?= =?utf-8?B?OEI0VXQ2ZHRjbFdnRlhjeTZiYUdOdk9wUFFROWdvS3dlYTlod1MvTjJrQVIz?= =?utf-8?B?RytlWTZwUWJBdVNCTDVMb3pzRXJpR2FXNm5DQUNTRzZjbVhmOVRwMHNwMm5o?= =?utf-8?B?c3c2YldkTFpDRlpBZWw3QmtSU1lyZ3VUN1dxdFpmQnBkbnRabkgxbW9lWlNC?= =?utf-8?B?Z3lES0FsSHl3MHFDeGJCWUp5ZXAxMHkvUjRZcmZ5L3IyQnE4M0hMU01JY0t2?= =?utf-8?B?dzB6Ri9hZ010YUYxaGZQQnhBdUc4ZmxudVU1Z0dKemhMTGFuZnFwR0NyOVhN?= =?utf-8?B?b2h2NWUxU3lHUU4va2Rpa0o5NFJ4b3czWE9LWDFtWFlpdzV2YzFTczVkcDJi?= =?utf-8?B?ek9COWNSR0QvaU9kbWtIaVYwSHhFUWxmb2k0b2M2dEp6VWRoeUIrZ2R4aXpG?= =?utf-8?B?Q05MaUlITU5IbHF1Y3dVTG9NQ0VjellsQ2NVanV2UGlDY25jUjEvb3lNaDho?= =?utf-8?B?QTJqOEtWdEFYekZ1SXo2cVhqbFlMS3hHb0VlbWc2eEJGZ0c5QXZBTEVlOUVa?= =?utf-8?B?U29CR0VKU3ppejFISmVlMlNIS1hUSGZGU0tESVhyODgzU0wwRnlmbllZQTM1?= =?utf-8?B?YmN5Q3lweUVMNjJ5YkJzV1BZTStxVjAvbllGaUVPbFY0SmNyMkZJanAyNmVk?= =?utf-8?B?OVVnL0FCM0Z3alBTZ3FFTVN0aU4wWUtpWDdLazlOTU92MHRDcnJ6UmFnanVB?= =?utf-8?B?MEVTdE9HR1M1ZGgxOW5HcjdmbmVXRmFQOFdKOHc1aENPTzRDU0NFVCtPSmI1?= =?utf-8?B?d1RwL2I1N2EwZWhERjJsNGhXS0I3cks4M2kvbFE5aXR0M2JBWDRTbmZXYi9q?= =?utf-8?B?WVVOaWdQeUtXRWJJVVZrMWdXWjRhYW5UamsvOUtOV3FoSlFNYnc0UFR3UDNV?= =?utf-8?B?SXJ5Qmh3NTJKNnN6bUtNU0lKd2FEcXF2WWxZempCL3lGUjNZZ3c4OW4xVDJh?= =?utf-8?B?RTgxMVF5MXdQWnc2aXYwdGVodklmNVd3SWdjbHdWUTZVZnlOZUwveTNqNGVx?= =?utf-8?B?UFJ2UTArUUVtZS80YUJJbjA5SDI5N1U2ZVJGb0VKakFoWmVwOE5Qa01iMVpQ?= =?utf-8?B?R1VjYlJRZ3dZWVlQQWx6MjF0c3JLcVlxaUpIL1VlbnJMRWVhWFhReDZGOHhF?= =?utf-8?B?OXFCelFxZlIvNEJqTi9kaHJMZVpPMjFucTR1bnNlWGZneHRaRGIySkdYSVEx?= =?utf-8?B?SHoxdHdIZVZnZzRMU2F0WGlVcjJ3c3hBUWhtdzlQZEtiV0NOdVE1WmJPUVdz?= =?utf-8?B?cnlJb0pXejF1VlM3MFMwbXdKQmtHZWtkRm5tY2FhenhOTWVPRW92ZTJTc2Rn?= =?utf-8?B?V204QTJDQWtiR3d6SkYvRDJjWVJaTGZDUEV6SXlTQ2NpdTZmWXJUV3diei85?= =?utf-8?B?S09zNThBRmp3bnJKQnhETGlUemJ2WE9STXJOR1gzVGxyU3ZTUkh6YzAxRFBh?= =?utf-8?B?Z1JaeWpIak9xenpLa0FDU2diOHVnSGp1ekxNbGpGSUJLMGxYckpTcEgrZnIv?= =?utf-8?B?VUlZaXMrNDl5bWdSZWdLNXlZTzA4QnVSa2x4MjNZZEQ3emRPeUpncjE3enl4?= =?utf-8?B?ZHVGUWNVZHpPazRnYkJSb0Y5ZENDUklrYjNybVByWVhoRjlaVzRKOUlQSnYx?= =?utf-8?B?RGRsT05iTFljMGFXNFJWS2FTajB4MnRWWFVlbmcvZ205cGRwSE9rTG5idUl0?= =?utf-8?B?VnRiSVh6dk1MNkZvTjJNSjVlQmcwc0VWN2VJTUpIaFN4VmY5V2lJaFBJSFhX?= =?utf-8?B?eGRkSGFZQ014SGFzWlAzKzUxaVpCZlV5Y0MrOTBGaGVZdlhtejVBN1BDZ3Vi?= =?utf-8?B?OGp5YXJISk5MMUtQVTJJRTd0R2d4WisxdERPNEkxQXpFMzNTeXZHNWQ0dytL?= =?utf-8?B?S3NxeDhvQnlJaUZYSnJ4NHpOdXhwOE5WSDlFaHEwcWlmYk5zRU1XQlJmVG5X?= =?utf-8?Q?LjHc8wTAlqWEy9MD6bANHqhyW8OZE861RuV3h?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6f38935f-6d3f-4353-aba0-08dec85eb2c0 X-MS-Exchange-CrossTenant-AuthSource: AM8PR04MB7874.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2026 08:43:38.7084 (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: IGt9hgabDPgr3M0GwhljydMQomJJlrJM2CMoDxXQ4eosn5lo4dLkY/FujoiMjlOZWOwKbg3MWnEuYttAnjURJzX6xfC+xYUtGO0aijqhdgYYB1vS5mYn6k9PaA5v19QL X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB12293 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 cc108a75a9008..6a726331b6c9e 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 Sat Jun 13 17:29:54 2026 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011016.outbound.protection.outlook.com [52.101.70.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3433237C912; Fri, 12 Jun 2026 08:43:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.16 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781253830; cv=fail; b=ovovqXafihPUMPs4l3RC20rrNPWdNdk5JFkQ3cgalI0m+Iej8H9bxjr0OtGSkifoyIZSeSLuc+TTqmpULnsmyRNd0xyTIDvWrHawQ7SgsqkhG0BoTAZaaTJ+jtvoB0wZkk6oROIbQfENKJSmJEYOhqcKhB+2mg4uUcQ4SS/N3C0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781253830; c=relaxed/simple; bh=4CK/3bE0yn0NlMwz0Xo60VRXHlIkruvIuWlIRUz/S7g=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=J1VaMSNHNowLFiTF6HaPYUKdlRElf0ObQd9bZvWgdMTBS1A+szKUhO4aBgQfl8V/DVMgga+SJdu+YFMmkX6smRP2ZvoJ+4Bm/P6HVBCdgA3QIno3fKWt9qVvuUKlKSP77MCcItmLqX+MVHwsK9vvSS5ylzWFWMWXyHcvCOV6q9E= 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=JY8i8NFy; arc=fail smtp.client-ip=52.101.70.16 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="JY8i8NFy" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kv2FVyOUk3H2xG00GCfKhHE8+Vl0EW6Sx10uEBSd8Du//pt/OEaJbwFvxLM1+R+C8tKHIz3jylyw8ED8Y0ksKHsCYR4DMqFkrv0mbMBbKnBdjGsV5x4jJ+FAdthyiIXaFGyo+GEbHxuxTg6AFl2G/oyzW4ojSE6Meef0+4PU99CeUM9wOeFa3jtZ9h0GcXK2V3oZvzoJOjp6sM2NZQeXmtRZEeNrhePckwDx3D4ip79IrVYjW2a4KduzedMAqivo3vO+0nlXOj4deD/8m9atXHWvt0bsTZdVkI7N2e0shC+/vuG34JybUMxePTID3h0V+BYMhj1+8JvtJr9TUOdFEA== 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=SAcDuT+OQKzN0dpl3QORnyigDaHyxvbLnusEs9sagZZND1VDlW3esIFmYSrljqykP1Dhx5d1Z43Kf3s7FWVUuKp3TpUpWdU3P8ub/0xCAC4CMj/M2/Z6cHbutVwBSBPpJfAh2WdX234k0KstpyV5T1JZYq4LQKmZALidqk26KOIGFc0xjpdtoMru6gwS3WVgu+C8/BV8IA9/JEPeJOfLgi2m0XmDVIFrJADsrOc7PF7Ni3h4zSZs/t/ZOaI2N9R4IEhp3I7f3TB8ccYb3gUF1USC1Sx1QHmUppEjKKdy4y+pXPF+R2NABMNLNG1R/+bJn4GFv5A0FOMdaipfGs6zVA== 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=JY8i8NFypTC8yistjJ0U5SY44EKpAdB+tczSRnBR2LUtdsXUC2ngkd0/cQOjfKsjABQyCpiuYsPNfc/aNomae73Rmm14nf+0a9Clj/eNL3fczr4JoDB8R1i9e4rbSumhYHZIpzC6tDL/F0/KGnYG5dU/EyrukddkLmyvVJ6CG8I+5dPf3TGNv1/7KAtDlJ/A2qNibA1ZPhYUXmvgCokb6d4+kpAgXYYep9ywdWCeL239wP6poFayg/7slkOHYAcUAc9uNAkoqOUvOyYudB9GydFFZE8dMESbNEC9nJXJZdOI7DxUO8x2TgQw2vpTXJwIlQ82am+eMTTsIsW5YQO1Gg== 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 GV2PR04MB12293.eurprd04.prod.outlook.com (2603:10a6:150:32b::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.17; Fri, 12 Jun 2026 08:43:45 +0000 Received: from AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9]) by AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9%4]) with mapi id 15.21.0113.013; Fri, 12 Jun 2026 08:43:44 +0000 From: "Peng Fan (OSS)" Date: Fri, 12 Jun 2026 16:46:27 +0800 Subject: [PATCH v10 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: <20260612-clk-v10-v10-5-eb92484eda38@nxp.com> References: <20260612-clk-v10-v10-0-eb92484eda38@nxp.com> In-Reply-To: <20260612-clk-v10-v10-0-eb92484eda38@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: MA5PR01CA0150.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:1b9::8) 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_|GV2PR04MB12293:EE_ X-MS-Office365-Filtering-Correlation-Id: a69e72f1-bd69-400b-b9e9-08dec85eb668 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|366016|7416014|23010399003|1800799024|376014|3023799007|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: 8ek7fHRPFuH0SDK/eLPGQL0riODuq0RmKe6qF3Eu3fzR+Yp01a4AV7/Ra+13f7GSRB6l9acR9kQ3g0VCHwcQdev67ET/+xQjs2ktwWEB05rDytxzSS4kdMRrmiXSiD4oSoGZBZJ/DUeXxLcONPdWmR6Ow3HqxRBryeGAni8AtG5DTrY3Az+53MgGSqVqMplgFlOqy3U9jfnJ+/dJ3q9B9+RGBHU2QPXd6FXdBTVt19xnoD/t/bDwXKkJgZG4Nbj8/sX4Az4voQM21nR496CEXcp5o1asfWWHX8WmCODZD5LXQ9oOq81xXq3AccqAX0yQzgrWX+QEyS7PV7KsBQuctUZrILlEmCZByLRIKDjsizStWbGTwqCkAwyb7fZ2Z5c/bLuDBQCJuJBvC6TH3YHommAHY3+emUGizbnjBzANClDH0Asb7d/jRz6nLl3mZhLp/WDu2HJM8TYfGR6Lf74VD/+hVD3xpju1y666M8rlTdI8Nvvfh4xMeEFZrr5PIE49I4G2CeL6w4bB0dQc9t4wiiPqsoXf277xpGf00JVDnR9W1BcbSyK0SZJvazVsAIdfz22f75weUCibE1R4m5tkLxuvw4w+UkFPbdOZMnzojd3RGMBRVp1FK9aHR1ljlD8/vovh+OE0+HyHWQIXPi1+m+fP2FkIj7/AfY3SJ95Dbtp0XeeMVwS/K6CErfheDu0G 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)(19092799006)(366016)(7416014)(23010399003)(1800799024)(376014)(3023799007)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R3RmV1ZiaUNYVzZtOVN5V2pkQXUvTC9WRWlWQkdUblh2RnhrUlpwbnVncXU1?= =?utf-8?B?cGdyYUJSajFWelVmMUhyZXFvdFdhL2JRYnhiK1ZHTkg2VFNORkxxbCs2NXBt?= =?utf-8?B?OGhRSU54ZTVyNWhFOHBDd3d3UEU2K2dxeG5QUlVJTGNjbGtubHlrS2t2clUv?= =?utf-8?B?MmF1K3hTY09COGpmUU5IR1laNlRZR3ZnS0NSWjdRemUwazk5S3U2bG1Bdnli?= =?utf-8?B?dFZ4NlM1ZjhzNlNwOFFUUmdnbGxJUlV2SE5Nd20xa0JYaHBLbkRCcU9Kbk5Q?= =?utf-8?B?K1FsYis0WDYyd1YvelgyMGM0YUdQdks4S3RqQ2dBZTBpbHNCaERJSEFpRUtT?= =?utf-8?B?cVhEUU5WTFNBaWV5S0Y4Z0hwNUhSTGt4SkJTbnpZRG92RWEvTHJ2RlYzR2c2?= =?utf-8?B?RkxZS1NNYnJpOG4yYjllNVdsKytSY2l3UWxYbWpKSDNwRmk2VElqbjZrdjk2?= =?utf-8?B?T0huWEwvQW56OWNKR1lqdDNWK0RxMEZGbzhJcmUrUW1rQWV4c3JMQ1MyVCtT?= =?utf-8?B?R2tIRE5Yai9rYnBKY0Z6dVFFSXQrODVESWVVMUh2WjFJd3d5ZlFlSnZWbkds?= =?utf-8?B?aUQxM1F6Sy9IVGpsTjh0ckwvT29Fc0pPVjc4NDBpMzRlaCtnaDd0aWNRQzd0?= =?utf-8?B?Y1VOL2hOdC9YT2p2Y1ZrSHUwYmRDZERkWGZuT0M1NUx6cDZWY1RmSmZTRzVC?= =?utf-8?B?eVc0NzNsZXp6c0FaUlJiUnFyNnNvM2l0N2ZaUEdIZDQ4QlNhcG1zalBUT0tv?= =?utf-8?B?Sng4Wkd6TGJoQmw3elNHaWUxYlUxNk9rY1pVRnorVjluOEpSaUZ1T2RsNGRL?= =?utf-8?B?OFpsNXd4WmVHd1FUQk9MY3ZYVmpOWWprTzNJSC94SG0zTFFwelhvK0pkaU1L?= =?utf-8?B?V3hpOGJMZS9wRlpBdDM3dWxuK1BTWlJwR0wrelppZmdkaDdaOG40ditBejF5?= =?utf-8?B?aGhpUEVzaENpK0dXTDc0d2VJM0VZdXl6M1puYm9IWWhkV3dCV3hCeCs5OW5s?= =?utf-8?B?WkR4ZE1QcXE0UmpKbXNxbmZhcnVzZ1J0andGTys5dklkc1lrRHRUcjhlOEdE?= =?utf-8?B?dTd0NUFXTE1JY0YyVjJOYm5KQzUrTGJDcVRoc0k1Y0t6MDUyWnVPdDFlc1dv?= =?utf-8?B?aEt3bzZxamt2Z1N6YUt0ZmN1YkFhellnejRZSTJDN1UwTzdpbDVZMFE1Z2JD?= =?utf-8?B?N1lKTzhnd2FRMW9KeGd5NHhTb09sSGZZNjVWUnljdWM1L09Db2t4UXBMS1o2?= =?utf-8?B?ajM3Skwxb3Z4SjRmcTg5S01kU3ltWnMyZTlMdW5uV3pId014ZmR5MlV4R1Fr?= =?utf-8?B?Mk1yNndxcVljUG9yTWJMVXplYUR4MEE2bnhiNEhqZGdwTUQrcDg2QXVUM25R?= =?utf-8?B?K1gxdHdKMklFNmVqVXc3VUtLZFNKZXhFRmlaTHJDWmI4NXlOV1hGUzB2azRJ?= =?utf-8?B?OHVudVJsQXNjUXQzeStQNzA4RU5ySU9jZCtYZGtMOVJGZHVOeHplU3FFdTFV?= =?utf-8?B?WEQ0dG1uSkp4WFZNRE9scFZjNmlHNE92VjdvZ05VdGovaWg1ZGRreTVkTmxl?= =?utf-8?B?TjFEblVtMGQvbEtaUW4xR21LRHFoY2JGQi92TThzMCtYMWVQV2loenVtaDFU?= =?utf-8?B?a3ZiMUFTVDRBTVJSRXQ5ZUtqemd1enhxK0NudXFUQ3UxZG1oT2Q4bG5PMkV0?= =?utf-8?B?TXBMbmw0TTZCbHhndFRZc0VQYzRxcW1GRS9sazdMWGxYRkx4MCtxVzRRM202?= =?utf-8?B?VE03b2Nud2RsSFhoR3hqcnQwWCswNzc2bFQ0WWFWa1g2UlFiZStlT2RLbjVE?= =?utf-8?B?RmVhbG1yU0NEUlFJUjRwdEdvdVEzUGxKdkpqYlIycFlxaGFxQnR3VXVzbXFW?= =?utf-8?B?WUVDQTZmSitERkRYVEIzVW5VOHpiaUE1SERsbVZnN25uRXF5WTdMSTRvcVFh?= =?utf-8?B?OVVnUFdZUTFLSDJSdEpkY3J6aVI3R3JiSEx1WkJtaWhkNER4ZUJIYnUxdUFT?= =?utf-8?B?OVluUE9TOE91RE84QWV3YUdXNUlVRWxWdW1tMnEyMUJoaUQzTWJ6YzdxSkJs?= =?utf-8?B?N2pEVWtQR0hZREdXQ1EyeHJkWElxa1hreWtNekNWWWJIWlVkZ1YzVGkydVRa?= =?utf-8?B?TXdFOEE2eTlrWGx2c1lDbU5Odm5WOFhkZTMvcUJ2VmRScW5KTWJCY2pMZzVy?= =?utf-8?B?dXhYcFF1TlhKUFhHTWVXY1hTTW1nVkU3UDV0UzFIRkM0cGQ1MUlWdi9hQWIy?= =?utf-8?B?Y2hpRXZkdkV5QkNNV2RrTXZXcUIvN0RXNTNZQnNYOGdSQWFZNVVJaHVESGlV?= =?utf-8?B?VGF6aFdXMjhWOGNmT0dhUWlQNHMxQmFBaE5JbUNYam5TSHBGcysxV2tjVFhi?= =?utf-8?Q?yua2TpvgQ8QehrHMPQo6aaISumKIPddhqIKjH?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a69e72f1-bd69-400b-b9e9-08dec85eb668 X-MS-Exchange-CrossTenant-AuthSource: AM8PR04MB7874.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2026 08:43:44.8602 (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: A9LrDnspetByCoIQEh072fw4lkRmcrS5Y8DH8fpdD8AzeRH7bWCxhmE8BktbFJoSBItnj+PBdaTOjRWdLrkBRozD6SyYZkxnegkfSGd3QuqCOZ9Np03X9Ie/+X46WjZP X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB12293 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 Sat Jun 13 17:29:54 2026 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010059.outbound.protection.outlook.com [52.101.84.59]) (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 3E8AF362152; Fri, 12 Jun 2026 08:43:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.59 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781253839; cv=fail; b=GiGhLtMqJkeKUYP162qeSEojFlD9w5jnYK2Ul8JRrmKCX4cGm9fCkV1OxAw0EP/Y6fc1oXXu/Og04mEIk6/5FHtjEu8Cdr0NcHvjJBLZA6D6L43eLJllMZ+ddCz7wO3KFc3JMBv5EhsYNocXDM0PPrcN6W3JhQnMb+IA11+Ul9M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781253839; c=relaxed/simple; bh=gbgSHjyDbtf2t/Pk+SimwQoNVI3oOiuL2Gq7Lm/2WhA=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=DAUFvIh5Sl9QjiNX9XRtRIJ3UTbqnpw91v6qIJAnKI+Tkb6kII8UlwiiJAgMKX6Tg8PnjoqXtIYKNAA41Pck/N/KaP2wAun4ecdpfSG8HUdT+x5090t13dvw2+tpeM0m6LtBtboZFDy9U83793ANOVac5zFr7rgCLrOlYoyhOSU= 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=fZ8fZ4Hr; arc=fail smtp.client-ip=52.101.84.59 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="fZ8fZ4Hr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UVUFDaZY7psKwzz3sJFcxDC7h7ZzUfVnQ9Pz7ltblPVzR8vnYSF1fnM32wUjQYDz2jbDjYUC1j4FkT+z++tnDUn5z1v+tU0kUDbQdHwnhjNc7mot/Qi9P/FTri+f90jEzFKE6NuzYuhhT3qhheV3omVCxc9MT9kHcp0flMVmM2g/43Tuzxgu9ZUmZTErNSc0X0KZQiUOl5n8+Oegj7CLZBOdSW62uGlqPZZC92cCuuo6fsuUQn8DnKlkE3u3KgQ4ORe93bKH6ypFKrDA5MlQbUdWh//IAvpjqkVaLCGhMztbJAkSNCryHcWO2KEw9W0nMerQv5JxcC5KSV7W0zmK0g== 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=ddtUxbuU5hjHBxeCK9kjY327enFieNmTZTebw+7q6bw=; b=Ps+zHQFoeS6ijOJMyk/8HTBlkY+FjkJhKtdXoAKkKLEfJiV/akvQGgKfm/tYBWCWiaQxJp9WEgyUQq3hA68Glhx0SOin26rciWzzYoAOn0RJ2bb9aYHr0YdGKYmX3V8RArFgdAm9vDZW/nS318rAg2uUhFFzKI/qSt3ZJMYm0UOIQgiDftjn2cyue4J3f5qQ/Tfl+zJzHvwm1P8A2VWbomiCl7RALbh3R0X5rbmy+8IByec6girbzlqqxZicFSnqjz/2rtdf0BnUx1BM9xqIDZ7LV1qDo8s7Z0oFYCa+sJg9f15cnJOxBC/xFo1r8YfFai+dKB+rbtmi1r4N/ngqhg== 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=ddtUxbuU5hjHBxeCK9kjY327enFieNmTZTebw+7q6bw=; b=fZ8fZ4Hr+X+juMYLDTtNotheCnu0HXxfWE/HwU82nH+moMWF+mpdCLmAIshwTlhtdbwMnEjt1rBrs1/WlilN7iv2US2UTIa1WZgabw8DdF37wMUN9iYAUpiR5z1N+qB4tVE+451jjtMRwuQpB61qJhJpYDqHlsNViHuiEWHd4S4XCHvInBiCBOgHhQtBdcb3nMuqTKxC9SdRAXgoKAr6HA3g4FFfMrAYouG1we6QRFBdwKKgwQTDF8de3dwvaeS501em3okiTsgMUqwxWj8dyhAuL2yUkDSB4Rq929kjws9mm7x+dSGORXUCOKFnl+M5bbT640kCwmUNKWIo6HSDlw== 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 GV2PR04MB12293.eurprd04.prod.outlook.com (2603:10a6:150:32b::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.17; Fri, 12 Jun 2026 08:43:53 +0000 Received: from AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9]) by AM8PR04MB7874.eurprd04.prod.outlook.com ([fe80::ac38:1699:6f18:c5d9%4]) with mapi id 15.21.0113.013; Fri, 12 Jun 2026 08:43:53 +0000 From: "Peng Fan (OSS)" Date: Fri, 12 Jun 2026 16:46:28 +0800 Subject: [PATCH v10 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: <20260612-clk-v10-v10-6-eb92484eda38@nxp.com> References: <20260612-clk-v10-v10-0-eb92484eda38@nxp.com> In-Reply-To: <20260612-clk-v10-v10-0-eb92484eda38@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: MA0PR01CA0090.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:ae::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_|GV2PR04MB12293:EE_ X-MS-Office365-Filtering-Correlation-Id: b642d0b4-a0ba-422c-17cb-08dec85ebb4a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|366016|7416014|23010399003|1800799024|376014|3023799007|18002099003|22082099003|5023799004|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: WnoC0Nqr91D5u55ncPZOQYG1a9cab+k4O4sQVaCDTccyDQD5DSO6Qxrd0SncFziMlmlW1kMLB7ZyI0LZSGtV4duS4/E6E95awxb2drc+dS093K2NiGz/l+aI5faqEs3Ttah6V6aE6hsSO1xmHMI/L9wCGVXiaisl2uIKkx9As66/N9CB9G5kTSM/akI4WsKoyVOZsBJ1q4X2sQ4vRJYSACmlxHqGsTEyHiHL3XJ4GTYP/YbLKxMA3tXnIZOREsUdd4DmkNP5Fe+LJKtvbt6MnRDGIp4d+qKmDNgT2Brl9+dvpluhHSxgQa4jIRxOzz4GwAZUxNon65DFCqfQ7F6qS13RgnbPLHVH9Ovr0bwPKvN+b9KW/kh3ZjaVqS2GA4G3P3ZQT01HB1pFLvHx2C+Tv+lvjH8XU1M/kuRo4kSs5zLskYf0+9l16gWEJBb9GiR74JjW8COGnGzKaNuEND8IQZWJpmMR/faarsxd8Oo2CdKAgwOZmY8/zYX3IJhfLdRY6UeibAleXGI4kNEC+erZeo73pPNI34uUq4vmoJEEQ3Uux3EDo1tALyAEGDoPQgRJV7PxyI5GGFASO2iAQvd3b+pdiwD/QXi8mUXOrP7giKdPOIKFMutxLZBlCSOOhNGwf64lFBNr7EEFodDXT9yZCX8m4PzsrDVOKMrzMUxrFiZkHqSz3Rfa18t2ql0fQggx 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)(19092799006)(366016)(7416014)(23010399003)(1800799024)(376014)(3023799007)(18002099003)(22082099003)(5023799004)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?V2hJN3JqejFqNkxsV3ZUVWczTGNOUzQ5amdoNFJHcFhZTDVRdE9Ed0xBUXBv?= =?utf-8?B?L3UwVHFVRlFZWXlUNVlXeDRRemdNcm1MYURrTEV6bzlmYjJTZEF0cXNSZTVv?= =?utf-8?B?ZlZKTDJMOVFId3hJUlBEbXJxaGEyQ2RRUDVnWHZRMTV4eEd1amZ0aVJDbXNr?= =?utf-8?B?Nk5BSVMyQjYyQnZ5eWdXa1haMlZHdnJvZWxGNW16eUZvY2h6dm5PRy9YaWpC?= =?utf-8?B?MHdXUDlQYkZ2aHcvQ0U1NVh0aUhITGV6VE8wcldjNXE5ZDhmWkNwVDIrZGhv?= =?utf-8?B?aUVFUWdNVUU0VmZzSWs3WlpmZXNRbWJXd2NqUmlZbmMyTGRqQnlVbjNyZmpt?= =?utf-8?B?TjFCelhsV0g0VWdzTi9vd3p3NEpxWEt5QVA0VURmWHpaU0hLbVRVa2l1Ukh3?= =?utf-8?B?RnFJbDZXNXdZUnhjMWJJSVJCWUtNR2dVREIwWnlHT25uU3lGQnhQZENvVzVQ?= =?utf-8?B?bU5ZWi9RZWFDcVRXZGlHVGtqS3lZOGpWdHFXeWwxNzEwNHUvMkovOGxKYUlv?= =?utf-8?B?KytBZlNyQ0FNQjUwb21PdDJHUGhGbjMyT0Y3N3I2cVdWbHB6VW5qOVI4S3o0?= =?utf-8?B?dGd6R1lxdjN1ZDJWWWpRMFpJL3ZzZFNCellQcmRXRmZPUW04V2pWMlE5c1lo?= =?utf-8?B?ZmgyT3BDckVRYVRHUyt2cTVnUWxRWk1sVDF5ZTREQlZjYWdzUkVYbnVMeEJ5?= =?utf-8?B?THgxcWVIRGl2ZkxwdzVsTzEzbnh2UlpZd1BMRnpNTFJ3cmR5eldRcWhWVlBO?= =?utf-8?B?eXJCY0ZxdWYwSDZ4TG1qK3FDVE1RWG45THpxMERVOGw4N0p3QVJTWVdtKzVF?= =?utf-8?B?VjNhVHZoRTJoWFJ0cWZwQVNIck02L0hEbDBzR1lBdHluVDJQR1F2VmhROElN?= =?utf-8?B?dG9BZWo5MG8vU2JaeWxLV213NmN4RTNvVElsTXQzcVpBWTZsbzd2WkdrQy9p?= =?utf-8?B?M05xWUpzYm8ySDYvUlNVbFpPNkFTcTlOaDA5TWx3UUxDNGJ6eVpISkNUbVBv?= =?utf-8?B?SlkwbzV5S2ZPM05GU2U1SVZKV3FsUHBFMzI1aWtOQm9JYzFmRG9DRkdTS0ti?= =?utf-8?B?WU42YnBKRTRJUlYxMDNNNTVjZnlobllkRWJCL0pzSFBMeG1xKzR1ampKRTlv?= =?utf-8?B?ckttbkVwdGVrZjFjaTlPNEdsWGhvVGhrRU9EMXdYbmpqTmNEdnpYS1Q2MWlr?= =?utf-8?B?bEFTWWp1aUZ2SFh0bkZDV3JtUHAxaTB5b2NxQVFCSEhINEM3UUVITnlOWDF0?= =?utf-8?B?OHA5ZWRrUXBlbUZTemRLNjRCY3BDYm9ROTFaSkRBREZ6U1o3N2gwQkcrMTdZ?= =?utf-8?B?dmxaVjJoaTZoeWhsZk81NzB5bk9KazBUUkc0a3Y4SUV0RUFneThpWWxNVy9n?= =?utf-8?B?eFljNTVJK2NQSGJTcWZqWXRNVmdsbU90d2JvK29ScGhsc1FTcGc1cDNOT1pJ?= =?utf-8?B?bHYrREFBWnBBOTNMSEZRMFdNdExGdG5QVFBZTHRDd1pWM2ovUnlKK09BNk5Y?= =?utf-8?B?eEZEeHdaV1ZRWSsydjBna1VEc3JTaVlrS1MxK080ZUgzM2o3MzlPeVk1d2xX?= =?utf-8?B?T2ZFTE1vcTAzTEtqZFEzVmFOcndRSDcwem4ya2V3K2lSc0J5ZVE5MjRMSGc5?= =?utf-8?B?a0Vta29wRC9qdmJ4a3EyWDlOek9LOGhHNzRLUUMzUHNnUkVyTUk1cFZIT1JC?= =?utf-8?B?dVV0aGNEaTRzY1I2WVYrc2pDNTRSSlcyNDNWdTdWcjJuTitzOUg3WXYzS2RR?= =?utf-8?B?OWljdGZ1Y3hzUDY3UVpvalIrTzdsNDN1ZWhWZm54ejErS2ZVMjZ0ZEhMSWRH?= =?utf-8?B?TW9tQlJoYkdqemlFdW1ZRmQ1aGV3L1NUTkd6aWo0dnpQUjRsYXA4UzliZi9t?= =?utf-8?B?MkhacnVneHlJTlJzbDUwZy80Snd1OTFLS1NrVlVIQUptRGVEQW56RFRIa2Na?= =?utf-8?B?THNlVHUvb3FuK0FDWEZmem9wVXR6dWc1Q0U2R3BSeVhrdVJsMDBYRVdNdEpa?= =?utf-8?B?a0hqZVA3akFoaEN5TkVnak5XMy9wL3BHOSsveENJMjBqTzNOVWJTSmM0U2dN?= =?utf-8?B?RWdKVE93VU02RUZJalRQSWZsVlhKT1NiRGt6TktzZ2JkeDJtT1plTTRsbDcw?= =?utf-8?B?dHpxM2NkNGx5eWpBUG9hQXpqdFI3Z0V0eVorMFY3WThhZEF3THFOUEt0Qk1P?= =?utf-8?B?QnZHNjNQMDJSQ2owR09vV1N5NXc3Q0YvUjFQREl1U2VzMWgrUXFyV0QzdEZ0?= =?utf-8?B?WGJhZ2NkdU96QzVDVG5NYmhNY25WWlhvOEtvZ0xUV3NpSGdXMG9TaERVSTZm?= =?utf-8?B?dTVaVUlabldtNHYwZm82ZitVWmN5QVBqWkRvODZuY3FxVUNiaER1WnA1N2ly?= =?utf-8?Q?M2zhZPD86Dl1r16gGnYoJ09sjVtOvUnAvmyaq?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b642d0b4-a0ba-422c-17cb-08dec85ebb4a X-MS-Exchange-CrossTenant-AuthSource: AM8PR04MB7874.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2026 08:43:52.9788 (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: monjWyoFZwEqLCwAVKMngH8JhdDrQQrJhaRPYYiIgOaQzsAadz1TUkSO3QDqPb+808/bX5yaEFw7i94EQ86jvCVD/wSdEYMWuIe4s6fFdahY+Pwsnnu93avhu3F4e9SW X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB12293 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 | 2 +- drivers/clk/clk-scmi-oem.c | 108 +++++++++++++++++++++++++++++++++++++++++= ++++ drivers/clk/clk-scmi.c | 19 ++++++-- drivers/clk/clk-scmi.h | 11 +++++ 4 files changed, 136 insertions(+), 4 deletions(-) diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index 6a726331b6c9e..c2ae700ec0f2a 100644 --- a/drivers/clk/Makefile +++ b/drivers/clk/Makefile @@ -98,7 +98,7 @@ obj-$(CONFIG_COMMON_CLK_RP1) +=3D clk-rp1.o obj-$(CONFIG_COMMON_CLK_RPMI) +=3D clk-rpmi.o obj-$(CONFIG_COMMON_CLK_HI655X) +=3D clk-hi655x.o obj-$(CONFIG_COMMON_CLK_S2MPS11) +=3D clk-s2mps11.o -obj-$(CONFIG_COMMON_CLK_SCMI) +=3D clk-scmi.o +obj-$(CONFIG_COMMON_CLK_SCMI) +=3D clk-scmi.o clk-scmi-oem.o obj-$(CONFIG_COMMON_CLK_SCPI) +=3D clk-scpi.o obj-$(CONFIG_COMMON_CLK_SI5341) +=3D clk-si5341.o obj-$(CONFIG_COMMON_CLK_SI5351) +=3D clk-si5351.o diff --git a/drivers/clk/clk-scmi-oem.c b/drivers/clk/clk-scmi-oem.c new file mode 100644 index 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