From nobody Thu Oct 2 15:33:29 2025 Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11011002.outbound.protection.outlook.com [40.107.130.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 55D902EF664; Mon, 15 Sep 2025 08:30:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.130.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757925023; cv=fail; b=t25eKpsaVuY3U30htek//PQgaz9pWzUcerCJMUIo4N9/64Iu64PmWUvKOcIbgsA3OdIJne4usHSJozR7bPhiFmo3GgZ9oFawuH12PJV2zUCz9t/5LIxoBftbZj/b4eCqMNeJGL+XfCVb953hiuR2N+RJso+YgNEp3ztxJV7ckg8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757925023; c=relaxed/simple; bh=b/YlDremuFjUMekE7oETCp7MNf/xtDoQoxvSBS9DXdI=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=b2TL9Lg/7EpbpQlwh1QgkGnGVyKh/ma/Gs0T2kblDv8yRBOxMG0KuRi77XC6qel6LnUnw9qt75j9A4r2AokIcoXlum5OEzSQnsRdKnMSHsM/QBFTkUEenXeRFCCdX+nxj2FZsSt4IWsxWnjGgj/CFWTe7LhHVWcTzpUuU/zjrDM= 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=nSGuV68j; arc=fail smtp.client-ip=40.107.130.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="nSGuV68j" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gz9AVH2/NksaSOMkX6NcaqJ28P3zmkypHeLO5FjZYZNsi3i5RTRkD5bdiPBAQrJxkFYo3wi+h68aasfI/QB8I1qjJiKV+gh1Hs/Jsi+f+AD9h6vh1KGGWbMDz7Pnw5e/8s8K0S9vRLgRCfCK3Vak5FelMZYUs1nrQ4BC1ynczF2MEx9tRgne/Qf9steOGyf+XM+lbdm+rLuc3Hfc5Jj3cIXnCNm2I4/BZuZay3NjGYbdFWXU/lGd5YQ5V98Rje2LWlP0oXCtS67nZzJsEzmAVnlM/NbvmZIrMZsw46eTTx4FQPgu1GXlROM/OXqLQ14p28qQ3zbpfMPb5WkJwyh60A== 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=fFebTBDzzDHv9feDEZdCCxUxCpEUHmBHXvqdQCzZsso=; b=lanVfUyVsvDPkVtTQ+vr8nW8j4gB0r7ZUPr0PKkp9tSOtQwXymgPK//VUzh4AfSvyE9PvkQ5uLn8PfNOC4AYXaTqjEGKG6S+cL02+SKsbk0O+SgSI70NqshFDAB9K25i7DxJQKAlnCH80AkbIU6IO7sXCrwxk/UbdOvSdx/Ns/hAcN20o50pWY4Ye8bCIXHozuSxrWSG3IY3MIBYPXbTKNUsjEOQJialiXNcoXS6Ex2WE8d6cmvMNxsOAOfZGYCWWRG80eIwtl+iTpnxk50ASNbb4mXcmOUWmEar02KsdLpd+SjTYlTanYMS6HxH0+p8ms7eqO02R/brtg9pAcg4ZQ== 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=fFebTBDzzDHv9feDEZdCCxUxCpEUHmBHXvqdQCzZsso=; b=nSGuV68jn1elx+u4Az3UN3EM8By9yJiNiIukwOyaMuU0/XRmNbUMoUx1PtpcM9f3WHOO1vrArBUNOEiTfOpA40GnnkMkdoGqQo0FNNs94JRyeRafhw6eHZPEVnaGsvytVpqxc3zztoW+e+c1CQmGGedYmSpD96enlRkmqRf4/e5agp//nt5blAZZ7fhNqlIqfhs2aTZo7ys9ZMatIzmSGdToZzICPOREP9Jt7H82Q6sOw311wo104NsEkrU6w1ljX1hkhx88YfqoMviF3yzx8B1CgvR52zkW8HzQKINC25M0lEptTf6JDxnuscd63HJqAakU2Y/HOVFuennghZc9sw== 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 VI1PR04MB7181.eurprd04.prod.outlook.com (2603:10a6:800:12a::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9137.11; Mon, 15 Sep 2025 08:30:16 +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.9137.010; Mon, 15 Sep 2025 08:30:16 +0000 From: Peng Fan Date: Mon, 15 Sep 2025 16:29:35 +0800 Subject: [PATCH v4 1/5] dt-bindings: clock: Add spread spectrum definition Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250915-clk-ssc-version1-v4-1-5a2cee2f0351@nxp.com> References: <20250915-clk-ssc-version1-v4-0-5a2cee2f0351@nxp.com> In-Reply-To: <20250915-clk-ssc-version1-v4-0-5a2cee2f0351@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=1757925004; l=987; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=b/YlDremuFjUMekE7oETCp7MNf/xtDoQoxvSBS9DXdI=; b=ZQP/Xgr4C3eEGvJNl1CIe5ekpIqvoOafEYPJyVEvcGpnATskXPuWKoaN5ozPI1ZHBsZtDPzav pBrPDKnf1r9C9ZUtvGK6g7AWvM2mNJhxKfJS8xDhuVw/udsgnWiArGM X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SG2PR01CA0115.apcprd01.prod.exchangelabs.com (2603:1096:4:40::19) 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_|VI1PR04MB7181:EE_ X-MS-Office365-Filtering-Correlation-Id: dcfb0ebe-25eb-4f43-10e2-08ddf4321904 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?ZVY1akloK01vS243dVhIOU96dnNmR0Q3QTIyWWFIRjZnQ2RjaEE0OHVKeE1w?= =?utf-8?B?Q1dkTGVRSy9RanpXNEJFanpHYXY3WDY1M00xTTBIRnNUb0J2YzIxM0NkNXhT?= =?utf-8?B?TUFRaDl2SkVxSHpzMk5CSS9Zbkh4d08zcUh5alFPK2puV1hCdW9WUEtNTHFr?= =?utf-8?B?TE4vWXBjeXBhWFl1NzE3Y0RmVWR1am1DSk9NV2FXa3E1Tlc0WHNaWUFMeW9O?= =?utf-8?B?K1FiQldHZmREZ2crSElsU3dzR0xZRC9laml4REthN0dYNUd3N0FwRjk3ZTVN?= =?utf-8?B?eWIvUTJhSzM2RDVCZ1dsTXJCaFZXYklhalRyYm5mc2tuVUlQcG9QNWNuNW9m?= =?utf-8?B?ZnhrU1dWWDZIdkJOOTRvT1VrRjhZSEx0SGgyMDUySUlhNi9zOFJrU2JXS2Ir?= =?utf-8?B?ckZsV2tTbmRIb1hhVCtySjVTOHErb2ErRWhJQkx0YTZkUmR5eGtQMXNtRlZV?= =?utf-8?B?bHdJYjdHdHkydkV1R01TMzFDS3Z3QVhQekljdEtJUms1SHRUdHR4V3IrWFpV?= =?utf-8?B?MlpLcEVDaGtwTUR5ZU1jSGFwV0JjQzYwZ04vQWdwMHpTdjVSdUNDUkxsQ2pR?= =?utf-8?B?N09hWHN4RTlMZzJNUmRkdndiem5vNVlNcHdocVAxTmlvamw1czFGQW0vN1Q5?= =?utf-8?B?VlJPQ0hzWU9UWDM3VEhjN1Ircjc5d1pyaWhmSkx1VW5GVlVPaFBWVVlwRGZU?= =?utf-8?B?L0wvKzJLOEpRdEVuSHBvcnZWNFRDeVg2TkdSd3lyOHIwRnMxeXFhOENZQnNL?= =?utf-8?B?dHQvbDNjU2NoZzdQSEhvbUR2bFNXTnIzVzJIMVhNTU50cTU3OGl6TGJ2WTVs?= =?utf-8?B?bGJCNTBlTHpWWXdyRWlNRWIrUkRvWVg3eC9EN3J4bmRlWjJyQnB6WVFkcVBz?= =?utf-8?B?TVZTaVBrZE12Y293VE5MZGpIWHE3Vk91M2RKMGQ4TlBISFhLZVAwN3htK01D?= =?utf-8?B?LzFEM28xSWh6dWZ5WkJJTUVQODJUWllqWU1yM2c4L1JqQzVPMHFXdzJhSlVX?= =?utf-8?B?bEJDTWE3WkRKSTVSa0x6RERMYUtDTXU0cHpJZ252a255bGMyUjVHZlRvOVQz?= =?utf-8?B?N1VUTXVlbWtOemV1a3V3TlpDYTNKcW9RVlFXUStTV1ZwYzBKRFlwWWFYSklR?= =?utf-8?B?Z3dOWm5lMmU3a2kvVzEzNS9tQUpCaXgxOFA2Um9XcXViay9WdnZFRnp2cnc3?= =?utf-8?B?ZURVMzJuVFgyYUNKaEhWS0oxR1RjSm1VTUhhaGVCOHpMWjFvV2k3SjExL0J3?= =?utf-8?B?ejZQNEJhNU1SSkN3cThDU2JBUXNyN3F5ZFZnWllqMHVWSURkYjNjdUlITnJ0?= =?utf-8?B?M21GamtraWRBRTh1NnU1dHF0S0lRQjZ5MTNWelV5enQycm9Mamg3cDQzd0JB?= =?utf-8?B?UDJEaWpUSWVtRE9YYnZaaWttRXBXMys4NWFxZTZxbWtwM0lxaGlaRW5MVGJI?= =?utf-8?B?WmIzNXBOL2lyRXJLZlJFdWFZVjhJcmp2eEw3OG9HZDBnSy9EekVCbEtzRU1h?= =?utf-8?B?Q3BvUytWN1dLWS9pOExBVHFzYVRkZnVxd1pJRFN3bjBpU3Z1L0xTMFpVai9L?= =?utf-8?B?YjNYOVFyWWlBWDMrazhaMXlNTnpqTWFmZ3lTZjhhVGtza1ZVdmNoYXJYUDFU?= =?utf-8?B?VmJCR0NJSWlZZndPcUpIaHFiNlR3N3lJRzdaRzAzd3Q2aWZNM283QnFlanYy?= =?utf-8?B?a1Z3M0ZZSGw1c0pTVmRNVGdtWVFpQ1lmTXp3c2xRL2g3VkRhdHZRM1RXUFdC?= =?utf-8?B?SmsvK1VMT1hTOVBFRU5xV1dUV0xoWWdUZDZmSHhPWU9VdVJWK05RaEpuQzBq?= =?utf-8?B?QVd3bUo2SmRuWUZZbnhpVW90M2huZXRuS3Fxa1lsTThKM013d1lrT0c0OUI2?= =?utf-8?B?MmF3MzZSckZPVHhGVDlqekN4WGhhdzlFeUtnQjdpMXF5bTFmK2s3R2lVZ1BW?= =?utf-8?B?WDJDUkw5SGwvOHdVbEJYWmI3YXgvSnJHVUFGcVNwYjVWSnRId0MzZ0lHcGRT?= =?utf-8?B?Z0ZjVWlnSXhBPT0=?= 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)(19092799006)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UStWdUtpMWZCZXFhZ2drMUZlSmdJUmlCQkh1QUJNSzJBaTFyU2dVOEMvbU9k?= =?utf-8?B?cGd3OWtORWxMUHRKLzFBN3lmWlh1Z3ozMGRXTzd1NThGM3dXVW5BWGlJclBX?= =?utf-8?B?cHc1blU0cGRGZXRTcnFyVVdOaDcxS2FleDJjb0d5OGVEWjZ5NGMxQkFwTlNu?= =?utf-8?B?VjdMdUh4ZGR4d3h6bUdNZlk2aGx2cUtKeUJOakZYaEx3WGdTVDVJUXhzajVh?= =?utf-8?B?TGlXRHUvRHRDZ0YxaENOZVZucG8vSXhPVjI4SUVTTlR1eTBwcEVNK1VabGNq?= =?utf-8?B?Z1N2cHRySFMxelpyRVZLVGQ1WkpSckJGRzhhQ05QdFZoMGEwZlhrU0dZMXRE?= =?utf-8?B?NDVKeXhSTjVuNk9WYzV1WVBxLzZaUU02ZTdodHd6MGViR1J4NnExMDBQQzJo?= =?utf-8?B?SlA2RDlLYUdBM0ViUEorQjdVN1lkMzk1M2FFZHR3UGtiN2pTejNDS2lxT0tU?= =?utf-8?B?TnBJKyttZE9zM1lWYUo3Z3FneFQyTTRpem82dFU2a2MvemZsazNvSmZyUnNX?= =?utf-8?B?akZrZ3RoOUNYTGh6Mi9pY2R5ZmFwZHlCd01xbi9FalltM0oyYTJhRUlmbXkx?= =?utf-8?B?TGlLZ243K1h0aG84YzhCb3lUQU1YYm5ldHRvM1JObDlSM1RvN3NlNEQ1NTdl?= =?utf-8?B?VUxXU1RBRjBKMUtxazh1ZWNSWTRWVlFKdkZJUml6SklWK1g2REhjbkkrM3Ur?= =?utf-8?B?MGg4alRyc1ZmNCtXYUpHTWJsRXc3bTlYMzNkTExxSVVYQXhabHVyQWRtRGlM?= =?utf-8?B?L09yb0Z2dGo1eVp3UFRTNXh1WE9Cd0VUb2gwbkt3QU5Gb0pmYXRpMGtnVTNy?= =?utf-8?B?amw0TVRIRFdJV3RneGhWck9ObHJpbCt3UFNSV1BOajNhOU4yMDZQMUUrQTJP?= =?utf-8?B?eW5UQW1rc3AvYVhXcFZaeGtOa1pFMUZNa0FscmdXZUxTWEZzYTdXTS9qSXFx?= =?utf-8?B?cFN6VFVDMXVCdEk1NTRnWkxEU2MzZ1RNZ2tLNS9EajlPV0h6bXY5R1JIaHQ2?= =?utf-8?B?WGY1YTRLMzl5WE52MW1Wc0FjUFRDbzUvZTF6dlR2dzliN25pMkhrMXhLWEN6?= =?utf-8?B?bExIYWNvSHVwd3VrMCtGZXNYRlUrQ29zZWRRZUx2eXQ5WmhzczR3NHBoYXR0?= =?utf-8?B?bWVNVUQzeU0yT25Rc0dNdXZNM2E4R3dPMkJteHVqbXYxQkFTV29PcDc1dENY?= =?utf-8?B?RFgzVG9wdXp6UUlSRWtXaDZUUHVnalc3NE9SNlZYVWVzN3ByZndMeU5hMVdR?= =?utf-8?B?MWhxcVVCQnYvVGlvZTVZT2w2M3BaWDF1cEFRYVRlSVcvNS9mMkR5c01LdGN2?= =?utf-8?B?UVVXQVM3czJVRHk5aldaNzlVRG1IQkJ5dTMyNGo4ekI1dlJnQ0cxWXJYQWJ1?= =?utf-8?B?TkNOTWtKM3ZzeFBCaWFGWXh0VHVtTlpFQk0vNHhkNTZ2ck94b2cwU2lzRyt5?= =?utf-8?B?RndnZ1lPS25mY2NjZEFhWnBCa29Db1lIM255VWJXUEhzZjkvYW1pSTE5cUlz?= =?utf-8?B?UW45eGI1WkZnSUxUOHJ1QWJZdStLM3M2aVdaU3VqNUxjcU9VT0lGR0FxRTNx?= =?utf-8?B?UktWM3pCcHFkK2J4V3RZOU1tLzVWOFg0L1JkeUJOcFhVeWtkSldIemo3UjZp?= =?utf-8?B?ZnJ3dW9PcndxckRiYXBoS2I3SEJSc2hMZnVOQk5xTVlOc2pycXdlVFRaT1NO?= =?utf-8?B?ZExNTzlhUkROSjFZOTRhM3dacVhPSlRKYVRiSmJacG5LRG1WdEhyS2hXUkpP?= =?utf-8?B?ZUFJb0Z3RXBRWktiYStxS044VHNlQXdRaDJxenFUNkJ6QUV3SGZIRFF6RG9U?= =?utf-8?B?ZDdLZ3hUMXhLeE4wRUJrclA0VXFPeFBBQlpWVWxISjE0M2JrUFpWbXQzeitp?= =?utf-8?B?OVRWc0EwSnVZaUJmSmg3amZDWXdkYktMSkRVVitvd3VYbTZIZDJqeThnOGpC?= =?utf-8?B?SkQ0L25TVlZoM0JCZ1lDblhnd3FKVGxNOFhwMUNiVUluY0FyRDVFdjFlRWpO?= =?utf-8?B?VHp2eWYwUU94SGNUSUppa01zb3VqaEl1eHo0aFhKczJLcHl6MEFiSDBiaVlH?= =?utf-8?B?TFUrS3BvVXpoaWxKMURYK0hiU2hCY1dKTTY1ckIxbXBVS2gzWXI0Vlh2cm5W?= =?utf-8?Q?mdBYElXlh/7fxsfC6AGQiLnUM?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: dcfb0ebe-25eb-4f43-10e2-08ddf4321904 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Sep 2025 08:30:16.3147 (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: +5fkplZ5eA0Pf7kZp4R5jmwDiwzE8ZF8S/ki9Y4YWkCtbVHJfsUyz6HhabVMMdrz0OARoyvgMmXXFHH8qvZ//w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7181 Per dt-schema, the modulation methods are: down-spread(3), up-spread(2), center-spread(1), no-spread(0). So define them in dt-bindings to avoid write the magic number in device tree. Reviewed-by: Brian Masney Signed-off-by: Peng Fan Acked-by: Rob Herring (Arm) --- 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 15:33:29 2025 Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazon11011002.outbound.protection.outlook.com [40.107.130.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 29A602EFDB3; Mon, 15 Sep 2025 08:30:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.130.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757925026; cv=fail; b=kdD9gdMuG/eG9pDkUZTWyLd76qRDrwg2Xk+faC1jXwj0T1xI7gbu1JzCbJibcC0RxDygGFGfy5WhzkNA2Z/1QVOlTmC2dh35XF8Kbe4/h+AUxjiP7X5SOvgxdQTsxKfuD2tC17cYKWKyCgl4O8RIygHeIrSus0ISj1SHTXK8AlM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757925026; c=relaxed/simple; bh=I17Xb29VcyG1oCK3pFyzRbdd71w9Np9N5n6LjhrfWaE=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=hEZ02TUmmIcZ/Rc1Fl6NjnjI0kSd7WUNslf9fj/XVooQdi+tJHxVH0F2O9AlqU06atHXEi9I+yULsjfUtT8Ar37OvIgVI+9uRgKwYLTyJamPh4NX3s7UxaPRXk1Dqhcgzq0mqKuu3TyOOXyZdluVYaefXoPPsQqyxo3QUx8BO/A= 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=ZsBG073u; arc=fail smtp.client-ip=40.107.130.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="ZsBG073u" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FVzZ7tHQfMNzlrGE4GqdTSKmgjpvS4RVCz/FsZsiNqWxMRDmKVbtxqzfCSlRv+qfWnEH0b6A3G6xpKK12zyhL3A/9E5LsIwdu/3gTHXG58dKH/nJQwO72n3dI4q/BPs06g1LVUstifUEzQeloviavgcx9HuDT9VdnGly6zolLTOi2kF0IRWzaKKqWY69d+G8oNgYV4qAFdQ+FTIZNK2OrcFVxHFv/su5++Mf4fn0UQh/KjhUb8Wk8izcXBH6uKJcl7pMkTlSLMdVMskxvezYAFUSr/ipqZ3XOsv1Eq/oJfIge+ngMTT4VtAh/MhYzTMYcK9Dwbhakh4Zcyk7ucFcEA== 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=weyMYf6SsoI2Ue9pRNfYZJGFm3D+kjesDnqv6gnMlRM=; b=LUp8ixVqN9oBPyv/nR2mCGWw3iHnMI9i9vWr7fLqpQFykJAHm/b0jFISp0AFtNcTi3B/kJQAdf4OdhT/Chq7h5fEjokWmby5OOq+jz0wG3viVYWmiFaSs6EGmiSycqpCHJ5jOYkEeO7ssloAUwE0w6EHGPj9P4iEtTGm81IFPu5P7PP6HI6HEGrYrQKrsFqYzwP2xkbUEpjJ8amiv/ybv6qnNUpbtHEAbPSPNR4/UmrcazgNsnzEqhkkqYtAqApdnxpb418t4y6BvD2ajVlA3nA82tlz7jergjUbsE6g1zELFntuSL6rjk+TNoz650X6gbnUw0QcIOCaBkjm/t6kbg== 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=weyMYf6SsoI2Ue9pRNfYZJGFm3D+kjesDnqv6gnMlRM=; b=ZsBG073uiVRpf6VqhwLPjVxtJQepKNpCJg2alLFN3ENurOZAeBIAEJYByFVd6D6L6/2US7j4WioBpdKYFdA+TqPU4RmVEzcYQ9jU3/jx9IV+ez5eZ9E69G6rXxpVvnI813L/x8C+HVzbdxq6XBjgd2fyG+Tmg2p990knksRXIdHaHoJa64UmTxtgZ3wCIkX2fLWD7GCgWjg+gVHsNWUQ2qiGKGMfQiuWlMDqLojsxmJ5Xoi/rfyZlbrKK9u8VALNggI+y+L4h22xhObLKAcnh/57tiXGIwsNLrFMcyiJWxAiDOCQdSOR9ylDnwtzRN3CBMCDWbBlnO/hmiSWLfZmPg== 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 VI1PR04MB7181.eurprd04.prod.outlook.com (2603:10a6:800:12a::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9137.11; Mon, 15 Sep 2025 08:30:21 +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.9137.010; Mon, 15 Sep 2025 08:30:21 +0000 From: Peng Fan Date: Mon, 15 Sep 2025 16:29:36 +0800 Subject: [PATCH v4 2/5] clk: Introduce clk_hw_set_spread_spectrum Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250915-clk-ssc-version1-v4-2-5a2cee2f0351@nxp.com> References: <20250915-clk-ssc-version1-v4-0-5a2cee2f0351@nxp.com> In-Reply-To: <20250915-clk-ssc-version1-v4-0-5a2cee2f0351@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=1757925004; l=3530; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=I17Xb29VcyG1oCK3pFyzRbdd71w9Np9N5n6LjhrfWaE=; b=7g8uq84J+3n2iGC89xXdOaqKUg/KG1eXkcxtM+jtqoCh9hUNIdjhowTZUcW38Ryofl2EHo6TM /N/UrZclfDCCaH1jsjzc8hKpNZUdoZWzB6J3CCdBpaWiBIH5TCcuWS4 X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SG2PR01CA0115.apcprd01.prod.exchangelabs.com (2603:1096:4:40::19) 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_|VI1PR04MB7181:EE_ X-MS-Office365-Filtering-Correlation-Id: e7fa31c0-7c34-4fe2-ee1e-08ddf4321be0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?QXJtaEJMV1l0TXIyMUtUTm11d29aL21PMG9oQ0pFSGxWVHBzbXVtcW83NUZy?= =?utf-8?B?Tk1HTktHU0plZVExU2xldTNXVFkxeG9Vd1NaQWpzUW5PaTgvRWgxclRuSmdl?= =?utf-8?B?Zjg5UFUyYmJONnZ1dCszTGJGYW45UldSeTJKeXNVNnBQZXdxYm9tTkR0U25E?= =?utf-8?B?bTlmUCt4K1I4bmJBemdRRHVZeGVnbUovVWNjSEJ4YlBFcWNkRzBjdTdtZlIx?= =?utf-8?B?UlM4QXlNM3RnTXpsWmZSRkFFY21WQ1VsR1ozQ3NLMHh3bEVKa0JJcGdNbWdE?= =?utf-8?B?UjFMYXQ5Y24rUk1VYkxXME1RY3VwZEtmK0pLYmdCTXE2V1ZGbjlYVlM1c1Uw?= =?utf-8?B?Q3pXMDMxY09FNE1vQXBXR1F5Rk8yQVVOYXRxakFFQTlQOG91aXBXNjFMNWpl?= =?utf-8?B?dWtpMVRnbFpJWEgxRUpFSmlTS0dlL0hQL294cG5GcVpDUlBsRTgwMkY1cHJQ?= =?utf-8?B?ekMxQ0JZUldYbWZUK01ueElCYm1tYkRLNGlaRWpIL0N5ZE9jbGg5SE1FWnRj?= =?utf-8?B?VkFBem1QVm9rei9RMFBlbWRXLzBCMUNtL1FTT0dHZS82MTI5MkVEcFVtQkRP?= =?utf-8?B?N3lic0NIS213QUVUeURuL09JdFAxUXhiV0VXYzZlcE9SWFI5ck9FdkpFOGMv?= =?utf-8?B?YlozYXR0bGVzOUE3eXlnNUZTYU5JdWk2dGJVT0R5bXB5V1dsWDRkMDUvNmVB?= =?utf-8?B?M0dpektZTjZ4TnUzZ3JSWTlrL2k0cWx3T2RoSkY5QmxmYVJDR214OElkUW8z?= =?utf-8?B?SGNPeGVOcFg5YjlRWitRNG1lcmVEZUJ6RmNzY0N0cmgra3FHMEFBQUJyeUdD?= =?utf-8?B?S1RpaGg1b21UbWxrcHovZk9lRXo3OUJSMmRXOHhQUE1FMVlSL0xzSGVHNEVj?= =?utf-8?B?QnlWM2M3L3VRVnR4WjFQR3A5NnI1WVBweUpqWEgza3FMSG1sRlNQVzIyMEV0?= =?utf-8?B?WCtURC93blBodERsbmFZUFh0Y1JFYzRXdVBaY3dUTEFJNGV6WkdrU1RaUmwr?= =?utf-8?B?RU9UaUhtN2ZwdUVuRkdiejVRUUpoeEJWU2hadFEzMmlaSEpKMmgyREVKUTla?= =?utf-8?B?RUMvU1lvYW8vSkVEaW9HK2pYSzl5WnY1SzZoNDREcHU0WEorMjdRM1MzQXp3?= =?utf-8?B?M0EvS2hGWUxPeHBCR0hVQkw4RlgvTHNxOFdaZ3RUVFh3a2tDOXJSS1d1VUZa?= =?utf-8?B?dk1IWjZBUG5xR2o5ZWtoUldaK3JhT0FVSXEzejFxd1ROQ1IwSGtSLzNPOFFv?= =?utf-8?B?cnNyS1pxRU91QTliQ3d3Wk1ma2VFWVcrYTJwbDZ4RUtqT09kbllEUHRwcWV6?= =?utf-8?B?Sm5aRjVDcHFuNm5ka3RyOHNnZ0wxa0piNWtjQkc1aHZqZzdwZmNqQXNadUpm?= =?utf-8?B?YUdKMmdBUGJJRjlaNkZPVU96b0pIdHZmV1pWWXRuVlBXYk9qWjlqbHVwL01G?= =?utf-8?B?QmVlTXlseTFQbFJ3QzhLRDlRU2tjVDdqdW9Qa1V4TVNJQng1Z3RLQ2VJbyta?= =?utf-8?B?YnIxREVDbGxQVXFKYXdTRlBuSVhnQ0pHZ3dmekJ3SVdtWi9HbDl5dVB1NTlj?= =?utf-8?B?Njkwa3BUUk12bmpDYlBFcHJiRFFFTFNGRTlYK1ZmQ2w0dEMwQk1hWUhpZXBp?= =?utf-8?B?cDZWUG9kWlNZc2d0MS91MzVaaWtlaXg2QVNKMkREeW5TUlMrUjRVV1Q0bWdl?= =?utf-8?B?cmdxTkQvUnlMZjZDdUltZVRPcFIvWWNMSU9QL295S05ORGxtc1BHelc4RnVY?= =?utf-8?B?QXU3MzVHaFNsdlAwUUVHQTkyZnIyVlZ0MExyWGtvK1ZkVVBmNnhpZkNGNnVO?= =?utf-8?B?d284MEZmT0JUWGEvbFpaclFhMXBDam45MTlqN1RES2tyR3ZMdk94b01zQzNx?= =?utf-8?B?MVh6M2t6YllXdzZsUGNYQ1h6dDhDNCtOL3hyY2pIa0k4U3YveWdDbGhhbXg3?= =?utf-8?B?NERDWVV0bll4NWJUV0I2WGQ0a3N3cGtBbXloNnRZMEZzdnVmWWtrUGtzMVhu?= =?utf-8?B?KzZHd0Y3WDlBPT0=?= 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)(19092799006)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MDBPQndpTlJNT0oxRm5RTXZzU3ljLzdBT2oxeTIvUER4Z1NxdmU2RzFiaWsw?= =?utf-8?B?dTBnNmtaVERUdnRQYjBsTUtEMThNWFp5V2hYeitZYmRJbnRCNEdLVWpOYkxa?= =?utf-8?B?bmFlenBHZ3RmOXlIL2d4Mk5DMWxsR0RQT1pOSHhnTSsvWGowSEVqZXBXeDFv?= =?utf-8?B?MVRRN0JwS0dhTVRIY3FYVzhPSkpqejV0dDE0OTBDdTQ1dWtCNHp3M0c4dzFF?= =?utf-8?B?SnB6SWlxUVRWa1lEb21KcmtZK08vUGZvRDBKM2M2NE80R0Q3YVpXaE5TWm1v?= =?utf-8?B?L0x1R3dCS1B6cW00c3pTL2FraWx3Qk5VUEFVejZ4bFo4a29BNmRvU3JYY2Fu?= =?utf-8?B?dGJ5cmlqNHpSZ045REk0OUlYOEMyc2Y1WFljaHNTN2VaY0MxUjZ5a25XOXU2?= =?utf-8?B?TktqY1N1bGZxbFZhaEVNME4rcm1kTGJYaVBNT1V0UGk4MzZBSUNVUE9GenFw?= =?utf-8?B?TURTaHNkS2xnSHRLOEh1WFIxdXlMWDNiMEJkczRnazFPdlNFS0RZZW84VVY1?= =?utf-8?B?MVRoNTlSc1p3VlVwcWc1cHgwMjJPUlRrL3RtZksrNFZJMnl6TmIxaVVoSkxH?= =?utf-8?B?VG43djZnNCtLdnZPVm4yamZ6bXIwYnlaM2NDbjFhTEhIbEszMzhQZGRHVmJN?= =?utf-8?B?eHpwbzB1RjhRL01OQmVIWDFRbjdNaEZMam54TkY5c2hhNzNJODlVdWM5bFFN?= =?utf-8?B?ZTVIVkh2V0VXRTNFdHZVbThUUDRxYWFZcWlVVDBsUWVZYjgwcm9xUGhMQlZB?= =?utf-8?B?SHZqQ3ZmRDR6dG85eFh3TFA0TjFEYldwQ1gzaHNxcFZjTWl3T0c1amNLUlpi?= =?utf-8?B?SThPenIvR2p6allWVWNUT1hWK1VYMzdaU3AxNXIrcGhwZTVxZUlibnlXMUNj?= =?utf-8?B?ZGovY0pBaEw2bElGOWZYeGJZTk55Ti85dDdjbFVKRXY3cGRzUjhRSm5KTDNX?= =?utf-8?B?b0pCRkdSTGRJRTdyK1ZCU24yR3hZMnltY3g5am1qWmJqakErTkN3SWMzeDJD?= =?utf-8?B?TDNJTFVXMXNhVWNQK2lIOXczRDVCTHIrWDd4TUdDalNkU1FtTVhPSStabmdM?= =?utf-8?B?ejQxb0svVHYvZWFIMVJ4bkRNdFl4VVEwNlZVL0FTUUVON3Q1OXNvY0EzZlo4?= =?utf-8?B?K1VxR3gzMHNCMjR3K3BOZEs2NHBqY1I1eS9RcnR1ZlgwZStvbmgwcGxZeXBa?= =?utf-8?B?Z3RBOWZ3WjlZaXZtWUpjMnNRMEhVaEovU0I1b3NxQjRPQTNiTkhOenpNZVhh?= =?utf-8?B?bHdhLzJSdG9GVnB3eGhMWWdnZFJBYlNXUEYwTGs2R2pQRVFTQ2Z2MEE0YWNq?= =?utf-8?B?QWpmY3lPSVNKalpzUkFwRGpxUmFmNTg0YW9sNWQ5MkVXZVliQ1Z3TnpRbytp?= =?utf-8?B?UGh1cGdVWGhTTUU5SEFCU3h2dThaa2NxN1gzbFJhVWxnRVVJckc1dnQ1MnEz?= =?utf-8?B?bXNCdk5VdnpwMDBFVDhkYTJjT2plZWFYTTBMa1ZPVmNaczRsZnNzVHlDOVYx?= =?utf-8?B?VExFZFRIVk84VzYzZjNVTFgrTENJR2R5WWpNeUFRbnVCcGt3QlBOOFdrZW9k?= =?utf-8?B?cDVPeGlKNis4OTBSUlRsbmRxRTdMNENER2RTaThIUllwZVBjOUR3MWcxVkxt?= =?utf-8?B?a2ZkV2g3RTBTQ3Vubk54bG5lY0U3OWhqaXpmVm9Tc0VYbE1vMU9WMFpWemht?= =?utf-8?B?UnNmdmJMSE4rbDJmdElYVTNheXJrYWlvdkxveFZEWnlkK3grUFdkVHFWT3o2?= =?utf-8?B?ZUVOcTg5eHIyODU5NloxdzFNTjRFMi94VGx2aE1ZaDVvQ0lkcEZ5ajdocXdD?= =?utf-8?B?akVWbHQ1R0hPYWJVOEl5S0p5a24yUlY3U0pOOW9Md2dQK3RmQkx5Q2VvSnFM?= =?utf-8?B?VStGOFRKRkFQYWVxUVRZZ2E2VXV5OFFPY0s0eWJ5Q2Z0VDFMRURFeDBMUW1C?= =?utf-8?B?RjlyNGhmK0lTeGZTaFFYVkFJV0tpU25ud0hXMFZQZ1RpM1VFaHBuRWpKaEtE?= =?utf-8?B?dHFKeVdZNkRMeGdtYTlvaXluaUFlaFMzWDd4azdjaTdlWGVsSmNKa2pBRzdr?= =?utf-8?B?TFFwWFlMQjBaUFRpelhEZWNER0NNUFRNUkpyOFZyNWU3MSttUlNsaDhHM29j?= =?utf-8?Q?ZcEBJa5EjMUmKv4b1QXvd4zBz?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e7fa31c0-7c34-4fe2-ee1e-08ddf4321be0 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Sep 2025 08:30:21.0961 (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: QOJjSD8gzoUOWVtSaHNwzahQBYqBoKKmgLjqcBCttSTTBfNpIDymeEuqw4IdAJowsImvxViSagjE/qgAYWExOQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7181 Add clk_hw_set_spread_spectrum to configure a clock to enable spread spectrum feature. set_spread_spectrum ops is added for clk drivers to have their own hardware specific implementation. Reviewed-by: Brian Masney Signed-off-by: Peng Fan --- drivers/clk/clk.c | 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 15:33:29 2025 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11013026.outbound.protection.outlook.com [52.101.72.26]) (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 6A0342EFD98; Mon, 15 Sep 2025 08:30:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.26 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757925032; cv=fail; b=H3G/rWHWD1m1ZbJNmcnIj/PEcpYL+ezY5tmI3/V4vAQmu3OI/pZy/lD0+Ng2cYUsmzQQnf9EZdm9TBH4KWB48YSnOPPNQG7hY961b63s+Eaby3WPUh7gtXP5dMA4xFbUU2k7lIrUenhHC3Ip+sRPT9qksQu77LXPVAqRCj7dCmY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757925032; c=relaxed/simple; bh=PeRl5P3IHKJMf909jjQ/u7GR9jCDfliupm8kEswxFCg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=hBhkG9WNbmLOPgxSQpL0Hm5MAzLzkdRW3r/L8cHVTYpd5TgzEHMd47sYEYUUspp420SsALMOlCId0FRntKAHmv++JKwoopYvQrJKtIMJ81DgY2QoO5uQgUb4clc/a0aTwILghGTAmF9Amy/+6PIvIKvJL7YT0YfM4LSuK4nPiTo= 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=nGyShJsS; arc=fail smtp.client-ip=52.101.72.26 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="nGyShJsS" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HAb2ZD/1VTWh1qp/XvScHPWkEwxhkzIngejhrTw1rnVleFLgXAZT2vwJtIAwCeVwZTvSZfi8OdXraCBCZYwmFxTfKp2PeZeMOwqyW3RrQeZr4uYQGmAGGHenOfK6Mo9v1Amnwe9v5ctCYGYXmlhfQWYzK/aSb+w3uQf2GULmGPtWepxFW9VmAjmNuDGKuTLKTLJGa7NTFzoBDVKLVC/95BWfjrqN2MBbRIPrVexCuNKkpyZD5A91rmIusS/XmtjGzUD+L4/9vlyKMhSG/ZH1OQtC/yBQ/xDpAPE9UMcKvgAQaudbZ+5qPmGBb2mIOXnPSw+20yoqmqVlPTBMWW4skw== 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=qhAnea4JcYrvufF77oqwZMEJGjUnAst7YOUdHWj/WUZhxafhoOta7VQAHithGrkQjf39hN6Om6ef6C28ENf/DLssIk8ySAt2J5bIFKlANBlBoB5E3ZrVCAPt7tcJayAquqKaJSmy/MAZtaSUyizWgRgba/vwRbWzWgzTsRnkhzuJD/mTvZma/DEZcI6oofAnUqtXEnrsTsqYEyFNjnwDt65KAiq03HjtzJe3hq/YHtgUwi+SJUvZhkW03ta7OTJDUcTmU7W7rUzYYLNvXAlNtSCgipBd1/DZoc5Lx7jK4/sn+WbY8EsDq3OyTe6Kyz7EKoTKzKVZem/Eg57FX+JNYQ== 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=nGyShJsSr55lPxr7IQ68ZdsgbpCAkMSfy9Szi/DLw3KLeerGR0vydesjvSIZsJ9yxykPGHbAFMubIpDl6myW4eFLXRhK+Zh8FMnoJJI0Q37aAbleERSCw+r+WNaNLIEeSf4V3LnKfxhDAB9LsrM6GsrajhskQQTXmJn3BwqZc9hsiPoiNDOQyx08bCO9nxbi0nj3OZznfYAweGX81QyHCGd88oxw6Mz/ZaWfPwUNDD0eIeY5A5yKQrgz+wAVlm9Adwd5keXZyzEUGN5sXltXcyRsmWJIBkV1nePh5mGQy64vbJDbbyx62+TT7GmFz1Winb5LjjOAU2BN/bt7qJQleA== 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 DB9PR04MB9913.eurprd04.prod.outlook.com (2603:10a6:10:4c4::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9115.21; Mon, 15 Sep 2025 08:30: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.9137.010; Mon, 15 Sep 2025 08:30:25 +0000 From: Peng Fan Date: Mon, 15 Sep 2025 16:29:37 +0800 Subject: [PATCH v4 3/5] clk: conf: Support assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250915-clk-ssc-version1-v4-3-5a2cee2f0351@nxp.com> References: <20250915-clk-ssc-version1-v4-0-5a2cee2f0351@nxp.com> In-Reply-To: <20250915-clk-ssc-version1-v4-0-5a2cee2f0351@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=1757925004; l=2996; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=PeRl5P3IHKJMf909jjQ/u7GR9jCDfliupm8kEswxFCg=; b=fn/voTLSGoiV1eXFlWqvfbtIQkdy31mg1oF9IP7p2CX2N8IaK70+ShoqNIds25rQvKtfLrix9 J5BC6gEBBc4BC2yKdYeurY25fdtD6vACm8KWd63e/wubQipOt1b7upa X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SG2PR01CA0115.apcprd01.prod.exchangelabs.com (2603:1096:4:40::19) 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_|DB9PR04MB9913:EE_ X-MS-Office365-Filtering-Correlation-Id: 7b951bbe-5807-48d5-8dfb-08ddf4321eb3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|19092799006|7416014|376014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?c05Jamw4YjBTUWRCN3UzdHgzWDhVRjExK2tsNjYyNzJRRXJieHE0MkFjb3gy?= =?utf-8?B?eVlGMWpUWko4ZEoxanFKRWRxRkhDdE5MbDV2NTJySVVWbzZjRWJYZjlPTDMz?= =?utf-8?B?OHBIU3pKNFM3amJZK25PUEo0eTcvcytUYmd1NkpvL0NkaXdzRVFHM3ZzbGN3?= =?utf-8?B?dVJNalpMRDdmbnhobEY2aTc4MHBoQjF1ZmVNSTlTUC9pRGU2a2VkYzJTWVJh?= =?utf-8?B?NktQVnRhWFd5S2tzbkxrbGdVZHhRM0VobEVBem9TNFMrQ2d5UlAzYzRjTjZT?= =?utf-8?B?N3Q3WDZRekY1dGlqSVVHSG1RTGpQeThmMll5bEVGQjZybUhTSkZmbXlINFpC?= =?utf-8?B?RTV6OTNEU1VmZWFyUGtTZGtCNjU2dzhrenAyVGZMbDBvSDZvVy9zdDRnR1Jj?= =?utf-8?B?S1orT0g3SGx4SXdIU1MvR3VtSzJTZlVNMlFtWFhPdzdSay9OejVGWWtRSkdU?= =?utf-8?B?TVB3TXJRVUpacUIyV21WN3FyR3VITDNTVnJKaTRVSEJUaWU2RTNHSTNZRzFQ?= =?utf-8?B?ZWs2VThkYm9RKzlKNzlkSVRqSFdpSlNMUFlUVnFFRThWLzdMRE9FU3U3dDZt?= =?utf-8?B?NUdLMGt1anFoeXpXbmh1U2pKWTdHR3RjaHhQWGFUZTYvSkR1REE0Tkl2cnNo?= =?utf-8?B?a3JCdnN6WVNzeCtBdUszZmI4Y09BMXZoSVpoc1hueE5qeW5Za04zQlozZ2ox?= =?utf-8?B?M2Zad1BXNWVka2twWTlhVUl0eFRMZmtscUluUEtLUnRyUEVIYmd6T1M0MDkv?= =?utf-8?B?YlFqT0NwQiswVFRNQVRXTzRpV2ZQbVhRVGo2OGtmdnF3bWtCU3c5SDVUcFJS?= =?utf-8?B?SFhYeDVqUytwNDhQMEtoZ2Z1TCtFdVMxQnFlTUJEQTQreTJQTS8xYUJHVFl5?= =?utf-8?B?ZEJOYmNDNGp4cTZoYXdreXNlVnE1cXQwRGJ4T0x2SXVRdVZDQWVQeGg5a25u?= =?utf-8?B?TWltMkpPR1NRRlhRMnNsd1IrbUpWSGtJSkl6SlIzNlVZVVVKKzBCbEYvcTFI?= =?utf-8?B?QWhZck11eHV2a0plbWZ6bWluTGNicldtb1BLVUhKUmUvbnQ4WTR2NXlQWmNU?= =?utf-8?B?SGpJelgrcEZBT1lCNmdZR3ZQWVZtVWdwL3E4UXJUZ1R2NlBrQ0pPdXlIMkll?= =?utf-8?B?RG9USDFJcnhnSVBoZHFBTmJMQzlDVTlSMHNubHNFbm5pRjdTcVpRbzVxZFJa?= =?utf-8?B?WGgxSk9lSUlEMVhkb01YWCtPM0FCemtGMnhsTGFVMWpYblBFU3M2ekN2dDds?= =?utf-8?B?MzJxSCttSDZ5NEt3bE9lczlGUTNhS2RJMXFlUDVEZ3pZNi9hQXhSdUFjRGs4?= =?utf-8?B?bGMzR05xczFrcG1kcVUwclp6UHR1UmZDVElVclliTXVFYXpsRk1pTFJDOHIv?= =?utf-8?B?VzNETFNrZlBvdlB3eEJWTzdYVm95QzRxbHZOWnRwMHNWd3pTbzcrenZMbkQz?= =?utf-8?B?Y3h6b1pKeG1oUFRiblp5OTdBK3c3Sy9JWWxTQlg2bkxjcU1DZ1FEMXE3NFRH?= =?utf-8?B?ay9aUklNWU54SFFNdjV0amNzUENmbHYxUjcydzYvMm52NGliai9NRWxTMGFh?= =?utf-8?B?TVFDcHN2cm5pTmMxV3VXUkc1L2xvMTJGOHhJZVJuNlhWaHpxSzF0ZCtLOHlU?= =?utf-8?B?WWRCM0VLcU05TlVudytFOG9wei9hSUxNaTdnaElnV3VqaWpaVTIxazBFTUNZ?= =?utf-8?B?RVA5cjhYcDhFTFVKY3dUcHJDRktKb3JPUjdxNzBhUHowNFJobDlqYXRLTzNI?= =?utf-8?B?K05mUHdGNWIrZWdEWU1ubnlxdExsZjJBSHNBZ1FleU5BblFaOTRTQmN0ZW05?= =?utf-8?B?QjRZNmNrb05FRDI2TE5RcUdlTkhKUXoxUk9MZm5MbDRwRFlxSHpYVGNudnA5?= =?utf-8?B?cUI4cEFpY3NhN1lJaStEd2lkbVQ0Nm0ycDljZVl1UHYwWDRlakt4Ynd1STYz?= =?utf-8?B?L0R1dUxqelNFM24rMUxQNi94NWVxanpJOWpzSHRjMmlSa1NLQjIweDFxNXJ2?= =?utf-8?B?dkZVMTcwdzRBPT0=?= 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)(1800799024)(366016)(19092799006)(7416014)(376014)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WFBnb1hyY1M3QnNHOXViWXB5SGNTTktkbnNvR01VVnd4dm9jU2pCZ2Eyc0tB?= =?utf-8?B?TDBDUDZGY2NubVJEMUo0WG90cEFBWFpzNDhJb2orcFNtdVZ3UzdhNmc3QWdH?= =?utf-8?B?MThXVzFqWEl0WG1sUkFBdjF1SU1VWUJjZlFESVZOZHNiTy9HaGhGNTZvQkFl?= =?utf-8?B?T083Yi9MbS9YNmtKeE1xMEZNMUx6dUtRbHQ3aitIWE5WK2g5Y0FVeTNJNmZu?= =?utf-8?B?RGRmdjk4TDFmSHNueVczTFJxT3pwdTg2Tk5RbU5RNFBWTXA5QjVPSkhKYTFK?= =?utf-8?B?OHBvNGZaVmlaMFJuTmlXWHp1Zzg0M1pUL2hUYThrZlNsZXZSMzRPU2hORHd2?= =?utf-8?B?SVJpMWZPV1R2ek1KdkZYaWRkbHdzZW9wUVVqNFkyOXN4aEQvZ0dycE9yaGFj?= =?utf-8?B?by8wUy9maUJsZWVzaStuY3VTVU4rL1JCcGFkQWpXczZQcHVKbUFDclQrZm1u?= =?utf-8?B?a0tmVmVQbG8rSEtOUFNGQUpzaEJhcnFHNyswWGwwKzF6YWt4eHowQS9uZ1lr?= =?utf-8?B?aGljdUoweEwwY094ZXFYOHBmMUlXVGZodTZtS0pNZWgyeUdGYUhXZkhBbXFI?= =?utf-8?B?ejExWDRXUGdWOVo4N3B4VmdzYlppQU8rWE1IRHJFTXN0WEpDVXM3MmxFbTZo?= =?utf-8?B?aHBBYzliUW1tbzcvcTI1akRjOENtVjcwTFZ6WjdXMjBwYU43ZS9uRUVUZHF2?= =?utf-8?B?N3F5cTBSUGVDR2VTZkxubWRpUW9SejdGRWVyYi9MWEJLeWxpcGx1SlNURncv?= =?utf-8?B?WjM2anhHL2R0TU81Y2JuWmJNNzlESUh4WkhiN0htS01DMzBwcEc2Qml3bE56?= =?utf-8?B?UVdvUXNncG5kR2lMRElWQ0hQanozZFRaZXE3UTd3ZU1RUXZVbWs4eWg0cGRX?= =?utf-8?B?TXErU0E3WXVmd3RNYzczYm0wQVdPZUJhZFdmUnNRNlNWZXgycW91dGtiTW5T?= =?utf-8?B?b1dGR2VRaUFrbFhkR1h3ZjhDN3BYYVpwaDdPck1pWDFMb3FGMTZRUGtSeHJM?= =?utf-8?B?blJPeUdrd2VGdmlNMHVVMlRTTWtJVCt2TlFQRGovOTE3RndRc1g2aEo0bHJa?= =?utf-8?B?MTlQalZGSXRiN0M4amN0WHpJR0xZRkQrb0FpclF6eGNFMWRleVBwcDd4Z3F1?= =?utf-8?B?UCsweWVjVFFFWlpKdkxlVEw3MXZJamRGeWFJaWFKc2Y4a2I5d1lxNGZpc2ox?= =?utf-8?B?OFNaVEJlNDdhcjd5SHJhVEc3YlZJSWs1aVMyTHNyTHZqekFzN0plcDJLS3I5?= =?utf-8?B?bzl3T1lhelVVUk9YN01HQmh0dThVeUdFeTVzY1NlNUcxdEVoQit6d0ZpNHB4?= =?utf-8?B?N1gyVVYxR0xJZGZUbjNkKy81RitVUnc0MjZ4d3dBbERXMmVFV1dTTS90WkVR?= =?utf-8?B?THhiUGZFcjFsY3hVWlFZL05nSitlemhaME1KcXE4NjJNekM2dmZUZGY1UlQ0?= =?utf-8?B?MEp5MzJKVmlWNk9ZR3o2aWFmaVZOQVRXVVA2RUEydUpLK1VNMlJEQW1WNnAz?= =?utf-8?B?ekthbUdtOUFuWmQyemtFWnBOczEydFZ4OFE2QkYwWDRPSTBJNUpzVG8yamhX?= =?utf-8?B?N0JvY1VLcmovcXhmQksxOCszdE9aY3l4RDBZb0RmbjBzaGVOVXIrT0p4cDhH?= =?utf-8?B?c3daUC84a2VpOXFrZFpsdGtaZ3g4bU85dDR6MEVoWDFndTlCWlp5ZFZNS1Jl?= =?utf-8?B?Ky9hdEREZzIvRHdOZjV4dnpxVCtKMkp6c3h5Q3Vtb2wrSWFWN3ZPQkE3OHBu?= =?utf-8?B?K3pydjU4bk5JSk5zM1QyTEYvazVtcWlIN2pmZ2E4a2NJbkNpNkkxRDIxNlZ1?= =?utf-8?B?MWRxeHQwNU5JYjVvb1V6OHNqUmdiWEo5azJCb0h4bUkrK1FRcWxLYVluaVpW?= =?utf-8?B?dG4xVm50a0FvbzdpS0YxMzhHK3RJR2dJdnFlbUFzQXlLTlFRMHp2clZJRDh3?= =?utf-8?B?OUorb1hKZDNNd2dsc3FsVlNjVUp5YkNpVWpyRWdkRHErdzV4SEgwVXdCclh6?= =?utf-8?B?SElRdUFYUXE5RmU4L1A3Q0IyamQrOFVsVkRlRHpDemQ1MXZZbnI2Y1NmOTA0?= =?utf-8?B?eXdhNnVqQ0RHZzVZVjR6a0MwRm1EMllHUHVjRUEzMnBURlVrM0h5Rnl2VUNQ?= =?utf-8?Q?/Wl6y8GDqzYOA/66xDfIFe+kD?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7b951bbe-5807-48d5-8dfb-08ddf4321eb3 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Sep 2025 08:30:25.8401 (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: xpUEx3uhR69mIssVELLgbdK6FFHLj+3Bfb9fEK0JE5IJ7n6c5BP2jW+W13HFhSaqHZkalljT80SYxQBJGHMMgQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR04MB9913 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 15:33:29 2025 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011001.outbound.protection.outlook.com [52.101.65.1]) (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 455F22F0C48; Mon, 15 Sep 2025 08:30:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.1 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757925037; cv=fail; b=Apvja590uZvaKecVLQ6DBuW8Z67I8VICj6uqISyFoLDAGIWV3RTwW61+bvtyQoqY11x9saU72s9tPNWBS2iOG4FwOVh986A7FUQaJP0b9oeGfOI9D6Oy9lxJZGzvQj34IPCSmqKESvE0Zk0jvvP17Lw8pwzF3GKMjWjx0WwdWgo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757925037; c=relaxed/simple; bh=KXI5+OWRhC+DEfwoI27LBcMYeeBwhNiMRAiQASaZY5E=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=eOl1RomVwzx83h2kiKzrXl4Pei/OQRg5BtAd54mO7JxKXOO5oY+/Og6vmshZ50MIuhaYQi0MfiPKlz+WHD3k61v2zt3+mNpuo/5ypNctfFvme3XJgxeoLTGSc5w+iyIswN8PXD2BkP4ckwargtp447RIhaGtynDWwBji51dHHdE= 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=gTfWG1go; arc=fail smtp.client-ip=52.101.65.1 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="gTfWG1go" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nFoKkHsySOKCTwVTykLide0PokXqUVYC63mQmuPF8ew0WSwPTuRQv9dhJNeRnqon80a2S9Z/tK2VF98b7nojRbjFyPCSIENm8ywO7XsTUVBxa514Sff5vtmhpUsviquj6XhNNJ0LtpIXFQGSOl4JlrIZUGwOzyZxsZdzeHCZMlX1ohvSWa8PUQM5ll/k3cPCgJ+WwAE6lbSP3gmFWNZBL6jlJBkFVGok3PdRiwvRpw3yS9lkRsM/dBT91faYbnxUn1q25YCW+QxbGGWqvOmWXjD8o47Sl97m45+d+5WlfmuODgYdlOpsrzKcGZSy2Ag+OPGx5GE7GCDG0yBhHl4IYA== 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=fTktGQYtJAlpe96g9Nfk/AbZ2GYgHcSJbds2+bEMWfA=; b=dAJqJ/715bZVH7FGXBi8byd5SbgfZj2rvQvKvJu0vBX/cQMSVM4CN0j+/eAQS0unRj1Hc0oAyGqqg9Mr3xAArmaKyJqH5uBoW8Aqk0al8EqEm9cQcXSb9PNtNOjc6RZzdCL1eThyS3ALmOl8Gr+3YfPdrSfm/7fD3oNCytSqpuA/dlN1nSlg6B0wYldDUx9CxqPVEpv/wcgmkUse/5f4uYIZJCugbCsEq0JYfT+GRGYZR4Dw6+8pVy4scrrm68HV0jPzDM3uK7q4Lj6Dt+kx7Q168DTmauRv+XGWidghufldxv0zqNUZZ1/t9rDCYmogd5OUpEomRHBBv+V3bsUpXg== 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=fTktGQYtJAlpe96g9Nfk/AbZ2GYgHcSJbds2+bEMWfA=; b=gTfWG1gouhQaPjtV0YH8J4KACv8cDZgoMNiYKPw5kYRIRB1h9hJjhsV2NXuZPJSHDXmB4dUuTCgqkvyZFxZoSYyc/owb/Cm/psuIvSFR/DU93kQye8TEVKnSynaVVU2jbGDtl5sP+7m0OmUdOZV/ZH2q377HvD2F90pcacCcS4t33VjNgGOp+n7wUK0HI1hP6mkt/dTtpzkniLh7BdwHBcg19L64yNn66M/HeQKGEDEaIxc20KprccD6K/TLMUv2IX5ZcOm4bY1IXWWPxCB8n1HAev1uL5TZbnJ65lIOOQ2d0F54fahdd8vZiuTj8jDsht2Zxf7EG/PHK/6/MIVnDQ== 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 VI1PR04MB7181.eurprd04.prod.outlook.com (2603:10a6:800:12a::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9137.11; Mon, 15 Sep 2025 08:30:31 +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.9137.010; Mon, 15 Sep 2025 08:30:31 +0000 From: Peng Fan Date: Mon, 15 Sep 2025 16:29:38 +0800 Subject: [PATCH v4 4/5] clk: Add KUnit tests for assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250915-clk-ssc-version1-v4-4-5a2cee2f0351@nxp.com> References: <20250915-clk-ssc-version1-v4-0-5a2cee2f0351@nxp.com> In-Reply-To: <20250915-clk-ssc-version1-v4-0-5a2cee2f0351@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=1757925004; l=22518; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=KXI5+OWRhC+DEfwoI27LBcMYeeBwhNiMRAiQASaZY5E=; b=eCyQrFLr9kZh/sDcInfR9n8d1KdBaMfA5DhyJhN6HCVvUvL6zOiEMZ6eo8r7lOzaatSuMTlXx NV0ZsZT6IYDCsaZosGI0FViQdph2f//wsoXrQ1Kx1754oBbLkN1F7Mv X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SG2PR01CA0115.apcprd01.prod.exchangelabs.com (2603:1096:4:40::19) 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_|VI1PR04MB7181:EE_ X-MS-Office365-Filtering-Correlation-Id: f1cbc369-6368-4440-3502-08ddf43221c5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?a3ZRbVlxKzlWRzZqcmgrU3FXWXhETHNiZ2tsS2p5SnBvNUdKQ3N4NVVaQlNm?= =?utf-8?B?LzJXc3duS093NDlYUHQ3YUtjOStRcWN6SUc5LzFnTFl2dXZESjhsS3VxMEYw?= =?utf-8?B?WUM3N0ZSOTluZ251YnpYUHF1Rm5Bd2crbzllUytqNnFQci9EbDdEcjNkS3VH?= =?utf-8?B?TVh3TXVKcmpVZENFSDZ2bGV4eVFBNUNYdVFZSGVsd1A1R0VvOFVWbWI5cENP?= =?utf-8?B?Q2RlZm03M2hSVy8xTnFxODVFVzVva2hXRUJFTWNjYThsUi9MK2xOZHhLVVg3?= =?utf-8?B?MmxWNmkxZE03UVcybFNnUTZscHRCbWlQSGp0b05vVzFXT3QvY2RGOTVHOWdX?= =?utf-8?B?SGtnMlM0Q0JpaVlKWWZFUFcwQUpLZVlYYnQ1WXd2M25zcC9hT0pvUTdTNit6?= =?utf-8?B?U1NnUDBQRndaZWpnaVg2cVpTSU5NZHFTRUVtM1g3cTQ5LzcxMXRKMUdaK1Rx?= =?utf-8?B?ZXBJVzVnNWtVby8xVHg4TUQyWDF0TGxaek1HNEFmQmRtWmNnRkxmT3V6bWky?= =?utf-8?B?RGcvTFRNT0lZaW1icU94NkhpZ0lTTWVkY2hPMU9QdjdrMWdVUmJteko2K1B3?= =?utf-8?B?T1Y0NU1sRGVVY1g5Q05RWEx0dWdHdy9VMlZwdTZid3dCeW5oQ0NNQUhTVVRo?= =?utf-8?B?a0JPSTVEODEzYWhmK3NNTkFySTRWczZFL1p6NEw2NmxIbjBwakFFQytGVStJ?= =?utf-8?B?UzhPL01PQVV6RUYweXRHVTBhTzB5UkIrRTJqa1c2U2NJSVNsVjYxNlpCY1lt?= =?utf-8?B?b3F3RDVQdHprNWgzU1J5U3lSdU9GQ3BqemdMRk1YVFlFN2lMMHNzaTNmSHdL?= =?utf-8?B?cjhWKzdKZnhSVkNISUhiMDQrVEhEaGZGQ2xlN0NKZi8rWGhPMEdjelVWZjhx?= =?utf-8?B?VWZsTWtFeXZtbkkxenBOVmpJK3Frc2kxZHBKNGpac1RLeTg5Qmd6ajkrSHp3?= =?utf-8?B?YjFGZjQwblZMUStvZnZvR3BwYjdqRDZmU3lQaERrOEhGNG1ZMjRwZXIrbkQr?= =?utf-8?B?R1RLVlhJSnlHZTJZR2dyaHgxSll5Y0RLVXdTSWVSRjFlSWNIQVBYaitPdjN1?= =?utf-8?B?L2MxaU5KSmM3K2hIWFErSjFvb1NVQXNQQlZkb1hFankxbk9XMlhzQjlpRUZn?= =?utf-8?B?V1F2TzVjZ3lmcE9xb3lLSFMzQ1ZzbGpqbEhPamJlTXlPb1l3SGRhZXh1clJH?= =?utf-8?B?bFRxSmpOZEpieWZHQjJ4MkZuUlJOL1hCK3pXeGtiTVZjaks3T1Q4N0ZkREZv?= =?utf-8?B?ckkrQ2RBYlI5Q2UwSUxjMnhGVEdWWW5hcmNvemdsdzhsMzJVMHh0YWdIWVFU?= =?utf-8?B?OGJFNjI0TW5HY3I2QU9SbUtqRm1FYWpvUE1EdXpQNmw4bUNoZUNIU2VMN1lq?= =?utf-8?B?eEZpblllNW83Tld4aS84dy9QcUlrZDI0U29iaW9uMlRSa2huVGVpbmRxUks5?= =?utf-8?B?b0lRMEoyakVWL0FnN1VMNkJuNE80WU5lM0RXZnN3OUp5UWQyck8yeUhMQzc4?= =?utf-8?B?TTMvWG9VK0VndnV0QmxVZWRNdEVxb0JwRFhjUzlReXUzNHdtR1JIUkF6endG?= =?utf-8?B?SnNuTDM1dXk1SnRnQVNuVk1odFRWa1hGbWkwOWdJN3pZcEp3RG9vYTAyZVhO?= =?utf-8?B?ZlpUVzdjQ21GVll6QVFoVzhJbGcxT3UreUNkZHUrM05kQk5yY01YMzk4WmxF?= =?utf-8?B?bGtmN1JpT2k3UWtTUDAvTUNMcFAyMTJLL0NBQlBYZlhWMCtnaFpNd0JWVXRh?= =?utf-8?B?NXZ5RGJTNTBROHluLzRXbWttN2lpb2M4UFNIUlRIWFRscTBoK3R4SzNxNldn?= =?utf-8?B?S3hOVzZScnB3cTZvdXJXWHh0Y0IyQTZybmxXejY1dG9oUysvNm5vbVVoOEdK?= =?utf-8?B?Mk96WXV0WFFtQzRRSXhIVEdWaE9TVmZpYnlBR0g0THpCais4OGNleWRqRWxn?= =?utf-8?B?Y3RzRTFxRW1XYy9IQXBWVm5jTnF4eXdNeDAwZUg2T0N3WFZ3TkhjQlJIVUFL?= =?utf-8?B?eU1kWkNXWWNnPT0=?= 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)(19092799006)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YllORGtMTkRIUHVBcWVHaHFIYmZ2T0tpY1hzMUszZHhSa29aRHc3UElnVmJC?= =?utf-8?B?STNNR3ptK2QvbmJOaFBnQ1ZaMkk4dlV1a2c2eVVjMVBUMTlrQVVyZ1liOGxN?= =?utf-8?B?cVNDWGUwOFdLdi91QjE5MHF6M0E1c01hSUdaaXBhQk91NFlCUnNtSDJ2bFJW?= =?utf-8?B?VU9FQVVueDFsdzFWNG9uTHhvSDZpNXNRU1U2Ynpkdk5oTVZLVEtxOFdaUENi?= =?utf-8?B?L2cyNUEvaXJDeTZFZGVZKy9Hblg1R0wwa1FqMUsyTFVvODlqS1Y0QjlVUStE?= =?utf-8?B?NWVGUEErNCtSR2JjOVd6WFpoL0JpOU9JemsrZURDKytWandYZ3FYaGVCcktj?= =?utf-8?B?SE5ndmVMYzRPNnYzNEtVVi9TWU43aVhZRWRmYmpUbVdiUHBJY2M0eDd0U21r?= =?utf-8?B?NndwVVo3bmFpMExTdnJlTWhZdjgzdUprdUxHYjlKNHVqUGZGclVPM0o1THhS?= =?utf-8?B?VmxDQnF2UHpUQy9sOTF1djhnb0Q0NlNKeC9TNkdwckFVMnBiVGVCR2FSK0tX?= =?utf-8?B?ditMTFVZK0doNk9TdmYxV2crSk5VYklsNXRFNnlUbmUzOVB4WUk3MzZScE1J?= =?utf-8?B?UzZ6cTBYMzZReWdOSU5SdFVXeGlHT2xoekFRMmZ3aEI1WDRpSldDODhFRnZy?= =?utf-8?B?blhBWktrQXVjbWFvTGs3Y3h2MituUVpPektzVjBvNysvdS94MVMwRGxzM29o?= =?utf-8?B?b0s3ZzJiWENESW5PcUdZOHRxSm52WUZMNzM5OGVmejluZXNDdnZZU3BDSnZI?= =?utf-8?B?MGx1QkNkUzlQZng1d1VOWFdWdmlQcmhIM0RQNmhUVFlkZEMvdXhvdFBhUHpl?= =?utf-8?B?Z1NtU1VJSXI1TDVIQnBkWHVOdS9QcmIwQlYrditvWmFmenRiWWZEc1BUZGdN?= =?utf-8?B?NG44bDFUV0hia2pJMDBnbThSSHNJQzhNTnI0TDQ4Qjh5eFF1UkxLVHJFaEVS?= =?utf-8?B?Skd3YysrREgxeWg1MW1OZTEzUTIxUW1TYUFwSVRSWW40NEdrUjFFZmVMMWJV?= =?utf-8?B?R25zeFk3em1pTEtmUUcxVTlvdHhZTmVhRCtFaHdkSVh5a0w1ZzVUVUQzUnNM?= =?utf-8?B?dG12S21qVUFPcVVPbXMyK0lCRlJubnFjczZMbkJZZWNnZURFQTkvU0JxYld2?= =?utf-8?B?YTN1Wk8rY1pSbjk0ZWxMc0J4QkwyMFg4RENnREUycm1SQkhSUFJsNU42a0hp?= =?utf-8?B?WUhUM0UxVHJmRi9XcEJVSzg2SmpuWkxXbDFUeEVKSFo0Si9mazNCak43N0h3?= =?utf-8?B?SUNnQi81dXlRVXpqSWFkY3A4L2JkYkFjdmJtbkRnOXZjWVNMd2RpdVhna1VR?= =?utf-8?B?R013OWR4SDBVMi9pZlpCb3Y3WWdVOVN1RXF5RDY0ZWdQSzRKVHA2ZWVEK050?= =?utf-8?B?VDdYditLeHA5b2lPWStyUzBUbk1LYU5aaDdCa3p2dk1aZmt3SmZrQ0hKVDV6?= =?utf-8?B?d3RSZzNtS0lwYml1YlA1QUF1WnhudHRaSU5tRU9EVXdJbnNvZm54OGlZL0ww?= =?utf-8?B?cDlhUnVxcUZqdGx5MHgzVC90TWFEWEJkUTkvek4xOHRqN2xIUTdMb3pXRTkz?= =?utf-8?B?VHYyTHhoZU43dlZVUWFXbHM0SllkRzdaZG1FTmtzcW5vdXdKUnpjSVJSOXh2?= =?utf-8?B?MjJ2eWYyeUx1VCs1cVU0cmc1RDNsbjlYaThiaGV1cWp0YjZ2UHYyKzdxUXNq?= =?utf-8?B?Nnh1M1RvV0hPU2xoUCszbDlNVUl0eitkMGZsOUhFLzJ6ZVExcVgzN09JNlBD?= =?utf-8?B?a2xBSDJDb3QxWjJGKy8wOVJ3b3RCQ1ZkOGs4K3VucVlNRXpiUHRqM29kTzg2?= =?utf-8?B?SEN4cGV2M2MyQk1FVXhqY0d5QnFaMXU1aGZvb2Q4blQzQkZ6SjBoVGNkcWZ4?= =?utf-8?B?K3V3T0NiVk1hbDhsV3VSdXZ0YzBndFRIZkNWTUxsYnlpN0dEeEpEczN6RUhi?= =?utf-8?B?cmpjdi9WUmRSOXB2bWN5a2tNL2M4TDVGbmErU3YvbmpRS21McTlXZ01na2h5?= =?utf-8?B?Z2xHZFAyNlR6MkMwTDVreFdxNUt2eWIwcHRBTnBkeTQzR1d4QWlUQm1SelY3?= =?utf-8?B?NUwza2dxVU5kWW0ybGR3Qjl1WkZKblVxdlg5U05sUWpIYTkrOFFvRGpmb0hl?= =?utf-8?Q?1PaRmzaoMyowf4L+JSdVIDWVL?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f1cbc369-6368-4440-3502-08ddf43221c5 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Sep 2025 08:30:31.0486 (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: VsKW4V5NnlAUSJSvPdZjwDtGDxdHn2nCPy7FyTewXK1ma5TaO0es6Yi2AFBKXKMSnT64/aMI7KuNKs5T9DqIGQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7181 Spread spectrum configuration is part of clock frequency settings, and its behavior can be validated similarly to assigned clock rates. Extend the existing KUnit tests for assigned-clock-rates to cover assigned-clock-sscs by reusing the test framework. Add new test device trees: - kunit_clk_assigned_sscs_null.dtso - kunit_clk_assigned_sscs_null_consumer.dtso - kunit_clk_assigned_sscs_without.dtso - kunit_clk_assigned_sscs_without_consumer.dtso - kunit_clk_assigned_sscs_zero.dtso - kunit_clk_assigned_sscs_zero_consumer.dtso These tests cover various invalid configurations of assigned-clock-sscs, ensuring robustness and consistent error handling, similar to the coverage provided for assigned-clock-rates. Co-developed-by: Brian Masney Signed-off-by: Brian Masney Signed-off-by: Peng Fan --- drivers/clk/Makefile | 6 + drivers/clk/clk_test.c | 121 +++++++++++++++++= +++- drivers/clk/kunit_clk_assigned_rates.h | 10 ++ drivers/clk/kunit_clk_assigned_rates_multiple.dtso | 6 + ...kunit_clk_assigned_rates_multiple_consumer.dtso | 6 + drivers/clk/kunit_clk_assigned_rates_one.dtso | 3 + .../clk/kunit_clk_assigned_rates_one_consumer.dtso | 3 + .../clk/kunit_clk_assigned_rates_u64_multiple.dtso | 6 + ...t_clk_assigned_rates_u64_multiple_consumer.dtso | 6 + drivers/clk/kunit_clk_assigned_rates_u64_one.dtso | 3 + .../kunit_clk_assigned_rates_u64_one_consumer.dtso | 3 + drivers/clk/kunit_clk_assigned_sscs_null.dtso | 16 +++ .../clk/kunit_clk_assigned_sscs_null_consumer.dtso | 20 ++++ drivers/clk/kunit_clk_assigned_sscs_without.dtso | 15 +++ .../kunit_clk_assigned_sscs_without_consumer.dtso | 19 ++++ drivers/clk/kunit_clk_assigned_sscs_zero.dtso | 12 ++ .../clk/kunit_clk_assigned_sscs_zero_consumer.dtso | 16 +++ 17 files changed, 268 insertions(+), 3 deletions(-) diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index 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_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 15:33:29 2025 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11011001.outbound.protection.outlook.com [52.101.65.1]) (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 4B2A52F0C64; Mon, 15 Sep 2025 08:30:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.65.1 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757925039; cv=fail; b=XrO3pk3TRI4Kn7qzSB0up3rua2mn91vBVkj8E/qwGsfZqqoxFjnfsb1EDqEZBdTO4rFLjJEGbKiTBk+aBjpHHC3vXle99cJymdi/2uf7lHI5RKQYyZN6h+eB/TAmCAG8aoKSStILA+XXKYgNduzcI6i7AuZuD9WKRZ+LozR4uzc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757925039; c=relaxed/simple; bh=/f/t/uvptCFsPsDbOruMFADsd8OrSPUdYLFUpJTxZ8M=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=Cah6SKlnqGon3aB3LQUhNybRO1s30RLOQEQvucOxikvDZABrOP/cnxvf9U85z0T7v1IfT/j/pu7OSbxLewa1aEN8V6FA5BLBCSmm4d43XrVnfVSEbhhe5ZsPo8GDCneVlTREiY7R4v97CNeBiG2mUigH8p7fCVKJ00r6EyrYcD8= 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=E9y3LOBt; arc=fail smtp.client-ip=52.101.65.1 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="E9y3LOBt" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WiogRlaRGPH9IPxUhNZS8QKeqXboA4nxBT0nhFXADhGnatt6LjywcmT/PAgQJDwVaRHqyjxIpL6JcIfaHX0Z0GWAafxIURSkYF+U04+WlLZkKLkxLShFSppdpch/b2CMolzDnoL464pab6ED47ASilGtts/RX1mifa1P/TxAutPEwAXN8x6nPoGwIq40002Z8nUX2i592gNnfdVJiRB+h1l6lsCalRGW+nKxsIsGZbOy97MoSaPR8+8xYbl2TaRthZhXOWzjNZlvMbh9ruTHIojmEjIDLWwev500JEh0oOz/PHDi2gn3YlEmQ3uOWCDDDxKnqqIhBwaqiW4PRnP5iw== 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=zPze5HJHX7nLOqtjGr+kcXBskQcbPfP+oJDXZ+leMrYidsCbSl8uicfzVoa1SqSW4CxbY4K43TGkENffThiBRr74HfQ1aEnFqq5OAO6tcl4SxhoANQHDWvDGOAuqprST0kv+75PpWswNh3uWM+Vh+UsOvuVd/BQXeBBUdTHTimaCs7UAWybdfQKlSTWWEknNfDLDLkUmz9yjcq+A9ZHfwgPRXcZJfHEbbUoupg6RL5ATeDEPR0Nus7NWzf6sQ6XITZxm1d6NvKZQohrXE/quay8uFRw+6wlnp6TaQMvRbuttzn1QpMWRuQZTacX3wFy5lnRX5oU6WCf4NZLjbdEoZg== 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=E9y3LOBtsok/TLpr9sFx84rCC7ut0InbNS7cF5a3eC+TwBavWeKlmAfVD2xTDHNG8O1aqSSM8pk51H+vsA4fPrkfo+27tpsCMqslVR4Kbn5pWlgApMe9eao2ikaKQCS9FkxbB+9Yjfs+v61hTmmTx+KVVqEZxajyR1j0JcoUEa5v9/+T3MQH/KLmu6hwM+n9sz9vkjdH3FZz8aTT4qmUVrlgwa+GH+DvCL+NtMW6eJ2/AEmXX7jg2KaMUPgdsYQ509GkenGrS+33taeVaE7FCI9wm5QMFmNE1XRmIl9gtiJvBSNXzSBACJ/DsGELV16/kiReVAT2NQVoO4FfbacdDQ== 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 VI1PR04MB7181.eurprd04.prod.outlook.com (2603:10a6:800:12a::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9137.11; Mon, 15 Sep 2025 08:30:35 +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.9137.010; Mon, 15 Sep 2025 08:30:35 +0000 From: Peng Fan Date: Mon, 15 Sep 2025 16:29:39 +0800 Subject: [PATCH v4 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: <20250915-clk-ssc-version1-v4-5-5a2cee2f0351@nxp.com> References: <20250915-clk-ssc-version1-v4-0-5a2cee2f0351@nxp.com> In-Reply-To: <20250915-clk-ssc-version1-v4-0-5a2cee2f0351@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=1757925004; l=6023; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=/f/t/uvptCFsPsDbOruMFADsd8OrSPUdYLFUpJTxZ8M=; b=gIXahYYYynJk3KpjZj+JqdZuxsiIzKms0S5QI7cjes9KG5LBE/CL+EAHbooqJDt95kTlwwPnA yQQ6Uvkxsb1Bak7ETAnE9cirD2Pd1BAZvEEkWLO/kRaOMxpyojxAkFl X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SG2PR01CA0115.apcprd01.prod.exchangelabs.com (2603:1096:4:40::19) 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_|VI1PR04MB7181:EE_ X-MS-Office365-Filtering-Correlation-Id: 6d15b8ee-bdcb-4026-98c3-08ddf43224a5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|19092799006|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?bTZZUWh0cGF2UUZTdTRGZVFVWHBYNGg4UWtFd05CbVRURDdSQ29abTFSWTFH?= =?utf-8?B?Zm54U2o0MlBjMnpYQ2FYNnhHd3FpUXlpOXNobG1pU0N2ckZsZENLQUNpK3Ro?= =?utf-8?B?Q1lCWHIwaXdoL25OZmJ6L2RobVVrMXQzYUUvK1YxeGpCcXRYckhwT0dkS0Vp?= =?utf-8?B?VGdvTDNoWStCLzVWQXdKL0RwdkhubWJXMzl6ZDdkczFaaGZOTGZuMjVLNk5w?= =?utf-8?B?QlRZdXBsaHg0YnkvNnh0eEQ1MFQzM3JqZlBYanNSVkMzbVFsbk5yMTVCa3hL?= =?utf-8?B?L1Y0a1BXS0szYlNVRForTHNJOTdTK2F3MEE2c1dldUpBampJZnF4K2RKQkRo?= =?utf-8?B?a1loTzlkams4RVRVbUF3bmNsV2dES3JpSDluT2Zqb3JYbmRkTkpoQ2hRcFRY?= =?utf-8?B?VjUzeUc5RVovZW9Xa1NXYWNsOXBtblV5ZGg3WElSUU5aWWR0MHVyekRmLzBr?= =?utf-8?B?QUxTYVBtOUppVGJlRFg2OTV5RFJ1ejUveUNBcXpVTmFiNWdOV2FGNW42UUll?= =?utf-8?B?RStjdlJyTXdySWY0UEFGMmtyb0dQVXExemVFZDhiUzAxSDRkTVpoYnRwdUJB?= =?utf-8?B?RkdNRG9pM3BkRmJyVUhab0grM3NyZnhvR05BRVNzMExBOUg0UTFtUktoTVVW?= =?utf-8?B?L1NSUGJ5QmJvb2k1eEFocjVFTUxnaXAvSGNrSjllRnQ0djgxMlNIWjZadnVq?= =?utf-8?B?R0Fha1Fpb2trVFhwd1ZOVlNxblhpRHFIY3dYZXByOVNVMjZEclVIR0M3Ni9w?= =?utf-8?B?TExEbDg2Z2Zoam12M3VSZTY0SUoweVJHVldvQzAra0FzNURMbllwc3dKVWF1?= =?utf-8?B?Yk15YWZySXNzKzVMVFUxSEJlSzcrT29mS0kvTFNEVkFiaHZSTEFXVHhlTjYy?= =?utf-8?B?T3pwMG9wcWVUZ05RQ1F4ODhzcWdVYW5kd3I5UjNoQzFiclk3bVVKVFpJVjE4?= =?utf-8?B?elJBWEYvMW5lQkJKTFd0cFYvSEhEUHdVVmdFcXNFZyt0WWNZTEE3ZC9qV1Bz?= =?utf-8?B?THRjSkw5K2R5ODAxVm1pNEFGS1ZJNzZBUHZ2SkpLdDhQNDJGWFg1dGZQSEww?= =?utf-8?B?MmUrYm93QVlDNzNxaklBNzNZZExKZjFJMStRTTFWQU1CL0dHL1lzUUNjUjF1?= =?utf-8?B?b0xjZ09vaGZ3WDh1Z0o5N1JwcTZiS3BlcDJIZWx2NWV1Si9wdTZZeXY5L211?= =?utf-8?B?WVQya3JHcXcwNjFWbVNDV0FHUWluNWRkTlo3MjV4TmtnYkd0WTh2dThxQ3V6?= =?utf-8?B?bUxjRTl6WXZPZmp4UlZlOE13dzlWb3JxWDVyTVlDY3VzMERkeSt1dWw2THZC?= =?utf-8?B?eVU3ZTN4NWhicENmbi9XOVpPZnVISkFGY0VVUlBTbkhWS1NySVlyOGk5akJV?= =?utf-8?B?S054U0FFdmJrNExvbFlSTkoyY3hKYkVPNXR0UEdRNXlKSXkyRTRvandGV05V?= =?utf-8?B?NUE1YWQ0QXdsclJQY0lYeEMzZ0JGOWk1RHIzV05DVVgyVlBLSWdUak1kVkp5?= =?utf-8?B?ck8vSXhNNlhBSitITkNlSkVwNDFQem9Qb0xveXVXaWNMT25hM1FTUFlUMzBz?= =?utf-8?B?NEhmTDkyYmVwOFE5VW90RElwK1M4WWxpRW1LOXU3Umx6WWM1NHZDZ3h5U1VN?= =?utf-8?B?M2V6SFhsMytpczJxU2FWd2llVVQ4cjJNWnI4NGpPMUY2ZVdNWXlLNzdqWjVj?= =?utf-8?B?ckh5czNXbGQ2ZEU3MWV3NG1FYlFZaWtkeWVKRE1HYXlWc2JMeEtWR2RNQ1RM?= =?utf-8?B?c2lTZ0gzN0JlVVZ4V05XZDdtYnFkemNQdGs3UE9KZGV5SDMxS2oyblhLeTJx?= =?utf-8?B?Q1NoQWRkSGxqWGhjQ2xsRko2Mk5ZSEpqOERPOVlkZXlXRW5pZzBNUG5ndnVH?= =?utf-8?B?R1EyWkRzSmZ1WU40R3VRWHZ0SkpPVjhWTURyOHRIVEQxbWEvclpwQ3IzYXRa?= =?utf-8?B?RVZlS0gyZEFoMlBheW5hbHZXRlljZlJLTExMaEs3TitEa3RIck9iWXpkZWFK?= =?utf-8?B?WUZvaUNqY053PT0=?= 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)(19092799006)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a1RrWkRMckcyNUQzaVh4Y0cwSnF2dmtWUU9nSkxNRjJVUDZxZ3doYkJKR0VC?= =?utf-8?B?akNPTnY2N1VIZWJ1aWVNLzNNcG5PVkRnWVExYlhwWXlRV2wzTTRIMmpEb1Vr?= =?utf-8?B?T1lFRUY1bG9vb0xMRkEyZVN3VHZyUXNESElOZFNiOXc3OUtWd2oyTUQ3VmlU?= =?utf-8?B?K0tHU1VtcmYrUGhpYWJpSjFHV1l6eENpdE90VDBNTy9aWHFHbW5IQ3R3UEFN?= =?utf-8?B?R3BzcFZHQmRpZVB4bXQ5VGVLVTZKaHhvTUFYU1ZkbWtvZ1B2N3R2SXBKb3ZB?= =?utf-8?B?VUxwZjZHSytLT3MxSmt3VkxRbGdPcTJjb0I5YUtjdUlTUnpaUkhzMlF2aStP?= =?utf-8?B?NnJHc1E2aitBUk5jTWdMcUdYNVYvZzdVOUQ3cDhWUVJxb0V6dEZTMjJMZ21C?= =?utf-8?B?VG92b3NmK1hNUUErRnU2em9YbFV4WHNyWFRSMzRXeVkvVVpLTVF6VUoyelFS?= =?utf-8?B?K0Q1bnFQQ0JzZThEeDJ5bllUeHZid2hhT205NUhaT1RNaVI3VjBuYllJSkVm?= =?utf-8?B?VGp4Q3crMkROR3Ird0gwYnRnazlKUDRZUW1iMm1nUWdOSzF1TWdpODJJME5O?= =?utf-8?B?N3JLcGltTm9qVDNSUXNqN0hoaGV1YjVYRWRYTHg2SkVBSzZZYjdIRGVudU9W?= =?utf-8?B?aGNrOXo0U1o2Q05jUzZmL0pQdTNkQm80Y2MreFczbkIvSWhSSHhpRkZmT0F5?= =?utf-8?B?U3B1VDFtQkYzcFFjR0hZY0FCcFYwOVExTUNiR1Rxa2pnYzFvWlpMZ3pXT1dJ?= =?utf-8?B?eG1kQktncG85RlVBbCtZTnBEUDhXS2hzR3pFY0JtYkJYdnNRbWxaZGZNa1ZW?= =?utf-8?B?Y21PM0N3TVZDWWJRWFdqcm1ERXd6Qi8wVGNCUUxPZCtRYUhYRnhaakdMcWpo?= =?utf-8?B?YnFiaHdzaHJFRUJGSmxjQnhsWnJ3aGtTS1ZOVE52YlhDY2FNSGNtWWNFdVYz?= =?utf-8?B?cE9IcSs1dDRtd0FwZncrZkZUNEcwbWJWZEFMWDJiRzdUaTNZRHFJOXllOGpn?= =?utf-8?B?a3N5UWhBMXpjT0o5QVpEakZoWGdzVDNrYlJyNHlPbm1UQWFYemlBZlFvaTln?= =?utf-8?B?QXptM21Xa3BjYm1TaTl3VVlsYTA4UmJFMFpWeXk2dTdnbnBsVGtHYlAyRitP?= =?utf-8?B?dmZvOXVPQ1ZhenZWVURjSkVTbWIyQUtrekVHN0cvYXh2NVFpVVV6WnZwTUN4?= =?utf-8?B?eDhYcTJUUTlJUHo4QmhWOEJFWVJMNmI5UDQ0Z25QYmVoWlZUTkxZQTBmSWNH?= =?utf-8?B?bnZxRisrdnhMcWJzRTdIWG9ZNmxTcy9rOGlyTzJPTjZYeXU0V2Mvd2RMc1JD?= =?utf-8?B?ZUdkUCs4U212MXNVa255WlhsMVUyUm9NUzNxOGllbnNNR2xkcHJVTkxHU3or?= =?utf-8?B?Vk03NEIzNzExeW5FWXQwRmlvVC9jRng4THk2bkROSDNNWUdncWlhVk1lUS9w?= =?utf-8?B?WGo4OGwxTGlFSUFQOVA1TXdkU2NvWDA5QUx0NjdjenV5S2thQ0VPdmJJNTlJ?= =?utf-8?B?RHU1djhFTGVjRE9jcGp0MmVHS2pXTE9BN1N5MXVLNGh2MmdVdkdpVmNSMWIw?= =?utf-8?B?bjlYcCtBQzh3R3drMVM0cllMZ2MxNUYxaFROZjQwWFJKdEZwZTFlYmgxK0hy?= =?utf-8?B?Qk9wNmh0RVpSUitOanRlVko3SkU4UFJndDc3NVJDU2VWQy9RWGRxSGlzY21q?= =?utf-8?B?dXFjQS9hblAyWUs5cmRJL0g4Y0Q3M1paeDVrVm1SWThsdXlPSFUxVnh4Z215?= =?utf-8?B?bHNQZjYzZ2UxWGxLUTlKTDRBT09oQzI0VFpNczJJNy9zY3dPOU1kQThJMlFx?= =?utf-8?B?RE9sRlE3VFp1cmJWcUZhT2hndDliZkxRM0VITHdhQWQ0Y2xrTmdqT1BLMldt?= =?utf-8?B?SVVjTHZkeWFxQzludENvYkZ4RzdiZnV2bVNqQWFoUkl5QkZaY011UlpiSnMx?= =?utf-8?B?ZE44eGhvaUZxS29rMzZXUStNZmcrTERXUXI3S1FiQ0RKSTk1NkNlUEQ4UWs4?= =?utf-8?B?aHJFT2JaWWpHRnIyT1Z4ZU1JazgrWGJKR2t0Wjk2NzJLZVBLNjAwR25FVU8v?= =?utf-8?B?dnNIWFZNNGs0bDRodGdZTTFsdThNWTQ4N1pLZkUwb3VMelRkeWZnbTI3VHFE?= =?utf-8?Q?H+wAu+M408yINbtgyooKt78rJ?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6d15b8ee-bdcb-4026-98c3-08ddf43224a5 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Sep 2025 08:30:35.8333 (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: zclcZ5km4SW1ciS7j2a1Rxv4N5XK/jkSOC4qm+HXFHDD8onpBLX2hZYNvKPAte8swL/EEdsn/WkudUHz36Hemw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB7181 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