From nobody Mon Feb 9 04:56:04 2026 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011005.outbound.protection.outlook.com [52.101.70.5]) (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 A6E9631A07C; Wed, 31 Dec 2025 10:13:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.5 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767175998; cv=fail; b=r+4bxFtSKZRqQlX/PZw0McnLCwRetNJXmXnu+DU3oYZqipsBIN4UCOewzKKW+2uO/3mRxxY1J/1CxDouSdLVWnBN/vhAEmkEqBvRgzsaV6B7Cjf/Wgp2a/wcpu5M2LxVrJ9RccUAIWmvojzeGReHCqXwwTM6wyWEW66D8vF5j5s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767175998; c=relaxed/simple; bh=ThP3UWOqp8sEbKXlqk6JjoFIogRFA8SOwcF47bwy3S0=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ajh6FmLWk7dGsuIvOwvGOtxDSgs4UQXiJUGleZes1+GB+Z0vQ3QmD2IufyMmNHlG7ZbcXuvcnqJPD1pxuor/4rEPnk4/yoHR42lAv1+u6EN4oyuLrf2t98n9Dt9ZJPp5OouFh1pZsySLIXVIV6FuV+m8hyOOlr+7zpeueYq6DTg= 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=tRocbjNd; arc=fail smtp.client-ip=52.101.70.5 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="tRocbjNd" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZZiaT53lozhroaFj93k+VwP9Mv9/vbUe86k98wkHTvH4jhn4I8XRqiDrSh/FtFEuZ+rwNQp7AE86fYB6W+zV+6aI3svY4s447mrHgVcQw+/FYiELR4M4tc8MuFIwTUFMFgu3ZNO9dje0AzDkMieegGGS80i/1VK66kg3Iao8DEXxWhb5hdBzAvUjR7zqUpA8ltFmjF0J8jE9UjDbEZyGIuHEj8WCsQIoHcuEKmXQ+8w1/99Wi7TRPNiszT5YGScFiulOocPNBwaLtBFK2AIiZLdGsuV73NFKr8McMYOS7w2h9jUVPzxPM1daldsx2AesLXhjooK8RPVLqkNQTLEYjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=OOBHJX+q02TVDHNuAO8LtVZLQsK6tQm89clsq+BIRMU=; b=wsXJvMvhz/Aa8WwA8yD04b90bmxnsJarpZSHyJuDN1TO49iA/ElA4ci5lRxuOz9CG9LZMOIPJPybb7k9wKR4Q8nxma5VEATUt/glUEvMgl9RENrNdl41c04sXsP0JQeYjuEZJ4nZSZ+HlM9CVDQNuJ2ZZlEnYIa0T/dsD1fA0QFTuXrdJ+4GncINY1CvMgRP1F8xNiIdeDLXm3o6vjH0P38+gH/51mnfc39mQJOr/pBmXOXMZNK+A4hJbcon71UvVV1a2r1PU5cQgwKRl1SGVqBeqJOAJsBzEF8MrgpPTfFmsXWyRXt+D38/bS8oeWktxzezxVqMiPDo3CNeEgFLPA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OOBHJX+q02TVDHNuAO8LtVZLQsK6tQm89clsq+BIRMU=; b=tRocbjNdVWY/tpqdrDebe7Ts+wtDsZduFltgiVVnru+iFNwGLilcaWk5hRRz4c4Ibs52g66NvxIaul3G+4xEJZ+6bUxTlxbe0u5HATNskcrIQmbz38CN4mtyljuyR7+MBFzpIxV/oaoi7sbCMXSVrBtu8Crav4j49I2xBnCO+jSFeUw9NOaT1yQ6k2ea+Hwn3v1ZqC4lhAbGVkrwn3OQnYTelI670tuPMeKQ4B8q4gub8kU2UgDufuj/8ciZkfzzF1Df2bbYriMqRyKlN3VhG0DTvkhRw9ng7zdxEpv2HjBBSF90+1KnbFuTBGoq+DXcGoeSzYfhir7X+J/GLt/YhQ== 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 DU7PR04MB11089.eurprd04.prod.outlook.com (2603:10a6:10:5b1::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9478.4; Wed, 31 Dec 2025 10:13:13 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%4]) with mapi id 15.20.9478.004; Wed, 31 Dec 2025 10:13:13 +0000 From: "Peng Fan (OSS)" Date: Wed, 31 Dec 2025 18:12:48 +0800 Subject: [PATCH v7 1/6] dt-bindings: clock: Add spread spectrum definition Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251231-clk-ssc-v7-1-v7-1-380e8b58f9e3@nxp.com> References: <20251231-clk-ssc-v7-1-v7-0-380e8b58f9e3@nxp.com> In-Reply-To: <20251231-clk-ssc-v7-1-v7-0-380e8b58f9e3@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis , Brian Masney Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: SI1PR02CA0005.apcprd02.prod.outlook.com (2603:1096:4:1f7::13) 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_|DU7PR04MB11089:EE_ X-MS-Office365-Filtering-Correlation-Id: f5073e11-c071-4075-904a-08de485534f4 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|19092799006|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?VkdZN1Y0NldIZm1yT0dzK3ZXa3FQT2Y3cU9RNHdNeHJFNkZlV2wrNUliVjlN?= =?utf-8?B?YjhqSitmbmRzdCtLTVNybUlXT0cxVFlSakdNTWxNQ1JxU3lwbnFHS0NDTkt2?= =?utf-8?B?M0FtTCtBMC9yUVlvdWxOYTdBL0ZRdHVldEFCaHZkNHhJUWo1WTdsSWZmdWox?= =?utf-8?B?dmwvaVhvQ3c1ejNERWdQZTFnR0NyZDlZQW9xbHhjZ1hGL1c2b0RtU2JoeXBC?= =?utf-8?B?WTRnSEFuMFFFYUdqRkpTSktQWkVjRG96SlY2VGNRTTRGdlBPT3QxUmQ3bVFp?= =?utf-8?B?UU5yWEVBRHgrUldaUWV3ejM1aHNVOEMyclNHL1VIbDZOL08zZ2lEVVI5NmhU?= =?utf-8?B?M09lVUJIejVrM0R0U01URDZJQkFqd3NjUytkdzMvdldUR0lOR0lpTFQ5aUJ6?= =?utf-8?B?aXhUOWZIU1NjT1lUeTBDUlVldExFZDkzT3U1MWlqeTNrbGl4d1RQenNvSkt1?= =?utf-8?B?ZTZEMU1XZTgrbk9WUHlnUmRzRVVxbklGbmZhMk44a3ltbHlscXpybTdJalJY?= =?utf-8?B?eDFLc1FzemwvMFp6bGFCMS9tdzMwTThXckRncDdaOVdZaHU1VmJYaGZFaXBj?= =?utf-8?B?UmYya2R4ZTlzaEdjNkhvaFRxanFSdUhyV2NKeVhYK1VzZVQrdXZFekpLZnAr?= =?utf-8?B?NGc5elorR1FPWkZ2UDhxVlZxTVFTQzV1d0diMVhEamFsVkFyOVZmSXhzcVhm?= =?utf-8?B?ZVdpZVhTZGREZ04rV3p1K1RLTjFFT2NpNkM2NmhFcit4eDhqdVpaNDg2dXJK?= =?utf-8?B?SXE5aWFEMUxsKzE4UHdBSm5meDNHeUxnSThaTTY1ODFrSDFmWTBnN2g5am5V?= =?utf-8?B?Wnd0RDRLeHRaUGsyd0pZVllTRUs4SHoxQVpLdll1ZFhaV3AyNXNQMUgxZTZa?= =?utf-8?B?WUcxUVpsWWFxSVFEWk5yYTdSZTA2eGhJUWpGUnpuZ3hGODhSSWVON2IyK2cr?= =?utf-8?B?TDQyVVhkelJvUEtXaUxNaURJS0V1Z1JpOC92V2FQcXg2VkltUEZWNmMvUVVL?= =?utf-8?B?dGI5ckZTdGFXRmN0ZEhuK2c2VGRSbWdiUTdSV0d2WFJEM2VTdlkxOFk1Uzdm?= =?utf-8?B?dGFpSVYrRGJ6TjB0T3hNc3dTeW1lWFBhdGVFSFNvaElmUGE5MGliQjhXUXYx?= =?utf-8?B?UlB3aXVoU1lCaVh1YWMzUFN3S0dFQ1RJMTdhRmE2aC9aeHhLTkdKQWJvOVBk?= =?utf-8?B?RW9XbjlhcHMydWFMNGl4cXBkWllCM2IxMXo3bEhORXI3M0VlV3R0ZmN4SE1U?= =?utf-8?B?QjNZOGR2QlRNL2MxVFJzKy9OTk1SMmVGQ1JnQzhzMCtzL1FsV0lyaDk5ckg2?= =?utf-8?B?QWpmWnpoZTZwUW1aOWZxOUEyWk14dWR3Vk4xYzFWQ0ZxMTNHeEdsMWlRSkUy?= =?utf-8?B?TURZbzdtWnMrc01ndGg2ZGZETmZJdWVHRGNYc1lNNVl0cHZRQS93c2JPdFZH?= =?utf-8?B?MWY5a0ZTVTZLeUpBWUN0NE4rMFhqS1lLWnFDZDlmdVR6QlAvZkhIK0lmZUIv?= =?utf-8?B?Y0N5K1lXWjB0VzdocVBmaWZnZmlUcUc0L3cydGxxNml5cGJIVEFWQnE5T0VE?= =?utf-8?B?SWdlb2NRRDY5dmo5Z3ZxVjBvMTduYnN0dmxyQWxEUnFreTJReWZ3enhCYUxI?= =?utf-8?B?UjVQWTVpZVdRR201RXJNcFlYamFUZE95SklFbXNIOWtIWTgwcmgvZXhPdFJN?= =?utf-8?B?d01WYlEvSEJVQ0h3bHBnVjNFWXJTZTlLZVhrRGxtUU9GS2lONUs2SWxlM1RG?= =?utf-8?B?MzE5a3RPVVlaMk45K3F4RG1GTVRqUmFFVXZsS2s2VWdFdnBEa0luNHdTaVJE?= =?utf-8?B?WWNQMW5mcnNaSndKKzN5bUJNejFGQ21SQXlVckRVTFRNRjd5d21qTnBoVk1x?= =?utf-8?B?Y2w2ZjhCSkpYOHl0V2JHUVhRaGtiUmxPWC9qOUszQkJodzVmNXE3Q1RXQXFz?= =?utf-8?B?b216c1YxNE1uQ2xRUE1oVkdnRHFCcCs1UnA0bVhLcGpVaExscDZwMFJVOGZX?= =?utf-8?B?cks2a2dUc0ljZUN5UmtpWmJqcVBxbDdnbmZvc1BmLzRyQnZZZHBrcnkweXNl?= =?utf-8?Q?6GUux0?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dmM0czk4Y2VhMGVWTVNXZDhkS1pMalgrNkVlR24yOURpekdDanovbVZ3cEM3?= =?utf-8?B?dmJUU2J1YmU0N095c3pqczZoekpnYnl1bUtEN1BNK3J3WDR3Q08zYkxSNzh2?= =?utf-8?B?NjlYd1pOUVB6ZVN6UnlXR2hZemRQV0ZvQjNRMEFmdUNNanlIdEVRR0RPMWJU?= =?utf-8?B?dkFwajBMc1lFSFRadExjOHVOWjBMMFlHVUFGcWlmL3NwVGJZRXJZaFdwNEU5?= =?utf-8?B?QTIrdHBma2JHUUU5V0VUTm1JUFE5Tnlib0h4TEVFMFM4QVFRL1FpNUtGR0RZ?= =?utf-8?B?bjU1Z2pjZzR1MXNnekUrcm1qcDI5anl1RnA4NTlnYlRPNzR4cXM5RHk1eExa?= =?utf-8?B?NGQ5K0JKeFN5T1VsMnlQNHgyamJWdEdmU2MrRGwwazUzYVRnNHVhM2piRjFP?= =?utf-8?B?Z1FsZ0YzY1QwbTVWUUU1QzhFUm56a0RMbEwrQ05Tdno0M25Db3RTRkxUTWRQ?= =?utf-8?B?ZEsyYWp4QlN2Qzlsb0RIYWdwVyt1cWdDa1hKSVJuNkY3V1g0WW9CRm1qUGhF?= =?utf-8?B?LzNFb2xQZitOZTdjVnVhelhHZ08xTzdQeXBWdWJPUHY2cmJyOUV5RXVyZ1ls?= =?utf-8?B?Z0pVZ0h4ODBEVENaY3lhdGdTK0F0ZERwZ3RNNmJWT0lONmJJU3poSlZxZ2ox?= =?utf-8?B?em1GOFVyZkZyU3RnMzl5dmJwczZDVEkvSmRlMzRSMDR2bWFvVWNKV0pIUlFv?= =?utf-8?B?TGpILzNkcWVYWlROK0QrcE5rMjhMVVg3eWdtOFJ1UTlLcjZrS1dZSitwaCtW?= =?utf-8?B?aStnUldjVFNaTmZSR1ZOL0Nvd1k5Q3l6VXhOby9JbzZEYU1ncytGUG1jV2Uy?= =?utf-8?B?WWpnU0JQeWducThNWVJpL0tSVW1TYWd5S05wTTFHMzRTcXV4cHVtUWtPMUJW?= =?utf-8?B?VldyQ2tnKzZTNXAwRk9rUUdXMnhTOGhWSWVSdmxvZCtad2wrL2dRK1FhSWo2?= =?utf-8?B?dVRuNU5hTFNsZStKZmN3WitkdzB1ajBtYldiRlg1OU5BOUxlcGQrY2pEWlho?= =?utf-8?B?OFlxaG50QzhVSGFqeklvd1BBcnFia0E4L3ZuSWFhaU9TSTJ3VldTdUdYNExM?= =?utf-8?B?WmNRYUxqeXBRbW1mTWs2dktRK1N6R2xsRFpvM0xOUGl4Tjg2a0FZTkEvazA0?= =?utf-8?B?dHdTeTNIRXk3WmxiSVZjM3BoSnBnZVR6cEQxdExRU1VWL2c2QzFFM0RIWlpO?= =?utf-8?B?WjBCTDBoZUx4UGQyUTlXYWhQeHRaVnNpNXZKcElOWmlVNDhsWDF5NCt6QXVs?= =?utf-8?B?R3czWnVrT2lST0VVYk9FdFA0Q2pWNXl5VlgwWUlzbnNzVTBIVFFwN2VHWEVn?= =?utf-8?B?WUk1bTFEYlVUWGM1WUJabm0vNXA5U0JNQkM3aS81eVlZazdlNVBQcEEyL2tw?= =?utf-8?B?Q0U0OVZhVWJuUzRENkRGZnJBUjRzVHgxdENrd0sxL1BaVlFmaXlSbmRsSXpn?= =?utf-8?B?cjQ2QWI2U1ZUYXNlNVhSVlJMRGsvd0tjZlJHTHh2cWFJbDFzVmRUVElkSXlI?= =?utf-8?B?SmVHMmU2TFZpbUZpcVBsSDM4SGN4YVArczVWekJMTG8ycnhVbGFOSzFmUXpq?= =?utf-8?B?eHlMVkgvYjlJVWE3U0t3NDZER0lzV3FFbVNscHBYNTUzS0lyQzg0Q1VManJZ?= =?utf-8?B?Mi9GcTRDUHIwRjFHR1YzMUFFbjdaVTZ4WTExRzM2OGZ0WWh0WGdCUVJjdTY4?= =?utf-8?B?ZlNXdUtnT2xUS1FaNzhHQW93QkZ4YWw5cUlwMGdXK3AzOFNwNm1uVS9wRG1C?= =?utf-8?B?cnBDejBFWWFuSVEyTHZRVnB3TVJIaERBVlcxOVRnSVR6Mm11RFpZaTFMWE1V?= =?utf-8?B?VXNuWmpza0c1NjE2eXBLZEZhQ1dKNHFMcWNRbk1JU2M4MTMvMkFrRzJWdmdU?= =?utf-8?B?YXdWL1RmcDU3bU9UUHNoR3ZOVWVzckVLS1VOUEJrS1drZWp6WnNobTdsUVFD?= =?utf-8?B?bVdVT3BsTVlPbExLOEltMzBaeVJlZWtkVnc2dSs2QWZCVFFaczdzY2ZGc2x0?= =?utf-8?B?YTNTcktxVnpMTHBJYVpRUERjZThZc1ZXY2FlTEQyaVhzNllTOWZERkN1UCtV?= =?utf-8?B?S0hWTUgvbk5Sd2M5S2tvU1N4dDRiUFlNQ01EOGgrNEozU0VSNTk3Y01hTXdo?= =?utf-8?B?elNCMkoyeFlLcW16aEVmWk4vTUw0QUI3THYzUlZBUzhGVWJKR0FwbGw4QTNz?= =?utf-8?B?VUowVDJhZmR5cEt4UTU1Vk5WMmNwNnJvMnh1TnpoNHFZL3NIWDNwOG1SOW94?= =?utf-8?B?cVF5cFpTZ0IyanFjVmhrSW9lZmVFaGF1WVNlRVZYeThkd1YzR2hsNkdSOVFp?= =?utf-8?B?cjhhQlVOK3UzWmd3UkVJS3UyRkozN0NtdWRIVE1TK05FYytNOEV6UT09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f5073e11-c071-4075-904a-08de485534f4 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Dec 2025 10:13:13.2129 (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: lXAUnaBdljd7XJi+oORwVo8hmIHeHyf5qm2/w0eKI3qTNNFlsGSJX7gIy6qxGiaO+l2w9xQJ0FNBsU+WSc/JPg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU7PR04MB11089 From: Peng Fan Per dt-schema, the modulation methods are: down-spread(3), up-spread(2), center-spread(1), no-spread(0). So define them in dt-bindings to avoid write the magic number in device tree. Reviewed-by: Brian Masney Acked-by: Rob Herring (Arm) Reviewed-by: Sebin Francis Signed-off-by: Peng Fan --- include/dt-bindings/clock/clock.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/include/dt-bindings/clock/clock.h b/include/dt-bindings/clock/= clock.h new file mode 100644 index 0000000000000000000000000000000000000000..155e2653a120bf10747bd7f4d47= f25e0493e0464 --- /dev/null +++ b/include/dt-bindings/clock/clock.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0-only OR MIT */ +/* + * Copyright 2025 NXP + */ + +#ifndef __DT_BINDINGS_CLOCK_H +#define __DT_BINDINGS_CLOCK_H + +#define CLK_SSC_NO_SPREAD 0 +#define CLK_SSC_CENTER_SPREAD 1 +#define CLK_SSC_UP_SPREAD 2 +#define CLK_SSC_DOWN_SPREAD 3 + +#endif /* __DT_BINDINGS_CLOCK_H */ --=20 2.37.1 From nobody Mon Feb 9 04:56:04 2026 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011005.outbound.protection.outlook.com [52.101.70.5]) (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 05AF5319877; Wed, 31 Dec 2025 10:13:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.5 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767176001; cv=fail; b=E7KpG1650j2qDOP8EiI6/C0Gj37W5CoNQL3FLHR3iemiSIVtxkvRsuVeZc8gxdrUD+a+u9o92St9/9yF9HI7WskBBM4XzOD/q8I6chyIl2Bzgi6Dg3YAbNtwIrFvjYEG/t22kj6MFd5Pz1MwNYo5qQhaF+NzMX+2MUxDzglxoz4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767176001; c=relaxed/simple; bh=lgaR21B2sfsCE6+WhqwWwYa6G4rUIWIRXKfZ4XloOqs=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=fRPYV2Pydy5uZ+xNzNDdO0oPsPOeLvEcaXbc923d3WTUp+/cFcNr096TVL0jXVPh6mp1v7QzQohrL1lqnASpMN89tTcSyIRon78M6n/qYv2Gs159W4tZtiYyZyNBpFnTnSrOXv30kt1mYY+mAKmn7dQYAaVyH19rEvCAH+D4zhw= 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=rKxruTlr; arc=fail smtp.client-ip=52.101.70.5 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="rKxruTlr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xyAdhbolXQ0PRhJda7iuVB8A+sVtSCOfFoDGCp78zddf5bq0cXHM5N8kFea9qUPJVwrpLXum1mpvW9RUGf+N0/wPpnS/tKdwxn1Ax7XKZSnc+cWoyjC7Z7P/0QVSA/3XaK95IboXeO8OtJupWAELBrsYWGsUHMM+cPlzd/Q5fN1typTBFxGWyPiNbKG6PtpQX6X6pnAMDgmkJJ27qs9jngLU2CJkBby5YVJ5OcnJJqhS+yFt5Qf1ZG9MCNJ4hP4BdnjotCP8Q3Zc5t9fi9M7EAoeDLF8VswlEePOjYJaRk+Fmv/9/eXje/hd+Rf/+RWUGrlyAdgkUB1AcE9K3KQLRQ== 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=iLXwjhT1buC4cRAEMZseqnpoy0m5N6bcOJQ49doNP+I=; b=ONtezDt4LI94r9v3ps4TBW7t6NZv9QG6yb1QnMDsYoGMJsmvYMlaVWOoWozakcF3Cjryys9h9sYbSUoCTA9fMKkGD9Eg8WSvBXkmBcYoZCFLGi/hqFgHGyWySf7qCc6LN/wus9R3/ghawTh2Dg3Ajn1kqubHdSq0uWFVeEgiDA+RHLN0EDTfgcy9B+L1+Q1x1NocJ39YbjbnwkY7lL0OCdnl7z0HzJ1saadiFRueSLJQi3kCrjgZ/LHgqnS0XZblFiC3+wicryYmpMU3tixm8HtzahEnII9f7RUpP/UXrIUPnfZB5YS0E1RVauVQgfh4i6IVoxgrGKeuY8xTOVCtEA== 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=iLXwjhT1buC4cRAEMZseqnpoy0m5N6bcOJQ49doNP+I=; b=rKxruTlryOLOrIHHOwqsyh8E9uyRwPxooJaqvI++WspsjqKfhg0gPnxTM5L06d7p91upV8ZyYHn2kTMZ8kkRA6M5lvqMCc+iNcNWnyy6UGcKj9PVifaZYImH6X0ji6v3nGABJKe/zgZTWuwALBCwNbbpJ7Clcijoi399kIIK3z4T6N5832znOv9+DGEbPoD032KbtuF43s4A34hnN30QUOEJQtTOPpEEk85gRa3JJ7VlaVCQ9KevCKyneKDiOGU8mKxWI/LNMdvRhyEXTmjLr0a6krICJjSlypwoP/k55bNLvvSGSl+DvAgPlmnJMLTFZt4dHR3XRtTRYVlFs4jmzA== 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 DU7PR04MB11089.eurprd04.prod.outlook.com (2603:10a6:10:5b1::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9478.4; Wed, 31 Dec 2025 10:13:17 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%4]) with mapi id 15.20.9478.004; Wed, 31 Dec 2025 10:13:17 +0000 From: "Peng Fan (OSS)" Date: Wed, 31 Dec 2025 18:12:49 +0800 Subject: [PATCH v7 2/6] clk: Introduce clk_hw_set_spread_spectrum Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251231-clk-ssc-v7-1-v7-2-380e8b58f9e3@nxp.com> References: <20251231-clk-ssc-v7-1-v7-0-380e8b58f9e3@nxp.com> In-Reply-To: <20251231-clk-ssc-v7-1-v7-0-380e8b58f9e3@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis , Brian Masney Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: SI1PR02CA0005.apcprd02.prod.outlook.com (2603:1096:4:1f7::13) 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_|DU7PR04MB11089:EE_ X-MS-Office365-Filtering-Correlation-Id: 0aa093d1-24f4-4198-14c2-08de48553787 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|19092799006|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?akIzVDg1RUd3VitOZS9lQVZvMWtZZ0xMUFBiK1FkMnM1a3RjdXdTMDBQR0kz?= =?utf-8?B?UEE0Q2FROXJwN09vQ2dsNjdJU2hQcWNGMEZDM2hRQ2RDRGN0SDBsY0l3WWM3?= =?utf-8?B?SGRBOVg0dnAyT29RdHk4a1VMdk1lRXRwcWExYWkwYUVVK1NFeDg4M1lEckZo?= =?utf-8?B?TmtNOVdWSk5MKzZoYy90RmgxR3NxV3NOWjdHR2w0NEdrVllMeXpaVlIyYVNR?= =?utf-8?B?Ty9vRTkvZE94enN4MUFremg2UE10dmtuNEZkMEgrT0Q5U2NZSEtoYzNPNkxN?= =?utf-8?B?RGRrRnkxTWdsa254NTlrQzRFUXZmOExOTE9vN2NZaHR6WmljKzR1RjRheEtP?= =?utf-8?B?dHF2eXk1eHloQk84elg3c3lmaEhWb1lFTjZLZUhDOEZKSUlTSzN4SkRsTXYr?= =?utf-8?B?VUpVU05wb202M0xIMlVyeTNFc0NXZmloWWpuQVdrSnRZQkgrdCtRd3EzSWhG?= =?utf-8?B?UzJMbXVYYVEwRHFaUHYrcGtYb1hMSGFDRjZ2bGd0N0hMcjhRcHZRMjJtbHky?= =?utf-8?B?VkpxdG9aaGlnZk1QaTNTWjdFQ25XdEMxd0xwY3ZvWkxnUXMrL01pTWRqY1BX?= =?utf-8?B?UjJUU3dMM2loZVJ5WFRqcHBCVmNwVEtManE3NVg5NHhvN2l0ZTZqZ3d3aXBS?= =?utf-8?B?b3gra0JWNE50N1IzNms2WEZVS2JyZUE0emMvU0Y3YU9ZRTg4OGQwNXNQcEcw?= =?utf-8?B?VXlzbENaSVZmcFIrWkFvekJ1a2IwdkdGOWh3a0U4bjM3Ui9GKzFuYzJGSlVr?= =?utf-8?B?ODRzemcyZmZXMnNxeGVyTWZtM1FSUGlwTm9pVkFRL0tIWS91UDNBZjROWXNo?= =?utf-8?B?Z2dVQzdJeTVRMTJFdk4yT1VaeThKVk9iRFF2SnpUbVVDTjMwaG1rMTFtNVVX?= =?utf-8?B?d2FocDU4Z3c1LzU1YmVBdGpNRjQ0Q0o5SzU3c2U3S2MxTE5EeFg2ditkUHU4?= =?utf-8?B?U1BWcnE4M3AyM3NUNzRCS2dWdlFGNEpaRHVEU0w2YkZBTWh3ZkYyUDVTRm9a?= =?utf-8?B?Snl3RjZrSVNhZGhqbW5GNEl6aHhzSmdUbmo0em51YzhOV203MWhiT1NDYnNh?= =?utf-8?B?U2hsRUxCQnBzeFF4VUY4dXFoRVQvdmZvT0w1dEhKMFBrUytKcyswNDhTZUc1?= =?utf-8?B?azFUOHp2c2hPYys2dC9qbWlnc1BWWUxUMHdYd21tVkt0Yld4d3dkZHcxakM3?= =?utf-8?B?dERCTXBmRTBLYmhpMlNvUHcrN0NNT2F3eHRSM1F6K2pSaGFDVjdVZy8vZkph?= =?utf-8?B?c3ZhcExBM1JPRmtPT2NYMTc4Y1Y1MVFKSUlvTVJISHE3ZzFvTndJa3c1RDQx?= =?utf-8?B?WXlnbU9EdmZydkh5aHBwRmp5YU13Qnlja2ZCRlEyZ2N5M2JmZjZrYlNyYWRz?= =?utf-8?B?cE9ybmk0NFBveXdkcC9PT0wvbEIvR1F3bmtVT0NDTFpGR1dLYWJQeGRJbERT?= =?utf-8?B?TXFwSEk0MUk1elkwSjhXRGp4MDhsZ2YzNERrT0dBblJlOThzeEJMdThCYlFk?= =?utf-8?B?N0Rtam1Ucm56TVJZaXBHQVBaNjZ4R2J3WDlQN1B2S0UvcGxtNFJNaUdnZWxS?= =?utf-8?B?WS82b2o5OFVIY04zcVd1V3VjSjlja3Axa1ZYK2pHa25EY2VOeGtVNnJsMlVt?= =?utf-8?B?clBvcHpoY0xQQ0hsQ0k0NWFtNDdjaUpCM2lSMGt6OGtlc25tR0hHemE1MkdN?= =?utf-8?B?SFBjUmtwKzUxbWNZL2F3K3FvYTRhak83eDVVVWFOWDNzMkdxUXNBL3BMb2R3?= =?utf-8?B?a1Bsb0srcjFCaDE1NW5rQVJvM2ZYTGVrcHZiQndjUXZWRE9GcGNBOWJnYXRw?= =?utf-8?B?b0FLRHh5NDhaQkRBTW52V1dLd1hLaGl5L29DWjhFcDBrZFQ3QTd2QnZOMWhU?= =?utf-8?B?blVybkNKeDBGQ3JRNTFBakd2SGdFKytUNnRIdVBEcExSN1htb0tuOWhkNWQx?= =?utf-8?B?c0srQnp6N2UzNzJma3hVNzBQcXdsVThJeUdCNytiTnBucnN5bG1sUW9JUTAw?= =?utf-8?B?V3ROU2txam5OYWtoeVZ3TFIyMGlwRDRCSE5vWVFpejNhQWg1Qi8rNXBKVnpB?= =?utf-8?Q?4i28Uk?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cWFMNXhUdmdVZ05pRmM4c0E4Z1hCYlZQS09VY3lINCszcEpnUTZhOXJMc2lC?= =?utf-8?B?TGJxNWNOa3gxMElwbXhWcUgxZzFnR3ZxY1RoM0hzNCtubDhVelRDbTAxd3k4?= =?utf-8?B?NHpCeFowUzY5a3lJWXlQUzNPaHYzS0V0UXpNdHlncDNqbEZZRkxBMm1DYW9l?= =?utf-8?B?WFhiWi82NXRXTUhTTnVxb2ZrTlNoU2tiZnJGVWgrUGJyd2Zyay9jRDJpWkpS?= =?utf-8?B?b0pFQ25LaDVnMW8vZXFZZGk0Yi91TDh2Z0R5ek03OUFENEsycnBxb2tTbzhY?= =?utf-8?B?WVp4V0VqNGNUMnlLSEVnanNidXpHcGNCTS9zOCtxMU5GbkpZVW1zUkx6V3Rq?= =?utf-8?B?N2NrTnN0UC9MRFpzMEcwZDFZajZCL05oZTFGT3hFeGtRTWFTY1k0NjZ0eFgy?= =?utf-8?B?Tk5yUVZuWmNpazJueGFPOUk0Y25lVmNZNkxSWkZUallNejkzMkowNlJUYlNk?= =?utf-8?B?NXZhKzdpNTRQcHhLa3pNd0kxeUlvMVhYOERISEpRVlhVT1czUUpvcTFMWUx4?= =?utf-8?B?b0lzOTRhNGR0WWJUNTMxbVVFbUFZYUhtK2FMK1k5Zlo0eDlFdjVBQmZ2ZDdk?= =?utf-8?B?Z0N3Yk9hNFFDVGtpK043WEpObFNQM1NDWk5lWUVtRC91RDhpdXFnK05hSTFU?= =?utf-8?B?UlB1VndMZ3FIZUR5WkRYOThnQU5uV0NXQTdQd1hwOUMzcmk5a1kycEw5emJW?= =?utf-8?B?dTZqOFYwY1BKY1F5T0JvNTU3V0JpM3gxbXBTcTJSVm5uVnRkQVUvQkd5ekhN?= =?utf-8?B?TkdqMjF2TmJrQTczWThuR1cwVWFhNE9iN29ORkdEMHNXbHVFRnF6VDJGSjZ6?= =?utf-8?B?U3MybDJYMlhKc2kvWllSaTlXU3dySGgwM1huQTZNMnVZMnJJSDIvdmMzcjhW?= =?utf-8?B?TklReU5raG0zNVRTQk13T1FLUUJwcjNaNWdnMXIxMUtYUzNadC9tNUNvOG9h?= =?utf-8?B?b01wYWtCeTg2NmFiVDdWLy9NQmdoTXZQR0MrdHNwcEVDMEpFVVdGWFgrSHlu?= =?utf-8?B?KzJRTExiaWtxT3YvajFXRjdZandxekljc0tTKytxdHEvSW5QQ0FsUEVSbVI3?= =?utf-8?B?bkZ2MXFFRHpManNkSkFuSERCeFFNZ2VRdXNoajBRbVlNaDVCT1dwTmpURTFw?= =?utf-8?B?b0pMZlRVeC93ZE9lVUNvM000T2czRXVWbnVqSXZkcXB5cVRGWFd2WEUvZ21U?= =?utf-8?B?Y0gySHdkQUhCRkhPU3VOeFpHMC83QUJEUUYxMjhkblIwYnVRRzQrRHkrb2RR?= =?utf-8?B?Z3pkY0lXRWswa3ZOcTdkYks3VS9yeHNqRWIrSkRsUmdwN2JBdXpTWGVnWUM0?= =?utf-8?B?a3oyMXU5Q0VGNTExeUZrU1JJTkVnWEplQjd4WE1MTXBXS2pSc3JFSlVpSjN6?= =?utf-8?B?VkhNQ0lxYzRuejNKMnBVZFhPUEFud0UvNlhOamMrVzV6OXNPQk1FdDJMUHNB?= =?utf-8?B?TkRUWFVHZmpNMlEzT3MrRmFxWTZlN0NNYlJUOWVtOWFYNi9FWW83ZU1vTU9y?= =?utf-8?B?TU9TU3I3WUNIKzJRKzZqa0JUS0RBb01YR3ZtUEFyZGNBVGs3S3JVeUpCZ1NU?= =?utf-8?B?a1oxL1VUeGtCM3Z0M0pCT0lBckdpOGxnSmtrMlZUK0VhZEl6bEl1U3cxSkQw?= =?utf-8?B?c2pDY1BNQTFMdis3eU1PeW5wOUtyMm1HeXRQVG1vZWh4dThsakZoS1JHVERr?= =?utf-8?B?eDZIMG5ISjc1aCtpWHVGUU94dXlwQzkrVnp4VUxXdFppc0ZPRDRtRzdORml6?= =?utf-8?B?aUZOWSs5ZDBNUHpGSGM1Wi9od2ZmK2E1QUpsUHBtUlIxb3R4TmMweURweDdJ?= =?utf-8?B?MDZld3g1UFF2MUFVMEtYSitCeU4xRE9UQXZ4alphRXZpc0x1UlFVY3BsWEVY?= =?utf-8?B?SEh1N0JXeW4zYUhTOG1qOUVSR2hPbzRnbUJJWDh1Mk9kNUI4cFRWcmNjZnRn?= =?utf-8?B?Um1RR3AwWjgzck5WTk9CWEYrdlpDUlNvR0t4OGlndWpkc3lMMnJQRWtBME5R?= =?utf-8?B?U21Tc2lRVVNBT01QVU1yYmxHVnF0Z2RwV1dwT3FMNDdZa3VyOXFpVlNUN0ox?= =?utf-8?B?a3VpeEdHZU9LZlUzUFNOSFhKUFJUVVhsZytJWEE5M2V3c1lPUnJScWlOS2w3?= =?utf-8?B?c3dibFcrc1VVeGo5WHVtQVVPSVFwZzJ1OWpPeTlHSHU3ODZvUU1SQW1yUGdr?= =?utf-8?B?cmF2a0sxTEhEVE9uaEFWa1Z3S0p0YWxYTEd4b25GL3d0TkR5ZHlJc1J2dWho?= =?utf-8?B?d3BIaDhrR0RrVkNHMWhQK2lWSTl0Q3AxM2hEcTV5NVVKd3RtbWZvZW9LT1RS?= =?utf-8?B?K05RV1RWR2tYczcyNHZPeWE5NHdrck5URE9ZZkZVaCtBOUpIYXhpZz09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0aa093d1-24f4-4198-14c2-08de48553787 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Dec 2025 10:13:17.5475 (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: JoLV0uF8sqy3xSKx7XRtfvcG3axnHvMk32aWOHZN0A79jLKQP0D1GaollXdQN3JVAGqaGyij7e15TTqU7e6Y5g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU7PR04MB11089 From: Peng Fan Add clk_hw_set_spread_spectrum to configure a clock to enable spread spectrum feature. set_spread_spectrum ops is added for clk drivers to have their own hardware specific implementation. Reviewed-by: Brian Masney Reviewed-by: Sebin Francis Signed-off-by: Peng Fan --- drivers/clk/clk.c | 27 +++++++++++++++++++++++++++ include/linux/clk-provider.h | 31 +++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index 85d2f2481acf360f0618a4a382fb51250e9c2fc4..6cd941a729590b501d66101e352= b99e51ca18464 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -2784,6 +2784,33 @@ int clk_set_max_rate(struct clk *clk, unsigned long = rate) } EXPORT_SYMBOL_GPL(clk_set_max_rate); =20 +int clk_hw_set_spread_spectrum(struct clk_hw *hw, const struct clk_spread_= spectrum *ss_conf) +{ + struct clk_core *core; + int ret; + + if (!hw) + return 0; + + core =3D hw->core; + + clk_prepare_lock(); + + ret =3D clk_pm_runtime_get(core); + if (ret) + goto fail; + + if (core->ops->set_spread_spectrum) + ret =3D core->ops->set_spread_spectrum(hw, ss_conf); + + clk_pm_runtime_put(core); + +fail: + clk_prepare_unlock(); + return ret; +} +EXPORT_SYMBOL_GPL(clk_hw_set_spread_spectrum); + /** * clk_get_parent - return the parent of a clk * @clk: the clk whose parent gets returned diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 630705a47129453c241f1b1755f2c2f2a7ed8f77..9ec25bbccd613eafd77aca080dd= 7f51b1bfdadc1 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -6,6 +6,7 @@ #ifndef __LINUX_CLK_PROVIDER_H #define __LINUX_CLK_PROVIDER_H =20 +#include #include #include =20 @@ -84,6 +85,26 @@ struct clk_duty { unsigned int den; }; =20 +enum clk_ssc_method { + CLK_SPREAD_NO =3D CLK_SSC_NO_SPREAD, + CLK_SPREAD_CENTER =3D CLK_SSC_CENTER_SPREAD, + CLK_SPREAD_UP =3D CLK_SSC_UP_SPREAD, + CLK_SPREAD_DOWN =3D CLK_SSC_DOWN_SPREAD, +}; + +/** + * struct clk_spread_spectrum - Structure encoding spread spectrum of a cl= ock + * + * @modfreq_hz: Modulation frequency + * @spread_bp: Modulation percent in permyriad + * @method: Modulation method + */ +struct clk_spread_spectrum { + u32 modfreq_hz; + u32 spread_bp; + enum clk_ssc_method method; +}; + /** * struct clk_ops - Callback operations for hardware clocks; these are to * be provided by the clock implementation, and will be called by drivers @@ -178,6 +199,12 @@ struct clk_duty { * separately via calls to .set_parent and .set_rate. * Returns 0 on success, -EERROR otherwise. * + * @set_spread_spectrum: Optional callback used to configure the spread + * spectrum modulation frequency, percentage, and method + * to reduce EMI by spreading the clock frequency over a + * wider range. + * Returns 0 on success, -EERROR otherwise. + * * @recalc_accuracy: Recalculate the accuracy of this clock. The clock acc= uracy * is expressed in ppb (parts per billion). The parent accuracy is * an input parameter. @@ -255,6 +282,8 @@ struct clk_ops { int (*set_rate_and_parent)(struct clk_hw *hw, unsigned long rate, unsigned long parent_rate, u8 index); + int (*set_spread_spectrum)(struct clk_hw *hw, + const struct clk_spread_spectrum *ss_conf); unsigned long (*recalc_accuracy)(struct clk_hw *hw, unsigned long parent_accuracy); int (*get_phase)(struct clk_hw *hw); @@ -1430,6 +1459,8 @@ void clk_hw_get_rate_range(struct clk_hw *hw, unsigne= d long *min_rate, unsigned long *max_rate); void clk_hw_set_rate_range(struct clk_hw *hw, unsigned long min_rate, unsigned long max_rate); +int clk_hw_set_spread_spectrum(struct clk_hw *hw, + const struct clk_spread_spectrum *ss_conf); =20 static inline void __clk_hw_set_clk(struct clk_hw *dst, struct clk_hw *src) { --=20 2.37.1 From nobody Mon Feb 9 04:56:04 2026 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011035.outbound.protection.outlook.com [52.101.70.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4863F31A07F; Wed, 31 Dec 2025 10:13:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.35 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767176007; cv=fail; b=QUVYqBak6c1ih0bwyc/a36WS48twFdQ3ZaLoy14yjgvHHS2WlCwiv8gFE7MjBeUb1TRc7hB94JzzxKgUs3XwmY/BUQ4X8Q3KYD4HvUv2Xx+pjoPFcudgOLWkBkIqn+yZlGyL+U0rIqC+5savrxd4Y71zLAwjZXLQo6y7j3vKIx0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767176007; c=relaxed/simple; bh=3HptXKt/4iO51FKUPRBtm6nMsR3DFpWhRUYjRtXyTEI=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=Ca62mTXqeuxrClc1BlU/Igu04ZuWkeXbdjirg7qqQv4Gv5gaeZP5bbJ1AR9KCVWalgeyvMH7eq57X9EB+fY72azRSQ/pfpmftDXnRGdefol3tYviQ1i0vL9RxGvqwquJggknWzEl5jI9BwqQ+gGvNuU85B5evD3US4zaauPq7/E= 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=nkpoLI96; arc=fail smtp.client-ip=52.101.70.35 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="nkpoLI96" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=i/htmFUSwwEtdaJdelnflJYjYV8/AYmZtnuMoJwpXBM4d+EZyPJfA10gi8if/6UD+6hvBXx1n0E8W9vqJhbzoWFyh1u/ZmFYDa1dx8pPdmQiqe6EEkwlmvZUnyZ7534NKk5yuZnB6pecWW3OYsg38zTz26CjnSL279HmIW+0mb/hIjkS0HjkG0XiYQut1FydEAzpC33ovGjcvKUMexGetr0OHR6iGATndyvJFFQ+q/FnShOlK1KZrC1o+nOzNng9F0+MT6n+Am+1CBwCiVwLB/SQ2rIczcCd0whysiujEMvh/D7fDxfd4ZGmMmQfi4qCwyeBF+4Z8VzxIWMSnyOgCw== 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=pvv0Pno5RyrKuhLVC0zF7WPwKyD7sDK3n9uPkiWdWuQ=; b=bzfxlD59bsLXyRUkb4Rdfbnr3kpHInQ0QhUk6nU9oimbJhLzSuLGcUHnSk76J5HqS/rMxsA5TPgYIU7s2a6bcBWBG8Xz40Aop4hEoPpROzimbsoN56W5FVp5rQejtFQr4ydVibds8X3IgYdOfjopFQzMqdS87wDvnu6Lre/wNJhYLI9laH1pfuIM+6oSfNTMDIFKgPf5b3JXLZDdUbF2uqHQVAF4YgtwRzOge3EnGGOwBTZM0SeRorqnC4RW6qOX3zH6kM7q8OZpkcn+3vC+LEOd0no53GeXVR2fyXlvNnjyoprE3mZ6aBqAn5yn66u/1dxrGRguqPGBA2A1usXEOA== 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=pvv0Pno5RyrKuhLVC0zF7WPwKyD7sDK3n9uPkiWdWuQ=; b=nkpoLI96BWKIfpBYuHkVxVCVdMK2+M6eA3H3C8UtPDvWOyxso8q5FtjYG9ahgubx1FFZsgerum4TVKdBSKmwmkG+TIfztnQGBdfI8If58JoedIMr8Eh0TpI8EuZbCirci/2OQV5vQwhW1n1cVpNlUv+IBAVe0oEkamscxUrzlHGSMgRS8Zo0Tj1gXsrf86V8FRUHZxA4a6IgQW243aZ2hJl2OzvvUHCW/ncvst7PkuZdQsa8d/A63uRdtl0xpCNaL1GrSOzkooq0QzwxAEhbaYgvQCiIphyAkznfs9KLaFzsqNzH4g17l78vjeAN61qDFhCy282KI72weZS8mId8IA== 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 DU7PR04MB11089.eurprd04.prod.outlook.com (2603:10a6:10:5b1::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9478.4; Wed, 31 Dec 2025 10:13:21 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%4]) with mapi id 15.20.9478.004; Wed, 31 Dec 2025 10:13:21 +0000 From: "Peng Fan (OSS)" Date: Wed, 31 Dec 2025 18:12:50 +0800 Subject: [PATCH v7 3/6] clk: conf: Support assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251231-clk-ssc-v7-1-v7-3-380e8b58f9e3@nxp.com> References: <20251231-clk-ssc-v7-1-v7-0-380e8b58f9e3@nxp.com> In-Reply-To: <20251231-clk-ssc-v7-1-v7-0-380e8b58f9e3@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis , Brian Masney Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: SI1PR02CA0005.apcprd02.prod.outlook.com (2603:1096:4:1f7::13) 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_|DU7PR04MB11089:EE_ X-MS-Office365-Filtering-Correlation-Id: e4d0d09f-874b-4edb-8662-08de48553a08 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|19092799006|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?QTNDYWF5RUNuOXBMQWJaMm1DWWVURGJCckFKSkNGVklKOHJpQmlCUzIrMlY0?= =?utf-8?B?YzJablZ1TFNVNFdHeGJRaFhZdEZPSk5Rb1FLNVRydHNMd0R1ZkdiUjNmQjdp?= =?utf-8?B?b2k5LzlHZ1NuanFCdEQzWG9HWTJTNXRMdGg2cm5oYkdZOVVkWmxQa0U4VHk2?= =?utf-8?B?TDlocmF4S1NESHAvMnM3TjZZMjY0eExROTVZUHloOXMwK2E4bldzYmRFc25P?= =?utf-8?B?cFZ0L2c0TEdjWmw1TVhVQTV6aGdBL0p3ODJMTml0VXdvMGQ5WFBGK2hiUGtF?= =?utf-8?B?VzBkVVloVDRJVm1yemY5MjlXUWlLL0l6YlRzKzdqWFd3ZVlqbG1CQUhaNjlp?= =?utf-8?B?UHJ2cGk1WXhxNnNoTklLUWNRRC9May9XdUZ3LzhMb0FGUFR1UzNRRi9hSHEw?= =?utf-8?B?SlVqanZ0NjN2aStvZUFPbXZibzd1UWkvVjVLUEFCQXhnai9lU3lpVllzb0Zl?= =?utf-8?B?SW1zVDNlUWxXbmIxUzMxYVZuM0h3VTVlVmNBeGhhN3pNL3lMQitxOHVSTWRw?= =?utf-8?B?K0pqWGNENXNyOVdGSWtNWXo3c3dzUXB5MldoRkZ6R0lqbE5UWnowSXBCN2NP?= =?utf-8?B?Qm1aeHl0SWRnYisrK1pmS3QwaWpVWGQ1WTE2K0JLRDBvNFE3VVVMRXdETjU4?= =?utf-8?B?OFgralQ3VFFmaDJ0eHZGY3RNZmlNTnhxZWR0ZnF5ODZTZkJ0MmsvSjhCNHZn?= =?utf-8?B?ek1RVkVqN01Mb0Z4aGlDY0VyZlJwUkJFOVRwN21LR2E4U3RqNjcvOXJvaU93?= =?utf-8?B?eWZFcnhJbW1RVXBIb3plOFpnaE5zZlI4dXY1Z2xRN2pmZW1ORlRmekU0MG5p?= =?utf-8?B?VVV6bjR2Nzgvd216Zjg3QXJ1WDVYS1R1NWkvU1B4NFdBbHhxL1J6U0J2K0ow?= =?utf-8?B?TjFwaEVqK2dhVnFqeHZ3ZzRBQ1E2cmkxbTZJZnFQOU04TW5mSm96YWZHd1h5?= =?utf-8?B?d1cwcnNWVWt1bU40c3hOSjBjMGN6aUczaGw2RDMreEEzUE53M3UwWWF3RzJ3?= =?utf-8?B?YlhHUTBZZlB4dXlNZU8rNkxWODZEZ0FSTzBaVXBoZ1Q3YXpJT28xS3R0VERz?= =?utf-8?B?eEh1aS8xMHdSdG0xQm5YWFRaZ3NzaDZ5NEpXVmQ2L0YyYzhqbTRQNk5yMU5r?= =?utf-8?B?dThPb2RubGQ4a25Vb1VTNHNmVmo4Y3pXRXVxOWk0ZU1PZEVCK290S2RqSVNX?= =?utf-8?B?QTJsam5mdzJmVjU5Mzd0ZU94TEdpMGgzTjE2aEwrZ2o0US9kekNvemVWbENw?= =?utf-8?B?WCs3S1BjWEJ3QUFxN0dlTHpKT09HQjVkY1RpYmRLd1AzSXNwZVk2b2c0Q1hj?= =?utf-8?B?ZE9rWkMxMGJuL1VUVnhLakwwM1Mrbk9pdWFEbmkvY0VKbXBiQmtyM3hiZVJ6?= =?utf-8?B?cldkMTZNRS90cUZTNlRUM1ZEajMrTm1NWTRRa3FWSk9UT3dackRSZmQrR2pT?= =?utf-8?B?SjdUK3llVHpNZDJtU2Q4YzJwKzRVeTQxZUI2MzlWOEVHVGdBWkZwazZkYW0y?= =?utf-8?B?Vm0zSUxhWG9RZUcrL1AvUkU2bVl2bmR4ZXJVZzIyelFoYnh0aTQ4WWxLQ3pJ?= =?utf-8?B?MHNmNjVuSUdUbzduSHRIRDE2MU9BdnJoYithaTQ5VTJrbG03ejJpMzI1WmNq?= =?utf-8?B?L1lYMmZ6Zm5Db0FXNXJQbnhwV3BPejY5NE1VWG1Bd2ZLZEtjVkdqVUF3VDg0?= =?utf-8?B?V2svQTQzZG1PS2M2dEV4aVZKbFhQNHJnYUxEZDZGUjQwckpLRW81OCtRSzNa?= =?utf-8?B?R1Qxb0ZGVnFobjFYYjZFNkVCcklmaFVMT1Z0Y0lRNE8rNGFVdzhjVUlHZjR1?= =?utf-8?B?eTk0NEx5eCswelk1c2p3Z0NUb3N6TEwyT3ludVVEQ0Y2emYrZEljV2xta0lG?= =?utf-8?B?RFJiY1dIN0NPcUZVRmZpdXYzZmtKMnRGczFNS1hoQTRsRmxubTFCcFVtWUZ1?= =?utf-8?B?SkQ1aENJTmNTL2NaL1M3L25jZnpMQmZ5ZStlOUxoTHlEU2UwNGhrVzJwcEEz?= =?utf-8?B?WGJ4WUNLTUJUdnFacHVlWGV5M3JiRWFuLzN0VmNCNzhyNFVKTFBraXhlMUpR?= =?utf-8?Q?FJKK0T?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?c3owcHFEV25CMVROZ2dsaDJUK0NzMXFDQ3hSVURwUnJRVjB2UThkbEdIRGhI?= =?utf-8?B?TytLNzNnczFlV1o0MnNTZ05qSXRVcHBCcEwxR25HZ2NNWHNRSlZVd0taWEhH?= =?utf-8?B?SjQyaDNjcFBpd0JGQUpSVlBOUmVyOGMxQk9HSEk4eUZrVW85S2VkVHVtaFlQ?= =?utf-8?B?SlpITURtWWU0c0FTQ3BOeUQ0ODVKZklod3VTbTJsMU5zVjdCdG9zVXVSRk5D?= =?utf-8?B?Q3YxZEJnMWx2ei9rdE9RRXpZeVFvTUtwTy9QME5IMTN5czNCZmlSWkFTeFJ3?= =?utf-8?B?Yng5aHRMbDFMS05DbHNRZTRhZ0t2RGl3UDBRK2xqN1NUVlhDZEd4SFp3eUJn?= =?utf-8?B?clFhc2p2d0IzSzVvbWdlL2ZtU2xjN1d0bmxlUC9ob2x3R0VWelUyNzgwVEcy?= =?utf-8?B?MUN1N0pFSVpGSDA5SXlqYUlJb3BNK2N4bEhDdG04cUJVRXFlVEtUSDlHOVg0?= =?utf-8?B?L1ZlR29ILzVIaEQzODV5cVRKM2FVbVExY0dhcTVORXMvWEQwYS93TWM2aGpk?= =?utf-8?B?M0J5dmRjU0lkZXducXR0THdYNXU5SlZQZzJGeStjaFpsY0NncHd1RnU2dlF6?= =?utf-8?B?NURFQ3ExOFduRFlITTA1U2NJMXF5c3hpQnM2bzM5K2ZZOGVIMXo3NDUzOGJZ?= =?utf-8?B?UjkzKzdqK2RLYkVpZHEyQjUyaFhaR1FzS1dLOVZhMHRMTEIzTGdPVUN4dTJi?= =?utf-8?B?eTJZY1cxQXc3bDg3dUU4d3NxWEkzT0ZwM29ueTFnMjJuNjgwckZmZzl4a09V?= =?utf-8?B?WnRiTmdsQWIxc3ljRkNha0ZJeW5wTW9FRXJPS0J5R2ZGNStvVmRZYU95NDJT?= =?utf-8?B?RmpSdVo5K0NycmZKdjROcE93bDhCTXNsa2NhZ0hLMXVVSXFGT1VrNFV6VFhT?= =?utf-8?B?MmllaTZMVmJHMko2OWJZaEFuK1VvQVFwMFdXZ2JSajRreHZDdEhhZDEzeTZx?= =?utf-8?B?SWlxb2JMWDlhR1Rpa2Ntbzl5V2FJSVMxdWg4TkF5L05xQmNLV3YwSVorWHI4?= =?utf-8?B?VWtScENqVFdmUGxvUWdGdWVvWmI1dzJxUEtVRjNqZTB2bFV3Z09SZ1dLTEM2?= =?utf-8?B?TWNIeGdpTWZHdnBPWjl6ZmlkcHZpM3ZXaC9BM0hWblN0bzRLTmVabjIrSEls?= =?utf-8?B?cmFuV0pGVXRZOWVaVzBaMHJUa0gycXNmejFsT2lpSDg5SUtLNFA0UmNDbFdL?= =?utf-8?B?Z1RaVUVGcjFVUHVYN3ZRZmVTSTZvNG9nU0ZYeUNjS09lQS9icytJdm03Znhu?= =?utf-8?B?RnhDYVhFRWRVZ2dhRkgvMENBSUY2dHpmVEE4OU9VU2VzZ0JuWHdnMUN3SkQw?= =?utf-8?B?MVlUWWNVWFpoeXlGQ2dvc1ZhMnUyUmE2WmF5OHFqa1loT2o0K01vNXZyQWoz?= =?utf-8?B?SnkzR2VOWlZpTHpCZUVqTmVmM0toWHhOQTdmOHEyL0dZQmVsbWQ5S0JOc09Y?= =?utf-8?B?Nk9HekdrZjdZWWFOTE8vYUZLYkV5QUhwaTdzTytnckthWWlpeTdaRTFneXN1?= =?utf-8?B?UnFxeDFLa080M3IzVnFjQ2Vha3AyLzRSenZaZ0pvL3FVdWNyandYSldXK1JJ?= =?utf-8?B?RG4yeXVhZ3ducnlnMUZYcE9CZlRkQS9pMTFFSi8zVjhLSDhCTU5LUjkxU3Nn?= =?utf-8?B?ZFFIS0xNZzl4NkJsNU9zZHBaajl2dHhjcUZLODdLWU1aYXkwN3QyOFBxREZX?= =?utf-8?B?dnlyempqcGE1N0N3T2dSS0Rjc3A4NVRQMXhzblRSTXkvUXBZcHk0VXI4WDlq?= =?utf-8?B?K3FNNFlkZWhmd2NyTTk2YTJDUjdHaXN3ZU80Tk95RzI1S3REUjIvbmVZL1lL?= =?utf-8?B?dmU0aDlSbWZMdllScXUzMEZwS2MwM1lITlEvK1grWldXR2QyNUFKa2M0aUQx?= =?utf-8?B?Zkx4dmxnOE9abEc5NTN1V0lHZWZvUHF6YUQ1OGtBbTVmRHlRTVlYT1NFcnlx?= =?utf-8?B?dlJFWnBJUE5UekN1TzJ2aUxVSndqVDJ4WExYQ3d2L0NMSWZRMWw2R2x4dUlx?= =?utf-8?B?eW9ESFpjcVhROVFFNDNTYml3bTI1d1A4eitSbkxPa3E1U3BIL1Y3Uit2VFlD?= =?utf-8?B?RHB6Z05qeElnNWQyQWZ0UDcwVXlNUnUxUWUvSnd5dFIzS0xWZi81RkJKRHk2?= =?utf-8?B?aXFuZjF6dW4wNGxRZXZzczY0Vjc1bEtFR2V2MDREcG9wNFpKem9xZ2VSd0ZR?= =?utf-8?B?UkN0UUYvYnJtRktESzBvTnlmQzZ1OGxGNm5GU2tMMWw1MjRzRlY3OFBXRXdz?= =?utf-8?B?QlB0WTZQN3lsQWQvdjRWaVpRem5CUm8zd05iMlE5NkNXK25hNENGVCs1UTJK?= =?utf-8?B?WnV5WCtjK3RURVVyNTNIQVlMRGtKY1Zpbk5MM1BDNFhvUlZCT2xhdz09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e4d0d09f-874b-4edb-8662-08de48553a08 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Dec 2025 10:13:21.8247 (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: Grli1xopudC0cEn1t/X4NvW6jugZnkZsygg1PrWpK6n7iutivWNxEHq/OXjxMRhW0GeEY9q5iN+1VmuzWIKs1g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU7PR04MB11089 From: Peng Fan Parse the Spread Spectrum Configuration(SSC) from device tree and configure them before using the clock. Each SSC is three u32 elements which means '', so assigned-clock-sscs is an array of multiple three u32 elements. Reviewed-by: Brian Masney Reviewed-by: Sebin Francis Signed-off-by: Peng Fan --- drivers/clk/clk-conf.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 75 insertions(+) diff --git a/drivers/clk/clk-conf.c b/drivers/clk/clk-conf.c index 303a0bb26e54a95655ce094a35b989c97ebc6fd8..cdc7631f2e159bdaa6829ba5a3b= 5695dc1c31423 100644 --- a/drivers/clk/clk-conf.c +++ b/drivers/clk/clk-conf.c @@ -155,6 +155,77 @@ static int __set_clk_rates(struct device_node *node, b= ool clk_supplier) return 0; } =20 +static int __set_clk_spread_spectrum(struct device_node *node, bool clk_su= pplier) +{ + u32 elem_size =3D sizeof(struct clk_spread_spectrum); + struct clk_spread_spectrum *sscs; + struct of_phandle_args clkspec; + int rc, count, index; + struct clk *clk; + + /* modfreq, spreadPercent, modmethod */ + count =3D of_property_count_elems_of_size(node, "assigned-clock-sscs", el= em_size); + if (count <=3D 0) + return 0; + + sscs =3D kcalloc(count, elem_size, GFP_KERNEL); + if (!sscs) + return -ENOMEM; + + rc =3D of_property_read_u32_array(node, "assigned-clock-sscs", (u32 *)ssc= s, + count * 3); + if (rc) + goto free_sscs; + + for (index =3D 0; index < count; index++) { + struct clk_spread_spectrum *conf =3D &sscs[index]; + struct clk_hw *hw; + + if (!conf->modfreq_hz && !conf->spread_bp && !conf->method) + continue; + + rc =3D of_parse_phandle_with_args(node, "assigned-clocks", "#clock-cells= ", + index, &clkspec); + if (rc < 0) { + /* skip empty (null) phandles */ + if (rc =3D=3D -ENOENT) + continue; + else + goto free_sscs; + } + + if (clkspec.np =3D=3D node && !clk_supplier) { + of_node_put(clkspec.np); + goto free_sscs; + } + + clk =3D of_clk_get_from_provider(&clkspec); + of_node_put(clkspec.np); + if (IS_ERR(clk)) { + if (PTR_ERR(clk) !=3D -EPROBE_DEFER) + pr_warn("clk: couldn't get clock %d for %pOF\n", + index, node); + rc =3D PTR_ERR(clk); + goto free_sscs; + } + + hw =3D __clk_get_hw(clk); + rc =3D clk_hw_set_spread_spectrum(hw, conf); + if (rc < 0) { + pr_err("clk: couldn't set %s clk spread spectrum %u %u %u: %d\n", + __clk_get_name(clk), conf->modfreq_hz, conf->spread_bp, + conf->method, rc); + /* Do not fail */ + rc =3D 0; + } + clk_put(clk); + } + +free_sscs: + kfree(sscs); + return rc; +} + /** * of_clk_set_defaults() - parse and set assigned clocks configuration * @node: device node to apply clock settings for @@ -174,6 +245,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 Mon Feb 9 04:56:04 2026 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013005.outbound.protection.outlook.com [40.107.159.5]) (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 D218331A041; Wed, 31 Dec 2025 10:13:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.5 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767176012; cv=fail; b=hYOgMs70Mcs1WwR6tve3BKfEv6OVCrS4la+249PzBIMhdFvYceCMf6jMkCn3giRi65Db6LYZnoWurY3L4RTLm/oLEFYS2N8bnN3pspjV4MlERZAKBApqC3EB1kwizeqfbx8RxRePkK5rAYM1GS1QgARDj/F59ixWtRkoJnBCgLA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767176012; c=relaxed/simple; bh=3GQy6nUafjz090xlhegjY9LVe2nPtW74RERPh+uk1Cg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=JVlZssVwq+Rp3tArIP17mTEkmaHbdGCU4XDhb0ZLLK4lyRHlTwuBMwF92Nr3cjnO5rsoy0Irn/KHNJBnqudeCVGJxYBp6h5L9OX3UdduA7jcys6HiWKKvXQ3M5vYS3KCEZTQDEJskUmZWUqKhBaD8Z9PzYNne/dWdVTC6Wrq3uc= 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=CUnxQUGr; arc=fail smtp.client-ip=40.107.159.5 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="CUnxQUGr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hbLdYITJPpltJmnv1vIA/4lHNGbDSZIRha6HCcpg9cPXsb3g+sfspEKCZrKs8nB6zt3JQ7jHKfVFuf0jn4xZCjEI1OObui1eywQQdzl/EYC2dQ2VKr5F24b4AOh7TGWu+yqU9WQ5tC8iR1+FNetxXn2iZyBW+DuhO94SurNLAryrhhm/JN0Hi9H28H+I3pQZYDF5EoSSPl/s93WeFVkaksbOJBbSN7L7k77Hr38Hj92EgPAlxIKff8EDZzbUT4Q/9iAhk7d3E2LhfnQZl7NlPtIA4IK69hQV21V5/TTL1S/gbiW7jiyrb/9kcF9+OlcchDnntijlv2Edlma3mJ7WxA== 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=S92I+xv9eKrBGsZOh7TuY4+IRTsPjahfL1fRhgRBnYA=; b=pSn1m0ormeNbowvrQH7IMhndgMmk8NPpgJxQ1OrN2/Hb3g6ft/UmfUD9FlPWy8GUy5ftBYDNoCgcpdENGzNEDG4iSACcaom9B4M9K8WwVbJzHyVD7dAU/imXO7PubbpPGoOr4wsHsBWkE4pMr9f+IT5tzSVITv9cNgggiWxNUDc+fZMv8B2xeN+usDWZ3XdiMRlSdjiCANZL6H5ZM+z152QAECZwOTXnqK5XtoADHgm7GdDvJ21E0OqAEIvuzT+w6OWqtksJYRjzeBqovyLbfgUjui+2uELcbLWsmfPxOJjSLTmHbjZXeXpk0gaXXCgdBQq/isaEuDSzjO9+kBn+Vg== 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=S92I+xv9eKrBGsZOh7TuY4+IRTsPjahfL1fRhgRBnYA=; b=CUnxQUGrQUTEJr0EiaZyLYcMtpXCZlMeiaVt2kruQOFnPCILt8aZS2pNEde4L6Lk/V5v3eimBEg/EYLm3dArEIY5TdwxaQUJwYsdRQmVnNYO0WITDkEz2xhXlNdbJJzszSBZ/0hOIA0lN6IMQ7JVP0s1xCUyrT9+FVl+lzrPE8fF0tOzyE5SsJDFlYbzQULJAoGEzfZLTpVy1Bd6vqbae7KX4HtinHeHvmPIhRebHBQHpCGRqIuCGPP++KzO+abSmqDTDaHrOdIQmKTQBaZiTcqhKGNbIN917znhBwfmmubrn1ouRSbdVsh2Pd7G4PKvNa+Q9Y1ywdTnNbVnGC6bBQ== 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 DU7PR04MB11089.eurprd04.prod.outlook.com (2603:10a6:10:5b1::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9478.4; Wed, 31 Dec 2025 10:13:26 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%4]) with mapi id 15.20.9478.004; Wed, 31 Dec 2025 10:13:26 +0000 From: "Peng Fan (OSS)" Date: Wed, 31 Dec 2025 18:12:51 +0800 Subject: [PATCH v7 4/6] clk: Add KUnit tests for assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251231-clk-ssc-v7-1-v7-4-380e8b58f9e3@nxp.com> References: <20251231-clk-ssc-v7-1-v7-0-380e8b58f9e3@nxp.com> In-Reply-To: <20251231-clk-ssc-v7-1-v7-0-380e8b58f9e3@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis , Brian Masney Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: SI1PR02CA0005.apcprd02.prod.outlook.com (2603:1096:4:1f7::13) 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_|DU7PR04MB11089:EE_ X-MS-Office365-Filtering-Correlation-Id: b20d0c5d-f3db-450b-cffc-08de48553cac 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|19092799006|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?eDN4QnNuV3Bvb1cvVzkvcXVVNnZvWERKY3pXb2NLdFM0QkdvaHJwZjM5amVN?= =?utf-8?B?WVRWTjJkWHdCK0JaN0czRWh5a1pick1STHR6Nml4TkFxL09CN2VmcllQUEIz?= =?utf-8?B?OEhyMnB2T0YyYURMbjZGdDN4S2J0bTExYXlPTHkxbTB2Q24zd2pJVGg5N29C?= =?utf-8?B?dTRjMGl3RWk5VVFDbFU5eU5PZHVKaFcyNlUxdWQ2Z0NMNDY2WkErYW1Eb0FS?= =?utf-8?B?bmt1K3ROQWdLbHNGTTJROWFWTVhyc0tEUW1rdVkvaW13RC9ubmZVK25DVnZz?= =?utf-8?B?UEZxclRjZGZZM1NPS1k4Y25RSEloQUR4V0VyYy9hMURmclJpenJPWnFCWlhH?= =?utf-8?B?RHEvR1NKd2ZDeEovSi8weWhZWDlnRSs0TmhMbUJoR2xNOFlxa1d4UVJDV3hx?= =?utf-8?B?b1h6NDNZUjU5SUJqV3JwRnQzODMrak93ZGRrOERUdVFTQ29QdWorY3FuRzlM?= =?utf-8?B?T3FJdmpCc28wMlBOQ1BFYjVjdVVjT1JnamdhVE5xelp5MitUMk1vUnpSWXFp?= =?utf-8?B?Q0t2S3dDT2tVU0NzWFd2QVNsMTA0L2xnSFRnRzYxQkhVc0IxNS9CU29Iak5m?= =?utf-8?B?N0RXVmMwMHYwT1IxSG03V1dOSC9XM0FVSVRvQ3VuSHhmbVFZUzE5WVQ2U2gy?= =?utf-8?B?b3Y2emo5bnFOMlRRVWl0QmZ2cFFHazNZdlRvU3JPYUxSSlU3TFpTM2VoN09B?= =?utf-8?B?b293aWluZnR4eXZWeUlCazBLQmN1VmZGZEh0TGd3bkx6SnJFQUlPT295RGZv?= =?utf-8?B?YmNkNXRvZVRaTnZST3dtekp3enZKTUVVY1BMTzVxR05rVDJaS01zZkxMbWcw?= =?utf-8?B?RHV0VDh6Z2lic1dvbkNoUnF4T0pyTzZIL3p4V2NBSzNOOFB1UGJxQVpqSzZP?= =?utf-8?B?Z3pKVVpGdStJMEhLdTZ3VEpWREUwa1ZyaDFOK1Bzc3Q3ckRNVjZ0OWNyYUw4?= =?utf-8?B?SitBVTJnOWpWaVRyc2M5dVN3NlpyTUJLcnhCcXpielBUOFB3cUhQN1FnVVpX?= =?utf-8?B?Y3BBRExoeVVOOWNjdmFpUW9qc05OZUxiUjU2MEpTbk10TjlOc3ZUMHlla2RQ?= =?utf-8?B?WDhwYkZnVGRDNmRWWHQ5cFZQY2xzNFBvRVpybHFUTnltYWR3a1ljR3hGd2tS?= =?utf-8?B?S3VEeXlyU2lGZEMxSng0b1R5SU1pem5qV0ZWejV6TzZiWDhHb3VFUUVRRy9U?= =?utf-8?B?ZEF3bnhXZE9vRUtWUys1aWYxazhsOUtURTZUWWxvc1J0ai9Cakc2RWRSakgv?= =?utf-8?B?ZGZ3SzJFVFhJSVJIbE01Wkt3c0NxTW13ZjVERTduT09KanFFeFUwU3VnRjBo?= =?utf-8?B?MkIrU1RsRmtYZnFOSGx0WWY2eDBNcVBmODFLcGk2c2NvTXpNVSsySWZUNEFx?= =?utf-8?B?SWRIUE1CeGFoMnRGL24vUyt1QnZGV01nT2JHTExML0ovRm16cytYck5xaGRB?= =?utf-8?B?U0g2MldSYkhnMW54elBWYlVJemhoOG1hSk1rMklFS2xCcGl2TXNXYmNQalVY?= =?utf-8?B?Ulo1Zm5weEZCYnpDVjBaYTJWeXpHaHcyNHd2UnlZQ0RsVFc1VlJFV04vekp5?= =?utf-8?B?ZXVTcU9mNTJOOVo5RUVkeFArK1VnMkpyQ051OXQvNWZjek0wNVJKV1YzTDVD?= =?utf-8?B?YjkrNS8yWXpjeGorNitPS0hvU2VEQ05lV1JOdGNyRSs2T0VzQlMrU25Va2pC?= =?utf-8?B?cHkzMlBnU3ZNaHAzdDF6V3NYVU5UR3NTR2lIMHhaYWxVZndkSEV1cmpGdStB?= =?utf-8?B?b1hUZEhzV3pSb2JCcndjbktRSzMxS0tkKzMzbkRXWERzL1FZVHFHZzY1V1Ex?= =?utf-8?B?VkJ2VmlmSEVZU3pVZlhzcjQ4QUkwMTl2S3Bma3UxNU96bWtOUG83NWhCMTlq?= =?utf-8?B?U1lleHZDWXp6Zm9XS01XU0xnQmkyZWZnQWJqM0lQbVZTV3dnS1M0aWFtVVRQ?= =?utf-8?B?R3l1QmZVQ01jcFRGZk5udUNRMkVONGtMWk1zbk1rUDU3NytuSFNUVXNSQkJu?= =?utf-8?B?S3RnOHRKK3dWRllCTG9ieXF6Q2VZOGFNYno1Z2NpK0tKOUJoL3lwR2dhcGlS?= =?utf-8?Q?5IpVar?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TzVtczM1WGozalhOTCt6N3hEMFJwN1E5eE1JMDM3bElhWVBXQXJLdjNLb0Zx?= =?utf-8?B?dHFGMFNmQnA0NGYraHI3K0c1ZXl3MGtWWWp3NDV1dW9sT0dpR2EwQ29qQ0ha?= =?utf-8?B?bHpCWlQ5MUs3VG5UaWp3SnVmWDRMNTNoR0lpN1JqZmZkQ2lubEp4TkFUcmNC?= =?utf-8?B?Qyt0VFl2MUJmRSsxVUFsZW9oVngvMXdzV1pIUVIwOTNZU25yU0c5dEt0OGQ5?= =?utf-8?B?cjVQVjczU29PMUhaclMxanBqbmpsK1IwT0FjNG4xWWZUcExuMTF1aWV4aEdM?= =?utf-8?B?QnJCSWRWQjZJUFh3VWZtQ2srcVEvbmpnL1J0NmZUNEpaY01vR2ltNkIrSTRy?= =?utf-8?B?d3lYUCt5YnVKd3ZpdGRTYmNkdmxkSCtoSGo1T3pUam9hdFJnNy9uU0hieUNQ?= =?utf-8?B?SVJWUGRJY3ZYTnZwSlplWXF3dFg4UDRvNktxb1BPbFkwNWpJb21BdVhsUlJn?= =?utf-8?B?QnNwWGRKOUpHbE4vaXRLN3I1cmZDVVNTUTBFWkdaTi9FSzdHRlNWU0FsRHQ5?= =?utf-8?B?Z29ydEl5SlJMRk4xaFE0V1hWeXlxZm0vbGVQem83cE1OV2xYUmtEbXBITHNS?= =?utf-8?B?QjFwcm9pa1M4R2EvN2NBcWI3dWpsMUtPSVNWeGp6ek9Nd3JTMkxsTEdrWm5M?= =?utf-8?B?QmFNOFVyaTFHU3UwWG02cW9KWjhQUno0WEtkU2QzaW11VGI2T3B1ejNsdmM3?= =?utf-8?B?Z3ZaMjhWU2NlWGhLRjF3ekhqNTA4cnlxekhZbDVwb2V1eHcyd2RIN2s3WXFi?= =?utf-8?B?Z0FBMUlzdklwR1kxdVBlSkZ5Q0ZvZit4L1N1eEM2WHExRmR5a01CUVkyYTNz?= =?utf-8?B?NlRmeTlWY0Y3UXZ4MkVKc0R5N0VmQWxGcXVRWkI1amkxNXo4WWZRMUxOMkhR?= =?utf-8?B?cVRLeUpWMnFyVXhwbDRwbXpYV0U5TjIvVzYweURBNjNQRS9kWWRsdVZDK2dS?= =?utf-8?B?SmFBei9Ic0JQa2g0ZThzbkovcjhPMWVpK0JMMHJkNmRjZEp4c05FeXh0Q0FT?= =?utf-8?B?WDNuVFp4bVZmZWkyY0hlY0l1cHdCVk9BTlBENCsrNEx4dUw4aEpoa3dtSFdy?= =?utf-8?B?ZDd1RHM3NjdxeVhqSkh5RWJZQnNGTEtqdnRjdWVKRUdVazZEYjllOHZYU1RT?= =?utf-8?B?SHZkOEY2RjFWTXRVcDEyVGZySm53Wm96QWd5RHlyd0pqdWVtNUtzVzRSRksv?= =?utf-8?B?ZEZTQWFDb2ZSQlZqSGxXQ2gwbW9RbFJkQkdOSmZEOFQxdExrYjJidEhsL2Rq?= =?utf-8?B?Y1l1Q095bHY4VVY5bm9kWWtYTFM5M0VUTXZWMVQvdit6cUs2UTBnSVVmNzlk?= =?utf-8?B?UVBvL2R2N3BuNjlUM2Y2dE9ENFI0cG4wQ2JDVXhiUm5IZWRoNWhjQUVqdDBp?= =?utf-8?B?TU9jRDQrNEtqN3RtUFc2cWtoZjIxWlJKV2kzbmNjbktpT1lLUnF6Q2xhM3BR?= =?utf-8?B?a1dIQVVXUUFlWTcwQThHWjZXTzFZTEU5enNORGxhL1piSEFuVFZsTVJ4UE5D?= =?utf-8?B?SDE4MWorMTQzdGxIdE4zSk84NDRVU1QvNWVzWkUwMFZSYzdCNTdwNFIzcVhl?= =?utf-8?B?Tk9vR1YwSExjbE5JNi9xbGh5QllYRDJpaHFTLzA5d21wZE9aRFFyZUZ6R0RH?= =?utf-8?B?QndpV2tmV0duRWlkWjQ3Qm1iK1A4cEdTMU9IbWtpaHVJN1MvelplRlZJZEdZ?= =?utf-8?B?eWh3VHM5cjJzcStBU2poaDJueTc0U0psR2liSlRZVVU0bkJkbVRVNk16dWts?= =?utf-8?B?VXhYaXlJc0UwZUxnWVArQmgrTERrelQ5UFJYUFkwU2JmSDF0QnhRWCt4eVpQ?= =?utf-8?B?ejd6cFhUb2Y4ZmNPdnV2YkJ0KzNuUVVaekVxL001UVNWd2xidHdRcDdFK1Ny?= =?utf-8?B?ckFhOFBUa3c0eWZWVHlneWhwd1FvRTVnZUZsNUJGZ0V0d25ydFdrWlpDaDA0?= =?utf-8?B?RGdQV2NxcGZ6Y1F1M1lVd0VQREs4UGMrS2d5UVdLUE9uQmZFYUtIQXdhUHBV?= =?utf-8?B?QXRrSjNXUVZtQkR6YzN1UjA4K1oyVklNdnI4Q1NWNjM5aFROMjhzanduVmNv?= =?utf-8?B?eHRYYVlHMXlqclpJbGpldXBlcDFFMmhnSVYzRDFYR3JUZUdpa3ZpREp0eVpO?= =?utf-8?B?MlZIQXp4VkYrSGs0Y1lKQU0wVWJZMnVyNjJUK3VXckt2MXNvclE5dkw2MzY0?= =?utf-8?B?L0R1YkN5aWxZdm5aZk9ySGEydEx2ckJONlFCd3BZeUxMT281YUZjcWpabitT?= =?utf-8?B?YTArVU44OFJ2aWgwcytOSDhmN3dMeGM3Wno2QXhjVkJvenhiOWFqZDV5RFYv?= =?utf-8?B?YklQdkwrdVEwYW1xTVY4ZUZpRTBkaGFOVGFSUFlwSkRnNEJ3RTRwZz09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b20d0c5d-f3db-450b-cffc-08de48553cac X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Dec 2025 10:13:26.1761 (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: JzUqxVgb7T/c7maV+AWwxOJvuoKZfHIdIz6pYZI8tQkogELou2sJ+gD94ZsBlUHoLLBxmJTh9RWb9FWz0Emj+g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU7PR04MB11089 From: Peng Fan Spread spectrum configuration is part of clock frequency settings, and its behavior can be validated similarly to assigned clock rates. Extend the existing KUnit tests for assigned-clock-rates to cover assigned-clock-sscs by reusing the test framework. Add new test device trees: - kunit_clk_assigned_sscs_null.dtso - kunit_clk_assigned_sscs_null_consumer.dtso - kunit_clk_assigned_sscs_without.dtso - kunit_clk_assigned_sscs_without_consumer.dtso - kunit_clk_assigned_sscs_zero.dtso - kunit_clk_assigned_sscs_zero_consumer.dtso These tests cover various invalid configurations of assigned-clock-sscs, ensuring robustness and consistent error handling, similar to the coverage provided for assigned-clock-rates. Co-developed-by: Brian Masney Signed-off-by: Brian Masney Reviewed-by: Sebin Francis Signed-off-by: Peng Fan --- drivers/clk/Makefile | 6 + drivers/clk/clk_test.c | 121 +++++++++++++++++= +++- drivers/clk/kunit_clk_assigned_rates.h | 10 ++ drivers/clk/kunit_clk_assigned_rates_multiple.dtso | 6 + ...kunit_clk_assigned_rates_multiple_consumer.dtso | 6 + drivers/clk/kunit_clk_assigned_rates_one.dtso | 3 + .../clk/kunit_clk_assigned_rates_one_consumer.dtso | 3 + .../clk/kunit_clk_assigned_rates_u64_multiple.dtso | 6 + ...t_clk_assigned_rates_u64_multiple_consumer.dtso | 6 + drivers/clk/kunit_clk_assigned_rates_u64_one.dtso | 3 + .../kunit_clk_assigned_rates_u64_one_consumer.dtso | 3 + drivers/clk/kunit_clk_assigned_sscs_null.dtso | 16 +++ .../clk/kunit_clk_assigned_sscs_null_consumer.dtso | 20 ++++ drivers/clk/kunit_clk_assigned_sscs_without.dtso | 15 +++ .../kunit_clk_assigned_sscs_without_consumer.dtso | 19 ++++ drivers/clk/kunit_clk_assigned_sscs_zero.dtso | 12 ++ .../clk/kunit_clk_assigned_sscs_zero_consumer.dtso | 16 +++ 17 files changed, 268 insertions(+), 3 deletions(-) diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index 61ec08404442b4715dc84a563b3330cb5169f8b2..cb10156db2a37e1956d84113d17= 11e23d9d864ab 100644 --- a/drivers/clk/Makefile +++ b/drivers/clk/Makefile @@ -18,6 +18,12 @@ clk-test-y :=3D clk_test.o \ kunit_clk_assigned_rates_without_consumer.dtbo.o \ kunit_clk_assigned_rates_zero.dtbo.o \ kunit_clk_assigned_rates_zero_consumer.dtbo.o \ + kunit_clk_assigned_sscs_null.dtbo.o \ + kunit_clk_assigned_sscs_null_consumer.dtbo.o \ + kunit_clk_assigned_sscs_without.dtbo.o \ + kunit_clk_assigned_sscs_without_consumer.dtbo.o \ + kunit_clk_assigned_sscs_zero.dtbo.o \ + kunit_clk_assigned_sscs_zero_consumer.dtbo.o \ kunit_clk_hw_get_dev_of_node.dtbo.o \ kunit_clk_parent_data_test.dtbo.o obj-$(CONFIG_COMMON_CLK) +=3D clk-divider.o diff --git a/drivers/clk/clk_test.c b/drivers/clk/clk_test.c index a268d7b5d4cb28ec1f029f828c31107f8e130556..97113b61c2841701a44603ca993= 5638374000a2e 100644 --- a/drivers/clk/clk_test.c +++ b/drivers/clk/clk_test.c @@ -28,6 +28,7 @@ static const struct clk_ops empty_clk_ops =3D { }; struct clk_dummy_context { struct clk_hw hw; unsigned long rate; + struct clk_spread_spectrum sscs; }; =20 static unsigned long clk_dummy_recalc_rate(struct clk_hw *hw, @@ -83,6 +84,17 @@ static int clk_dummy_set_rate(struct clk_hw *hw, return 0; } =20 +static int clk_dummy_set_spread_spectrum(struct clk_hw *hw, + const struct clk_spread_spectrum *ss_conf) +{ + struct clk_dummy_context *ctx =3D + container_of(hw, struct clk_dummy_context, hw); + + ctx->sscs =3D *ss_conf; + + return 0; +} + static int clk_dummy_single_set_parent(struct clk_hw *hw, u8 index) { if (index >=3D clk_hw_get_num_parents(hw)) @@ -100,18 +112,21 @@ static const struct clk_ops clk_dummy_rate_ops =3D { .recalc_rate =3D clk_dummy_recalc_rate, .determine_rate =3D clk_dummy_determine_rate, .set_rate =3D clk_dummy_set_rate, + .set_spread_spectrum =3D clk_dummy_set_spread_spectrum, }; =20 static const struct clk_ops clk_dummy_maximize_rate_ops =3D { .recalc_rate =3D clk_dummy_recalc_rate, .determine_rate =3D clk_dummy_maximize_rate, .set_rate =3D clk_dummy_set_rate, + .set_spread_spectrum =3D clk_dummy_set_spread_spectrum, }; =20 static const struct clk_ops clk_dummy_minimize_rate_ops =3D { .recalc_rate =3D clk_dummy_recalc_rate, .determine_rate =3D clk_dummy_minimize_rate, .set_rate =3D clk_dummy_set_rate, + .set_spread_spectrum =3D clk_dummy_set_spread_spectrum, }; =20 static const struct clk_ops clk_dummy_single_parent_ops =3D { @@ -3097,6 +3112,7 @@ struct clk_assigned_rates_context { * @overlay_end: Pointer to end of DT overlay to apply for test * @rate0: Initial rate of first clk * @rate1: Initial rate of second clk + * @sscs: Initial spread spectrum settings * @consumer_test: true if a consumer is being tested */ struct clk_assigned_rates_test_param { @@ -3105,6 +3121,7 @@ struct clk_assigned_rates_test_param { u8 *overlay_end; unsigned long rate0; unsigned long rate1; + struct clk_spread_spectrum sscs; bool consumer_test; }; =20 @@ -3116,7 +3133,7 @@ static void clk_assigned_rates_register_clk(struct kunit *test, struct clk_dummy_context *ctx, struct device_node *np, const char *name, - unsigned long rate) + unsigned long rate, const struct clk_spread_spectrum *sscs) { struct clk_init_data init =3D { }; =20 @@ -3124,6 +3141,7 @@ clk_assigned_rates_register_clk(struct kunit *test, init.ops =3D &clk_dummy_rate_ops; ctx->hw.init =3D &init; ctx->rate =3D rate; + ctx->sscs =3D *sscs; =20 KUNIT_ASSERT_EQ(test, 0, of_clk_hw_register_kunit(test, np, &ctx->hw)); KUNIT_ASSERT_EQ(test, ctx->rate, rate); @@ -3167,14 +3185,16 @@ static int clk_assigned_rates_test_init(struct kuni= t *test) KUNIT_ASSERT_LT(test, clk_cells, 2); =20 clk_assigned_rates_register_clk(test, &ctx->clk0, np, - "test_assigned_rate0", test_param->rate0); + "test_assigned_rate0", test_param->rate0, + &test_param->sscs); if (clk_cells =3D=3D 0) { KUNIT_ASSERT_EQ(test, 0, of_clk_add_hw_provider_kunit(test, np, of_clk_hw_simple_get, &ctx->clk0.hw)); } else if (clk_cells =3D=3D 1) { clk_assigned_rates_register_clk(test, &ctx->clk1, np, - "test_assigned_rate1", test_param->rate1); + "test_assigned_rate1", test_param->rate1, + &test_param->sscs); =20 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, data =3D kunit_kzalloc(test, struct_size(data, hws, 2), GFP_KERNEL)); @@ -3203,6 +3223,9 @@ static void clk_assigned_rates_assigns_one(struct kun= it *test) struct clk_assigned_rates_context *ctx =3D test->priv; =20 KUNIT_EXPECT_EQ(test, ctx->clk0.rate, ASSIGNED_RATES_0_RATE); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.modfreq_hz, ASSIGNED_SSCS_0_MODFREQ); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.spread_bp, ASSIGNED_SSCS_0_SPREAD); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.method, ASSIGNED_SSCS_0_METHOD); } =20 static void clk_assigned_rates_assigns_multiple(struct kunit *test) @@ -3210,7 +3233,13 @@ static void clk_assigned_rates_assigns_multiple(stru= ct kunit *test) struct clk_assigned_rates_context *ctx =3D test->priv; =20 KUNIT_EXPECT_EQ(test, ctx->clk0.rate, ASSIGNED_RATES_0_RATE); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.modfreq_hz, ASSIGNED_SSCS_0_MODFREQ); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.spread_bp, ASSIGNED_SSCS_0_SPREAD); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.method, ASSIGNED_SSCS_0_METHOD); KUNIT_EXPECT_EQ(test, ctx->clk1.rate, ASSIGNED_RATES_1_RATE); + KUNIT_EXPECT_EQ(test, ctx->clk1.sscs.modfreq_hz, ASSIGNED_SSCS_1_MODFREQ); + KUNIT_EXPECT_EQ(test, ctx->clk1.sscs.spread_bp, ASSIGNED_SSCS_1_SPREAD); + KUNIT_EXPECT_EQ(test, ctx->clk1.sscs.method, ASSIGNED_SSCS_1_METHOD); } =20 static void clk_assigned_rates_skips(struct kunit *test) @@ -3222,6 +3251,19 @@ static void clk_assigned_rates_skips(struct kunit *t= est) KUNIT_EXPECT_EQ(test, ctx->clk0.rate, test_param->rate0); } =20 +static void clk_assigned_sscs_skips(struct kunit *test) +{ + struct clk_assigned_rates_context *ctx =3D test->priv; + const struct clk_assigned_rates_test_param *test_param =3D test->param_va= lue; + + KUNIT_EXPECT_NE(test, ctx->clk0.sscs.modfreq_hz, ASSIGNED_SSCS_0_MODFREQ); + KUNIT_EXPECT_NE(test, ctx->clk0.sscs.spread_bp, ASSIGNED_SSCS_0_SPREAD); + KUNIT_EXPECT_NE(test, ctx->clk0.sscs.method, ASSIGNED_SSCS_0_METHOD); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.modfreq_hz, test_param->sscs.modfreq= _hz); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.spread_bp, test_param->sscs.spread_b= p); + KUNIT_EXPECT_EQ(test, ctx->clk0.sscs.method, test_param->sscs.method); +} + OF_OVERLAY_DECLARE(kunit_clk_assigned_rates_one); OF_OVERLAY_DECLARE(kunit_clk_assigned_rates_one_consumer); OF_OVERLAY_DECLARE(kunit_clk_assigned_rates_u64_one); @@ -3384,6 +3426,77 @@ KUNIT_ARRAY_PARAM_DESC(clk_assigned_rates_skips, clk_assigned_rates_skips_test_params, desc) =20 +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_without); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_without_consumer); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_zero); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_zero_consumer); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_null); +OF_OVERLAY_DECLARE(kunit_clk_assigned_sscs_null_consumer); + +/* Test cases that skip changing the sscs due to malformed DT */ +static const struct clk_assigned_rates_test_param clk_assigned_sscs_skips_= test_params[] =3D { + { + /* + * Test that an assigned-clock-sscs property without an assigned-clocks + * property fails when the property is in the provider. + */ + .desc =3D "provider missing assigned-clocks", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_without), + .sscs =3D {50000, 60000, 3}, + }, + { + /* + * Test that an assigned-clock-rates property without an assigned-clocks + * property fails when the property is in the consumer. + */ + .desc =3D "consumer missing assigned-clocks", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_without_consumer), + .sscs =3D {50000, 60000, 3}, + .consumer_test =3D true, + }, + { + /* + * Test that an assigned-clock-rates property of zero doesn't + * set a rate when the property is in the provider. + */ + .desc =3D "provider assigned-clock-sscs of zero", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_zero), + .sscs =3D {50000, 60000, 3}, + }, + { + /* + * Test that an assigned-clock-rates property of zero doesn't + * set a rate when the property is in the consumer. + */ + .desc =3D "consumer assigned-clock-sscs of zero", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_zero_consumer), + .sscs =3D {50000, 60000, 3}, + .consumer_test =3D true, + }, + { + /* + * Test that an assigned-clocks property with a null phandle + * doesn't set a rate when the property is in the provider. + */ + .desc =3D "provider assigned-clocks null phandle", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_null), + .sscs =3D {50000, 60000, 3}, + }, + { + /* + * Test that an assigned-clocks property with a null phandle + * doesn't set a rate when the property is in the consumer. + */ + .desc =3D "provider assigned-clocks null phandle", + TEST_PARAM_OVERLAY(kunit_clk_assigned_sscs_null_consumer), + .sscs =3D {50000, 60000, 3}, + .consumer_test =3D true, + }, +}; +KUNIT_ARRAY_PARAM_DESC(clk_assigned_sscs_skips, + clk_assigned_sscs_skips_test_params, + desc) + static struct kunit_case clk_assigned_rates_test_cases[] =3D { KUNIT_CASE_PARAM(clk_assigned_rates_assigns_one, clk_assigned_rates_assigns_one_gen_params), @@ -3391,6 +3504,8 @@ static struct kunit_case clk_assigned_rates_test_case= s[] =3D { clk_assigned_rates_assigns_multiple_gen_params), KUNIT_CASE_PARAM(clk_assigned_rates_skips, clk_assigned_rates_skips_gen_params), + KUNIT_CASE_PARAM(clk_assigned_sscs_skips, + clk_assigned_sscs_skips_gen_params), {} }; =20 diff --git a/drivers/clk/kunit_clk_assigned_rates.h b/drivers/clk/kunit_clk= _assigned_rates.h index df2d84dcaa93511694b6da842debdc3cfd3a6c19..d7ae5ec2d25bed79b8438e8ce58= 0872131ce4286 100644 --- a/drivers/clk/kunit_clk_assigned_rates.h +++ b/drivers/clk/kunit_clk_assigned_rates.h @@ -1,8 +1,18 @@ /* SPDX-License-Identifier: GPL-2.0 */ + +#include + #ifndef _KUNIT_CLK_ASSIGNED_RATES_H #define _KUNIT_CLK_ASSIGNED_RATES_H =20 #define ASSIGNED_RATES_0_RATE 1600000 #define ASSIGNED_RATES_1_RATE 9700000 =20 +#define ASSIGNED_SSCS_0_MODFREQ 10000 +#define ASSIGNED_SSCS_0_SPREAD 30000 +#define ASSIGNED_SSCS_0_METHOD CLK_SSC_CENTER_SPREAD +#define ASSIGNED_SSCS_1_MODFREQ 20000 +#define ASSIGNED_SSCS_1_SPREAD 40000 +#define ASSIGNED_SSCS_1_METHOD CLK_SSC_UP_SPREAD + #endif diff --git a/drivers/clk/kunit_clk_assigned_rates_multiple.dtso b/drivers/c= lk/kunit_clk_assigned_rates_multiple.dtso index e600736e70f5041ddeb1bfb0d6074746a064e08a..6c54d65444d5d779c9fa4bb2a79= c4742dd88f6d0 100644 --- a/drivers/clk/kunit_clk_assigned_rates_multiple.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_multiple.dtso @@ -12,5 +12,11 @@ clk: kunit-clock { <&clk 1>; assigned-clock-rates =3D , ; + assigned-clock-sscs =3D , + ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_multiple_consumer.dtso b/= drivers/clk/kunit_clk_assigned_rates_multiple_consumer.dtso index 260aba458daf2bc57fde46b5442453e7de10faac..b1fee396c4b1e51341a41116856= 9d8351bb23b12 100644 --- a/drivers/clk/kunit_clk_assigned_rates_multiple_consumer.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_multiple_consumer.dtso @@ -16,5 +16,11 @@ kunit-clock-consumer { <&clk 1>; assigned-clock-rates =3D , ; + assigned-clock-sscs =3D , + ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_one.dtso b/drivers/clk/ku= nit_clk_assigned_rates_one.dtso index dd95ec9b1cf977883f71564a94602ae518937132..da6e91b9e6bda0ef2c8f601a08a= ef1f10fda4baa 100644 --- a/drivers/clk/kunit_clk_assigned_rates_one.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_one.dtso @@ -10,5 +10,8 @@ clk: kunit-clock { #clock-cells =3D <0>; assigned-clocks =3D <&clk>; assigned-clock-rates =3D ; + assigned-clock-sscs =3D ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_one_consumer.dtso b/drive= rs/clk/kunit_clk_assigned_rates_one_consumer.dtso index a41dca806318b031187c1b8739fcf71eb088a480..4b6e06048f863d014aed8222652= d6d9d38e9238b 100644 --- a/drivers/clk/kunit_clk_assigned_rates_one_consumer.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_one_consumer.dtso @@ -14,5 +14,8 @@ kunit-clock-consumer { compatible =3D "test,clk-consumer"; assigned-clocks =3D <&clk>; assigned-clock-rates =3D ; + assigned-clock-sscs =3D ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_u64_multiple.dtso b/drive= rs/clk/kunit_clk_assigned_rates_u64_multiple.dtso index 389b4e2eb7f74f1770ff5f5c4be5b45dd344dc9c..3a717dab2d00b7fdaff580e30ed= 2cc520683ef95 100644 --- a/drivers/clk/kunit_clk_assigned_rates_u64_multiple.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_u64_multiple.dtso @@ -12,5 +12,11 @@ clk: kunit-clock { <&clk 1>; assigned-clock-rates-u64 =3D /bits/ 64 , /bits/ 64 ; + assigned-clock-sscs =3D , + ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_u64_multiple_consumer.dts= o b/drivers/clk/kunit_clk_assigned_rates_u64_multiple_consumer.dtso index 3e117fd59b7da19cd8a603af77eff29175ce6900..cbee7cbad068f3336f0c8997a5b= 3e9af4db565c9 100644 --- a/drivers/clk/kunit_clk_assigned_rates_u64_multiple_consumer.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_u64_multiple_consumer.dtso @@ -16,5 +16,11 @@ kunit-clock-consumer { <&clk 1>; assigned-clock-rates-u64 =3D /bits/ 64 , /bits/ 64 ; + assigned-clock-sscs =3D , + ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_u64_one.dtso b/drivers/cl= k/kunit_clk_assigned_rates_u64_one.dtso index 87041264e8f544dafddf2e905efc89dc1f917c54..9b04d6927f0830a5621af1cbea5= 03a427b46bee0 100644 --- a/drivers/clk/kunit_clk_assigned_rates_u64_one.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_u64_one.dtso @@ -10,5 +10,8 @@ clk: kunit-clock { #clock-cells =3D <0>; assigned-clocks =3D <&clk>; assigned-clock-rates-u64 =3D /bits/ 64 ; + assigned-clock-sscs =3D ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_rates_u64_one_consumer.dtso b/d= rivers/clk/kunit_clk_assigned_rates_u64_one_consumer.dtso index 3259c003aec0be3269ab60a4a3a95df69f8de1f8..4784d40520f4193e4f08c898138= 6f0772a063452 100644 --- a/drivers/clk/kunit_clk_assigned_rates_u64_one_consumer.dtso +++ b/drivers/clk/kunit_clk_assigned_rates_u64_one_consumer.dtso @@ -14,5 +14,8 @@ kunit-clock-consumer { compatible =3D "test,clk-consumer"; assigned-clocks =3D <&clk>; assigned-clock-rates-u64 =3D /bits/ 64 ; + assigned-clock-sscs =3D ; }; }; diff --git a/drivers/clk/kunit_clk_assigned_sscs_null.dtso b/drivers/clk/ku= nit_clk_assigned_sscs_null.dtso new file mode 100644 index 0000000000000000000000000000000000000000..43b2068c845dea53ea1328bb63a= 2f58a4b8ef339 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_null.dtso @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +#include "kunit_clk_assigned_rates.h" + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + assigned-clocks =3D <0>; + assigned-clock-sscs =3D ; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_null_consumer.dtso b/drive= rs/clk/kunit_clk_assigned_sscs_null_consumer.dtso new file mode 100644 index 0000000000000000000000000000000000000000..bda008f5aaa35e53af97863e4f2= e6d8a168cc053 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_null_consumer.dtso @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +#include "kunit_clk_assigned_rates.h" + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + }; + + kunit-clock-consumer { + compatible =3D "test,clk-consumer"; + assigned-clocks =3D <0>; + assigned-clock-sscs =3D ; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_without.dtso b/drivers/clk= /kunit_clk_assigned_sscs_without.dtso new file mode 100644 index 0000000000000000000000000000000000000000..08660846b55c12122bfb211c01c= 377a3a45223c9 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_without.dtso @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +#include "kunit_clk_assigned_rates.h" + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + assigned-clock-sscs =3D ; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_without_consumer.dtso b/dr= ivers/clk/kunit_clk_assigned_sscs_without_consumer.dtso new file mode 100644 index 0000000000000000000000000000000000000000..e1c089c6f0c0223f16f7ac9a396= e7ac7b821c967 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_without_consumer.dtso @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +#include "kunit_clk_assigned_rates.h" + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + }; + + kunit-clock-consumer { + compatible =3D "test,clk-consumer"; + assigned-clock-sscs =3D ; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_zero.dtso b/drivers/clk/ku= nit_clk_assigned_sscs_zero.dtso new file mode 100644 index 0000000000000000000000000000000000000000..f39f4e754e532c9c1b1fdf03470= 0e5af1f3f0779 --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_zero.dtso @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + assigned-clocks =3D <&clk>; + assigned-clock-sscs =3D <0 0 0>; + }; +}; diff --git a/drivers/clk/kunit_clk_assigned_sscs_zero_consumer.dtso b/drive= rs/clk/kunit_clk_assigned_sscs_zero_consumer.dtso new file mode 100644 index 0000000000000000000000000000000000000000..d6bd7dfada7e2f455cb23e483b9= bd6ce24839e3a --- /dev/null +++ b/drivers/clk/kunit_clk_assigned_sscs_zero_consumer.dtso @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: GPL-2.0 +/dts-v1/; +/plugin/; + +&{/} { + clk: kunit-clock { + compatible =3D "test,clk-assigned-rates"; + #clock-cells =3D <0>; + }; + + kunit-clock-consumer { + compatible =3D "test,clk-consumer"; + assigned-clocks =3D <&clk>; + assigned-clock-sscs =3D <0 0 0>; + }; +}; --=20 2.37.1 From nobody Mon Feb 9 04:56:04 2026 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013005.outbound.protection.outlook.com [40.107.159.5]) (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 E181D31A575; Wed, 31 Dec 2025 10:13:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.5 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767176015; cv=fail; b=RPPYn9kWc83GGpbx/ZMjVRyscbjc/q6Xbn9qgLq9Zchd+Qe7VuFiLHoe7nJGsF31xvuAyOUz4qUncotzTHcmfU1lfhbDyiyoPUqvGeyEuMSVBguNpYOIENiBB4qqRFSkEOT+19IV60wBr0U3dq30+/PqbYo9W7O3qI1XVTQPkIk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767176015; c=relaxed/simple; bh=+hOJ4I+Goi4OkBL2R9kNM1VlXnZmu3W6t9Exvux8RyU=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=bJ6LzP4erYvmrWAVcooqKJjly5uXCrH7uQytN9QI9zDdY6LDYRQIu7FQbmTRScYLrdLgwxsBQ8Q9xHES636hEzERFNUrNpsoK5BCfz5JHezRqj1ExolpHXNIUaVQFk5CKc1gZKlLcvlLq94X4BoavyKS9ixfPOH3fR55EfmqueQ= 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=Nrk1DXA+; arc=fail smtp.client-ip=40.107.159.5 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="Nrk1DXA+" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NUlvRozkWBZQa8Ws6b8O0yVVyAeele7jqjVFo99ts+Vpvt0iaSCEUhAp6OxgQV1M0nzoz02LT3Kul5LJiFRQvwrL2TeM3HnUcjOY2UbKnPMGIwcgHGEX2KjcbwyjUG8NDcCyF/EADjKrelMchxOOyXCTWjuRh3AZfQ0Tgpj+RX0F5UqEmq4CYQ6FNRFLZ8Cv+bJcoEOcGKOfylKrjKzi54WZrPYXsA5TyPYUtxFY5sc3BBoq7D4C7UepZA4DRHPTIOr581hAhZ+tvR+yAiFawOKCJc7FwHcjTj3ACcoaxhs0GS6Yqlnn4KgXBrzGMzJOr+I58e0ZaNtDg5fyQaTgwg== 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=vv4b6BXKDGsrbzB7WGUe4UBy5CTRXGMJh5EzfdmH+Jw=; b=vdS0vso/lap9xBYR+Jjzivha85bjPPX9d2IVbvVOv9X5BhkwRXt0hDVzdF3/plbQh7Cc/8WpcNiIbxpTnBhaHDp3khKsveYXQRDVDjUsyeUjiziC5ed9f8A/HIVilTh6wX7mNvwvq13ooXOskDt9HWEHZ7/aJYZqhGwqJmjiu7NIMqgzagz1ITQJZCivgG32Yf/cY80vha0BkbYIU1SKRub2a1hrifvP+oEe977IoxSNfDDPQf09UOr05hD2kQgzKr4C8C+Zpq4kHXfwIG83fa4sz6JMwUTjny38WH2o1BcUBJ163e6iBX5uvMwbAu9LNmToYdq9ZshGleMYhMwQBQ== 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=vv4b6BXKDGsrbzB7WGUe4UBy5CTRXGMJh5EzfdmH+Jw=; b=Nrk1DXA+V7Vub3aFvuHncJkdTKU8vINO2H/uKZA2MuaQC3OKSYM5D97ryGb7M+fyGmw6wGxBudRIsHhrrfO40uN38Ql3mXRowl1sWAatxkv1ac6j0w7aFpDMJlwqsAfYan1NcHA7ANjh3JXrf31wYLz5vOAXt52EKiz/YBTlweM8LwEmBwaJJkjl+Yn/mQu8Siw0kWpk2eUMvDF4GcfgyMJtXlFErO/v7wv7g+TTEVY/yoqPsvlVmHcKUkIWq2yDKBK22gdqGxgh9XaIJD1Xel5PIcP6gCat0f3A0q97VbJ7SJTep/co8yTh1FXHE75vouFmDOx87uZ3jgvLQlSa3Q== 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 DU7PR04MB11089.eurprd04.prod.outlook.com (2603:10a6:10:5b1::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9478.4; Wed, 31 Dec 2025 10:13:30 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%4]) with mapi id 15.20.9478.004; Wed, 31 Dec 2025 10:13:30 +0000 From: "Peng Fan (OSS)" Date: Wed, 31 Dec 2025 18:12:52 +0800 Subject: [PATCH v7 5/6] clk: scmi: Introduce common header for SCMI clock interface Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251231-clk-ssc-v7-1-v7-5-380e8b58f9e3@nxp.com> References: <20251231-clk-ssc-v7-1-v7-0-380e8b58f9e3@nxp.com> In-Reply-To: <20251231-clk-ssc-v7-1-v7-0-380e8b58f9e3@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis , Brian Masney Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: SI1PR02CA0005.apcprd02.prod.outlook.com (2603:1096:4:1f7::13) 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_|DU7PR04MB11089:EE_ X-MS-Office365-Filtering-Correlation-Id: 4e350a1b-70cc-45c7-3e8b-08de48553f2d 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|19092799006|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?THVxSWROZm1pUlc2RjlnU1NFTUNvQ2IyNzJ3eDhoUGg0RnRFWlBhTStoeDA3?= =?utf-8?B?V1ZtZ1JGbkROc3c5MDdERzRZSktlNzcrb3kvbGJVTFZHSFptUnk1YlJudXE3?= =?utf-8?B?MDJBTE5XeElIbVBCL0lBVGgrR3lJZWVTNXpEQkdOZUxSZDZaM005Zms1Zzdx?= =?utf-8?B?VFdLbzJXT3hJWWRsendwTTVZUlRyQTh1azJBSExzTkpOaDJkUVhIdUkyMVhE?= =?utf-8?B?L2ovaFoxSHBPeXovN3VOZ1VSTFRPSnNMRTViMS91cU9JYWhvMGF5aDg3NWFY?= =?utf-8?B?N1k0ZTh6WmhiQ0doKzVra1JxUG4zdHZxTkt3QlNNMFBxUWp6REd2WFR2ZndQ?= =?utf-8?B?a2RRMXF0SDFnenhZWWkxTEdldzFYMnFYcFpEYmd3bmtxelU2elpqY2oyTUM1?= =?utf-8?B?N0gvY0VoQUN3WVlRaEVhcXpQV0Y0aDdiODdLYjZOTkRsVStHbjdrdWxtREFv?= =?utf-8?B?VFFIOGRYUGtDNSt1T2tVcG1neG5DR090aWo2WmNMa1BDSHJ0RHpUUDdIRWVP?= =?utf-8?B?YmQwRmRxVlFicXc0U2JmRFNTbHRHSklzZlFsaVppS082L1RreWZaTDJDcWg5?= =?utf-8?B?Smw5aFRDQUhFSXBQQWJENmpWV1dEWHBlUDdrNlpLVm5ZYW9qd2FESmZScTM4?= =?utf-8?B?TVVJQUFuSlcxd1RGS3VCcmpzc3JpQWl2bHN1RnlnYzNoajJ3VC9PL0xpbDJr?= =?utf-8?B?VGcvT3FGaFlCdzFBN24yUkdZckZ0Y2RNNkh0NnI3Vnk5Rk9udy9ISFdzVXJG?= =?utf-8?B?YklpclU2NHNJcC9nRStjTEw2eVROcWQ3eHVaQ0VQbEVsZ0NCWC9yRG8xQXVW?= =?utf-8?B?TEdZVTVqZkYyQTN4OEtuYmtSeEJFWFF1cmJlYzZ0NWMySENMM2xmUXJId1h2?= =?utf-8?B?MkpnSmZWV001Mjd3SHU5NTF5bmMyRFd4M2QwN0lZcG1WNk9BcFFoNE5QcTc3?= =?utf-8?B?Rkp3YVdkdzBqcTZuT3hja2luV0EyQzlGbDdVMEpmNjkyNmdPUW84TzkraEow?= =?utf-8?B?ZG9DaFl1WU91V3Y4M3BhMGNxL1B3MzVuSjlSbExKMnRSaGxGUExzbWZPK0FU?= =?utf-8?B?NlNZckgxbEVWNFg3RDkzV1YrNGNoOXgwaHQ4Q2ZmZm5wTDY5UkF3bldjQzdk?= =?utf-8?B?d3MvS29SKzgvKzRldkh4dXF2bzk1dkpaUHhUZ2F3RU9vUEFLeTBFSnFCQ2lp?= =?utf-8?B?V0dJTU9ieXIxeDZoc2l0aE1qRSs4WENKZks4emYxUnJlZkZDQ1pORXdZdFFp?= =?utf-8?B?UHB0c1dIVzhHdGxnQVMvOFhWWlFLQVBjRGJJZS9mSUE3WTB4TVlEbHd3RUJV?= =?utf-8?B?aVpxYXNWVTFwTGtZeGNpTVNhbU5jVE5adi9BZHNqdElQdjRoSk5ROWxKYkM1?= =?utf-8?B?eUtuR0ZUZTRBWlF0K0hTc01vN3VyZVZNTVdhaE5SaS9sS1kyZW9LQ1ZkeGxP?= =?utf-8?B?ZlRtT0dJZGdxckQzVkRPT3l3VXBHRzUvTWM2UlZzc283WU9jWXBid2duUlQ2?= =?utf-8?B?UmJJemUxakZNdk9wL2NZbTFwK2IxTDMxVW05dGhSYUlIeWVuRUtWSDNyb1gw?= =?utf-8?B?L3dnWGxyN1IwWTV5RnE4eUdRT1NOT3crKzVqQitXUmplVjNnTXBFUkRuSHFa?= =?utf-8?B?Y0IzMjMrd3o3Y0xDK25wdkpTZkZwTjJDMUI5QVI5TkFjVy9sN0YvK2txalVk?= =?utf-8?B?ak1pRDFGaXlsYmpoK1JPQUs2VUE4N05ZL1ZDajNwZEFsVDRYOFBJZmRMeEtq?= =?utf-8?B?WVJlbUJ3YTNrOFVwRFBBK3o2dG9GK3FTNmVhSm5Qd21pYzJpdXVDY2s0RnIw?= =?utf-8?B?aXZIZ0h2TTlVcjE1YUczT0I2TUV4RlhZOGl0UERiMDNKU1g0Y1U3ZXN1aDgz?= =?utf-8?B?dHJGdmFQRkVpOWhPNmFoV1RKT2lNeVJOTWxMT2hOcE9jRVFkeVpCRzJTb3Z1?= =?utf-8?B?OFpOYzhRSUg1ZFJIRkRKK21KTWh1WTBaWHJ5M016QjVNZlZCOFVWSlFQMlBw?= =?utf-8?B?MTdHV0tIb1U5M2Z4Ui9oZ1ZCa09JMFA5c2tZM0wrcFBWcXJpdmM2NUV1T0Fj?= =?utf-8?Q?rhxYW2?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dWpDeDdHb3ViTGpVMFlianpHWEZiSmRIUEZHeHBzQmQ4MmRnQUc1cXVuZFNO?= =?utf-8?B?TjJvU1RGQWJOZFVaSWtzSVJMT281ZC94bGZQL3hoUDFtNXBUYURDSldiLzRp?= =?utf-8?B?MzZlUVZzSndRUUxGdFNGMGU4d3RHTnB3ZnV5amNsb3N0TTg2dGhRSk9HZHR3?= =?utf-8?B?OFpQMHR5alN2bHBJT3pGTVM2U1lzbWQ4L1RGZ0pJR2dOYVFxY0oyWWEzT2cr?= =?utf-8?B?VFNETzZ6ZG9lVjdrK0ZlVU0za1RWWk10TkxxVEFmcWtJMjBOSDFRcDcxNHpn?= =?utf-8?B?NnI5Q3czUERmWGlXOU9JbWxFWHB2RkdKL0dhdWROZmZHTWpGOStnUWo0TnBG?= =?utf-8?B?YWhYR0Fob2lmUDV5UlBHNUd0Z0h4VzR1TkVpdXBzODVYWjh1T1FNWHdhbkRt?= =?utf-8?B?NmlkZVBPYU9ZOFNGZWVhR0k5ZFIwRTcwOWROV0JRQTlMKy9paGhiekNyOEhX?= =?utf-8?B?QWNaL2t1YTdEK3VxZ3NTMFRsYk1xUW51MnNuZzB6anpNWmxlbDArUEpORXBM?= =?utf-8?B?NTFHNU1jaVdCcXorcVR1SXRDNmxnYkl5Tk83YmZIM0RiQ3RsRWYzTnltejB5?= =?utf-8?B?TmNpMjZSVDYrMWlQWlZITnlHMEc1VWF5dURYOGxKNWZKc3Z3Ym5GZHRJaU1m?= =?utf-8?B?dzc0UU53VTJsTnpEa3BlOFpSei9McllKbjlNRzkwYUUrQVZSUXY3MTZGRGdD?= =?utf-8?B?TXVwcy9SdXlhZnFVdlpnNnU2VjVVNTd1WnNhQnVCbFhiSTFrNXdrczV1b28r?= =?utf-8?B?ZEFjSmxQbVZCOEJKdXdNcU1obm0ySTRnL25xdHZCaEZ2WmR1S25YK0JoUEc0?= =?utf-8?B?U2ZlT1pQeFFBU0xZOFo1ZnBNcFFhb0E3dndmL1lyVUdIS01qbnJ5ZHl2N1Bq?= =?utf-8?B?VHZSU0lxdDVJY0xqdlorc1h5ODBSN1hFU0VFMnNLNkEvOGpsYTQ4em1Lcmp5?= =?utf-8?B?eE1IRXE5NnUxSXU2NmNXa2lkL3FNd2JVWWNYRmcxSlh4YTh1Q2RvOEtjbGJJ?= =?utf-8?B?eHlZVGQ0eVNzYzlPR2dqSnhpbkNnRFkzVk9SMHYwUHZhdE9DWHhJSnhUS1Rt?= =?utf-8?B?K213OGltaUlDbU8veXo0YU5CS3B1ZDRMc0tqKzh3dlRvMDhlS2l4MXJ6RUNL?= =?utf-8?B?K1QzS1JJYzdrRVc2YmxrL2VuMTNtYmt1NGdhTm1oNGQ5OUlSVHNINFI4L2hy?= =?utf-8?B?SnR2Qko3NU0zbVRSOWh2RTVOTlE3d0VqWWRkbUlJZzlSMDZ6ZmVLTW1hM3lN?= =?utf-8?B?MUVkVXg0b1NJLzVlRTdJZkRZSmh4MmxxVzNzbFQrc1M0TVhuQnpPcVQ1Z2dK?= =?utf-8?B?empYbXRqWDNMSktRbXdnWU9uSDNaa2NXSkYvN0ppMDY5dHIyelJzMnQrTDJY?= =?utf-8?B?RUV2R0NkL09HcEdWWGpIejZkd3c0dE1DZWN5UnFEa1FaNEFURWdVTTNTM1Vl?= =?utf-8?B?dW1pMkJUL0FoUUMyR0pZWk96S3ZVTzIvaExpZWx0OEE1aGdvT1VETFQweDdY?= =?utf-8?B?OE13bS9tUmxLNGRNYnJGcHd4bEYxOXBSR1ZFdGxxUHRGclVTQ1lPUE5UQ3lt?= =?utf-8?B?S1E4ajgrcmpTRTFtV1laTXBmSEg0UWtsZmNtRSsrWEZ5dm85YStoSzBrWW5l?= =?utf-8?B?Mnk3Ukxzb0t5akRQWm1UU1AwQXlrU0pQNEF3YUM1NEkyYnpCQmU2RE1QcGVp?= =?utf-8?B?a0VTYmh6YnFMZ0I5eUFROHlhemZSbXNGVndYTEtFZXo1OEFGRXFFTENxRk5P?= =?utf-8?B?U0xSVnlsVVlsdyszTGpBZnR0M1QzR1BGR2UwQ3dacGU1ZmtxSk5ZUFlWRm9E?= =?utf-8?B?R2tkcWFodjM0dUdacVkxZlVQY3V2WlloMEFpeGE0a0NOajFVeXJhc015NjdT?= =?utf-8?B?Q3N2ZWluMkxHVXM1ZUpFazhjSGRxbEQzdWVxeFQ5aXA1QVVOK084WExYREdE?= =?utf-8?B?TlpQTXpSanRJQnRpSjBvVGk3THpPdkZvV0lyaTJoTzUvV0pYNUpnRjl2bDli?= =?utf-8?B?SWNwQ3lZWUZUcldHREVrV0Y5QjBYSGFGN1Q4WDIvZnVCODhxVXp2YVBBNEhX?= =?utf-8?B?SFhBbUVlZ0R4YUVHZUoxZDkvTlZ3eWhXekhlVUxNYnRuNU9IRW9udStodW55?= =?utf-8?B?dTdmM1JFamtCeUJBRmo4M2llazlLL3FyZFZCVFpKeUdJSW1OcTVrbDlBUnVo?= =?utf-8?B?VVpySWNpVnVBV3ljSWpOT1Z3eHEyaUVoRTI1VnNHM2ZkbUg1ZFVYZ1owRHpw?= =?utf-8?B?MWYwaVdCdXhGMlkxOU1ENlJXZktueWFNUmJpb0FrNWFtTVVBaHFwZEtjK0Y2?= =?utf-8?B?Q1Q2RVV2Nlp0eW9pZzB1dGVYeVhCSHdmZC9JUCtPQldlM1pCUjFrUT09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4e350a1b-70cc-45c7-3e8b-08de48553f2d X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Dec 2025 10:13:30.3441 (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: Rt8SDfp2PC1eAsFuyxzO01HH01k1hIuZayW/0iPj5MH7FisRFDINwMkq5vKTwjXRKeeGPRnE+ZWp07qTex9gCQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU7PR04MB11089 From: Peng Fan Added a new header file 'clk-scmi.h' to define common structures and interfaces for the SCMI clock driver. This header will also be used by OEM-specific extensions to ensure consistency and reusability. Moved relevant structure definitions from the driver implementation to 'clk-scmi.h' to facilitate shared usage. Reviewed-by: Sebin Francis Signed-off-by: Peng Fan --- drivers/clk/clk-scmi.c | 27 +-------------------------- drivers/clk/clk-scmi.h | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 26 deletions(-) diff --git a/drivers/clk/clk-scmi.c b/drivers/clk/clk-scmi.c index 6b286ea6f1218c802d0ebb782c75a19057581c20..bf85924d61985eb9e596419349e= b883e3817de73 100644 --- a/drivers/clk/clk-scmi.c +++ b/drivers/clk/clk-scmi.c @@ -14,32 +14,7 @@ #include #include =20 -#define NOT_ATOMIC false -#define ATOMIC true - -enum scmi_clk_feats { - SCMI_CLK_ATOMIC_SUPPORTED, - SCMI_CLK_STATE_CTRL_SUPPORTED, - SCMI_CLK_RATE_CTRL_SUPPORTED, - SCMI_CLK_PARENT_CTRL_SUPPORTED, - SCMI_CLK_DUTY_CYCLE_SUPPORTED, - SCMI_CLK_FEATS_COUNT -}; - -#define SCMI_MAX_CLK_OPS BIT(SCMI_CLK_FEATS_COUNT) - -static const struct scmi_clk_proto_ops *scmi_proto_clk_ops; - -struct scmi_clk { - u32 id; - struct device *dev; - struct clk_hw hw; - const struct scmi_clock_info *info; - const struct scmi_protocol_handle *ph; - struct clk_parent_data *parent_data; -}; - -#define to_scmi_clk(clk) container_of(clk, struct scmi_clk, hw) +const struct scmi_clk_proto_ops *scmi_proto_clk_ops; =20 static unsigned long scmi_clk_recalc_rate(struct clk_hw *hw, unsigned long parent_rate) diff --git a/drivers/clk/clk-scmi.h b/drivers/clk/clk-scmi.h new file mode 100644 index 0000000000000000000000000000000000000000..6ef6adc77c836dc2d599ff852cd= c941f217ee388 --- /dev/null +++ b/drivers/clk/clk-scmi.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright 2025 NXP + */ + +#ifndef __SCMI_CLK_H +#define __SCMI_CLK_H + +#include +#include +#include + +#define NOT_ATOMIC false +#define ATOMIC true + +enum scmi_clk_feats { + SCMI_CLK_ATOMIC_SUPPORTED, + SCMI_CLK_STATE_CTRL_SUPPORTED, + SCMI_CLK_RATE_CTRL_SUPPORTED, + SCMI_CLK_PARENT_CTRL_SUPPORTED, + SCMI_CLK_DUTY_CYCLE_SUPPORTED, + SCMI_CLK_FEATS_COUNT +}; + +#define SCMI_MAX_CLK_OPS BIT(SCMI_CLK_FEATS_COUNT) + +struct scmi_clk { + u32 id; + struct device *dev; + struct clk_hw hw; + const struct scmi_clock_info *info; + const struct scmi_protocol_handle *ph; + struct clk_parent_data *parent_data; +}; + +#define to_scmi_clk(clk) container_of(clk, struct scmi_clk, hw) + +extern const struct scmi_clk_proto_ops *scmi_proto_clk_ops; + +#endif --=20 2.37.1 From nobody Mon Feb 9 04:56:04 2026 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013053.outbound.protection.outlook.com [40.107.159.53]) (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 EDE2B31A7E1; Wed, 31 Dec 2025 10:13:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.53 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767176020; cv=fail; b=spGTkCbk/iWr+U9fIynqhuEUzqCTaJYZqCyQ7FS8TtFyx4Lh7xP6SmCMA5DluuCSzaKCeKPMxcnVVlm3H22m2/LYjEtw28CanFI+IgQFdhx2E45Li1cqixbO2XWsNn1kNWYVsd30ZslkkCRUc0WqClkOfBM0i7h+Y/1O+2CDFfs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767176020; c=relaxed/simple; bh=MtjwLMnMCB4G8Qa0wwt4C/0IF50o/ahxCpTDoizUIQw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=e5kb9ZAIclCfdjHAMNqZGa6PbP8+sLYj8qWCH56LkllGcVWVuHCFksFeyB6Lh+dsNaJF2LWj5ooME9mvw21vRu1B3yN7clN6G6kwAH8ZntkmRFVxc9HlYtcPDC9aEUHa6LWxSV8WtEWJGOyDUm4fvCQClRrjbRoYgLwIsoDo6ww= 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=oMyYcJmM; arc=fail smtp.client-ip=40.107.159.53 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="oMyYcJmM" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eWkBMTMkd8tcQiKWEioSP4ca+GnzZuST1wuzVo9PwUE0k1sgpIyRt5qgWE7wEijrfoDQCDPnYYlnefSFp1PkFNR3iGcrYCJqEtAXQnrFBsyeaKtpJPnW5TyD4C5dcszYbhUpRdkFD4qZtrViTnawvJkQ58EuRNx6xwg1MCpojt8gWiTJOcpfI0sC8C2fAlT7UzbuYsXL4zHLVGmsy3jfRjsnboPknReYrRGIDoJx1cdNxHSyI2q49MONxrNbX3cvhQOQYOkuGpfzn3I6VLGL3L+rSfv3sCV8GXAkxsZ1ODqVs5anLFbGjODl0AWWUKhPQKLzexL03urBRzGQuTFo1w== 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=dynqfXZ9adj1/uKkn51wf9Ht4fXvBAZzv4PC+HPQrXg=; b=xwhsRjaAu/m0aZUD5SM6oiwDvKQZrNmI6PZAv1imClr807r6l6NGIrNT0rFxc2ZD0fdyNn87qXNTwitd9XlFUfgVTduekjcCoPZV9KdosAeQtLUPiZuC5bGoKk9CIVrNE9AVBE3sOsQwUE70ncwkP3N+qXpX1MZwibgZ1ohzwybkTW+qqOB1biUwWaUHNWKzfvg1xyBkISKmJIoIIkA09RvOjmhtxSoxRC7HzL7xDQfOtbbLIhLXBH6uwALa9O9gcaY0xTzAgrUuFJE/zTjASJoczi0P1h2Y7sggT68YxhgWmj04dmLpdBJ1Klw+kOLkUyS3ivGU+n21oothJIvGMw== 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=dynqfXZ9adj1/uKkn51wf9Ht4fXvBAZzv4PC+HPQrXg=; b=oMyYcJmMPsIn67f3lOoauJ82wm7UX7U2ky8Q3+fNBE0hd12l8a2uik4a/q5ZxYKdz2zZwdME1zDl3d0QiMhWpFwIEBjrQpijyryTYhMCjKhi055R7SLcR4EBFsNA/uv+NplnA7DYT3QS6hm3qBpQ6Aa+xAP6jCC3qmVN6S0mAFjezA40LoA+mqtgiKf+ZeMHltCmnfpyiz+Ia8eHyeTszkQRBy5pktNkrxGoBkMxJhdz6UJ3dzvecYKAwWZlyL4R9BLBjxsbcMvTDvH5t/2c41fEf50sBeraX+6M/3svOxyytI9ZcxEIjgEpGUuKyjfe3jQmOINb1EaxK/zjLWfS0A== 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 DU7PR04MB11089.eurprd04.prod.outlook.com (2603:10a6:10:5b1::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9478.4; Wed, 31 Dec 2025 10:13:34 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%4]) with mapi id 15.20.9478.004; Wed, 31 Dec 2025 10:13:34 +0000 From: "Peng Fan (OSS)" Date: Wed, 31 Dec 2025 18:12:53 +0800 Subject: [PATCH v7 6/6] clk: scmi: Add i.MX95 OEM extension support for SCMI clock driver Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251231-clk-ssc-v7-1-v7-6-380e8b58f9e3@nxp.com> References: <20251231-clk-ssc-v7-1-v7-0-380e8b58f9e3@nxp.com> In-Reply-To: <20251231-clk-ssc-v7-1-v7-0-380e8b58f9e3@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Sudeep Holla , Cristian Marussi , Sebin Francis , Brian Masney Cc: linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Peng Fan X-Mailer: b4 0.14.2 X-ClientProxiedBy: SI1PR02CA0005.apcprd02.prod.outlook.com (2603:1096:4:1f7::13) 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_|DU7PR04MB11089:EE_ X-MS-Office365-Filtering-Correlation-Id: 4903579f-0e64-4abe-86d7-08de485541aa 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|19092799006|376014|7416014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Y0luZEtpWU4yejVaTnlLMHdRNHBQY1dIbUphSGVxU1ZvWG5WOFRzb1NRcFp0?= =?utf-8?B?WHlCTWhWTzNJZS9kbHoxcUNiWFlCc1ZOUmpCWkhTdXRTYzBaRU1udkFzUlpG?= =?utf-8?B?T1JqY2hmTGd2dFVlODlDdWl5RHFVTDZGbUtHUHE2MHErVDNVSVNqYmF5S0tP?= =?utf-8?B?N3RxRnBkL1BIRzRnVWJKa1lKUWY2ZnpVOCtrdEdCSWZKN0x5RmZuZU9Zampo?= =?utf-8?B?R2pUZDN4SnIxZWpjV2FjTmVoZEplMUlmL0Z6dzV0N2V0aTVIMDltUkRnMllw?= =?utf-8?B?Uk5wcldtQWFHNitaaW14U1hyamVOUGVUZEg3OWhxUlBUL0t5RFhiU0g1UlRT?= =?utf-8?B?dzI5V21lWld0YW93M3lhNzB4cEI4VjMyUng5cXA2Y1E5ZlMzdHBJY1prYkRo?= =?utf-8?B?NGJSMW90eEFDRXdIUjRCUjcrS2I3d1Q3YzRJQk9KNWZVeENVSlhOUkJtbS9J?= =?utf-8?B?bm13ejhRUlBUWXBYVExwNmRnTlo3RnovNWJnNjNQVGZKMm1yQTBIZmdYbFh4?= =?utf-8?B?NllabDdWWGtsdHZQZ3NxQkxESWw4VWhJeUxjL0Zlb29TVVljZmVKd01Tams0?= =?utf-8?B?WDRpQ0FOQTg1dm5pbmF3MkZZYVpJL2c2SXloU1BhU1B6V0Z5d1RZRE43Tk9r?= =?utf-8?B?K0NEMFlPQkd3NE8xYzJaZXBmTDlacnNHWkdJR2tKajJWNG1QajdXOWZvaXdH?= =?utf-8?B?cGs3VEIxRjdLVTVGbE9PSDd4Mk5CMmJwbFlybXBnMkVRcnhiT0p4aUV2UjI4?= =?utf-8?B?NWJlSlFpR3ZUK1NXOEpPcFBTOElkaSszSlhXd3RhTXpCWEhiZGpyODczeWpI?= =?utf-8?B?YTZldHZRWkR1NER3emJmV3JYelVWcnNRREJJR2hFYzc5NmN4KzNBVHU1RExE?= =?utf-8?B?R2JLQlZXVkZrd2REUG15VFV3QUNZK3ZseE00Q2FDalJPVVBiSUlBVmFBcVNL?= =?utf-8?B?ZURMWUxPbDkrR2c0NEZwL1NXTHp3N0R4ODRoZUhTa2xtODdxYXl4RFNMV3RZ?= =?utf-8?B?ZjU4cnZKY2tNQkxRV1g4cjNEWC9mV25rMy9JQUtrTTVTY1NtY0Vuc0RwUW00?= =?utf-8?B?YmVTR29hYmhJa2YvcWY3dkhDVUpld2xCOExveVJrMEVjZk01VHRDNmhRZ1lF?= =?utf-8?B?aS82cENXemh6UFlITHAxTjc2SWlLOTJPSkJzT05aY3lISm1sc285MjdRVWpt?= =?utf-8?B?Q05QYWYyRDR1UUY5d05ZdzBBRWxwdnZXUFhEUGk5NVFzek9pRWhYVENiRmpV?= =?utf-8?B?VDR4QmlWVEhBbVdMeHF5QVEzNmt4TGduRHg0RXRsQXk2UWkxejVHNjN0QUxm?= =?utf-8?B?ZHpHWnYxQmxzMEZZeTN6d0FrT0lyUlhLZkxHd2dRMDZ3QVFiR3RNR28rYmFx?= =?utf-8?B?bE54ZkRkTHhOWGZLRXdMQ3B0UVNIU3VMMWFpSGhXSlZrWW84c0tOL2Y2bnlG?= =?utf-8?B?WTdBcE8xZk13ZGN2YllBK3hLdVVwa1k1TXJzNjZqN2VDS0FlWUtwbDlCUXVP?= =?utf-8?B?N3NIZE9JQ3U2WEYybjF6SllIL0w1cXBBU1A3Q21peVVXYXd5WXZja1JOaHRH?= =?utf-8?B?Ly9za3htS0dkUVM5dDZFWERtRkNMU3c0Z1U3YnR4SHZEdTFTbHplT1pjWVlw?= =?utf-8?B?dG9Tbm1JYWpranRFcUZYa2h4SkNmOHRZbGpnMHpJKzc1RzFiL1lHL0h5ZFRI?= =?utf-8?B?VWRGb2FCRlZEdlNqdjlZazYycmJvczhNcXFSdURFYWphekdPYmg3KzhNNXQz?= =?utf-8?B?SVoybEQ5ZTNpWjhFQ1liWFVMRzZOUDNFcGJUR3dZS09NY29NWXJKRGpGNTJy?= =?utf-8?B?K3JXVjdZTXJWM0p2WmU3ZVlJSGNsOTh4K21xMVUxQTRCNzJqWEcvVW52VkxC?= =?utf-8?B?TU1Sd082bFE3YjVPM2R2T0YxY3BTT2lYbkhUL1k2NG0wNWJzM0U3R2huc0Rx?= =?utf-8?B?NVNCMFp6SlJlUjl0QkdnTTRYZ1lFK2lReEJESWxlOWhBMWZmK3YvZkttcWdu?= =?utf-8?B?bjd0RU0xckM0NC9yN3FVcitnTzlYeXhoL09sKzBXdXFLUm5RUThaTjRiTVEz?= =?utf-8?Q?6E9NYV?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(376014)(7416014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZkE3Y2dzeXRtVWZUZ3lyOGtBMHJHcmlyRjhhQnRXWDRQSW9OSXJxSUExbFQy?= =?utf-8?B?RmU0b0xvYkUyWmFkdlh1emQ5ZlVxT3FKdHJKZ0UxbExGS091eU11b2VzWGUv?= =?utf-8?B?U09iMHB4eXRXbUx6dmx0ODlDa1pKMGRqN0pBZlQ2akl3am1QWmNxUERWeVNL?= =?utf-8?B?b3BKVjExUHhnR2V5QUxmV2hoZCtDODVOWFhlakFXeTYrNnpSWjlFNFJXc2F3?= =?utf-8?B?MHRjUEJ2MW05WWRSc3lsVWViTjc1Uk1iU0pQWE81U1NxMWVpL0dYQTdSWXpx?= =?utf-8?B?QVlyNzRDMjlLdjlJUk5VUHNlTFVnYTgreUdUUE1FR3NNeGw3Nk4wUlhoUkg2?= =?utf-8?B?a0pkOXNaUnpOR016U2N4MU1nbnNPbmZCUTdXaks0c0tZVFAzWDVhQzFyWGtF?= =?utf-8?B?cHVhZzB3dXVjZkgwMGpWcDlsOUtWa3pKem9wczZSZVhuUjc2OVZyajRQTmZQ?= =?utf-8?B?N1pKNG04ZTg4RXR3OG1Kd2dxOVF3cW52U0YyRnZoTFA2WWdZa2d4RG1NMEhR?= =?utf-8?B?cnMvdVhOdVBDRTlac3o3QTdxT2J6QXE0VUxWQTQ4cGNkSEVjdE1vYjR2SGx6?= =?utf-8?B?WmgvUE1XU2tHYkcxK3A2T0VSOFhvNXNDU2ZwTE1ySS9DRldKeXdhOGEzR0pu?= =?utf-8?B?YW5idk53Qk9XV0RkbUtlb2hBRWk0VjlsemIxUEZZYjdadVZtUnpENFptTEQx?= =?utf-8?B?Y2F5c2N4UDR6dSt0RXo0Qzg2K1JGS1pZbFVqRDIyOEI5cnd4azJvajlmZExH?= =?utf-8?B?Q0lrYUNYQ3BENDdvdXJxUjk0TytuUVpORFVRZHl2d0pXc0xmVmt2UFhUaDVm?= =?utf-8?B?NVNKWFJGbjV4K2VBMFpkZUFEZitGUVdjZE5zaXZuVk1uWURpLzNyemFsNTd2?= =?utf-8?B?OWh3RDFmYlZ4ZldRVThoNWdQRitjUCt4SUE0NnIyNzdqUUlMY0xKNFBaSGVD?= =?utf-8?B?aFBKa1NNc1FtMjgyVGlpVVQ0SmJ6MmtqL04yODVIMlNlWjVvMFVOV3o1M0ZR?= =?utf-8?B?d3FzWXV4MVEvaytzMkJ0RVJzNWU0ZGl2WVRMMTN6VU1LQjFzdHUrRnN5VEZX?= =?utf-8?B?RFdDUkF4VTdBTUtxaDlQRzNCRHZnQmRzRURXQ2lNajYxNWtjNTFreEQ5QjFH?= =?utf-8?B?c3IzdmVRZjRjazh2U2pyejdSNU5rYXZIWXNrdEtXSU15Vm1pMDB4ZWtmbU1y?= =?utf-8?B?ckUybThETUJmNXVMMHhuVnoyd2w5NEdsaDVVWVQ2TmZRa1IvenR3cDFRNWhP?= =?utf-8?B?c3NZS3BwbVNlYjZ3S3FqcmtIUThOK3dXaXFwWlB4RmxmUmxEYjk1NXVTNWli?= =?utf-8?B?dVZud0JTaFBCTU10N21iS3QrcnVTa3gxakVIdUxCSjNvaHQrZ1YxTjFMMTIy?= =?utf-8?B?Q01mNnRMWm8wMzZPeFlMandxaWVVajlyWWlReWw0aG92N3JGWjZ4cE9IRFdp?= =?utf-8?B?Q1RFTGl4bS9EZktwWG5wZDFuRy9QcXNlK1hVM01mZW1RQnR3SldkNjJzczF6?= =?utf-8?B?Z1pEdGdOdkt4Yi95cWVFcHJjTUI2dGZDTVVpL2MyT2RGbUM3Q0tFR1doRlJv?= =?utf-8?B?ZDMxRXN0TE95bFpXNDhCbTFtdnMxbjNDQXJJaWNwMktSSWZTcUFieVhnNzg0?= =?utf-8?B?ZXF3ZVhzRHIrQzN1ckIwVVIwRit2UjVaTWRrYlVRaFZOYThjcmdzZFFrT2NK?= =?utf-8?B?Q0VpU1FhTDdnTlNwREloTlZPZ1pkdkkrd1prQkp5bzlGd09rZDdMSnN5TVd1?= =?utf-8?B?Yi9FK0xLT3FmRVcvSGFTZWgxNjlvd21RUWVUMGdEcHJBRGRQVWJ3akx5T0FO?= =?utf-8?B?Q2hHYktQVUFCWU5hc0lQbzZ6KzgvakVDYjBUejNPZ3Q4dWMvdmY5SFdabnpI?= =?utf-8?B?eDRpVVgzWmpKU1paMHRTb3YvcUYwdnJWUkNEVVFEamxBRXJzVkY4NW5MVkpD?= =?utf-8?B?aEtBbUFVQkRpc2ljMmYybWpPVVJyaTQ2MCs4YVNwd2VvSTV6RDlQNjlVZW1O?= =?utf-8?B?ZE5YRHFrZzFpVXFCMlFobDFHODVqY3JGWTJsRHRuQWltbWt3MGRwVjZWdE02?= =?utf-8?B?REwwejFMaWtCYmNxZVJob2dmYjRSemdhbkRZRFppU0FFYTRZYk9hUlNlZFQx?= =?utf-8?B?bStnT0c1dHkzNFVmS3RKeFJEYk1kaVZlalhOUFErc1l1MCsvbkFBSGNhY1Y1?= =?utf-8?B?VmZJRnFWU0VsUi9GOVZMMXF1U2hLb1oxbmlPYk9SS2t1a0g5dUNieWlsdlA0?= =?utf-8?B?TkxVckJ1eHFRYnpmbU5wSzBrQzRVdDNyMHBXc0ZNczBDUEYyMEtnWDN4c3F0?= =?utf-8?B?dWdjK1Fld3hxZjVURm5iK1IxUE1wM244NGRTaSs4dHdXanBxQURIdz09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4903579f-0e64-4abe-86d7-08de485541aa X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Dec 2025 10:13:34.5381 (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: WHyKrfPADcb8qVs3RusKMKzDEBwt2WRe6A0tLRRmTNFXKk/5WwZhgdXuhscKwNqq1ck5c+DyvNhoBd6Ltnifaw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU7PR04MB11089 From: Peng Fan - Introduce 'clk-scmi-oem.c' to support vendor-specific OEM extensions for the SCMI clock driver, allows clean integration of vendor-specific features without impacting the core SCMI clock driver logic. - Extend 'clk-scmi.h' with 'scmi_clk_oem' structure and related declarations. - Initialize OEM extensions via 'scmi_clk_oem_init()'. - Support querying OEM-specific features and setting spread spectrum. - Pass 'scmi_device' to 'scmi_clk_ops_select()' for OEM data access. Reviewed-by: Sebin Francis Signed-off-by: Peng Fan --- drivers/clk/Makefile | 2 +- drivers/clk/clk-scmi-oem.c | 103 +++++++++++++++++++++++++++++++++++++++++= ++++ drivers/clk/clk-scmi.c | 19 +++++++-- drivers/clk/clk-scmi.h | 11 +++++ 4 files changed, 131 insertions(+), 4 deletions(-) diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index cb10156db2a37e1956d84113d1711e23d9d864ab..8e0e03a79f793ffab6c8636b779= 6c067287e1712 100644 --- a/drivers/clk/Makefile +++ b/drivers/clk/Makefile @@ -95,7 +95,7 @@ obj-$(CONFIG_COMMON_CLK_RP1) +=3D clk-rp1.o obj-$(CONFIG_COMMON_CLK_RPMI) +=3D clk-rpmi.o obj-$(CONFIG_COMMON_CLK_HI655X) +=3D clk-hi655x.o obj-$(CONFIG_COMMON_CLK_S2MPS11) +=3D clk-s2mps11.o -obj-$(CONFIG_COMMON_CLK_SCMI) +=3D clk-scmi.o +obj-$(CONFIG_COMMON_CLK_SCMI) +=3D clk-scmi.o clk-scmi-oem.o obj-$(CONFIG_COMMON_CLK_SCPI) +=3D clk-scpi.o obj-$(CONFIG_COMMON_CLK_SI5341) +=3D clk-si5341.o obj-$(CONFIG_COMMON_CLK_SI5351) +=3D clk-si5351.o diff --git a/drivers/clk/clk-scmi-oem.c b/drivers/clk/clk-scmi-oem.c new file mode 100644 index 0000000000000000000000000000000000000000..fd81aca7bfca254669ee117ebd5= 1e481a74cdcb4 --- /dev/null +++ b/drivers/clk/clk-scmi-oem.c @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * The Vendor OEM extension for System Control and Power Interface (SCMI) + * Protocol based clock driver + * + * Copyright 2025 NXP + */ + +#include +#include +#include +#include + +#include "clk-scmi.h" + +#define SCMI_CLOCK_CFG_IMX_SSC 0x80 +#define SCMI_CLOCK_IMX_SS_PERCENTAGE_MASK GENMASK(7, 0) +#define SCMI_CLOCK_IMX_SS_MOD_FREQ_MASK GENMASK(23, 8) +#define SCMI_CLOCK_IMX_SS_ENABLE_MASK BIT(24) + +struct scmi_clk_oem_info { + char *vendor_id; + char *sub_vendor_id; + char *compatible; + const void *data; +}; + +static int +scmi_clk_imx_set_spread_spectrum(struct clk_hw *hw, + const struct clk_spread_spectrum *ss_conf) +{ + struct scmi_clk *clk =3D to_scmi_clk(hw); + int ret; + u32 val; + + /* + * extConfigValue[7:0] - spread percentage (%) + * extConfigValue[23:8] - Modulation Frequency + * extConfigValue[24] - Enable/Disable + * extConfigValue[31:25] - Reserved + */ + val =3D FIELD_PREP(SCMI_CLOCK_IMX_SS_PERCENTAGE_MASK, ss_conf->spread_bp = / 10000); + val |=3D FIELD_PREP(SCMI_CLOCK_IMX_SS_MOD_FREQ_MASK, ss_conf->modfreq_hz); + if (ss_conf->method !=3D CLK_SPREAD_NO) + val |=3D SCMI_CLOCK_IMX_SS_ENABLE_MASK; + ret =3D scmi_proto_clk_ops->config_oem_set(clk->ph, clk->id, + SCMI_CLOCK_CFG_IMX_SSC, + val, false); + if (ret) + dev_warn(clk->dev, + "Failed to set spread spectrum(%u,%u,%u) for clock ID %d\n", + ss_conf->modfreq_hz, ss_conf->spread_bp, ss_conf->method, + clk->id); + + return ret; +} + +static int +scmi_clk_imx_query_oem_feats(const struct scmi_protocol_handle *ph, u32 id, + unsigned int *feats_key) +{ + int ret; + u32 val; + + ret =3D scmi_proto_clk_ops->config_oem_get(ph, id, + SCMI_CLOCK_CFG_IMX_SSC, + &val, NULL, false); + if (!ret) + *feats_key |=3D BIT(SCMI_CLK_EXT_OEM_SSC_SUPPORTED); + + return 0; +} + +static const struct scmi_clk_oem scmi_clk_oem_imx =3D { + .query_ext_oem_feats =3D scmi_clk_imx_query_oem_feats, + .set_spread_spectrum =3D scmi_clk_imx_set_spread_spectrum, +}; + +const struct scmi_clk_oem_info info[] =3D { + { SCMI_IMX_VENDOR, SCMI_IMX_SUBVENDOR, NULL, &scmi_clk_oem_imx }, +}; + +int scmi_clk_oem_init(struct scmi_device *sdev) +{ + const struct scmi_handle *handle =3D sdev->handle; + int i, size =3D ARRAY_SIZE(info); + + for (i =3D 0; i < size; i++) { + if (strcmp(handle->version->vendor_id, info[i].vendor_id) || + strcmp(handle->version->sub_vendor_id, info[i].sub_vendor_id)) + continue; + if (info[i].compatible && + !of_machine_is_compatible(info[i].compatible)) + continue; + + break; + } + + if (i < size) + dev_set_drvdata(&sdev->dev, (void *)info[i].data); + + return 0; +} diff --git a/drivers/clk/clk-scmi.c b/drivers/clk/clk-scmi.c index bf85924d61985eb9e596419349eb883e3817de73..1ed2091e3d4a951c8662db4c94d= ee4b9c98b8326 100644 --- a/drivers/clk/clk-scmi.c +++ b/drivers/clk/clk-scmi.c @@ -14,6 +14,8 @@ #include #include =20 +#include "clk-scmi.h" + const struct scmi_clk_proto_ops *scmi_proto_clk_ops; =20 static unsigned long scmi_clk_recalc_rate(struct clk_hw *hw, @@ -242,6 +244,7 @@ static int scmi_clk_ops_init(struct device *dev, struct= scmi_clk *sclk, static const struct clk_ops * scmi_clk_ops_alloc(struct device *dev, unsigned long feats_key) { + struct scmi_clk_oem *oem_data =3D dev_get_drvdata(dev); struct clk_ops *ops; =20 ops =3D devm_kzalloc(dev, sizeof(*ops), GFP_KERNEL); @@ -288,11 +291,15 @@ scmi_clk_ops_alloc(struct device *dev, unsigned long = feats_key) ops->set_duty_cycle =3D scmi_clk_set_duty_cycle; } =20 + if (oem_data && (feats_key & BIT(SCMI_CLK_EXT_OEM_SSC_SUPPORTED))) + ops->set_spread_spectrum =3D oem_data->set_spread_spectrum; + return ops; } =20 /** * scmi_clk_ops_select() - Select a proper set of clock operations + * @sdev: pointer to the SCMI device * @sclk: A reference to an SCMI clock descriptor * @atomic_capable: A flag to indicate if atomic mode is supported by the * transport @@ -317,8 +324,8 @@ scmi_clk_ops_alloc(struct device *dev, unsigned long fe= ats_key) * NULL otherwise. */ static const struct clk_ops * -scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic_capable, - unsigned int atomic_threshold_us, +scmi_clk_ops_select(struct scmi_device *sdev, struct scmi_clk *sclk, + bool atomic_capable, unsigned int atomic_threshold_us, const struct clk_ops **clk_ops_db, size_t db_size) { int ret; @@ -326,6 +333,7 @@ scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic_= capable, const struct scmi_clock_info *ci =3D sclk->info; unsigned int feats_key =3D 0; const struct clk_ops *ops; + struct scmi_clk_oem *oem_data =3D dev_get_drvdata(&sdev->dev); =20 /* * Note that when transport is atomic but SCMI protocol did not @@ -350,6 +358,9 @@ scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic_= capable, &val, NULL, false); if (!ret) feats_key |=3D BIT(SCMI_CLK_DUTY_CYCLE_SUPPORTED); + + if (oem_data && oem_data->query_ext_oem_feats) + oem_data->query_ext_oem_feats(sclk->ph, sclk->id, &feats_key); } =20 if (WARN_ON(feats_key >=3D db_size)) @@ -407,6 +418,8 @@ static int scmi_clocks_probe(struct scmi_device *sdev) clk_data->num =3D count; hws =3D clk_data->hws; =20 + scmi_clk_oem_init(sdev); + transport_is_atomic =3D handle->is_transport_atomic(handle, &atomic_threshold_us); =20 @@ -438,7 +451,7 @@ static int scmi_clocks_probe(struct scmi_device *sdev) * to avoid sharing the devm_ allocated clk_ops between multiple * SCMI clk driver instances. */ - scmi_ops =3D scmi_clk_ops_select(sclk, transport_is_atomic, + scmi_ops =3D scmi_clk_ops_select(sdev, sclk, transport_is_atomic, atomic_threshold_us, scmi_clk_ops_db, ARRAY_SIZE(scmi_clk_ops_db)); diff --git a/drivers/clk/clk-scmi.h b/drivers/clk/clk-scmi.h index 6ef6adc77c836dc2d599ff852cdc941f217ee388..d7f63f36c56d155f728325efd6b= cf7fe2585b170 100644 --- a/drivers/clk/clk-scmi.h +++ b/drivers/clk/clk-scmi.h @@ -7,6 +7,7 @@ #define __SCMI_CLK_H =20 #include +#include #include #include =20 @@ -19,6 +20,7 @@ enum scmi_clk_feats { SCMI_CLK_RATE_CTRL_SUPPORTED, SCMI_CLK_PARENT_CTRL_SUPPORTED, SCMI_CLK_DUTY_CYCLE_SUPPORTED, + SCMI_CLK_EXT_OEM_SSC_SUPPORTED, SCMI_CLK_FEATS_COUNT }; =20 @@ -37,4 +39,13 @@ struct scmi_clk { =20 extern const struct scmi_clk_proto_ops *scmi_proto_clk_ops; =20 +struct scmi_clk_oem { + int (*query_ext_oem_feats)(const struct scmi_protocol_handle *ph, + u32 id, unsigned int *feats_key); + int (*set_spread_spectrum)(struct clk_hw *hw, + const struct clk_spread_spectrum *ss_conf); +}; + +int scmi_clk_oem_init(struct scmi_device *dev); + #endif --=20 2.37.1