From nobody Thu Apr 2 01:29:07 2026 Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11011035.outbound.protection.outlook.com [40.107.130.35]) (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 C9AC23AA4F9; Thu, 12 Mar 2026 06:57:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.130.35 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773298650; cv=fail; b=tXgsHzdfVOGoXtSDrrvBtfDBmnrfHeqAzK45geXmxkYBO+gzuLagDarJlzOepEkuphsx/c8WFXOQYQvD01gfSiqSuf1vuJCQJUctHqGpI/SX119W+8NGFMtuVHIebFcwwMFM/DRvX0UTFcuuAcb1y/R+x02VjuN4smg7t/BneDM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773298650; c=relaxed/simple; bh=ThP3UWOqp8sEbKXlqk6JjoFIogRFA8SOwcF47bwy3S0=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=X85LgH2/i5I4bC18krkJJch+36qnQ0/nGcGTkE2RqrHPJ3wVs9NdXxtfCdp84NLnVltg9/TVJJ5lFdrNeF6OcBuzlm9VHvgUIpDPJv6anaQ2XQ03AdYH9cLcrRhgJElldYMZRrE6PX/SXyJAF306gVJOPISwdOJpu36O9XXgPj8= 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=LS+I+E+c; arc=fail smtp.client-ip=40.107.130.35 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="LS+I+E+c" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ypf8W7ZeNOaBWoreRJcvxHjWpdeYtJTXXF1qP2G8K440QRhlGdW0IItuhFhjGaZfzVgp6sTcwqRzEiiixusw198uwpyhSNrcJsMvmOrGBCzdnWFuH9piDIY/KoaU8Blt14BJgZUkuyh/0DsfGHkKWkMV6lubIkwAW/F5jPEUsX+JFkWsEnWJVpeQYbp331ID+qoStHa35xL5GjCevG+CPcfo5BaGef87lMcNx6+vVaQDvknjKkZriwwmJ/aSdJImZL51BEF8pFXw0hoTKP9BXM+Gx7N/kvNFsKCMK7ElCUt2G9xTTeuob9BAeHHwWERzmFaPCsiT1dPJxoavUkaZVg== 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=OOBHJX+q02TVDHNuAO8LtVZLQsK6tQm89clsq+BIRMU=; b=oGXtf3du4AzJZKeiQ/uN5j+0EIt86FHTw7QJ1PSPp1Kn229rErXz1LV0KH+0NFX2Pm6joOsF5sbctHhcPhD3/21fs6+fGu8l/bNfcX6ruSv6Le/bOrJXd5I2q5ktek70M5UKdcDTOeENkUrDpggceK69LO17oqRqWIgQWRViiRHRsCMR2tvioDlhhaQSSMAjrLj4smE1mPPy70zqlkgVTulspBp9mL7GqdU4FY4d4A3Pa21QzuVSTwc2cwM+wPdxf7HXpR8WlAmubAt1MVLGRrU+I4cBQ6PEKZ/wrHo/dBAjnqQdjhV7efWZJRcBV3sYAek3qj5UAZZdI5LXdSJqhA== 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=OOBHJX+q02TVDHNuAO8LtVZLQsK6tQm89clsq+BIRMU=; b=LS+I+E+cXJvH0twPIBzcL6DFqDahdN9iO/9/vkZDnLr45k/v3kYpugFajI7LCjp98cFoYXwj91QaO9gMKBAJyBSsF4CQlyD+9GDX66AHN5W6Utf5fV3djCf+leAkb1SoS/Fkopt0NB3GWfJ5nrkIEE5g79itTwMAuRlKXFIW4B53kN18bSXG8CLXk9bnMnWyCfOx1B+9px6N+mmDQLFEUo6YjdzcR2ZCOxYOP5TdKcEy2FpJnTaMt72Hsm+r3p+ns6ZGA3irmEqKR16PK+OrJoXO+W7pqqbyMH9wQbXED0yLzqKDcj5NP6U1LGaXcccc8fBLWInzN2fryaeBXa2dgg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by AM7PR04MB6997.eurprd04.prod.outlook.com (2603:10a6:20b:10d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.12; Thu, 12 Mar 2026 06:57:23 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e%7]) with mapi id 15.20.9700.013; Thu, 12 Mar 2026 06:57:23 +0000 From: "Peng Fan (OSS)" Date: Thu, 12 Mar 2026 14:58:17 +0800 Subject: [PATCH v9 1/6] dt-bindings: clock: Add spread spectrum definition Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260312-clk-ssc-v7-1-v9-1-0a9d2e188d9e@nxp.com> References: <20260312-clk-ssc-v7-1-v9-0-0a9d2e188d9e@nxp.com> In-Reply-To: <20260312-clk-ssc-v7-1-v9-0-0a9d2e188d9e@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Cristian Marussi , Sebin Francis , Brian Masney , Sudeep Holla Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: MAXP287CA0017.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::35) To PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|AM7PR04MB6997:EE_ X-MS-Office365-Filtering-Correlation-Id: 02bdb5e1-b69c-47e0-8482-08de80049c95 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|52116014|19092799006|7416014|1800799024|366016|38350700014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: BZmMvD0aLsCNanISJ5x7prpOhHZVUJjOXOd9j1F4PFwmTy0RcdtylWFuk2/6OOPTAT2gaYALsmFL7P/jNYXMCnp3TFFKYj+FyCuLO93u9rNInCvtuiiYAvcm2fwDIMvl5bEvAbaqkq7d50J7dlMy5/+m9yLJZAWpBbHLEGXIEARCWL5GIgpU/W6b9A4h4jwzenwqtDq9lMYIkxDqC9RE6qqIX8mC2zo9w/LT9LkrtSHTr6ctar6EQzlbR6mkQ3TBBzZYITyM3ct/TVx7tZDrDXXzjdGy5NEpcSMFAa9eKnp4eszPsHbpwZDJDZx6+DAqLYsMqKm1dYQ9+ZWrYxoi6hesYTp5jOLBPPjISY5+9rFKVV9kVXtRXhKZEqEmI2gSPXpk8lWEzQ93ZjDR9ZE+GPO5VfkAaSRxeVEay4qbaFRitE8i0d0zMBcvh1TOCvSccigrlBui/rSerzhg/kL8sDFVDcFWiX953mIL9mEgy3MWhwLy1tUE0g4WDdIXnXVur2QANz8CTvPeWl1KBzkB8xFnq1LWGrMiYZqKhpZNaym3Fn9jNuHSxY9i3Ro9/GEEqBV1blJP9xJ89nGqSrehWi0bLE93wdYw22zwmKzUHVzdEXMZPkzQ4GjtYTWbguC6smLGwtS3Uj8xY/t9BTDmGQ0wL26ohNdu/m3pcPHyzq/scyrxOgNBOkTep/Q4kPo1PRqQcNCFNebkg/g6gNVksgOaU1NDryDbq+qiYRnHtFSqOxV73yyexELduYvo7i7jnjk6jjUVwb9EfXD5ygJ9uuKHviU2BpOrXOYlNZTXm9I= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(19092799006)(7416014)(1800799024)(366016)(38350700014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?akY1NDBwTzIyMkV1TnY2cjh6VnRPZ0doUWp5MUVRcVVCSVNPOG4vV29OWHhq?= =?utf-8?B?cXJlTjVXT2FwaTMydlE0NDJtN1o0YWd5LzRBayt1eGlGVGJMbisrL05EeGlU?= =?utf-8?B?Y2x4WHN3RmZmSFFqZmhuYXhQN2duV2dqR092bFU5NFlJamk4eitZTWFIUS9q?= =?utf-8?B?aGt6RTg5TU1uZTFjcER4UXA2Sm9uYmI3N1VoQnlWcUVhMFc1VGxLczVCdlRq?= =?utf-8?B?RVpSbmJpZUIxR0NYbHJPaGdqRkMzQWJDN1M1bWlyUHhscWcvak8wMndVNUlh?= =?utf-8?B?VHdGZ2RvZjVUQU9BWU1ZQTFKWFNZSzhSSGYwdjMvN2FrdUlkeXJoc0o2QkNv?= =?utf-8?B?SGwxamxIRmFkWXlrOW5EZ1BXS0hzczRZMTFTZFlaeWJFTEJES0FqdDJjL2Rs?= =?utf-8?B?WmxCeW9zWFpsb2t5cm01YzYzR2d4YmtpMC9abldvUU9GdmJpVnpUT3pkYnpl?= =?utf-8?B?MFdXb3BCYkpqenh5cGRvakdLOTRYRnR3L1hSMlRSQ29iNzE1VElYWjMrRDNY?= =?utf-8?B?aldzSis3bHBzdmhzSVVjdFhDbFBOWVJMTkZOSnVTemhDN3d1QUJOd2hGMlpI?= =?utf-8?B?eWVKdjRKbGthOEJURUVRVVFsOGJjTE8ybUc1ZXVUaFFaSWQxSWpZQzlUUnp6?= =?utf-8?B?UmpwWEpjNkVGVGJVM0ZkUXE1TmFKbEprMlFFaGd1WTRsOFg0S1Y0OE9BbVhM?= =?utf-8?B?QnYrWU5Od3AwTFJnZzkySGwzcytnUnhaV2dNMWdVUXRzeUtFSGlNWmM0SC94?= =?utf-8?B?QTZUK3Zlelo1cFVaZTQ2MHFnM2lISHQxdEU1SVBkMmY3VjQ5UjUvVTZvTXFw?= =?utf-8?B?L3psYnREa0cvakJiMkF6L0xFTDRscDZhTmgxWXVyTFByVXlITU41R3FVbmQ2?= =?utf-8?B?Qnl6SEZkcm42dmZObG1KQlhYVFd4dFovcTNWdjFyRUNwUDZEb2F0QWpiamRJ?= =?utf-8?B?VHVpa1F6eTBpU3NrVExMUnVpKzJNbEVncjAxRHY3dUVUbjE3N3kwQVk5ZkpT?= =?utf-8?B?VTg3N09oNWVlbWpTYyt3cVIxa2RZMFh5YVBSRkdGb2ZVbDRYT3hpSjVQRzBs?= =?utf-8?B?dDdPRWZsUTdvZ1plRktlWjF5U0piZGZMVmJpQkIvR3BqaDY2L2FENlczOTh3?= =?utf-8?B?MFlNYTBJWmd3aGptV05uUVYyMkpIMHltc2x5Y0JYZFBvdmF2ZlpsaU9XYU05?= =?utf-8?B?RzVKcGVuaHJtVkNPM2pPazRDUXpQeVVMbjFrRW8xbkZsdnhsOThzaG92M244?= =?utf-8?B?KzhjdWpTNHdrU3RhZG9QVzZ6d0t2SVdodldiV1FGZ3VkUnRMVnBwdnFhaGdH?= =?utf-8?B?Q1NTdWE2NmsxNFM5ZlZaSnEwV3BxTllKYUF2SERQNEY3NDFQbUcvZWdxSURs?= =?utf-8?B?NzV4eHlydDNUaFlsZHpCeXdkNGZOVXFvYjMramZ6N1hKMW00cHpNUDUzVGxn?= =?utf-8?B?QzZ1SWEzaVhTbENub2VPZWtYNUovc0tXd1pQU2FtNHl6aWt1OE00SmhYcjBh?= =?utf-8?B?NDlNd3hOVDBhcGFrNGhzTTVpOFJFdENFbEw2UHc5QzhWNkRBalY4cGxaYkdr?= =?utf-8?B?TjRTaURxWG1kTjFCRlk1NkhRcnVZOUovS1V3b2hXVGZia1F1dWtOREtBNzg4?= =?utf-8?B?WjVldm9PNWVxNFZsVDcwcERzc0U1dEczR1dFeXYyVnpwZFBhUDdYSmhiTE1m?= =?utf-8?B?UEZvaTZ0VjBwWkZxZ09CZXdhb0RMWUJIMjIrd0xaU3hnUFVBeURwT3pvbFRE?= =?utf-8?B?MEw2bzN3T3pwOTE4QlA2TkxBU3FjK09vMHk4OFk3MFpBa1pSNXZLV1EwSExq?= =?utf-8?B?ZytvWXBuNjh1RUxyWEdBa080cFdFazIwWlRzYy9qcHgrTkZranpHazBNOHFz?= =?utf-8?B?Ynd4MnZocm5qYjRvbWcxaW00K3NvdFBWeERNaEZ2dTJRUkVtK1ZYdkJlRnZJ?= =?utf-8?B?azQxNWcxa0RWMVVkQXNTU3RSbFZUVnBIWHloNzRsOW9obVBTOVg0WFlXd21l?= =?utf-8?B?ektURzJPOXYwYTlub21leWhXSStnZmZEY1l1azI0L2R4VS9RcGh0TEtLZ21p?= =?utf-8?B?eFJHV3pTMW5hU24xWmI5Z01oUW1rUDFLczdBTHhwc25FTTEwNHhDUWV6YXE1?= =?utf-8?B?UnNOWm5vbExrc2pVUzhMckNKT2wyMUJLQlRFeE9RWDZ1N0tGa0h2SEJrVDRR?= =?utf-8?B?empzTFh4K0UyNU51WEhjRDlXZ1FkQVY0VEZJS0lldVdWVHlPZ2Z0b0h2YVNl?= =?utf-8?B?NGQ2Y2piOFJUUEkwMmVuN3hJSkZWNDFNUUdGR0NLVnhseUgyZDJ2TG5RN1lY?= =?utf-8?B?WnN2UklYcWRRNUduTmZTMHl4SWMyL3lOU3hNWHhua2lZeGtaWFBsQT09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 02bdb5e1-b69c-47e0-8482-08de80049c95 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Mar 2026 06:57:22.9534 (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: OlO1QHRwNEDxic3Px3/6XgiqGGy3DbOBdRg5bB+mcW8a7IoPbyZQBTzJoCKLFQ5wD63ewpHv7orgnJ3tEuhoMw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB6997 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 0000000000000000000000000000000000000000..155e2653a120bf10747bd7f4d47= f25e0493e0464 --- /dev/null +++ b/include/dt-bindings/clock/clock.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0-only OR MIT */ +/* + * Copyright 2025 NXP + */ + +#ifndef __DT_BINDINGS_CLOCK_H +#define __DT_BINDINGS_CLOCK_H + +#define CLK_SSC_NO_SPREAD 0 +#define CLK_SSC_CENTER_SPREAD 1 +#define CLK_SSC_UP_SPREAD 2 +#define CLK_SSC_DOWN_SPREAD 3 + +#endif /* __DT_BINDINGS_CLOCK_H */ --=20 2.37.1 From nobody Thu Apr 2 01:29:07 2026 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011033.outbound.protection.outlook.com [52.101.65.33]) (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 A0A193AB265; Thu, 12 Mar 2026 06:57:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.33 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773298654; cv=fail; b=ukBwBkRZHAm78s0KJ4XE7L8+1nkDqOkHUAmST57ezLx5Fbw3CiCb1Y/pmRvle85jsCN9buSHO1Q+eYNEKhd73Zdb1wHYdWN3ETLA8yA8BWQrK9d07MrdVwJ4DTwDw/VsotDMiOQQA229/eMU7CPQRGlcB0HZa84qXr3rFnB0ao0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773298654; c=relaxed/simple; bh=C/xvqBForQ9M7yQs/Rlj78I3S3NA9JZfmzorGZOmgRo=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=SrFTt+THcHozhIUAzRpzncYHFc2YwMooUSSucbsfEOfk9hlXU1YKVnlffmZgXTSLjavrGu2F1qh1bbzkG9bsckxwEZs3cEYyNJelxUQ2hBzjUmLFbq/Z3CwS6gGJYyeo8eVr3zfO+OP6Sb/KYon5Jk4Uej8BHmCQX30BBZs3MM0= 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=voPCU1nt; arc=fail smtp.client-ip=52.101.65.33 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="voPCU1nt" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yy+kQjWaQBmCDx6LiYlocC53FNV3cPBJyiSiIZ6x8+176DXMEZusAZJ8/pLkTQDfWkv71VCDnAdh9WjkdulyaFeeaGGxSEX4Ntp8E7PtFn3Mr83Ic2yoll22DLI4WySdpeS1ZMX1GxxCud5rCQfW46guRP3J9iZnuleRPW/9P6dzm+hF3/d+PeizTF5iKjnxGCBNP2qzL6tT3axVacRj/1NniZPn1Ln/VrkzFVZ8GqbN2x+ARMvjVYc0cplUIzhkbkU8pD+m0LPHaxFIWS2DJLL9O6lPnK7bx/hK/4fbZX+jylo+NvrhxyrXbK236QI3e9yDNpBX3CaUqFf+acU5Ew== 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=cCtuE+UCAQjSInpef+rs5kwlWw6wbPSZJ85LhAy5n3M=; b=L/57LuXzFg08AqvD3MOaQqZ9q0J+bjQitaJu4QxOgeWnq/xwRtVYoSdbPkNAKKIx4jJtyVmWviJPNCARM10/5tzZWlcDQBCnkDghTLJt8s6RbTm/dh8JGyhlDQLQu9tRlKS4zgw7XokqufMqUqE0mo5NG5dMVEOtFxUh2CG7nc11oqfrVMe3lATyC361vL0ahdh7BoZuSssKWUlEYOSEKFU9sHrTb8e98i3jK+1Vjg9o0m/HyWmBC0DCwpsIdvLg0W+sm48SX2bRra6w1/7n7PB8NG8xlzFBUtwdty6ZFnO6hireSFDbn+IcBIUpr11QzNcPRATOB5iYOhuO6yuAyw== 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=cCtuE+UCAQjSInpef+rs5kwlWw6wbPSZJ85LhAy5n3M=; b=voPCU1ntE0qsHgKG/9brWVrL51cskVXGzx/z0ypH9zoKYK+JbzR4dsfeoUWBgcAMSNoMcEv5moTEovS4DJcHYNPdMDQW0wo9HeYWVCz7VWsx8amLR/5kP1KVckTtyCLRVvPVRZrFzIdB0wVPQn2SL6hNKufsoonWTtZt/gpaO1kUwdtOpU1EsHER2akoMfgiPoqMImvCnAsHfbX6B0t/rLnIYIhIucPPqEteJvp+5BkkPrkzvXl62LOx6um18Rqm10X8f6OH1U9agBFG+w+H8HbX5pPtmzMJPJIkuVYp5lCQOJoU9LJHmX2sU60QCkO4s3BQ1zvlkJ+mkUzG+UVRVQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by AM7PR04MB6997.eurprd04.prod.outlook.com (2603:10a6:20b:10d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.12; Thu, 12 Mar 2026 06:57:28 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e%7]) with mapi id 15.20.9700.013; Thu, 12 Mar 2026 06:57:27 +0000 From: "Peng Fan (OSS)" Date: Thu, 12 Mar 2026 14:58:18 +0800 Subject: [PATCH v9 2/6] clk: Introduce clk_hw_set_spread_spectrum Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260312-clk-ssc-v7-1-v9-2-0a9d2e188d9e@nxp.com> References: <20260312-clk-ssc-v7-1-v9-0-0a9d2e188d9e@nxp.com> In-Reply-To: <20260312-clk-ssc-v7-1-v9-0-0a9d2e188d9e@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Cristian Marussi , Sebin Francis , Brian Masney , Sudeep Holla Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: MAXP287CA0017.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::35) To PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|AM7PR04MB6997:EE_ X-MS-Office365-Filtering-Correlation-Id: c3839c2a-dbf6-4022-324d-08de80049f43 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|52116014|19092799006|7416014|1800799024|366016|38350700014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: NQi25uCMiFryvjhAmcPXVoQ+ZC1jXmcGidwPcLgYfHk/0n+60wCQp3NFsCZIdsxVIxyVVULWu3mTgzDocRuJEnCCWQR9FgZ9yHWqcM7vksT4dF8qZ9HD+Kgn/fn1ZvBwOgzAi4XFh+X+j03EFRhJT2PKoWCchl9d0Aovi7yvjvtGgmLI5HMkHzHTewycN/paVKC62yScQ6xI6Z52+R4Y2mlEkF2CjVvPurhIpSgURtS4wpDuBrhxB+paDKz8lJK/j0qRECBfat0PkUUidm1F6X1U9YE//qYYi0Z0QM1+hHQVcOMSauIyhB/nxIOLTlfFqiPigiSuC7ndFiMSripjVTxP4+kJfu8rKCjPQfILL5W+7MCNIompx4Ui2Fb9FhgNJe90ddK1QFrpCuENYHzAwhRkUFRhINMm2a26KtbXi1zD3XzZU2YOGhBBT0D4M9HOq7MyuTwjQLm6YEN6609m3/tNYyNZFMggaQb9RJZCtIIWJKNHY4Nw0JgOj2BeiRR+Vyuz9XCx1xF5yajjGY6IXaxdn3ao3d8yjvv/L1fmZTQU6H5UOPGFN8eJnNd3OzOV4LwQJep5ZFHPuV/PVT98ROu9AFUnd7Ic2Lpx4sUwyB8mzuXvY9Gp3KhmxZbts67HmHz03Mota3iu+utXrrmAn4HLleHwZAn96W3uwX8dGIMjWYnN7XjiEcNsGr5JYMDzXmQZO2mgldfmqPsR2EmF1Hs87j3doLoFF2jUVUiJiqlXjc2bWmA7u1p/qy1cFJhyOlfzQP6hoXlXc0ou9k9GPQfWk+FO5OfQ8haYvy9/so8= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(19092799006)(7416014)(1800799024)(366016)(38350700014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?M0Y2SFRpQW5ZMFJDTXN0a0pRQUFGSlM0RHdxdWFNaTZ1bG9oV25tUGFrN1pG?= =?utf-8?B?dGxLbk1TbFBrdGJtSmJYcTJ0c2M0d2RYWGJmaHdudnlnNEo0UXRBbkFaUUF2?= =?utf-8?B?YlBld2NRR1VRaDRocnRLQS9uSXZMbi9YbjFiT1JiN1dPaDlJMW1LZjM5Nmg2?= =?utf-8?B?SVMrQ1VZbHRQVWpNMHRXVUdxd3N1THFsOHk5SVI4Zk5HWFVubGhJUDVtVW5Y?= =?utf-8?B?dVlrVG1qTnlWb0t6N3VTZnRWTDZrK1QvQkFIYWROcm9ZdGgvN1lQdGM2OHpk?= =?utf-8?B?dlRUWkNJK28xTGNPY3U4VU5xOHlQcC83ekxkK2M4ZXRmeTRVUDNJdUFQNHha?= =?utf-8?B?S1Biako5azdFamx1WHU0WHNXZ1hEWDB5Yno0OUZKQ0k3RGFsakF4Ym9yM1Qx?= =?utf-8?B?MEtDL1g1OCsyWlB4RTF0U2h4M0RFVkpoVGRJN3NzeElFVm5qVGwweml1UUdG?= =?utf-8?B?a3RHUm5WSmNaYkJXYjN2QkZBY1V6UnBTQTVmYmxlc3RSK2FwTVluOTBZblhJ?= =?utf-8?B?YWY4SGdzTm9TK3hBMFpKY3J1Y2dWNTdZd3FyaVZmYnU5aERsU29yMFFTdy9w?= =?utf-8?B?TjVMVitUK1BLeWVzNFJMdnJtR0JzVTdjYmJpK3dTOGk3cTlGdHd1d0pZSDBR?= =?utf-8?B?TDhhRVRBQ3lQQjFQUjBPWkJYaFozWkd1Q09uQm02U29nWU9RZDZiRldmNU5L?= =?utf-8?B?UUdPcU94cHdvNDBQdXhsOE1qUlZCUis1WTM3RENnTFNkT2dRNHhnU3pEbW1N?= =?utf-8?B?eWdtRERYbDVkK3RCZ2dmZlRYcnBQbWZMdURYNElONVc1LzA4REs1V0FPVzlP?= =?utf-8?B?ZTljTTE2VVNHS3lkTGdXWkRGM2l5VFFCWmpUT0NsMjVzUzV0Tkl5TXZvV1h3?= =?utf-8?B?cWxMMHhZcWZrWDZ3WCtvc2YrVTRWU3pCaHl4TEY4TmNZaEtIRWhZUFZYTGtF?= =?utf-8?B?OW5mOGVSKzlIOTBBaUpHK2dXNjFMN1J5NXZkdUtKNnFtVzh0VlhhZW9mNU1X?= =?utf-8?B?WmtEM3JLbU1UWis2L0hzMFVUZTYxOVhpT20xdTdPMVg0K2lLS3FmOWVNM1Fy?= =?utf-8?B?bUNBeEFlaldQT0FHTHhNYTJTRGI4ek5NQWR6WEFtR1RMM1NYc2ZVZTJseW55?= =?utf-8?B?UHZLTVdLazAzZGN0ekZCa25lVHJTaDFkWHdtdGc0ZW95WG56VG9TRmZvM0NP?= =?utf-8?B?c29XTDdXbVF6K3luUkhmUmthRWZMeGVnWVUwQzMxS253ZEVpRTh3KzNza3V2?= =?utf-8?B?MmpXdHBTS0dUemR1cHR5VXZzRGRXODBtNityVWlHK2p2RDdlU1VYYjd5TVUw?= =?utf-8?B?SExqeUUrR1RvK3Q5YjBiZFpCMzBYQk5rbUJZcE4rc3BZSHhrbUg1ZFlhOGIy?= =?utf-8?B?aDhLSkJEMHdqY0tOd21qVnFwdCtzZkI3bFBSL1BBNi9Sd3hwUk5ZRGpZM2dX?= =?utf-8?B?Y1RWby94aVI3YTh3eHE4VlllSm5jemZ3UVovSWt0Sy9VQlpseXIzYTYzK2RY?= =?utf-8?B?bEROYUFibjA2QXZGNVIwQVJ0aDVvL1JidGkrTVBBTjliK3VLV2tVV0tKQ2Iw?= =?utf-8?B?WDdIcDBKMERSZm81c1l1eitHRUpLbzJGUjZLYUNpb1I5SHFobjRqNkFhSDVp?= =?utf-8?B?ZkgxT3p6RHFkeU5oNmZIc0tEZVR2QWVYeDY5cmgrNXVnamplN1VNNkF5aGth?= =?utf-8?B?SjVKOXVzZzlYVjY2ODUwRExjd2F2d1BvdGhaNVlqK09kSVJrVjlFSFZZcnQ4?= =?utf-8?B?a0V6aXkzUUxSL3BvSHBLekdMT2kwNHJQYVViczlxSEhCZy9pK1grbFFaWkNO?= =?utf-8?B?MkVVTWdSY3Y4cGRqZzRQc1Fjd1JBbitpYVhvY2Z6YVc1dlVaTGJmNEVyRlZ1?= =?utf-8?B?QVVtRStDUU5aTVloNC95RVVJMG1yMXNRdjExTGViUTRLNW90ZnE2dkc3TFFw?= =?utf-8?B?eG5sVDBMWlZrT0Y5ek9DNVBmbFdiRmsyWldYbk80RGxyMGJOUzMwTUN3REpD?= =?utf-8?B?b1pRamR3NGdBdllUOU10NC9TRDlVa01sVFB3VEEvSW0yVHFhSlAvKyszRDBL?= =?utf-8?B?bGZvWGlJS3pPamZQYXd2czVLN1llMXgzcEhEOFMzZCtoMlJZREVSMmFyRDJF?= =?utf-8?B?TC9DbDBYckJScDh5ZDhSc3RvZkM5NEdGOXBUeTByZU1KY2ljSTNyZWZQNzk1?= =?utf-8?B?UVlTV0JnWk9tYTdtZ2Z2bXkxdmsvYkJUWjFiY0RVd2NtTCt4MW10STFJemQ5?= =?utf-8?B?OFpEMWx2b25vUFpsMkkrV2lkZzBZdGEzbnZ4UmlrVjNzS3NvRVN6aHJjNG4r?= =?utf-8?B?SlFNN1FmQmVtY2pFWEE0VzU3OENpUjRjeFg0aDhxU3VhTktDSjhUZz09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c3839c2a-dbf6-4022-324d-08de80049f43 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Mar 2026 06:57:27.4435 (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: hFzBDq3GjJ1o88EKtEhjQVSMEtrqxBlj4EWokmS/dvDa7dOXrVJimOBrFQejwtFcT8fYfbz2j158L5z5mKultw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB6997 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 47093cda9df32223c1120c3710261296027c4cd3..3d9b2e2f7a5b269e1f07bdcd410= 1799ff6839441 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -2784,6 +2784,33 @@ int clk_set_max_rate(struct clk *clk, unsigned long = rate) } EXPORT_SYMBOL_GPL(clk_set_max_rate); =20 +int clk_hw_set_spread_spectrum(struct clk_hw *hw, const struct clk_spread_= spectrum *ss_conf) +{ + struct clk_core *core; + int ret; + + if (!hw) + return 0; + + core =3D hw->core; + + clk_prepare_lock(); + + ret =3D clk_pm_runtime_get(core); + if (ret) + goto fail; + + if (core->ops->set_spread_spectrum) + ret =3D core->ops->set_spread_spectrum(hw, ss_conf); + + clk_pm_runtime_put(core); + +fail: + clk_prepare_unlock(); + return ret; +} +EXPORT_SYMBOL_GPL(clk_hw_set_spread_spectrum); + /** * clk_get_parent - return the parent of a clk * @clk: the clk whose parent gets returned diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 630705a47129453c241f1b1755f2c2f2a7ed8f77..9ec25bbccd613eafd77aca080dd= 7f51b1bfdadc1 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -6,6 +6,7 @@ #ifndef __LINUX_CLK_PROVIDER_H #define __LINUX_CLK_PROVIDER_H =20 +#include #include #include =20 @@ -84,6 +85,26 @@ struct clk_duty { unsigned int den; }; =20 +enum clk_ssc_method { + CLK_SPREAD_NO =3D CLK_SSC_NO_SPREAD, + CLK_SPREAD_CENTER =3D CLK_SSC_CENTER_SPREAD, + CLK_SPREAD_UP =3D CLK_SSC_UP_SPREAD, + CLK_SPREAD_DOWN =3D CLK_SSC_DOWN_SPREAD, +}; + +/** + * struct clk_spread_spectrum - Structure encoding spread spectrum of a cl= ock + * + * @modfreq_hz: Modulation frequency + * @spread_bp: Modulation percent in permyriad + * @method: Modulation method + */ +struct clk_spread_spectrum { + u32 modfreq_hz; + u32 spread_bp; + enum clk_ssc_method method; +}; + /** * struct clk_ops - Callback operations for hardware clocks; these are to * be provided by the clock implementation, and will be called by drivers @@ -178,6 +199,12 @@ struct clk_duty { * separately via calls to .set_parent and .set_rate. * Returns 0 on success, -EERROR otherwise. * + * @set_spread_spectrum: Optional callback used to configure the spread + * spectrum modulation frequency, percentage, and method + * to reduce EMI by spreading the clock frequency over a + * wider range. + * Returns 0 on success, -EERROR otherwise. + * * @recalc_accuracy: Recalculate the accuracy of this clock. The clock acc= uracy * is expressed in ppb (parts per billion). The parent accuracy is * an input parameter. @@ -255,6 +282,8 @@ struct clk_ops { int (*set_rate_and_parent)(struct clk_hw *hw, unsigned long rate, unsigned long parent_rate, u8 index); + int (*set_spread_spectrum)(struct clk_hw *hw, + const struct clk_spread_spectrum *ss_conf); unsigned long (*recalc_accuracy)(struct clk_hw *hw, unsigned long parent_accuracy); int (*get_phase)(struct clk_hw *hw); @@ -1430,6 +1459,8 @@ void clk_hw_get_rate_range(struct clk_hw *hw, unsigne= d long *min_rate, unsigned long *max_rate); void clk_hw_set_rate_range(struct clk_hw *hw, unsigned long min_rate, unsigned long max_rate); +int clk_hw_set_spread_spectrum(struct clk_hw *hw, + const struct clk_spread_spectrum *ss_conf); =20 static inline void __clk_hw_set_clk(struct clk_hw *dst, struct clk_hw *src) { --=20 2.37.1 From nobody Thu Apr 2 01:29:07 2026 Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11011064.outbound.protection.outlook.com [40.107.130.64]) (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 123023AA4F9; Thu, 12 Mar 2026 06:57:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.130.64 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773298659; cv=fail; b=EyrdE2H30htB4QrU0SdiqitptYPxQL84sLUXTQT11NSNUhwXT4eKeL9icEF8nO/A2zZmxbFLWaOQVKMSINFpEzdg8PnAYPSdFnAnmXEIpnCY2rsSaVhH35PZcr4OIEBg9bvHL6zAa/7c72bpj8RYhuU+Hh0dxAULrH1MHLtsJK4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773298659; c=relaxed/simple; bh=1JZAAhLgF2GAQowtA60Hzc13YTUbGezfQ7xImp2KZx4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=uQGLoHurqyR7bHEnA+3ta6SS2Ev4tpe3tApgbDbEeU/s69o9I8IgF1otzyHX9tvkpxJtPsCqGZm/I9ISYE2pqzAXcGAyJhLBBjSVO5bS8OW7qcnmsbVOURu09bvtLYPfoa32R3pnyHnIdFPwaXuSx8uA6dXjzz4xKjTVCnbFD58= 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=bhT1hTYD; arc=fail smtp.client-ip=40.107.130.64 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="bhT1hTYD" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vN0OI2j5Tvg6QnAsfGesuAn2VhHN0cp3t2DZ+YkG/0vofYdrfKOlzXidFpiZRVYp1Gj4GsUpD/drriOWqUnsH7Y3phqSTyFBE6Mbq82Yn9QtWm5V5y6i4iuqeuu21sEeqzG+xs3QC1b9dTCZzxQhBeUU2NGo852j5lpGV2CRXUWNgOBY2AnFYx2ela4Ql9YVE0lN+6rXET2bnIYiOUiVC86OghJpqCL/ROIYvjFUdsZJdH17d1HjyPOGWDrfDY1UCgZLWdFINHA9pPgPvavWs433Vu+S0niX3fJrXr8aoBSJR1teKSAKr0v746iMu0xv0+i6qAE2S9nuAKN0lfTcTg== 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=8QKLClw6HqVdnkiQD6OOrbZYI51J0d1Os9FMuxngI4c=; b=rtBwmhI3f0iR76vY5FVpW/nGYfXb34BoJMOzDCYQ/nEg1y0Ei1KKIFnlUMMSioRuKObKXRi7pSSmfP6DjIrrELdGH4RmPtcqJBjGwBGMibe69RFtOXACFvVRyrtjkLiINsA8jsNZM8/nGmVveL4oAfQVU5fvii6eeMRk3+FUe0/RoB9EkOXvBkgwfPH0dQYz/RljIvoyLkBcVeQw3xHpq5VcesJy/zC/R29YW4ts+4d9S2ypyovXPZ/KdBqYL6b5TzFyFnp1C3WLts7D22uftw6MLRQz/qUbQqXCD38uEYraRXX58/Eeg/MA1Yxex6u7ul4TWBbuiUeIHWt0VzSilg== 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=8QKLClw6HqVdnkiQD6OOrbZYI51J0d1Os9FMuxngI4c=; b=bhT1hTYDVEvqY+HBsZ+8vBkJ8wt5sXOF9vznHyVyqvZRFwuKvOcrIFu5fCpFnb7jeGXmM9XSIWDsJvSFqZ2F6onBbv0s8+vNv55CfHcWY+tuX0UgKSp+Ov+zbJb78ZDiBoSliNlwFnUYm8fWj/DAfTZxbm5IvECv/QzKsloZ6JQlM/xe2SdPXZxpDR2znoYUHSoV5UfKhmwjxMxE1/N2Q2CnR9ZGR88NnycTT5fUsuQYxKPbzydUKmOq2VYO6KEcXbyn2QK9bhY7R9uucdRQZTfn0i18j886ShN054NokPLNfI8o7IXPBSVRkiSLKkIgl7jL/Pm1PuAE1BBIhrsJpQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by AM7PR04MB6997.eurprd04.prod.outlook.com (2603:10a6:20b:10d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.12; Thu, 12 Mar 2026 06:57:32 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e%7]) with mapi id 15.20.9700.013; Thu, 12 Mar 2026 06:57:32 +0000 From: "Peng Fan (OSS)" Date: Thu, 12 Mar 2026 14:58:19 +0800 Subject: [PATCH v9 3/6] clk: conf: Support assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260312-clk-ssc-v7-1-v9-3-0a9d2e188d9e@nxp.com> References: <20260312-clk-ssc-v7-1-v9-0-0a9d2e188d9e@nxp.com> In-Reply-To: <20260312-clk-ssc-v7-1-v9-0-0a9d2e188d9e@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Cristian Marussi , Sebin Francis , Brian Masney , Sudeep Holla Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: MAXP287CA0017.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::35) To PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|AM7PR04MB6997:EE_ X-MS-Office365-Filtering-Correlation-Id: 6676b693-8a60-4a4f-8dd0-08de8004a207 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|52116014|19092799006|7416014|1800799024|366016|38350700014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: 9G/ujYrfbXp5RVe6pUczBm6Nr8yVgxa1+dbb3Hh314roLLQoxHpu06EeED/DwfivviOLaC/iXYDgs/W8cxyznB38nwUScyUe3n1W/skpzU4ZH2LD1VVdl1aiWLtrNng1RLEfikWn3I17Lf3gUf9TTszeRgLJFoRd9ZJmZYYmJhyDgY8DLXuoX8mgzIGZdPw52WPP50GkniGrqd2f5u5cyNLd4N299JJxo6gNH9NroB97uBqhNi85GFxL2OMFYZRQnKmDCRK5FfIMR38dBuBEeDHvns48wXXNKI4a5h9lpe5mAWnJ/HeDFRAFKbFFgwgrTo36AIzVyZoxLSWaLgv1FaFu33fDNufgbZimoWgvXTaVdC45C0Vj75ZoCxDPpRebgu+2hhoEkzeT0oIwPJFt6DC6sCzkE5Hu31y97KY14wF+iemhkymyXaaYnEFtOULNGq08lXF4zw+sx2CTsChs6hnRrdYtjRU1RmjrjejTS1G/fNSwj/w4j+ljl/CctcTcvx+iR+UaeV6cJAVx+4PUVpS6qLqm5q732vk1EYuRUpUc3NfUGfejpp3jbVHSVf3wLWKoAaB7z6BBbrpcoEsTsu8sI7hRKxXm6cTIwHA6dbeJyGadjUB3YYL4qKx5BKb/27l9igP4DyZLDwzXCb/UHtHmMnQo4jZnB/UmvNBg57kC8UyuDvVsBLy92MZsAHESzVUlwkBOhBXdtACrY1VJcos+8VX70pGPhR4DCX+5tiFKlE0AM0ql1SdbiiMwcxZ/0Z8Lp+YeeKuOtU8oWvdz/yo+uUS6gu6JuHerww90OZI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(19092799006)(7416014)(1800799024)(366016)(38350700014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VHVCQ3NQaDJseldPNVpDWGJJemhsRmJINWxuTmxkaXhISCt4OEpJOCtDdGI5?= =?utf-8?B?c0NJd2xLeU9yUC9ZcXFUSFUzUGx1UEJEalZaWXEzZzgvZGE2dTZZckNCYko4?= =?utf-8?B?RlNOdEtHK1FacEJGMDdOV0EyNm9YRWdyYlJyektZZ1l0elhQVHE0V0VxOW9C?= =?utf-8?B?b3A3ZE1uaHVNd21TdnVUTnhjdXhta01JWGU1cWxMN0Z0UXJZZnVpam5USExQ?= =?utf-8?B?WmJOb3pPQXBHSkFRd2lsMXRKVlZQQTJxSk51VWxwZGV2S2R3ZkJSK0RQdUhK?= =?utf-8?B?V1pXaDRqV2JISEduWWtrVS91bTlkRGFSN2ZnV0JRcGZjUGZXOXpXTHhQWVZY?= =?utf-8?B?VVhpZFhXcUtOTXd1OVluSkxoY3ZybHhXaU55N1QxTmE3QUVlNUt0OHpUcWp1?= =?utf-8?B?dlVISlI2WFUzRHBZRnE5dGhLYW1vK29VQzFubGpSUE5MZnlEUVdBUGswbEFn?= =?utf-8?B?eXRwRVZ3ZkJGVmRQSWkwbG40ZEx1c1hWRk9kNXU3TmF3MUZWUzZ2anVHbFZy?= =?utf-8?B?emE0ZXZ5di9NazJkcmZiRStIYi8yaTJKaFhYVURlZ3Npc2N4RHZoSWRreTFz?= =?utf-8?B?Snk1T0t1NXZRbG9EM2JyZDNMSUxYOVllc1ZVOFlNTXNSdmhPejA2TFFjQm9u?= =?utf-8?B?a1Y1UGtnUjdGQnRvWUJkdTEyd3F4RW9mWjE3SXpFb0hpQWlBZUx6cnA4bFI4?= =?utf-8?B?Y3JXRkZOYlNIOTRlRW12ek9JZ01zcWpYTUR4S01iZmdvQ0tVb2Z3WFE3WlRC?= =?utf-8?B?bWhRdTFJMDVjOUJmVmZtcFJOTTNEekx4L1ZqTmZxb2Z4TEI2ZnIzZGVXQlEy?= =?utf-8?B?ZEZFRTVWQm5yTjFnZTN4ZWRXTHFiZytUY3J3bkZhNjRpblN5UWJDQ25JNzQ2?= =?utf-8?B?TjQ3QWJKcjNybnlETFMwa0ZmekRmWUFabjhIbXpTcHNIcHB3RFppdTlxSTM5?= =?utf-8?B?WldPSFVEZkp1eU81TDRRZ3ZsdHlBTFp2c1hscGVLVC9vRFNhUTQ5UUp0RXpS?= =?utf-8?B?bUVma1hrY2EvYThsRkdRbGN3V1BXODFUMkx6czk3WC82K01NNG9mSUh5M3hS?= =?utf-8?B?UzMwYThpNklBR0lZUzdNajZ5RVZJZzROdDN4UXZQcmFlaUNJektNZ2o5ZXNo?= =?utf-8?B?emxPd0pERWgyN1V1MkROOE11bVVBVGd4VDZXRmlDRVhPYlVoRGJjd1NEWmJV?= =?utf-8?B?cFlvQkZNTXhtZUJnY0Q0OFNZcnNDSGRTSkRrOFlNVlZQNVFwbTBBVStBakc5?= =?utf-8?B?d0pSWEM1VWVaMjArdUhjSmxiNHdGajVRbTFuSFdmb28xUElEdGlXaUxVQkdv?= =?utf-8?B?T3RSMzNlbVJibkMwYXFrakRINnRUWWVJdjhTdW5oNXdaNTBsalNMZlRCTTZ0?= =?utf-8?B?bkVGTjFrSXI4TFlaVm5KMU51TG16bFdsMkMxWER4RENxMEs0bTU1djFTVE5a?= =?utf-8?B?VDRkMEtQd255L3p4QjdsUFM2UjNGSXVRbXIrWGZnRzZJc0tkWExUamxzZHJS?= =?utf-8?B?Zkw5UTkwb3pqajJKWnlyZ1BuMklIcEZieHRNanZXOWkwV29vd2Z1QWJoSVp0?= =?utf-8?B?bUpUU1hIVGlpbFczb3ZCSVNoWHhBOFNZQ213dmVPNXhQZFZYcG9obXlkUi85?= =?utf-8?B?dzhCUEtTaDBPNk5MY01Rc0tGMVdBUWVWaTdycVVsbWhoNDRDZFNEa3dEY0RZ?= =?utf-8?B?RWlyaXpTZGpWRHBOeTNkUnhabEQ5N0JINVJ4TUpmQzgyVjhiZlNFcDl4TXdt?= =?utf-8?B?djJUdC9KNmxiTHovTnR2RFZkQ3FMZzdLYkJiTVFqOGN4cEZyRm9xRXZsTGZt?= =?utf-8?B?czBuMCtuTC96NjFYZjdNTzRhVjhrTGUyV2EvcS9hQ1BGVHVQRDZLM2FMTVow?= =?utf-8?B?L1FrVE9XK1FEV2tFRG5nQVhET093OGtONk81N1pwaWN6QlVoUkRzU1dBRTV6?= =?utf-8?B?TG1HYUEwYnFETEd3ZXRTaVNnbFc5blZlTllMamtSN2RFSnp6RG9DdWVFZmJE?= =?utf-8?B?R0pBR0NaZzcwdnpwS1RJakltTmZHNFczMjNpbHdqQUk5bUtlcjYxNk42R2JR?= =?utf-8?B?eVh5aVB1V0JSVlBVYVpoYnpzVmxOSUxrSVozZ29KMVExL1FhN0ZPM0RKY1lk?= =?utf-8?B?blVIODdqUEhRZEZlWHgwWU5NWm0yNFF5RXhpaUIyamhiK05tK1NteENJazhI?= =?utf-8?B?Rlp0MUMxaW8yeDgzMmhWRjF2Vm5vaTFmY3VpbzhMaWI1SUZoRnNGeVFOakM1?= =?utf-8?B?UURmZEFYR3pYczJ5UVhMQ3BialVQcVFueS9GUHd0RnFIWW44QitSTWVjWjRk?= =?utf-8?B?YWoyUWNFajM2OXVXcHRVL2Z5eENKQVIyd3l6UFMvdkZzd01rem9ZQT09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6676b693-8a60-4a4f-8dd0-08de8004a207 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Mar 2026 06:57:32.2808 (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: XOtp1HRP/z+KgMHgQRTOOAYECMbCvIufaZQr0GxG8Bs724aiMnrClMF3p/xlB2dg4tKgRoF0qDN1yI2TXu2ZsA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB6997 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 303a0bb26e54a95655ce094a35b989c97ebc6fd8..550b8ae375a2cae8aa6ca221527= 53ce8d95332b5 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.37.1 From nobody Thu Apr 2 01:29:07 2026 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012031.outbound.protection.outlook.com [52.101.66.31]) (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 E29883AB27D; Thu, 12 Mar 2026 06:57:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.31 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773298664; cv=fail; b=r4c8Ifw1fTt2HvormotQZCq+Spysb4ocAxzuPY11ujzV9bTpbeDjbGjpby1KSAISRunAgPUuVttjaV/F+ozNyTTNPamexOy03mADs06Oyl1TDj0CoCQXm5ZRqEFdOeEbYYkHak59c+bPf47m+qIr9hpX1BMB7kr7n5x1695Y9cQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773298664; c=relaxed/simple; bh=3GdO4Uw0KcxJMmUaNJ3OU1rxgsTRX48strrNm8g6HWQ=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=Wn+QzyI+EbkE/a1Oy2UdSPr7F4zfd84xPOcfA0QhbJvsXiuWWF4ZVx7FF1C4i3CtZDzqtyQ7DtOyVYdHdU2NEeeEJ/pR1bV29guH6JcovhBPKmMgwmx0lHIxlcWES76PND0tzKaQBJWVIqa/ABUc63EySLDu8odBkqsr5awRfZo= 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=oXAsEe1w; arc=fail smtp.client-ip=52.101.66.31 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="oXAsEe1w" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rHW2BwKmrr85J9O2Z3PMustOCHPw34/FswhmOtDxcPDeOTJ17RLhXVU9lBKZGDLqT/RDlfStG+Sy3veSDVQLu5DqJ0mCp517HrapXa7PLOR86h4+b7fCh49la3Z/X3sXhyi2TeBhf1rBPucbX2pQtbNyYUGIB68Ja0gHj+GpzSNwboCMPG1BTzS7WZfr1sYaJJda+HPGG6r+x7+H0aCsxkcL3y59H1Ni78665ahOQCBi1EFBCYyf3Eb+fPk9fAx9f3nL8luG0XmAZIL4TL4hHFHhUJUKJKHR1eonsreePBNoUNUO+wGYDAqfG/PSjgkPKsuLwanphBkgzMveLEQyFw== 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=qc2w9iinmz1yFeF0TX/d38ehvC+WZDgD82UmJToiBv0=; b=cXsBFIsjI3iXYOUqPk5JgsD7hPCwPiFnkWIWJwjb3HK6ai/pz/W0morA/j8kQDVZRSvk0uExNUqOuCJ6G6JjT/GGVu/YMpPlBH0/3O0cVBMRpwNNAq0511GkpwqeKst6ss5Axm5cPwGDRE7mGDqsRuNrm24h1DR9md7g3IHHnFb0fwtE3OPeMk9nPsYbL/fXnUhsYw1v7rpNPA6qVs4WMZ9qARzqGzqGWeOoQZq6QTDY7JtS3/Ts2UsEWnGimv6TMONdNunyv3do2pGQamO7f0sZig5ZbfDm790tHXI/mNPhCq0FgVDeyP3drNkmAFe0yAfHHnxe5zKtWHbXYLBj3w== 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=qc2w9iinmz1yFeF0TX/d38ehvC+WZDgD82UmJToiBv0=; b=oXAsEe1wm+eBflAGjDJA9dV0bfSnDGp84LQT/YIVQ1ANEpP6I7HF6ieYgRPT/TPZf0fdhrx7KbhMn8iSwox9rPahDabvA/hh6jrDYZNf/BWVkuty+hIF9KpT1lssYzl8LQpDs2EK4ZplUxygckZ2oWS/kkBx/WXpAXRSKsNYNg1qHH6Ny4G8kFPi0VfCy/2pNADaF9K+xodxHrR9AQAVRGaItShqof1KiMeMsL8M/WWxPqf8xNBVblHa8C5L7JjG1AkzPEcqxMDNpMwkQW28TbnDu7t2Z+aHlKlCHUkHumZoIn/vB2J1Y4u0lxh4HtSzIdC1jks4izyhSSYYD23BSQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by AM7PR04MB6997.eurprd04.prod.outlook.com (2603:10a6:20b:10d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.12; Thu, 12 Mar 2026 06:57:37 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e%7]) with mapi id 15.20.9700.013; Thu, 12 Mar 2026 06:57:36 +0000 From: "Peng Fan (OSS)" Date: Thu, 12 Mar 2026 14:58:20 +0800 Subject: [PATCH v9 4/6] clk: Add KUnit tests for assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260312-clk-ssc-v7-1-v9-4-0a9d2e188d9e@nxp.com> References: <20260312-clk-ssc-v7-1-v9-0-0a9d2e188d9e@nxp.com> In-Reply-To: <20260312-clk-ssc-v7-1-v9-0-0a9d2e188d9e@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Cristian Marussi , Sebin Francis , Brian Masney , Sudeep Holla Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: MAXP287CA0017.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::35) To PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|AM7PR04MB6997:EE_ X-MS-Office365-Filtering-Correlation-Id: 60ad1852-af69-497e-ab15-08de8004a4d7 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|52116014|19092799006|7416014|1800799024|366016|38350700014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: xRyBZdQQk+Q6sljdvgR9jbdgXMYzLmh0jByQUC91SZuZn6TPukA3eareTlWYrchRm2+aoGzwXE5kEtHmQUBRhK5V9dsLN7EI7NtJlTKnBL5JJglSZcLogRKl3gX96OnPWuweJyB9G4eKrtZuVzLf5NBLDJFgudHt3H9z5pc3L0LkqdAESRraA7WSl2GXp/VFN2lj0Kr0TNNJyFXucgGt3KAb6iNK1IeXPaHe0JyWlj8SByqIsMBPcEc5MA7Rs2qgT49JGQ00Jvh32iIb3RAsxTrPh5WoGZjzir+VC3KVHTm8YtpCr+l5fB5OCIEkfXhGubwYOHVlU/kKEb0Ouh3UiloTIeMbplr1S3zsjm1ljXq/6pgZPNLWgUkaVLwJtmvlNpZQPkqFgzSI8gIHEFRCVq0c+eQCVIqFPutbSNT23VkkcZ1ViEzgrDa4Ecj7Y64gMiERrDEX1EOOZaQIdRH37P2zKKWTjeYBdkpraX2B/69jTnFtrDye1ioueSMR+sW2D4U3EjFx7R71DGOZHACjJLDZ47RNoScmcYWXCNGTdfDQ3suylb2U/YOLn7C687xpvUwjF9m0ek9u7ug2IUi/s5gtAXJ1EQhge7MdOHlh0bjFlU7ALyYshrqO4pTi1h4JDaiOENeaH1ibAV5cZ9v72VB2ANAQYx26SQH/dVLxLP7h9y69gRdR2DTCrL4WCqcdJeExcU5fxfyXeT/oujtHuOEfbv2NOf6j4vFIslXzk8zYp5Vb+QdaAAkJaCk+soSQgh4yw2T4leIUSCYLh20Rr8Os6EZoCSQKY8eTxjZjuoU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(19092799006)(7416014)(1800799024)(366016)(38350700014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WURla0dpM0ZQM0tMRXhqUVdFdWlZZXg5MVNYWlNvSnFvejJ0cHB2RkZBeHVY?= =?utf-8?B?ZlZGQ0ZLeHFxaGRmVFg4TzFOTTVYOS9NMWo0ZzB2YVhiNDVqNXlGejkxdUZP?= =?utf-8?B?TGREdEJZVk1yYWNFN1ZETldoeVB0aCsyWmhXZDlNSDlFVkpJUVdVYThsWlZo?= =?utf-8?B?Wm1tOW9xbWExemljQlluWGxRc1NEdkJJbkNUTW55THhJV2RlS1VWQ1lEYUsw?= =?utf-8?B?QTFMdlkycnRkaXBpcjZNTERueFRWdUFPWDE1TjZyVG9nem5ObDlyaUVEWDlX?= =?utf-8?B?SFIzUzZoUDVjT3ZtaExYdGNuWmNoTWE0TkFnMHlrclNxWTd6d0JSNlFrRVgw?= =?utf-8?B?TTlqUWh3YTd3SGVRbEhvYmtpWWltd2UydGNONVBKVi9tV3JveTd3eS9ZY3dl?= =?utf-8?B?Q04velg3akxWWjBsRXI0bWNFeUVPYXptaWpkSVBYTjlWNDMrWGU5eFJzUWhs?= =?utf-8?B?OHNLTk1IOXM4ZnROOW1HaXQxMlNlK1Z4UUE0ejl3dXNzdStyZTFUTms4SW5J?= =?utf-8?B?b2lIeVY5WWgzcjZsYzhWbjJSU201NXIzTlJ2MjRQTkphaEt5cmVXS3JRUEFP?= =?utf-8?B?TG96b3RncDNQdklhSS9nbnlObWdiK3o4ZmNWcWVpNDNXZnJJeDlGODUycDMw?= =?utf-8?B?dWR1djJFbSszckV2dFpZQm9rbjFzSjBSQWE3amN1Q2M4a2ZTb2tVSlh3MlJ1?= =?utf-8?B?bXlhWW1qb1NuT1pvaWM2bzZGSGd1UFVPTDVRYW1tYlNZUzJJRlBLUTRKYWFw?= =?utf-8?B?SjhYYXZ0MjJFWkFhZXJWVXpIaGE1Z1J6TWRZVWV4MUorNWI4dUFZZVJYcGFa?= =?utf-8?B?aUdhTG9LS255QUUrZFJsVTY3NkMrUlJocm1XcmxteFNFS2IyaTlGemk1WStL?= =?utf-8?B?SDlrTUdkd243MmptQ1pudXhycnAvS0MxZkJDZGhiZFJRcUFXSnh5Vis5cWVi?= =?utf-8?B?eXBNTWFOMUZtVTF1cWV3WG9TZTBHK2VBa3daWEowRnZEVkRlS3o4RkNNMXp4?= =?utf-8?B?NjY5ejJBZ2hkQW85c3ZOcTdkbUx2alNNOGFUazIzUXoydTFYUzdQTWxCdFdH?= =?utf-8?B?MTRIUTNQSUZ3T1FLUzIrK0lsQ0JEUFY0WlRrbk56cTcybmVyUTl6cjdLYTRw?= =?utf-8?B?KzdpMjdOQ2MybTdRbjh5eGxuV3Q4czlpRE9Gb1loOUNqcFJXNnhLNnQvbXZT?= =?utf-8?B?TWM5d0R0L2FWTFdrdS9COXdTSXJJMGU3N2ZYU3NIVm5FdWY0YUgzMEY4V0pr?= =?utf-8?B?OFdYR0xHNGkzY3h3UGpvWTZ0RWlIR0lHM09xMHM0MERibmdCYnVGZmpkaDk1?= =?utf-8?B?NDNSeVE5V1RMTHp5cmxYb0xhK1U4bFVyMS91cUJxcUVnOHN3RHEvRFpWNTJP?= =?utf-8?B?Q1lkWWdKUVBJTkg1STdCOGdTK1BXRTdUUkg5QXlQUjlxUjM1U3dSWjIyWDI2?= =?utf-8?B?bGJrcUkyOW1Delkxa0JFT2tuc1JldlViVkxGUW9lc2JUZFRLcndsMDB2UmxS?= =?utf-8?B?eHlzK0c2WFVwUjBWbXl0akVBRlhGa1kwUi95M3M1VHdNWmhqekZlT0dIYnRh?= =?utf-8?B?K25hVFdRY2NuN1ZxZGJKZ0FqSXkySUM1ZU4vUVdOdFFaQmdzck5UT1Q4Um9o?= =?utf-8?B?V0tuOFU0S29jSU9zMFFrd1pQWnBaRTZMbXlJbnovNnZ4WUxiRVE5Z1hOZi9B?= =?utf-8?B?WFUwME1WWUNkWUVMWitpK2xrNzdqWjM5ZXZEamZiMHd2QmdpQThMTWFWS2Rv?= =?utf-8?B?M3lacHBtZW5VYjg1cDdldGZENlFiaVlsNDhlVXlZOG5xMkpJU203dTNQRlk2?= =?utf-8?B?R3BBV0MrTWI2QjdVU2U1enBMcEUxTnlqbDRIZk54c3NYNE52anRCNEtqaURM?= =?utf-8?B?NCtjcWU2YXdUTTQwRUxRWkNkZzY5YjRoNy9ONmhreVdLakpBT21Bek5JVUo5?= =?utf-8?B?c0dnSDk4clRDMlhtVk0zZjBnODQ2MTdUcytsMVg1cFZDWUt0SzAxdld0Z0F4?= =?utf-8?B?WmF4cnRZenREc0tRWWJXd2JoUVBOU0xkSlJXT1k3b21jZ0M4VnY4dnJ3WWdU?= =?utf-8?B?RVB5YzNlaE5sblUwZFg2eFE2YnVPT1lIcUIrVnpwQnhBZDdmVU5sc1RxUExk?= =?utf-8?B?ekYzTG41K21oOFVZSnVMT3JHN29aT3loSllvcEFNcVgwaUF1R25sbSt2cEE2?= =?utf-8?B?R29DWUZGK2FWUWVtNmdaZmgzcmN1Z05tNjhhSzZBc3gvSnFic2VjNXJyWk5F?= =?utf-8?B?cWpJcW9tY2V2L0RPaTlvckFYQTc4UWc2eFlSVk1nL3ZEZlRyaUdFZnowTURk?= =?utf-8?B?ODc5bWg1Y2lUWGY1L094T1QvUkQxNUh6MGcyZkNTdkh6blUxTnhpdz09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 60ad1852-af69-497e-ab15-08de8004a4d7 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Mar 2026 06:57:36.8833 (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: sxBC9BvZUEjP38WWo0r08u27LpMQ9MyuygQl4dpBJD/+3CSShBEBmKYNmK8Z4DWMSVfWXRCFjL+X1p/E06aKJA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB6997 From: Peng Fan Spread spectrum configuration is part of clock frequency settings, and its behavior can be validated similarly to assigned clock rates. Extend the existing KUnit tests for assigned-clock-rates to cover assigned-clock-sscs by reusing the test framework. Add new test device trees: - kunit_clk_assigned_sscs_null.dtso - kunit_clk_assigned_sscs_null_consumer.dtso - kunit_clk_assigned_sscs_without.dtso - kunit_clk_assigned_sscs_without_consumer.dtso - kunit_clk_assigned_sscs_zero.dtso - kunit_clk_assigned_sscs_zero_consumer.dtso These tests cover various invalid configurations of assigned-clock-sscs, ensuring robustness and consistent error handling, similar to the coverage provided for assigned-clock-rates. Co-developed-by: Brian Masney Signed-off-by: Brian Masney Reviewed-by: Sebin Francis Signed-off-by: Peng Fan --- drivers/clk/Makefile | 6 + drivers/clk/clk_test.c | 121 +++++++++++++++++= +++- drivers/clk/kunit_clk_assigned_rates.h | 10 ++ drivers/clk/kunit_clk_assigned_rates_multiple.dtso | 6 + ...kunit_clk_assigned_rates_multiple_consumer.dtso | 6 + drivers/clk/kunit_clk_assigned_rates_one.dtso | 3 + .../clk/kunit_clk_assigned_rates_one_consumer.dtso | 3 + .../clk/kunit_clk_assigned_rates_u64_multiple.dtso | 6 + ...t_clk_assigned_rates_u64_multiple_consumer.dtso | 6 + drivers/clk/kunit_clk_assigned_rates_u64_one.dtso | 3 + .../kunit_clk_assigned_rates_u64_one_consumer.dtso | 3 + drivers/clk/kunit_clk_assigned_sscs_null.dtso | 16 +++ .../clk/kunit_clk_assigned_sscs_null_consumer.dtso | 20 ++++ drivers/clk/kunit_clk_assigned_sscs_without.dtso | 15 +++ .../kunit_clk_assigned_sscs_without_consumer.dtso | 19 ++++ drivers/clk/kunit_clk_assigned_sscs_zero.dtso | 12 ++ .../clk/kunit_clk_assigned_sscs_zero_consumer.dtso | 16 +++ 17 files changed, 268 insertions(+), 3 deletions(-) diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index f52cf3ac64fcce7e20f3fd91f837c5096375521a..d569d0ea3153efe593efbbd51e0= 22b2415234d3a 100644 --- a/drivers/clk/Makefile +++ b/drivers/clk/Makefile @@ -18,6 +18,12 @@ clk-test-y :=3D clk_test.o \ kunit_clk_assigned_rates_without_consumer.dtbo.o \ kunit_clk_assigned_rates_zero.dtbo.o \ kunit_clk_assigned_rates_zero_consumer.dtbo.o \ + kunit_clk_assigned_sscs_null.dtbo.o \ + kunit_clk_assigned_sscs_null_consumer.dtbo.o \ + kunit_clk_assigned_sscs_without.dtbo.o \ + kunit_clk_assigned_sscs_without_consumer.dtbo.o \ + kunit_clk_assigned_sscs_zero.dtbo.o \ + kunit_clk_assigned_sscs_zero_consumer.dtbo.o \ kunit_clk_hw_get_dev_of_node.dtbo.o \ kunit_clk_parent_data_test.dtbo.o obj-$(CONFIG_COMMON_CLK) +=3D clk-divider.o diff --git a/drivers/clk/clk_test.c b/drivers/clk/clk_test.c index a268d7b5d4cb28ec1f029f828c31107f8e130556..97113b61c2841701a44603ca993= 5638374000a2e 100644 --- a/drivers/clk/clk_test.c +++ b/drivers/clk/clk_test.c @@ -28,6 +28,7 @@ static const struct clk_ops empty_clk_ops =3D { }; struct clk_dummy_context { struct clk_hw hw; unsigned long rate; + struct clk_spread_spectrum sscs; }; =20 static unsigned long clk_dummy_recalc_rate(struct clk_hw *hw, @@ -83,6 +84,17 @@ static int clk_dummy_set_rate(struct clk_hw *hw, return 0; } =20 +static int clk_dummy_set_spread_spectrum(struct clk_hw *hw, + const struct clk_spread_spectrum *ss_conf) +{ + struct clk_dummy_context *ctx =3D + container_of(hw, struct clk_dummy_context, hw); + + ctx->sscs =3D *ss_conf; + + return 0; +} + static int clk_dummy_single_set_parent(struct clk_hw *hw, u8 index) { if (index >=3D clk_hw_get_num_parents(hw)) @@ -100,18 +112,21 @@ static const struct clk_ops clk_dummy_rate_ops =3D { .recalc_rate =3D clk_dummy_recalc_rate, .determine_rate =3D clk_dummy_determine_rate, .set_rate =3D clk_dummy_set_rate, + .set_spread_spectrum =3D clk_dummy_set_spread_spectrum, }; =20 static const struct clk_ops clk_dummy_maximize_rate_ops =3D { .recalc_rate =3D clk_dummy_recalc_rate, .determine_rate =3D clk_dummy_maximize_rate, .set_rate =3D clk_dummy_set_rate, + .set_spread_spectrum =3D clk_dummy_set_spread_spectrum, }; =20 static const struct clk_ops clk_dummy_minimize_rate_ops =3D { .recalc_rate =3D clk_dummy_recalc_rate, .determine_rate =3D clk_dummy_minimize_rate, .set_rate =3D clk_dummy_set_rate, + .set_spread_spectrum =3D clk_dummy_set_spread_spectrum, }; =20 static const struct clk_ops clk_dummy_single_parent_ops =3D { @@ -3097,6 +3112,7 @@ struct clk_assigned_rates_context { * @overlay_end: Pointer to end of DT overlay to apply for test * @rate0: Initial rate of first clk * @rate1: Initial rate of second clk + * @sscs: Initial spread spectrum settings * @consumer_test: true if a consumer is being tested */ struct clk_assigned_rates_test_param { @@ -3105,6 +3121,7 @@ struct clk_assigned_rates_test_param { u8 *overlay_end; unsigned long rate0; unsigned long rate1; + struct clk_spread_spectrum sscs; bool consumer_test; }; =20 @@ -3116,7 +3133,7 @@ static void clk_assigned_rates_register_clk(struct kunit *test, struct clk_dummy_context *ctx, struct device_node *np, const char *name, - unsigned long rate) + unsigned long rate, const struct clk_spread_spectrum *sscs) { struct clk_init_data init =3D { }; =20 @@ -3124,6 +3141,7 @@ clk_assigned_rates_register_clk(struct kunit *test, init.ops =3D &clk_dummy_rate_ops; ctx->hw.init =3D &init; ctx->rate =3D rate; + ctx->sscs =3D *sscs; =20 KUNIT_ASSERT_EQ(test, 0, of_clk_hw_register_kunit(test, np, &ctx->hw)); KUNIT_ASSERT_EQ(test, ctx->rate, rate); @@ -3167,14 +3185,16 @@ static int clk_assigned_rates_test_init(struct kuni= t *test) KUNIT_ASSERT_LT(test, clk_cells, 2); =20 clk_assigned_rates_register_clk(test, &ctx->clk0, np, - "test_assigned_rate0", test_param->rate0); + "test_assigned_rate0", test_param->rate0, + &test_param->sscs); if (clk_cells =3D=3D 0) { KUNIT_ASSERT_EQ(test, 0, of_clk_add_hw_provider_kunit(test, np, of_clk_hw_simple_get, &ctx->clk0.hw)); } else if (clk_cells =3D=3D 1) { clk_assigned_rates_register_clk(test, &ctx->clk1, np, - "test_assigned_rate1", test_param->rate1); + "test_assigned_rate1", test_param->rate1, + &test_param->sscs); =20 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, data =3D kunit_kzalloc(test, struct_size(data, hws, 2), GFP_KERNEL)); @@ -3203,6 +3223,9 @@ static void clk_assigned_rates_assigns_one(struct kun= it *test) struct clk_assigned_rates_context *ctx =3D test->priv; =20 KUNIT_EXPECT_EQ(test, ctx->clk0.rate, ASSIGNED_RATES_0_RATE); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.modfreq_hz, ASSIGNED_SSCS_0_MODFREQ); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.spread_bp, ASSIGNED_SSCS_0_SPREAD); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.method, ASSIGNED_SSCS_0_METHOD); } =20 static void clk_assigned_rates_assigns_multiple(struct kunit *test) @@ -3210,7 +3233,13 @@ static void clk_assigned_rates_assigns_multiple(stru= ct kunit *test) struct clk_assigned_rates_context *ctx =3D test->priv; =20 KUNIT_EXPECT_EQ(test, ctx->clk0.rate, ASSIGNED_RATES_0_RATE); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.modfreq_hz, ASSIGNED_SSCS_0_MODFREQ); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.spread_bp, ASSIGNED_SSCS_0_SPREAD); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.method, ASSIGNED_SSCS_0_METHOD); KUNIT_EXPECT_EQ(test, ctx->clk1.rate, ASSIGNED_RATES_1_RATE); + KUNIT_EXPECT_EQ(test, ctx->clk1.sscs.modfreq_hz, ASSIGNED_SSCS_1_MODFREQ); + KUNIT_EXPECT_EQ(test, ctx->clk1.sscs.spread_bp, ASSIGNED_SSCS_1_SPREAD); + KUNIT_EXPECT_EQ(test, ctx->clk1.sscs.method, ASSIGNED_SSCS_1_METHOD); } =20 static void clk_assigned_rates_skips(struct kunit *test) @@ -3222,6 +3251,19 @@ static void clk_assigned_rates_skips(struct kunit *t= est) KUNIT_EXPECT_EQ(test, ctx->clk0.rate, test_param->rate0); } =20 +static void clk_assigned_sscs_skips(struct kunit *test) +{ + struct clk_assigned_rates_context *ctx =3D test->priv; + const struct clk_assigned_rates_test_param *test_param =3D test->param_va= lue; + + KUNIT_EXPECT_NE(test, ctx->clk0.sscs.modfreq_hz, ASSIGNED_SSCS_0_MODFREQ); + KUNIT_EXPECT_NE(test, ctx->clk0.sscs.spread_bp, ASSIGNED_SSCS_0_SPREAD); + KUNIT_EXPECT_NE(test, ctx->clk0.sscs.method, ASSIGNED_SSCS_0_METHOD); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.modfreq_hz, test_param->sscs.modfreq= _hz); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.spread_bp, test_param->sscs.spread_b= p); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.method, test_param->sscs.method); +} + OF_OVERLAY_DECLARE(kunit_clk_assigned_rates_one); OF_OVERLAY_DECLARE(kunit_clk_assigned_rates_one_consumer); OF_OVERLAY_DECLARE(kunit_clk_assigned_rates_u64_one); @@ -3384,6 +3426,77 @@ KUNIT_ARRAY_PARAM_DESC(clk_assigned_rates_skips, clk_assigned_rates_skips_test_params, desc) =20 +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_without); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_without_consumer); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_zero); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_zero_consumer); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_null); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_null_consumer); + +/* Test cases that skip changing the sscs due to malformed DT */ +static const struct clk_assigned_rates_test_param clk_assigned_sscs_skips_= test_params[] =3D { + { + /* + * Test that an assigned-clock-sscs property without an assigned-clocks + * property fails when the property is in the provider. + */ + .desc =3D "provider missing assigned-clocks", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_without), + .sscs =3D {50000, 60000, 3}, + }, + { + /* + * Test that an assigned-clock-rates property without an assigned-clocks + * property fails when the property is in the consumer. + */ + .desc =3D "consumer missing assigned-clocks", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_without_consumer), + .sscs =3D {50000, 60000, 3}, + .consumer_test =3D true, + }, + { + /* + * Test that an assigned-clock-rates property of zero doesn't + * set a rate when the property is in the provider. + */ + .desc =3D "provider assigned-clock-sscs of zero", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_zero), + .sscs =3D {50000, 60000, 3}, + }, + { + /* + * Test that an assigned-clock-rates property of zero doesn't + * set a rate when the property is in the consumer. + */ + .desc =3D "consumer assigned-clock-sscs of zero", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_zero_consumer), + .sscs =3D {50000, 60000, 3}, + .consumer_test =3D true, + }, + { + /* + * Test that an assigned-clocks property with a null phandle + * doesn't set a rate when the property is in the provider. + */ + .desc =3D "provider assigned-clocks null phandle", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_null), + .sscs =3D {50000, 60000, 3}, + }, + { + /* + * Test that an assigned-clocks property with a null phandle + * doesn't set a rate when the property is in the consumer. + */ + .desc =3D "provider assigned-clocks null phandle", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_null_consumer), + .sscs =3D {50000, 60000, 3}, + .consumer_test =3D true, + }, +}; +KUNIT_ARRAY_PARAM_DESC(clk_assigned_sscs_skips, + clk_assigned_sscs_skips_test_params, + desc) + static struct kunit_case clk_assigned_rates_test_cases[] =3D { KUNIT_CASE_PARAM(clk_assigned_rates_assigns_one, clk_assigned_rates_assigns_one_gen_params), @@ -3391,6 +3504,8 @@ static struct kunit_case clk_assigned_rates_test_case= s[] =3D { clk_assigned_rates_assigns_multiple_gen_params), KUNIT_CASE_PARAM(clk_assigned_rates_skips, clk_assigned_rates_skips_gen_params), + KUNIT_CASE_PARAM(clk_assigned_sscs_skips, + clk_assigned_sscs_skips_gen_params), {} }; =20 diff --git a/drivers/clk/kunit_clk_assigned_rates.h b/drivers/clk/kunit_clk= _assigned_rates.h index df2d84dcaa93511694b6da842debdc3cfd3a6c19..d7ae5ec2d25bed79b8438e8ce58= 0872131ce4286 100644 --- a/drivers/clk/kunit_clk_assigned_rates.h +++ b/drivers/clk/kunit_clk_assigned_rates.h @@ -1,8 +1,18 @@ /* SPDX-License-Identifier: GPL-2.0 */ + +#include + #ifndef _KUNIT_CLK_ASSIGNED_RATES_H #define _KUNIT_CLK_ASSIGNED_RATES_H =20 #define ASSIGNED_RATES_0_RATE 1600000 #define ASSIGNED_RATES_1_RATE 9700000 =20 +#define ASSIGNED_SSCS_0_MODFREQ 10000 +#define ASSIGNED_SSCS_0_SPREAD 30000 +#define ASSIGNED_SSCS_0_METHOD CLK_SSC_CENTER_SPREAD +#define ASSIGNED_SSCS_1_MODFREQ 20000 +#define ASSIGNED_SSCS_1_SPREAD 40000 +#define ASSIGNED_SSCS_1_METHOD CLK_SSC_UP_SPREAD + #endif diff --git a/drivers/clk/kunit_clk_assigned_rates_multiple.dtso b/drivers/c= lk/kunit_clk_assigned_rates_multiple.dtso index e600736e70f5041ddeb1bfb0d6074746a064e08a..6c54d65444d5d779c9fa4bb2a79= c4742dd88f6d0 100644 --- a/drivers/clk/kunit_clk_assigned_rates_multiple.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_multiple.dtso @@ -12,5 +12,11 @@ clk: kunit-clock { <&clk 1>; assigned-clock-rates =3D , ; + assigned-clock-sscs =3D , + ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_multiple_consumer.dtso b/= drivers/clk/kunit_clk_assigned_rates_multiple_consumer.dtso index 260aba458daf2bc57fde46b5442453e7de10faac..b1fee396c4b1e51341a41116856= 9d8351bb23b12 100644 --- a/drivers/clk/kunit_clk_assigned_rates_multiple_consumer.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_multiple_consumer.dtso @@ -16,5 +16,11 @@ kunit-clock-consumer { <&clk 1>; assigned-clock-rates =3D , ; + assigned-clock-sscs =3D , + ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_one.dtso b/drivers/clk/ku= nit_clk_assigned_rates_one.dtso index dd95ec9b1cf977883f71564a94602ae518937132..da6e91b9e6bda0ef2c8f601a08a= ef1f10fda4baa 100644 --- a/drivers/clk/kunit_clk_assigned_rates_one.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_one.dtso @@ -10,5 +10,8 @@ clk: kunit-clock { #clock-cells =3D <0>; assigned-clocks =3D <&clk>; assigned-clock-rates =3D ; + assigned-clock-sscs =3D ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_one_consumer.dtso b/drive= rs/clk/kunit_clk_assigned_rates_one_consumer.dtso index a41dca806318b031187c1b8739fcf71eb088a480..4b6e06048f863d014aed8222652= d6d9d38e9238b 100644 --- a/drivers/clk/kunit_clk_assigned_rates_one_consumer.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_one_consumer.dtso @@ -14,5 +14,8 @@ kunit-clock-consumer { compatible =3D "test,clk-consumer"; assigned-clocks =3D <&clk>; assigned-clock-rates =3D ; + assigned-clock-sscs =3D ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_u64_multiple.dtso b/drive= rs/clk/kunit_clk_assigned_rates_u64_multiple.dtso index 389b4e2eb7f74f1770ff5f5c4be5b45dd344dc9c..3a717dab2d00b7fdaff580e30ed= 2cc520683ef95 100644 --- a/drivers/clk/kunit_clk_assigned_rates_u64_multiple.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_u64_multiple.dtso @@ -12,5 +12,11 @@ clk: kunit-clock { <&clk 1>; assigned-clock-rates-u64 =3D /bits/ 64 , /bits/ 64 ; + assigned-clock-sscs =3D , + ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_u64_multiple_consumer.dts= o b/drivers/clk/kunit_clk_assigned_rates_u64_multiple_consumer.dtso index 3e117fd59b7da19cd8a603af77eff29175ce6900..cbee7cbad068f3336f0c8997a5b= 3e9af4db565c9 100644 --- a/drivers/clk/kunit_clk_assigned_rates_u64_multiple_consumer.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_u64_multiple_consumer.dtso @@ -16,5 +16,11 @@ kunit-clock-consumer { <&clk 1>; assigned-clock-rates-u64 =3D /bits/ 64 , /bits/ 64 ; + assigned-clock-sscs =3D , + ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_u64_one.dtso b/drivers/cl= k/kunit_clk_assigned_rates_u64_one.dtso index 87041264e8f544dafddf2e905efc89dc1f917c54..9b04d6927f0830a5621af1cbea5= 03a427b46bee0 100644 --- a/drivers/clk/kunit_clk_assigned_rates_u64_one.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_u64_one.dtso @@ -10,5 +10,8 @@ clk: kunit-clock { #clock-cells =3D <0>; assigned-clocks =3D <&clk>; assigned-clock-rates-u64 =3D /bits/ 64 ; + assigned-clock-sscs =3D ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_u64_one_consumer.dtso b/d= rivers/clk/kunit_clk_assigned_rates_u64_one_consumer.dtso index 3259c003aec0be3269ab60a4a3a95df69f8de1f8..4784d40520f4193e4f08c898138= 6f0772a063452 100644 --- a/drivers/clk/kunit_clk_assigned_rates_u64_one_consumer.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_u64_one_consumer.dtso @@ -14,5 +14,8 @@ kunit-clock-consumer { compatible =3D "test,clk-consumer"; assigned-clocks =3D <&clk>; assigned-clock-rates-u64 =3D /bits/ 64 ; + assigned-clock-sscs =3D ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_sscs_null.dtso b/drivers/clk/ku= nit_clk_assigned_sscs_null.dtso new file mode 100644 index 0000000000000000000000000000000000000000..43b2068c845dea53ea1328bb63a= 2f58a4b8ef339 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_null.dtso @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +#include "kunit_clk_assigned_rates.h" + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + assigned-clocks =3D <0>; + assigned-clock-sscs =3D ; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_null_consumer.dtso b/drive= rs/clk/kunit_clk_assigned_sscs_null_consumer.dtso new file mode 100644 index 0000000000000000000000000000000000000000..bda008f5aaa35e53af97863e4f2= e6d8a168cc053 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_null_consumer.dtso @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +#include "kunit_clk_assigned_rates.h" + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + }; + + kunit-clock-consumer { + compatible =3D "test,clk-consumer"; + assigned-clocks =3D <0>; + assigned-clock-sscs =3D ; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_without.dtso b/drivers/clk= /kunit_clk_assigned_sscs_without.dtso new file mode 100644 index 0000000000000000000000000000000000000000..08660846b55c12122bfb211c01c= 377a3a45223c9 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_without.dtso @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +#include "kunit_clk_assigned_rates.h" + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + assigned-clock-sscs =3D ; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_without_consumer.dtso b/dr= ivers/clk/kunit_clk_assigned_sscs_without_consumer.dtso new file mode 100644 index 0000000000000000000000000000000000000000..e1c089c6f0c0223f16f7ac9a396= e7ac7b821c967 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_without_consumer.dtso @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +#include "kunit_clk_assigned_rates.h" + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + }; + + kunit-clock-consumer { + compatible =3D "test,clk-consumer"; + assigned-clock-sscs =3D ; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_zero.dtso b/drivers/clk/ku= nit_clk_assigned_sscs_zero.dtso new file mode 100644 index 0000000000000000000000000000000000000000..f39f4e754e532c9c1b1fdf03470= 0e5af1f3f0779 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_zero.dtso @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + assigned-clocks =3D <&clk>; + assigned-clock-sscs =3D <0 0 0>; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_zero_consumer.dtso b/drive= rs/clk/kunit_clk_assigned_sscs_zero_consumer.dtso new file mode 100644 index 0000000000000000000000000000000000000000..d6bd7dfada7e2f455cb23e483b9= bd6ce24839e3a --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_zero_consumer.dtso @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + }; + + kunit-clock-consumer { + compatible =3D "test,clk-consumer"; + assigned-clocks =3D <&clk>; + assigned-clock-sscs =3D <0 0 0>; + }; +}; --=20 2.37.1 From nobody Thu Apr 2 01:29:07 2026 Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11011025.outbound.protection.outlook.com [40.107.130.25]) (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 8748A382367; Thu, 12 Mar 2026 06:57:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.130.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773298668; cv=fail; b=Zl3nGM1qan9xyhKZ/Gn0+Kh855RO6STQlWBzXio/2+ahH8P8FHcuK4oFM4lhjssMcAaTJlFLfAN5b6fGOIVu2dRt4aQMp5Y5IohLkW/C3meGCX2ZUwdZHp4/FjJ0Q8qWp15U/4wnO+oGNjM/oxnUaNpRoyEMTeIA9ALwdAghw50= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773298668; c=relaxed/simple; bh=JLC6MakEYLjZyLi1Lk8OfpXU8eCjff8lE82qWjh1B88=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=sTcXtBsIAP9Qm0xrYCZkMnkOV2psSK5ECST50CSfvVmx75XxWMZlLzPlCz/VA4J29qNl+uiLhYWHw8gw+cumFeQqID6stWH2cTe/Xd34dXABVMr7eE6f0GDI2YzoV/I7PyfB5NKl+vWox/Q767AP9EIVVkzvlLDqRfML7/eMfzo= 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=Yp3ulq7j; arc=fail smtp.client-ip=40.107.130.25 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="Yp3ulq7j" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cXYKIVVYlupZQq+m/fG5BhycUoRwaV5hf6FR+YKr6DyBeMsx8VuR4PCP4q89lzkLkV8QJKZG+EMlcIbwwYeQ2+HdS40Q47JtJs8QumwZaQ2Ac5wUO44dzqytULc5lqu0U00ZViBJtF2j2mJDfrZbtnmo9LmIT8z8eiNNzmG/m4Bn49MRau6osf5wNkZl+PEiy5f5kODVPjjO6WzdKK0E2NhziK9sE5KZMq9pEJG46i/8gA7rEkxl64dWV/rOFVrXzRhAn0cCE/u9OmRgjLI2hClMenEjUv0EPisqFzcw97pk/yhYBx5YFtWwvXeawcP/pp3q5ZoxUOZG6n9/TZ2CBA== 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=NM5JSHU1l87OPtt7ZaQFMlVLBnvdejkKoGjwrux+QhQ=; b=DOWR6JlidNHM8EqpL6hsfNYTbqoqal67ksQI7KI/tNtUmUx2bwNATihqc3JpaNx4rSGZHZM1eKe+rBZ1ZEOIa8ptNF+XzzRl04gLMSASrqk/PUo/sBTq0iwPgctjHGN2xoyO1OQ7WE7y2HvewN9J6qF9ZsnVvGJC8+Kw+2yFa9BVHHw7jDwTVpJsze6sp8gQ0AD2AImbE/e9CFyzeL/29Vn68M/mRz9QBR/3EFakFCU+g+4pSoFrDBurUfukrrauD7KJYgIaSghdjzcCo+S+FpYROc8ubfPONVU4TqONNC5ctrlkGgrhcm23bnPqGGM4+tvy8R1n6ThQtJ4r1WUcxQ== 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=NM5JSHU1l87OPtt7ZaQFMlVLBnvdejkKoGjwrux+QhQ=; b=Yp3ulq7jSckYy1xQzOE1MfSaRmWUKHdH92Bbx8J61tmsoogckmk+B20ckvCAxnYcclfkpp3ufx6U6FjmJrzXNEp/d0M5M4NmJTN/Y2op1EzmpqFaQDPfRWTkIhiTICL4MKe1PU13hTcD0T0Y2fkLs0+0hzoGITaq1DXWCGVbj/8ZyZyyI2Q657PqaGFh2y7K+ipHAhY4JIVKFM64DD8A5VTjetYbCWDzRvBrq5U+d1xgxbaQAy0x1+zXsqiDLo79i3sbD5fn+FGAmux1BKvSwzbGWlfD8bhCfOLN+FjqDXE058Z6qKqeWJjU6KjVRY3QVxgOQ2ftz60bEdK+Tq/4wg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by AM7PR04MB6997.eurprd04.prod.outlook.com (2603:10a6:20b:10d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.12; Thu, 12 Mar 2026 06:57:41 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e%7]) with mapi id 15.20.9700.013; Thu, 12 Mar 2026 06:57:41 +0000 From: "Peng Fan (OSS)" Date: Thu, 12 Mar 2026 14:58:21 +0800 Subject: [PATCH v9 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: <20260312-clk-ssc-v7-1-v9-5-0a9d2e188d9e@nxp.com> References: <20260312-clk-ssc-v7-1-v9-0-0a9d2e188d9e@nxp.com> In-Reply-To: <20260312-clk-ssc-v7-1-v9-0-0a9d2e188d9e@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Cristian Marussi , Sebin Francis , Brian Masney , Sudeep Holla Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: MAXP287CA0017.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::35) To PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|AM7PR04MB6997:EE_ X-MS-Office365-Filtering-Correlation-Id: 9677f968-4b00-4b04-1f4e-08de8004a788 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|52116014|19092799006|7416014|1800799024|366016|38350700014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: 8oznTzmif63KooWA73cmEELUXr1KlEFarcQEpkMIqpr9mKM3L2MUIafz5KXmgl7qmYZCiSn/SkRChIC0fGpKbUETVR+oHw24WLUU/hAFrQtyfavl6nzILgAL4DN/SAFYCVTQLX5d8p1e+6ljsIO32GX/y0bxIeBrQT75HI8rZlFgLZe7m9TtcarNDO8u5EbFwvZNx32PpCHs9TkpOTHwOaNQ2qIfkgfVLP+4jHAehuniWmCG8+mnbus50dksw6UN6U2Y8ILsJYaTpnGCLr5kgwf6LObMeIqVwzK2zvMKyYrkEjdQirJDFIit00qEKZxJ+VAlHk1kbaEOFOiWJMJgnuK1Dg/YuEy7INdGnDUQSXLIVpqGeZqqou6te6DDErZ8KXUAxrH2r/1aEXA1tTccFLVJA5CGm89NCNN+8DLhvWXrPnuX9dXWLfOv+zZkm67CTRA6t2uz8xwKdGg2P8K9GpEMxhi6HLkNTrfGzeYSVwgTHOWrlMMZsBeMOk+8rzz2ImSgfApYJHD9RI0ZHLtOxVs3uRJWIkArcMJlwTJ8fKVIPzpMFfoSJJXoPtgXjOQy0zQrlfn9heCFl+bwyrRLWkFX+qOWJC7QNZeI8pR7OVBbjo/f27DHnF+hd79De0GghBiV3q3aiAwDJv/6jte2KatAOtJU+G9Zp42r7L/tUsr3ErP6QdEzDLbhTIcRSASJV2D5AcIsWbmuIc6eCGLRmjuWjghAI2wI75s+rzV1wCTeOjaOOmHOOXy+XtJNcj06R1StELozWcTwXrCcZguShVTBVQFy5w1QEmowW4cOU4M= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(19092799006)(7416014)(1800799024)(366016)(38350700014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VUVRbkFPNWVEeXcreGp4MUFhTlR3cm1XOHFjWDE5dk5BNjhnZFYyenNkTFc5?= =?utf-8?B?TXQxNy9rSVF5OGd4UFYxdC81Skk0M2c1bngvQWQ3dGNXQXpKZnBMR1ZHRVRr?= =?utf-8?B?T1NnQWNXVlhnSHFBWlpvbTcwMWd1Sml3cFNiQVRqcW9zNzBoaS9PMkRGeThx?= =?utf-8?B?NFFKbEZpcko3cCtVMEdOUUFIU1IySk1IcGxYcFJGQVZ6SWF5WHZnZEwxemxC?= =?utf-8?B?Witnd3k5RHYzcEV6b2ptVHNqMGVLSW5NQ1Jwek1xN3VSNFZBWTdRTlVkbGtQ?= =?utf-8?B?eVJqNjJadGhjQWIzeFBRUkluU0Fpa1dEbDhPL0tOM1lReU9RWUh3RXpqYlZF?= =?utf-8?B?VTUxNTY4YVRLM3dWV2NZcytLRDN3ZENBMnBBOXJQQVBIYWJpQThFK2NBU0w4?= =?utf-8?B?NWM4MXdISTdmbk9GK1Q2Z29UNFJSWHdTMkxoZDlEanRkUTdjM2hzbE1WMHpk?= =?utf-8?B?RzRoLzFmb2lobnJJak9GWm9MRGplNkU2NVVjQW15QTM0eGQvUy9pelRHdmZT?= =?utf-8?B?NXBBTXhtanFOYTZKOFpNSVppY1NOU25qQUt0RkxjaTNtRjVxRC83UkFNZHNL?= =?utf-8?B?bGhuNXZETjEyanZIWkJJd3RHbnRnK3dKdjBzSklmQTQ4U0VNRUM2dTZFNi9h?= =?utf-8?B?andIK0xoZmw3VEI2Yk1sV0ZXU041Wi92T0hWMmtmbjJiVnJ5ak9SVE94SlRR?= =?utf-8?B?TDF5MEpwdUVsNHVtT1FNajRQNE8zUlZiVDVYeG1WVEh4WXFFRXgzV25ETk5t?= =?utf-8?B?eEU3YWFTQWRrRWVjc3c1bjV2cEVLZVV6WloyWVdNWWpvekZuYnc1WlNzdytm?= =?utf-8?B?UWFpMmdKK25aS3VLVWY2eTl0TnZNWjFNV2NYZFVxeDVBeWpQOXdTMnRFdWVu?= =?utf-8?B?dlpzTjdPQ2gzQ3JyY3pCZHRZeVNFKzgxMWFqbDZld0YrZzJROXRVNFM5WktS?= =?utf-8?B?MGp1MGE0NzlnRnU4bXE2VDUxZ2kyTEw4eXpmK1ZnaGl2TWwxZktvR09YRVJw?= =?utf-8?B?cUg0KytrcTliMGlwTmZHajBCWDE4QityOTRHUGpNaXRucXZuWnMvWXllQXVy?= =?utf-8?B?R3o1cHJPTU11dTE4ZzN5UXdxYXlneVpwbHJneXluc0Q1RXNneWF5MUlRTm80?= =?utf-8?B?VWxoQXlpWTRlTktvZnZucG9jQkJBamd5eVQ0TmZCaWpGdDRvNWN5T0RtWTc2?= =?utf-8?B?czI4V2h0ODRvODdUTXJicjBwSEl6eVZydUtuWWt6M3N6RzB5L3hsTjk2MWw0?= =?utf-8?B?bHFHaGs1VVh1MkxsQ0V0Sy9pR1JMeEFoWGRVYUhvelNPdkZpaEFjMlhzYTVw?= =?utf-8?B?TXlBWkVXTE8yU3N0SWF6RnY1MXFZWGVIcEtPeGNEeVhmb3FNS3pGRTlJV2tY?= =?utf-8?B?R0NDMVhQK2VMczhJMlRZTWsxMmQ5WTM4aEdqTnhVN0dHQ241QUJ4Qm1hUEp6?= =?utf-8?B?L244aWcxeC80Ky85bVdwUklDcHd4UzRpWG11MXllbzQ0Vlo3d1p0VzhXcEhF?= =?utf-8?B?ZDNFTkFhcGkxQmRKWnd6R2ZQVTljbTFXeC9PeVNqWVkrQTM1RVBVeTBDTFdP?= =?utf-8?B?RXAwdXZYN2N3ZERTemliZDY2YmliNDVTQTdzNjRkZ3p4QjB4dmJhWFFrNXVm?= =?utf-8?B?UHAwZUZORFNZeTYwS0lySlRqTkFINjQzUFNLMmFIWG5pSkZVSklySTg0TUg3?= =?utf-8?B?dlNIQTZJZGxqa0tnaHhSd0k4R0JRdzUwSjZJSWtJTW9aVUduV0lqaVR4eHMw?= =?utf-8?B?TVRoMzY2alliSE1WVGdtdUZ3Y0xzbUZZdXBEbGRVc0lCOWx5NTY5eExnTUht?= =?utf-8?B?cEgrUVhwL0dSZ0ZwL1FpenFLNEpWMWRldU9UZVgzWTdVL2NhWkc1VkNTRHZY?= =?utf-8?B?V3FLQkZReTh6UGJXV2lJdjJWV2FQVUh2UmxTQUJsME1waW5VZ3JuMEdxemJk?= =?utf-8?B?SmRkTjZ2VEpObEczMDJVeUd4djcxaWhvQ2thdlpTdkE3dDdSRlRqL3RHdTdS?= =?utf-8?B?SmJyRFpYTG1kMkVhb1B0c1NxYVBaM1crZzNVVnlIQmdSY0RSMk9sME5hSEN4?= =?utf-8?B?K3d1QUxIc0Y5ek5NODZVVDd2NG01K2FZY0pra042V29FNEJqUW00N0NjNXhu?= =?utf-8?B?alphVitRejI2VUVQNDh1blBtcDRjT2Rpa3Z4b2VHOGUyekdaR0tBMXlFa2s1?= =?utf-8?B?ZVJWVkpNdGhISjllcEtMa1VzM2hHQTJTYXBROHF0ejhPdTRFSmtuTXh0V1JQ?= =?utf-8?B?ODNRUHdHTFRiQ0pEcVlyS2dzR09FNzFBRXJLeXN0MDVOZFlVb29hbkhXNXNP?= =?utf-8?B?ZzVKbDhEeDRSb3cyR29TTGpLMWNQUmx6dStuVWNHS2NhMlBXd1pNQT09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9677f968-4b00-4b04-1f4e-08de8004a788 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Mar 2026 06:57:41.3513 (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: IW4iA3GNaJ0y0Apged647wwDanmykRq4F4fb5oeF2TQLaOe9vA3ULJ74Ks5j9i9BzKK/qNqr40hWSZskmGhZ+w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB6997 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 6b286ea6f1218c802d0ebb782c75a19057581c20..bf85924d61985eb9e596419349e= b883e3817de73 100644 --- a/drivers/clk/clk-scmi.c +++ b/drivers/clk/clk-scmi.c @@ -14,32 +14,7 @@ #include #include =20 -#define NOT_ATOMIC false -#define ATOMIC true - -enum scmi_clk_feats { - SCMI_CLK_ATOMIC_SUPPORTED, - SCMI_CLK_STATE_CTRL_SUPPORTED, - SCMI_CLK_RATE_CTRL_SUPPORTED, - SCMI_CLK_PARENT_CTRL_SUPPORTED, - SCMI_CLK_DUTY_CYCLE_SUPPORTED, - SCMI_CLK_FEATS_COUNT -}; - -#define SCMI_MAX_CLK_OPS BIT(SCMI_CLK_FEATS_COUNT) - -static const struct scmi_clk_proto_ops *scmi_proto_clk_ops; - -struct scmi_clk { - u32 id; - struct device *dev; - struct clk_hw hw; - const struct scmi_clock_info *info; - const struct scmi_protocol_handle *ph; - struct clk_parent_data *parent_data; -}; - -#define to_scmi_clk(clk) container_of(clk, struct scmi_clk, hw) +const struct scmi_clk_proto_ops *scmi_proto_clk_ops; =20 static unsigned long scmi_clk_recalc_rate(struct clk_hw *hw, unsigned long parent_rate) diff --git a/drivers/clk/clk-scmi.h b/drivers/clk/clk-scmi.h new file mode 100644 index 0000000000000000000000000000000000000000..6ef6adc77c836dc2d599ff852cd= c941f217ee388 --- /dev/null +++ b/drivers/clk/clk-scmi.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright 2025 NXP + */ + +#ifndef __SCMI_CLK_H +#define __SCMI_CLK_H + +#include +#include +#include + +#define NOT_ATOMIC false +#define ATOMIC true + +enum scmi_clk_feats { + SCMI_CLK_ATOMIC_SUPPORTED, + SCMI_CLK_STATE_CTRL_SUPPORTED, + SCMI_CLK_RATE_CTRL_SUPPORTED, + SCMI_CLK_PARENT_CTRL_SUPPORTED, + SCMI_CLK_DUTY_CYCLE_SUPPORTED, + SCMI_CLK_FEATS_COUNT +}; + +#define SCMI_MAX_CLK_OPS BIT(SCMI_CLK_FEATS_COUNT) + +struct scmi_clk { + u32 id; + struct device *dev; + struct clk_hw hw; + const struct scmi_clock_info *info; + const struct scmi_protocol_handle *ph; + struct clk_parent_data *parent_data; +}; + +#define to_scmi_clk(clk) container_of(clk, struct scmi_clk, hw) + +extern const struct scmi_clk_proto_ops *scmi_proto_clk_ops; + +#endif --=20 2.37.1 From nobody Thu Apr 2 01:29:07 2026 Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11011002.outbound.protection.outlook.com [40.107.130.2]) (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 A04473AB274; Thu, 12 Mar 2026 06:57:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.130.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773298672; cv=fail; b=T9/xz3esonq8Da3EZDoZrHZNOYVxq+UyJAL/MbLD01vAB6ak4hlXNcvJjPIJrKcpFTTNCWuRVBbpDWBFOtbeySsMCeoyR6sdnzutDmQ+qyyowc3iYXYt3GMBC+tBAEL9TYccrwgWnWxwTci4xFJ57OtHrr6xsT9QjD/b24X2zOk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773298672; c=relaxed/simple; bh=K4kWlH9ooiaG5vES1pkDQY94e65HtplOah/6ae5D+TM=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=A0kqc20ghPfui0A55y8s4RIl5PKD5uSgDlbfCkBrvq2S6L2R02IH5tUqpKN7+kgrU1z9PJHIlJQBRSYAm8NL/KEcZxEwF6S8WTJOcSnmtuyrEYWBievTPvC1nwCFerslEFtH5Hurto00DThlVHr1nnvFAqWFNF4wkTzUa4j2aNc= 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=f27+YFpR; arc=fail smtp.client-ip=40.107.130.2 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="f27+YFpR" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=X1EXblGuyA0PLZ750xyg0V1iMG752f1auBUCW4xu8lpl1/ql54hpgiFrVQgd5PpfDW7gRM2ST+2ypEvMxxqwU96dFL5fB5MZ2SqfDMuDE+3c0xP436XNAlOb5+XA99yDXnCw6K7TY5pL7mikn2r4E4WJwvKx9sZ6GjZGPM6rYUw+nQvNBvm0QMzTUhRoNPC1tPG9gtU97ILv/eLq5+yjmK0ffM2f82h5XdGRwLIqueHnxDUK5gXeqYkLCsTrg8eUTFBRcmjqrm3Ii7nhr/5NRbk7GqOVAtVIiq0BQ69HdI3yZasHcECpIGw+9BWID9qFuK9wZI3W8CnFSup616NoJQ== 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=y3m5yOyjQfNb4fBHfff/rHUp9AXSH2WV2osV+rNRLGA=; b=G4Uo3aaDixt2ELAmxHTdGeKDUeFBB6N2+p0OCjp575ly3NnWiixKJ3qGhLa2rSaDFpf3yIkXWw61yPNHo5ijsLgfjcLdPNIuqRS+qSO574a/Df2HI/vZ0gYWRtydqE/8f2FVtVf+vqWDVjcazW5PK5caze5X2YaALjn8tIdFFACLC82Do5D6+dlHJco0u4OBtRgJBkFJyBT6quQMFY9esfGibLIP/1i8ytVrJJ/Ugq1J79BredtYsV6nDWNhZrDk33h/6wt85XQtqx2IIJEH59YJTELualQ0uBFFnPUO9/mDFs5PvcTFI44UgpO0BdqrJ4giv62EOp20qfRM1krw7w== 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=y3m5yOyjQfNb4fBHfff/rHUp9AXSH2WV2osV+rNRLGA=; b=f27+YFpR8C3K7YQzu/jJkKZICG/HwE4IDpAXYRHJMSC86FOAEjXcJadQh6wTgZAS28eA4YDsPsCzevmE9pRHDk0mwFUAscxemIMV86C5uFxpTbJ+0J2PVLFBN3l228F0kbyNBblX1p4ijOI/sr1rWmVdh7VSRkESudKzC1U8kZw0ehJSyY0eZszA21C2IZfY5rjkKuTeYtF7Mr9Rhw6kSigWrHf5gjXuuHsT7XRQg82019cW0hbh2fclG2MwtkcqMEn6k2q5bmWsvROj7kU0gTlKKfgAkKz3jOy7wbKKNaYk5AQ2dG4ebjdR59Lr13Rr8X+MyK8E6+RJHbLCecFvWw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by AM7PR04MB6997.eurprd04.prod.outlook.com (2603:10a6:20b:10d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.12; Thu, 12 Mar 2026 06:57:46 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e%7]) with mapi id 15.20.9700.013; Thu, 12 Mar 2026 06:57:45 +0000 From: "Peng Fan (OSS)" Date: Thu, 12 Mar 2026 14:58:22 +0800 Subject: [PATCH v9 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: <20260312-clk-ssc-v7-1-v9-6-0a9d2e188d9e@nxp.com> References: <20260312-clk-ssc-v7-1-v9-0-0a9d2e188d9e@nxp.com> In-Reply-To: <20260312-clk-ssc-v7-1-v9-0-0a9d2e188d9e@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Cristian Marussi , Sebin Francis , Brian Masney , Sudeep Holla Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: MAXP287CA0017.INDP287.PROD.OUTLOOK.COM (2603:1096:a00:49::35) To PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|AM7PR04MB6997:EE_ X-MS-Office365-Filtering-Correlation-Id: ec9420ed-fd43-4289-e69e-08de8004aa38 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|52116014|19092799006|7416014|1800799024|366016|38350700014|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: FA08va1SMwaq9Rul44GOURV0xpcoQOI49nr/P9/2RVnVnCHQulnGxIY6QgMGTG1eZ7dnGE29CzVuAGJoJsZRws+wcFG4r7eyytShfQUAgQen2J4Vgg1m8U4sKdCeOmx2Nsdk5RALsepIcMlAY1NIyGyTH+VHRDbbmDUzMndkCIMLIrjHTh6pPx9HqLqus7L+hTmvRtP+DmuRzHORwwDE9Qf2osR4qBoG7peAA0sjzmQT6lFU50HENBxfHeanQsMXWQdYYdb6QjNXcEgvhklItoIYoZtZA/djRXee8GTnWjFpLCrFs0ijazKSZ4ZCuVZJPUMqvcDZBKH+k6r0ouVaAa+jr4uFhTdfNCPcncg7Y7bJU2bLm6g+W9cE4Sq0cPMd9DIoXKEzkIrYlOMGBdqh1bmc/Ns6dXHCQJrTW7LCih/RRsYXYF9wQfKdtZ7F69D4Az88ivnYbUllMXcH5A/NhqA2aTMpHuwEk6Sop0nBKo+vF1TFWrVZ3HTmowlMJf6AQkpXWrIPRJeEfaxnb8oLEUGHUKosYnsFuxDJrnikA07D9qYk2aryO/HfK8+03HJghXqiP17GSq2bnrlWzNQ/9zScUYXN12YnwtDvPJS3JXHN9dbRKdoDJyse8wvDu98ixOTqeHtQlBKytHzNYfEobLJuyQ2kpOVTJfhRUytwaR1pkDQ9xKSzZ/nd+eDZs7FDlGVoG8wqO2co1UU/b+ukbmzYR3Ygp2g3+AYv6Kj36RkptIITdranE7l/m2nnXJUI4Iv4AJMh5/3ziKkcp9ljdF3qn2fr0hswo+66/8+sxgk= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(52116014)(19092799006)(7416014)(1800799024)(366016)(38350700014)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aU1CZzJoRFUxZTBvUlFVOXhQbjduNVhPT3o3L1ozMDVpZ1BIY3dwQVVvT1pI?= =?utf-8?B?WCthM1pOWmJucWtleWgxQVZ6eW9YYU5Ya2I4bVVsaStwZ1BaSDByc0xjOWRw?= =?utf-8?B?NnZlMjY3Q2JvancwWE4rTnpoaktmaGsramRwbEo4MVRyZmpVdnlRbkFjQlFP?= =?utf-8?B?L1VaNHQxbEdUMXNkcE04WGJzQzhjVG4zZFFReTJPeFVXaWhWdkd6WTAzSWNI?= =?utf-8?B?dWZWREN1ajhvV0RkbkF5dDlMSHc1VjM1UFk4WnpVZ0NacjZPN2ZZVlRWRGlx?= =?utf-8?B?aEtVRFZ5ZDhGVGhDVGxHdDBhdlVBZk5qcGhoNG5sTXFicFk1bHM4WVdqSzRT?= =?utf-8?B?ekFIRkJPM3NSWVAzRy84MmN4N3RkRyt4ZUFiZG9HQzlxeDBEME5pck0wQVJY?= =?utf-8?B?Rkx3eHc0MVhITlIxSjJNVkdqNWFEZjcvYlgrZC92Vlp0N3h4MGFSZjN5YXI0?= =?utf-8?B?RFV0RkpwLzAwdzRUendVT05zQzFVU3F0cUpkeUFLdFR4c255TTFadiswV0xL?= =?utf-8?B?aVRJUUF1ZzRtUlh6RjRRRjMzc3NvS2ZyTG9vdXVxd1FvVlVEYXYvUU52YUpS?= =?utf-8?B?ektnK3p3WVZXRVVvQncwMlZyb2JkQ2hzQlNCdzA5WDhPMmVMZVd0S2pUTHE3?= =?utf-8?B?QnBHbms1dnIxN3RQTDYzMnhaMTZhWlQxNzloWHpoOW1oenpRUFhZTmdCMnZK?= =?utf-8?B?UVZaYkVmUDE3aWI4ZTF0YWwvVmxmK1pibGNzZjBlV3craGlTTUlnL2Z0ckVx?= =?utf-8?B?Z2RXUnZYRHhnU1o2RmU1MURJRlphWVdkL3dYQk9FOWRGeTg5WFMwb3dnUC84?= =?utf-8?B?bWJ5dU5zSnNud25ialdHZzMzT0k3TkpYRjJ0S3RqN0pWMXNma3laNXJncjVI?= =?utf-8?B?aTRQZTBudy9vZnlYRjhRbGhPaVJ3VmlEV1lqWlZ2MFJESkhtUmxHMzBFNWpv?= =?utf-8?B?ZXRRVVRkTlN4SyswT25JMUhjMWlKS3RkYm45aHVsNG1zbDh4UTZONTJoRzFK?= =?utf-8?B?elpRK2ZBSnA3RHBiVmVqMzBHRHA5TG42VEdTYzRLMlNNNWdkWmxxTTVFK2dL?= =?utf-8?B?bXl0RjJjK1VGOXIySFRVQVEyS21sT3hKVXlJM1RXNkE4c0RpcVc0OEFPcUFn?= =?utf-8?B?ZWpBbnFPN04xVEdRQS9Nb1dNSDlZMmZHYjE0c21UYm5RbGFZVmlzN1NGS1FG?= =?utf-8?B?dEhaS3JIdVA1bXRMcDJJd2JEalVwT05hVEJtTEc3UEFBNlBHcTJqeCs2ZXRB?= =?utf-8?B?WnNOYkJadjdZMnJNWFBBRklzUlNXRFducVBJTXVoR0dad0tWTFVrUGVnRDA0?= =?utf-8?B?NEQ0U2tCZ05lZ2RmbVUxRmdybkU5c2hyUVRWejllS1JsUjJrSXJSWmNxUXd5?= =?utf-8?B?aktjc3ZZd01HcWtqTXF6RjdKSTMyUHh1SWt4eUszNUdENjBONE03VStnNnRC?= =?utf-8?B?VEhCZ05DM011SWxCbS9ZS1IvZzV2SC91eStSS2FPRVlnbllFalUyRXZzdGh1?= =?utf-8?B?Rm9qN3pSSHV5bHIrSEJSY2dkVlo1Z2JXL2JocmdUWWtFaGdDK2FUNDhpdHly?= =?utf-8?B?MTZnL2RXNEIyVzJmK2dzekNQYmFYTGJ1L2RUWkVraHVrN3k0cnd0eEIzQnhV?= =?utf-8?B?ZW8vM1hVODRBK2tmMlhuS0FQRWV2cUNHWmhodXlRUDlnMEE1TUpMdTVISCsz?= =?utf-8?B?R1AwS2JEM2doSGVhTmg1Mm84eFZ5K3ZmL3A3bHBWbkZwcVk1YkQ1eUVsSU40?= =?utf-8?B?SlNaSzFaRm9MQk13K01mZlY3VTU3eHdtRHBtbjBaVVUyV2RXZEN5Wm5PcjEv?= =?utf-8?B?MHViNVRBUUFjdFcwSTBweHFRdGNPV1pRNzdwbE5hRncxUXRwYTI1MzhodGhh?= =?utf-8?B?K3diSXJTM0kvT2I5aXFBT052MXpVbHhsMWJ5dHQvNUZhZVZjbWtRMk0wQ0M4?= =?utf-8?B?V0grNWQ4bTNRdUlZRU5sVG9zYWxQZXpUb2hsKzNoRUY0UUZTTkFuQ1c1MDh4?= =?utf-8?B?WFRLYkpqeXpYQ29MYURhaEMya2tDY3pRdzhFamxzK2JXTkdpY21FMXZzeFQ5?= =?utf-8?B?RExrcDdGcVZjeFhXSlZPdlhKYWNtTzQ0b1U3UEQ1cEI0UHF2dGttSEErWWJz?= =?utf-8?B?RXdkK0RyTlhLZ3ZhdXBhdytUWFdZWHdhR1BXeFYxdU44SzF4KzZnajYwcVFr?= =?utf-8?B?ZnJManAvWWZPVjdFYnhGK25xTzNtNFF4UTdWOHozV1h6MlVpdm92cGZqNm92?= =?utf-8?B?U0o4dDQrUE1KVmdibW56bC9rYysvOEYyZUJ0cnFZd0F4UXZiSE16QzJYczBY?= =?utf-8?B?QWtYM29TMFZVWnZhZC9UUmFUSmxnc1NuSWdDWEoxMEZrTWFNWjdVZz09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: ec9420ed-fd43-4289-e69e-08de8004aa38 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Mar 2026 06:57:45.8570 (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: OyYxpd+bCaWdNOgYYFI2BjszTCECS1LG29H4BFOdGMe9u/DGT/A1QU1AFRA7wTMQBpb4Bj0zxCAnJYHg8S5TiQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB6997 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 d569d0ea3153efe593efbbd51e022b2415234d3a..0b74a458255b2d50030cb4a2102= 599228c3660bd 100644 --- a/drivers/clk/Makefile +++ b/drivers/clk/Makefile @@ -93,7 +93,7 @@ obj-$(CONFIG_COMMON_CLK_RP1) +=3D clk-rp1.o obj-$(CONFIG_COMMON_CLK_RPMI) +=3D clk-rpmi.o obj-$(CONFIG_COMMON_CLK_HI655X) +=3D clk-hi655x.o obj-$(CONFIG_COMMON_CLK_S2MPS11) +=3D clk-s2mps11.o -obj-$(CONFIG_COMMON_CLK_SCMI) +=3D clk-scmi.o +obj-$(CONFIG_COMMON_CLK_SCMI) +=3D clk-scmi.o clk-scmi-oem.o obj-$(CONFIG_COMMON_CLK_SCPI) +=3D clk-scpi.o obj-$(CONFIG_COMMON_CLK_SI5341) +=3D clk-si5341.o obj-$(CONFIG_COMMON_CLK_SI5351) +=3D clk-si5351.o diff --git a/drivers/clk/clk-scmi-oem.c b/drivers/clk/clk-scmi-oem.c new file mode 100644 index 0000000000000000000000000000000000000000..be11d359b4ec3633868f33bb429= c7cfec9f1e48e --- /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 bf85924d61985eb9e596419349eb883e3817de73..1ed2091e3d4a951c8662db4c94d= ee4b9c98b8326 100644 --- a/drivers/clk/clk-scmi.c +++ b/drivers/clk/clk-scmi.c @@ -14,6 +14,8 @@ #include #include =20 +#include "clk-scmi.h" + const struct scmi_clk_proto_ops *scmi_proto_clk_ops; =20 static unsigned long scmi_clk_recalc_rate(struct clk_hw *hw, @@ -242,6 +244,7 @@ static int scmi_clk_ops_init(struct device *dev, struct= scmi_clk *sclk, static const struct clk_ops * scmi_clk_ops_alloc(struct device *dev, unsigned long feats_key) { + struct scmi_clk_oem *oem_data =3D dev_get_drvdata(dev); struct clk_ops *ops; =20 ops =3D devm_kzalloc(dev, sizeof(*ops), GFP_KERNEL); @@ -288,11 +291,15 @@ scmi_clk_ops_alloc(struct device *dev, unsigned long = feats_key) ops->set_duty_cycle =3D scmi_clk_set_duty_cycle; } =20 + if (oem_data && (feats_key & BIT(SCMI_CLK_EXT_OEM_SSC_SUPPORTED))) + ops->set_spread_spectrum =3D oem_data->set_spread_spectrum; + return ops; } =20 /** * scmi_clk_ops_select() - Select a proper set of clock operations + * @sdev: pointer to the SCMI device * @sclk: A reference to an SCMI clock descriptor * @atomic_capable: A flag to indicate if atomic mode is supported by the * transport @@ -317,8 +324,8 @@ scmi_clk_ops_alloc(struct device *dev, unsigned long fe= ats_key) * NULL otherwise. */ static const struct clk_ops * -scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic_capable, - unsigned int atomic_threshold_us, +scmi_clk_ops_select(struct scmi_device *sdev, struct scmi_clk *sclk, + bool atomic_capable, unsigned int atomic_threshold_us, const struct clk_ops **clk_ops_db, size_t db_size) { int ret; @@ -326,6 +333,7 @@ scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic_= capable, const struct scmi_clock_info *ci =3D sclk->info; unsigned int feats_key =3D 0; const struct clk_ops *ops; + struct scmi_clk_oem *oem_data =3D dev_get_drvdata(&sdev->dev); =20 /* * Note that when transport is atomic but SCMI protocol did not @@ -350,6 +358,9 @@ scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic_= capable, &val, NULL, false); if (!ret) feats_key |=3D BIT(SCMI_CLK_DUTY_CYCLE_SUPPORTED); + + if (oem_data && oem_data->query_ext_oem_feats) + oem_data->query_ext_oem_feats(sclk->ph, sclk->id, &feats_key); } =20 if (WARN_ON(feats_key >=3D db_size)) @@ -407,6 +418,8 @@ static int scmi_clocks_probe(struct scmi_device *sdev) clk_data->num =3D count; hws =3D clk_data->hws; =20 + scmi_clk_oem_init(sdev); + transport_is_atomic =3D handle->is_transport_atomic(handle, &atomic_threshold_us); =20 @@ -438,7 +451,7 @@ static int scmi_clocks_probe(struct scmi_device *sdev) * to avoid sharing the devm_ allocated clk_ops between multiple * SCMI clk driver instances. */ - scmi_ops =3D scmi_clk_ops_select(sclk, transport_is_atomic, + scmi_ops =3D scmi_clk_ops_select(sdev, sclk, transport_is_atomic, atomic_threshold_us, scmi_clk_ops_db, ARRAY_SIZE(scmi_clk_ops_db)); diff --git a/drivers/clk/clk-scmi.h b/drivers/clk/clk-scmi.h index 6ef6adc77c836dc2d599ff852cdc941f217ee388..d7f63f36c56d155f728325efd6b= cf7fe2585b170 100644 --- a/drivers/clk/clk-scmi.h +++ b/drivers/clk/clk-scmi.h @@ -7,6 +7,7 @@ #define __SCMI_CLK_H =20 #include +#include #include #include =20 @@ -19,6 +20,7 @@ enum scmi_clk_feats { SCMI_CLK_RATE_CTRL_SUPPORTED, SCMI_CLK_PARENT_CTRL_SUPPORTED, SCMI_CLK_DUTY_CYCLE_SUPPORTED, + SCMI_CLK_EXT_OEM_SSC_SUPPORTED, SCMI_CLK_FEATS_COUNT }; =20 @@ -37,4 +39,13 @@ struct scmi_clk { =20 extern const struct scmi_clk_proto_ops *scmi_proto_clk_ops; =20 +struct scmi_clk_oem { + int (*query_ext_oem_feats)(const struct scmi_protocol_handle *ph, + u32 id, unsigned int *feats_key); + int (*set_spread_spectrum)(struct clk_hw *hw, + const struct clk_spread_spectrum *ss_conf); +}; + +int scmi_clk_oem_init(struct scmi_device *dev); + #endif --=20 2.37.1