From nobody Sat Oct 4 22:36:15 2025 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010049.outbound.protection.outlook.com [52.101.84.49]) (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 3B1B11885AB; Tue, 12 Aug 2025 12:18:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.49 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755001121; cv=fail; b=KOIueB/8XFBeqvxvA8gJj3J+8gx/oR/45MixcYPLWBXJrywYRS8wRxCzg4v8sZDMQ9hV73kUHALormGZZBGeSEZujR/aWnpeuaZDNA+s2aDaLA9EBVOu/SahxHeQhH5hVmTPmJPS895dlgnPKpTQvHI6UD3SN/cigW0Kp6KzdXU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755001121; c=relaxed/simple; bh=TbdfWP3CABeqSSuYuCbRtWmGB/XyUv+EAsmAwnE84lY=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ShwvfVrW2ZnbId3iAMTmLhFNy8s2i77nCasbFWx1UP8fWeYmD3o0FvHL5JYh2LAJUb54Q8dAYzwtq5ybl/w6CLz4VVTrW5IyGZcLFsQWaljxrlXMu51RKRvvHHGtFBIkZPH9MCyP2EL9PCErrQf0mjy3hnlGXS9BbSMmFs11DyI= 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=UwNtQSAr; arc=fail smtp.client-ip=52.101.84.49 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="UwNtQSAr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=x47T2DlFZrUlDE6izu+JrJ/PYo0rSWnSb+9RTTgrf21bTX6GXuluPI3h3ipQwZ1UK775lCrhJ3Y2zy7+Iv7U7BTwCX3e2Z4IuZuxwI6qY7nPVyH8l0zzKD0PQGXDAkP7trJukBUuCrql1G6GleUxCsIhws6dRb2bw+z3o1KmwcUmHR2iEzwE3TvxvUo6boyKy8v+C4QCqOqJGp+ug2DGMAL2tileTZQ7jOWojj/IyLcqsMtegWjrn5jNlzuIVyKpCqVIb0kSq4YFBB7n45Vgjwb/anLgFBmuaS39GdPCwa5E/Ebe1/g3+pQBT3RkgdbzfH8Q+kOhWOMYdhlPWiYaXQ== 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=FOJlceSj9mAlegOUIEuhaGW9d/dp0W56x5pRLXEMOII=; b=C4TXHUxf9WLs2qZVGhi2TDNBpCWBOaCSu2ZI4P3Ku6OUchlx79jP14Qws3tEF+pBQ0lmkEUNlrybrPnh2G/6Ws+F7fVE8qs8t+hQJU6XsDSo+gw2nfieELBuvI7JPhzdYhV3RF2UnI9aWmBzkETn7ZRub1AaXTKfegyH7axh68fT703swCPuWB96v7gmN0ndvutzhnD0l6IoV42pIyReJVcw9NpB47RionfXpW+d6ZC4Dr/QC6Lk75rUJ4E/BR5UtjRcj9di/xqdNXh4jnS2mQGBUKfoXCIZmhGI7Gtd9cTc400fMrx9x9ax962XhTKxAj52q56u2UAJGWlZqfh6OQ== 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=FOJlceSj9mAlegOUIEuhaGW9d/dp0W56x5pRLXEMOII=; b=UwNtQSArx+fCcWpA7nA3PK1/Oz4zGVTfKMA3Tc08Q0MNKdAQxZi5mXRg2rrh+HLjAJJTO932N0cxvA2gsoq2lxf372u9j5Bco9m3VWPdxLYMHmL7ZgkeSHYY5y840QCaQpmUl2mK82hsNjdbFccgp+huT82LY4gNbbyM7A10hanCh7ZR2UVkDxgktrq0A8MRgFGy1whLyqUj6lIo8ewUlwGLhD2Cjng4pqJn7BTK11NIHvJ9Ew2FWS220oSgZLAhHQ8noj+HswE+7zzSivHwo5e+LsTL2ymzYq2Vsp5DyUw8aQmii885vWo4LVYdFyIyWYmwEEYOXzo8n1KtLWJ3aQ== 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 DBBPR04MB7721.eurprd04.prod.outlook.com (2603:10a6:10:1f6::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9031.13; Tue, 12 Aug 2025 12:18:37 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%7]) with mapi id 15.20.9031.012; Tue, 12 Aug 2025 12:18:37 +0000 From: Peng Fan Date: Tue, 12 Aug 2025 20:17:05 +0800 Subject: [PATCH 1/3] clk: Introduce clk_hw_set_spread_spectrum Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250812-clk-ssc-version1-v1-1-cef60f20d770@nxp.com> References: <20250812-clk-ssc-version1-v1-0-cef60f20d770@nxp.com> In-Reply-To: <20250812-clk-ssc-version1-v1-0-cef60f20d770@nxp.com> To: Michael Turquette , Stephen Boyd , Sudeep Holla , Cristian Marussi , Marco Felsch Cc: Geert Uytterhoeven , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1755001109; l=3904; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=TbdfWP3CABeqSSuYuCbRtWmGB/XyUv+EAsmAwnE84lY=; b=xDDoo3ycp158kxQAGmAw58CrldaAPgn0YZwyhuQ+EPF9aUFz/KeilxHt4GfeHMHIMShVxxq1k FZfMrBhZhWaBnTrPXYjXLS227Yw3QSmf7HaBGF6YEk71EBNla9Pgkad X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SG2PR03CA0103.apcprd03.prod.outlook.com (2603:1096:4:7c::31) 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_|DBBPR04MB7721:EE_ X-MS-Office365-Filtering-Correlation-Id: ced1c75a-0485-4d01-a75c-08ddd99a5d86 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|19092799006|366016|7416014|376014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?bUVkTWl3SWZGY0lLR3pMekJPelM0ckxuVEdFMGJtaWxjNy9iei94QVdsN0da?= =?utf-8?B?TnFNVHVTOTVFYnkwY2xsTloxMFh6T3lQcEdJZlMrZ1VHY0hiaXM2R1JsVDBn?= =?utf-8?B?OHNCMHVpTXg1VkdPRysyZkRENWpZeVhqQmhkOGkzcFlMR2V0M21nT3R2NUxK?= =?utf-8?B?MDVWQzZZT1A0Qlc2SnhyYzUvVjlBZkd4cVEvMFdVajlZRWhvSzVJQTljV2ht?= =?utf-8?B?N3VPMjg5Y0FCYko2Qy9RbjMvSnJSSGQ0SjJ1dmc1QWs4Uk5USVdKcitCNzFJ?= =?utf-8?B?cklUVmt0emp5WEtnM0Rqc2dCSTlYS2J3b3lhNW0rZ0pvNmoyVThRWmUwbHlX?= =?utf-8?B?c0owK3g2aUJjSkJJS2lhOStvVXVaK3BLQzNocWQ4TWxneEJRNnJtMEhQaFBH?= =?utf-8?B?TXhOZ2psNlJNVVNIRHl1b2JaWEhDQXovem9MUHRVb09kSmJVNTR1WTVaci9z?= =?utf-8?B?WTdIRWhjT3d0aGx5QTlIaEUxVHlZQVEwODNBVitnclN3cFdBTnRhR0FSYlov?= =?utf-8?B?T2l6dElMOUNoQzFoaHgxekVDbkZ0UmloZVFBZy9zdWVwZGYzbjExdTNzZXVQ?= =?utf-8?B?Y0pTN0JYNVpTaHUxR3pVZURLYUZKbzFrdUxyRDZQSXRkT3FIMjhicytwbUsz?= =?utf-8?B?d3EzMVg1MHM5UGtGbDZleHRzclQ3TU1IZzl4T1ZqSWNhOWxaaHRoZkZISVg5?= =?utf-8?B?Q0NQdE9FUW40R1UvMXNyckRqN2lOSUJUZ3pVUXhiblB1U1E0SWZlYVE0alNU?= =?utf-8?B?V2krT1lBUEUrZW5vRC9Ic1lqUUJoQ3ZEblRXWHRYYTdmck1ycUxCRmVzem10?= =?utf-8?B?VFBqSlNzeE5WSTNzZjdLZjJGMUpoeXBjbTNpYTBZSVVVb1pWRVRnTTFFMkZP?= =?utf-8?B?dS9iQmVtaXBSL0R6SElGUG5mVjdmMXNnSmo2TmNma2FvSWdrWjRnZHFDLzc5?= =?utf-8?B?NDNVYlcyOTUvK0Q3TVNuM2cvUVcyMHF2dzJiYjZTc0doUTlCMHZ6S2lNSk5U?= =?utf-8?B?Rm1zZG9HRlc4LzR1ZUFXRVF2aDZWeTMxUnhPOWdpVWlLaEdhMjlIODZ3b0dV?= =?utf-8?B?Zy8vZ3RMcGR6RkZrUjhuOUhEMFRXSGdMSExGUnQ5bmZmR3cxOVRYa0RaVGta?= =?utf-8?B?M1ZQOVFWVERsNlBwYkZ1REpjZDU1Wi82UnJwajIyRDl6dUYvOW95VUU5dU1F?= =?utf-8?B?SWQ4OTVyZ0tPUHVrbVhldHBDU250Ui95V0NicTNrQ2FkMExIa28wQ2dWanV3?= =?utf-8?B?dnNjV0JlcWpSQVpZUWlEa2Y3VkpXZ0g5aGg3S3F2S1BIdDVwekdsQlRWTEpx?= =?utf-8?B?aFJFQStvby92S0JSMkc4MndsWkc3SlA2eU9UazcrOFhRRkVpVm8rV0tSOThJ?= =?utf-8?B?cFg0NXUxb1ZFQ2FyZVloeHZNOUlkWFVpQzNYcVVlQllEL05TS204NXJseTlB?= =?utf-8?B?d0JQdWp4c0xHOGdJZWRmclBKYkJvV0wwQWVDcHhrTzlQY04wVTU2dXhXdXlx?= =?utf-8?B?bmtrSDg3SllabE9ROEh1M1lJVmtXeUtDM01VODYvVjdIUFhSMENVQytEM21E?= =?utf-8?B?NGRxWWdXQzk3NVNpbGQwRk5sUmVBajJ5Tk1TanpmWFEvMm9BTjdmdG5EMVBx?= =?utf-8?B?UkVqWHBMcFdmSVBjUmlCS09tQStjNWphVHFHbW5rZE9IanBQVXdHQWVzM25E?= =?utf-8?B?NDBvRHJkZzFjeWVIOEJNZ3BSK01UWDBCMDI1bTVsVjhUeHh2TWJUWXVNMndj?= =?utf-8?B?anFBbytTWHFqa0J1TFZ0eUQzWk9iaHlUZzl3VVBuSlBieisrd2kraVYxS3RG?= =?utf-8?B?Sm5YUVV5V0hHYndUbmdaZGpCT3hwdEZLOWpkdEwrZVZxTUJsS2s0UmUvZEc1?= =?utf-8?B?cGlCbkdOclYzbUlsbTg1Z0U0MVNTWmljVUdRa2d0bWMwaFBtdnZuNzllNHBC?= =?utf-8?B?K2RKbE5LWGlLd2pzMWpHemJScUxidTN1OUhvaFByQmt4R2dveXZ0K1RobW9H?= =?utf-8?B?NzdlZmpXaHF3PT0=?= 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)(19092799006)(366016)(7416014)(376014)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ellEQ0tmOEdWNkpYUms3anpYN0loanFHc0JMd0hJOTVXeGxGUm1Bbi94SmtR?= =?utf-8?B?Y1paOVVvMFY2azZPbHF0VDlGODYwWjRkY3BGcnp0aUhaNURYSUVJN3k2cytE?= =?utf-8?B?dGZqczNLUWpIdGgrM1BJNUt1bmtiWmsxa3pma0JZUkwzY1Q2TVhkSzVXTllG?= =?utf-8?B?TFlwaVVoYlBsSlJNc0xIYUVobVM0ditVN1FYL3ZwSkJ1QWhZNUlOUEpyR3lm?= =?utf-8?B?anVOZm0rTm9sOFVZT2hnZHM3U0NRWXJjbUwyalp0NUUrMXJtTS9jVjB4QUEv?= =?utf-8?B?dWhVdHRndFZydll1U1pDdjBIQ0c2ejlPTW5EdmtjQk1mUU1jTUJ3S0pLSjlw?= =?utf-8?B?QVFRMUVqY3lURWxqWEJtU3YzY2ZmSUtoVU1kS2xTU25oQjIxa1BXTG9MQThC?= =?utf-8?B?L0lTSEZURE5OQlJSdzlzNlpLRDM3TXBkeXFJRkdOTjh5SUFaeGw5dm80VEQ1?= =?utf-8?B?V0NkeDdFVUpzRG1vaHdEWFp0MWQ4cVhmZVBvVWhZZGkzRVdXcXNVeE1hM0Np?= =?utf-8?B?dTJsS3JnUmNxVWhHU2RickdYRTQ5RnRlaW5KOGJpMEtWc3ZxWWRnNDczeVVC?= =?utf-8?B?M2tkNElBRTkvUFI1dHNLQjBOVXhzVFM0YUg0Z3BVT2Zibno5YW01OVdseGpa?= =?utf-8?B?WHBkYTBIZmpXWjJrNWZKbGxtWEtqQVR3TjZ0Rkw5VHFzZFZYU2QzQjVDWTRy?= =?utf-8?B?YVdOQzJsSkNmSE9KL042TFhnckswT2p5RUt2eldMSEV2VkNYbm5Ec0tuQ01T?= =?utf-8?B?NDFGbkpkdDhZc3kxY3QrQmEvUWZrT1VXMEN2d3lwbndwZ2FGdGM5RXFjQkpP?= =?utf-8?B?VkFGYkRSL3RBQzFIcC9uU20rWlI5aThHNXVFSC9sOGFOdzhiYVFIcUgyUnlr?= =?utf-8?B?WkZIcHR5SFU5YXpWbEhoVFppaXN4RHl6RDVEQjlpZloxZG9JRVQ3M3BtdFhr?= =?utf-8?B?TjJuajFSS01QeXB5TnBZcXpuSWUxc2RLejI4eVJvM1lOZTBLQ3dlMnkrdU11?= =?utf-8?B?VjYxc2VNUHR0S3N0ZU00MmtoOEJVbGZlMzBVMFA4eE5ITGNJdEVPRmwxVDZK?= =?utf-8?B?SFhJdG9ESHNQYjdtRUNqbUpQRmk2eDRSdC9zbnMzdUJld1ZCQk1lbnB2VUha?= =?utf-8?B?RlE4aE4vOUJMb3Q3R05hQkgwU2c1MGd1amdDOFRVdWV1YlhwWVc1dmRuTEtn?= =?utf-8?B?d0I4V3J0N1ZicGhOUEVrT0lxeWdlTmsyZFM1T09BZDBHT1hWQmNwV1d1bDN4?= =?utf-8?B?Y1oyeTFmNGJ1WTNvWFI4SGxsMm9vUFM1WWVvQjgrelRVOHRFaFJReFBPRkFi?= =?utf-8?B?cU1IaWhCYUJEK2xDRldQcmFOaFJ1dGR0eDZWRnVYSVpBWlNiYjBHRkFuOXUr?= =?utf-8?B?Sm1RUEZsQUVEbXByWTI1L0lBcFRzRDVEUjlCYkVNV0p2c3VYYkJqdDY2eVdn?= =?utf-8?B?T2cvU21RSHp2YmJ4YkRabEIrSUZLUVlhbXFjZko5NG93UUxtMy9CY3UzQUtU?= =?utf-8?B?Qkl4aEtpUFNqMUZYTUszM1haY1I3OU9CSTZ6VjF5ZlNESFIzN2Rwb1Y0S21X?= =?utf-8?B?ZVQrQ0JtL1FQZG1YTjhkR01IdGp5bVZzczE1M0MwMWhqT1YzSmFMZXVYWS83?= =?utf-8?B?dXN3bXBGeFh2VFh1VTFRQkk1VXgxWlNkYUxRcFhXOFAzcDNKRkJreS90am1X?= =?utf-8?B?WHFUN09zdk0vTFlmUzcwNnBoZkJ4TEdrWDNhVXNLWExzZU82dU5vdlhZWnA2?= =?utf-8?B?clZTKzlUUDQ4bmd1U00vY3FrVVRrUEdRNE1DRXZmUjhFc3djdE1ubFlNWTVE?= =?utf-8?B?ZUVqS1dYRlU5QytVaStLd3MyL0Z3MHpsNTVlbFo3TENuNERVZ2lCWWdOaEpP?= =?utf-8?B?NnBaVWQvL1FBVXVXMmZ2MWxJTEhCYWdUVFFFcitVYUFEcUFJMTJndjFiaWEz?= =?utf-8?B?eHJKanZYR2FzeUR4Q0xucjJzV2M4R3hNVUZpRzFmYTF5MkNBaXpKdDJjZzBH?= =?utf-8?B?eklCNlhlNWNNVTJ4VEF5U0w0S3ZPd1NqVHFsMXJKSFVSRDlhYUFmOHFFR29p?= =?utf-8?B?VGkxc3pNRjFoaS9LMHVpTTlrbjR5bHVMbTYrNnBOdjhaRE5qTm9md0VLcGNL?= =?utf-8?Q?3EBlY0ehGxMmHk+asvCAmbcC4?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: ced1c75a-0485-4d01-a75c-08ddd99a5d86 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Aug 2025 12:18:37.4871 (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: XRwYKHYrcML367LZrzAgHZl9+bGksPfRSDK29dDHBqLLgjRxu0J81H+fNqumRTWwg7A7rmAi5rSNsyA1NgwBWg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB7721 Add clk_hw_set_spread_spectrum to configure a clock to enable spread spectrum feature. set_spread_spectrum ops is added for clk drivers to have their own hardware specific implementation. Signed-off-by: Peng Fan --- drivers/clk/clk.c | 32 ++++++++++++++++++++++++++++++++ include/linux/clk-provider.h | 29 +++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index b821b2cdb155331c85fafbd2fac8ab3703a08e4d..48c7a301b72b30fd824dae7ada2= c44ee84d40867 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -2802,6 +2802,38 @@ 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, unsigned int modfreq_hz, + unsigned int spread_bp, unsigned int method) +{ + struct clk_spread_spectrum clk_ss; + struct clk_core *core; + int ret; + + if (!hw) + return 0; + + core =3D hw->core; + + clk_ss.modfreq_hz =3D modfreq_hz; + clk_ss.spread_bp =3D spread_bp; + clk_ss.method =3D method; + + 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, &clk_ss); + + 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..2b6cebe8b12268f537b3c92aa0b= badea601f0eb0 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -84,6 +84,26 @@ struct clk_duty { unsigned int den; }; =20 +enum clk_ssc_method { + CLK_SSC_NO_SPREAD, + CLK_SSC_CENTER_SPREAD, + CLK_SSC_UP_SPREAD, + CLK_SSC_DOWN_SPREAD, +}; + +/** + * struct clk_spread_spectrum - Structure encoding spread spectrum of a cl= ock + * + * @modfreq_hz: Modulation frequency + * @spread_bp: Modulation percent in permyriad + * @method: Modulation method + */ +struct clk_spread_spectrum { + unsigned int modfreq_hz; + unsigned int spread_bp; + enum clk_ssc_method method; +}; + /** * struct clk_ops - Callback operations for hardware clocks; these are to * be provided by the clock implementation, and will be called by drivers @@ -178,6 +198,11 @@ struct clk_duty { * separately via calls to .set_parent and .set_rate. * Returns 0 on success, -EERROR otherwise. * + * @set_spread_spectrum: Configure the modulation frequency, modulation pe= rcentage + * and method. This callback is optional for clocks that does not + * support spread spectrum feature or no need to enable this feature. + * 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 +280,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 +1457,8 @@ void clk_hw_get_rate_range(struct clk_hw *hw, unsigne= d long *min_rate, unsigned long *max_rate); void clk_hw_set_rate_range(struct clk_hw *hw, unsigned long min_rate, unsigned long max_rate); +int clk_hw_set_spread_spectrum(struct clk_hw *hw, unsigned int modfreq_hz, + unsigned int spread_bp, unsigned int method); =20 static inline void __clk_hw_set_clk(struct clk_hw *dst, struct clk_hw *src) { --=20 2.37.1 From nobody Sat Oct 4 22:36:15 2025 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010036.outbound.protection.outlook.com [52.101.84.36]) (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 7910515990C; Tue, 12 Aug 2025 12:18:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.36 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755001126; cv=fail; b=DuC3wOHu873vehi+U6njyFTdsgyWii9Xjugli/h2XKQ2tvIaFZdn/NPnufO+SAwN2aSxq5Ro3IkHWbshXzzPJSYi+mDKlb59Q7Mp6NyNLMUun6Qu4ZK0A62zuevcY5zwOowcMhGjJenBUG2RL7SuRvD3N2ClwUaSrnzM8LpKaJ8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755001126; c=relaxed/simple; bh=6UoxghPDjT+22Ly1P0RQ6l342s392q0vWuGY6rqK9SM=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=DCfAtSNM1fBDd9uReP/4+GvU37GQoIEwqL5draPPMQFD3xDsPfuPRPeySzj4Y5uznBUHGN9wLpPbl+aHyh3myHdUc1xAKkE9ojJQkNfak+Ufn0VECN8Dxm9LiXXZh1CpDx3SRy6qYEiKtCfy5wYV12ezHeTsjPga3LFivgxQpzA= 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=fwWBSdbY; arc=fail smtp.client-ip=52.101.84.36 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="fwWBSdbY" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EvaGR1Ex72unkGTpRGljgC2lx/I4VE+m1kyJ/yPRA4SljoxyxSoU5iP/TiSX4XQCZM4EeRMdjLPF1rIhdve1WEgG6c3ECHmZnTPWxYHvO73+kXPQNWyjQqJKlXJEp0M6w0DKkT+/QXDaoGlRM5U17PM+r3isnH3+iE/kw/8wyVRZcARZOTEUDdcZdHnEQv7ty+g149MAlox97AA4JzHW9zuAy6ZNr4PB4LS7mKW2n5tQU7t79hg9ceLrFdQJZy2P4lCRwkQxR8uOUIUz7AAwhkzbfzKy8S/x3CLHdlnH7lG8kePIjzCO6KIKfA1kFhaaLIUmouN7NIsKAPcwCtmIdA== 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=1msI7nyoVah6bDY9mQXOwQ2TB5aUsQi50ELaJ7l6n20=; b=jC0u3yjH0I+9Xuh0Q0l/LkBwjlzSc5J15Wa9cKN88hEsPEHtqmzvDqPe4eQlD3eWz4YV7EbSYttHllod0iSgTi3zFVJHBxMMUfELa9r5g383RCbXXtYID3utuC+by+Z0qQKFrVg5lWCxYEGX3Lw3DvEVPvr/dS/dSOuEFmZAxXvcX3oM1kWn1knOTcHsvNn9Z7rmecfYQR4wyxWSkxAvSXqCXTKzSEpis+0bcPsJeHZQKCtOrcAXNFqShP4uOX+hAqvZZZK/6L1Mw1+oXOYWz8JrzZ2OBmFWmh7huoXCAv5H02K+YKImDtxGUROiu5s5/xayrwh2Q7oYbKiLPejXZw== 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=1msI7nyoVah6bDY9mQXOwQ2TB5aUsQi50ELaJ7l6n20=; b=fwWBSdbY8tc2aoONbtzpsqvoYvlWoZ73fngI6zN+o4E4oHrDVKpyRLlY9LRrMmAuQGLLJM3CLa7de0Oh/STzZFLa5CQTsgBqBkHMTAxgC6fC74v1uQEqDBOafsyBuhzwyPV73SZ8Bd4gpWdhWocTLhCyWwjyUSrjXXbyEqYu3gxFLldrMITBiCZ2M64di9CNlM5BVgmxO3+qFlytwDVvOHzMmEnlNTvkK98527M3eIlJQ6lyPBKMvgty+5xPEkzGUZG7XHbwUEnB5LAnI6Cnd1FjEAD4YSqATlB4bSZYBzKgObCjIFZHkNHbbtf5zj4nvP+OpRL22RcpxUjNC3arKg== 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 DBBPR04MB7721.eurprd04.prod.outlook.com (2603:10a6:10:1f6::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9031.13; Tue, 12 Aug 2025 12:18:42 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%7]) with mapi id 15.20.9031.012; Tue, 12 Aug 2025 12:18:42 +0000 From: Peng Fan Date: Tue, 12 Aug 2025 20:17:06 +0800 Subject: [PATCH 2/3] clk: conf: Support assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250812-clk-ssc-version1-v1-2-cef60f20d770@nxp.com> References: <20250812-clk-ssc-version1-v1-0-cef60f20d770@nxp.com> In-Reply-To: <20250812-clk-ssc-version1-v1-0-cef60f20d770@nxp.com> To: Michael Turquette , Stephen Boyd , Sudeep Holla , Cristian Marussi , Marco Felsch Cc: Geert Uytterhoeven , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1755001109; l=2972; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=6UoxghPDjT+22Ly1P0RQ6l342s392q0vWuGY6rqK9SM=; b=umhFRKGZjVKJnzBrBGUPWBfHA72LE0T2CAg637haCu9x7gvIh1YM8vWJoIiuN7oF+mI0LxPtU 6icUgsEoS4lDPOhlyb2eHDfoU5+gh7MOhZIMKmJOtyb/DNZPGUzpHCf X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SG2PR03CA0103.apcprd03.prod.outlook.com (2603:1096:4:7c::31) 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_|DBBPR04MB7721:EE_ X-MS-Office365-Filtering-Correlation-Id: 6903ba86-8a75-4906-673b-08ddd99a602e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|19092799006|366016|7416014|376014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?M1BNS2taby81dTlzcW1BZ3EvSlc1akFqMnNPMzlMeE5DZ3RDVWZKa2NCOExX?= =?utf-8?B?MG8zaHpURytkWEw1R0ZxeG1uNDZMTnRtUzcvUklhdmk5SW9yVGFXODZ5Q3NQ?= =?utf-8?B?VDVlWTlSTUJQNEJxdW9XZXRZYUxSTis2bEhEcEpqYkNPZkRTNDNQTkg1R3ND?= =?utf-8?B?WElUM0NrUG9uZWZzK0xldGMxeldjUlRlU3NKSitXZkVXSzBYbktxRFI5SStX?= =?utf-8?B?L0pPeERQM1NJaEtETENwQUhsN2xNWjJHeHlMcy9hUkJDQXdnOThXYUtNQlBQ?= =?utf-8?B?c3R6dGR0Q2x0NitkSWREL25BNGhjK3RFdDdlQ0FnZXhTUnAraFpGbWs5T3R6?= =?utf-8?B?di9OUHB0WXpRWUk3SkhvcEJZQmpjdHNicnptYStpaHRTQ2dSQ1pTNUxvNjF2?= =?utf-8?B?YU1FT1ZqUmp6MW5aN1VwaXZURXVZcDNJR2JoYndnZnVxZW1aOWUvTU9YZVpx?= =?utf-8?B?d3BvTUt1ZzcxUlVNamQvaEw3ZGptYi9rcFJvN3kvYUc3RUM4YXdTZkRUMUdK?= =?utf-8?B?UWJnN2NhRnlGTFpJenF1TnNSRGlQSlN6aWNRVmNtWjNaeFlxbmNzcDZiVyti?= =?utf-8?B?OHBlcDZsS0xnRy9ZK3lNc3VvTTh6K2dsTVdpNlRqUzZDTm5VL01sc3B5R1NZ?= =?utf-8?B?M1pWdzI0MjdiYll5aXl1TnZCRlR3Z3hKNzd2N2tqcXBGSlR3b2RYNkJaM1NW?= =?utf-8?B?cENYRjlPMUIrTm1TZEtDbmtCSFhPU2FjbU1uNG1vQllWaUJLMFNnTzhPUVFQ?= =?utf-8?B?NitMcmhUL2RuZXBwNGF3NW50bTFnT2FHMHBkbFpxUFJuT3ZCMkwzYjBnOE5j?= =?utf-8?B?ZnZvek1RYzk2bzJ0MW1QYjhFR2s5OXhwZG9iL0JJZlI1ejNnWkE2eWVJZ2Vr?= =?utf-8?B?Mnp3cnJydkYwcHpUQTQyVm9DUEN6R0lrd2FWZytHQU91Y3BGL3lZQTc0Y1FK?= =?utf-8?B?ckYvQzVZdlNLcHZwQU1QZ2R0QngraTc4b1ZJY2RoUW0wQmtiVXhseE1sQjFI?= =?utf-8?B?SnJUWWgzb25DZkk0RWU4TXF0MDB2L1BLQUlscUVIeVVCT081Z3VNd2xPQjZJ?= =?utf-8?B?aklWbEE3d0RoUnFSY3BNRktBMDBGYys5c0I5TS9wMEpJbUhPcy9vMytnY3Fm?= =?utf-8?B?b0lxMWlSYmFmcFFSdU9UU3V6TEpxWHo2MlVYTkNTa3krQkNTcTFrbDdBRE5t?= =?utf-8?B?RDVSSEt1d3RlK24vK1BKbzRsdWM0ZUJVTnVuempwaTU5YlJFMzFWNTM4dFYv?= =?utf-8?B?dit3TktxMzZtMXFhK3JEVDVSZ25VSWJGT2o5VUFrMS9GVXl4UFd4RmpBSlBR?= =?utf-8?B?V21UK2ZwcitOY1dSb0xxdDVabGhLbWdnNEFoS2VaS2FydDZBL2p1bW9BOGpk?= =?utf-8?B?ZG1rUG9SS2JXKy9RV05xeDY5czBURnVRSUE2a1hJVENITkFwWXZiVDVTY1Rz?= =?utf-8?B?TFV2ZWt1T1plR2x0aXMvV3BuVTBxTW40bHZmRGd3cTZvY2g0SUpXUFlWMUNZ?= =?utf-8?B?eWR0YjJOUXBHNklTcGduYllQYzBxOVU0YjNGOUJ1NjBJcEdOQUxPSHNrRDRP?= =?utf-8?B?NVVPSFg0NnNwNDF0KzVuZ2NkRXhzdk93MkdPcmtkMlZ1RWpxcUdTN0hub29l?= =?utf-8?B?Tnc1V25Ua0pwZ3ZuWmdaMG9UTkVwTzZrays5WnFIMWVPZFhyS3Y5TGxqY0Jx?= =?utf-8?B?eDNSVWZFUDh2YXM3cmNYSC9ISWt5TTViV0c3T1UycHVueDdwZ2l3UXBVZ085?= =?utf-8?B?UEpheDJTT2Y3SlM4NW5NM1BhMnlqd0dHeEd4TmZJdllwdDhWWXBhMWIyTDdG?= =?utf-8?B?elZaak9mQkhFL2hRdnpZWFczRzFETngrL1doOXAvT0U4OFBBUnpSRlZHQnpX?= =?utf-8?B?bzFOdWVUWXdxb3h3ZmpueTBPMTBaaEkyamZ6bGVIT3prYlAranJndzZZL3Na?= =?utf-8?B?WWpsNE0wbjJFUDQwOXg2QVFZNVFTaE0wZmk4SWxBWVVlR3NnRU1vaTJ0d09r?= =?utf-8?B?S2ZnaGlDZE5RPT0=?= 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)(19092799006)(366016)(7416014)(376014)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MGFqZWhiM3crNWs4ZTNWTWtVM0djWXVGZUF1cmVwajJldzRuczRsVnBzTjZB?= =?utf-8?B?bmluRUZaeGZlRldDdTRsZ3FzalVtdVJhaGExajR3cFVvWWw1MjdWN2VlQlR1?= =?utf-8?B?d04wck1nbktvRXdSNUhqU0puMXovdVQzcE5UTWtyUUppTkZDSUx1OWZtYTRs?= =?utf-8?B?T2wzeC8xZlJNU1JENGZZMWErWVQ3MUZUTUhXVEo5N2NVWEJpUHhhRUFVTHNk?= =?utf-8?B?YkZ1bnprZ3IzMHJjVEJKUmN6OFlDNkhPekt4MEZmU3V3WWxsZGRsWUJadmcy?= =?utf-8?B?cU5seXdmR3pkWmlhaXdnUXgvMFRMa1YyZTJlSDRUdWtFbFZETmhSVjJwN0FN?= =?utf-8?B?SVZEcFI5bHM4TFRETFZ4bGVNN2plREw5VGltc0dqakxNWG54UmZ2R1VZRUpJ?= =?utf-8?B?Y1ovQVlYa0M3alF0UnMyNGg0cUNIcXloRC9tZE9aaTc1QmJIbnExdGdyTCtp?= =?utf-8?B?SVRaN3ZBdDY1anhoaGpQNXV4TmRaWFFMcmRuL3JSVlJUWU5FbzcwbWpXcksv?= =?utf-8?B?K1lBa2FrOXpHUnlkYmdpODUyaVloaENOZkdNb2lKQ3h0YmNaMlNGV2M2eHR1?= =?utf-8?B?ZElweEczRWNtakRzbVJYbDhCRnVjRlh4VUNrYzBTejFaY3lMRWNyTDJIN3lI?= =?utf-8?B?MmMrUmoxaTQ5SitVQ2t4QmZtNjgySFJ0bzB0eHlhakVUNUFmbXZRdk5pM2ZX?= =?utf-8?B?SWZ6bUYxK0d4dWhjblZVSUZOVExPY2U5dUoyWlpwWHVvTVI0YnZkUytBbVhR?= =?utf-8?B?elNoa2VGL3A4MTM3SFUwdG9pdU9mSmZTM0djV2UvdklSU2dGQmZVcG0xTnYv?= =?utf-8?B?dExDYmpKemVLWGVCNW9lREkrS29WYnBNelhITm5tWUY5UWtiZ0hkbktabXJD?= =?utf-8?B?ejUwZlVoNFNzdGZRL2dWQ1JDelU2dTFSbDJhRC94bmt5VEplbXBkQ0UvZStE?= =?utf-8?B?QlZRekFWaDJIeFlvQS9UZTg0NVduWkcyRmdqMG82WDFhQ2ExMTFTb1ROSytB?= =?utf-8?B?TXJrb29RVWlkTHArbUxkV0tMNU5TWGpqU0xXVWZEeTdEeHZhMGhDc0R3QVJl?= =?utf-8?B?MENuUjcxQjh4MjlpcVM1ZnNLNFBhTC92clFCblNHRnhkcVJ4Q0xQQVhxTzRR?= =?utf-8?B?MEVSTG1iNElWWFY0WUwzUGNQQTFrcmZiLzVRVCttemFLaW5OeW1pUGVBbWpx?= =?utf-8?B?M29VVGtRd2h6QzRJS1RvUFhhOUJ5akRNUjBUQnpZR3EwQmZOS0tuVXg2REtI?= =?utf-8?B?OWlaYzZKSDRmcmkvN1hjaTNnM2dXOFIwSHE4cTZnYjBRNU45Y0dvaUwwSTJS?= =?utf-8?B?MDVkYkhQYW1aa2drQUFqbzc5NWc3MStJY1hOc1RlYmdPZXVpN2ljS3RjR1Z0?= =?utf-8?B?Nmdrc3kyc1kydC9PQVd0VE9vUng2SGd1dVFIelMyd1IwVXFObmhEbkVsdllk?= =?utf-8?B?U3RtNzB3TERad1FNcDV6SU8zMEh4MFNscE5WSkhTUVQ5cVpXSHZXbTJpUUNF?= =?utf-8?B?V204bDh2TTdMQUltNklVenpBemh2UXpPQXZvOVB3NDc0SlZRQWZqd2tXRXRC?= =?utf-8?B?cTgwcEsyYWhZWCtwZkI1cEVaNVlDZ0dUdVZzNFE0dFdwVXJ6TnlPYWxPSXlm?= =?utf-8?B?OEh6KzhQOFBjOGNtRlIrTWsyQ2I4cXdMYi9OaUhVdmt6emRuVERUQlpFaWEx?= =?utf-8?B?YmlmcGw4L2N6Q0JNL2VEOGQ5VGlYZiszRUx0RHM2eFM0YStMSUF2dG9KQ3E3?= =?utf-8?B?TlhxRDQ1Z0lic01UR05lb1ZVTVVzdExHcldHb2xvVjg3Q2I2dHNGL1p1dW1i?= =?utf-8?B?a2JJQjF2cy9XVjhsTHFiWVk1eVJ3Y25oMXFVTTNpYVQ3eFROSTYzMUIybi9z?= =?utf-8?B?SnB2Tlc0eDd3OEF3cFBIS1lvZzNiT0J4MVBpN3ZHOUkwcGtxVVRybTg0aEJo?= =?utf-8?B?SUNBKzZsMThJTkJZejMrV3BRcTZndG1ZNnJSd1Nud0h6bXlzWHZFYW41aDZ6?= =?utf-8?B?Um5VelIwakxIOTJSa1RKZUxwVnA5ZmtqRmRKSUJJcXQvbXhwaHJDcnZwanA2?= =?utf-8?B?ZlFYek5JMzVRSHZQQUppblZuWlVIalRUY0N3WFpCOXVmN2VhMEp6c1dxVkJX?= =?utf-8?Q?IXGbXLqPE3QKhVrwDfMaOpwFm?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6903ba86-8a75-4906-673b-08ddd99a602e X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Aug 2025 12:18:41.9936 (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: kaN/Y2f3mFgKSXXJrm6jN4zcfYuCrN3o0okg8wIGJyrJvqGZZaIOFxOJ7muUesPAJ2pLbCsWyaxzlucr3i42fQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB7721 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. Signed-off-by: Peng Fan --- drivers/clk/clk-conf.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 70 insertions(+) diff --git a/drivers/clk/clk-conf.c b/drivers/clk/clk-conf.c index 303a0bb26e54a95655ce094a35b989c97ebc6fd8..81a2c1f8ca4c44df2c54c1e51f8= 00f533c9453b3 100644 --- a/drivers/clk/clk-conf.c +++ b/drivers/clk/clk-conf.c @@ -155,6 +155,72 @@ static int __set_clk_rates(struct device_node *node, b= ool clk_supplier) return 0; } =20 +static int __set_clk_spread_spectrum(struct device_node *node, bool clk_su= pplier) +{ + u32 *sscs __free(kfree) =3D NULL; + u32 elem_size =3D sizeof(u32) * 3; + 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 > 0) { + sscs =3D kcalloc(count, elem_size, GFP_KERNEL); + if (!sscs) + return -ENOMEM; + rc =3D of_property_read_u32_array(node, + "assigned-clock-sscs", + sscs, count * 3); + } else { + return 0; + } + + if (rc) + return rc; + + for (index =3D 0; index < count; index++) { + u32 modfreq_hz =3D sscs[index * 3], spread_bp =3D sscs[index * 3 + 1]; + u32 method =3D sscs[index * 3 + 2]; + struct clk_hw *hw; + + if (modfreq_hz || spread_bp || method) { + 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, modfreq_hz, spread_bp, method); + if (rc < 0) + pr_err("clk: couldn't set %s clk spread spectrum %u %u %u: %d\n", + __clk_get_name(clk), modfreq_hz, spread_bp, 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 +240,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 Sat Oct 4 22:36:15 2025 Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11013010.outbound.protection.outlook.com [52.101.83.10]) (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 98A9E1A0BD6; Tue, 12 Aug 2025 12:18:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.83.10 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755001131; cv=fail; b=Sf8I0g6rs3VB8jq2JsZFmsqXBsxjE6gRtCntk+z+X6LLKozMYhyykVLq7Kz4P8TTBYJtf7mPMcmRWSf+visKyjwxmWBUBgdI0wPmfO0cU4nXH25sbYtvx2slK99Vyu+Sp/kBftYfW27daBgLID8F+QrtWg4vwwFXdOUO3jZVt1A= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755001131; c=relaxed/simple; bh=I8dZ1Y+pdQi1FtS7fxvS86sC7Z6ORGJMrVZmOLkKcuM=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=f9lAz1LU+2v85gkg/q7VfzowJk1ahMNUuBkpZnCSGaygLNAW2tNUJ9ejw80HUfdxZWJhI4IhQHymR3eB5vy57XGpj7PC3QTqKiEFhG/b8zy80IaN7zqWrTx0tn4KGZVfNPB5lhw0xHFwwCNhN9t6JXyNYBvb174/CIKKctdfqYQ= 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=WDekmqUA; arc=fail smtp.client-ip=52.101.83.10 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="WDekmqUA" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Wv25ILJ2jBLyMWtkL1mED74DwLPFr+VzzQMx0dU5tAHCCPNeYjN785PdFJlN7QeRzsSwpaiPvWEdyodGkABB5mQ6uRDd1sUIk0icLyPgdKxId9DYJtsGyq4XcTSEMrSHvQIKPf3MwYlc7VwOrOsyh7FBHPvCcW3+NUO368lOgrVqVS6jiGOwxPZqkaN5ni38n0dAg9gmH4tlifwkNM9zjQ5h480b7kTh3CPyoVFVK86o8WJgBEtjFjrYeOef82Qgyh29O9FFv+Ef2QDWtfkD2SEB0GwpLIT9JZimXn/4pLrdbcw2ceOJc5HgTwI6dINr4RInbsYviGrpWO3CPP/opw== 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=uvwk3rDsTi0CUYTRWDKTxNknuMe7upJNcwuegNGFoNk=; b=RJX9A9BmdbzoKaf5CwUyOJYi3bFBUTDznNiZ2fhkVAdcHOXdbHfXzlZ5pQlV24LaUFQivv/FVZ9aGjjhq4cZO9xbYuUFP+M7SyZC0U5SMRvySyyAgc9AhmKZ6ejYht1C7au6/q1dRi8HvEl1vPeyBuarc6EL8hZqMowh1Ne5E8JJCgomvk442+JCOU1KzQp4RaDs7/DpVMTO0zFMwTGb/asDiPjo44hyaAi29obSSwqsQproa7sOShOQ2VbGEoMllVyhsb11rxsoj9yFu22qB27i9RPLSYTdkJvA2IrGdIfuY8b7PML84+pBdW+o3y+PiuRDYXIdNUt3M9ltYAp/kA== 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=uvwk3rDsTi0CUYTRWDKTxNknuMe7upJNcwuegNGFoNk=; b=WDekmqUABle76jgh9a60uXpV7L2vKFwkZpWlfFLExQQZFbalKnNOpAe5J2W4pvFkGvvWdNIEGxdcqcFxrx1ogmnGOYsEn7Ce8YYFbpiPj/F0y0bF8A2rwytXfV09cULlAk4zwKGy8V6kWz8MuKvTfpFLlVqWNHhcLx7O1n+g6xwJA1VklavXNqc4XbGxIubTC1OJW4M7xV7lWlSM0JodOqjrCsVTMayhWn5As7SQR+paqrSoXLpb8oZvzL2t5Jw0G72EX9G51rQY7pqYrnDeMZ1fsQ4tEw7puk4cP69H43Dlc/9gGPYUon56Qc7SSt8A6BT0+CdB568xDKjBFHZ9nQ== 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 DBBPR04MB7721.eurprd04.prod.outlook.com (2603:10a6:10:1f6::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9031.13; Tue, 12 Aug 2025 12:18:46 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%7]) with mapi id 15.20.9031.012; Tue, 12 Aug 2025 12:18:46 +0000 From: Peng Fan Date: Tue, 12 Aug 2025 20:17:07 +0800 Subject: [PATCH 3/3] clk: scmi: Support Spread Spectrum for NXP i.MX95 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250812-clk-ssc-version1-v1-3-cef60f20d770@nxp.com> References: <20250812-clk-ssc-version1-v1-0-cef60f20d770@nxp.com> In-Reply-To: <20250812-clk-ssc-version1-v1-0-cef60f20d770@nxp.com> To: Michael Turquette , Stephen Boyd , Sudeep Holla , Cristian Marussi , Marco Felsch Cc: Geert Uytterhoeven , linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1755001109; l=6023; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=I8dZ1Y+pdQi1FtS7fxvS86sC7Z6ORGJMrVZmOLkKcuM=; b=Y63nLYWfsBcsu3qpBPbq4VVy2k2jfVn4DMN7IceRxycqVpCVkDMUtAgRclOfqF2YbK8TNzcJ3 2aOjZnDWpKdBFFD5DEKK5qyGTZksjX2rXKpif9OFSJZtw3POMTCajHV X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SG2PR03CA0103.apcprd03.prod.outlook.com (2603:1096:4:7c::31) 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_|DBBPR04MB7721:EE_ X-MS-Office365-Filtering-Correlation-Id: a6a98400-db4a-40bb-b08c-08ddd99a62ef X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|19092799006|366016|7416014|376014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Vkl1WTg2ZDNvdVpPa0J2OHl2bmpzN0tNRkdNYi9LNW5nR1RpY252b0w0WW1C?= =?utf-8?B?ay9KNUxITTFoNWx2Z3lhalgzeUg1Z05uVGVoYjBZbnFhbXVLcGpmMlFiMzJV?= =?utf-8?B?SlBpUkZhRWZRcHVZeHU1dVFRc1hwT1gydmNwUk9XVDF5OWo4b0p6aGxiZkFt?= =?utf-8?B?RDN4aWRHdWtaMEx6bG4yTnd1RW9ZcE01VW1QQ0lMdWpQZmVsK3VEYldxWlZo?= =?utf-8?B?V3NKWnQxOFZrc1FkemwxdGxqU2NBSUNwZGt0dElDNmtTb2YxZ0UvVFZEWDEz?= =?utf-8?B?Rm51TFRmSE92eElnL2d5ZGlxNTUyMndFTDVXNTlWaG5YeVgwK2Jub1h0R1hz?= =?utf-8?B?alJCTDFCc3VpUmJiYnd2dlZvNnE2bEVYc1RXTUtMdmJxbUZwRktIMmlWa1o1?= =?utf-8?B?VVQ2UHF3TDQvZ0NtdEJaeitDcmVlYmNuemtacmpwSGJnRDQvQVQ0ZC9ldGJN?= =?utf-8?B?WWNPMndGeUwxRkU4NkJsd1djdEcyUFNCeHZzVC9wUzVxd0VJOEhCRmlaU2VK?= =?utf-8?B?MlJuWlpRaWNrRy9HVDVTK3pHQUhSTkh4QzNvTENZcmRUTllrVFM0T0gzS1Av?= =?utf-8?B?N1NZYzA4a2FIaTJSRlhzM0FDMWptRWVFWEJrRlhML3gremlTbE1YaWxpZ254?= =?utf-8?B?bGNnNjdITGp5M2VYaDR1RElYZ1hIVXpVV0VOQ1RibFVUQ3BOc0h5LzBBQkxs?= =?utf-8?B?OURWRGlmYThpVnZIQVVpczQ5cSs2czRVT0x0c3YvWnBSdGhxYzczanY4UkdV?= =?utf-8?B?MEJjVjdDYlN1L3ppTzRmSlgrMDE1ZERuRndITlZqT3FmZlJ0amZQa3llcFRo?= =?utf-8?B?QUJiLzgrWEtZMzdDQm5MZmU3WWhSTktiTjNTOExYT0JjbDR6eEpQalFEN1Qy?= =?utf-8?B?SW1lR0JFbi9HZjNuWC9YeXBYZkFDcDZsYys2cE13TmtPdW1TRTVZV1ZqNkQ2?= =?utf-8?B?TjdQV0hRbmhUWGR4UG4wM1R6dlY3ejJJTDQxQlhaUjJiQzJOMFA0Q05DZHJp?= =?utf-8?B?Y0pvMjBXZ1RYY1NIdTRkUXlXNFc2bUZvVDhXTnNHWW5DdW03WjZFNHZ3V3Ux?= =?utf-8?B?bVFNQkNNNnNhbDYveTNJRis1WHJtcldqcHNyblE4b1NDbklkMVRpTTRkZHVs?= =?utf-8?B?akxDU2VETXdsQXRvZS9SdVpMWGRxNTExbExWZ0p3K29PWE4zZnVDd1dXa2FC?= =?utf-8?B?UytONXdMTFluekxvWmlEUVpiT3B5MW9VZ085bmNNTlZjNmhhcHNFU3dpRGFS?= =?utf-8?B?dXpwVEM4SGIyVTVRY3dwRGtRYUNmNEIzOHlVc09vdWRXZ2JCQTlQRDdXbldX?= =?utf-8?B?QWFnLzJKelMzSndUOUhWQkRTU2duaWZ3VEFBVHlsOWxVMDhjTkVBRTZFRlNF?= =?utf-8?B?cVMxVk1CZFhJd1pKbnE3R2Z3Rm9mS0orWDk4RldhR0RRZ2toQzJwZzdTNUE0?= =?utf-8?B?QWM5Qlp0N3IwSGZDRmxrM1RBZ0c0WHZhdjJHWVkwUG9kU3RTbVhWNmZ6cEZ5?= =?utf-8?B?QUdxdzY2NGx3QlcveVhtNVU2UFJoOFZuK09YU01NOWtrZWtkVGdiV2tqclF3?= =?utf-8?B?dGFUM0ozdDllM3cyWXFzbWl0eTJLaDZGYUpDK3JXNDZlOUtTby9KNzRpTDBs?= =?utf-8?B?eWYzYkJaNUZDQkhSa2RxZmN4aFFOaU9sOWUrUUMyLzZNVW14UWZuVnUxeFor?= =?utf-8?B?SDVRRldTSWJxU09VUmhhb0NhSFhhTjZNUlNTb1lNYVVjeFVTT0kreW1YYlhu?= =?utf-8?B?TjNraEozblZjWWxZQ2ZGTlgyVWFSc0xaQnRFbTZrUDhLaXhrV1JDUjNsSHNN?= =?utf-8?B?ZGtWMURhM1ZIMk1XUlQ4RTAzU0d5WE85bkc1Rmo2UHZ2QmtlSjJrdmFwV1Yw?= =?utf-8?B?UTlUUHhKUzJJN0liV2YwbDFCR1JzeE9VNzAydGpzNXJ3WEJ0NkNwLyt4dDhZ?= =?utf-8?B?MVhyWXlyVExwaW42blRxSjlZR1Uwei9ZTWxiUGRyR05xY1VjZlh4R0xkZG5Y?= =?utf-8?B?aUZCbE4yNDF3PT0=?= 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)(19092799006)(366016)(7416014)(376014)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Y3QyWWpDT2Y5R29FRGtBaHoxMEtKRUNmK3NjU2FKczZFeEFRVDA5TGROU0ZT?= =?utf-8?B?ZndKaFIwQmEzRlhrUDY4R0hLR2dvL25nUkNPZFp6NitpVGtIVFZOdWplZEta?= =?utf-8?B?QW8wcS9ZV0dOSXV2NytlTUs3OFNIQTQ0RWQyMHFqdEZOOWM5RVJ0YjE3UlAz?= =?utf-8?B?MGF2TFVSODA2YTJoVjl1M1hrYnZYcVUySi9mRGtwYXJYQ3BTSnptbEJhdjFJ?= =?utf-8?B?K1JmMUFDLzU0dW4wTllmeXFkWWhaOTEvVXhvVWw1WFJnbHV6bHRkNWtQbnhQ?= =?utf-8?B?VTltYWFtSW41dzZGWGFHbG41eDZiaW10YkZkcEpMR0lMZmxMNUlYdFBRcWRL?= =?utf-8?B?SHpmRWtIRytyMHJCUVRsSkVkL211SmZLc0pFQ29oa0VlSmZRM1FZVXMvd1la?= =?utf-8?B?YTZ1Sk1yNjJZZE1CSHZHUkRBN0lRK2kwendLKzZlZUprOE9tVmdUeFlDTFBo?= =?utf-8?B?bFRkeStFRGVpOHVVaWg3b3NqVTgwSjJEMkJEaHpkd1VEaUMzNE1GdmN4WndM?= =?utf-8?B?NVptUU5PQzdRQzFOSUpYang4ZVN1K2VqN3I0dzh1N2UxTUVNcDRmb1VRTlp0?= =?utf-8?B?TmREZ1dPVGtDRlBINlIrNUN5ZzBnS3AwbFFxdndONUdlU2sxQ2szSy9qL3dG?= =?utf-8?B?aWZRUzNvVWoyN1BlTk5HbG41RWljVUw3d2xpTzZhSSt1NUZyRVhIeVlBV1lD?= =?utf-8?B?R1FGNkJmTzhhcDNhb09xdEtBS0l0NmJBQlRCVXZ0ZGk2SDlBM0UyWUc5bHpi?= =?utf-8?B?cjZRMWcvaXJmdVpRQkVSR0dIVFNEWlpPcTlMaVlsaHh6VnVIYnRiY1BzL2ZK?= =?utf-8?B?VE9WcmN2dHRrTzRjdWt3dFcxNUg4bUw4NUtiZ2dzTDBSRjI4ZXRxeWJhZmxt?= =?utf-8?B?OHJsN2krWWhqNHFFNnQ5bVNNV1FsZVJMNDVBYlFNbHZKa0txNXNoaHFoUWRV?= =?utf-8?B?cjFqcGVYOEY4cmNUQVhZRFdtNS9QNk9XZ0Exb1JUeWdlNm1GZUsxMVNGTGhs?= =?utf-8?B?ZVdkNUlYSDI1bVFxVkM5NFgwN2hOdTRCTVlEVmVaTFVQY2h2UnpHTkZyWXQ1?= =?utf-8?B?Z2tBakM5SlNwTWg3d1Q5dmpUcnJaMHIvTndzYUVmZERxKzBHMk92MkNkZEVD?= =?utf-8?B?UXlBVHlRRWlYSTZzNngxZk1JTGVST1BsY1RWU0daV1ZrMXFMUG4xV3lhZmtL?= =?utf-8?B?NG1rcWwzN1NZZG80S2l6SXhIQTV5THRwTTB6Wmt2ekNNMW9xTUVIWk0rSktY?= =?utf-8?B?NkNTbUlxRXhpTU1XVHRQWkJwZVZDYmtRVEk1SjJQTVZoS0xBSGtVbGFGUGZi?= =?utf-8?B?a3hGUzFJRm1oOTV0eTZqNFc1dGVkdmNxMlJnNFBGeVpsYnJYcGhkaytDbkRa?= =?utf-8?B?RnBnZDdEUHNta3Q5Q1pNZFdIV28zZW5MWkN3SjBJZjYrelY3c1ArZ2pvK3A3?= =?utf-8?B?UGlqMUlmTVNtY2ViNmlNRzRTdFptV01yUWI5bm1sRVV2NlNKaGIyWHlRRFVK?= =?utf-8?B?U0tLU1NXK0dWNlBLUGd2N01HVkdIUGw4UllXMytRcTM5QVMzdFBxYWIwQUhR?= =?utf-8?B?MVVza2lDTUgxQVd6WFN6VWt6blJrcWtSTGVXd0pRWS9sRy82N0NSM2lralJy?= =?utf-8?B?bUdvQXVOemNDMjBLaFBFRExqb2VvYnJPb0VqMGVNUDFHM1VuazdNL2lJTjRh?= =?utf-8?B?TkU3TGYwV21OVTdYTW1lUWsrUHpMTFRWMU5lOUxVR0dxNHNnNHVHNCtHQVRR?= =?utf-8?B?dUNyK0laZlFISE9JYnA0Y2hRVWVYdUxHYlBZZTlrbUVLeCs1eUlzWUdFeFJ1?= =?utf-8?B?TVdoU3ZqOHh5S0JrZ3lkaWVQK0J0R2tWT2pxQXJtcTNobnNxTS9IL2dPUWE2?= =?utf-8?B?Y0hHZEE1ZURtVU5Yek5oaElod1VmYjBMWmk3a1FEeExNRDYwazZVOUVkSUZl?= =?utf-8?B?KzFDNEdueWRGTWhxc3o3a2hXOUh3VWo5WFE2Q0tScHQyaFBMQ1VwUWxaUmRk?= =?utf-8?B?aXFxYitsMVhuTnoyRTcxdUpkaUpsZktnTlkrazFqWGlaajc3RGhPdk5JU1Vi?= =?utf-8?B?SVIwcm9pdTVtMDAwM09vaXpGWXVVdlBDRWFpRTZkbFZWYVNqTFJTM1lPcXVt?= =?utf-8?Q?Od5lhAUYrQUnX2AXFD9afMZi4?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a6a98400-db4a-40bb-b08c-08ddd99a62ef X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Aug 2025 12:18:46.5689 (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: txMf3/jHUovjkfhLSU9s1hPXM9iMWoracn6coceGerQNjXzBONj2VW2iLlia55KlX7Ezn7ke9AL8o7gKkIvpKA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR04MB7721 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 688466a0e816247d24704f7ba109667a14226b67..6f9f197ee671540e38470a5666e= b5ba8ec9de439 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