From nobody Thu Oct 2 19:27:08 2025 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011002.outbound.protection.outlook.com [52.101.70.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 8896823AB8B; Fri, 12 Sep 2025 03:36:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757648173; cv=fail; b=TC69/oJyyPUIKgcn4dWMbBzjU3e1xzwTriZKSBTJZTjWKqHwoR3U2wAF/YEvwdHzjMqWQK4+VTC3CP/EsRsAOuqEDMW/nj2WnCFQQ4VYL6Hk2gHjxIm+ahvFccOuRtIniFtmeWvCZHIycyT1hSFBXduK/llO3ypkJMrEUZNNlSg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757648173; c=relaxed/simple; bh=wMbTftlAEe7Gma3VZtrW9YNadN9te92bEc4Yk+OP+hU=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=VNvdu3Vd0C4UyhlJ7sRkLNzRb2N2LSnxTLOe9rFJwyi7FYrJERt4BrpliOFNMa/QB5BtMq+R4jzFTXVS5/EUn1RH3uFzazBeAIb0iTT8W3eLByso3VToBhbL1Q/1+O0MtM5v5ntFvraUnLllQF/PS0shnhcY3Mt8Ro5YrkFGBQE= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=YACpRn3e; arc=fail smtp.client-ip=52.101.70.2 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="YACpRn3e" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OCACBzTMHToxTzG+Y1JRi/8oCsuIz3pfBs01ZOB3x0VLNDfy4xHWkWaCkeEdy58AboUBg+Nk3blsUhMBHbNJ+1YSyj6D/0UrnsH+tDVs6+5iYGKFYXB67B1E/rKRoRjj74ppYe2wO9NkpnBJ4QqLOShfQFnsmwFoy6UMiARzOweeNPQKOrns1g0zvAzm1M5KI+mZpYT8eWgRSI97bz5XKvIcvcRzc710WJKir7KhbjC2qQh/GkvwHeSa3KZSB+iJ7CYnqNefzif7dtzzbNdK65NCmLZTrgcMXU9Hi6ooOJIzssJelAX1YwqiNYqAQOLQ9mdlM7G1Xu1OO+R3egDkCA== 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=FS2XaewpYjaK9e4CwZocVYB/heKGrxA49E11IICyxUg=; b=tNk33Z1ZDarUE4ntObL0OQg/+Ebw06nyiUCKMw1DAU+0dPfW3EUm8btk2tkzrODziazkXrpmU05wDaIcU5Z/ds/wpbD/bZGtqkc0mqdnKGB1wiLtaclo+ZsBLGjKLFPg1VxYp+4mblt46gXs0GzHfln8Z4SdeZSopEe7i0cQLJmm2QIx+/VWQNe2Pd286g7BYl+WFqw+mNyZKKCi+ZZL4jjcOOwl4hbsMf20Kx/oELYg7YUKBguH9L9HWhRdWggmYWzwbFIBBNB+Gg1Kwp0h6VG/cDNNxiCVWMy6/wAijiQnAfo0rtbuw9vutuGqRIK3l+mtRKJ99X7/+8iWNAgrTQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FS2XaewpYjaK9e4CwZocVYB/heKGrxA49E11IICyxUg=; b=YACpRn3efBhxJ3cV5WFTZAaUzZBMtq4OkPYYtzNFzwDSSv2ilYvMPVNlQYTrPHMZWR62HofiSnsu8DRtz5HQqaoxSqs7uMFoyVvMhKrvgtjKRVQ7KU5UOlieOPQL72iYwbVHj19UjFP4ksKGxug13y5bP3+ShAFo5IgivqFbdp2YIqNjk8wzOpsdcBj9llZp9PfsSzrFFMx7XgMt91aeAk6iz40nQrij6yCbXWbhkh85qoUF0QCke9otHZjPmINfsul4h07qwl5ML9o72PH2x8n0se8I+Ndl/zsArxFBNhi3k5aB+jKOSXCSKqtJ3g/3CvmS8joVxFaciD0fBsB6ZQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by VI1PR04MB9788.eurprd04.prod.outlook.com (2603:10a6:800:1d4::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9115.15; Fri, 12 Sep 2025 03:36:10 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%4]) with mapi id 15.20.9115.010; Fri, 12 Sep 2025 03:36:10 +0000 From: Peng Fan Date: Fri, 12 Sep 2025 11:35:50 +0800 Subject: [PATCH v3 1/5] dt-bindings: clock: Add spread spectrum definition Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250912-clk-ssc-version1-v3-1-fd1e07476ba1@nxp.com> References: <20250912-clk-ssc-version1-v3-0-fd1e07476ba1@nxp.com> In-Reply-To: <20250912-clk-ssc-version1-v3-0-fd1e07476ba1@nxp.com> To: Michael Turquette , Stephen Boyd , Sudeep Holla , Cristian Marussi , Marco Felsch , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Brian Masney Cc: Dan Carpenter , Geert Uytterhoeven , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757648158; l=939; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=wMbTftlAEe7Gma3VZtrW9YNadN9te92bEc4Yk+OP+hU=; b=HKWrz0l9NBd9Tx0sheWFZA4elUQKijmCzE5xEkeS6QfLzruYOtxVyVYlmh5FgSEHTfD+/oyy5 UEtApGJk1PoDoNJC8B3WG2BUCMKm6GokqKDzSwCBH/NN3QOn7IfiiZv X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR01CA0029.apcprd01.prod.exchangelabs.com (2603:1096:4:192::8) 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-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|VI1PR04MB9788:EE_ X-MS-Office365-Filtering-Correlation-Id: 5781aaac-067d-4e7e-b096-08ddf1ad83bf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|19092799006|7416014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?bG1uOUdXeStJOE8vdE4rMW4rOWdGL1Z1ZDJrYkhBMWpFMzZWV3NESEQ2bFZT?= =?utf-8?B?T3NaaVZ0Um5DOWFSWThmdmgrbm1vQWJMT3Mzc1VOL1dGMUVGSkUrb05HMEIx?= =?utf-8?B?dVFPRGMvUmR0Y0ZWa21OUHoxYys3NTBxcnNsT2tNTGZoSlBwS3NiU3lONGhK?= =?utf-8?B?Ly9COG5EQ0JZdjZwZVlNWjF2NE05RnBuL1VWY1VuMmFmQWpqeXhJVEMyNHJp?= =?utf-8?B?VXFjRzNhaVRRTXlOMk9pcS8wV1l5S3RKR3MxRVVpZVZEZGphMUJUSjczbnMx?= =?utf-8?B?RGdEa3hWM0E1SVNNeStyRzB5azB2UmcwbnY2WWdHakRjV2JHZFN6RHRmQ3dJ?= =?utf-8?B?QmVDQW9QVmZXN3ZtbGV2WmxnSWxtUG0wM245eVRqbGJ2aUhJQXdHamFVMmEv?= =?utf-8?B?cWlsa01OLzY1eFZtUGhVcERxMDJGbkZGRExSbzRmaDN6eHVUNG82RjJEMHU0?= =?utf-8?B?cVR1UE9sUk9BWjV5UmduV3JQM0VXaWxWbW5vdkpFcHdFU2tGWTJwSVJsRDJ1?= =?utf-8?B?dmhUc1FnajMxSjZ0bm5kWHorUHdwUDJNbUVzQVZsMnd0QU83OUc2dkIrT3Fp?= =?utf-8?B?QUkrOHdwY05xWWpob2dYbHQxLzM0TFNOemtPM1ppNmNrcHZwc3UyaDZWbHN1?= =?utf-8?B?d1hmNldodWt2cS9EMHFxU2s3UTBFN2swRGVKaURvSUxSN3A4V3QySVA1eXR6?= =?utf-8?B?RTMyN04yRGEwQ29yT1cxdmx2d2RTQ0swdEhMRzFKRnVYdGpEdWhSeHFEbEZh?= =?utf-8?B?Y1NNZ21CRGRwVVZGL2lJSit3NW10K0ZxV3BSQzlwRWF6bXpSaGR0cGt0RFE2?= =?utf-8?B?Tmt5WmZWZmFaS05QRmpyL1c2TDZrc3IzeHRUT0o0eHhKMkMxNXloVDVvTkJE?= =?utf-8?B?Wnp3QlN2VUdtampqZ1JTSUkxaEJjdVUyYWtrbjdRYXliVlB3RVhpczZQTFBi?= =?utf-8?B?MlR3T1NFLzMwQ1cxTTl0MDdCaWRWNUIyOTFWeG15eElTSkJXUk81aG5rYVI3?= =?utf-8?B?cHd6VHZteXVTNGlNdlJSWlJxRkwyZHdZekpiTXBINjBNVHBCaXNjQ3EvZTFM?= =?utf-8?B?R25kMGhNMU9FbWZmMHNKVlNjd1hvaXQwUkFwWENGUnhURmhjMXl3d3hTTkNB?= =?utf-8?B?YTlKdHpGOWdUSEVxSElIKzBSbDZiZzIrdFM1dnVHRnlxZGFsYml1NVpmdlJH?= =?utf-8?B?a1RyOUU4Q2FzanBPNXpJYmVibWxSTHQxdk1LOEg5NU5YeFljSkR0TnF4KzFU?= =?utf-8?B?ZVNqN2Y2Y0VPZzRaRVRJMVR4ekhVNTZLTnV1VC9uK3RDclo0VnB0dVl6Zlkr?= =?utf-8?B?MGNZblphZm5pbDc3cWEvM2h1RjZvUEJXblNhMHhKZTBsRi9vdU43emUwQ2Ft?= =?utf-8?B?N0o1dkREdFkyTEdWdjJWM0Fab29uSU1INVhYbDJYUGNxRzVLKzI5dm1pS29J?= =?utf-8?B?ODVpam9MdWVwSlp4YlduSTJveWpkTW5nU0pQaGdHenBXR2Npb0V5bU1yYllK?= =?utf-8?B?dHVoTjhvdUpta3dFMnVkVkxaUzI2ZHFYbUNpWVp0b0t5ZmJZTTBSdmFKaStC?= =?utf-8?B?Mmc2blpBYnNKYkZHb1JBU1V5SDNNTWd1Sys0WHhGQnBoSGhESk9FMWMxdE1U?= =?utf-8?B?ekd5MXdaM2lLNDM4cExUMlI3Nm1YMnhUZFhNWWtKdnBST2hoYWFKeE1UbFgv?= =?utf-8?B?VTRZUXVZcXFzTHFHb3F5eFFQOFFLTldCc0RkZ1JNcHRBQlZETFJDZGJ1K1c4?= =?utf-8?B?dDQreUxyQzhzVFB1UC96dUpDVmZHMnpKeFZadm5TVlErQTdwdjd5cFJqc2NR?= =?utf-8?B?U1ZoNlNSa0xFUGg5a2h3MXBXT0lqZzJBWXpLTDI1cXhaYVE1Q3NXc005d1F0?= =?utf-8?B?R0tNeWxxaURVWXZQbkc0czRiTElGSVkrR1lsc3Vab3hYQUcwbVc5NE9uQU85?= =?utf-8?B?RThobkpjWWd2YzA5QTdZWjhuSDZLSXdLVG5zbWNOTEFObWxUUE01R0k0Z2p5?= =?utf-8?B?Z09qZUorT1l3PT0=?= 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)(366016)(376014)(1800799024)(19092799006)(7416014)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TXBPNXJJbFNpZmxyb0JUMFduS1lWWnRMcUZ4ZjFiTnFDbTRONHBsOWhvN214?= =?utf-8?B?QU1ta3QzVGpvRDJUY3A2SUFvT0t1ZXkxMEd5Q3AvQlFmbGY4M0ZxazhOck1q?= =?utf-8?B?bndvSUpxVHRhYnZNaGNua3dQWmFkNzY1eDZTQ2RQOFBKOThneWZ2WVNDNks2?= =?utf-8?B?b0podU8vM2xISjg1K0N3T0h4N3JXVWdtbUorQkUvM082UGV3WXZoOXV6TTd2?= =?utf-8?B?MUo4KzNQaXAxQ2lOemsxMmdheElET1A0Y3JueGhSVzExeVhjcWsweXNMYk5T?= =?utf-8?B?dzlYN3p2V3QycnZMMkJrQndjaXd0dWhsTXRNNERnazZvNjRydklQNE1JQ0lJ?= =?utf-8?B?ZXZ3UjhSZ0lHWFlLL2tRcERSWWIwRDVUZU5yNHpncVFUQ0R4alNsWVN6VHpR?= =?utf-8?B?cVJxUm9pbHVFNGtBS1hFYjFLTnVyaVBWUlJwZ3ZHMWdmUXdHd2tVeitjRXVs?= =?utf-8?B?d0VMdVdNM2xiOVB0NHpQaTR6SERJLzUzaUlsb2cvL05yK2czQVV4dDVsbnZZ?= =?utf-8?B?MEpobEpwbHBTYjg0YWJGWFNHbzJOTzA5K1FHTHVrVmRWMFo1ODdTbjc4bTRH?= =?utf-8?B?dTd0S0FCMjhSTGxFUUNJZkVtbERXMjVLY2lsZDloQzQreUwrUFo3UElBVU9G?= =?utf-8?B?TmgzSUVsVWtsdFBVcGxJTGdYL2g2bVRGTnFVNkJGcFh0b3BHREt6YXEzSFJM?= =?utf-8?B?NnFWMXhQWXk3YUtncmhudU9vUndqQ3NhRFprc1RYMkVqcWd3ZTFmWkxVdGth?= =?utf-8?B?V3pCRDVPQTNNY3FoUjFNZXJGYS82VVVjVjRZUkFUajJKY0hOK1RQNnplcm5E?= =?utf-8?B?b3NiSUR1b1U0dXl0MTI4VEdndXhudnR6UjFtVjVsdGNobDJRZUFkempDRk5Q?= =?utf-8?B?ZzFGZjBEMTdOUTB3VTUvMkQrL1BRdFZpSmxUVW96MEsvc2loeG5XbzRzL1hC?= =?utf-8?B?S0I3elgyRzVXd01Tb01DdmhvQXBvL2ZGcU5FQWZSYTBoV05JZ1RnQWhXNmJO?= =?utf-8?B?cVN3emwzaVViUHJYQ2xHdXZaMmRISWtTSnBEZ0txZ1B3U0Rmd1dtWXFCdFZT?= =?utf-8?B?TFMvUEZFUTZreG9XTG5CRHA0bXhoWVRhTGdwQTVCYlJjTm9QdzZhdWgzaG5H?= =?utf-8?B?M0hEOGJiNjNneGNaN1d6MmtqQWFUbVByaFc2Um1oVGc2My95OHNMZDFyZmhK?= =?utf-8?B?dFVoUDViVUl6ZFpmTTE2dU5QNHJkTXRhMGwxZll1bHgydU95d3pKaFFDQVRv?= =?utf-8?B?djVkWmhIeUV0Vlo0SGdOME5zWGlDSmFldXJOd2NOQk1zemozRzRRYjFBenRk?= =?utf-8?B?MFFLN2RNQ2ZiMDBiMmtHQ2dqVHV5aEJ4V0J1djJ3dGduTnlDUTB2R1U2OUNR?= =?utf-8?B?QjRRRGFPSU5VTXlrTUhncTFraXVlQk9PbEtqWEVHL2hPaEFlcEc2SFF5enRs?= =?utf-8?B?ckJaU0lsWTh6Ui8yZVFRQ2l3YnZJMVZHNXhCYlFHNTZ0eUVsUUovVU4rWTU4?= =?utf-8?B?a29wUEw1b3dSVGJqSGR3bDRtQWtpZFZQbGw4cHBubHI4N2libytSa0hUZm9n?= =?utf-8?B?Z1Q0a1VMZUlkYzJZU3p6dmxwSTBsME5VcVIyNXRTcEFpcVMwcnFGNm83c2lO?= =?utf-8?B?L0xKTFp6L1dNdUNrRXFRQzNlKzhheGdtZWJ5ZkRLSSszb1NhZTVTaEtYMlNm?= =?utf-8?B?UjRJc0dDd2hVYWpQbGZUaGk1eCtrMkxXU0FrTE1ZQnVMb0pwaFR3dU45UjBu?= =?utf-8?B?dS9UM2ZQN2tVdkdUaXB2ODNuYzFnM3ppSGRaR24xZVcxcGxvNzl5MUVjQ1JY?= =?utf-8?B?ZXNOSnZrVEZROElpSnVGLzhJdURkVXNHaTM3TnJMTklSc3FYNkVncmFVWmFy?= =?utf-8?B?ZmVXYzFSaURxTUxZZEZEMUxSMVlpY3kwSTRBb1FNK0p3amNBVXk3dEVFaW04?= =?utf-8?B?a2tPV0wyZWVOWS9ZaWNsL3llM0tkam9Cb0thbVdiakMrY3pEUDVTaXdHaEN6?= =?utf-8?B?cnpUbVpJUkZxb24xcmx5MU1JbVNkQVNEazNaL2dHQ3hSaWNxU0p6TnMzOTla?= =?utf-8?B?N3VDZDZXYWNrZitRQldpaXdZNXRpOHVvaFF4UFV1VDZFeFJVaENqY05QWjk3?= =?utf-8?Q?kwJi9U+SPFGrG4LzLt3UKekPD?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5781aaac-067d-4e7e-b096-08ddf1ad83bf X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Sep 2025 03:36:09.9666 (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: m0FwiMfH28OxMj/FMhl3kXfcodmeVnpA+doE5v0FQF2g5ZD3ctNF96TwLFKcuBTHO3l8QnlybFdg9HnGiKkpvg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB9788 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. Signed-off-by: Peng Fan Reviewed-by: Brian Masney --- 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 Oct 2 19:27:08 2025 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010041.outbound.protection.outlook.com [52.101.69.41]) (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 68FC023817C; Fri, 12 Sep 2025 03:36:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.41 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757648180; cv=fail; b=NrAlwRKakePBpDJuk3QL8gs0IMzHQGk0zcsAoRnpKfUhzahb4xlOlD9eHC3tqD/FqgakPl5FQlyCxFJJceEqCVJ6l1pts813aAS9kskkLnAs4oxh6xOrU2n698AdFMBLZVODGOgoZK8thvTW6M7kRBBWYPgdXll7eWsXIPgwuMc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757648180; c=relaxed/simple; bh=VOjq/ghgK837mNXju++QVTEoLeNdTaomT3k2QLbPfhc=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=p4bJpLogyGvg+6P/vtiDZqAWIlZv4eEb5uCkiwkEU1eN20j1eK8Po15U+IZJq9EUFKkA2mbPBxBDbkIaogEsOJPh73K6cXvdsFnDGDSlX/kZq5dOOPUk60WyL9es1b5sCTg9CkRfKDxVaFC4RfbnAUUFP7uxvv4ERfTDR9iPT9s= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=BSzeeHeg; arc=fail smtp.client-ip=52.101.69.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="BSzeeHeg" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FkxPaZMWQBPdC6q8gnC2272EwbLHN97Joblt/JPf9vmqIuV/Ro2Vj8rG94rzlRslUxn6HGUaVC6Qy40eLZNchYRAeXIOw7jrE7kgqZ9I+sHCuyK1F7nFj5oLfgw5kIuUxlQHW9cCjulsV0njcJl2dW2zri2Pi+CgCjuDxwig7c1pj+7fBUCaQL9JteZxGU9zITIN9HYcn6yuNQidM97hSTsAX7tUyGYINo0snQIODEk3xF182IuASNezIUyOVtFOruWsJ1ffkAAAPSOqt2k4jT0Qzk5TRHtoAdymqHj9EHxYwdo5WbHgJt6v0sN8TxEBs+jIjNXnOZv0sReESSVBLw== 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=V5b/ZvUj1FD2j2LOdy2VaBnpN1Ag5cyt4M99bUNqglU=; b=jtl9YpdktKkq0VehQqj23uP7At6ELroBXtAvTOmzk2ezVFPIz26nl+oUerQRuSNgLyyFKGVtdxF9Fsrot2kaenCBkAIaZRQ7FRfv9tgjd434EZmxPWj1DKAAkB9SZF1HC0peNFubk1Y3OHb0anhpADWEw0QYhwIbc+3mv47x5vU21L79xwUQfUrmfwpkIRDhlFG/nbvxHEGAyicbFRo7l+OZWWIV8DzHDwEQU+t7L9nFs/OruX+PEQEDsiR7PhtTpb08IHl28SeWLcSn6wBcSQn/qL5WVIj3Q8aRN3m+zBE0iODZ24dfDWRpJNuN+IyF4B1+sZvyTEsQBHTttZCEtA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=V5b/ZvUj1FD2j2LOdy2VaBnpN1Ag5cyt4M99bUNqglU=; b=BSzeeHegZwBmLo0olflrqhadBPySB+oNvw427zfPP2hCIbdz4o4sFUwIDONriy6DwDgplCniSXa+hfKkxpY3wF1jUkfRX8PUP4ZLIAbZE2KOSsYIG0WKuRjIncVlL+peWZMhC1vLLk/M9jjTaP2lNhYr9vpsoasecqlVbX4vL67qaSWtO7bCohOzwFv6nDYFypb/EVxUAMfu8ECvAEX89JmxqEC6QOr6c5dAnRT1KLOBc7zEoqbUnZcU7bpFvXwJ6m5rscFk74gE1uqTbEFQRiXaM3pGcLGaQS+PeCzjWmu7aOJV6tOFcoMZ84MofWgmDjsMKtSm+IJCN3RIuenbaw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by VI1PR04MB9788.eurprd04.prod.outlook.com (2603:10a6:800:1d4::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9115.15; Fri, 12 Sep 2025 03:36:14 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%4]) with mapi id 15.20.9115.010; Fri, 12 Sep 2025 03:36:14 +0000 From: Peng Fan Date: Fri, 12 Sep 2025 11:35:51 +0800 Subject: [PATCH v3 2/5] clk: Introduce clk_hw_set_spread_spectrum Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250912-clk-ssc-version1-v3-2-fd1e07476ba1@nxp.com> References: <20250912-clk-ssc-version1-v3-0-fd1e07476ba1@nxp.com> In-Reply-To: <20250912-clk-ssc-version1-v3-0-fd1e07476ba1@nxp.com> To: Michael Turquette , Stephen Boyd , Sudeep Holla , Cristian Marussi , Marco Felsch , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Brian Masney Cc: Dan Carpenter , Geert Uytterhoeven , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757648158; l=3482; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=VOjq/ghgK837mNXju++QVTEoLeNdTaomT3k2QLbPfhc=; b=pNKj/OtcAcEGbwAqeuhSAFE2ZKWYRAZdN5b1RDd7bJFMaM1EwSAYhwy536vSMfVc7uuK1boG2 2qdR7kepIucCXAyij0JbcT/D/aybiNgVL1xAnUho/nEvkzntFLJFK53 X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR01CA0029.apcprd01.prod.exchangelabs.com (2603:1096:4:192::8) 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-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|VI1PR04MB9788:EE_ X-MS-Office365-Filtering-Correlation-Id: a35bb49d-48b3-4eab-91d4-08ddf1ad8690 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|19092799006|7416014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?cnpFRUR2TWUrbjhtMlZ5bGVtT0NTU0x2TWlGalp0MkhSbisyYTUvYUY1U1BU?= =?utf-8?B?dWtjSDhSRWtQOEtyS3NQUS9UM3BsWjNjMFdNWnkwVzJRNzhWRElmVXl2UTVD?= =?utf-8?B?L2pDeGoxUklHNExoUDRRQ3dKaUdON014VEJFd202Uks0VDBSaVlSRytWaTBP?= =?utf-8?B?VUl4RzNmWGRWWDRlM3QxbWxGeXRQcWl2TDBrVS92V1VsN1ZTMWwwbWNHS1h1?= =?utf-8?B?U3Rsd0VuaHFTa2MvelZ1dkZLMTVNRFhwMFJnYktUYkEwUUdhaEhhSHhEYkha?= =?utf-8?B?Nld0K0tRTlRheElDUGF5MG9sTEswNGk5Z0tWUDVWWkZFa0kwNVJTRi9hcWRI?= =?utf-8?B?WFQ1Ym5HSFlvaGVKdDIyd2c5L0hhK3YwTVpuZ2NMd0pMTk1TRXV2V2ZraUdH?= =?utf-8?B?cUZtaEs0QWJpS0JRNURRcml5Q0N3OGdpcnl0TzBTbTNIaFpKbHBiKzJFeXFj?= =?utf-8?B?Q2ZFclQvN0hiZjVVVzJsWWdXR3p1ZkpUc2JsOU4vbFhDQlNmdkp5ckpLenlM?= =?utf-8?B?SjJVVFZBYVliMGpTeHh2R2Ryd0YrRHJKQkpHL1Nlb1ZISk4rU28vQUs0eGR6?= =?utf-8?B?aStBQnd6TitkRmlQU3AxUXhMSks1SFg4Zml6R1BtRnRJUzdEL0xETFFXbVdX?= =?utf-8?B?cEJJdkJpSU5FQXhacWhWM1owZVNCdHc0M0xFRCtEZXR5WDMwY2wyTGM2T0to?= =?utf-8?B?enN5ZTZ4OXNyYThlUmdhSEIrVnVsZThNbENoVTF0TEgrdnorWmJHejU1Mk9L?= =?utf-8?B?T2dIY1l1dDBHU29OQnFSUjRrMWpFTDBDWG9BZ0xyVVVYRURZZnovMjI2eXNM?= =?utf-8?B?L2lnRmFPR2xkSUo1TnZsd2J5OFh2aUdJV3VNQ0w5bSt2Qm56MU1FbWplWGs4?= =?utf-8?B?dGthbXVHVnN0cCtqYjVJNXQ1WWFrZUtERFgrRGQxeWFsMlpBTGlBY3hqdEtE?= =?utf-8?B?YTJTMGV5S29vNkFST1dJbXhpZWlXdmswNVVmL3E2ZTFlTEJUZUkzOTNFNWQw?= =?utf-8?B?d3EvU1plRzBkczI5a0oybCtHR09Oa0RRTzhZczZMc1dQRW9WVDBUY3dRWmNm?= =?utf-8?B?MEU5MHIvdmx5MWVlSXJMY0MrTThSUmM4Q1R5aUpTdURaODJ2aWhCMm9McmdY?= =?utf-8?B?cjBiKzhVSzlPZVBDVU1xVU5pVmtmdWRiVjhaaWZFTFBkYVNJNDdEMWZoa21s?= =?utf-8?B?NGpGQlVtUU8rdGtvNUxZeDFhSHp6VEYwam03UTN2OW9mK2F6UDNIam1sV0Ra?= =?utf-8?B?eTJWOWl2NEpoVFd1SVlFWXB1Yk40T0F4cU9zcDFTZVBhekpJQ1g1L1A1YzJD?= =?utf-8?B?alV5djVWV0M4R0M5VktWS2NqbU9YUmdXcUtqSVVTUDE2SjhQUjFFTmRtVUFH?= =?utf-8?B?bThzbkY2RWhJdGwwVFZ2ci8yZmxZK3phcFQxUHhQYjJUVGJvSTBBQnRkQnpa?= =?utf-8?B?TWpVODBNTy9mT1Yvd0krT0lBT3BTUU9KSk1MN2VNbStOcGF3aXRYTVFKdG9m?= =?utf-8?B?TUFGNG1VZHd6eWFkNmNTYlRDU0Q5K2dJblgrYzFmMm1tMkV6WVBrdFcrZU5w?= =?utf-8?B?R1dZdit0ZmlONWNJZm9URlA4ZUkvRzNoUm11RnBIMWVmT3NrYnNHNjRJbFhL?= =?utf-8?B?MHp4TFNPRTVDYVA3M0c2a3Z4dS8zUXdFa1lneXZYSHlZbnB4WmJLSEtVcU12?= =?utf-8?B?WW9UaHFLbFUxM3Z1OE5DM2F1ZjBHc0ZmRCtJWjV6R3NHd3FKQkM0ZUd6UmU1?= =?utf-8?B?NmxtR25LT2xNK0xUK1lLZ1lacnVaaHhvaWtCQmgrTjY4UGVBcmU3TytvSnFJ?= =?utf-8?B?c1g0N0RLK0lOR0tLcjRTdE9tdFdWOHVZMDhxYTd4Q1ZTeHVjWmlGNGkrUEtr?= =?utf-8?B?d0RRR0JkTVFjOHNYMlJueGh0R2JCckhTNEFtai9ra0txaFZpL0lCMzNpVE5L?= =?utf-8?B?d21RaHNqVGNWYmFDb3R4dTIzRUNFMFZsL1ZKbk9iQm95RUhubCswMDcvUWZX?= =?utf-8?B?VTQ5WUNuR0ZRPT0=?= 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)(366016)(376014)(1800799024)(19092799006)(7416014)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Zjl4bURVNCtyemJuVFlUZUgyN1pRemp5UWJWNjR5ZmI2VDF1eWwxM21mMTNH?= =?utf-8?B?SXQ4Zkd5bmJDOXQ2QVpXOUVhNXdZbHlCU2ZCeDBuc2tDOHpSWG1LZFZRaStU?= =?utf-8?B?VVQ0d2gzd1J0Nkw5K2hyREN6djZ5eFdIWE4xYUhnU1J4ZUE3QS81ZEtPcDVm?= =?utf-8?B?N3N2VXQ5NEs4OVk3MDl5SngzZkE4L1BoVDVtRVlCMWNRR3VHcHJlaFA3SjRm?= =?utf-8?B?U0NKUVZBRHVjNzZNRnpBMXNTWnhZd0NrVmx5dDJ6RjM0T3IxZUtoMkFTZkhx?= =?utf-8?B?ZjBjQUYzS05yTGFjTUZhajJxdTNYaTdKVzIyZmtLQzhkcVhUaHJ0empCU2Ft?= =?utf-8?B?ODI4Y09VRWJWYjFjS25VNkRVNGFTL09pVWVzWGYrckVjT1JIenlFYjBmT1h3?= =?utf-8?B?bElDY3ZHWEttWXYvd0gyMFhBV01GczBBZW9jZU5tMHRmbDZuN0FrUEFWUHNq?= =?utf-8?B?Y21ZT0FudnQ2c2pkTEhRZEZib0RlU21lRGRtdVRDSmQ3Y0g5UVY3am9EckJH?= =?utf-8?B?UmtySTRmTUtpaWh6R2xZdXRmMnpIYWZ2eHhJallCMk94cGVESjBoVTlzak1n?= =?utf-8?B?TXBtUnJDdVk0VDRxUk0yNG1zL1ZCMS9jTDdhdjJLQkJ4Wk9uRkdud0krNnF3?= =?utf-8?B?cnRDTCsrdUVlMHQzckhyMmtjRjBVWFBqRzA4WW00ZFBnbzcvVVBKTFplY1lI?= =?utf-8?B?LzhjM1U4a1RXVVo2K1FNTE04bHFCTGpoblNkNzlub0tOQUxDb0FFMkdpYmJ4?= =?utf-8?B?RFFOenhodS90MGF5L2JtWVNGREpwL1J1c3BaaytRZWV2dU91THg0V2ZrTlhD?= =?utf-8?B?cEhIWDQrb1JhaHMybWFDa2xKaEVTYnFBWGozbVBuYVgwU2J6ZGYwOFlmZEFr?= =?utf-8?B?OVgwdlVtZkFCSDRpeDFuRDJXOHg0OS9ybGpqLzhVNWtJZURiTWlhRlczTjlI?= =?utf-8?B?N1dZQjhqbzhFUWt6SmJNekZyY3VOWHdOQStjZDV5cHlaRGp5aW50MjRudnpF?= =?utf-8?B?YWVpWU5XTXprazduVmRidy9pYVJIaHZwTHhXNEdwdVlXVDgwcytodzVJV1RS?= =?utf-8?B?RzBmSjJwdnRyNHdiTStralZzTWhIOStheWFiTXVtSkZyMmhDMTZWYW11QXlN?= =?utf-8?B?SjFtN3N0YlRpUkp6c0liTlMxYXhkWjhHUTM0MlhHS2VOazJjaGRTSWpjZWhs?= =?utf-8?B?dlA3S3MzUUh5YnBIc01OUzVsM1Rkc1ZsbUlzSjdlRzRHclRJZXR2NmV1QnlR?= =?utf-8?B?ZmtyOHNRK0RXNnJSMnUwbEEzSjR6Q1ZFeXUrMUpXK0pNZ1V4c29TZnVQcisv?= =?utf-8?B?VnJ5aTNLbS94UmpDYmNQTlVLNXpSOUZWYWZLbTdyTzYyajduZ0RGYXVXZko4?= =?utf-8?B?dllBS3c3RFd6SjdjUFBwTWV0YUFaZ2RyNEQ1dzcyZXlkcXVZT3ZBK2R4T1RG?= =?utf-8?B?ZjA4S0ZsSU5kMWlLaUhCOEZUYU52ak4xVVg1U2UvL1BGQmR3SFdYWHdISTRo?= =?utf-8?B?RS9iWTBzSkUvOVR0ZEl1d0JkaHI0Rm1kd3MwYWxHQmtvY0pqYlNNek1Qb1Zp?= =?utf-8?B?cEtKZlg4VHo1SitFc250QXByTGh5NmVDZ3Jrakh3ZFl6RmcrbUo1WS9RMDFs?= =?utf-8?B?d0l5OWZQTmN6Zitsb2lCcHFvdXllUXRya2liYjM3VW5kbFlJV3ZDa0FEM3Ar?= =?utf-8?B?S2NtajB6STBkeDJ6QWRPeStWb3k0eTZlV3FmYm51M1U1N2lkR2l6VzdpZml4?= =?utf-8?B?R1dSaWFCb25kUFJqTzlNN0VmdmJ2TFo0eTJwR3d4V2RQUE1yYW45Sll2V1lG?= =?utf-8?B?d01mQnREdHRHQ3c5SnpUOXJIYTdyQ2FPb081OHRYbmNtT2ZFSTdFekhJVHBR?= =?utf-8?B?aEZqRGlkZlRmOWM2ZXRoVFg3ejNmS1FjektFU1NHaE9pdjY2QXBZRTdIS05B?= =?utf-8?B?WEZsa0JEQ2tvLzV3RXdEN0VNejIyYkc2ejFPS3R3cmVCdHFIa3BQMHB0YTR4?= =?utf-8?B?WGsxUVNpbHIwRGpLaWpxMjRzUUVGOHQvbE5KQ3hmSUVPYzhpaUl4czEya0ZT?= =?utf-8?B?bVVBaEdOenhwOTFSYjdFbGs1YlQwbDZiU2tPTXBGTmdwbllPZEdLNkxtSm1Y?= =?utf-8?Q?lRledov6JtNFzT147VzbDhhBs?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a35bb49d-48b3-4eab-91d4-08ddf1ad8690 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Sep 2025 03:36:14.6842 (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: 4Esa04xFfFxDNxwT3aahbJ5kyN0iybWl/CUfV2NLCAN1TddS5fu7s9MeN5pwk9G9l3t08pjFMqhaXKxUcpUtRg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB9788 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. Signed-off-by: Peng Fan Reviewed-by: Brian Masney --- drivers/clk/clk.c | 26 ++++++++++++++++++++++++++ include/linux/clk-provider.h | 22 ++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index b821b2cdb155331c85fafbd2fac8ab3703a08e4d..06db8918a1b35e3280e565272bc= 4603a88295a92 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -2802,6 +2802,32 @@ 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, struct clk_spread_spectr= um *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, conf); + + clk_pm_runtime_put(core); + +fail: + clk_prepare_unlock(); + return ret; +} + /** * 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..4f48a4df95a1c54638a0e91e0a4= 49fcc8aa40b80 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -84,6 +84,19 @@ struct clk_duty { unsigned int den; }; =20 +/** + * 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; + u32 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 +191,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 +274,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, + struct clk_spread_spectrum *clk_ss); unsigned long (*recalc_accuracy)(struct clk_hw *hw, unsigned long parent_accuracy); int (*get_phase)(struct clk_hw *hw); @@ -1430,6 +1451,7 @@ 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, struct clk_spread_spectr= um *conf); =20 static inline void __clk_hw_set_clk(struct clk_hw *dst, struct clk_hw *src) { --=20 2.37.1 From nobody Thu Oct 2 19:27:08 2025 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013058.outbound.protection.outlook.com [40.107.159.58]) (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 DAB4C25F798; Fri, 12 Sep 2025 03:36:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.58 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757648185; cv=fail; b=cRpTRSmw5etV71OhIgLaD2+ewFg+kjPeTUBltBy5WQ/Qo2G3m29DX9cs1Y4BacQRHDG4lwAI7690Ip7/ePPLY/vqbayKyFf/go/0y5VgB9+ovLswBxsmsoQWPcXC9qa9muF4rW6sUczNSev5UyIveiCNVa8sm0OpY0CIkgWjmNE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757648185; c=relaxed/simple; bh=PeRl5P3IHKJMf909jjQ/u7GR9jCDfliupm8kEswxFCg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ktM1pANNOV+7Ag5rx10n4fTpgloSOZ68zFbYV4yWrM4y2VV8wqrWbCpCXoM4p9rA5bUqLO7XdXKn+f8t0cwrgJVa07gvngzzbf91gp/NKsVxcnQqI2a+mXsB9/5ufZ0gAvq59tKlZiSIH2rC8YaHxfJZlZSJERspiWUul+H0ZpU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=g9WFt7sg; arc=fail smtp.client-ip=40.107.159.58 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="g9WFt7sg" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=U339lnnkLxjZ/93wokE4UKnD8IFRiOOuy1qiCau4PkvAHe9D+rMKI7VkRpcGoCKDx7189H3qzxYxw69ufkDikuv+kGEVI21hh5XkL7lELfFX/30pPDWJeiZf9zCJC3otWhLZRS8OkSt0lIv6bDfJxh9lLF3JTDu6Iq7X7ehrTs8QtNsLwH01mxRVG/HPCBbaqBgxP4Svnp7D1EDJxau1eDrLE5eBu8MsfD96xDMckGenMKvFfsGeRuuEn9fJl30UTf6vsnVad5f+DNCHDIvNnDXjQ8keW9I4trcICQdPRs7qi5AGVGLiWt/tn625R6Diy+4bTpzoagOzygEH/dcIHw== 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=7RxnQJJTFP/qar4FBocvrDx36TKm9SbCky48kLKdZUQ=; b=LElaie30am/clwXl7UsRxSxeQWw8BSL69nglME+PNuTm4q1rWZygAZrPSf8ZeV/IA0UP8HaQNS24UuBBYFdCjkck0UHlOYG8cpBTqNe5OaxgBdpAZm19+K1IMGbo+P2nJ5IEKH1JjOowzh9csp+XTyyGFjYPcBjwo8RwzObzrBiekbS7HlKmpJ8/dneLvmwvdZdi30UFA8cou8T8Yzzi4LvnVSgEOI7XAnjKNgEaX6hLPxZLNgzs5VIcCNvVai+21FYVXWQlBJcvEmOOXGeE454r3RcYQgxiCPjb0k2hSZWMNgEiVVxTT51IlAUK3+1nxPUVdrfSn+oIKubtR3h4oQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7RxnQJJTFP/qar4FBocvrDx36TKm9SbCky48kLKdZUQ=; b=g9WFt7sgQ2j2qIqwHRQotdzFY4TUXEU96faO58wKE6LVBKcjuTE4zNB6Vli2Vl9/4nvCsBNRc0ONJDa3QKGk8gh8MOiH9QbSA7JiD0BTsEhuEpwkbtet8Z/MsT5xAq8/4RlbFwrUCYUYqnaLIuD6gmf6AQOYfEVGJqCobzQ1pHKK+rZdi3fBUqtZ0s8CnZgAwrf8+W/Ugnzn3klJFLalIkyu+UdBpko98Zctv7MG2B7az25WX5LtX50MUCSHqN0urlmrPFyrx3JaOaSbFqqCPlgBWvpxL3p+qfeUFqr6tLh5GnjPADZJqNBVxWv8XbaLb/rKizsm9M0UMfTv8NArmg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by VI1PR04MB9788.eurprd04.prod.outlook.com (2603:10a6:800:1d4::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9115.15; Fri, 12 Sep 2025 03:36:20 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%4]) with mapi id 15.20.9115.010; Fri, 12 Sep 2025 03:36:20 +0000 From: Peng Fan Date: Fri, 12 Sep 2025 11:35:52 +0800 Subject: [PATCH v3 3/5] clk: conf: Support assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250912-clk-ssc-version1-v3-3-fd1e07476ba1@nxp.com> References: <20250912-clk-ssc-version1-v3-0-fd1e07476ba1@nxp.com> In-Reply-To: <20250912-clk-ssc-version1-v3-0-fd1e07476ba1@nxp.com> To: Michael Turquette , Stephen Boyd , Sudeep Holla , Cristian Marussi , Marco Felsch , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Brian Masney Cc: Dan Carpenter , Geert Uytterhoeven , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757648158; l=2996; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=PeRl5P3IHKJMf909jjQ/u7GR9jCDfliupm8kEswxFCg=; b=lBVA4hut+3a4jdhoiDzhNbSrinwuj3VN8qqvE9uT9caO6Gf2VCrm4sNExmPcJa5JDWuJR9ZNS v6ECKpXtS/pCFplY8usYRBg2EsoZSNvxr0NQrQ/JpAHpkt35WN0wbMr X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR01CA0029.apcprd01.prod.exchangelabs.com (2603:1096:4:192::8) 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-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|VI1PR04MB9788:EE_ X-MS-Office365-Filtering-Correlation-Id: 6191559c-fe79-4b8e-a0aa-08ddf1ad8972 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|19092799006|7416014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?eDBubTdnUnZOV2xhNG4xYnlMOWdqT2ZjZ1Z1WkNjek1TOFFhUnIwbUJnbG9E?= =?utf-8?B?S0lNZ3M1cWlFekliYnFPQUR1UkNSVWZEZ053eWE3S1g3MUpMVy9EQ2EvSUtP?= =?utf-8?B?UlJ4NmxxMktPaXhvZGFPdFFPbC9mcjNvYzlFY0J2MzYwVWJZWlFWRVMyZ0I0?= =?utf-8?B?Y01XRTZYVjZzY1NpemR0TU1XcHpsTjV3RUgwMm1KMUxsVmorTU9qWDlibWxq?= =?utf-8?B?Ky9BM0ovdmNjZFZ3RTZvVVduMThXc1oyOVZxRy9JUkxuaDFJbThFSk5JY2JQ?= =?utf-8?B?VHJKd0RYc01GelM3VENHWFlTTHdISzlIb1A3WHdvcE5hNWJ6V2NWRjk1TTFj?= =?utf-8?B?bXRYMHVMSWNTSGpkZGJiYlBlekJjc3A2ME5lalAxLzV1Z0NxSTduUUV4U1k5?= =?utf-8?B?eUVLVnJSRDVVZGZMYzlOd01La1YrL01aMWJqRGdjMVNPazNObU5scHlybnNl?= =?utf-8?B?YUJkMmpFMWZRd3BLbkxQRWNTbHVubkcyaUVSK3N5U3Y3WVJEamlid1luVWdN?= =?utf-8?B?N2FXSzJJcjNtVU5LMHRWa2pwSEpycFowdkpXS09uVjZSUVFmcGlxZ1lYZkls?= =?utf-8?B?TXk0a3RNK0VXcEhwa1I4c2pjWVdoL3ZadlJML0F4WUk5TnR6MEttZjNxSkJL?= =?utf-8?B?bjExQVEzdXpBanYxSmpiL2VIa2Z5eVBXR3k1UHorRjVvQ3RYeUZacVBJN2Ew?= =?utf-8?B?allKNGgwOGg3bW5NWGwxQ3ovLzRRTmZNQ00rd3I5N3hWUEwxQVdTazIvNlda?= =?utf-8?B?RUcydlJPZnVrSTh3M01lcVhNYW9aMDFxZUxzcWNqd20xN2ZXYnNWT2o1MXB4?= =?utf-8?B?YlJQck53b3hoNVBCUlkzclhCQjc3OE9KaWhOYzJOZ0xXbEJKRnNCRUxVbGJ6?= =?utf-8?B?RE9mYXFMbDRaVkpDaG5FaE1aNWtFaEdtWFFoN2ViTm1qcUxFNjBSYnVSWHN0?= =?utf-8?B?a1lVS3c5d08xMUR4QlIxMUFORGptQVF3TEtOLzhTZVljazFzZlhtUS9QWURY?= =?utf-8?B?NlV1QUkzRjM5eG9rVC93QmhRUW5lTitPdzk0bGhZdTJsQkwwWDhVTnMxbUhG?= =?utf-8?B?eGpwZE1sWXBiTWZCeGU2NXVPcXNNNDlocVByQ29tQmZ2TTNDSCs3a0NiUFpL?= =?utf-8?B?eWpRN2FPTzJzTGlOS1VOSVp1TTBaUWtNUDlscG9kalFGT0FvUzRPaWwvTGs2?= =?utf-8?B?UFp5NEJxVW1adm8xUGZYYm53S2REQTZyWnZmS1pZYWREd3dDTFQxU01uQk5r?= =?utf-8?B?Z2Z2aXZDb0owNWdKaG12U2YxVEFGVnJWKzAzalpGL2RwbEViZ1RtWmlwS3dE?= =?utf-8?B?UlR2NVFmbDRjWk13SFZTdzArK2xBVENxTWtHaWdob1k4Qm1jK2lvTkZEbzIr?= =?utf-8?B?eTJCcXVva3pUWGs3YUgzYVpQcEV4dlQ1TWsyNTM4MEYyZUxvSHdjZEIwc3di?= =?utf-8?B?eTNnV21ncFhZOWV0cUdPem01RVh5WmE2eEpaT0VuVDF3UnNPL24zNDhpMDJ2?= =?utf-8?B?aGNOUzdMdmRCb0dCUnh0WHNKMGpqQm5wd1BxMk9NUFdMM3gzZ1RZZGp4NUFT?= =?utf-8?B?V3Z4M0Z1OU5OaDU0ZTRsQ2tEYWlySDVJR3YrU0NjeVdHTEJFM2VNU3NHc0dh?= =?utf-8?B?RXk3VHVvQ3dGVDRMaFhWZlhOa3A3NUExVVFQZllneVFRZWdlZ1BmY1hLWGJz?= =?utf-8?B?UnZRNS9lZ2UxYjllUUFBSHAzaWFkVzhtZDljRjZHcXZjc0hMSHVqRzF4aHN3?= =?utf-8?B?Rjd6dlpsQ2FxUkJ3UjAxMFo4UGRURXBxaDZnOWhLQkFwMWJHKzU0eC9EUlFk?= =?utf-8?B?WG45VzlyV3h6Z3U4dUYrRENTMERYMHRLV0dnbDF0MWpjbXFDaWR1NDRoZmUr?= =?utf-8?B?dlZnY3FjRFIwZ2JxY3BHQzBSZ1VBcGJIQVU5cHNvdEY5NHZlQjlIZ0wzRzRO?= =?utf-8?B?SThDQ3c4SmU5OE9QNDFFOTNyOGJzOWhvckpNenBYQUxJTnh6TDF0OXhlK2FU?= =?utf-8?B?VWxqOVNlaVlnPT0=?= 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)(366016)(376014)(1800799024)(19092799006)(7416014)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Qm55bDRhVnRaRkJuRHAwbzUwS1lFNG55Mm1pTzE2S1Urc3RZcDVicDFJMUUv?= =?utf-8?B?aWkzK0dYdzhHeG4zMTdIaHdiYWticjVMbVlmNG4yTDVUb2FPSk42NG1Mc2pD?= =?utf-8?B?S3BoTnFqa1VJZkovOU1QN0pzYmp0bnRYc0FvOEdTeDBkUkkxVHpFVUJ2cjds?= =?utf-8?B?OEFESXNyTkJKekVud0JqNG9HcU95ZGtwVUhXZzk2OGNmSnVkK2t6OTR5aTc3?= =?utf-8?B?R29lRnE4Vzd6RTJjMDlXR3B2UDZxQllocGlMWDkwNDVtM1VmME1nSU0ra3Uv?= =?utf-8?B?cE8zTi9DQTF4dXpzenM1ZmpjWXBBdXlncm4zZ29vNy8wdSsvMTIxcVFlV1g5?= =?utf-8?B?Uy9tYUFxc0llQTIvcWdkZHE3Sy9DcG8xYTV0YWJXNkhUZVFPM0hqV3FKY1lJ?= =?utf-8?B?K20rVWVucVRiZlJDbzF1dDlMeFhFcmJuZWEwSTUyN0JNWENrR0dFN1lRZUZH?= =?utf-8?B?b3NmbVludldWT3VLK3dEalEvcDJ2MHlMU0Z0bW5SYnBCT1Q5eTlTY2xIQ0U4?= =?utf-8?B?K3RDd2xXeGNKTVpCRTZwZlk1WjF4MC9BQldBdHQyV2tEaHdjS3pFMVlPMTg2?= =?utf-8?B?MmlmekpLZmZIUWU5dncrYTA3Y0trd3IyUzRkL3ZZbVFPMHhSUDJ1N2lEczB3?= =?utf-8?B?QkUvQ05uemRWQ00zZWZ4bzZVN0doVlEraDZuWi9KTmdqNUpSZlFtNHAxc3NS?= =?utf-8?B?ZXNJcWJYVFhQd1pma1o5cXRTQ29vY25PZmlBeVRjRHNUZU5XTkJ0bHhWaWs3?= =?utf-8?B?TVNnUmc1Q0VVSXFNWjV0Yjlmc0lRRmFRc2hod3JXUHhhY0J4OXhMdUM2eWp3?= =?utf-8?B?bTF3Q3FMajdqM2diSHRDOGhGZGV2VzdNd1RYTFBRMEl5TThOSXR1aWtRZ0dK?= =?utf-8?B?NVFjRG9SV0l0Q2N0Zmx1cm0zTVVIdmRPSEZDSDlCWGNJUE00b1lSV0Mwck9h?= =?utf-8?B?US9WVmw4bkVUdzRjYUJnYXRwc1JkVmJXZHN1VUtMS0xnL0paeEtUT3g0QjJu?= =?utf-8?B?U3FGbVo4K3A4M3lTaStwdVhqeFU0alFHM0Y4QW11K21lRDBkTFloNnV6dUNV?= =?utf-8?B?ZDNOZmdZTEFZV3NHSEpRaFJybktuZGtPU0tOcFk3eGw4RjlTeTg2NXozcWc1?= =?utf-8?B?VkI1V1ZSMU82enlzUE50L0RxL0l1YWRHVDE2UTUrWUpHK3AxNnZYQ1ZOcXVl?= =?utf-8?B?Mm5TYU5WVE56SWVjbXFRVUFXOGQzZ2MyZE9SZkl4SUxYOXJkQVB3RlRjWFVP?= =?utf-8?B?L3hreHlEQnZXUXBjWStTOVMvSDlMakN5YmQrc1BjN1lEMzJaQ05kcWNZdFhT?= =?utf-8?B?bXNCNEFSajd6anhMQVUwS3l6cEl0RnZyWnVpTlNic0FHMUhzbGtXZkhRM1Jr?= =?utf-8?B?bGVPaVNMSXdFOEh1WEtxTkdXemhLNkNLTEpnMUtsM3VIL2NZQVJKejV3STR2?= =?utf-8?B?SjV1aFg5cERZNVdOYVF2TTJ6NUhxejFHa1N4dUNJSnRCMUkvdVVickh3Nkkr?= =?utf-8?B?QXN6dGFyQmFQSU96VDhBdFRRUm1ycmY3ek54c1B4RUJ6NjBKNVd5b0pwbUxu?= =?utf-8?B?cUo3K0RMZFE1a1V1S3Roa0NBZlVSUldFa2UxbEhDMFJWRTBGYzdId2w1NnBu?= =?utf-8?B?a2VzcWszUWhpLzlHUkZTa21RUFN6Ylk5ZHpnQXQ1L1RrWWcxWlBwVUpsUXRn?= =?utf-8?B?VFZkd3dhMC9YS3ByU012M1E0Vk51VXlJYW9yUlRaek9VRWo4T24xMnpCdlp0?= =?utf-8?B?NU1NakhuaFI4VGg3RFZHeFFWcDJseXRkMXpJYUF2QzZVaWwyK1Rqd0NmaXZB?= =?utf-8?B?QUZTOGJTK1BJV2xpbDBWTGY5NkZEV2IwN2RsdFZZd21HakZGTXB6RHBjYktr?= =?utf-8?B?RkFBZHpGSmdVN3hGVDdHOEdOT3RDV0xwWEZMditPL2IzOVlkc0JjUGtGVlJO?= =?utf-8?B?TzZGMnkvSnZKa2dDNEpkK1o1b0x6blVLOFMvZnpwTzYvNTBtYnNnODJteWVF?= =?utf-8?B?d3JHK0RtTjIvUm83TTBxUG1QUU9wQnE4cG5oQmxudVU2T08ycXFrM2lUSlFM?= =?utf-8?B?MElrRXN0UVMwbkFuckxOZG54VUxRclVTYjZEVnNtNk16TEkxRGlEZEVxbUND?= =?utf-8?Q?AIlX3SSRVfHHqtkaTQOIQR9Xf?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6191559c-fe79-4b8e-a0aa-08ddf1ad8972 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Sep 2025 03:36:20.7629 (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: b7mrYDs9NXetIKT89Cd2/1fOM3nea0Ci2lQegbMOrsQDaHxxSrBuX+tJ2bdpULpkp8+N6qVIYzAr8qhUK3CDlw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB9788 Parse the Spread Spectrum Configuration(SSC) from device tree and configure them before using the clock. Each SSC is three u32 elements which means '', so assigned-clock-sscs is an array of multiple three u32 elements. Reviewed-by: Brian Masney Signed-off-by: Peng Fan --- drivers/clk/clk-conf.c | 69 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 69 insertions(+) diff --git a/drivers/clk/clk-conf.c b/drivers/clk/clk-conf.c index 303a0bb26e54a95655ce094a35b989c97ebc6fd8..dd6083597db3f8f27d86abf5640= dfc3fb39a9b88 100644 --- a/drivers/clk/clk-conf.c +++ b/drivers/clk/clk-conf.c @@ -155,6 +155,71 @@ static int __set_clk_rates(struct device_node *node, b= ool clk_supplier) return 0; } =20 +static int __set_clk_spread_spectrum(struct device_node *node, bool clk_su= pplier) +{ + struct clk_spread_spectrum *sscs __free(kfree) =3D NULL; + u32 elem_size =3D sizeof(struct clk_spread_spectrum); + struct of_phandle_args clkspec; + int rc, count, index; + struct clk *clk; + + /* modfreq, spreadPercent, modmethod */ + count =3D of_property_count_elems_of_size(node, "assigned-clock-sscs", el= em_size); + if (count <=3D 0) + return 0; + + sscs =3D kcalloc(count, elem_size, GFP_KERNEL); + if (!sscs) + return -ENOMEM; + + rc =3D of_property_read_u32_array(node, "assigned-clock-sscs", (u32 *)ssc= s, + count * 3); + if (rc) + return rc; + + for (index =3D 0; index < count; index++) { + struct clk_spread_spectrum *conf =3D &sscs[index]; + struct clk_hw *hw; + + if (!conf->modfreq_hz && !conf->spread_bp && !conf->method) + continue; + + rc =3D of_parse_phandle_with_args(node, "assigned-clocks", "#clock-cells= ", + index, &clkspec); + if (rc < 0) { + /* skip empty (null) phandles */ + if (rc =3D=3D -ENOENT) + continue; + else + return rc; + } + + if (clkspec.np =3D=3D node && !clk_supplier) { + of_node_put(clkspec.np); + return 0; + } + + clk =3D of_clk_get_from_provider(&clkspec); + of_node_put(clkspec.np); + if (IS_ERR(clk)) { + if (PTR_ERR(clk) !=3D -EPROBE_DEFER) + pr_warn("clk: couldn't get clock %d for %pOF\n", + index, node); + return PTR_ERR(clk); + } + + hw =3D __clk_get_hw(clk); + rc =3D clk_hw_set_spread_spectrum(hw, conf); + if (rc < 0) + pr_err("clk: couldn't set %s clk spread spectrum %u %u %u: %d\n", + __clk_get_name(clk), conf->modfreq_hz, conf->spread_bp, + conf->method, rc); + clk_put(clk); + } + + return 0; +} + /** * of_clk_set_defaults() - parse and set assigned clocks configuration * @node: device node to apply clock settings for @@ -174,6 +239,10 @@ int of_clk_set_defaults(struct device_node *node, bool= clk_supplier) if (!node) return 0; =20 + rc =3D __set_clk_spread_spectrum(node, clk_supplier); + if (rc < 0) + return rc; + rc =3D __set_clk_parents(node, clk_supplier); if (rc < 0) return rc; --=20 2.37.1 From nobody Thu Oct 2 19:27:08 2025 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010025.outbound.protection.outlook.com [52.101.84.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 D56EB246764; Fri, 12 Sep 2025 03:36:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757648192; cv=fail; b=jfsUWBne9LRpY5UoKvMaW4eGalMYAqSrXcT5pyEbrdnS2xKgLzmgiXjvRHNobEk9zR7J0ZDmOMiAYVo9FOzsXcal3yriA7I9AcQH2s0UsAa25mu4Ln19Mcb0PixjRotXgQedI1sYIUlFp6zC8lZJ9RqVzrqZJwgwIMWDiCDRdNo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757648192; c=relaxed/simple; bh=7QT2X5DAOFBnpLF60Zs1O5qmzU34FUra2jolUJVUFik=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=b+yOaIdsHtPjXSA8E4JvhqSCCa2QicIXj0N4Yx5VmyKNYOTCb8zYEAQAVMUvWEKXXToo9XhXPQs0MIUXD20AsoKKa+hItZLWc+0MOL91rlvZRSi0F4h6/jMIAXvVZPam4QyAqpAQ1CIlPmy9EdjANvZF8CaUbjOpW29eG46CiWw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=kQpeMgA4; arc=fail smtp.client-ip=52.101.84.25 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="kQpeMgA4" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=g3/RGXXEd7UQnzNNY/RGW1WMS1tJr25272xrW8nYk8a4X/AaIOjNEN+nntB4moyFxdIFYGkL4eIupumvQJWJ/SxdvVJCyjV3nogvwbTNaM6ZPNfsV62f5gywaK6NJm6Ui/n2m7mvz6T/YpZSYZBn4+T+K1Lx/9RhkuKUuRxNaWVCXBoRFGljGkp36X172AtydE+l6R0bhX3OKLzQ1zrFI+rTDDG+OMUcNv5CO+H/E0fcvFYLspFNO02kI9oomxHBMzzk/Vre5OG94NBvIMrLzxoGc3+1tQZCe+iBAcN4fRbp4b8bSB54QPyR/hettUxN45Dpvm07GYFOTPeUhKNdvg== 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=fPIqH1gLghb1LcniNHdhK3pVxYY2pCfp5qAcZl/V0o4=; b=VEMxIZnsi7Eg/t4qnsQexH6ObIZrMtOK/aetPhXp9jFakVH+8IkpM6iZQ2bGV/pA6hXiqHIKZ+rwhfOnqZOlSj30LExNHiTp/7Xr0ek4mCBIrpTJPjiqHJJ2MnqrQ9WyPTL9+YzvnQlgKH38kFuzBklAeM7jpJI/pMVVqhW2Tzq7wjvWY+jaimdP85+9tF74P0BKHQnELX2/W468Y08Z6+mpHbf7iT+UvBdu9Dd24OgSuV21wCQhqg9uc8Vo3WytV6T+0hYi5eeM+BIQQcrEgkGqDr0zjxYqhBKm7YpneObdR1PBCMRhmbjD2dEPHIgJfXichdE7CmIKRKyOEsCK/w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fPIqH1gLghb1LcniNHdhK3pVxYY2pCfp5qAcZl/V0o4=; b=kQpeMgA43w0KKNQ43pVyLPlUai3nM/GivtCVvd09hwRyJ9dVABSi8FVTdxWcwHnvt85qas3Purk88zsFQob1+H9ZTmuLFRSO76WZW1gOM0PuJqLHeYH3ZGRKbYf903gzNhqaoX4FuWz3FC6/Nsb+HM3JHve8xdYX7hx+5ZkyaFEFmr5cqLVdybLOArt8J1K5SPe4sztNL55t3K5phKgbhuCBhql5VJGSyDq5s+J2p+d+T8p27rfzdked4g8x3YeTk2XuJik/c6JUhcjzkJp70EecS80nDua6dDzoP+n3hUbAJ7XBbaXxVoGd1reWKGhpBnJev5AGDCLOoz9yQAyMDw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by VI1PR04MB9788.eurprd04.prod.outlook.com (2603:10a6:800:1d4::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9115.15; Fri, 12 Sep 2025 03:36:25 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%4]) with mapi id 15.20.9115.010; Fri, 12 Sep 2025 03:36:25 +0000 From: Peng Fan Date: Fri, 12 Sep 2025 11:35:53 +0800 Subject: [PATCH v3 4/5] clk: Add KUnit tests for assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250912-clk-ssc-version1-v3-4-fd1e07476ba1@nxp.com> References: <20250912-clk-ssc-version1-v3-0-fd1e07476ba1@nxp.com> In-Reply-To: <20250912-clk-ssc-version1-v3-0-fd1e07476ba1@nxp.com> To: Michael Turquette , Stephen Boyd , Sudeep Holla , Cristian Marussi , Marco Felsch , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Brian Masney Cc: Dan Carpenter , Geert Uytterhoeven , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757648158; l=23118; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=7QT2X5DAOFBnpLF60Zs1O5qmzU34FUra2jolUJVUFik=; b=pNV5/gXsYsaYyw9UBuk3thvhdrebkPBv95Vt0XnFP5a2zKFjYyx3WZl5nB583ZDQWLMIsNGWt wgUUPuB+uJTBOVVjEY3BQAzf2TFejMVgBCN3qeVaL4k9omhABXzI2ll X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR01CA0029.apcprd01.prod.exchangelabs.com (2603:1096:4:192::8) 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-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|VI1PR04MB9788:EE_ X-MS-Office365-Filtering-Correlation-Id: 41a8926b-d937-4620-b18c-08ddf1ad8d1d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|19092799006|7416014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?MDRLRG9MMGw5dGlpTDlDbEx6enlBYitoWjZ3R3JkTGkyRUdOWFJpRVB4eHp6?= =?utf-8?B?aEZ1Y0hhREFMSmtQTWRNYVo4dk9EaG9oSURuNVdMU3MxcnRGc3VmV1VuUlU5?= =?utf-8?B?NzAyUGlIZmVMd1ZMVjdqZVdad0UyRyt1S2RLU3Q0dlZrQmd1Nmhta1ArY1Jj?= =?utf-8?B?cFlXZ0czTVZCbzJnbmdxRTBhS3VsQmFGSGpLaGZPNmxFdDNXY1VLM09mV1Fs?= =?utf-8?B?ZytSN3N5ZTVKUU9yUEd2Uk1YVDFnOHliR09ZMnZOMTZYak5BeitZeGxJQVA2?= =?utf-8?B?SWlQdTI0dnNwWlIzd0xMUzJqYnQwOTVBWG9aM0pUeGZHZ1hqc2dlVXNkQk5i?= =?utf-8?B?aEhodDdqeFlZeGFiTEZyNW5sRjhMdWFaWHcxRnlpRjliNktQSitBejg1YlJU?= =?utf-8?B?YSsxYXVkNWVaQVNtdlN3b3ZKYVJMR0xHZmIyMEw4c0hGYWZ4dzJLUzRVUlBr?= =?utf-8?B?OHVnOTN0clpXSVZpelJEaUF0ZmhJOXRaUEtGOEhCbGNIaVlPdlI2SFFkMWhQ?= =?utf-8?B?blQ3K2RtbVcvNUQ4ZGo2Z1lBWERIbTYyaXM4VHRvWHltYkczZlJOcnJ4Y1ha?= =?utf-8?B?SlltSlVzVHdvYVg0TGg4N1VuU0ovNXVMVFBpUVVtbXFZcVJjZ203b2NIL1Bo?= =?utf-8?B?Z1NoaDhHWE5kWnQ5d2hXeVNaT3pTMmdGbTJ2eWovT0JEa3Y5UG0rZmVaTm5h?= =?utf-8?B?d0s1dXJKQzMwNDRDa3NJb1lMQU9mZjdPNVpqTDhkcjdNK1JuWkVZOXU4NTVN?= =?utf-8?B?Unc3UnBuY0RITGlaMnRrS0t6eFF6bnR6MVZDc2JRRkRYRVMvMFh0K1NxclFl?= =?utf-8?B?dXJ1dmtPL3hVaHRUdGRia2xsSDFYbVBhZmNIWG93Zk9XS0pmQlR3ZVZZUVpy?= =?utf-8?B?L1NNVlAzdm0wRUVETXNMNXB6V3JCM3BrMWRMdUx5Vjh0WDRwVFppZ2RXZVhl?= =?utf-8?B?UWFzc3R5Q0RWN2V2OUpHcjgyZUU0QjhUWHF0TGJMeFF4RXpHUVRTZ29GbEN6?= =?utf-8?B?Q2JmWmdmS0l5NnJ3NWVHMHBzL243dWxtVlhOdGhsTUN4Sjd2ZkZqWjN2MkYy?= =?utf-8?B?aWd6OXVVazVTY1lQODNBN1hkME5zQURRbmUxdFlGbFRjbDFxVnRZVnN1S1BH?= =?utf-8?B?K1lWK2hkOVpsNFpkNmJicnkrWStWampYdS95amQxWWZydUV5azVhQ3JwY0FL?= =?utf-8?B?cjVMcURqNFl5WTlJUmpmaTIxNnVtdzVNUU92Tjg5UjFIZjN6TFdhUC85ZUR0?= =?utf-8?B?eGVaZUhmazhXb1RBTXFkTDZQNHc3bVdFVzEyMG1uMS9zZWtDMnFZWWZXa2ll?= =?utf-8?B?TlF4eks4UHd2MDdVVFpVaGM4KzZONGJseUt5Mll0elNkVS93b1JST2ZzRld1?= =?utf-8?B?TldiRWNqR2FlS2ZrV0IwRHlnbTl0OTBTZ3JTRmw4bEw1MitUS09CZEgwNE9C?= =?utf-8?B?ZjFQYUtna0hDVzJqNFM2TURWenFRM1cxMUtMNTU4aWRsTjVlUFZNTkRpMTZU?= =?utf-8?B?ZmdRMWJqc2RoRDA2eTg5M2EvUTZ5ZHorK1BoVnFKYzluWFlyWENNdVkzWXJU?= =?utf-8?B?bjU2RkhvM0NyK0JzZ09TK1k0WEl0WndYOHhpbHN6bWVTQVAxTHk2UlhnNGpa?= =?utf-8?B?UEFCaWhIKzFRQXVUWEY4SEFCcGpzalNzNTA0OHMvN1lvd0IvbGZYWk9ZbTRW?= =?utf-8?B?YWJVTyswV1RjaVBQRVdFbHlnVXp3NGZqWVVJNFcxcmVkMm9jNGdsUnEzekVF?= =?utf-8?B?OXlhTWpvRjFhR0tOSGhCR2xzYlp0VlBMU1ljSUdrL3pCRlV6Yzg2WHlXNW4y?= =?utf-8?B?QUV6R2FwWGxQaGVUWkJPdHZmZHpwUzJVRlZ1MnpOcW5YbDdGQ2ptaHpSUDJR?= =?utf-8?B?b1o1bVg2eUdXdGJDZ1JJOElxRmtVdkFtemx3RDdYSkV0azRIWkVURERlam4v?= =?utf-8?B?Q3dsQUROR2NjUFVDY1NpQVdIaWsvdGd5OXNzMGVrMmJWZklUMCtoUzEzc2R6?= =?utf-8?B?dUpsc0hzMkN3PT0=?= 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)(366016)(376014)(1800799024)(19092799006)(7416014)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dlZhelVlWTgxelRMT3JpVEpZTzdrWk1KT09wNm5ud0gyTytUSjl2aktEbDNQ?= =?utf-8?B?M0VjNGllR0NEc1poclduK0V0OGVjUmR0Y0pFVENyc3pRd0R4YWQvOUhYUFo4?= =?utf-8?B?cUlZOGJwYWZ2UGlMUXJGeDlOVVJ2TnZiSzhYTG1uZjdnWGxVempZeUhHQ2FC?= =?utf-8?B?bkR2NXdpK0ZsRFdaVTFad2x4b1daRHBvRDhDZTlGY2lianovT3NFYVNqU2h0?= =?utf-8?B?VEVSZ1U0ME1MWXVBbm1Wd1FjWFc0MVFwWjVudklzb1VYa1Z6Uk5MSkY0VnY5?= =?utf-8?B?dDcyeXFXK3RTYWdhbjVpUEtOb2EvZm91UlpNckhrSW83MkdMSkJjdVJSV0dZ?= =?utf-8?B?VysrVkMxOTREQXBWdVozN3pzY3JwZGlRUk9TZlcwa3hZdmluQ3BEdG0vUGha?= =?utf-8?B?UzRkVXgvWjFWaWtGOTlCUFNkMTFob3ZGMVVQWE4xQmdjQ3ZhUnlGNnllR1RX?= =?utf-8?B?NHA3WkN4S0duRjBUb0QxWTdMQ2tvS1lIVk1LTUg1TFExK0xoanNLTFVNNExr?= =?utf-8?B?V0tRdjIrSVBmY0RNTkdMU0x4dUp4YUk5Qmd5ZzQxTkk0SFB5ZGdlM2hWc2g3?= =?utf-8?B?V2JtbWJ2L1ZmOERpelphK3hrRlp5eDB2QlBxMVBpalc0Qk84WVNtM2ZER3dD?= =?utf-8?B?OGxMeTNYNFdOV1RxS3FNaGFvV0JFU3NycGZkRi9YOGlMa3Npb2xaakVRQWJQ?= =?utf-8?B?S05QYjNROG9KMnNESUF3ZTEyTFZDckFhWUNod0dsTHduc2lCd1R2dDBubVYy?= =?utf-8?B?Um9mQmZDQmtqM1JmdnJ3c29VU0xtdTVqZUhORHZVajhkcjkraUpsWmZWSmdS?= =?utf-8?B?a3o5UGRlNmlTYnkwOEdzNHBQOTVOT0o2UW9UZSsrOFlGTm8zNVowRDhmUkZ4?= =?utf-8?B?VXJuWkxZZmJwN0hRcFozOGFBNEE2UlQxaGJpVFBVSC9pcDVZcE1MamNoSU4z?= =?utf-8?B?akF2YS9ZamJBcUhrb2kyMkhLSmNZQ0MzeXFKWHN2dHNSREpWa20vNDJJTXNK?= =?utf-8?B?L1dtVTkxK3hEZHpab2NldlJZVy83T2RJTHErWXZkWEgrekJJN1NyRlFrWUVJ?= =?utf-8?B?cytaWDRad2VKQzhOSkJSOHFORHE4NjlsbEE3L1hxcjlHM2srY0U5UXhsd2tz?= =?utf-8?B?eEZ5SjZCZ1BsSlIwSzdibjdQRTExZ0VJQ2duak1lellOM2Z6a0VyU1FhNVZ2?= =?utf-8?B?VDFma0phOEdBdUcxNDJ5bnNXMTFwblZGUHI4YWYzd01Zc01GelpyYllabzJj?= =?utf-8?B?bkdsamRML1ZWZXg1SUltYSsvb1VSOHZyUTc0VHFhSm9JbzZnc2pxenhDZW90?= =?utf-8?B?SmxzMUwyaEtwblRrUDJiSm1ZZDMrNXFMNWpJSHdkZEVxbkdLWUFCdTlTMVhq?= =?utf-8?B?Uk9NUUdCdXVRN0YwcTlLczdzWmVXbTUrZWxBRi83RXZsSUttdmppR29iTWY1?= =?utf-8?B?SXAwTHNpTUxJSHgrVm9VaHpLaEhGRlVBRS9rdUs4SFBLMWgyeXB2YU5OL2Vh?= =?utf-8?B?VjNhMlVhekwxalZ6akpVUTJJL2dwem1yb2VMSW5ibGgveVFyM3VPcWx3MnNK?= =?utf-8?B?MFkyS29sOHJVSHZuM3dmRW5VZkxGZEVhUldMcDdYaXRWV3krL3gxcmdmSGpW?= =?utf-8?B?SjhSVllxZXM2TzBlalVRcHU0c0Vrdm1oNGplcDl5a0dQNVhlWTd2bEUrZFlW?= =?utf-8?B?V3pQZHF5YjlSN0pSZWYrZWp0Q1M2TEFZeldTZkoxc1ZXQ2FTb1R0Z1hJM3NZ?= =?utf-8?B?UTZ5OHcxWXhBb1R4K2pQeEFlTWVQakRtUG9rZGVmNzVGRmU0Y2ZGaUJxUkd2?= =?utf-8?B?ajJUbmJ0WFJlY29jMWwrSmE1NlAzZjNaaWpnbFNYUVBreGxOYkxEaCtENXla?= =?utf-8?B?YUwvOVh6Ri9lSEZ3V1RDcHFOMEJRTTNyME0ya1BDNmVzSzJNYmUwZzJWbWhW?= =?utf-8?B?SkZDeGltTk8vSEIwcE9Ydi9MUzkvemRPQVBoLzhWNEVzeEEvTHBXeGp3WmdZ?= =?utf-8?B?YXNQNkJ4MHlyc3djRHBlK2thL21uMXg5MFB2dUdJQXhuLzhLek9nbndmbHh4?= =?utf-8?B?SXFLSlRxblRMQ0gza3BjM00xaVFsdktHWnRCSkR6enRZUGdiaGF3OU9xRENv?= =?utf-8?Q?QlvaSkNAc5Ybl1yJ/ypEztcdp?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 41a8926b-d937-4620-b18c-08ddf1ad8d1d X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Sep 2025 03:36:25.6775 (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: pfxHXJ3i3o0IPd6vGh6yrAPO/WpnZZ46hbqbivXkgfRdvVL3n1Tr3GLklCexem+96j43MDpaYiU8lcwlS77i4Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB9788 Spread spectrum configuration is part of clock frequency settings, and its behavior can be validated similarly to assigned clock rates. Extend the existing KUnit tests for assigned-clock-rates to cover assigned-clock-sscs by reusing the test framework. Add new test device trees: - kunit_clk_assigned_sscs_null.dtso - kunit_clk_assigned_sscs_null_consumer.dtso - kunit_clk_assigned_sscs_without.dtso - kunit_clk_assigned_sscs_without_consumer.dtso - kunit_clk_assigned_sscs_zero.dtso - kunit_clk_assigned_sscs_zero_consumer.dtso These tests cover various invalid configurations of assigned-clock-sscs, ensuring robustness and consistent error handling, similar to the coverage provided for assigned-clock-rates. Co-developed-by: Brian Masney Signed-off-by: Brian Masney Signed-off-by: Peng Fan --- drivers/clk/Makefile | 6 + drivers/clk/clk_test.c | 121 +++++++++++++++++= +++- drivers/clk/kunit_clk_assigned_rates.h | 10 ++ drivers/clk/kunit_clk_assigned_rates_multiple.dtso | 6 + ...kunit_clk_assigned_rates_multiple_consumer.dtso | 6 + drivers/clk/kunit_clk_assigned_rates_one.dtso | 3 + .../clk/kunit_clk_assigned_rates_one_consumer.dtso | 3 + .../clk/kunit_clk_assigned_rates_u64_multiple.dtso | 6 + ...t_clk_assigned_rates_u64_multiple_consumer.dtso | 6 + drivers/clk/kunit_clk_assigned_rates_u64_one.dtso | 3 + .../kunit_clk_assigned_rates_u64_one_consumer.dtso | 3 + .../kunit_clk_assigned_rates_zero_consumer.dtso | 1 + 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 +++ 18 files changed, 269 insertions(+), 3 deletions(-) diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index 18ed29cfdc1133b6c254190c6092eb263366d5ac..ea93e16c5a0080f610c8cfaccc1= ac68fefa481c2 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..eb28f0a61ef0057bcc9c1d75653= 357a442bff81d 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, + struct clk_spread_spectrum *conf) +{ + struct clk_dummy_context *ctx =3D + container_of(hw, struct clk_dummy_context, hw); + + ctx->sscs =3D *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_rates_zero_consumer.dtso b/driv= ers/clk/kunit_clk_assigned_rates_zero_consumer.dtso index 1d964672e8553a90263af400367a2d947f755015..d62c7522c92461245d45f8ac0eb= d26fa2850be98 100644 --- a/drivers/clk/kunit_clk_assigned_rates_zero_consumer.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_zero_consumer.dtso @@ -12,5 +12,6 @@ kunit-clock-consumer { compatible =3D "test,clk-consumer"; assigned-clocks =3D <&clk>; assigned-clock-rates =3D <0>; + assigned-clock-sscs =3D <0 0 0>; }; }; 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 Oct 2 19:27:08 2025 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010014.outbound.protection.outlook.com [52.101.84.14]) (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 52247266B72; Fri, 12 Sep 2025 03:36:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.14 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757648195; cv=fail; b=aIo46VS3kQ8fo1woyJmyQpykPIhlOWIWpNPEi+XpE5SOlMPTHYeGb58o75SieNl3ixJ/QfmyZDj1lQ3T9LD5pmCsMk4GIjfN9YNf1NNK9EBxezrjgMrAnzKGNATM5bgVj6Mkvn932RVYkrYe4P4DO9B3FiAmm3GqO0mOcK2TrVE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757648195; c=relaxed/simple; bh=/f/t/uvptCFsPsDbOruMFADsd8OrSPUdYLFUpJTxZ8M=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ZdD65rGWGq/JDLr2htEc2/9SCc7eKc5n3os1i8qEmgguZ3ZzUf4Tore1qz1SJkLYgatctvmV+2vkjUb2FXYOwVi/2AWdIw8pmOcV2LQKsSUfPMWNjwH+BI2Yta64/g8dM/ufQSWh22A3eoN+viFE9ZwiSUfBLpHFO3+NUJSs9NQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=LgPYqvcR; arc=fail smtp.client-ip=52.101.84.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="LgPYqvcR" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bSTOfArNWWif+wl7n45GBkhnUoJSym8GYt2LZ86tBMpU33KrUN9xpao26iK4x/Fvt1wsDfSKOPXJuF54HjlMjsQACus4LqC7Gdhrb27xgBo07tvB0aBtPORJQjfNzWluJ8LKJYi7Nw6lRLf0RTfFInlrfqaz5/r7ppSUeCMxvL2JU5hw8AoBvqu0vJuIOifS87xnIa0cgQRCPwSSCyA+3ncApVqZutvR141oPNrWWGLnR5WA35srHHHvFTLGkI/zOinBL1FVh1kAuO4lC0DdC+073vypngJ08AOcXsuajq5VU/rfQcfHaYBgCb/nriGP2Q76hGW2igis35gFnCQDow== 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=pIJfCg4N2oQGUDEPTId1k3KrZRqXxJU5TwK1ZfHn4bY=; b=pk5xjF+FWeMQaeoZhtbcpl4+xoZko+xvgO4GCz9kslsEXwoLTUVdxS2TKBguMVRtsAnGesEAOkmd3nsrAnMD1ToA7f3UZsq31pJUS5+XJGN1m+vYgzXhqRpslt8Sr2ctRSVB4u0tgdcUxH86pqlvAyhvx6AzO+JRllz0AlMG2Jxhbdpxso9DXDC86DlHL+LY4qV3MglXhPjgy+yuqiOP/An0C1KXz4tpKvvzIPsRsBimtBYynSSkaL1+0NkqU8tSlKUdVXnPSqPq6rPnC4IF9rt60W8HFIvH4kl353AozVu55KcAFeHJafGhkG3u8jAhgBd09D05zhLprY8scA5tXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pIJfCg4N2oQGUDEPTId1k3KrZRqXxJU5TwK1ZfHn4bY=; b=LgPYqvcRvhVxd3f+hi68TmbTYcwUw9DZRmAeRgDT2GKfMLPi/qAI5sZDX4N3X28IuNTPtkFeyCoIFdfXO8md7CnWcdFQVI7Ed8Cqwnw4lSTrnOxLPginbVqrPvJ4Dz5TnQAHV3zzvJcd3Fy8JtIuNH6Hy/LBBmxSPeL+wy6sSGv8QrnFV9VKQlTRxvHbUfTrtDNa3BMHpUq7AZ5nQQb7mPiw/NNOmlBPoBhIYBs/VezjSrjGKhik0wSqwZgizGi0hqOBPqxlginN/oZXrV/pe+g7UmUcqN7dSLsvkEzC77qqs/nlqE60JknwNYcj2203Yf0yDQ9AGtw+ofIrYOdhrQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by PAXPR04MB8526.eurprd04.prod.outlook.com (2603:10a6:102:211::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9115.15; Fri, 12 Sep 2025 03:36:30 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%4]) with mapi id 15.20.9115.010; Fri, 12 Sep 2025 03:36:30 +0000 From: Peng Fan Date: Fri, 12 Sep 2025 11:35:54 +0800 Subject: [PATCH v3 5/5] clk: scmi: Support Spread Spectrum for NXP i.MX95 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250912-clk-ssc-version1-v3-5-fd1e07476ba1@nxp.com> References: <20250912-clk-ssc-version1-v3-0-fd1e07476ba1@nxp.com> In-Reply-To: <20250912-clk-ssc-version1-v3-0-fd1e07476ba1@nxp.com> To: Michael Turquette , Stephen Boyd , Sudeep Holla , Cristian Marussi , Marco Felsch , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Brian Masney Cc: Dan Carpenter , Geert Uytterhoeven , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757648158; l=6023; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=/f/t/uvptCFsPsDbOruMFADsd8OrSPUdYLFUpJTxZ8M=; b=ZmvT3tIxXmGMeGz4DnO20VKQT1X1F44CzQzERPhsy9tw1WJGgGRXOR1dovD/gYwlFIhRAU/NR sagkc3vyB5aDsAJMZQl9ybFx2CsIxg0LfF7AEymRtdxawDhx5bj9fbI X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR01CA0029.apcprd01.prod.exchangelabs.com (2603:1096:4:192::8) 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-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|PAXPR04MB8526:EE_ X-MS-Office365-Filtering-Correlation-Id: 6cd7036f-327b-4414-2f8b-08ddf1ad8ff0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|376014|1800799024|19092799006|366016|7416014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?eHNOaWJieFpmR3Q2YU5BYjJQSFRXVkQza3dnMlZEdWpvaGxSRTFSYVJ2bmNz?= =?utf-8?B?NmptUDBNYXVCZFl6WWNIY2JyS1A0NTRQQ2hLeVpOUVU0cEFEdmh6bG1neW9h?= =?utf-8?B?S1YyZDJEdStrejNIaXFkYXQvTHJCK3pGWFNHb1BRbjl5cVVBRE1vWG9CMHNj?= =?utf-8?B?YmNGZzNCclpSV0E1b3M1aCszSTNLS1dwM2lvTDMwYnUyeDBJM2kxS2VGakwr?= =?utf-8?B?UkJGSmExa1pKVUJEZ0VGd1RQZmZsUjVCT2l5bjErQVgrdVhnWnV2d1JFSG5t?= =?utf-8?B?bklWTENteU5JWU9iU0lCcWZwa0xXNldmQS9yeUJ3cWJaZ2Y0dmZ4TUUvNC9i?= =?utf-8?B?Sk43WUc1bmY2L21GNWpHRVB6VzQyS05JUUNJWUhySGxPa1lqdm8yOVNreVdB?= =?utf-8?B?d2Jwb1g3UjkwcFplc21reElxVVlCSWFCVkR1bHZ1bHViRlpYUVk1a3lnOXpw?= =?utf-8?B?cVdJKzJPTy90ZUNuK0crdDUxanFQNko4bmNiMzhvLytDUVpOWEpiSFQzZE9v?= =?utf-8?B?NEs5eUdwbU5YMWpCODlEaXp4ek5JemNGQStBclQ2bEVWRTN5TFlVTFdqQWFk?= =?utf-8?B?c2o1REN0c21qTVB3cmVqenhyeHltRTdodG8ydzJUeXMyM0VrSlFIYzUvdTBx?= =?utf-8?B?dnFIL0NKWDhkbWhtRi9La3QyY2tGVVVuNkRIaFRDaFZ5Rnp2Y3lCN2hKK3Av?= =?utf-8?B?MFFLL1RENlp0Zys3SWZab3N4RjJHUDh6UU5PYm5iVlFUNU9RK0hoWUtWcGJo?= =?utf-8?B?VzJEWksrUnVnTnRTeDAwNUg0WmRKdFI1TFI0ME9EV0hZZ3NqMDNKaUYvQVNu?= =?utf-8?B?NWlURE1aWnFnMGYySVh6dUZFLzV2NzZ5MHpTR2pqSXhyQnlLREYvQ3RvaFhw?= =?utf-8?B?S2xmY1hqdmQ3RnBMRjVjTkN6Nm1WUnhGVXErTFZkVkU1a3NUTnBGc3BMd3lO?= =?utf-8?B?a2FGeDV4QmdnU0hEY281ejJuWC9CSEZVMW1OSjZXMkY0aUpVVFAyM1ZvM0k1?= =?utf-8?B?Y3JTeWNyeHRJK0JDWjBKbjdaTFIzOWpCYTNGbkk0NFlya2MyWFJCak12ZjZl?= =?utf-8?B?UmF6bU9aRG9CS1ptMDJEdHZhRlNHSEZEZ3lpb0dXcDdzNkx2SDNySVZrUFFR?= =?utf-8?B?MTg2bll5YkhPUEM3alUvcTFCbXpTYXY2Z1dMZnZrdk9OVkJQTCsyUXJVeHBC?= =?utf-8?B?ZFo2QVFBNG0zUWpkVlAzR2tiZEN1ZWVDSURrTmhJMENIbHlhN2Z6a0ZNVDlL?= =?utf-8?B?RldzVFB2RjhvVnUrV3ptbDJqb1JqY08xR0UwOVpRTmxJRXRpUkI3em15VmVT?= =?utf-8?B?NzEzSTFRNkhiRElrbERLM2JNZWFkNHpEb2g3MmNoZmp5M3NaVDl6MGVMelZi?= =?utf-8?B?aEgwa2M4ZmwzMWl2QWFuL0pSbmxYcWNCbEowbk9LaVBLT2pITWFudk95d3Iw?= =?utf-8?B?YkN5ZTV6MjZOTHlRaWNCN3lhdFZkOVEwaDR3QzFHSVltL0lPNEVGVkVXcTFw?= =?utf-8?B?dFc5L2VKaUYrQXJZNGIrbkh5Y0t5Skw2WmU0Zkh2K3NzZlduRkFBVndCUEM4?= =?utf-8?B?VjhQSzdvQ21KZHB1QmF4Q0JTc0d4SjNMalNUYURpSHRVTjk0clF6cnE5NFF1?= =?utf-8?B?eHZyMTVMUEhHL2s5MmJrK3d6VWpNVnhmeGVCZHUwSGlGc2VSY3RHK0lIZ0wz?= =?utf-8?B?dWpIUjlFaTZ1MkRDNFZqRHl4dlRTKzZOWVJMWXpDdXhxNHpsUVU2Y0lXUXVk?= =?utf-8?B?WE9vWUpKOTlwSmlDZS92bUo2UzdKM2FCay9SbXZ5cU1aanZwUm9RU1RvalpH?= =?utf-8?B?WnBHWDdONWRCbm90dExvRm9TR3RudHcrOW1oRDd1bURNNk45ZVdwMnhzNXpF?= =?utf-8?B?R2pCbDkvMS9tMkwxa25JMlBJS2FlemxGWnA2YklBSUxCallTTkYvUCt4dFJi?= =?utf-8?B?VVZ0dGpmYXRSY3ZvT3ZraUQvT0RIT2NXQk1rZS8zTElhVnFKK0hLdjYrTUNH?= =?utf-8?B?NFpKM00xREpRPT0=?= 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)(52116014)(376014)(1800799024)(19092799006)(366016)(7416014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TStKMmEzRldnNEJjL0tZcDRJQmR0Ni92MWhUdzBuY05zOVE2Skt6bzBUYXZG?= =?utf-8?B?L0NHaDZ1T29FUElxOURGRmtuOTl1a2wyYUVwNzZlaVhMcWdyRWNkVVpMendF?= =?utf-8?B?L0x3L2hmSWVtZW03MFJEN0NrWno3TCt2bHR5UTVvNVpEUHNFZzdTVTZBMVJL?= =?utf-8?B?SDNaNHpNMjBOcDdERmxEUE54cVRBa2NKOURWUEpyNjRpNWY1ZjBlOFI1Y0hh?= =?utf-8?B?aG5SbG90UkZoVlVtY2dPSTF4YUQ5Z1hIeTBJWDRBQ3p1ZTdvdFFkKzIrRmhx?= =?utf-8?B?d1BaSnJJeWRmNENoUTVlZTdWUDc5WmpzazZrNEgzaGJCUStVT3J6clpPR2w1?= =?utf-8?B?cUsydktCUHBRRmNJQmpvK1VhRVMxcFBFcFltNkhuYTlldytWQy9jVGFWMmtl?= =?utf-8?B?RzBUcTdJVWNRSVVMNUg3TGNRWmlYN2FkU0dpelkyMzNUemJLTnNKOVg1eks0?= =?utf-8?B?RTN6MVc0U3BHMVFzKzc3QkQ3UHV4Z3oyOStoM2YwbDlpNCs3aG9vYVk3bHZO?= =?utf-8?B?R3JLeHMxdlRCbTJKeTVSdGpYUUw5QnVsZXlEMDBzSi9QMVZoWkxvVkVhQUov?= =?utf-8?B?cWk3NlFBekVZV0lUNm5iQXl4S3hPV2FUbzU4b0lzNU5xcGxRbnBkSXpXRFBK?= =?utf-8?B?RlhXcktpSDdQZU8wbmgwaEtnNGRXUVNpanM5Wk03VXdkcUtxaXpVdmRSK1ll?= =?utf-8?B?MGhtZW5aQ1B2bkpqczJuS1k3S1E3dGc1UVpZZjNXVFBrcmNXL2hMS2pPMUp2?= =?utf-8?B?SlB3VkNyY1JPSGZ3ODFnYVRIRHc5MU5IQnMvczUzZHBJN2x4SE5rNmhGczM1?= =?utf-8?B?bnVDMVZqb0lrODBwNGp0WmxYTk0yQVhob3RCeml4VkRxVGc4bVA5VjdhcSsw?= =?utf-8?B?d3pmQWF0NUkvdno5NUJoYmUwc3lPOVlNd3ljSkEwSHo1SXNjWGFQN1kwd2ZB?= =?utf-8?B?WXJ4WGFXeWJvd1pVK2l4YWJFRytJbmN3WEo3YlV1S0JRVXgyMUIxRlBod3c1?= =?utf-8?B?czJQMXlvcHB3SHJtSldWQVFrN3FIS1NDNUZkUVd2OGVVVklFWWpTd1I0L0hu?= =?utf-8?B?cWl3dk5yZzAyQkY2czBCZUZGSFI1cVJLQTNqTm9RZjB2bDRlMWtqMVA1ZHpx?= =?utf-8?B?VmpYTk5QMWFkTXhMQXFtbHBzMkhSNHhsUDlXL0tlTUtpdlBMR24yTEM5QVJK?= =?utf-8?B?UWg2NU9pZUd3TGdIZVRxTUNTOTNZRm9JdzU4WEtlWkRzVmkzeUdoY1FpNnhF?= =?utf-8?B?b0F0T3lmcU9jemFObHB6VWo0MmtmRzcvL0I4VjVCTG4rSTJwZnBRdjUvbHN5?= =?utf-8?B?aFdkNTFFQllpT0ZQbnIzZE1TU1V4eFZJK0NTME9nM3U2Ry90eDJvRUpVVlgr?= =?utf-8?B?aXhRNXY3dzZNREhMRm1hUHhIVDJldnNCM2YwSWdOM09XcTBuSUIyVnRlc1cw?= =?utf-8?B?UlpjMzlSM0xIR1FVSTZWQS9xbEVrZ2U3NDhleDFwVWdRT2NwMnF2N3N5ckow?= =?utf-8?B?VGtodUQ0ZFJjeUpVejNWWmx1RVd2TEp5c3RTTGdOYnZIcHRBL1dFUWFRRndp?= =?utf-8?B?ZkJxSG52U1FGUFpRSXdNdGRrdjBNMEl0OVdXdXJLNk9RaUNXRmRGZHRZc0dp?= =?utf-8?B?TDFySVVIaGZnaVY2YUlUWE54dGdXRDhqV3FQRjJ2TU9jeUdvWFkxT1lDSndn?= =?utf-8?B?d01sQnpIWmdoTzA5U0dLaDRqeXkxaW1DbGJvb1J0QmVOaTFDMVU4a09VR3dI?= =?utf-8?B?WWdYa20wWmJiZURJRzNlWGNqVkEvSXpubWJxSmIyZkg0Q0xqajAyNml5T3pu?= =?utf-8?B?YmdMNjBZTlBvN0dCU1NQb0d0enRld3NVZ3UrN3V2c2Jad3R1R1MwMmdpOStk?= =?utf-8?B?MmFidENmaE1INzg4Z3RtTkJiUWx1S09yYzNKV0RiSjFTczNiaGxWUTV3K2Rr?= =?utf-8?B?YTVxN1U5NWdhUHJrRkxsQTMzNCtGR2dVN1BtZEczL2R6d1hLd0hsdkFTdGFR?= =?utf-8?B?RE9WQXJjb1p1WW4wU2dCK0g3NlQwRjFCNE9mczVDV05PWXBtRk5VZ2IvVytU?= =?utf-8?B?YStVVHNWNDBKbU9mNDNNaCs4c0ZkTGFQeDV0WnJLUUhrc01WaHdjUy9JbE8r?= =?utf-8?Q?xvndSSNRybRkrIVTeo6o++eMt?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6cd7036f-327b-4414-2f8b-08ddf1ad8ff0 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Sep 2025 03:36:30.4108 (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: Gt5PgDzTQAHyO5IRbc1wapGqvTLELStAV3Sa8v8m9zx4ItGy0a2kTV8R5IxaUOpnlNQqHJuzmmqd+jHTGghqqw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8526 The PLL clocks on NXP i.MX95 SoCs support Spread Spectrum (SS). This patch introduces scmi_clk_imx_set_spread_spectrum to pass SS configuration to the SCMI firmware, which handles the actual implementation. To ensure this feature is only enabled on NXP platforms, scmi_clk_imx_extended_config_oem is added. Since SS is only applicable to PLL clocks, config_oem_get is used to verify SS support for a given clock. i.MX95 SCMI firmware Spread Spectrum extConfigValue definition is as below, no modulation method because firmware forces to use down spread. extConfigValue[7:0] - spread percentage (%) extConfigValue[23:8] - Modulation Frequency (KHz) extConfigValue[24] - Enable/Disable extConfigValue[31:25] - Reserved Signed-off-by: Peng Fan --- drivers/clk/clk-scmi.c | 64 +++++++++++++++++++++++++++++++++++++++= +--- include/linux/scmi_protocol.h | 5 ++++ 2 files changed, 65 insertions(+), 4 deletions(-) diff --git a/drivers/clk/clk-scmi.c b/drivers/clk/clk-scmi.c index d2408403283fc72f0cf902e65f4c08bcbc7b4b0b..bb5e20dab18e92932ab4b99192b= 496e0c4d96417 100644 --- a/drivers/clk/clk-scmi.c +++ b/drivers/clk/clk-scmi.c @@ -12,6 +12,7 @@ #include #include #include +#include #include =20 #define NOT_ATOMIC false @@ -23,6 +24,7 @@ enum scmi_clk_feats { SCMI_CLK_RATE_CTRL_SUPPORTED, SCMI_CLK_PARENT_CTRL_SUPPORTED, SCMI_CLK_DUTY_CYCLE_SUPPORTED, + SCMI_CLK_IMX_SSC_SUPPORTED, SCMI_CLK_FEATS_COUNT }; =20 @@ -98,6 +100,35 @@ static int scmi_clk_set_parent(struct clk_hw *hw, u8 pa= rent_index) return scmi_proto_clk_ops->parent_set(clk->ph, clk->id, parent_index); } =20 +static int scmi_clk_imx_set_spread_spectrum(struct clk_hw *hw, + struct clk_spread_spectrum *clk_ss) +{ + 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, clk_ss->spread_bp /= 10000); + val |=3D FIELD_PREP(SCMI_CLOCK_IMX_SS_MOD_FREQ_MASK, clk_ss->modfreq_hz); + if (clk_ss->method !=3D CLK_SSC_NO_SPREAD) + 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", + clk_ss->modfreq_hz, clk_ss->spread_bp, clk_ss->method, + clk->id); + + return ret; +} + static u8 scmi_clk_get_parent(struct clk_hw *hw) { struct scmi_clk *clk =3D to_scmi_clk(hw); @@ -316,11 +347,33 @@ scmi_clk_ops_alloc(struct device *dev, unsigned long = feats_key) ops->set_duty_cycle =3D scmi_clk_set_duty_cycle; } =20 + if (feats_key & BIT(SCMI_CLK_IMX_SSC_SUPPORTED)) + ops->set_spread_spectrum =3D scmi_clk_imx_set_spread_spectrum; + return ops; } =20 +static void scmi_clk_imx_extended_config_oem(const struct scmi_handle *han= dle, + struct scmi_clk *sclk, + unsigned int *feats_key) +{ + int ret; + u32 val; + + if (strcmp(handle->version->vendor_id, SCMI_IMX_VENDOR) || + strcmp(handle->version->sub_vendor_id, SCMI_IMX_SUBVENDOR)) + return; + + ret =3D scmi_proto_clk_ops->config_oem_get(sclk->ph, sclk->id, + SCMI_CLOCK_CFG_IMX_SSC, + &val, NULL, false); + if (!ret) + *feats_key |=3D BIT(SCMI_CLK_IMX_SSC_SUPPORTED); +} + /** * scmi_clk_ops_select() - Select a proper set of clock operations + * @handle: A reference to an SCMI entity * @sclk: A reference to an SCMI clock descriptor * @atomic_capable: A flag to indicate if atomic mode is supported by the * transport @@ -345,8 +398,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(const struct scmi_handle *handle, struct scmi_clk *scl= k, + bool atomic_capable, unsigned int atomic_threshold_us, const struct clk_ops **clk_ops_db, size_t db_size) { const struct scmi_clock_info *ci =3D sclk->info; @@ -370,9 +423,12 @@ scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic= _capable, if (!ci->parent_ctrl_forbidden) feats_key |=3D BIT(SCMI_CLK_PARENT_CTRL_SUPPORTED); =20 - if (ci->extended_config) + if (ci->extended_config) { feats_key |=3D BIT(SCMI_CLK_DUTY_CYCLE_SUPPORTED); =20 + scmi_clk_imx_extended_config_oem(handle, sclk, &feats_key); + } + if (WARN_ON(feats_key >=3D db_size)) return NULL; =20 @@ -459,7 +515,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(handle, sclk, transport_is_atomic, atomic_threshold_us, scmi_clk_ops_db, ARRAY_SIZE(scmi_clk_ops_db)); diff --git a/include/linux/scmi_protocol.h b/include/linux/scmi_protocol.h index aafaac1496b06a6e4f0ca32eee58a9edf7d4a70f..37f422b4b1ef2af2b4231a16771= 61aa24e07d0e2 100644 --- a/include/linux/scmi_protocol.h +++ b/include/linux/scmi_protocol.h @@ -80,9 +80,14 @@ enum scmi_clock_oem_config { SCMI_CLOCK_CFG_DUTY_CYCLE =3D 0x1, SCMI_CLOCK_CFG_PHASE, SCMI_CLOCK_CFG_OEM_START =3D 0x80, + SCMI_CLOCK_CFG_IMX_SSC =3D 0x80, SCMI_CLOCK_CFG_OEM_END =3D 0xFF, }; =20 +#define SCMI_CLOCK_IMX_SS_PERCENTAGE_MASK GENMASK(7, 0) +#define SCMI_CLOCK_IMX_SS_MOD_FREQ_MASK GENMASK(23, 8) +#define SCMI_CLOCK_IMX_SS_ENABLE_MASK BIT(24) + /** * struct scmi_clk_proto_ops - represents the various operations provided * by SCMI Clock Protocol --=20 2.37.1