From nobody Sun Dec 14 21:32:12 2025 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011003.outbound.protection.outlook.com [52.101.70.3]) (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 0BB3C22A7F8; Wed, 5 Feb 2025 09:50:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.3 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738749064; cv=fail; b=jch4drasNQlqhxz7ffjx++M8uka2vttKvnzOES3w1foKdfEjfkmj01LdigRKO3zJCDvBNmH+Y5OY2RawPCqvIOw36pXNKU1Qpo1FC2zRcCrvKPh4/5hBa8QjvCdplJo3p7flP67ebNoms4q/VtA01a2BDbh5r+HUFgY1TEsRGl4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738749064; c=relaxed/simple; bh=0KS3vyrHnuIM1sfx9+zxaKFLc86r9rgrRnSAFgBEm3o=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=Yab42kydt4uIth3QLb2ymD93iG6L8ssitsNTtxwXJ3Nfz/Np+nCgXNn5GZ1ZX7Sz1TielfXwbJZRxnk1B1TGJvD42/wFb+WqOboUDdUFigGFH6SFNP6CIs4HBDEQiu6LmG2XhoF9s67qmwMY6V5B0oGrPZMujk2o/uWEVNGbFd4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=YYI3ex3w; arc=fail smtp.client-ip=52.101.70.3 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="YYI3ex3w" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OiTPbyX/jrOdZIUpGriGGKKdTDzfXN+sR/jZDQcBT1Sihnwh7eb5mDf2ihSabfp27G+7nKq9RMGyGAfEC+wIdzwc+83Lra3FZv4GP/t8bCXWmxpq1vyDyXIPtRVJEl7yVrqMlOY/FxfWYrjmJuEjzciwoCfij9fHLlULWmW28tdzXSRJfEQCK6IdwR+fCDxANJK9dB8yXQak4hZZipIaN8n7mb1aOxzw7P9wlcBQH6ciixPBEEIOU/jbxwB30bktQaqkW2IQQKvv6VYoK40f3HYg/uGzH0/H9oB/6PkW1LrNnL+ogN8cazjVbCJk3IB5uJlxHVkvGVWG+8fAQYLHMQ== 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=6l57yxYmeST1OV4vtYzySJQWfWrxoHyD6OZl1nVF+Fc=; b=V050q6iUn5DB+oi4l8wplJghMCOSvx3HH8Yxgr+U/CM/UfUrhJCV7NfxU0lhDXXS1MPAhuA+rrTE1yfK03qDoRXg83Smr0zLDO8OTvmmonQuWFqoiLo6qEvUGbg9D7jBTReP1ncRCG7A7a7tJDaxy7HzUchG6PJUZuPnJVn7o5/Dn1/RLDZD5S5OIu49qhRrtH0EP7X0Fdl9NKY8ukCaDnk1RgHZ8dnD3bs6v4Hu+iiRLbWPl7D31jG3LJR/gMPdbu02q5MLEo4S6WwZeseUDbHvrUS4+1ib+MY1wgD0RoBXU4YFWse8mgwNkqOSQ60MTa3/NCpmKHqA8u5RZJoOaA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6l57yxYmeST1OV4vtYzySJQWfWrxoHyD6OZl1nVF+Fc=; b=YYI3ex3wmgx9VJqjpowj8wnNzNy8jiavF7J2TsUB0RGv5TUppF1qeh6RcGRlxLZuF8qnpAgi7+LdgN7AZr7rfJaKevSOiaBBJF4eJbO1Cu1VtWxSmLoBh+di2s/+cc48uknxnsP9SxRhCue/YKPNJQDqB4VBCzxVNyo92dK8wvClE6AoaMj4ZFf8nfVYHx0FKIBZDSpIboAypKeo5s3iaPOmNEtpFRkL9bYbqDHvpgamRf6aVCgXiohsnR+nQZCQ6aI5B8CRDVstCsxwM4fz3tvBt0gB0QyvGPKUT4IN6Yw7J7inm/xvedjj1J5D+uYrsKKmxA0m6e13NTjYXKrFMg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by AS8PR04MB7783.eurprd04.prod.outlook.com (2603:10a6:20b:2a4::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Wed, 5 Feb 2025 09:50:53 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%3]) with mapi id 15.20.8398.025; Wed, 5 Feb 2025 09:50:53 +0000 From: "Peng Fan (OSS)" Date: Wed, 05 Feb 2025 17:49:51 +0800 Subject: [PATCH v2 1/4] clk: Introduce clk_hw_set_spread_spectrum Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250205-clk-ssc-v2-1-fa73083caa92@nxp.com> References: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> In-Reply-To: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> To: Michael Turquette , Stephen Boyd , Russell King , Sudeep Holla , Cristian Marussi , Abel Vesa Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Rob Herring , Krzysztof Kozlowski , Dario Binacchi , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , imx@lists.linux.dev, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1738749007; l=5527; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=N5B1zgouHjlvADWtIMmbMY9BBZv1Dk20KykGSG+oSag=; b=7MC8xIQrG6++fG2MGgat1FW7XiwEyXwuRcciuqu0rwLxjZzJ4OhxdSekbhEAnaM/0eWz6cDWJ zUYbhWYvqQyC+epoZix8LYIWgYwigEsEe4+BxcvUI5GPzoTmy3Pv1bo X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR02CA0037.apcprd02.prod.outlook.com (2603:1096:4:196::8) To PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|AS8PR04MB7783:EE_ X-MS-Office365-Filtering-Correlation-Id: cca426ee-cd16-4b81-18f6-08dd45ca9435 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|52116014|376014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?YlE4M21TVzkrV1RGbHFvVHR3ZXVFNXZIQVFncSs1NTJ2TFhZR2hYMUk0Z3BO?= =?utf-8?B?Q1F6OHZ5T2MyRnFaaEJpbW1nWEU1aWxZdGVxclB1OFlmWlhKNDBCVVY0TjVj?= =?utf-8?B?S3pPWGh3RFp2eS9CajZMRmpBSE4xT29FSEtXb3Q0cUF2d3lEcGordE5pT3NB?= =?utf-8?B?b3ZMZ1dlVXdnWjN0MnZEQVpJcGhzdW16bW9zR2k4VWxnWVBIRE5XMmVIVkJW?= =?utf-8?B?KzVnMVBNRU5aUlVINE5ObGxQa0JBcEd6U1NoSVFrRDgwdXJjTm90elNkM0p0?= =?utf-8?B?ajNTcHR2UnQrMHliWTYxL0EwdlNSak5GWGt4cGVYaFZmYmtETytIMHBMejM2?= =?utf-8?B?b3owUDlPa3hpQWZicTdWQi8zRVY0RjU0dXpxWDNMd0RoU25NVXhxSGduWGZL?= =?utf-8?B?MEh6ZXFxS3QwWnhQWXpZSFNITlNwVDNhYmhjVGRSQ21tZGdNMENzdTVGbkZa?= =?utf-8?B?MjY2VEkxMDA3ZDB6OFZRVEhSaVFqZzBjMWZBYzc5aHJ4WkdNZE1yZ2M3cldo?= =?utf-8?B?Wm9hTDRjSyt3QXFBNlY1SHdUQ1oyZnNqUW5yc1I5UERTRHAzZUluVGhkYU5S?= =?utf-8?B?UU9aUFFlek9pSHFoQnFJdW16NFQrQmxydFpXQVNiQWZoa1NFeXdLYUx3VWll?= =?utf-8?B?SGlJU2NLNVFTbWRiTENTMG5LMkQ0K2JIci9zeWErdlJxZXlNendwbEt4amgv?= =?utf-8?B?RUNkVkNuTjdBaTlmUjZmNC9CMFVmdVorbmlvakN3TEQ5N0pXY0xVQU5ERkZl?= =?utf-8?B?VXNGSnhmS1EyQ1FmeEU5V1ZLVTBlbFViT0dnalY0bnFLemFGanNUV0VmdG9p?= =?utf-8?B?OTBnSDVKWDR3OU03U2NMRzY1djZxeUtGK2tDTUV2ZzRSRGZBazRwUElLS1lp?= =?utf-8?B?aG1jWlVGdnlOeFZHOTRCSEVvRkl6YW5QRGVpcGhsZGF0b01PMUNWRnJTNFFa?= =?utf-8?B?ajloWXFLU2ZVU3htaVdxcUZmbklJZmViMXhxbm1ORFRvek5ucm1kK2F2aFRY?= =?utf-8?B?d2pHbmxJajBFLzhoeXk4YTBERzExQWNhV1ZWb2ZqeVUyT3NkN1Z5N254R09p?= =?utf-8?B?MGNJWWcwL1JsQ0ZjcXh3c3MraFRMblBZMDV1VGtzYWgzVHNaRHN6VTFJbE96?= =?utf-8?B?S0xxZWsyL2R3SldML29VNEFHVVkyczRCSDBvUlFVVHp4TVAyN2tGTWU0QklZ?= =?utf-8?B?QllTbzRmZHB3S1JJOHZSQS9obCtpZW5SajFMY0lpL0NYQVNSd2hmUzN6ZlA0?= =?utf-8?B?N1V4cjNDR3Blbm9XcVBTLzRxd21aN3l4cFExZjhYaW80NCtyYmFVVmsrYnRJ?= =?utf-8?B?eGV3eVlPOGRVNGxOTzVkZnFzU3ptajg5VVFuSkhUcTlEMkduT2ozSTVNR2po?= =?utf-8?B?ankvN295dUpYMFdERW9ncVQweEtBcmh4YXBoWWM5QkJ4RTJkMXA1ZHR6eWFY?= =?utf-8?B?NEhNOWVLTDAxancvNEtIcE9MaDUzVXg3ZjhkcnZpdnl2YU5JUHdyTzN3YUlz?= =?utf-8?B?Q0xYdVRGNldYdjIzQUg5bzQ3S08xK1BqekpZd29XdFFvQVBkNks2ZkU3Ykpt?= =?utf-8?B?c2VidzBRdVBPSHRDMVZ1cFB0L0tYUHdJRWFUU0puZ1lpbUcwR1ByTk4vV2RD?= =?utf-8?B?WENjN0lPWW83Z2s4S2RheE5iNmZnQVE5b2dHVUtZMWJkZENTTUpvL3dZTTBH?= =?utf-8?B?VHpjaU81RGRjRmVhN2hOWjBPUDdRSnkyVTdlOEloeTJ3OTVXaTMwR3d5bEVl?= =?utf-8?B?eFJCMlo3TlNQNGpRVHQyVDY3TzNndXRqWXU2ZkRxWldhclhpb0xLNFg5Nkxz?= =?utf-8?B?NlA0QThwSkRiQmxDZ1RObkRvQ1hNV0tQMTFoVGpESXpQaS90V2l6c3F1VjM5?= =?utf-8?B?SmtkbUROeHVrTlR4UE1BZ2I3TVFkdzNjZk4zczVhMmFPTUh1SjhPZW4xVEVQ?= =?utf-8?Q?Rkn6/HZ4DET3K3Y6JVGR0fqMibLCOecI?= 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)(7416014)(52116014)(376014)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YTBZdFVVRVE0Sm1ZbFl6elRYcWVDN3hHaTh1MVNTYkRYZEJWRzZYZ0Jta3Yy?= =?utf-8?B?a1AvRlBvc3h0bWJpZjA5VVFEdm1Bb1I4TndLaGxsbmE1OXVXeFlmVnpvcGto?= =?utf-8?B?Q3h5UmltTkJvZC9HM3NKMklTaVRIbDdxS0FCWmUwdk5PQW04YUR5K2lhTW9k?= =?utf-8?B?a3NUTGhkUUowb1dJTWJLZlhvb1F4ZFNpTjdpdzJpSVd5eXprVDAzNEgzVGRX?= =?utf-8?B?OS8xVUx3a0QwSHJKVW5rSVhTMzBDVjdYRHdSbndRM2lZSEc4UkFqVGprMTdU?= =?utf-8?B?ZHJFc2UyMC9Fb3psR0dLREx0UXdJMS95TkhKeGswNGl1cUlxaUZUd1BpK0pO?= =?utf-8?B?RU1VZ2YwSXJ0Z2YwRzZjRzV1U0VvR05iVjkrU2xsY01OcW5zb1BYSTJ5ekpz?= =?utf-8?B?cDRGY3VkNU42WE1CSGY1OHgyWEZxUzRzOWNvQ2xJdHVUenN1bWNVQmM4UnFY?= =?utf-8?B?SHI2MTR5YXNVL2JreVV3bEdoNjdtcjQwWUR5bjhDR1NjMkRaQTdWNWREWHJu?= =?utf-8?B?TVQvQnNGcy9tSTNZUG9NaWY1U0pqajN5bVpqUDZZTU9JcEttVFNHYmN2WlJX?= =?utf-8?B?bGMwaG9wSUZCZk8rRWhhbmRJUzRJaUp6MmFtMC9lYjJxTWZFNVFvYTZjWXAy?= =?utf-8?B?dS9ENGNlblUxSFc2RjVLVmhXZm9lRkhGMEprL2NIOTJRbGp3MkRUcWVPY29D?= =?utf-8?B?R3Q3WVRNOFIxV0VlQ0VDTktDbzdIMDhKT0FVa2NnTUdoM3dmZy9yaENobWJx?= =?utf-8?B?NkI4MGZYU0orQVNTWC9Yb3JyNmNQbWYxSTdSb1A3SUtRYnh2dWE1bkF0TWRi?= =?utf-8?B?K1JnZUxWbktLaGRleFNlbnFtdi94Wm5ianhSSWZ5K0Q1TzRPbFJMOVNrUkt1?= =?utf-8?B?WlBBU2JueG5kRDdpV2t3dmVWZkdyQ1hlV1NzVmRUU1RiT09aNEsvY3R2T0g4?= =?utf-8?B?UWVMOUZ4YXN2NzNxSjV2UVpIWmFVSDBCczVuVVVENThBNS81eHRCcWdiNTNG?= =?utf-8?B?bGVFN0FmZEVxcE9EaXZoS3MrMkVYZmpTaXZiOEJpTVJrRXNESHE2OVF3Mi9m?= =?utf-8?B?SnlaYjRaejVLSFUyYkt5VkFCZlk3cDhQUkUwZTJCc3RGRnFsdHFjWk93NzU4?= =?utf-8?B?MXVhSmZXZkRoUzR4M2pMRnpWVGtMZ0dkNStCVk1kMDJ6MFJIZTQ1bU54NTZC?= =?utf-8?B?QUNscnBiQzJHNEFDSW5WU3BYWWxBZnRlblNsRzJOQWJpRkNRdldFWjZQU0la?= =?utf-8?B?VW5yK0ptRTJ6c2I3ZjhodDcwdjhHS0JHeXF5T0pZS3plTEFMSkwwV2hiMEth?= =?utf-8?B?M1dqU3JJSysvUXFqLzhuQ1MvUitWbkRyWVZhaGY1TnFQSUxvR05RQ0tYRjU0?= =?utf-8?B?ak1aTHBxei9ySThma3pOV1VLcWlXSmp6Y0RYMUVoLzJHd3NvMWhDMkMvQjl1?= =?utf-8?B?MXhhU2FpUHB5WE1DdWhsQUhuTjAxMkN5MUJZMXNoOHVYcWF4WHh5MTRJVVpy?= =?utf-8?B?eTVESy9JK2ZIbUgzcGxDWGpIUFlXcjBzVVYxMnFCWCtObFNMTXBTKzc2LzQv?= =?utf-8?B?T0dqSjE3VXl4R0FqUDZuaDlSSTRKTWpKUGtZbFhJajMvT1dobHAxc05mdzhW?= =?utf-8?B?MVY0ZExhMEF3Y0t2OUdESlhtd3A2M0NQbzNQc2gvWktzcmMrSFp0SWRtVVl2?= =?utf-8?B?SFErVVV2Rm11VU5VeWNldzFFMW1lbFREOVZzdWg4RzVlRW9vUFRldXR6WWJE?= =?utf-8?B?bW8xc3FUVjdlL0RycFpRNE9VMVFmZDBYbG9OSUNGNWdSVUdhOWRJZXV2Y3Rl?= =?utf-8?B?VForSmVSbUdBQjkwNVlCL2VWZ0RpSm9hZ0RvVG94NHR4bHdQaHFiS1c5cnI1?= =?utf-8?B?dmFpUW5hMVNIZFFHbjJxc21razR5YjhtM2xHT2hjUmt1YmtxMUh0aHlFUFph?= =?utf-8?B?bU5GakhkL3lWY2ZqK2dnUDhCUVRLYUcyTVJQNDZOdFU2TVhBR3RZK3JpTGFE?= =?utf-8?B?eFpQK2ZSa0Q4cHhESkJabVRhalEyQWpPNG5wU0pMRHQyM2FTekcyS1FrQm9S?= =?utf-8?B?ODJ6akt6SjZldGhhQk9tL0VicW1jYmRwQVZGZ25IOExTZWF1NEozcE9qeXE1?= =?utf-8?Q?UiEHbfhBnIqLQDdYqmV32SOZ3?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: cca426ee-cd16-4b81-18f6-08dd45ca9435 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Feb 2025 09:50:53.0679 (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: wg+WhqZ4NSOfWaDPy7sgow7EIZKYOL13UqtNqwFGdeGTCQdkT7KonD6Z9y6jqJqFosIiBirDPl7zCNcDg1aZcw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB7783 From: Peng Fan Add clk_hw_set_spread_spectrum to configure a clock to enable spread spectrum feature. set_spread_spectrum ops is added for clk drivers to have their own hardware specific implementation. Signed-off-by: Peng Fan --- drivers/clk/clk.c | 34 ++++++++++++++++++++++++++++++++++ include/linux/clk-provider.h | 32 ++++++++++++++++++++++++++++++++ include/linux/clk.h | 22 ++++++++++++++++++++++ 3 files changed, 88 insertions(+) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index cf7720b9172ff223d86227aad144e15375ddfd86..e11f9615e683af52c719d4c8419= bd30f369f301b 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -2790,6 +2790,40 @@ 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, + unsigned int spreaddepth, enum clk_ssc_method method, + bool enable) +{ + struct clk_spread_spectrum clk_ss; + struct clk_core *core; + int ret; + + if (!hw) + return 0; + + core =3D hw->core; + + clk_ss.modfreq =3D modfreq; + clk_ss.spreaddepth =3D spreaddepth; + clk_ss.method =3D method; + clk_ss.enable =3D enable; + + 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 2e6e603b749342931c0d0693c3e72b62c000791b..ac0270cc9ec133954b1f8dcffed= 015723bd1ff5d 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -84,6 +84,28 @@ struct clk_duty { unsigned int den; }; =20 +/* Aligned with dtschema/schemas/clock/clock.yaml */ +enum clk_ssc_method { + 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: Modulation frequency + * @spreadpercent: Modulation percent + * @method: Modulation method + * @enable: Modulation enable or disable + */ +struct clk_spread_spectrum { + unsigned int modfreq; + unsigned int spreaddepth; + enum clk_ssc_method method; + bool enable; +}; + /** * 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 +200,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 +282,8 @@ struct clk_ops { int (*set_rate_and_parent)(struct clk_hw *hw, unsigned long rate, unsigned long parent_rate, u8 index); + int (*set_spread_spectrum)(struct clk_hw *hw, + 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); @@ -1404,6 +1433,9 @@ 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, + unsigned int spreaddepth, enum clk_ssc_method method, + bool enable); =20 static inline void __clk_hw_set_clk(struct clk_hw *dst, struct clk_hw *src) { diff --git a/include/linux/clk.h b/include/linux/clk.h index b607482ca77e987b9344c38f25ebb5c8d35c1d39..49a7f7eb8b03233e11cd3b92768= 896c4e45c4e7c 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h @@ -858,6 +858,21 @@ int clk_set_rate(struct clk *clk, unsigned long rate); */ int clk_set_rate_exclusive(struct clk *clk, unsigned long rate); =20 +/** + * clk_set_spread_spectrum - set the spread spectrum for a clock + * @clk: clock source + * @modfreq: modulation freq + * @spreadpercent: modulation percentage + * @method: down spread, up spread, center spread or else + * @enable: enable or disable + * + * Configure the spread spectrum parameters for a clock. + * + * Returns success (0) or negative errno. + */ +int clk_set_spread_spectrum(struct clk *clk, unsigned int modfreq, + unsigned int spreadpercent, unsigned int method, + bool enable); /** * clk_has_parent - check if a clock is a possible parent for another * @clk: clock source @@ -1088,6 +1103,13 @@ static inline int clk_set_rate_exclusive(struct clk = *clk, unsigned long rate) return 0; } =20 +static inline int clk_set_spread_spectrum(struct clk *clk, unsigned int mo= dfreq, + unsigned int spreadpercent, + unsigned int method, bool enable) +{ + return 0; +} + static inline long clk_round_rate(struct clk *clk, unsigned long rate) { return 0; --=20 2.37.1 From nobody Sun Dec 14 21:32:12 2025 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011003.outbound.protection.outlook.com [52.101.70.3]) (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 1FA5022ACD1; Wed, 5 Feb 2025 09:51:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.3 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738749070; cv=fail; b=rNZ/hI2fxdepoE+Tz93FC5jzIaQKaxdzjdyh+EhAknd8fS6N5jY1+J37Tyciqd+hTjVZVPZYkKuK2RwLX+/Cj6aY9U7LbFrpZonNuc/ewU4L7mX0BUd1bywm8YV1eOTLNlINPG3X4n16XcruvfhSwGoK5DnXObTPOm4z8A5ukhg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738749070; c=relaxed/simple; bh=3Ha5WUrHqYvgERvRmJ2K+sNZLE5D5WTGEpbSyGXSSXY=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=SKRXesMyPBl2qoZZcr0j0ONtgOJ5/h7LtEqazuVxwNEARqHjtR9fYjOiEZRj9tMtNeHBM8I+xlRjoFTyIkTm2/9x7us2kZiIj4NQdRUHXC5j6hrdXglRljWHknthJo9ZpYvtkUFIRhOs+wT8cQW64IfvNohJ3/NljfGaqR5uq+Y= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=ixnZ8c8n; arc=fail smtp.client-ip=52.101.70.3 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="ixnZ8c8n" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Mz9MdULP84EmHwaMJnTFfAdHXzJikGl0iO8GJJ2RVy7dwoKOrIhcWpdPeZ84uJDnfChz9Y45b3xm6oVwKIJJYeYP/NdfUp9ZPz1ooagQq1U5ztmK2Ckw05BBd7U3Jjzv9jclLhPZ5SICingpsf9QfD5gmwZtlG1IdbVlU0CE3VRAG8bpwXv+H2aXaijWMYpQFprgdX0hJ4p9gnZub/Ngxc7PYJ8a6lIrEgdrbsf460VdxXMOTr3C3Kblzbkj1oUZ9uQmWnQnPiT5XN8OBow4/8dJJ9u6bSbRsEX1ETbMOOkP3eMzhrK88FseB4SqhiKHtrvnmoEw8HLOvtwmjxGV+w== 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=YuO9we0+22ZHGv9exjceCoS+0fKOhyayQhSWy+90s9s=; b=h6G7vH4dfTzekbZJVDW1d0afSTM51J4/1cuB/8m1ass9avFyvYxgJAPfMQFXJIn28RBTnvoPUcBfMQxJC4Mqr4g/sfxqZR7C9HwOYvI5bT8CyRY8bAPLIVNl6X264MR1mOMdUSKOtqPizWIPrphVgPH1qvms4NGGhCEOZwAOeR70rRximpssBXa142iAD98sW7rAkwEgkD6/umVZZiWZm1U2C8kp0c2/Z2xoLeuZWfG1DK9M3J4D6XUZQyLqN23aBGuS32eR1x07EMdj+spRF59ibRk+dX7ZoFJ/Rf56TIv+fBvbfS+MvZgWLGh659ih7xlznivUaKlCLVA7eToo5g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YuO9we0+22ZHGv9exjceCoS+0fKOhyayQhSWy+90s9s=; b=ixnZ8c8nJU+u5STbOYJpaScoi6eeRyUgkbnUiH2f8iVvR6LPQP/dmHJ3jIlYv6JlXkIKwvgpqodRt2+hsxi//0rcm0zwaBDM5oanBdvcmL136FKJBwtNVnhHB90GRRfG/Xpet8qK74pWEjU67xYNx+2teeauzxoKGo+MzJRDTKy2YWzBRhHq6LAWUCPf5pRKdCIWjTFnnihd2nFBDhuzP0p2jz73MttH6m5vdB5zaXMnV9QV9mdSf6VPZtDfHAcAS8t/5PhnHVokWYSGP3kbk2hc+0uTiAXr8W84BDtD/sCHhh/HZpe0StXa3HEIZWOTuF42uirQSek9PkZTdup5tQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by AS8PR04MB7783.eurprd04.prod.outlook.com (2603:10a6:20b:2a4::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Wed, 5 Feb 2025 09:50:58 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%3]) with mapi id 15.20.8398.025; Wed, 5 Feb 2025 09:50:58 +0000 From: "Peng Fan (OSS)" Date: Wed, 05 Feb 2025 17:49:52 +0800 Subject: [PATCH v2 2/4] clk: conf: Support assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250205-clk-ssc-v2-2-fa73083caa92@nxp.com> References: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> In-Reply-To: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> To: Michael Turquette , Stephen Boyd , Russell King , Sudeep Holla , Cristian Marussi , Abel Vesa Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Rob Herring , Krzysztof Kozlowski , Dario Binacchi , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , imx@lists.linux.dev, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1738749007; l=2974; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=uyR6TUrIVOws23hW9VEyZgxU8YuEl7WFQo0HvLWbyc4=; b=ebQ0jEbKo5D7iWUb3MyG5+W2cVbDnOEijoMz0TP1SKmacytUoZBo0QxxEmQ4waH5ib3/g5OGY oIfx8lApQDLAw744xT0eusE3G7R2FQMwBJvg1+z3cyuDAr6/9skcDR6 X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR02CA0037.apcprd02.prod.outlook.com (2603:1096:4:196::8) To PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|AS8PR04MB7783:EE_ X-MS-Office365-Filtering-Correlation-Id: 46efdc5a-3bbc-460a-8941-08dd45ca975c X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|52116014|376014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?RGgrWWFLWHpNeGlORXF3NXhXSE5pbk9hb0NkSEUySkFvczNycTZPbC93ejVh?= =?utf-8?B?UTlBZVNUdU5jRDR3RkNuVm1ZcStiN0JLamZZV2xBMk41bE1KYXB6dnQzbzVw?= =?utf-8?B?N0NRNytSS1dqbkowL0xKbWtoMHFGajRUNE8wZkFyVXlHYTFXQlpYMzVCK2ZB?= =?utf-8?B?UXZXSlE4MlFyYzJYWitYSVFmMXQ1R1BHRmoxZ1BVM2c5K0tJb3FwZGkyTlF4?= =?utf-8?B?L3N2aWh5cDB5SG9NTTlLK1VLVTNiK3FoNGRVclAyM1RWaStiWHRvU1ExcW5i?= =?utf-8?B?RGxLZWpiTmRBbkE1a2hYRkMzOVFxYkNRa2xrTU1xM0toSm0zUzJxWFMyMkNT?= =?utf-8?B?blhiREFHWHIrenMvelNkeEloMzRraW5OV2lVcm9JejhoVUFCbWpvNE8rbWhH?= =?utf-8?B?NE4yQ25id2c0NTVmQ1pQZnp2bUE1S3NSbWdYSHZrdUkzQWpmWmttRGtXajFr?= =?utf-8?B?ME1oeEVhN201NENzTXpCZS9MUmdSdzRIaFBVOGdBY1pzMHpxTVVrSE51NTNy?= =?utf-8?B?UnJXaHVSUWNsak1XdWtQN2FISWpLNUlLengzZ1VnSWxFZGNVbkRBZDh2bUZQ?= =?utf-8?B?T0drNm43Vi91K0FBcDExOTNDTW82TERndUdhMFJHMWxVUm1PRGhZNTdxZW1w?= =?utf-8?B?Lzd0ZFZvK01JYU9VN1Q0TGN0YURhSGpXSDd6ZjVvVDFwWE9BSENRNmtUbzB4?= =?utf-8?B?cmRqZmQ1QlJMN3REYlJFQTFYS2M3eWZMM1ZnUDVPN29jSWRFaVdNL0tBU01p?= =?utf-8?B?N2J2cUo4UFdOUGxuMGZuVmRCaklBcWl6eVU1bkc0ZGtiWnZOeFE1bk8zS3NJ?= =?utf-8?B?WHYybndPdHdtWUJFSlVjVmJwM3dubXFibkR2Q0xYc0k4WUJwZFJIYjNWb295?= =?utf-8?B?WktRNE1ZMlQyM0pNSzdyc0RUZ2U3c2E2dEN3ZjhobXFKdVdIeWgvczkzT2VL?= =?utf-8?B?bUVJT2xLTlFURTNBdFpEdTVWTXRZTkNMOURJMWIyL3V1ZkJxZ01oR000R2cz?= =?utf-8?B?c3Z2NUpYMks3ZGtLN0toM2JrSktFNXB6SGRPZ2JLVXFKbVg4bXpmaTRMM0U2?= =?utf-8?B?V0QwY0w4aHd3RmdPNk8wMlh0MVEzTStFM2w2YnVKcGJHVWR6enpEWXhuMEUx?= =?utf-8?B?SmZyY1MwMUl2Q3dRVjBpemZQUVNrZElwZEFtdEFyYmlZc1VVL2YrUU0xaHZJ?= =?utf-8?B?K0RIdUhvdmdpSXd6clF5MlFsa1YxazdrWUVGRXdhMG9MWWFuckJiSlNvOEY0?= =?utf-8?B?cXgyU1dQQ1ZmcnlaU0xMenlLMjBZbW9lNHFpdk5RVEZwcTVMUzE1U0tqSis3?= =?utf-8?B?bE1qUjVFTGoyM3pTdXNDaGFwL0dBdDc4MVY2bDFxaXNTOVN1VWYrUGQvcmNL?= =?utf-8?B?VmlRRFVQSlNrNzUzOGJXK1V3S3dxYXFIMFROUmxNREdXcWl5MDh0UGNmaHA2?= =?utf-8?B?VFpDdmdNYlFjaW5WdGdiWlJkS1JWS2MyaE9wY01tb1g0dEQxbUxrcmVuSG9X?= =?utf-8?B?bnIxT0w0ZlZXOTNqejNNRHE1cWFoMHdMckNsK0tKL2tVa3VQS2k5YUdFQ20y?= =?utf-8?B?SG5zSk1udENZb0JNQjdZSURVVUNnSlkreFFBYmdqc1lDSXF5bE4zbXRaTjJv?= =?utf-8?B?VHpmTFZKZStWSjZ4ditvMnRwNzB4b2s3Q1d4RzlVN2E4L3k1bVkwcFZjWk9n?= =?utf-8?B?NmwvcTh3aTNVck9mTGFYR1VUMFZXVjhkT041anFEM3EzRHJHYUhPSm8vYkQy?= =?utf-8?B?Y2VFSUlNU3Y1K0d4RTBRYW9QRGcvYS9ERGZnYyt1endKbDluM3VBa1RvRUJ3?= =?utf-8?B?QTB5R2Z2TmJpNWhGcExNVXF1VEVIUTF2OUtBQXpHTlFEQStwOEhZbXhJUVRR?= =?utf-8?B?RTE5a3lJNlVrMGZCSStrdXBMamtKR0dySTJNYjJIZ1RGamowRmtCTjdaVmJq?= =?utf-8?Q?Lzyh3MAQ6N4YgH893wbnfXX4vcpg//fb?= 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)(7416014)(52116014)(376014)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QlpsNUt4SGN4MWlqVkExRi81bzl1Z0tOQjllNWpNUC84ZGpqK2EwYXZWMll6?= =?utf-8?B?MHVxc1hjRVJndzNkdWlSSkhTRXVrM01sTUlrc3JNVUNmc285bDd5Z01aZ3Mx?= =?utf-8?B?cU9BWVZtV3kxSC82WU9MYVp4RDUvdG5LZ3lWQlF0NEpxdW41b2QwcnpvR0Fm?= =?utf-8?B?Y2VJM1FsN0dmN3p4UXdKRWlUY1ZVREljRzJCeXZ4dXZOOENMMmVxZ2pqQWF5?= =?utf-8?B?LzVqRlRiVCtXTmlyQytpaEczSGw2RWJoVDFid2pRTEhkYmdtNzdhcUhicVVU?= =?utf-8?B?R2Y4WUwrQzJ2ZExITHhLcFRiQ3lZUm9MaktOQkxiaXlSNjZYSDNUU3Zhbjd4?= =?utf-8?B?L0U0SUNNcnpWcGtWMTVOdkNTa0o5RFdBbGg5TVFMQWVuSHZSc1dtMlRDa0tZ?= =?utf-8?B?UkxxTkZnZm42bitWVVRocm9OdjBNQUNBdGJ6bjlBWFdheG8za0UxemRYTUFz?= =?utf-8?B?a2R0SEZDR2hzdmFIN2NCWUM0ZVFRcmkzcFBNdW8yc3I0ZDNxWm02L294QndZ?= =?utf-8?B?bUhJckdvT2ZzWmYvNEFHeS9kNmhZMTZxVVZ3Z25iQmVuczdtR3l1dEVUaFgx?= =?utf-8?B?aTNmYm5PZkhnNXh1cHlhRk8yM1ZwZk8yLzNuSXFLQk5Ub3RPaWJxOG5YRXAv?= =?utf-8?B?K3VVRTVPY1pYTmd2NkRIL093T1p2ODRzWE5ad0hxa1d4ditLSDdqd1hRRVdT?= =?utf-8?B?cjAwOVZDZ3p4RTR2UVUrUi81SUpoR3pmTDdaKzdndyt5L0FiYnVYL1ZxeFZR?= =?utf-8?B?U2kxb3o0L2hoRlVjVDhxUWYrM29CTldwOGdlejN5b1RJcnFiM0NyMXZpNnJ6?= =?utf-8?B?ZStEMEFTdTE3YittdW9HclNlMWdDSUVBb2F2WkFxdWhNdmdFTVJOUnZlb2lx?= =?utf-8?B?R0pEV0Z0VlVDVzNmTFg4aXVBWTY2TzFHRTdsTjNyWXpFK09TZis0bkV5cGZY?= =?utf-8?B?VENhQStoN1FDMld4YUt1NkxFeE9lY3NBTWc2Q25haVBwUVRXUW5HN0FxMGxv?= =?utf-8?B?V1M2aGp2V2Zaa1JZN3NMWG9Mb3gxVXJYOUlncFBIVUdlVFY5UUlhTzNJeWtL?= =?utf-8?B?ZldJVXNxQm1ZbFlRbVhtc21WVURVa1haN3owb1BiSTVjQXd0bzJ5VXo1bS9X?= =?utf-8?B?Mk8rbEtNSVdyRHlWUllEUWNEUEgySERrdEhTSzMrNFZZMTM1MC9RRjQxM05a?= =?utf-8?B?bFpFbUY5L0E2elZTVnpkTjRLczl3N0RwbFpHNWxVMGJ5Wm1OMkQrMjgyN3BK?= =?utf-8?B?NjNwdUlLZDM0V2JOTGlCdS9Rb0x3RldCbnRIRlhVdEEzdVFRYUhJeVlJUlpP?= =?utf-8?B?UVU2dWV4dVNvaXdvdkJJaDR5RVVSMVd2YnI5djZmeUUrUXphTXAwMkMyNE1q?= =?utf-8?B?bnlaMzBYaTFNVExuU2s1SzYvTWxqREV2NVpuQVVmZE8xS1o5a3Z4UkxFeTBH?= =?utf-8?B?UlZLWHNnWTZ2SVhXYUdkYWlHUUNLU0FEaURWVWo3TWVwTDZRd0FPZFFETnNj?= =?utf-8?B?QzRESGZ0ZkhzRTV0TnRBNTUydjd3dVFiYWJBTGlVUWJHTGliTm5CNWFLdHVM?= =?utf-8?B?VEZBYWJsMXJIK3JPdmVXMy8wSnRaak0xdmd1bzZqZmo2L3ptaWhubTZvM2Vp?= =?utf-8?B?UVBFdVorbTJhdnV6N0xoQldyYU5yZnFqWTFRdUZQT0dBdzZ6NDZ5ZFNUSUZl?= =?utf-8?B?M1o2SlVOTU5mL25RSXRmb0FIZGd0TTNYZ2VRakRQUmtzb2t4clhFNzlVRmpE?= =?utf-8?B?Z0l0Nko5WnkzWElSYzRldE1EQzV5NU9rUHpCcUlMcXI4dmtoWjJURGgvV0ZW?= =?utf-8?B?Wlh1VHlBWGd5TFlVdSt5R2QvNWJGMGltY1czTGZodFN2QUY4M2g3VnYvUERj?= =?utf-8?B?NUxvNTRJMFhmcTQwQXpQUUhNTTQ3bkVwcHYzMUVPc1RMYStTUUZKRXhRTW1N?= =?utf-8?B?STBmU3BQdE1FdXk4YWtLNE5NSFpjMkk2ekMvenpES1Z5c2FRdHlIaTJweWJK?= =?utf-8?B?YnRtbXhkZ3pSZSs0Wm5WVWtHZVRQY1o0MFk5bWxkRi9OY3hsSUZqL09EN0ZK?= =?utf-8?B?bE9GK3k4TUJuM21DUUJuMG9EeU5XSFJYYUYvdjBDNWd4a0w3bkpxVUE5cTQw?= =?utf-8?Q?BfY23n9c7shnaOxx2a575K0hp?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 46efdc5a-3bbc-460a-8941-08dd45ca975c X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Feb 2025 09:50:58.3038 (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: Io+7gP/2CbHbE0mQuj9IAFvkuFaxq7r5rc2ij40yrAo7/tgzTFDcKovVext+nPZtZhFJYPMNsFJIOi3cMOs/fg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB7783 From: Peng Fan Parse the Spread Spectrum Configuration(SSC) from device tree and configure them before using the clock. Each SSC is three u32 elements which means '', so assigned-clock-sscs is an array of multiple three u32 elements. 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..9046a7710236839a30a72dc15c5= fcebdbed5e9c6 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 =3D sscs[index * 3], spreaddepth =3D sscs[index * 3 + 1]; + u32 method =3D sscs[index * 3 + 2]; + struct clk_hw *hw; + + if (modfreq || spreaddepth || 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, spreaddepth, method, tru= e); + if (rc < 0) + pr_err("clk: couldn't set %s clk spread spectrum %u %u %u: %d\n", + __clk_get_name(clk), modfreq, spreaddepth, 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 Sun Dec 14 21:32:12 2025 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11012039.outbound.protection.outlook.com [52.101.66.39]) (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 C5CD022ACCF; Wed, 5 Feb 2025 09:51:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.39 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738749072; cv=fail; b=e5NmJ9rS/vZ3JcJ80GlfHzDoh/ahyUNj0eu9wFjC637cv7ljmvYvzRx7334KJGNgP+9BGT/ZleuNkvlALnlv5mK6E1G3uEVoIsxvFBTcMug2vGs5tOF+/D3Jfgt708Hl+/dOnpvRimGfVdDwwJ/N1AiG5CZFRjerOfEs12V/x5E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738749072; c=relaxed/simple; bh=ffwsmpBfIesNfYlPEG/PfN+LdQioWrnxKIIBsXlzFHA=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=Zanc3dKPDIPRg3t+Nj6BYg5lRIrNBub9FZrubepzs4jA3c3A+Ex0ANGRABK9kZ0SpQjZ/AuzfT3/KOIa9DxC5dGqd/Hmdv9vNgIJbLY4Rpgj2mQER0nVHcq2cV5zTWWw916G9cXqoA4mfZf73s3iQlA3Zy6pmmvkUfTZFD0Sp0A= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=J1xdtgWn; arc=fail smtp.client-ip=52.101.66.39 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="J1xdtgWn" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zKdqJ17+gGTbPxz6rbeoNRRZhFxgUVWKZGiSrlYs33Rb+Tj4hnApJihGmz14EXEVoY22FjGWXA6rSM3H5EJ6W0O1+H9JJ6W0kMcm9UfSu/TBZ6tO8rpO5CpflQPZtkGQXUhZ+jqi70QQi26RNCiGYL37D9OwNEoWAWQlMdrQQ/+hFOhkZk9IQB3mGa+HtWDTF6J5UrxthWrm9r5oiGqpRDtNPnkKUPo0yNWLys1w0ePdPIaItFW9fEplu1Soe0ZqTHAIELMmoOJsh8xOdTRYqUdQwrY9N2HMs6A0cZ2CEVkQhVXqIR0y5zmXuSB5m5omX2NStjxEObPYOrXk050z6g== 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=gU7+ZP6pMIoCBsURY7iz7g3g0e2ppp8+Og0/JWVDMQo=; b=h/PdDDCw8PiY3uPuFTncWeZmvhh8NEaLAIAheqU2UD5vwYpK6VbbHAmVFALuiJ82FnCwfTrm5nuEHAEFaXNtbZq/vrNw44FOrOBjKP78ohdSeZjn3/HiUeOgd0j3FxLcJ/XHbFOSYglvVlLsNXR/mEZ7VlXLwQIRSDV6uxMUozwzaAhUh0jxZfbgdO3ClSV21J5/tWl4m+7GDCf4aKEvI0q3tJtXNQDlx6GMInbV8VxqFE/7ii2VT3Amb5rwWqtFTYXCZR2d0jTDOmrrS4JExZ+Xlv4ABAOeawoSWZVgYiT2FDYFDxKU3L/jvMCUBaPPSxiX5/BOuvvI9Lq/NEv6TA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gU7+ZP6pMIoCBsURY7iz7g3g0e2ppp8+Og0/JWVDMQo=; b=J1xdtgWntkshYnG8paNWhAn4P5OJ8QigOFrScMnbqdoYLG7XS/z7OvugYmVisobnw2/UYRd1+S9egY3mrTZWstx6uphnSbXF0t8wPk5ZC0w30M7egIhIiHJRBFJLg7gJa6PHhMv17KM2a2wWpUwX8O5zSmyQ0Rp2lkfH2kVwXHbjudyxDKEKpcJYuxEf1BBXex1zkd1ySMb9FcanZdztgJd9/LEKUX+mg3gbhP1JeZOWO2KQaefdGDxfpKMwsQe8ZNYinh/MKjk4wZeww9sUC5YyH7DIQTdYJfVrZOQub0ChDSbh8WV00HwkmpZMurtzimrZ68uUgdB6qPtfRo0p3Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by AM9PR04MB8244.eurprd04.prod.outlook.com (2603:10a6:20b:3e0::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.10; Wed, 5 Feb 2025 09:51:03 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%3]) with mapi id 15.20.8398.025; Wed, 5 Feb 2025 09:51:03 +0000 From: "Peng Fan (OSS)" Date: Wed, 05 Feb 2025 17:49:53 +0800 Subject: [PATCH v2 3/4] clk: imx: pll14xx: support spread spectrum clock generation Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250205-clk-ssc-v2-3-fa73083caa92@nxp.com> References: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> In-Reply-To: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> To: Michael Turquette , Stephen Boyd , Russell King , Sudeep Holla , Cristian Marussi , Abel Vesa Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Rob Herring , Krzysztof Kozlowski , Dario Binacchi , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , imx@lists.linux.dev, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1738749007; l=4349; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=KRcjOzvpw/7k3Zo+dpLijDzx/J9AIHxlTggTa6PQqN8=; b=dULJcJfhwx1CNhkmzPH2eq1dJp374iXcZANZt/po7lNTP/oHHSUx+wsXXkuNMqxX+QWq7z4sH xa2blyq4zu/CyX3LoN9Sd8mtJamG/7bfFaMyji0QIsGjFoNfwvxNUaf X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR02CA0037.apcprd02.prod.outlook.com (2603:1096:4:196::8) To PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|AM9PR04MB8244:EE_ X-MS-Office365-Filtering-Correlation-Id: f3fa6fab-61b2-4922-33d3-08dd45ca9a7d X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?NFVWME4rNDVObTlLTXVNblh6VEQ1eG1Yb3hCamJhSC9SeW1rMmxLcmlzRzVh?= =?utf-8?B?RnRUN2dLc1U5SUxIeURwdml2TnlmQWNCT3YrWWVEL2k4VVFmZmhXazNtTit2?= =?utf-8?B?ZXA0SHFqeTZQRlY5WTdlUmtxU1dTbmlsNlUrVWV4c1pkakNSV0twOVlaOGVW?= =?utf-8?B?QjZ1UGg1RGVKR3VjTXJ0MG9ld1ZuVWtvT05QcVpvY1c4cnU5UTV6UkMyUFc0?= =?utf-8?B?RzdsdnZxQ21JM1I3VHN3UlZnK1A0VnJ0UEdjYXZkeUY1ay9pT2xBQ3ltQTBK?= =?utf-8?B?dGZBWC9ZeXlpdi9GR0tFM0FYRUlCMS9PMURnUnJBK0ljdXlZcmdrQlhVZURo?= =?utf-8?B?Y2xPUE1vdXd1eURyZkdKbTRzeHVTU2xXdXJnN2ZNQkNoNi9yZ2xWTzZMRkNY?= =?utf-8?B?NXBDa0hCRENQNVU5ZWNsR2s5Wi9Ia29EOFhjMlRLdWZmK3ZlTktVK3d3SlhM?= =?utf-8?B?SXovQXpEM0UxcHJEalVEam4rRThjbXlBYlpZWTNJTjVkbThzY1VCb0FzK3ZZ?= =?utf-8?B?NEJvc1RWdmd0bzNzMjhzWGd4OFdZUFdvL2g0TFkwYmJtSE52aGtxVnZHZDJN?= =?utf-8?B?clVsVFRUVW1MTGU3MytxdVAzUmtaV0xkbXlBZzM3N1NUbGhBMjJvZFZNQncw?= =?utf-8?B?OEVpVHNRUUVWWmcwN0EzcTBBdnVZaFhwMzFTYWpmMmNSa2NzbjNLR0NBZE1l?= =?utf-8?B?VkYxcGQ5OGZjMnpZOTFRd1NlM1d5UGdoT1JZSlJqcExoMUdGaXRZODBsWHhR?= =?utf-8?B?dUtwVTdUL2lIZ0U2Z2dOVkw2eHRNRXNRRXQwNS93V0RxS2RYWEt2YU5HVHZF?= =?utf-8?B?VDMxKzgzdXE1a1V6VXNtZ3BUOGVtSTdsalJXNTFEZFR1RGxXc2RRcEo0Yzln?= =?utf-8?B?RzhvVDFzT1pRT1pHVG4vaks2YnJmN0oyRG45ZlFDbStQcDhGVWdBeUxDMlZ1?= =?utf-8?B?cTVTTERDc29xTTBKeVJxN1lTN05QZklpTkwxTFJkUVBMYW9aRk9mK29Ga2N4?= =?utf-8?B?VjVTcnNVeUEvMjE3VjFJZE9tUWVxdExaSkRrSW95clN2YzV0NElaUG55UFpz?= =?utf-8?B?bmpxNVlGYTNOU0gvTXNTNTdIczlmVlFEc0NlcVJBSVdDaU83UDFNYVlWcm5Y?= =?utf-8?B?OUF6THdKdzRIYWxjZWNwZTNZZXlmazBZUjVRV0ZwUGpPeTgzbUR2Z3FMN2hF?= =?utf-8?B?TExPYnhtRk11M2hNb056Ymw1TE9BWFQ4c3Nya2lhOG9ubkoxbllBMHR0S3RB?= =?utf-8?B?aksrSkVXVHI4SzFPb3M4cTJGSDExNWpIYzNLUytsQmNaTzdyMFo0TFR4aDht?= =?utf-8?B?RU9tQTFlbnNjck0zL1Q0VTVGWDhyNTNOa0RkbEZSRTNjY3dNM240b2VnMytG?= =?utf-8?B?Q0RRcnpQSUkremtmc1gva3B6VDdHbERlWjZZa0d2UEZPTnJjVmRpdjJ3SUFS?= =?utf-8?B?T1ZDZU51eUZJeENFeXFOSlpYdkRKQ2JQdE5rSFZIUE1MUmJGNkN3WEgrZEx3?= =?utf-8?B?dlZiMlhXVFRyb09iOGE1V0t1YUtxd2hpdm8vZEJJY0czMGdYVzRMWE9oWTcw?= =?utf-8?B?elRNaC95eWRJNkZ1ZnJLN29uang4YXZlQldlNTQwRWNPUWpBR3JWNmFQeUp2?= =?utf-8?B?SmgyMStHNHhOdkJuVnlvMzNadjdROXRPWmtHK1ZxbkxQVUFtUjhUL3ZvbVdp?= =?utf-8?B?Rm5abkp5cXRIR0RueFh6SU1VRXlMVEhTcVBJV0pycGxNMGtGVGx0TWY4NllC?= =?utf-8?B?NlJ0UE1HSThlalZRejEvOWFWYllOSDJOUDdvdks4eVU4NXU4cTlXbFc4dldq?= =?utf-8?B?RmhoN09mTkh5YTdValdpdGxLcUFDbGZnNExPT2x4eFVYMkhxV0NDMUFUd0xi?= =?utf-8?B?cjhnV2Q5dFJ3RjNabkhIQWlyZjdZblVqUnlwdjlERWJFdVB3U1hFR2dON1NY?= =?utf-8?Q?M8XSca2H9XcB8ga8eOWdmM0HNbukED25?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eUhIU1Rpc3JRSytocUIyeEZoT3QvWUVseUFtcDhDRkxENlU1ZGJRaElDdWJT?= =?utf-8?B?eXYwUDl4bjNKQkNRVlU2RHg5aURrNWkzMXNuTEtvKzVoM00yL1dJS2tQOWsy?= =?utf-8?B?di9mRENoYXAxQ1hOUys5RWowVG0xNWQyeERjRW1UUzRFNThrNFN2WExibWFU?= =?utf-8?B?VW1OZ0RPTGVIdE9URmV3cTRPRnBucHRCNEpRUC9vaU5uRU0vTWVrNFpKd0o1?= =?utf-8?B?S3hXVHBWR3BnNzhXSHI4MW00WVBNVHlKZXd1Mm4rREgvRmxvZUZpZTJtNjZG?= =?utf-8?B?KzQ2QjlTd2pKTitseDdick5vVHZ4ZlcyZjJnZVRVVUdnR08raDhzMUVLVjN5?= =?utf-8?B?WXFYQUJEUmJyYTBjcVlQNXRkaUF5RzV3V3lIRUdBSkRyZ1FrdHIxQzhoZUsv?= =?utf-8?B?WnFpWC94Zk9IbE0veGpOUXN1c0ZDWHVmcjlMaTArQllISGY4NXQ5Q3RWNkY5?= =?utf-8?B?K3NLWnV4dnk4MFZ0eStvQ3N3M3lMTkRSZGFTMkNRQmdLdGYyWXVDbmVsL0lI?= =?utf-8?B?dWw0VTNyaXIyY0w5YWZjZWhoTDBiVnNteTNSSGZHRnY2dVpjUjBZZWtjWncw?= =?utf-8?B?bEIzUmhuZnVEdzhUNEtaOTFwQk9BYUpHZmRaRWs1UGQ4TUhjVkZCSWNkaFpK?= =?utf-8?B?RGhtM0FJS2RlR2h4S1ZlVDZXaGNTb04zV3RteFpINTlLcVBGRmw1RWczZmVv?= =?utf-8?B?ZEZibExBQzg1QlQvS29tSytRQUVtd1RSVFhOem4ySlBRcjNjK0NraUhLd0Vq?= =?utf-8?B?aFV1MHJIRGdyemdMb1ZnRDZxNmlpMko1eTlnaHRBMjFqU2IzVHpJNGhVNk94?= =?utf-8?B?dGZPQ1Y3YkcrTzZ4enNoU0xxV0dlMFg0S3VVb2RjMXAvS2pMcmN0VUNPeThx?= =?utf-8?B?Z21PemlPNnJ2bjFHOHdyOFJBYmRVeGFEKzJuaXVqcWM2dTU0aG10WlMvaFFV?= =?utf-8?B?SWFEQndLVzd3WFBoYmpJL3RxTVBVczBhZURFeEU2L2gvWGJoMmtNSWpMVy9i?= =?utf-8?B?dzNmYmg4SmVBWCs5MXUvZWlBNGc4cWhURmpqMmxKTTVMYjhhUmE5V1F6a1Zm?= =?utf-8?B?SlpldHE0OWc3dW1sT0xXMlJzOVl2OE9qWmJYK2FpVjVwMy8xNFFUdTR4Q0Yy?= =?utf-8?B?RW1IZUQ3RE9qeEE4ZFBlWE5ZLzdVZVBUWXNDM09qK0c0WWdodlV1bzNFQzc5?= =?utf-8?B?QW44aFJXSjdaWmw4SlB4dDN4RXk0dGJuZ2dydW5IMFdUczU0SmxwY3U1WGpk?= =?utf-8?B?VmVYcEloL2R6OGRzS1ltU3l5amRRL2hlWTR6Y0gyOEhGQmVkV3diMGRVWUcr?= =?utf-8?B?bnNQdmNEZkZvNXV3RnA5dXd5WHZOc0Z4LzBKUGpTRFZCOHZHWU4rUWVZMFpF?= =?utf-8?B?end5cGpTQzB6NUIrUW84QVE4TGpvME5WcGZwQ0VxbGYybUFHb1ZUY0FhcHZU?= =?utf-8?B?ZmQvOFBoMDRDcnZwRGpoNlI4VFgxaStEc2xET3FVbGNXWWhzdlFVL2Z6YlBD?= =?utf-8?B?ZXBxb3h4dHJRRkV0S0hMZ1REMDhkMG1wQjhtNjYzMDdCK2VmZXV4b0drWVM5?= =?utf-8?B?RUxka3ZlQnEyQVVZNHg3Wkw4QW94Q3NSalg0SXVRb3dqazU2bWE5bW9MdUkz?= =?utf-8?B?N3dQMUFBeVQvTFJJM3g5bW1hY0kyM3JQcVkzTFZXYmdyZExEeDY3ays4dngy?= =?utf-8?B?TXBLVTh3NGdTaHd5WTdSOERteGNaYXV5cEk5THh1anR6ZGExbHRBQzROa0dC?= =?utf-8?B?MVBXMDI1dkRQRGpSMjlzNWNHK1ZLY25oQmNETmJMRXBvcGNQZEN2WFFHTzcx?= =?utf-8?B?c2MvTXhiano3MjB4S3ZGVEhWTTZLLzkvL2RSbFJneU5EN2hoMmF5VU9YVWdt?= =?utf-8?B?b2lqVEdEUUFWTGFhKzI0a1VWcHJCeVk2SmJzZGc0d2g0Tm9sNk5BRG9LZ2Ry?= =?utf-8?B?OUVQektVK0lYWFUrUTZvK3drUXZ5UmNuZ0FLTEVFSjlhZERkc3p3QTRsVE9k?= =?utf-8?B?SnhRRlJhU3NybWZQc3d6Yy9wWTJWL1FkNGxjcGFZUkZ3QnlVWm01aUxwamRZ?= =?utf-8?B?RzFmbWwxSE9KbGdGNWJKT2MvaFNqdmlhS0U0SFJGbHBpTEFjZEJzVE9ZUlNF?= =?utf-8?Q?vUBYTBaxe5xxJUVkNGT2suQR1?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f3fa6fab-61b2-4922-33d3-08dd45ca9a7d X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Feb 2025 09:51:03.5587 (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: Ov6tmedNSewPTvPIHCo8ieKC/SxTBdirKj3QC4BfwlXcpaOKPcq88+95hmkoL/rkdnCPTS7wVU3692Z37V1xKA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8244 From: Peng Fan Add support for spread spectrum clock (SSC) generation to the pll14xxx driver. Co-developed-by: Dario Binacchi Signed-off-by: Dario Binacchi Signed-off-by: Peng Fan --- drivers/clk/imx/clk-pll14xx.c | 66 +++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 66 insertions(+) diff --git a/drivers/clk/imx/clk-pll14xx.c b/drivers/clk/imx/clk-pll14xx.c index f290981ea13bdba3602af7aa44aaadfe0b78dcf9..3bdce762a9d651a6fb048dcbf58= db396af9d3aaf 100644 --- a/drivers/clk/imx/clk-pll14xx.c +++ b/drivers/clk/imx/clk-pll14xx.c @@ -20,6 +20,8 @@ #define GNRL_CTL 0x0 #define DIV_CTL0 0x4 #define DIV_CTL1 0x8 +#define SSCG_CTRL 0xc + #define LOCK_STATUS BIT(31) #define LOCK_SEL_MASK BIT(29) #define CLKE_MASK BIT(11) @@ -31,15 +33,26 @@ #define KDIV_MASK GENMASK(15, 0) #define KDIV_MIN SHRT_MIN #define KDIV_MAX SHRT_MAX +#define SSCG_ENABLE BIT(31) +#define MFREQ_CTL_MASK GENMASK(19, 12) +#define MRAT_CTL_MASK GENMASK(9, 4) +#define SEL_PF_MASK GENMASK(1, 0) =20 #define LOCK_TIMEOUT_US 10000 =20 +enum imx_pll14xx_ssc_mod_type { + IMX_PLL14XX_SSC_DOWN_SPREAD, + IMX_PLL14XX_SSC_UP_SPREAD, + IMX_PLL14XX_SSC_CENTER_SPREAD, +}; + struct clk_pll14xx { struct clk_hw hw; void __iomem *base; enum imx_pll14xx_type type; const struct imx_pll14xx_rate_table *rate_table; int rate_count; + struct clk_spread_spectrum ssc_conf; }; =20 #define to_clk_pll14xx(_hw) container_of(_hw, struct clk_pll14xx, hw) @@ -349,6 +362,42 @@ static int clk_pll1416x_set_rate(struct clk_hw *hw, un= signed long drate, return 0; } =20 +static void clk_pll1443x_enable_ssc(struct clk_hw *hw, unsigned long paren= t_rate, + unsigned int pdiv, unsigned int mdiv) +{ + struct clk_pll14xx *pll =3D to_clk_pll14xx(hw); + struct clk_spread_spectrum *conf =3D &pll->ssc_conf; + u32 sscg_ctrl, mfr, mrr, mod_type; + + sscg_ctrl =3D readl_relaxed(pll->base + SSCG_CTRL); + sscg_ctrl &=3D + ~(SSCG_ENABLE | MFREQ_CTL_MASK | MRAT_CTL_MASK | SEL_PF_MASK); + + mfr =3D parent_rate / (conf->modfreq * pdiv * (1 << 5)); + mrr =3D ((conf->spreaddepth / 100) * mdiv * (1 << 6)) / (100 * mfr); + + switch (conf->method) { + case CLK_SSC_CENTER_SPREAD: + mod_type =3D IMX_PLL14XX_SSC_CENTER_SPREAD; + break; + case CLK_SSC_UP_SPREAD: + mod_type =3D IMX_PLL14XX_SSC_UP_SPREAD; + break; + case CLK_SSC_DOWN_SPREAD: + mod_type =3D IMX_PLL14XX_SSC_DOWN_SPREAD; + break; + default: + mod_type =3D IMX_PLL14XX_SSC_DOWN_SPREAD; + break; + } + + sscg_ctrl |=3D SSCG_ENABLE | FIELD_PREP(MFREQ_CTL_MASK, mfr) | + FIELD_PREP(MRAT_CTL_MASK, mrr) | + FIELD_PREP(SEL_PF_MASK, mod_type); + + writel_relaxed(sscg_ctrl, pll->base + SSCG_CTRL); +} + static int clk_pll1443x_set_rate(struct clk_hw *hw, unsigned long drate, unsigned long prate) { @@ -370,6 +419,9 @@ static int clk_pll1443x_set_rate(struct clk_hw *hw, uns= igned long drate, writel_relaxed(FIELD_PREP(KDIV_MASK, rate.kdiv), pll->base + DIV_CTL1); =20 + if (pll->ssc_conf.enable) + clk_pll1443x_enable_ssc(hw, prate, rate.pdiv, rate.mdiv); + return 0; } =20 @@ -410,6 +462,9 @@ static int clk_pll1443x_set_rate(struct clk_hw *hw, uns= igned long drate, gnrl_ctl &=3D ~BYPASS_MASK; writel_relaxed(gnrl_ctl, pll->base + GNRL_CTL); =20 + if (pll->ssc_conf.enable) + clk_pll1443x_enable_ssc(hw, prate, rate.pdiv, rate.mdiv); + return 0; } =20 @@ -465,6 +520,16 @@ static void clk_pll14xx_unprepare(struct clk_hw *hw) writel_relaxed(val, pll->base + GNRL_CTL); } =20 +static int clk_pll1443x_set_spread_spectrum(struct clk_hw *hw, + struct clk_spread_spectrum *clk_ss) +{ + struct clk_pll14xx *pll =3D to_clk_pll14xx(hw); + + memcpy(&pll->ssc_conf, clk_ss, sizeof(pll->ssc_conf)); + + return 0; +} + static const struct clk_ops clk_pll1416x_ops =3D { .prepare =3D clk_pll14xx_prepare, .unprepare =3D clk_pll14xx_unprepare, @@ -485,6 +550,7 @@ static const struct clk_ops clk_pll1443x_ops =3D { .recalc_rate =3D clk_pll14xx_recalc_rate, .round_rate =3D clk_pll1443x_round_rate, .set_rate =3D clk_pll1443x_set_rate, + .set_spread_spectrum =3D clk_pll1443x_set_spread_spectrum, }; =20 struct clk_hw *imx_dev_clk_hw_pll14xx(struct device *dev, const char *name, --=20 2.37.1 From nobody Sun Dec 14 21:32:12 2025 Received: from DU2PR03CU002.outbound.protection.outlook.com (mail-northeuropeazon11012039.outbound.protection.outlook.com [52.101.66.39]) (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 04EF722AE71; Wed, 5 Feb 2025 09:51:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.39 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738749075; cv=fail; b=cs0PJxFFamofKgipi09HVbhHcIEJy7jqgEJPMzSY9hp9xHBsofyIaMMC34jAAaZgDSX8RlbTcDCO8rJg8rZfdP7dOtM09jFibDWwW58SSku3VuzI1GEcj4fF9IqBIqrJvFJSaggkZCFf9bvw4wbDq2K5RLI5xFBvTlRwBDZ6ruk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738749075; c=relaxed/simple; bh=v1e5pi2PfDz446SWcQwQdj0fRAxs4FrX2UycOK5iTJM=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=rv+zO8xZ2fB7ONLBGc8CzUV2QvfH3UCpiPGGciInm24R6JqUVmBXIzS/6mMHsuGGo5BnS+pnDp4+RY88IP6M4rgjh3Y21Y3Dx///BbLZvLaVz02Q5maOpdzjBEtmWHUiRnkjHO0cj3+R0rCvLz7p5F/ac4XNNqrRsag+oPZJLDs= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=SQDvZOD5; arc=fail smtp.client-ip=52.101.66.39 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="SQDvZOD5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=a1Kuk8DBxxqA0Pc1ezhn/9b4Uo2lau9LdDJzB2ymmqnUccOBfosWjFjrrhahmSe/a1QJh6IY50v5GrbWjFOeA21yivWfr+eYjqjsQXE+kQOwY9xTDmtTFQd2r8Pup0+jm5F7Ex/G/yy/Wj6gkXdwdYfL3bbnBLd65qK+ytOaogwaAW1IJQpEgYZ6cr6jamhwdATmTGoBCTfA4QzjnlDZRahQTlcESKmwsz35akQZA7IZnkQ1p4V+zJMDQEC7TBRriN4NlAKMwOi53XI2+rjatrVtZynNwDFHpwoCllUQhhw8miBbo3fEM81SX3OAeQQWftI3xgh3pihkLFuT3p5K5g== 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=vZ7ABMH2IHcV0+Ndy6UOvfqlEln4Y6asVXxKsblBmqw=; b=OsnPIjtkt5J2o04pbQZZfChz06Xf38xGeF4Rw/W2VEC0jbXF6pwP66vsQ9PlpE6QYxhmcbOdhcqvm0BoAYMgETB4DYap9gcKkk/S2PxukodYB8ON3fRhk+PXZWyxARZXZA2y7yEBy1rlAG7FhGafR2E8ANcHDQCi5EQtO9soi+QClwH9I3NOe+731XIcvaAcJSphyReVPaa64wcAhLcJdJk6BJPyyUdLZisP1+5I4CjyItQnAG1XtdKka2uQvWi5y8hMnF7QrociLRQcgje5goNSNTE0vC6OypjYUSkKj3VYc+UiE0YjM8JgeoFXqkb8aS3bS7hgthQkwrzlLXHuCw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vZ7ABMH2IHcV0+Ndy6UOvfqlEln4Y6asVXxKsblBmqw=; b=SQDvZOD5wN8PiLYToTTsvsZPY6xv6Z6rx8zww5J4heB6eCm8F1EHQ2hoiKGh+ZijET+MwHV295WQn1Ll3eWGF7i1RS5uPyFL/rO2roobNGL04BHy/z730OBMgAfBV2GqZwiLnCkv/hYUlvZQrSQItFtMoN5DkgbyD91I7tGs3yPwZWzQC8FVgXPqUZtFg+qW6f3Aj3W12Rk9VjBTswcZGYwfyG0orBvD8LzK/zhp0gpAThPGobtxShHgqo70dUAgrmM2X2wPrIAkbllC3W6vEQbcKopaNxX03GsMDOOt61fKleKdSYrLpjxI+Dow0X0v0jauxR55qIb5yigAeiADcQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by AM9PR04MB8244.eurprd04.prod.outlook.com (2603:10a6:20b:3e0::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.10; Wed, 5 Feb 2025 09:51:08 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%3]) with mapi id 15.20.8398.025; Wed, 5 Feb 2025 09:51:08 +0000 From: "Peng Fan (OSS)" Date: Wed, 05 Feb 2025 17:49:54 +0800 Subject: [PATCH NOT APPLY v2 4/4] clk: scmi: Support spread spectrum Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250205-clk-ssc-v2-4-fa73083caa92@nxp.com> References: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> In-Reply-To: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> To: Michael Turquette , Stephen Boyd , Russell King , Sudeep Holla , Cristian Marussi , Abel Vesa Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Rob Herring , Krzysztof Kozlowski , Dario Binacchi , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , imx@lists.linux.dev, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1738749007; l=3821; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=B9bkg4LSg3rabVuXSAhnz4jgp6FzySdE8U8t9y/s84w=; b=JiIpKoY3It1u1s5pTXVSdzCslISD29ZwN25JniPJkhwdy5LP8VA6afU5GELgEtJTbjycn+2mc pKpHAAMs+N/DcnnQHDhPTUiDjRxxKjaSmb4thjH6OWBgqGmJBPiG97u X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR02CA0037.apcprd02.prod.outlook.com (2603:1096:4:196::8) To PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|AM9PR04MB8244:EE_ X-MS-Office365-Filtering-Correlation-Id: 35e3e5b2-9e26-4bf6-3609-08dd45ca9da1 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?OTV6QzB6Skh4ZThHb3BEemo2Zk9WVm1INno3QmlDVVgrSHVWRmhqdUhYSGtU?= =?utf-8?B?UmZCZ3BlTzAyYy83dU5XNEQvelFQOTJzTTlnUmZhTjdKcW1LZ083eXBiNE9Z?= =?utf-8?B?cUowdmJBZmF6U2lRY3N3dHVjd2xWWXljSWZ0ZCtiWDMybVpkSmJHY0tnZDVD?= =?utf-8?B?eklFd2QveEEvcVpVRFlEOCtRQUkyZktRcVFGclM0VlI0c1Zod25ESTc0ZWps?= =?utf-8?B?WVNvdW0za3BQV0ZibTFhODc2eDE1MStLakJLeWE3Z0xBbzVJc21FR2Y5WXpS?= =?utf-8?B?WHJ2SEs0KzdHK2V5eGNodEk4b0tGNVo2MW44TGlTMWtMQjFmeXBXQXBrN280?= =?utf-8?B?aENPa3R3eUpNeUdhMlNuWlh2WlY0Y2U4Q3k5QkJZSUcxejZLU1hKVTlkbUlR?= =?utf-8?B?TFFXZG5uWWZnYzFteDAxWUFOTjJRckxzMHhZdzNKRVkxUmJsYjJtRW85WGNo?= =?utf-8?B?V2ZQVGw2OEhiZnFnOVFaYmZ4RE5kbUpDV201Qjlxc1lvbjBIM0E4d0I4YkZ6?= =?utf-8?B?QVRpVlRxby9lZnJCdjV4Zi9GSlEyQkx6TEJldHUvNTNYeE1LakxMcGZFSVZi?= =?utf-8?B?dklMQTBtRks1RGQ3Y3JQcFphOXhPTGJ3UURxZUtXdDA3NFU3N0ZGb2hrbXpr?= =?utf-8?B?VURPaGxnb1dtcEllQVF0VE9wSk8rWGYwbUMvSUx0TDg1WTB0dWJiZEsxWEF3?= =?utf-8?B?b24wOXR6aXZsR2lyVmxPWmE4cmlFNHM2VkNBdGdQMm93NGNSdDVCK285cGZh?= =?utf-8?B?aWMzR0ZNTThUYUlsbUZ1WWhHV1NSV2ZFMmFld2tFTDVYc216SW1lVU1pbnJn?= =?utf-8?B?dmUxRUFLUkhUemRydjFBMGtJV0c5VWpxazF6R3BZNG5SNlkvaE00eWFsRWF5?= =?utf-8?B?MnZRck9UYVR6WUVpNSs0ZVVKSUNkNXJTRnh6VmQyeFRLd1lNUFRDeUdCV2NM?= =?utf-8?B?THFYaGEzc0xiVzU4aS9nVHE0T2ExdFQxeHB6NC9Sd0xtbmlFb1F6QnZLMHU5?= =?utf-8?B?aUVNaHQ0ck8vcTRlYXZmcFRoQTFveVNxS0oySHVKcVczWExjaUNUd0E3VmtT?= =?utf-8?B?QnE2UFBxajUzaDJ1aVlReVRpSW5vWmFkekErYThxRXZkVFpxdW5RREtyeC8y?= =?utf-8?B?MlR2ODVlcTJpWWNzS2YvU1MvZlBHWll4Z1pjK05FYWlWUFp5ZXVOanQzQUE2?= =?utf-8?B?NzFrU1B0ZlZoa0M2NUlIOXFhMmJoWCt2clFmU1hmbWk1bUZIc3BibkFLVWJz?= =?utf-8?B?dWZSVWk2Qmw3b0p5b252dHE4VGdNTFNHN1FTTVlNd205ZDlDRzI2Qk41Rjlu?= =?utf-8?B?MGMvR3haYnMxZVgzdE9LMzZtY0RvRm9pS0JhNEhSbXRnZS9zbDQ2N1NyTjFN?= =?utf-8?B?YjhNczdwMk1kclNWd1JiVm1EbFFkc043T1B0WVIyN2lYbzg5R0xTMzcrK0dG?= =?utf-8?B?OXRBZ08vd1JzR1VyWkFqeGd3VWRweEFwYjlYdkY1QkNTb3J6a3p5WkJRMkRS?= =?utf-8?B?eEhYRmFkQ2JYVk5TVzZuUzNWSGlGdXNmQW5GQ1ZtaVRsZ2s3LzUrbmJ1Tk5u?= =?utf-8?B?UHdXcmdWZUFkUnFMOUVPakFKNE1MYWhKdXFzK2NFQU51WHRoY0pqUytpVVRm?= =?utf-8?B?ZmVrVStaZkN0Sk92YzA5bzhZL1dSOEVGMXBPMEs3TE5IcDhxbmc0T200aXli?= =?utf-8?B?STZPZ2hYVHA2QTVWQTRCMXVJdmoycUZDTTVYTWx0K0FEd3Rwd1UvSllrbVMr?= =?utf-8?B?R3pqTVJiR0oraHdNdzl3b1FMWWRIdDZKK2dCVWFpTE91eHQyQWFSbVltUWZs?= =?utf-8?B?UU9hV2NqTnY4UGVvdEJFT0IvMk9qL2F5dG1kLzhPNXRnWlkwUnExRDdQWnhM?= =?utf-8?B?dHoyUkZqUWdZM3VVWmRuTk12OGdDK2RmbytmL0JuNmZpRGV5MUhYVzZieFow?= =?utf-8?Q?RGgeV008dx3VJdMAVOmTtCPY7S0dTL+w?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Z2ZtY2ZwUHkvU3dTZjBGd0VsOGdYNlhOVDdvdkltM0VLNEh4c2lJOFRiRzNI?= =?utf-8?B?clJWNkVXYk9pUnJHL05Dem9HamVNZkJRRGYrNnQ2aHhWTVlXWXM3WHFtRmJK?= =?utf-8?B?d1hQenhmYncrS1BlbDgrbERvTk1ydW9vbUFJU1pOWDMvdEp4RG5nNnhtcHJa?= =?utf-8?B?SkFneFQyZTNqb016OFpUVldiU1JXaFI4T1NhdDA4TE02cnpPU3RYRjhFajVG?= =?utf-8?B?c1R6a0xwNW1lZ051MDMzVCsyeXZmSkd6dndJbDFMMmt3TC9rcEg2UEpWcnV5?= =?utf-8?B?UGZoQUN0WitsT252eE5pVDEvZ1NYbkR0NU5YUzFYN21mLzFKRFVXaVhHemVh?= =?utf-8?B?ZS9yTlVxVjNqQkltU2dNcTFScFFLSGwxeHg4dm53TTlSdEh2OFdyWUxwYklG?= =?utf-8?B?UHB4UjNxSklDdzRoUWR2cisyRG1kanc3RzVQLzhPNTZHMUJCRnQyRDlDZFdv?= =?utf-8?B?S1ZPdVRKeDdaT1k4a3lBNzlSVEY1OThGbVNyeG14Y0hQQWREWnEvbUFFQ1NJ?= =?utf-8?B?WXRQY1c0MWs5ZUdVQWxrK3g3K1VSbmg5QWMvM1FleDdNS1pySFlkWDNxOTFY?= =?utf-8?B?Q1VUNm5OcWM5cG1jN3EwM3Q3aitxOEhqdUR1N1hwTjNvRGV2RkZ0TEpMejFB?= =?utf-8?B?WHVNZG1LTE84M09sRGVrL0t1QXFEcUJKK3dEMmpCcEFkcmsyR1llTTBYR1hI?= =?utf-8?B?OG5IWHBnSkpVOWszS2VzaE43TEJ1aWttMzZKTHBPc1dXYktXNzU1L0tpRHZz?= =?utf-8?B?RG1ueHR2VFRULzRrbHB3S1lFcDNCRWl1Y01BdWlzd3pTUjZIeDJERHMvUXhR?= =?utf-8?B?VDd5RjAvUHRQek8ySHpoRHNTNjl2UEVUeDJUcmlDa0JiQUNmS1JvM21ZMlVy?= =?utf-8?B?MnNmUkl3ejdBK3l1MUh4cVJNcHhtYXNrOE16YWhaaG9GMkVSczk1ZFNPMy9p?= =?utf-8?B?SGFQTE93MjBORmwvOHBudmt0Tkg3UWZEVUZOcUtsRFBQUmlDUXZ5Y0pteGJV?= =?utf-8?B?d3liSFRUd3k2ZXExV2J3NlhIZyszMXdjMUUvODQwY0E5aHlWZFcxTC9SSjRs?= =?utf-8?B?VmYwdVNVSWM3dmFPdFZjOEc3dnJLOGJrNVQ2dUFRZHFScEFFVDBIWUYzVG91?= =?utf-8?B?K0haS05RRG81aEVIb2NQTE1Ob3ZwbEt2cXUwUTFJWE5DWUc3VGczYkVETE91?= =?utf-8?B?c0h3c1dRMy95NTBRQzdXWjBVdjhDSUFVK1daY3dCeGFETDduZllPdWlKK2xH?= =?utf-8?B?TTQ5SDZVeFBFTVN6YzlUR2VjTTQvQVAzVWxpUzZQYjVhMGZ4cUFWdC81T1Ni?= =?utf-8?B?bkFjWmJ3SUNCMHQ2UmpCaGxIYk93c2JIdFRhbUxiNVNhcE50SGFjdy9OOGNP?= =?utf-8?B?K0N4cGJlSlpkeDF6N3RMaVZhYUtBMklKOTE1RWpPbzlGbEM2c0xvMU9YT0dk?= =?utf-8?B?QlUzSWpKVHRKY0hSYzJPMHdRZWVxMXF1UFkvTnlRSjVHd0ZleFplSGZmaHlu?= =?utf-8?B?UGZrdjA3RW5Mcjlad2gvbW9Uc0MvRE81S3NpUCtjbmNCNWkzNzBwS2pJb0lx?= =?utf-8?B?Ty8yeW9MQ2xya2dWT2lBUElEOWNrVkpKeFUrMEtjOUhFS2gzNGgrVjRCRFYr?= =?utf-8?B?OWh6RXo1VUs0UHVmVFZIRW9ZdjZQSWVLekozMXgzaGo3cE9iVEFTdnRvYnpL?= =?utf-8?B?VkVPWlFoTHc2TFhtaGdjOWhIWXRXOUliaEZVVUdTN0ZEeW5jVXhkYWZGRTRL?= =?utf-8?B?cEFadXMvd0NTcWdaSUtNL2l2R1lSNTRWbzcxendJM3VzWjlpaHlSUmpUZng4?= =?utf-8?B?UElTZytTdnErR1NPalRpbHRmNFFwZVBLQlhLN2dJVE9RU2h4VHNEZjJBTkNP?= =?utf-8?B?NXdadGdMa2ZvVmx0Vm5OWFRBN2R6Nit5VmozdEg5Uit4QkxmeHY5WEpOOWVh?= =?utf-8?B?MGRGRXl0NG45ZXN1QVFLY3RkNGU2Y0tLWk5MMG9LVmsrTUZOeDhlYjBwUklB?= =?utf-8?B?STBDeWZ6V3hmYkdEdDd0aXkvU1FMVGhIUm5mQTg1aU9ubURLdUEzVDFjZGUr?= =?utf-8?B?dm1nSWhERlA1MEJWNEdsNlJyd016dDFXUVRPVWU0SzdPcmtuSDVOMS9XZnZr?= =?utf-8?Q?+UO1zx6AWF0p3mhD/6fFqTEDF?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 35e3e5b2-9e26-4bf6-3609-08dd45ca9da1 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Feb 2025 09:51:08.7993 (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: RhqjgRQec0DdnTcoAzUiKiYIbAOtwn5+NaJHLGzNyGSeIZjO9dxgCNgEkQMfaV9nNMPYRWqp59GWD6BNTKfNFw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8244 From: Peng Fan Support Spread Spectrum with adding scmi_clk_set_spread_spectrum Signed-off-by: Peng Fan --- drivers/clk/clk-scmi.c | 47 +++++++++++++++++++++++++++++++++++++++= ++-- include/linux/scmi_protocol.h | 6 ++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/drivers/clk/clk-scmi.c b/drivers/clk/clk-scmi.c index 15510c2ff21c0335f5cb30677343bd4ef59c0738..56b9d0166b0170807c1a83fff39= 1033fecee2159 100644 --- a/drivers/clk/clk-scmi.c +++ b/drivers/clk/clk-scmi.c @@ -23,6 +23,7 @@ enum scmi_clk_feats { SCMI_CLK_RATE_CTRL_SUPPORTED, SCMI_CLK_PARENT_CTRL_SUPPORTED, SCMI_CLK_DUTY_CYCLE_SUPPORTED, + SCMI_CLK_SSC_SUPPORTED, SCMI_CLK_FEATS_COUNT }; =20 @@ -98,6 +99,36 @@ static int scmi_clk_set_parent(struct clk_hw *hw, u8 par= ent_index) return scmi_proto_clk_ops->parent_set(clk->ph, clk->id, parent_index); } =20 +static int scmi_clk_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 (KHz) + * extConfigValue[24] - Enable/Disable + * extConfigValue[31:25] - Modulation method + */ + val =3D FIELD_PREP(SCMI_CLOCK_EXT_SS_PERCENTAGE_MASK, clk_ss->spreaddepth= ); + val |=3D FIELD_PREP(SCMI_CLOCK_EXT_SS_MOD_FREQ_MASK, clk_ss->modfreq); + val |=3D FIELD_PREP(SCMI_CLOCK_EXT_SS_METHOD_MASK, clk_ss->method); + if (clk_ss->enable) + val |=3D SCMI_CLOCK_EXT_SS_ENABLE_MASK; + ret =3D scmi_proto_clk_ops->config_oem_set(clk->ph, clk->id, + SCMI_CLOCK_CFG_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, clk_ss->spreaddepth, 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,9 +347,17 @@ scmi_clk_ops_alloc(struct device *dev, unsigned long f= eats_key) ops->set_duty_cycle =3D scmi_clk_set_duty_cycle; } =20 + if (feats_key & BIT(SCMI_CLK_SSC_SUPPORTED)) + ops->set_spread_spectrum =3D scmi_clk_set_spread_spectrum; + return ops; } =20 +static const char * const scmi_clk_imxlist[] =3D { + "fsl,imx95", + NULL +}; + /** * scmi_clk_ops_select() - Select a proper set of clock operations * @sclk: A reference to an SCMI clock descriptor @@ -370,8 +409,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) - feats_key |=3D BIT(SCMI_CLK_DUTY_CYCLE_SUPPORTED); + if (ci->extended_config) { + if (of_machine_compatible_match(scmi_clk_imxlist)) + feats_key |=3D BIT(SCMI_CLK_SSC_SUPPORTED); + else + feats_key |=3D BIT(SCMI_CLK_DUTY_CYCLE_SUPPORTED); + } =20 if (WARN_ON(feats_key >=3D db_size)) return NULL; diff --git a/include/linux/scmi_protocol.h b/include/linux/scmi_protocol.h index 688466a0e816247d24704f7ba109667a14226b67..a02a6d55568898ad0b5deed954e= 432415936dde2 100644 --- a/include/linux/scmi_protocol.h +++ b/include/linux/scmi_protocol.h @@ -79,10 +79,16 @@ struct scmi_protocol_handle; enum scmi_clock_oem_config { SCMI_CLOCK_CFG_DUTY_CYCLE =3D 0x1, SCMI_CLOCK_CFG_PHASE, + SCMI_CLOCK_CFG_SSC, SCMI_CLOCK_CFG_OEM_START =3D 0x80, SCMI_CLOCK_CFG_OEM_END =3D 0xFF, }; =20 +#define SCMI_CLOCK_EXT_SS_PERCENTAGE_MASK GENMASK(7, 0) +#define SCMI_CLOCK_EXT_SS_MOD_FREQ_MASK GENMASK(23, 8) +#define SCMI_CLOCK_EXT_SS_ENABLE_MASK BIT(24) +#define SCMI_CLOCK_EXT_SS_METHOD_MASK GENMASK(31, 25) + /** * struct scmi_clk_proto_ops - represents the various operations provided * by SCMI Clock Protocol --=20 2.37.1