From nobody Thu Apr 9 13:38:36 2026 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11013028.outbound.protection.outlook.com [52.101.72.28]) (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 2DA553E714D; Mon, 2 Mar 2026 14:59:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.28 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772463600; cv=fail; b=AsaIxvgvFWkdj+lKJGJZu0VABtsEqx4hCYoTXDl4+wEA0zK+H0EWtHevD5xClPdWmJJ8ORjl21eUte6ABrIgjTlEKaikuU+mX7kko6/FThuZTuZD5nRr61nx7N7Iel+PsxoJvBPf2euUaNZqCS/4+a29Do7dQqYgOf30EDh5zG4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772463600; c=relaxed/simple; bh=ThP3UWOqp8sEbKXlqk6JjoFIogRFA8SOwcF47bwy3S0=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=nl8Nxjapsx6V2tRNlIKwhQOwceFVUVIDjuT+vRSfzQx4lOALHCelhzd3s7499FHkfKOmYFFF+F/BCBffOjn9y+AdjYz0W1ThnN4J4B2JSn6fGJE0fYjBy4CAs5sbTdJCCshtVtm3Tuit/ZM3KvmIAn2dWYvZByfJDDvDJtfxoPI= 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=e7TyOzd2; arc=fail smtp.client-ip=52.101.72.28 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="e7TyOzd2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tPhLUHxS4gl2fnvTtSsLJUBxXs4cJkRxpF7UUSMxb7PGgM05IAiuhuF43IRKEXj+PHGXUH596hYwomyWDLHzevdbheX4uAJOkklW9uTu5pxdMfmyBUbnbDuGptUT7V4ykEtCQdq17uTJpaBZI5XgyAIy4VIdf7b98F/VJIgqjmWLmev5bAJVok6jj9c9bQAjGV/hPkxP88FxsMtrC3xqpOk/BRpRzqL3lE4JXfavNwplBB4vyC9Ds8Tt40Y1cEjNOCe+aBhrdvB1GLiPe7a7g+egOL2kQ2sc1J00uxdhHQ34xQPgYdklVbYjldfO5uaBqZEKyVy3WwDzR3uCeVin1w== 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=RlJPMV4mXfYpJntgVkRWha4YIxsMr9LyEcbVSdgNv+FdSKgnqAN6Vh7oMOD+gH85Tm5MQYNv+m2DWqO1w24E0uvDLIQl2JktPRkVbeDWrs2MCtIQULXY6vB07ge+hc1LO8aTA42HzTiWDx69dJtwcPsnvxImyauzhBi7r3UkvgBuNubUS0uc8PqBdEzWsgTbB/xEreKnr8L3rcCA+DCTwRgG2KcXCd4PlBG96Kkxwldsfnwcsi4Z0Z8hymi+nhjpEg3pHpLOcMKjgKM1PBjcR9+VwejkGx5MHDXoboR1iBsPTa4eDLNQnjWDThPiMS5quF2nIU0iCxHn5txHW3rQXw== 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=e7TyOzd2BjoG5i9NaVZ1Sot5ov0pNF1tf2l3oycUt+ueWZXHYOPXJXOSzLrEE2QFlv8MXkoESuu8ruo7SNaYcryhsUtjkXq+fLicBCoJURa97w/rtRkuTtEemyukkPxZpetWt3FLmh3NqR/5+ntWELIM8eXEDoNE7dpnY80+pf1oIKEk2QAEG7wNfl7N9e6wTAqSNRkMCNR82bOpdgEMCbv8ublx1dXUeXfdjCFmXKsoWsYJn+4m2OrHjRyFKDWKIahuX5V3otJRw+YBx6E5xAMElV5O+YdYdgSyI7T5apZ6KFvFL5mRMOJQaXsmz3p2fqgwROOb0EXzITALoHEYvg== 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 VI0PR04MB12255.eurprd04.prod.outlook.com (2603:10a6:800:304::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.20; Mon, 2 Mar 2026 14:59:52 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e%7]) with mapi id 15.20.9632.017; Mon, 2 Mar 2026 14:59:52 +0000 From: "Peng Fan (OSS)" Date: Mon, 02 Mar 2026 23:01:15 +0800 Subject: [PATCH v8 1/6] dt-bindings: clock: Add spread spectrum definition Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260302-clk-ssc-v7-1-v8-1-2356443a7e4c@nxp.com> References: <20260302-clk-ssc-v7-1-v8-0-2356443a7e4c@nxp.com> In-Reply-To: <20260302-clk-ssc-v7-1-v8-0-2356443a7e4c@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Cristian Marussi , Sebin Francis , Brian Masney , Sudeep Holla 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: SGBP274CA0008.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:b0::20) 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_|VI0PR04MB12255:EE_ X-MS-Office365-Filtering-Correlation-Id: bde8b669-77ee-4932-68bb-08de786c5bc3 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|52116014|7416014|376014|366016|1800799024|19092799006|7053199007|38350700014; X-Microsoft-Antispam-Message-Info: MO2GmDM3QokLE8pH+ZBHqU5uJviGg53agBtoh7K6puazcn/SQ5D0qqEEsp4Qs1+T1dD3zJBjyn7X/x9wDTAIKKRXSDjCtpXa73c+ZZBxohS/fRgW9xn0Pl55VQP6XSRc5+J7S6mlId/qK7FfDaoL64LcY6SqPecPhUUL+7ug5XXtBp3YD+4VqFlvgx+7OUWISYveO3jCmQiXRXyehI0eOYzkGmNcvSqAtg7IT8UzGAx0j6smstIJv6MlJNJIFPtu4VCWURSaM6UYo5uhS1+AKoQGlTAqSz5q2WiBSWQhL/P5IiJXiQoezklMW3r3s5CwIIHc2YMELjSBLqCSYX4pLOD3UInrgCZuqyj/ckwflc/BjCJ9hFRshfzZPly5dmdbzoG4Y3UWUekmLC2yd9d6u4E/3MIbb2907ZWl/2/Kyg/06c6Q1ugjvQnha/9Ur0QxUMxSMSMnEv5CzfhaE4JZSm5/4USeqXazi05uH8fI1Q0BG1/cy4OhXKGx9UNfOVOvmgU4e21yjQI6VhojBjAyRPF/TuGvoZ8lJuMxBwG+72r2uK7DyOzyxCUPwsCOd0cPPD1lJ2R0LdOzHl3sMuVH7nWAFK6KRkIXEQxHCWxVWJpRwXmej9xI2p/xeJY7x8zgz0zfu7a+1AQPdOwZoz3I9JNw8s3iXJ18tpfLobgV1t8c3DNr2CQG1NYubEDBKAVOwFO2TPltWVC0nLWtQMg15BE8fG/QVwpLySotd6fkikb2feA/JKzH3pYOcLrAfnjIRSeNmGeXOoY2fDc1I3qVyYCzzo9MUYC3lpJQ83Dozvc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(7416014)(376014)(366016)(1800799024)(19092799006)(7053199007)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RFgvQlhRSGlRMWNQcEJ1MTM5UUx0SFVNWEkyUEo1KzNTUElxMlNVY1MvUkRX?= =?utf-8?B?OTVJRDJiUi9XMkVSWVdlUXVYa0xFK0FsMFhsK2hDMjIrSmR2M0VpNXpRcmZM?= =?utf-8?B?dmRiN2ZEVFFvVy9xSEFIMStKL0VOQ1lFREhtemI0VitUaHk1UmJ4ZFhLR0do?= =?utf-8?B?NmxXeUxoemNvMnVKa0MzNi81eGYrTDJuVzJ3ZTJ5WFNOUmp2N2hvRmczUmV5?= =?utf-8?B?MC9tNk55eVFCZ2RtL3U1d04rclZBU1FlRDlaUFVGMzY5M1BPUTZOOUhJRnVQ?= =?utf-8?B?UnFoMlZkMnc1MVpGbGRRWEUzc0hhdTdBcFV4aFAybndvRGFkMm12UTMzZ2k0?= =?utf-8?B?SFBUWFEya0wybmZnTUVhUGI1Q1o2T2VtaDJIMzJCVUVWZkNsSlgrb3RkL0xi?= =?utf-8?B?MVMvOFB0bUYrSjdHU1djT0IxQllwcVYxbGU0bHFWV29iOFpqUW9Femc0SE55?= =?utf-8?B?VkxJSVVOUmp1czRXMDRRWW1tMXVpNkxHN01ZUVpYM3JtNGdvY3JCZksrdlZ2?= =?utf-8?B?SDdiZDQ1eDl1dVNsV1FBaEovNTlGZHM2Nkd2R2tPaHNBa2NMWUFsV0ppQW9v?= =?utf-8?B?TTNqYS9yT0NxbzhDREdSMmQzNHVnQ2QzdzV3RmhCa1JlZy91dk5kZVZqNXZL?= =?utf-8?B?c2dBcTk5ZGFrMlk3SU1YYlVSWU9qc200d2dyRXZ6UEswbmdaaHpneGlLMTdN?= =?utf-8?B?NkpqL2xveXFTZ3Iva280MUhXTzBjRnFWRm9sS1ZNb3BWOW1jTi8xU3FoZ3FO?= =?utf-8?B?Q3BSdzNQNlVuRkhMMjUxS3BzeVFwY3JBVXMvTUE2YzJHUFdUOENSaEU3R0JU?= =?utf-8?B?Y2NlSkhuMXBuSi8rRW1XQzlHdWFWV0ZMZTNwVENsVjYxZmtha1hDRGc5dWRH?= =?utf-8?B?Snl5ZitobE5zTzNqWUQwaDYrTVpJVkJvazhsTDBDWE9uSm1YUGFaNkswQ3d2?= =?utf-8?B?THQ4blhpU240QitWaFVhSDhvVzlDalBWOVhjL0crM0Z6ck1hdEZ3dnA0aHg0?= =?utf-8?B?clJTS0R0eTA3RllPZkliWDB4bWt2QkVKRHhTSDZlSEpmT2htaWsrYlBNTXVD?= =?utf-8?B?cGJ3cGhtVVhOb1liNzV3WDU4VUk2VUdpQzcwWk04ZUl0cXFlZys1Y2tTbCto?= =?utf-8?B?enI3UkxKbk9DREc4NkdDNHcvb2lPUm5RZjdKNHpaRWlJODRVTVE1bjhPSUhK?= =?utf-8?B?aW5XYkROc1oyc05kU0dOdGxqZHFwWEZJeURnTmpraE1KUU1zUkpNR1FkZW9R?= =?utf-8?B?ZTl5ZTZZUUhYenFhN3ZMb1FyL3ZTQTlaUjJHVHFaYTR6K3NGd2hDZ3NrQk1w?= =?utf-8?B?WlRNWTBLK1dYUDF2a29xQ3hGbis1ZzAyVlZwOHNOUlhCUUJlZ2sramx5cEVn?= =?utf-8?B?c1RlckhubkxUM1dqb2dTRXloVVBCZC9CK2pzT0UzTTJZMkZrT2l4bElRRHlG?= =?utf-8?B?eVlRN2s1UzNrVXpwOUVPblA0M0dFMW5WdlkzRkY2c0prdmVhR3RWYWRLenRz?= =?utf-8?B?RWhyTE5nTzE5dnZuUlgxZ0pWUElNR0w0WVBiaFZPc1ZHVGthZWl0S25nRzN4?= =?utf-8?B?VElvWGVGVFc5bWprNyt2MS9SR2pvM0Nud2NZalBESUZycVZ4enY4dkY2MWhh?= =?utf-8?B?YU02c283YnpoRmFlZ3NiY1Y5anlkczBEejd3cUI5WTFiK2NmWVR6bHRmdndC?= =?utf-8?B?R3dOVmRCTjJPYlRoaDRSRU8zd2daTzdWOWlyTktwOWEwaU9nZW5GcFFoVTFo?= =?utf-8?B?cWZkT3BOaCtrVUgrWnNueHY3alVMWEVyREFWVUJOWXowb2ZzYnh5WGZJWXZt?= =?utf-8?B?M2ZLSkVmdVpGN2xCWHd5a05NRVJKcU1yVUpBWlNyNHRWcDVzTjJKcG9wSndE?= =?utf-8?B?VTdrSDZIM3V4VjZhY09hcEZOLzlGVitRWEZnamJoYlNUZXk2dkpjbUp3NDBD?= =?utf-8?B?ekZSRHR1TjZFN1BDOEh0RnJhdUhYd2d3U0J2YWJoT3JRWmdZNVZubFhVcS81?= =?utf-8?B?UWNDZFhhRmJYQ0NsaXFWeGhSQXF2UFNNbk8rcmh6SzhWcGNwWnZHTUFsb2ov?= =?utf-8?B?TXpnQVhWWTg0Q0psM05vNHh0U1d2bnUzM21vWTVsMHZIRXdxT1F3R3pkSjFM?= =?utf-8?B?RGxUZ0owZWJGWklQY0xCelMvR1d4R0RpdTRRaFN6aitBR2RaN2dDenNMMnVD?= =?utf-8?B?QkJDdXFjd0JXM0R3RGR1eUJrVkd5d3ZFeEVCTDF4Zi9VQTZkUlRKNWVXcys4?= =?utf-8?B?bUpRcE9xcVJ3RzBDdFVhbGt6TWFMN3NIZ3pHckxwVmxJUnhCeEViOHMrcmpq?= =?utf-8?B?NXpPQUVRZXdxMkVYaUFWbG5WeXdmM3R1SGRXODJKTUlWWHpHdWk1UT09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: bde8b669-77ee-4932-68bb-08de786c5bc3 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2026 14:59:52.6577 (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: HBvl0bl9r5oqIcQgUuEc/mBPmd2+p9Mou869/0ddJU3UYQtkepMdMI6LZ21tH1kI3Vyp/8PrkDF7flVGCkXJSQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR04MB12255 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 Thu Apr 9 13:38:36 2026 Received: from AM0PR02CU008.outbound.protection.outlook.com (mail-westeuropeazon11013028.outbound.protection.outlook.com [52.101.72.28]) (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 B18523E7172; Mon, 2 Mar 2026 15:00:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.72.28 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772463602; cv=fail; b=JZi1n6oNkV4Ouzy/SwJXIwFdO7grinWFA4GlsbwDEUlHmZHUxSbFE8jyQFsXNsNv+35sqYdDRz+rAIeRqNtEppvrr5ZVeIR4OJZPgpeuodHVZlrYwd5UFojk/iFbipZSbjYsDwMDFZyVV0XPdS1US2TuYM4ghUWrjyP3qYQVE6A= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772463602; c=relaxed/simple; bh=C/xvqBForQ9M7yQs/Rlj78I3S3NA9JZfmzorGZOmgRo=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=AVJ3qGTPHn7OVK6wBG6sri/RMG+uqbAhf/KBuyeLN0v5i4lYnwWOtmv2N0MKPGdFT7/IyKAELlN+YBzI0lBzf4s1rTvAELfhFJOrgtm3h0TXK/j388MQU3LYtG4mT0mU72vozCzAj7BFBxDlAyf7t5/WTZ6V3TBqEQjznrbM46s= 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=SmSm/Oja; arc=fail smtp.client-ip=52.101.72.28 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="SmSm/Oja" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=epgbFu2NLH9daDoIMTCdJhNC6R6oA0423h9f0uqxpvu3r+iwA7PTTwJq0h9dR3fgsAhUIeNxjBqOGTBRUT2/6UN0AwAy1LbEqlo7BbTjycL/y9RaaIFvaKJYwbPL2lGBtJCXw15QogLHzDvPiQRR107loMzmWB2T/sSXQAocjdz9VMQdrDZ8h56I8FAcO1SQRnFmiN0Ppcm4lT2m18tIFblHJZrgtFCnlkbooy52PvSHAblLn5EOAr3s1Ay3ofSASIEodLdJAozgv8ZfD7u8PiudojSIIAFC3QdrFT/ePETtJeO2zW6d+mrYhe2aS8SHTE4KXr8SsX34rHrA1nvFwg== 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=cCtuE+UCAQjSInpef+rs5kwlWw6wbPSZJ85LhAy5n3M=; b=N/ZsDLsRfUeKVimIzJDXAiHRj6I0EkuDQIY0/jzlC4aBt/jryUvxMvGX/hQbCf7PloR/wv94ZZgBYJZDXXs9XsXT+Hmnf+S42soDxRt6QYHhtvTGFaWIjynTXR3y5/N39MXsOMB5hTTB3ghAxGAyB5va3yKrcId8bqEOtKMq2hlS7LQP1So0RHpHXUbi/xmPaJ+U5lISsIjMg27X1QliY+MiTaSwb1Hl/f1c0sTZctesued0ovvrcAyyvn/fZL0J+achoKXGE05aAUaQYXjNPmYEu2iZK3xQZ6MfyB0EGy7kbkuKoq6fqb/cMMUNCIUFPH1NlVG9U5UlFj0s2XqgqA== 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=cCtuE+UCAQjSInpef+rs5kwlWw6wbPSZJ85LhAy5n3M=; b=SmSm/OjacsNxwD3QQdDQd6H0Grw6rRTLr4+vITcofoGv731zEc+c63v6o9Pm6ggn/XAsaaoPe5LjRo2Z94sW/NfWnNiQ7daAyVXjNzvYFlgy80DVe0lscGkKPvKQ2O6xSmTuc92/XIz8U1AjoJRHuPS/VTYvtIwV+3TFePsID3QXr7K2CZO4bn8kQlSOKs4IK13lw7F3OtDGTH5+EzOPaZ1BQdFiiEv1jO1x7lEtt65NtQHdYC7xZryljVfIj7JOX3BCDhirIW1XtjntSTHZiZZ6V2idne5E8iwqgDZVXUL0eiE4KMCMRi9YmpFGvdcGHMIYj4mUJNyFS/mpS9+HzQ== 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 VI0PR04MB12255.eurprd04.prod.outlook.com (2603:10a6:800:304::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.20; Mon, 2 Mar 2026 14:59:57 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e%7]) with mapi id 15.20.9632.017; Mon, 2 Mar 2026 14:59:57 +0000 From: "Peng Fan (OSS)" Date: Mon, 02 Mar 2026 23:01:16 +0800 Subject: [PATCH v8 2/6] clk: Introduce clk_hw_set_spread_spectrum Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260302-clk-ssc-v7-1-v8-2-2356443a7e4c@nxp.com> References: <20260302-clk-ssc-v7-1-v8-0-2356443a7e4c@nxp.com> In-Reply-To: <20260302-clk-ssc-v7-1-v8-0-2356443a7e4c@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Cristian Marussi , Sebin Francis , Brian Masney , Sudeep Holla 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: SGBP274CA0008.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:b0::20) 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_|VI0PR04MB12255:EE_ X-MS-Office365-Filtering-Correlation-Id: bac5c06c-37ea-4021-9834-08de786c5e73 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|52116014|7416014|376014|366016|1800799024|19092799006|7053199007|38350700014; X-Microsoft-Antispam-Message-Info: 3HlG9XlqvuPrVJo1OnRgVqBw85jHHXrxeYfWnjjI2AaSXjXJ+pj9OMI4JtAez+7uDa8EdUR2t6/v+cmrGrIUUeZhxdkiOtKY+YWYAUzQ+5AAxWfUlQ73pv47ryqf6z8FRwq9NIiLY239ArTPrvrIZbRCj1yV/z+H8jn9edCiUjTDgR2tG/hjamo4mbZ3dnyf9omqLyuZy8qLaVNgVRXo80pm9vHrMvp+1k3cl+FgIHXcF1RTB6wXFdLA48Cwb0UbCanHSaKabSbe/Lrw0mRaLuf3Wkzx6ctbMkJ/Hy5SPiUopTwpDWtGW2MThTrfHCpMQP6Cfb97hBuIZGqxHsG2z9NrYoQNQBXPaOEd1FsWgEPEgzHuC5WTNrcqC0UKHYxesCmfH2LyJpL4bdlFgozDpKcgzvenxdwiv30Qk2nAuXevjw/wNt9fFEu0wyO9hFNt96E64fSUl6haOF+XfXzsmkI9CotD6Zlcx/HXoF8xmyjCWWof+RKSTs/b7qdxZTyFBxoq19tDeGTKOMbf3NzuRBgjofqsGXxNJfFzn5Qw78bEZWqSqTNAzp44rtT+CgeUMpbBIyCDEg8l3G+nTbACDVWBl3XO6Z9wSoF7suc+L3ok7rDJoztLtXu1ylKZtMJHGK/VryloMeVIEnHYEG1vJdDGf3n2TwmM4Ui7deIA63mk6Zbhxun4hMgc78Idb0Tz/oUiuoJrUrpVSh8YCix6KRYZMYMpDK3YyX9QIO3VgXDYw2V554Lx61zjZ7OsGuP9b2UxtXPx7YAplHxsbN98QOzcDIwLtQdiMycyHczX2Uo= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(7416014)(376014)(366016)(1800799024)(19092799006)(7053199007)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RVN2Z2YveFRIVXhsMUJZY1dENVdSSTJtZkxHYTk1ckRGVmJVZTFxSWYybzRo?= =?utf-8?B?SGdVRXN6NzR3Ris2NTNuQjlxekN4RTBQcThXK0poZ0s2Vkp4dXQwV3lobFFw?= =?utf-8?B?dHJsb0cvM09Oc3ZwdEJ4bi9TTktiY21SKzJ0U2V5ZDg0RXova2ZhbE9PbnJO?= =?utf-8?B?WTRNRCthT1RUWFB1MzB1a09pM3BndDZyVVkxdHJ5TTRPZkNyS0pzUWk2Ti9I?= =?utf-8?B?bzJ5Z2xzcWtHQTdkNWJjRVdXbmw5VXdCU005eWROZloxdEo4L1RkTWVFdWQw?= =?utf-8?B?R0VIRFBjZ1NXV0djRU80ajNiUllWNjRaeG9kNUxxdEVyT3VjQmd0K0VFYmNk?= =?utf-8?B?QW1OQkduUmY4Zm11THZZUkN3QmpsSXBZSXR2OWhPR214UHhDbExDeXdWK3ZG?= =?utf-8?B?WDZtd1VUcWFFK3U3cGRZV20xekJDa1d5MWNhck1nNDdUeS9acUdNOEVIOGVl?= =?utf-8?B?K3dqZ2ZnUnArRjdDdS9wSGd4Qjc2YlBIajZnMGtCdzVXV1pSbEpqZ3RhNXN0?= =?utf-8?B?bTZiTy9CREJWMk9uNS9ETTRyMXlJQ2NxYVkrc1haZ2l3b2RxOHBBYVRlS3NW?= =?utf-8?B?TjFITmVQWEhNZ0NZNHF4RkY3aWpvVjlITFY3QkxFWEJ1Qml4NDI2bDJReE9m?= =?utf-8?B?U0w1ZXdGREt1MzF6QktIUmlnTElQeUt5d0Q5ajlqb051aFFKeDhOcVU3NHV2?= =?utf-8?B?czFyZkZWbm1yUjlwVHVKdSt4dCsrazJlWTlJbktuWDExaGtzV0hKN3hrdU1p?= =?utf-8?B?Sll2RlVtaDIyazZsbTdZcitxQldya0dJUGFXNWpjeTZmcFFDTVVqdHNhUUVq?= =?utf-8?B?ZEdJc0VEb3hiS2w2VjFLQ1lWVzRmdTJMRXJTcGdsSVlxazlYWm9LK1JUYTRh?= =?utf-8?B?RXZ0Vkw5cUFIcXpBWHF1OEFqN3c4d0R2cGFveENtVTJFNjlrQXRFTUg3SXRh?= =?utf-8?B?VmJmV3NZenhTM2piUmtiT1VXTnRqZ25pZGJOejliY1VRY1FlWGp6cWFzNWpu?= =?utf-8?B?SkZGa0h0Rk0wL3lCWkhGKzR6REVpclNpV3UrU0RNZGxMNWRtc3A5RXIwdnJD?= =?utf-8?B?R251QjdzZUZMT0lUQkV3b016MHU3Tm5BVEhDU1BHUFl3c2FRSG1ydENmTzVp?= =?utf-8?B?bDg4YndaOVlyOEpXbWxJcC9xeEl2cVlIU3hqM3pWOGZMNzNMbTUrZ1ArZmhq?= =?utf-8?B?dlFwaTRzVU00c0tleTliMUoxYlMrdXBTUDV1VFJ1aFZFWlJMalA1WHZmOVV5?= =?utf-8?B?SU5SS0tZeTBRTmJoaG1yZjRMVk13bmlBTEZTdnVmVVN2SWRndzRkaUwwRmlK?= =?utf-8?B?ejI5S05rOEFBM1B3WG4zMmZxZSsvamd6OUZ1OXVRT28ydUVlV3RIRS9tamcy?= =?utf-8?B?Sjk5eHZ6UVZ0UnpPczNSc1dsTVF3TnRqaHI1U1dReXJlb01nMXFudjZRMU9m?= =?utf-8?B?RmhWdm5OU3hWa1ltcXlJY0dtVFFFYWtBVytLQWZ5S0xNMERWY3dJZ3d2Zlls?= =?utf-8?B?cUo1TVpJb093TmM4Q2NOQit1VEZxeTd6czRYc0RLdlIxMUpSd3dhWm5JaTBO?= =?utf-8?B?dVJUcEFxZlRCVXVBY3RadDUwaVVtY1N4d25mZ3EwZUdjcWhNcEgrSENXTVBE?= =?utf-8?B?Y0MrYngwRGdGV0xtUW4zZnF5UE41Rk1KR1ZDQ3ZJZ1RXbDZWcFhMKzl0S1pm?= =?utf-8?B?V2lCeXZ0c2hRWFYydE8veGFWK1FyZFNiUVRDdW51L0h6OEFyRE5ybnJiMS9y?= =?utf-8?B?TG1ZNktVZCtNem5XaTVWdXRXU3N6MkNwUmFrbWM2MTQ4Z1BUZjc1M2R5cnAr?= =?utf-8?B?MEFzeEtnQjlub1NUdkczd0k2ZjB4TFBERGFxTkxpODdCdDkvQk1kTWdyVmpZ?= =?utf-8?B?WVBsbDRVWVZXSUROVEVnSVhOQVNOazQrcFg0SWNoNDN0M3pYR0NZTzNpQnYy?= =?utf-8?B?OSs4dVNpb0tUbDdlQ21CU3JuVDFTTVh6VUVQOW9HSHNTYTAvR0RJQXZndmdZ?= =?utf-8?B?MURwZ0ZacTEwbU9PQnRvWTQ1RDdyT1BIWXo5Vm4rTlVKcVlNd0lhT2xDTEhS?= =?utf-8?B?VUZCYXcvb3lQUlZxVUZOOG9yV0NWYmFWL3Zqa25hUHdOL24zdWgxV3gxc2pt?= =?utf-8?B?dXRKdGtMQVA1R3FTaUxiMndNWjdGcWYxMVEyRnJTOFZQSFQxbFQvZEh6TmYz?= =?utf-8?B?Yks3alFNcndLMnBSeHdmcnIyeHlkTHV4dU5XY20wSmNCcXdIQXJBT1dxVFJM?= =?utf-8?B?Nk8wbHRnTGluVlVVdXZNZEJJSWlxVHcxVkU2cWJNWkUybXJnYXlIMndER1NN?= =?utf-8?B?dWx5Y3N2cTROZnhoV0EvYVErbm1NTWNaVjl4a3o5eWJRa0M1cXZ6QT09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: bac5c06c-37ea-4021-9834-08de786c5e73 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2026 14:59:57.0834 (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: bc8xx8CmQR63Apj0OTxLH1F/XW9SSGuBy7Tz2fYnPvzKdAhs4FG4nNuHj0nHms+fpU0l1mGEjR8ZJS+OyD4Whw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR04MB12255 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 47093cda9df32223c1120c3710261296027c4cd3..3d9b2e2f7a5b269e1f07bdcd410= 1799ff6839441 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 Thu Apr 9 13:38:36 2026 Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010056.outbound.protection.outlook.com [52.101.69.56]) (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 63372280035; Mon, 2 Mar 2026 15:00:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.69.56 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772463605; cv=fail; b=pwh5q4d+mqwE0gKYzx0e6F+KSz0s+6aR+38LVItXAQFbGfxcIxaZpGd02h/Fj3EVKF2z6JI7DB8+GxN52bYpZiFMmInA3iVZ4X2AN9mMvT2j31up1k/tiCDJc8gdOohD7HnEFkv8vAJaQvjHHtOg+UbGCQGUM391yDOLyrfgLCA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772463605; c=relaxed/simple; bh=3HptXKt/4iO51FKUPRBtm6nMsR3DFpWhRUYjRtXyTEI=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=DeVAiH9J+Io8rB85FjuXU8RblIbDKaGTTcL8GNevUIAyuxU1l/9q87VLp0hwH2qpyIY3LfXa/oC2n4nw126c+Q65W4VUE5qVi5aKzq+c0Bc7UYth/hJNWyO4VIKw3BHLPbacOP0YeWuWQKipy3YqjCW9nmkCjXGfTRd9C8tdVec= 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=DAzi28uk; arc=fail smtp.client-ip=52.101.69.56 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="DAzi28uk" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IjW8HpD1hqke4orc+aeiIEtamu4ngu43CoYAuSCBQqC09q9RueAgg8y964LU2zKuTUYZh5nucD/TtveDJ55cFsZ0PUvy+CYtkT8OnoFz0NHx0hP8GBpXwkB2cdIteyNwB25apFEle+g/IhX/RzS75hmp11EuzIYC33GWVCdV3ednMfiwQVAvlA5EG9NSUFRl9STF4ppkNzjH7s8J3OHf8Uv1OdpAH+IA0o6a82GxyslMJM1LNb2N5e2s/GYIJRfOhUfH+49E1nqzPWhVPnWdVQbuWwKh1+ecgz4vLVY6JgZtySS7AlgXbWEBDGpT1OKWzHl2+wDCTYjhpNm+NP+Omw== 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=d9uiSys0zNJoAI2dfCBmi5/209qch4y1USxmbimumDCs4lmRsRIPAXTA0XtyVnpmrNEt253hVIzJR09FHF0I8WQtTe83xIswVuHpqDQFkb82Zd+SPqQmHKZ4uyP9JhFW4CLm+1rHPIyAprfnUtrN0kdxqUB52+/MmVP6m3J5B6047MGF5GWRq/9YktiEPdnhHnyvpL7OL1xAeO3+kRMwK04QZu29Rrgky+D1BWVYHy2WIFGQw+jZf95CaYqujnhzAWgPQnBLqU9vV7R1uvjZhFJ91G0/aWmhCX9AmIk8iRo4X5uSpGiWqy6lm7knwareLxvIccm/AKME5zirN1k7vg== 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=DAzi28ukGzHBxZRbWazgAx5PvAD0mOO3vBXOAzNKbmYKsthrXHg6TBraFSJKw2Q162af1Ho2dAEBUHjnTBbopDbYKZQ7y+FWkKq859HzyIVahZdRaUT1o/mXNEUSYrHcxg8i+5qVOjIhZYEvbc9c1Ad29/nWTXRabdDfjexR/OTi1IvY2ivQiofifL1nkaq+gO0QNdqPKAlN6ipfUrZnq+udFlV7PHY3shOS8ZlZCdyCJ5U+Zi0VuDkH6RcihtNhig/el5E/ewWk+n0Kv7zZqCP9/e69sXG9Ynh3UShGtM7LAdDUvC8B5lirvSzD+DUE/AqO0Bl7oSnX3TK0I0qkaA== 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 VI0PR04MB12255.eurprd04.prod.outlook.com (2603:10a6:800:304::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.20; Mon, 2 Mar 2026 15:00:01 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e%7]) with mapi id 15.20.9632.017; Mon, 2 Mar 2026 15:00:01 +0000 From: "Peng Fan (OSS)" Date: Mon, 02 Mar 2026 23:01:17 +0800 Subject: [PATCH v8 3/6] clk: conf: Support assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260302-clk-ssc-v7-1-v8-3-2356443a7e4c@nxp.com> References: <20260302-clk-ssc-v7-1-v8-0-2356443a7e4c@nxp.com> In-Reply-To: <20260302-clk-ssc-v7-1-v8-0-2356443a7e4c@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Cristian Marussi , Sebin Francis , Brian Masney , Sudeep Holla 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: SGBP274CA0008.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:b0::20) 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_|VI0PR04MB12255:EE_ X-MS-Office365-Filtering-Correlation-Id: 260968fc-7250-45e7-becd-08de786c610f 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|52116014|7416014|376014|366016|1800799024|19092799006|7053199007|38350700014; X-Microsoft-Antispam-Message-Info: a7CTCuQ/J0CmN0VPncs7aFMiKAN9yaOhtdjREowGcqUFIzyorTsINovYD5GZJshOaH8diqJIl5Cf/EbuM3geQudPuESkuNKulNjoFQOK+ksTk0CPqcjzI0Mi7iy22qMiuSzcGB9ET5V6P4a8K91kO3a445OHMfijqGm6XQnpektwuWcbDCZNUINDtc9867r00MriKXX/gnmThjBn+zAmPPVQwk8j46vB1fDFcUVuB31Jzurg+NEmR4hPo3z+OAwjjzFIaJciGzUTIm7jM1IudYqiKh3+4g/3SLg7i8FnXEka8baqiX/KDwXiQuTKKOU1GhmVQmt/hFconrgbVLXo65UPw2Db64NYDHi2EECOigSZZ3PAvOvlDQkXR/WLjx+lXTu7PvdX2hp+DqSSzVTHvZ6/Y0jVDeYQEhxYb8OCNJ/Etskr7Cv3hBdT0I70aH4LWYvda/5G5oVG0Fi+VlcXN8yjcpqiJnYtn2zwng1EZXzXPwGEYOvIqgTf5wBIBak5kY2OovdoJ8UYW5iQMXJUDsV7mWhxPhNrkT+3uxLyzD5nd3RVhuNU4is9O5der+q6dbkD0y3WFaSeo4tJKy9BHQ+MeDjwHYrt5/NRWxqeTw3cDJVWcqdA2ZcHJI7696CKpBJdcTopWcct2TsaVzEzKNTXs5aTet3ARP2/EL3oYfNTsvsymMyCBk2r9arpFAfyZdrFsp7+bmoOc82BtlYJz8Gn5JjcuRDrrwTr+aj0n6sfrCfGKGYIMAoQevU4koUXizgUOZ9eLIofNiAGW0avq8c6W1/BgirlwJCRvryCNuc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(7416014)(376014)(366016)(1800799024)(19092799006)(7053199007)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dDZOL1M5dDZ3eVRLQlpvNzU3aUxGaitLdC9CVmlVdE56RzRzVEFJa1pvV1ZQ?= =?utf-8?B?bkRMNDdXd1NMY3lLMWZBQnZ2NVh0RFpPaStPbFNFemYzQWIxemhVVGFndG15?= =?utf-8?B?bkV1VXd3TzlwQWt0aXNqRmgwb0VsbDlYdkQ5djBoNmNJY2ZjYWN3Q3Nsa21I?= =?utf-8?B?VDhiamJVZ3cyV3Zndm9GL1Bkc1d3N0hzdmZBNDJqblc1ekpQRWZMNVBBREc4?= =?utf-8?B?bkRQaFRqWmNLNmg3TGZpQ3psK3IrZzQwcGo1cjJFRG1odEJIK3lHSHZzY3FR?= =?utf-8?B?T0JWK2d5dFJTQldQUEcwVVpKdTdJdER2UU4yTnRhNlM5NCtCTGJua3kySXQ5?= =?utf-8?B?czlFRDR2MTNtcXdJZjM1WDhkbEMwRjkzUEN2dTJ3UEJ6blY3SUgxU1VzajdI?= =?utf-8?B?a291enVpSGZGLytoWC8yQ1RqZGZkdk9OQlo4SkNHcFNZbmFYQ2szOXJCV3Ja?= =?utf-8?B?R2xQLzRnUWVkNFgzOWt4aVVlazdTUGwreW1ZaENhVVp1T1g2NVh3ZFNseWNJ?= =?utf-8?B?aGlYWHRCMjNzS3h5Y2JSZGlFVEREYmw5TzQzVEtEYkhvN1ljVDJxNHdyc1hG?= =?utf-8?B?anJwVEJ3M0xKZk5YZUYzTUhQQnYvRmpRdm5pc2E4UmhQejlnNjZLVG01NjZy?= =?utf-8?B?MzlDbE5NZDNobHBCcG9rV3NTSnJnMzdlcDFqNDFUNmZQaUo0K2VmUjdvbThI?= =?utf-8?B?M3VWK2ZiZEEveUVZaENkNDh6UnRMS2FnWFRhUmRtNmxrcjEzbTlTSVZSanh5?= =?utf-8?B?QTNUaDJBZzVlRDA3WnRBQ0xvOTlWRGNDdGFIRmc3Y1hMV2pHQS9EaGZGaVhs?= =?utf-8?B?QlVRWWVkTHo2Vm1mRDUyS29YUkwxdWJaZE9VaEJjR08rUjFEY0NNVUg5NW11?= =?utf-8?B?bHVXK2J2OEhQazc0VHg3Y3lHNmxXVjhBa0NwZVB5S2dFa0JRaXFaWndQaVZ1?= =?utf-8?B?Uk16VC9LTlcxdHNCeDlWVTJDNmZhMVIzc21acFhwaW9SaWlBZ2pPUUpMbCtM?= =?utf-8?B?ajY5YnNya2dib2h1TzlzcXdKY0JVK1B0RENTMDd1WVh1YmJlMkNodTBPM2hL?= =?utf-8?B?NWJ5RDJTbHlYRnhhWEl6ODgyMWpDZzNmQWFUZ3VlWmxWSGlmTUJnUGNLenp1?= =?utf-8?B?Y1BoZ3RWU2dWQkZNV2pKV3JnbStTejFEODcwMVBVY01PYmpobWVzTlhIcFhy?= =?utf-8?B?TlhTa201N1VyQzNUdXFjTS9pV2tYS2dvdG94ZzV6NERyWUN0WHo3V3o0bE9U?= =?utf-8?B?dENMTS9JdUdqTXZNQTZPbEwvTS9zUE9sZk1LdkUyYzhrY2RzL3RXUHpvazNW?= =?utf-8?B?NlpOL2dtY3JlbVFrZ1ZjRTRnaEZ0NEFVdi93UjJ3Zmgrd1pOdHZMbnZZcFVv?= =?utf-8?B?cStscllMdTVaTmJYdGV4OTNpTUZVOXVQSXJXdjdOY3dadUdLVHpKQVgxWmxm?= =?utf-8?B?Y2dBaWloSGEvU1Ntd2ZHemVmM2l4cTlXWWxORTQ2SWhSOGVhNlc1UDJIdEhi?= =?utf-8?B?ZmdQNUFTSCtUQytEUnd0TXNXVmhmSERwNDZjR2NwY3hIcFRneW95S2dJbyt0?= =?utf-8?B?QkNYY1VzckFsMjkrV2hpY3ZVUmdJN01PaVA5M3oxUEVZL1J4aUhqeWNENjZI?= =?utf-8?B?KzF4SGRUK2poYlFCUlQ2em9DenZFWnJ1cWxpTU1aMEVXZ21qYTh1ekRHR2Mw?= =?utf-8?B?VVExRUNqb3VxZzZMOTBWWDd4eHpXWHpiNzdKM0Q1d1BVcFk4dDlDUTJsNVVt?= =?utf-8?B?SmxrZXFvQ0NYS1BLbHRCSFlORUFBMWtUUitNT09QS0hoWlE5eVlBTWtZeVJ2?= =?utf-8?B?SzBOZWt3Q1J5MkVKY2txWDZzSkxtcTVkRUFjSi91UDJvU0p4ZnVtemF3K21C?= =?utf-8?B?OW40Z0lOMmJVc2xJdTFPak40b2tzVDFmTzk1NmhoRjF0NmRTZjlhdUlzT0c3?= =?utf-8?B?czNEcmlJT2FIQk5obnYyb3UvY24vY25iSEoySlpodHpYbDZTNmtQOVBwYVpp?= =?utf-8?B?SHpCbVJQaGxaZUx3eDUyZDJ2RHlxVUQ5NUwydjRkQ0wrWVBHZ1NIUm5kc0dI?= =?utf-8?B?OUwybTBtTVpxdnBaa0RzbnlCRFR3MzFnN2lVMko0eWcwamZEWXFhemgzUks3?= =?utf-8?B?NXlsS3F1elZ1YXdIRENsNGg1dlc5eTFXZjlpT2pjZVJlN1NBKzgrTFhKWHhI?= =?utf-8?B?UGZyQXgwa1FLcFNjRXNZTW45Tk1wRENZYThTbWo4Z040UXNoK2lXOVFEaklS?= =?utf-8?B?bDIyWTJvRE9qNWlNWi9sYTFUVVJuMXd2azhVREcxWTYvNHNmYkwybGtEc1ZQ?= =?utf-8?B?TVZtWkpVdW10Mk02WWpKWTFYM2VqT1hvc0hMQlJBRFhiODVUczVHdz09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 260968fc-7250-45e7-becd-08de786c610f X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2026 15:00:01.4860 (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: 0zWVM9MtFGdYi2dkbbsvquWNXfa/MvOkD+bV04X8vm+ZSJAHq2HWFmsHZnU1YPQ7oSYpZ0ojun/j4JgdBl58Iw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR04MB12255 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 Thu Apr 9 13:38:36 2026 Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11013056.outbound.protection.outlook.com [52.101.83.56]) (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 D19A34014A4; Mon, 2 Mar 2026 15:00:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.83.56 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772463612; cv=fail; b=qCwOj0GMKQSJZELrqcI7/oGxBWCQU2C66QLspqGg6e/6rJQZ6FEgpGrswuQtJ2+84c9+5zwu7EzmPs3K0Yp43vcQQUZqenFLz5rhS58QYtazKWXN0RCaLM1SbHsnI/rTs3A7y49X0JKh4V+ggC4/UXEHPNmwChly7e/BYmuCqzo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772463612; c=relaxed/simple; bh=sj59GP3YzTdw/xtSMLf5pVfpZNaiYgPNPDwNTeCHLi4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=KBuNxQGTIQ0nwtRISgc8C+xZxpIdBmKe1GWYPeGG3SySkXPQIb9UL9tnMUu5DP5tARs/lvp6ju134s1E3C/XU34KzXEUV2lDujS5QXzxm7TWrCLqLVUeh/WWm3mOD3rwQt3lEaf9mYw+Lfbux7oohjgcQAQhhq8Y1nwcY6IxuQY= 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=akhgd24L; arc=fail smtp.client-ip=52.101.83.56 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="akhgd24L" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jAqYms7SG+Rl6ILrtB0O9OBu0oheP8LtzkrmREVLZaDQ6FcDjx+mMtuV0c+0wRuWmtS03++yv9YkT8IzS/ydOQWts4mQJ9lbS0Frl0AzYm1x4BTX1fg2M5pdod5tauInrKozqY2CvQUJqOUPB5RdPtkOwKM8lxRb4b6vk3PSxUmmfIsoI0XsA9Anc+MDQ+GpglksNILvO2t5IeoMVeAU02ljzTV/ExqGNc+Un+1l/KKh5V9BSQcUccfer1HDyuilzrby8KwtqAfTlPSQTSVMpa9SJYd4lwNSOkrMBOnKWMOEgTQ7X+37+/jbicRApXS9GBtjcX4bAo0aWR4mjFpUWQ== 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=gJcC5OQw0snPWn1X5UpRwqCp4PgdK+fT2Ih4F77gbmw=; b=ukvsAubxs1ZLbl9zRpCmrqnb9l0LX38Y4Fknqg/55CKs5m+nqsvBWzufsnlCympm+qrMRaENBjzEGRzMyIuhLogfro1f4EJawexp+H1iaPw/Ga9YbyRts3w0qP23P/5apJ/UCwv0SnDNE86dxvhioaQbX9WzJ1Dt1om+cH7MnsnIXbYF0fizNYi0HHDW9lRlPteVuiHBXIfi+5FOLSNEFGAV0QF2vDLZOUEA86gkR/Z95ymVMhZyuJ1W5y9l4mOxE6qRpkasbXAgBvaV1uAqALnruWKAeTBAI01BWjtCisQtauhjfOPOqeHnsE+ljaw8ijkj07uhboXeTsxOrwXgRg== 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=gJcC5OQw0snPWn1X5UpRwqCp4PgdK+fT2Ih4F77gbmw=; b=akhgd24LtS8jiaBgbvQNLYLhtFMXbZjVPwIWhLNkaqLvL2SUo55jLgNMXb6OvXq17Drdy5ec1+ol11SH4xAoZQNDY8FrNn7O5wrN03SZRe4FQkHHsatVch5xrG5IxaIb8qHm0Cwd3rcy44DnvhVazu6XAi3vf0aO3jSkRMfWlEbUYjZlhrAg2j55+QriGI35s3tqp3z82222gvH0itoMVsgHAGbR804TfczZZC0mHlyQu/RkJmL6HlSgu8lDKs9kaGUjWJ6SHHLMc663kPCAoHMXrSbpbhoSL5zC36Xn4b2totixFgZCbfnHGrf9Rlo9aaZ3BPN21ciiZhhN1LbJDw== 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 VI0PR04MB12255.eurprd04.prod.outlook.com (2603:10a6:800:304::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.20; Mon, 2 Mar 2026 15:00:06 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e%7]) with mapi id 15.20.9632.017; Mon, 2 Mar 2026 15:00:06 +0000 From: "Peng Fan (OSS)" Date: Mon, 02 Mar 2026 23:01:18 +0800 Subject: [PATCH v8 4/6] clk: Add KUnit tests for assigned-clock-sscs Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260302-clk-ssc-v7-1-v8-4-2356443a7e4c@nxp.com> References: <20260302-clk-ssc-v7-1-v8-0-2356443a7e4c@nxp.com> In-Reply-To: <20260302-clk-ssc-v7-1-v8-0-2356443a7e4c@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Cristian Marussi , Sebin Francis , Brian Masney , Sudeep Holla 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: SGBP274CA0008.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:b0::20) 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_|VI0PR04MB12255:EE_ X-MS-Office365-Filtering-Correlation-Id: 6e4a5b16-6e6e-48da-bf74-08de786c63bc 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|52116014|7416014|376014|366016|1800799024|19092799006|7053199007|38350700014; X-Microsoft-Antispam-Message-Info: Vi+JBAurPcHqi4OCsYPfohfiyM8aQzo5VkATCuUoqZ5Hl3qYXETtJD0UpaDXbfZDsTo/qBxxTn0L1T8/j5+0gJi36EA3IYEHf7OgFydGrfJMsMhN1nuhShTX5ZQYIHKccGsfxMw+PqlOmU53UaPIto+hkyIn8R2JAWO1coEULZkaRNzytpKCXA8zRctyY47LMCr8rj8sGufGqm9AiTsPr0i+KwbwcmvBwP2Spcrd9y/Ic8HygGCv+Sfj+w0pq8yBLnM0RvtEdx3oBc9AzwR3YDqHTPei6+eTNPlL/B6GCU6SR2I+zGSpTuyPGtBT48V4ELQtQLJEhFHf+j8ZAZ24VY4+XTNXxK1QZEk5ir0kyFHGAF4d/77KYsWUR5rJWrhdN5dJFs8W1RQYbXVaTTkpSNbAj0uaUP33oBSoiVsrrUq78QWMV+0cZisBq+G+3uG9CP+Tkut8ElohJ3ZvWDFMtz+Q60Uxtii+cgFRAB4yjZARxTDSNyD5tdw0LwB3uDrFGYWX0rXIUaqWXXWCLQq5ZGeqSutznWssivr28EcnYZCRCqPm4Pb35Dh0Ia1wJJRFUsCxSdKRKH+NqldNmb+thQnwlKjYWdiYmlqAHQvl5wpT6jYEkpaQg0yob25xoH8FlOhrcfVTcVo7U9MTjeS7uF6jn+2IHIdI0sfbtM4y3Eo/oMi1FkB+B6xv3PakSrrGG4urtyk3iicIIlBb2PFBELlG/kQrkjnb9ODxSmrblMz/zTDf9bDwjTZ4wP9pxpqvJZZulmVkYMKIuXqbF1JKdO1s4TXSK3fkePDZ2rocuuA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(7416014)(376014)(366016)(1800799024)(19092799006)(7053199007)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?My9ac3VvMUxtVEtFaStvTXYvYUFWeWIvZ09PenNEQi9TbFhjWU5DVDNUdlpy?= =?utf-8?B?NDBHTlhoUjZKdVhLWEE4VU5uTTlwd1UzUUdqQnBXd0VTejk5UEFVL3lJOURO?= =?utf-8?B?YnJVRUQ2QnRoSk01WU1NZHhrMWV5ZWR0VFd6ZjhKNHU1SHNyOGVqQTBkRjRr?= =?utf-8?B?aDJWK1JFTFp5aWdWNkFKSzdjQTdEeXljemozaFBOcTZ5N0lPZXZXcy9wSEpk?= =?utf-8?B?UzVrZER0TGY5QjdSZTFUeC8vM1NNVys0ZVVmRXZCSEJrR095ck9LZzQ2SXFL?= =?utf-8?B?dWdKeDNHYk9iQ0VPaElMeWlmMnpNODNZRlkxOVdLSWRacU0rZzRLV1Rjc0lP?= =?utf-8?B?dUtxWXVCQUlacGNVTkI1Uk9YSERUNERiS2s5WjdYaEhJd1ZpQTNlNGJUUVlk?= =?utf-8?B?K3dxNURNY3QwVzdQYWVyNGtzWHk3bmY4U2JCMjY0UGd0d1FsbzBHVmQ0dnhu?= =?utf-8?B?WEt6ZWREMkFiSDJpSkorcW0yMXV2cU5YT29mZjJ0bDRuSUMxNGJmcUp5Nmg1?= =?utf-8?B?TmFreHVVUko0VnVyNzZxeHhiSU9CTkNvdXZmNHN5ZFRWVzIzOG5NaEFDeDZt?= =?utf-8?B?VHIxSXJiajdmc2xNWVVUSk1CZTZSRGNXUU1qLzIxckU5WllPbjVEbTJiR0gy?= =?utf-8?B?RFJOcjVRTEdiS2VkZFJWYmVXSlIwdTZRc0t0M2FlWW8xTUpUNjFoeXVWQ20r?= =?utf-8?B?a2ZWRFRkRzFnWlhVMWkrbU1RdWFBWWlaak0wS2Z3WkxSK21iaTQzOHhqS3dV?= =?utf-8?B?c0k0RHJGRUQwWVBHYlU1akhqenB1L1l6ZEVsaWMxenBiMjZ0T3gwUzV6OFNP?= =?utf-8?B?VzlvaUpPL1dTOWRUQlo1M0dvUmNadElZK0l0Z2toZDUrQWgrL1N6UW9tNmlq?= =?utf-8?B?SE56TWpKZkx3d1B2cTlZeHJLOXd0Q3hQem81SWthTU96MHYzVmVkR0pUanh2?= =?utf-8?B?Y0tHRFBscXljQjJRcnhscTVlVXIwZHJQb1padHJ3VzFzeUUwd05Gd1drb2xJ?= =?utf-8?B?c2N2cHpSTzFyakI3L3NNaVNrTmdZZjBaZE9ENkZrTDFGYUNGb2JrUjRuZkM1?= =?utf-8?B?NUV5Q21sUHFudzQ5SHgzaitqOHBFeENGZ1FTaWl0MlhJVHduVWR0S0pvclp3?= =?utf-8?B?b1BrdGxJLy9ZT1lOMmRDaXo2YjNWWTFxcFRXNWVkSTQydzdpOUZPRVcyMUpz?= =?utf-8?B?QkRHWGZOVXJyc1k3dHZRYWJCRFVLRmZqSVYyL3ZKNHJEelNXUXJQNCsrbWFT?= =?utf-8?B?dWgzajVjQXdNY1pUOXNiSVgwV2ExT0Q5Sy9NZ1hRT3VtQVVGaFFtY3FlR1l4?= =?utf-8?B?M0JrVGR4SDJORWFoaXJLUjlZRjQ2M3RqOGpDWExONmxzcTlWTHRteU9telVT?= =?utf-8?B?dHRRMkRqYmYwZERDYnFzdWVtNWtUaUVYeDlSUkhvNVJUSlA1U1hrbG9HNHRy?= =?utf-8?B?WS9GU281WmozVkNtVlZKdlpObHR6SlMrbzJkTHN3anV3c3FaTzArZ25oZnZw?= =?utf-8?B?b3lRbGYxSEI4M1JpV2MrR1lRWHkxY083OFRrSHVERG56eTRSTTI5ZUtEVWhq?= =?utf-8?B?NTZDRW1XY0F6V3JmRDd3WHFpTWZZbS9hSEZSeWpxYWFmYU96VzJKRGcxTnQy?= =?utf-8?B?SS9vci9VYjkwWVZNQzI5SUxtVXhEdnoxejhZODF2bkoza1lxaHRwQ0cxaFIy?= =?utf-8?B?alg0d3h5NXQvL3kvRXBtQVM0dzNUZXpPR3ErZVluQ3grNDhhNXA2OUE1ZEYx?= =?utf-8?B?dk12K3hOYkRHZ0hPcnAzdDRmSUw4Y2FKZUxNRTcrT0R4cUNDNS9lYmsvUWY1?= =?utf-8?B?OFZWUTdkSm1CamZzSEdjVlVuVEoxNE5jS1hVTU9ZcFY3TUNhMXBXY2JQNXpI?= =?utf-8?B?SWgwZURGNXhOTWpqTHFIUjNpQlhJNWt0dGdycm1IRytuR01JU1ZRSk90Q2Er?= =?utf-8?B?ZEs3M0RFYSszcWsrYWFoUnpHZXVNTUU4Nng0bnhFUG5zVnc5elNJREQwS3E5?= =?utf-8?B?WFkzTnB4RVVHcEMwTytNOGZzQ095WU9RaFpjMUJXQjExS2ZsMUFpVkRXRmVV?= =?utf-8?B?RGVNd1pyYVFiZ0YvRzkxUTkvNzBmWlZ5aktFZmZmSlRhbzVjR0pQNkh1SDhT?= =?utf-8?B?S0VBV2FoakJBOFFqaDg2U2IvMkpqMERkUWtwbFdTRy9kSjVEbmU2WkdkcDA5?= =?utf-8?B?VnY2L0tPVnBIT1liNWtZUlc0V3NNRit5dlVIOEtQQXZlK3hjZzUveDZRUUV6?= =?utf-8?B?TXBtM2FoZmtiKzBUZG0zNU5ycW1aa2J4NXJiU3NOa0dlUW9XdUFSTmJ3YkhL?= =?utf-8?B?L3BzVGV6OGdWenhSLzJjdnUyWm9BNHpFM2xKSXJWcFBmV2t6STlMUT09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6e4a5b16-6e6e-48da-bf74-08de786c63bc X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2026 15:00:05.9783 (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: nAcvR8jn4Wc1YajZPQszs/Gzzhb18kGdvzMkG0C+9fdg/yGSZe7+UV4/AXaXkvrGlc4QF26wvl3F93UICrHJPQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR04MB12255 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 f7bce3951a30d2783ae1a4fd5be49aeadd538e8b..e053303984b8d61d5c74dc4cdb5= 82eb2692f4ca1 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 Thu Apr 9 13:38:36 2026 Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11013056.outbound.protection.outlook.com [52.101.83.56]) (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 4F120407567; Mon, 2 Mar 2026 15:00:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.83.56 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772463613; cv=fail; b=NzeKMeyFfCC0budNW6b3mGbz9eEMN9UP6v5257XMh8jb6GggcPqhemomJ/gtVlLe3rg+KFUiia9CNUdyT1rnH4mHPNF7Lq6aGct9gku63b2yrGhX0QgL7NKveNpJJw72/9zgXBgW/GYI9O6S68ieHQDjoiNeY5TrPyq10XGXiAI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772463613; c=relaxed/simple; bh=JLC6MakEYLjZyLi1Lk8OfpXU8eCjff8lE82qWjh1B88=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=lr5kVOyeHsuNsM2Rs5thNuk8EgNZWq8rI/gpQbZpZFeIampM+Prr0kIjtpflofu7D/PRCYX2myNQjyY6xFum3Th295Y7uE91wcUwz9+E0C3zYFfsSAyEZls4LsTDh5xzM+AuUPnWMeUz+nZkDyP1XsE47BCTkX6XMkVlqlEAKbg= 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=f81qESvF; arc=fail smtp.client-ip=52.101.83.56 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="f81qESvF" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=W22K7OQpi50Zj16pLB2pkzESieUKdTRj1qHiE6ANxB8DbPEyL9RVam1zMKd14bWSqDPpyfm6aC0mxjEobc2JCg9L/ZrqNnklRZSG38vRxZiho9GfPrw14PDGJKxVattySjnfFuGg7YrkPcQzyEI6IVG2SfUI6jtS3ji+DoO1a0/jFWJ9xyLMOZmySLiIjRJp4cvKIVJFIl+lNCmQ/X6dK9693An3/NEfb2l+zy871fFDgoR/y0Z7dRm2nyMzGRjxaRucJwNBKbh5Zf/YmY5lw44TZrUG5ngPNpphPC5pKtsgQsS/UM5Ddikj4blWtf5L8wsoX02RlAVFl1QeIevMrQ== 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=NM5JSHU1l87OPtt7ZaQFMlVLBnvdejkKoGjwrux+QhQ=; b=I9rPlOGtBLlor13CLbzwA3AgbGOQ3JoJnqAIOftKyoz0j9b01UIKwzAsnRkf3F7yElivBYS/+7eFsUQgLtHw1b2mPynbVRiipjBl7fTKz6kMASzEIo23LI3wyVlnA7naBDX5vB+y1SzgETd5ISAjq5FaoBhXevZabo0wifVi7qOvY4NJnQ2OpdE/F/HRiy7mcM6jqiN1iqHYE0tf+4pgx3GwqdHyx4QRwZg/JIBqZvK/GUryAhAs+kN6NUMXC4ZCktO6viqdX8keSaMBd/NdVTygbtVr1Rc0d+3uZd0pGvIp5mCc9CZKm/al9WPgdExhUFo1+ORx7jogC7J2LbJREQ== 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=NM5JSHU1l87OPtt7ZaQFMlVLBnvdejkKoGjwrux+QhQ=; b=f81qESvFSbu/Kzdy7adMxSSL/x5MyLLenUYMJ6eZT2sO36K1fqqYH67TAfW+L2bFiLDd/AvTJNpuzJjnc9nDlTI0drQStbJHR13Y2fcqvL8buqojgLhCVtVKGRkOLG0kREXUlTSG8twd9QExoC5fk2nqyiEwQ7wJtER4xzAkSJYxpAVauwhHyMt/NxRDf7L0jpkRhbHe/8/15NwJAFLK7RLhHpwNrxkkomxKMiVJvbv8F53UXCF2rOHxKfbsEW99GFHs1aqU4cKasmhy4tCnZmXa78vlfhIdtGUmXvcMsFcauo/Mg6W8DAzwYRth9a2Sj6QNC4pZXEmAh3tqjMC7Rg== 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 VI0PR04MB12255.eurprd04.prod.outlook.com (2603:10a6:800:304::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.20; Mon, 2 Mar 2026 15:00:10 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e%7]) with mapi id 15.20.9632.017; Mon, 2 Mar 2026 15:00:10 +0000 From: "Peng Fan (OSS)" Date: Mon, 02 Mar 2026 23:01:19 +0800 Subject: [PATCH v8 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: <20260302-clk-ssc-v7-1-v8-5-2356443a7e4c@nxp.com> References: <20260302-clk-ssc-v7-1-v8-0-2356443a7e4c@nxp.com> In-Reply-To: <20260302-clk-ssc-v7-1-v8-0-2356443a7e4c@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Cristian Marussi , Sebin Francis , Brian Masney , Sudeep Holla 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: SGBP274CA0008.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:b0::20) 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_|VI0PR04MB12255:EE_ X-MS-Office365-Filtering-Correlation-Id: 822c740a-fde7-418e-879e-08de786c665e 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|52116014|7416014|376014|366016|1800799024|19092799006|38350700014; X-Microsoft-Antispam-Message-Info: zq6yPrzdw+4J2aJCK62BQKZ+27/jAdbpbiYwMCQBx4ifa6Ueu01HM1teFzz3gbpRqnv6pit+6I4QmDK7QanBsIeEH1aUV3Z7+y9oM2e1c9KRBe6BqJjWdSP+Q3CLwWmYK1Jt4GkvEGIYmmeXY5pjVWESYM5U2pyf9arZifZXIaplkWcD+vlRg0KE7RD5hPVZajf6LQ7kLjrLEx+kySkJ/cb3xarzHTBVRf2HMc4INWk+oo8R9TvOR8uV+Qc5tXt+xhhvN9njJz302N+wsccZ8TCyoI06zdxbLQcFAy8oUhdxqiyLvW4c2licCCzsNzZxHc86S/rc5jTRCTGEgadFc4VXKLdTGC6aBMcX4Sy7FSZ07Y/LcxYcbGxVs6Wb/Ilka1lHlsjxHwRByyUJQGwmfs069oKjpck/kUeKHG1iHK1+GY20OjBzI3C13a5TUVUGUrvf7ocEjsv2qOGVkSWGuiipxT23iLRB+6LqmZ4IuOBdi64BNwcljashcBUh+I113ovSFU6HRMyyPOD071cmsLixDsWi2SB9JIWoNxTAbh8c1HpTPlgRS/Qm9PcAbRDpXr9Zfxl+h5B6QeAkpPywd0+41RqBw2e36O23geB2wK0qsvkD2v/oSiJz6sPIcOfWAxOBz5lRbxJkHzPywSvn70Popghs3ON57WR4n/QWxFF5FGnHXJksb6BtRs3fsKbOUouPsMdbo4YijrvqBTNX7/7U9bM7z0fsjbT7yNOjSYf2VQ/4OS4PG80wlZ3S/jySGW0WstiOi/iT2T+5P53K+G/jGi1lsnBUNJoFAjzIOTA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(52116014)(7416014)(376014)(366016)(1800799024)(19092799006)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TGhKNTJpMUdNYXhpRGdlRS9RWWw0NTl4Y1hFQ0pOQmtReXRjdzZpbW03bXZQ?= =?utf-8?B?aVJOcGE0V0ZneWIrVHBnanZ5MHQ4ZkFwNlFkNS9taDJpWVB1ZHdHWnBzaW9F?= =?utf-8?B?eGVoQ1VuUmVUK21pTUs3U2xJaWtrMFgxWGxHcDBBWEtWWW9NdkdOMDF2Zi8x?= =?utf-8?B?MllWL2QzYzZvTEVDZW9DWFM4cDkzZkdITlNBVWw1clZSTFVLWkpzdWRvWVRQ?= =?utf-8?B?eDdvS0dlY2dhZlJrdUd5QnN1b2IxZ1Zzc3R5NFppNk9wc0FLL1N4N2luR0xF?= =?utf-8?B?R0U5WmU5Z1FlTHVlMTFsZEZxVElPMHQ2TUd1cXFMSmo3NXpzcEk3c2tyZDly?= =?utf-8?B?Ri93UWNucFBpLzdzUUNVTlBPdWVqREtSajNBQ1lNSGVnaUljc1dwZ21NWGcy?= =?utf-8?B?bjk4ZkZ1UDU4VmtUQWMxZzJLOU1wc3Y5M1hDUEpTM211azJWZXphK2F6VTBY?= =?utf-8?B?dDMxSGhzNTh0Rys3SkZpYWRyQXNEZlQxMGFLVFE3MXZGYXZCZTdVTjhFblps?= =?utf-8?B?UTRRT2VIQUpwelJ1UnJhK1VqOGtzamZ4MXplZE9ENjEzQWszVHc0cGZWRTlW?= =?utf-8?B?TjZFQTVjbUV6WUJ6eDhWTWR0WlZlWnZienlreGwrckJGdXVHR1dKcS94cjJu?= =?utf-8?B?RVJBOU5oeWFFOE5MbmhDUEVpQitlS3YvMGtOcUtYdURXUzFsR25lQ21qWmJ6?= =?utf-8?B?Z0ZIczM5K0V6bnJLOUtpRzhMdFc0VDIyN1RvTVRhd0xMRHJWTkd1TVlPWDFr?= =?utf-8?B?MWt6bzRPNmxBK1dJb0J5ck45MFFjd3BsVHVhOW9aUEVSQllTVzJHNDRMaUdz?= =?utf-8?B?Um1lQ2xVWlVMeW1rbzVjdktwaHBsNUdFVURHRHRaR3FPaWlNUG5CNHNERHp2?= =?utf-8?B?ZUd6OUVmRmpsbHA3UVF3UE9CeUw5VlN0cWI2Vk80bWNhTFJQcGFCVmtlUmla?= =?utf-8?B?TXBxa2ZYbGVGWkQ0VE1xbHhCNnN3YkxPZ2VhVWFHdG5MY3JRMVVrMG5Vc0NG?= =?utf-8?B?cTJhcXJ1NXJwOWtqN1pMWGlDejIwbWplL2dzUmlmMnYyZCtia0RSdDhWcjJM?= =?utf-8?B?VnhVRCtNZ0NtTDYya2tVQ3YvYVJQdmFVY3NPVW45NmpBUEtaVE5keVJZZ1Zl?= =?utf-8?B?aGpLOHIxQnJPaFNqb3BDQ1h4ZmtYV1lvcG55czFJb2V1aU92ZnFSL1l0aDkr?= =?utf-8?B?QVR6QlhTTVJaOEs4UHJHaW0zWTVPMjN2MzNFUUVtc2ZzT3hyYTVPdVgrOEdl?= =?utf-8?B?K2lPUTg3Y0lPYUYzVWJLU3VBWDQyZWJLdFdLMHg4bi9Ed3lsYS9jd1ZoTHNF?= =?utf-8?B?c1Z5UGlRbFZIOFZQUHBEemE5VFovNDFUQ1RLblBTZEg4MkllZFBaRzJGSjdy?= =?utf-8?B?R3NDTVkwajk4RW5KemlVc0RhU0VQeFBUMXJ4a2pFZ3N2TG0xdGpWVW1hRDJa?= =?utf-8?B?ODVXeHFYdW56eGtaaEphV1dtOGZXaW9SZlBXbWk3cUpFWVdqd2FRN1BOTFdI?= =?utf-8?B?eVVUcmlYQ2lNdkZPUjErQyt0WG44SG5pVWZWYjhFNmZPWll1R0tpQ3VpcmVD?= =?utf-8?B?UkNsUkFGRndIZWhxc3NNeUdxT241V1ZKYjBkV0tYRmFnaDk5bGo1UEhNU2NZ?= =?utf-8?B?RVNjSHI5UE44MlFjZUh6R0RDRjRvV1B1ZjY1SzlEcWhDbjNPU0RDaTFnaWdU?= =?utf-8?B?alJKbjN5SzgzNUI3cUJtWGU1VEF1NmZSRHBMREtySDl6NDlpT2UwNGpOMnRK?= =?utf-8?B?SU5aMW1YcnNZTkZGMjk5QitwTnVOakJ3RVdMZUxKWU9OQ0p1V3I0MVZ0R3Rp?= =?utf-8?B?NUQ1dUFqdW5Oblg4WFdrUkJLME84a0FtZm4rOTNhdjduY2hKaGNubS80Z0dG?= =?utf-8?B?Mm5QVUVIaWJid004clNHc3BFcTJmNXVia2ZkMmh3cVZjYlNNWmxLZTdMQ2Fm?= =?utf-8?B?M1UxSDdaMlVkM2xwZkFhTEV4aWovbkhvUWJObExEOHF3dmI2NTE4UG1ZenRt?= =?utf-8?B?eWsyMUp6YzczZ3RwckRRb2RLLzhEOU5GcUVnK2hhZUJNU0dZVFYvd0gwV2xw?= =?utf-8?B?UXB4WFBXRWwybWhWOGdNNG9lcUQ1Vzl0VTNBMUxiRTFaUDUyMEJWYmtQdVhi?= =?utf-8?B?aTFkNzdSeXhTVE9sZ2V6cTBLWGhwM2lRWHJ4cTdFajFXSkswd2lNRDRGcUpw?= =?utf-8?B?WmliL2pSZ2w0NVJ6WFFwYUFyM3pkck1XN3E5NWJxSit0TDZPUys5WmtBeXFW?= =?utf-8?B?QWZwQVcwbDJ0aVZWT1h5aHNwanRORFdkenVLN0doZ0JvdFdIdWQvemFSUnJs?= =?utf-8?B?V1dqV0VoMDBpSDFFdE1uLzJ1UWdBbzduU0hzMk1EZExGRUNqMUdJZz09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 822c740a-fde7-418e-879e-08de786c665e X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2026 15:00:10.4201 (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: x2oG2kvnBx5a26IuwjDWXdkKlQ6Co+L2qn2tABoO8ueLemAYS/V189Pg7M7PAE9ppxQ8IeAzMHF9IygTL/oNlw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR04MB12255 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 Reviewed-by: Cristian Marussi 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 Thu Apr 9 13:38:36 2026 Received: from GVXPR05CU001.outbound.protection.outlook.com (mail-swedencentralazon11013050.outbound.protection.outlook.com [52.101.83.50]) (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 205933FD149; Mon, 2 Mar 2026 15:00:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.83.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772463619; cv=fail; b=h/rXgKtWRV+MWDX4Fw0w+OABKXE7oJ30kbJycz7p8fLg7OgIxiJJdpDg1btyCp7EKM4nHHWDguSGp4DTqQWFLG+yZc5AoWcLD1cN7m524sUBgO+MAd1wKBqdU0WiDnCZARu/dC+mDGyc4XAM95dcBpQMoWKhgV39hU/VwlOIjEA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772463619; c=relaxed/simple; bh=tI1HX8mpSjejz+ZA/DNyPXDYqPBz6FdPtlCmDEoV/MI=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=U6O9uWBcSJD0C/z+ZQbDqfxIMJhhSPM5VfqY4DmqHuDP8jhs2p16zrka2TPGwCvT0X5uUwH9MYWh4RprXj5uuqI8zITmUY3Gy42pECPXOZnStDf7XYTQ7PcX8Dz4IUwkQzZsFUcOcsjOB344ye3ktf0ehPmFEfDd5zapf0w0fro= 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=h34zAlgy; arc=fail smtp.client-ip=52.101.83.50 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="h34zAlgy" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=C2Jo12MCoJ8JqkY63qmsT7bg406/RXf08xCG8F2zttanpyeBdjfFzE03lhFZqZdPAGkzdoRLwVy6g35v0zPm9hl2sICJhOYpi4M2UsJaeWPPmG22YaBXsvoBqvWrOfwt6XEY09Ae9QOoMjxjt/nAT6lQp/aWQvwmfYvPJOOaVGxUl7PfAc6dw3Fl7pTIJO9uHrYkGkqV3ZWcEgkIisSkYBXpS7N582rkL7Nxdv+ztNY/xU2gutnl6/2t58rzJuX1OsDuhDBYiskLyL1ryNCSxTS4CHMxr8vc/FJ76WRFo3qlnraCmxUWJbIWP/0a4i7SlPMhQ24oIyMjrty4WU/5pg== 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=K5hKP3FI0Rk214qRsw38EIaBcFaDuFDqNZgMi6bwa8s=; b=dv4DR4BollyRospAGDXuWQa8wDPVhPkvl6FJFuNI7LySk5/5UWsjCQo/oNtA5TS35G8KYo3Kgfy6qp44ZgOSWnUqlE2U3AICKGEoqmFczH2RDzV2zhL7+ozhuqVLni66QyYkTashaDTQUkFyukd/6HqJsnaiHQRCLJMz+kbdQs5Y/q6/x9XBvU+10rjtDA+88J7wRwpHICOIS1ceZ6Hb07duWK/aanspW35H9FJv5bl3YEQPW3ZTFzZ9p3jd509OH/3qArS3r/dH0jA9HLeDrfaiPH5hfp2LYjtCGu19bCUvTsn/AvLF5a9c8rou4EUXjlIeC9NnHIVsAKsWuHkEqA== 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=K5hKP3FI0Rk214qRsw38EIaBcFaDuFDqNZgMi6bwa8s=; b=h34zAlgybkm64FqyXYXgrxafHCCu+Bbei8dK5C4lHdE6WHY8b9yHUWXszNfNFGHiNbsvraMcYjPF9WdNIx7zksnl7YCy1Hdt3k3JGTaH1UKzIfJOg27YJcXk7TJPyteYvXHF/3kN9B32jyze4I44cBZNJRZRbSO2zggtoTIZLxhU72QdOxG0+23rhuwVFlqotnXyU62cXlbpGTQpS1sDM2OsqHgQL79weggQCYL9xZGfrTdny+ewRYgNpangCxRfrFPCC95SvhjF6NvjG9zLK8+G9MUmND/sDyPSBQiKWK/y98Oog31dJ5FBGqNL58rnMDZzM+CwgzcGFhjJ8yla9g== 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 AM0PR04MB6980.eurprd04.prod.outlook.com (2603:10a6:208:17e::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.18; Mon, 2 Mar 2026 15:00:15 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::4972:7eaa:b9f6:7b5e%7]) with mapi id 15.20.9632.017; Mon, 2 Mar 2026 15:00:14 +0000 From: "Peng Fan (OSS)" Date: Mon, 02 Mar 2026 23:01:20 +0800 Subject: [PATCH v8 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: <20260302-clk-ssc-v7-1-v8-6-2356443a7e4c@nxp.com> References: <20260302-clk-ssc-v7-1-v8-0-2356443a7e4c@nxp.com> In-Reply-To: <20260302-clk-ssc-v7-1-v8-0-2356443a7e4c@nxp.com> To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Cristian Marussi , Sebin Francis , Brian Masney , Sudeep Holla 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: SGBP274CA0008.SGPP274.PROD.OUTLOOK.COM (2603:1096:4:b0::20) 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_|AM0PR04MB6980:EE_ X-MS-Office365-Filtering-Correlation-Id: f7c2ca11-62f4-424a-f0f6-08de786c68fe 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|366016|1800799024|376014|7416014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: fxPwGu8o4sva4g4fOLxSWC19MMTBds2St6uLNIXiccaDzz9+MMMtHsL6emh6G0NoycvAgh07fVory9wLSV5vBkDiYp6PFawcQM6uf2/Cs7qmJOvYY9CE3j+caJI5i0FgqwapuWNGbZEB/L2z5uE201bY1SrL3eerFd7AAB5b8tbowpXInwIo8C+jfqoDKyQGFZGGauDMR3Ix+3pqEc6Jp6XA+1n5K0ZMIrSdJQSkfTJCMa5vBqJ5q8N2X+hZv6B5SfelrYqh8louuFHMzqqPBra98emM356sqYJxhxz2/aXiOMma13KG3Fa85ue+8s0G2PJlcLeh3sf6UM11d1yvDMglY51LvHX82w+YQhZzV47JxRN7oflPfNfGue55cCvozLdMcQPRhKIZrEhCgOTOdlNKEgR3DLMkOh7qsP88TrB7wMfUgO6PDzoCo6FIXC5z1P03wHz4yI8mnAnIPOGB8QTSjb93OeCRTWnStiPxL8uFVpdC9X/vaGH8a4MkBtmRACNdL5/RlNaxM5a3O5tkkSP5kgHsD4F5sHVkcfTgmxSqkqmyM2DWf0URQKE2aEYnfotOX9iRoW4WJXSijhOvitcgSlVLJUwjcruY74jPhXVK5k8qaJGU0wK1UdMmZ6eOPmGPvbfUJ+0cHK2JPCtaynt9B8NZ+ME6jXZIS/AOtD2ZkjG1S05knIB/z0MTL5sCULBN3LOenhpF9Ti2tST57RDPCe6CA/bGi/BEGbo4dARBklT4o4vVpBXP+IzTilTM09CZninTKH2DNqQCFPMNmcHE7ke3z3n9kSr0l1JIilM= 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)(366016)(1800799024)(376014)(7416014)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Y0ZSWXFGdHNWZTRVMUVPVVpaT2w0dnd2eVc5Y1ZtSXNoU1JuUS96cjFvY29Y?= =?utf-8?B?ZUg5ZGwvUjZxN0ZJWmtJZENMVUVsVjhIR0lha0xYejZ6Tk1pTEJMekhaaUpB?= =?utf-8?B?TGdaYVQ3eFpiTWZUVWZFMEpWdjlNUHpwbkQxR1F2TWREWXNXb2lMclVyS091?= =?utf-8?B?YTlaY1NITC9IVGdSejJtZFhlc2NwSDljN3lCczNhSE0zMUNvRzR4QWR0c2dQ?= =?utf-8?B?aUlCR3RoLzVqTTlaSXBrZ255TC9RSHpwczVnMzJyWGxkZ1prbnRBbGhrNndQ?= =?utf-8?B?WVpJVDY3dGw1NG9NTHlNNVh5UWtlZy9iRStvN2E1ZTV5dVBENUF0RDVxRG02?= =?utf-8?B?ZFRESDZYckVpT21Hb2g4aGFmR3VRZUpOMldaRGRNTWlTcTU0cGVSL2FuNlJZ?= =?utf-8?B?Mm5mYmFNR2JCZGN2MnRUeXRKcW1CVkJ3Yjl4QlpLeTlaRENraW5LZHAxYkc2?= =?utf-8?B?RFBIVU4yTU04eDdkOU12dWU2SHBGS09RRDB0c2JwZThRK1czeHNNcU1jSEZo?= =?utf-8?B?OHE0Ly9kYTI5dklZdTYybXJOejhkT1hMT0tZK2I4QlRaYStMc3RIaEgrazlI?= =?utf-8?B?OGpCczRoYkxYVThVK1hFYTRjT3lCc3hvV3VYWVFiOXF6ZklzVGV6VS90R0FI?= =?utf-8?B?RmR1VkJyclJ3VlhSTFI4c1FFR0dua0UrRkRQdHhYYnEzUUx4c25GaTdSNEZW?= =?utf-8?B?SXlTaVNQZC9WR2kwQkMxMTlRazdVZVNVUkZIbGhsWGJZTUtudDVZdnRMand2?= =?utf-8?B?ajVteFcwZTk1UjNZRjNHUlpXcWZ3czFuU2NMT3RoSmFrVy95YlhVRmV6SzBI?= =?utf-8?B?TWRRdUJvTzJQSXdiR2NiSVNmN1ArbkVzM3RoTGVpWjlDc1h4OFFJS3RNV0NI?= =?utf-8?B?cjJEdmRVTXpIbndLdEFUdjhxdUZXVHNSVWUvM1JCOUhUcGlqTkczT2h2RXR5?= =?utf-8?B?dWtuVkpKeUUzNXBXUzVQVW5TNUFOZ0NFdHNPY3pTa0ZlWSs5dEFmb0hUZzNw?= =?utf-8?B?Y0NuM2gvUG5BM1gzdHhyMDZ6OExYSXhiMTJYSDlaaXpaTHV6d1BKb1hEcWVo?= =?utf-8?B?NW52L3pGdEg2R1NBU1VpUkt4RUlaTi9hdnNFWlFOUTZ3VG5RZjd6KzBzaFJL?= =?utf-8?B?UHpEelZHQ3hnMGRwbHIvc3RmQlJJd1lWZ0V1WlhFUHh0NFhJcG5tT05SdEpK?= =?utf-8?B?c3JaVTR6OENFc051Wk0wVm9zL0lna2Q2TWtmK0Ywckc4UWZ2ZDFWTGhrTWFu?= =?utf-8?B?V0l0czZXMWd6bVJxaUFxbktuNk82V2I4cEZSL0ZpalpTYTNNT0JxLzBNbWN1?= =?utf-8?B?UmwxQkZSMXVYY3JEN1VZR2VyL1JNU1pFV1FsS0ZrMW02Wmd3NlhkNXFwRlFv?= =?utf-8?B?dXo4cnk5NzdQd3B4ck1nR3ZpUExXTHlYL1k0SkNCR1N0bFpTWk53YmpweS9j?= =?utf-8?B?d3RXTGtadHBTQjNESDV3N0FKWVNPTDFENm1ta0Vsc201MFFkc3JLZ3FmZlcx?= =?utf-8?B?cTBJZkhzaFlGRndhUzAwRGJ6MjF6OERBYjZIM2tUOTJNeE5JU1pUbXFFaldD?= =?utf-8?B?QjhudmN2c3J6WjQrTEtiU1E3WWF4YUc0Y1o1R2NsRG5oSXNJcGxJdXpMOFFX?= =?utf-8?B?V1BwR25naHFKSjlBdG55V1pEQVJSLytFY3FIRVpIQnN4KzRLQWtrOVUxRTdR?= =?utf-8?B?emdNSnh5Qi9OVU1PUGRoM25BVW9sLytQM1g3L0F1b2dqbHhZb3pTQUpnK0Va?= =?utf-8?B?dDVZTEZRK1ZQOVNSWWVtVnd6ZldQSU02YVVXaEFubFpaMHFYNVAxOHN6WUsw?= =?utf-8?B?T2F0SUxHbFJJODd2aFFRZ2JBQURUdk9rNFllOEw2b2J0aHZPdGVSc2x1MWw1?= =?utf-8?B?RXJOa3FQaUtjczVtbVVraWgrS2tnRitib3l2QXUzWWlGc1lTRkJBV2RpbU84?= =?utf-8?B?WCs1RE51YkU3dkFmNHdleUNCNUxPNGZqRmlNR285ZnBWOW8rWXJHeVFBZmhS?= =?utf-8?B?Vk9DbTBFbWw0UUs2OWxFYXA1aWY3NzRKaC9BWkYvVGRBeExBTFFoYjFWNVRR?= =?utf-8?B?REdDOUFLMkRianM5Y21hTzdBU0xwa1VRV2pNamRvL2ZNUnZhUTZFS1pjdW5v?= =?utf-8?B?RWxLa3hZVS9SS1NkeittUWZneVF2aVkyMHlDMmRvV2Jhdjg5OE92OVMvL1JS?= =?utf-8?B?VXZBblZUYVJyaUdkZWt0cVZwajdvTjVJdEVaWnVva2RTNU52ZStmZElqQVZG?= =?utf-8?B?bDFmUnFwVTFXQzJVbXBYazJNZkR1T2VWVjNyVElHU0NlYnpsLzlJbzBIbXVq?= =?utf-8?B?VWpPMXUxVjJ5aWNHRGIrNFkwSUdZZkVSNDNCamdmZEVLUTd5a0hFUT09?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f7c2ca11-62f4-424a-f0f6-08de786c68fe X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2026 15:00:14.8280 (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: qhb8QG5r3HDGURKD0qw5Q0OnM0Oh8lGkhItr8lIc1s1+xY6BjNpmY+4+9cKRPjncbJEYk9Tvop6fksUfNoJUpw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB6980 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 Reviewed-by: Cristian Marussi Signed-off-by: Peng Fan --- drivers/clk/Makefile | 2 +- drivers/clk/clk-scmi-oem.c | 108 +++++++++++++++++++++++++++++++++++++++++= ++++ drivers/clk/clk-scmi.c | 19 ++++++-- drivers/clk/clk-scmi.h | 11 +++++ 4 files changed, 136 insertions(+), 4 deletions(-) diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index e053303984b8d61d5c74dc4cdb582eb2692f4ca1..ae069836f29c2af373e56d66f4e= 1d6ffa32be7b5 100644 --- a/drivers/clk/Makefile +++ b/drivers/clk/Makefile @@ -93,7 +93,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..be11d359b4ec3633868f33bb429= c7cfec9f1e48e --- /dev/null +++ b/drivers/clk/clk-scmi-oem.c @@ -0,0 +1,108 @@ +// 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) + +/* + * Selection is based on SCMI vendor_id/sub_vendor_id and optional machine + * compatible string, without involving impl_ver. impl_ver=E2=80=91specifi= c behavior + * should be considered a bug and handled via SCMI Quirk framework. + */ +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, +}; + +static 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