From patchwork Wed Feb 5 09:49:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Peng Fan (OSS)" X-Patchwork-Id: 13960749 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A540DC02192 for ; Wed, 5 Feb 2025 09:53:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Cc:To: In-Reply-To:References:Message-Id:Content-Transfer-Encoding:Content-Type: Subject:Date:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=6l57yxYmeST1OV4vtYzySJQWfWrxoHyD6OZl1nVF+Fc=; b=NOhbIb0B8NxohOlK1UtiDtYWj+ D1STaJVkl+s8qkQNilEIHDVE+HcKF40OsndsxOlTeM0XZ1psJQK0bGbO5TVsLr8ZPUwRSMB/VJR90 izZ6Z1I7AwRFnURjuiyLgLgTRyFDiYldtcZ8BXSzHcGE5KY7JU4waaSWcOD+ox0YKwH/n7DTNaPGt Ri0CYpDgrxG7ba22RlxX1lRQHdLvZIq2hIJlF3geRXUu22OipcjCxNycY2+cAi2wKYRI3mECKPwmh VAGN+sNnAxUw/D+rRWgn7vQkeyjIoaBNNgJb7KeMFHOFJFHxm9VgmHZHfQBh6PcpJEOqgEAPRLDSG wOEq+4Nw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tfc6I-00000002ljo-0gGh; Wed, 05 Feb 2025 09:53:42 +0000 Received: from mail-westeuropeazlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c201::3] helo=AS8PR04CU009.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tfc3c-00000002l7s-0s8S for linux-arm-kernel@lists.infradead.org; Wed, 05 Feb 2025 09:50:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OiTPbyX/jrOdZIUpGriGGKKdTDzfXN+sR/jZDQcBT1Sihnwh7eb5mDf2ihSabfp27G+7nKq9RMGyGAfEC+wIdzwc+83Lra3FZv4GP/t8bCXWmxpq1vyDyXIPtRVJEl7yVrqMlOY/FxfWYrjmJuEjzciwoCfij9fHLlULWmW28tdzXSRJfEQCK6IdwR+fCDxANJK9dB8yXQak4hZZipIaN8n7mb1aOxzw7P9wlcBQH6ciixPBEEIOU/jbxwB30bktQaqkW2IQQKvv6VYoK40f3HYg/uGzH0/H9oB/6PkW1LrNnL+ogN8cazjVbCJk3IB5uJlxHVkvGVWG+8fAQYLHMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6l57yxYmeST1OV4vtYzySJQWfWrxoHyD6OZl1nVF+Fc=; b=V050q6iUn5DB+oi4l8wplJghMCOSvx3HH8Yxgr+U/CM/UfUrhJCV7NfxU0lhDXXS1MPAhuA+rrTE1yfK03qDoRXg83Smr0zLDO8OTvmmonQuWFqoiLo6qEvUGbg9D7jBTReP1ncRCG7A7a7tJDaxy7HzUchG6PJUZuPnJVn7o5/Dn1/RLDZD5S5OIu49qhRrtH0EP7X0Fdl9NKY8ukCaDnk1RgHZ8dnD3bs6v4Hu+iiRLbWPl7D31jG3LJR/gMPdbu02q5MLEo4S6WwZeseUDbHvrUS4+1ib+MY1wgD0RoBXU4YFWse8mgwNkqOSQ60MTa3/NCpmKHqA8u5RZJoOaA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6l57yxYmeST1OV4vtYzySJQWfWrxoHyD6OZl1nVF+Fc=; b=YYI3ex3wmgx9VJqjpowj8wnNzNy8jiavF7J2TsUB0RGv5TUppF1qeh6RcGRlxLZuF8qnpAgi7+LdgN7AZr7rfJaKevSOiaBBJF4eJbO1Cu1VtWxSmLoBh+di2s/+cc48uknxnsP9SxRhCue/YKPNJQDqB4VBCzxVNyo92dK8wvClE6AoaMj4ZFf8nfVYHx0FKIBZDSpIboAypKeo5s3iaPOmNEtpFRkL9bYbqDHvpgamRf6aVCgXiohsnR+nQZCQ6aI5B8CRDVstCsxwM4fz3tvBt0gB0QyvGPKUT4IN6Yw7J7inm/xvedjj1J5D+uYrsKKmxA0m6e13NTjYXKrFMg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by AS8PR04MB7783.eurprd04.prod.outlook.com (2603:10a6:20b:2a4::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Wed, 5 Feb 2025 09:50:53 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%3]) with mapi id 15.20.8398.025; Wed, 5 Feb 2025 09:50:53 +0000 From: "Peng Fan (OSS)" Date: Wed, 05 Feb 2025 17:49:51 +0800 Subject: [PATCH v2 1/4] clk: Introduce clk_hw_set_spread_spectrum Message-Id: <20250205-clk-ssc-v2-1-fa73083caa92@nxp.com> References: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> In-Reply-To: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> To: Michael Turquette , Stephen Boyd , Russell King , Sudeep Holla , Cristian Marussi , Abel Vesa Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Rob Herring , Krzysztof Kozlowski , Dario Binacchi , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , imx@lists.linux.dev, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1738749007; l=5527; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=N5B1zgouHjlvADWtIMmbMY9BBZv1Dk20KykGSG+oSag=; b=7MC8xIQrG6++fG2MGgat1FW7XiwEyXwuRcciuqu0rwLxjZzJ4OhxdSekbhEAnaM/0eWz6cDWJ zUYbhWYvqQyC+epoZix8LYIWgYwigEsEe4+BxcvUI5GPzoTmy3Pv1bo X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR02CA0037.apcprd02.prod.outlook.com (2603:1096:4:196::8) To PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|AS8PR04MB7783:EE_ X-MS-Office365-Filtering-Correlation-Id: cca426ee-cd16-4b81-18f6-08dd45ca9435 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|52116014|376014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?bQ83mSW9+WTFlqoTtweuE5vHAQgq+55?= =?utf-8?q?2vLXYGhX1I4gpNCQz8vyOc2FqZhBimmgXE5ilYteqrPu8YfZXJ40BUV4N5cKzOXhw?= =?utf-8?q?DZvy/Bj6LFjAHN1OoEHKWot4qAvwyDpj+tNiOsAovLgWeUwgZ3t2vDAZIphsumzmo?= =?utf-8?q?sGi8UlgYPHDNW2eHVBV+5g1PMENZRUH4NNllPkBApGzSShIQkD80urcNotzSd3Jtj?= =?utf-8?q?3SptvRt+0ybY61/A0vSRjNFXkxpeXhVfbkDO+H0pLz36oz0P9OkxiAfbq7VB/3EV4?= =?utf-8?q?F54uzqX3LwDhSnMUxqHgnXfK0HzeqqKt0ZxPYzYHSHNSpT3abhcTdRCmmdgM0Csu5?= =?utf-8?q?FnFZ266TI1007d0z8VQTHRiQjg0c1fAc79hrxZGMdMrgc7rWhZoaL4cK+wAqA6V5H?= =?utf-8?q?wTCZ2fsjQnrsR9PDSDp3eInThdaNRQOZPQezOiHqhBqIumz4T+BlrtZWASbAfhkSE?= =?utf-8?q?ywKaLwUieHiIScK5QSmdbLCS0nK2D4+bHr/sya+vRqeyMzwplKxjh/ECdVCnN7Ai9?= =?utf-8?q?fR6f4/B0UfuZ+niojCwLD97JWcLUANDFFeUsFJxfKQ2CQfxE9WVKU0elUbOGgjV4n?= =?utf-8?q?qKzaFjsTWEftoi90gH5JX4w9M7ScLG65v6qyKF+kCMEvg4RDfAk4pPIKKYihmcZUF?= =?utf-8?q?vyNxVG94BHEoFIzanPDeiphldatoMO1CVFrS4QZj9hYqKSfUSxmiWqqFfnIIfeb1x?= =?utf-8?q?qnmNDTozNnrmd+avhTXwjGnlIj0E/8hyy8a0DG11AcaWVVofjyU2Osd7Vy7nxGOi0?= =?utf-8?q?cIYg0/RlCFcqxwss+hTLnPY05uTksah3TsZDszU1IlOzKLqek2/dwJWL/oU4AGUY2?= =?utf-8?q?s4BH0oRQUTzxMP27kFMe4BIYBYSo4fdpwKRI8vRA/hl+ienRj1LcIi/CXASRwhfS3?= =?utf-8?q?zfP47Uxr3CGpenoWqPS/4qwmZ7yxpQ1f8Xio44+rbaUVk+btIxewyYO8dU4lNO5df?= =?utf-8?q?qsSzmj89UQnJHTq9D2GnOj3I5MGjhjy/7oyuJX0WDEogqT0xKArhxaphYc9BBxE2d?= =?utf-8?q?1p5dtzyaX4HM9eKL01jw/4KHpOLh53Ux7f8drvivyvaNIPwrO3waIsCLXuTF6WXv2?= =?utf-8?q?3AH9o47KO1+PjzJYwoWtQoAPd6K6fE7bJmsebw0QuPOHtC1VupPt/KXPwIEaTSJng?= =?utf-8?q?YimG0GPrNN/WdCXCc7IOYo7gk8KdaxNb6fgAQ9ogGUKY1bddCSMJo/wYM0GTzciO5?= =?utf-8?q?DdcFea7hNZ0OP7QJy2U7e8Ihy2w95Wi30GwylEexRB2Z7NSP4jQTt2T67O3gutjYu?= =?utf-8?q?6fDqZWarXioLK4X96Ls6P4A8pJDbBlCgTNnDoCXMWKP11hTjDIzPi/tWizsquV39J?= =?utf-8?q?kdmDNxukNTxPMAgb7MQdw3cfN3s5a2aOMHuJ8Oen1TEPRkn6/HZ4DET3K3Y6JVGR0?= =?utf-8?q?fqMibLCOecI?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(52116014)(376014)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?a0YtUUEQ4JmYlYzzTXqeC7xGi8u1?= =?utf-8?q?SSbDXdBVG6XgBmkv2kP/FPosxtmbif09UQDvmAoR8NwKhllna59uWxYfVzopkhCxy?= =?utf-8?q?RimNBod/G3sJ2ISiTHl7qKABZe0vNOAm8aDy+iaModksTLhdQJ0oWIMbKfXooQxdS?= =?utf-8?q?iN7iw2iIWyyzkT034H3TdW9/1ULwkD0HrJUnkIXS30CV7XDwRnwQ3iYHG8RAjTjk1?= =?utf-8?q?7TdrEse20/EozlGGKDLtQwI1/yNHJxk04iuqIqiFTwPi+JNEMUgf0Irtgf0G6cG5u?= =?utf-8?q?SEoGNbV9+SllcMNqnsoPXI2yzJsp4Fcud5N6XMBHf58x2XFqS4s9coClItuTzsumc?= =?utf-8?q?UBc8RqXHr614yasU/bkyUwlGh67mr40YDyn8CGSc2DZA7V5dDXrnMT/BsFs/mI3YP?= =?utf-8?q?oMif5SJjj3ymZjP6YMOIpKmTSGbcvZRWlc0hopIFBfO+EhandIS4IiJz2am0/eb2q?= =?utf-8?q?MfE5Qoa6cYp2u/D4cenU1HW6F5KVhWfoeFHF0Jk/cH92Qljw2DTqeOcoCGt7YTM8R?= =?utf-8?q?1WEeCECNKCo7H08JOAUkcgMGh3wfg/rhChmbq6B80fXSJ+ASSX/Xorr6cPmf1I7Ro?= =?utf-8?q?P7IKQbxvua5nAtMdb+RgeLVnKKhdexSenqmv/xZnbjxRIfy+D5O4OlRL9SkRKuZPA?= =?utf-8?q?SbnxndD7iWkwveVfGrCXeWSsVdTSTbOOZ4K/ctvOH8QeL9Fxasv73qJ5vQZHZaUH0?= =?utf-8?q?Bs5nUUD58A5/5xtBqgb53FleE7AfdEqpODivhKs+2EXfjSivb8BiMRkEsDHq69Qw2?= =?utf-8?q?/fJyZb4Zz5KHU2bKyVABfY7p8PRE0e2BstFFqltqcZOw7581uaJfWfDhS4x3jLFzV?= =?utf-8?q?TkLgGd5+BVMd02z0RHe45mNx56BAClrpbC2G4ACInVSpXYlAftenSlG2NAbiFCQvW?= =?utf-8?q?EZ6PSIZUnr+JmE2zsb7f8ht70v8GKBGyqyOJYKzeLALJL0Whb0Ka3WjSrIK+/Qqj/?= =?utf-8?q?8nCS/R+VnDrYVahf5NqPILoGNQCKXF54jMZLpqz/rI8fkzNWUKqiWJjzcDX1Eh/2G?= =?utf-8?q?wso1hC2C/B9u1xaSaiPpyXMCuhlAHnN012Cy1BY1sh8uXqaxXxy14IUZry5DK/I+f?= =?utf-8?q?HmH3plCXjHPYWr0sUV12qBX+NlSLMpS+76/4/OGjJ17UyxGAjP6nh9RI4JMjJPkYl?= =?utf-8?q?XIj3/OWhlp1sNfw8V1V4dLa0AwcKv9GDJXmwp63CPo3Psh/ZKsrc+HZtIdmUYvHQ+?= =?utf-8?q?UUvFmuUNUycew1E1melTD9Vsuh8G5eEooPTeutzYbDmo1sqTV7e/DrpZQ4OU1Qfd0?= =?utf-8?q?XloNICF5gRUGa9dIeuvcteTZ+JeRmGAB905YB/eVgDiJoagDoTox4txlwPhqbKW9r?= =?utf-8?q?r5vaiQna1SHdQGn2qsmkk4yb8m3lGOhcRkubkq1HthyEPZamNFjHd/yVcfj+ggP8B?= =?utf-8?q?QTKaG2MRP46NtU6MXAGtY+riLaDxZP+fRkD8pxDJBZmTajQ2AjO4npSJLDt23aSzG?= =?utf-8?q?2KQkBoR82zjKzJ6ethaBOm/EbqmcbdpAVFgnH8LSeau4J3pOjyq5UiEHbfhBnIqLQ?= =?utf-8?q?DdYqmV32SOZ3?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: cca426ee-cd16-4b81-18f6-08dd45ca9435 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Feb 2025 09:50:53.0679 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wg+WhqZ4NSOfWaDPy7sgow7EIZKYOL13UqtNqwFGdeGTCQdkT7KonD6Z9y6jqJqFosIiBirDPl7zCNcDg1aZcw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB7783 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250205_015056_410076_32800643 X-CRM114-Status: GOOD ( 16.41 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Peng Fan Add clk_hw_set_spread_spectrum to configure a clock to enable spread spectrum feature. set_spread_spectrum ops is added for clk drivers to have their own hardware specific implementation. Signed-off-by: Peng Fan --- drivers/clk/clk.c | 34 ++++++++++++++++++++++++++++++++++ include/linux/clk-provider.h | 32 ++++++++++++++++++++++++++++++++ include/linux/clk.h | 22 ++++++++++++++++++++++ 3 files changed, 88 insertions(+) diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index cf7720b9172ff223d86227aad144e15375ddfd86..e11f9615e683af52c719d4c8419bd30f369f301b 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -2790,6 +2790,40 @@ int clk_set_max_rate(struct clk *clk, unsigned long rate) } EXPORT_SYMBOL_GPL(clk_set_max_rate); +int clk_hw_set_spread_spectrum(struct clk_hw *hw, unsigned int modfreq, + unsigned int spreaddepth, enum clk_ssc_method method, + bool enable) +{ + struct clk_spread_spectrum clk_ss; + struct clk_core *core; + int ret; + + if (!hw) + return 0; + + core = hw->core; + + clk_ss.modfreq = modfreq; + clk_ss.spreaddepth = spreaddepth; + clk_ss.method = method; + clk_ss.enable = enable; + + clk_prepare_lock(); + + ret = clk_pm_runtime_get(core); + if (ret) + goto fail; + + if (core->ops->set_spread_spectrum) + ret = core->ops->set_spread_spectrum(hw, &clk_ss); + + clk_pm_runtime_put(core); + +fail: + clk_prepare_unlock(); + return ret; +} + /** * clk_get_parent - return the parent of a clk * @clk: the clk whose parent gets returned diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 2e6e603b749342931c0d0693c3e72b62c000791b..ac0270cc9ec133954b1f8dcffed015723bd1ff5d 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -84,6 +84,28 @@ struct clk_duty { unsigned int den; }; +/* Aligned with dtschema/schemas/clock/clock.yaml */ +enum clk_ssc_method { + CLK_SSC_CENTER_SPREAD, + CLK_SSC_UP_SPREAD, + CLK_SSC_DOWN_SPREAD, +}; + +/** + * struct clk_spread_spectrum - Structure encoding spread spectrum of a clock + * + * @modfreq: Modulation frequency + * @spreadpercent: Modulation percent + * @method: Modulation method + * @enable: Modulation enable or disable + */ +struct clk_spread_spectrum { + unsigned int modfreq; + unsigned int spreaddepth; + enum clk_ssc_method method; + bool enable; +}; + /** * struct clk_ops - Callback operations for hardware clocks; these are to * be provided by the clock implementation, and will be called by drivers @@ -178,6 +200,11 @@ struct clk_duty { * separately via calls to .set_parent and .set_rate. * Returns 0 on success, -EERROR otherwise. * + * @set_spread_spectrum: Configure the modulation frequency, modulation percentage + * and method. This callback is optional for clocks that does not + * support spread spectrum feature or no need to enable this feature. + * Returns 0 on success, -EERROR otherwise. + * * @recalc_accuracy: Recalculate the accuracy of this clock. The clock accuracy * is expressed in ppb (parts per billion). The parent accuracy is * an input parameter. @@ -255,6 +282,8 @@ struct clk_ops { int (*set_rate_and_parent)(struct clk_hw *hw, unsigned long rate, unsigned long parent_rate, u8 index); + int (*set_spread_spectrum)(struct clk_hw *hw, + struct clk_spread_spectrum *clk_ss); unsigned long (*recalc_accuracy)(struct clk_hw *hw, unsigned long parent_accuracy); int (*get_phase)(struct clk_hw *hw); @@ -1404,6 +1433,9 @@ void clk_hw_get_rate_range(struct clk_hw *hw, unsigned long *min_rate, unsigned long *max_rate); void clk_hw_set_rate_range(struct clk_hw *hw, unsigned long min_rate, unsigned long max_rate); +int clk_hw_set_spread_spectrum(struct clk_hw *hw, unsigned int modfreq, + unsigned int spreaddepth, enum clk_ssc_method method, + bool enable); static inline void __clk_hw_set_clk(struct clk_hw *dst, struct clk_hw *src) { diff --git a/include/linux/clk.h b/include/linux/clk.h index b607482ca77e987b9344c38f25ebb5c8d35c1d39..49a7f7eb8b03233e11cd3b92768896c4e45c4e7c 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h @@ -858,6 +858,21 @@ int clk_set_rate(struct clk *clk, unsigned long rate); */ int clk_set_rate_exclusive(struct clk *clk, unsigned long rate); +/** + * clk_set_spread_spectrum - set the spread spectrum for a clock + * @clk: clock source + * @modfreq: modulation freq + * @spreadpercent: modulation percentage + * @method: down spread, up spread, center spread or else + * @enable: enable or disable + * + * Configure the spread spectrum parameters for a clock. + * + * Returns success (0) or negative errno. + */ +int clk_set_spread_spectrum(struct clk *clk, unsigned int modfreq, + unsigned int spreadpercent, unsigned int method, + bool enable); /** * clk_has_parent - check if a clock is a possible parent for another * @clk: clock source @@ -1088,6 +1103,13 @@ static inline int clk_set_rate_exclusive(struct clk *clk, unsigned long rate) return 0; } +static inline int clk_set_spread_spectrum(struct clk *clk, unsigned int modfreq, + unsigned int spreadpercent, + unsigned int method, bool enable) +{ + return 0; +} + static inline long clk_round_rate(struct clk *clk, unsigned long rate) { return 0; From patchwork Wed Feb 5 09:49:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Peng Fan (OSS)" X-Patchwork-Id: 13960757 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E41EFC02192 for ; Wed, 5 Feb 2025 09:55:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Cc:To: In-Reply-To:References:Message-Id:Content-Transfer-Encoding:Content-Type: Subject:Date:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=YuO9we0+22ZHGv9exjceCoS+0fKOhyayQhSWy+90s9s=; b=4EmAw2U7QohqdF4LhUB9pQ76H0 KscD9Sz3yxMzpOeGF8/ZgTCZl1pgh3AQFhwg6xZ605VElCfkqwHJnlPJnSuheEr4GE0ngAtdiWWwF dt+6wUlYS5tWwmxqvKKHcYtrizkJkX2T1TecLDvAvnCM17n50ncqWPGtHg/Xk6/slP2s47F29Ro4u xQqMIYik32stqh+zDF3oOB+e46Ef04SRvG+2QTGeKOC+GTKVJ+syev3OAeMdpNTUqLGQGZL2vLcBg GDpkYucJEwONwAa7oJRAsyHnOP6odNTp2AUQvTx4AzYq77D3TYJB5438UkzYsaj5iu7DryXDhd6/n aJjC+3CA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tfc7c-00000002m5z-46aj; Wed, 05 Feb 2025 09:55:04 +0000 Received: from mail-northeuropeazlp170130004.outbound.protection.outlook.com ([2a01:111:f403:c200::4] helo=DUZPR83CU001.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tfc3i-00000002l9M-2YGE for linux-arm-kernel@lists.infradead.org; Wed, 05 Feb 2025 09:51:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Mz9MdULP84EmHwaMJnTFfAdHXzJikGl0iO8GJJ2RVy7dwoKOrIhcWpdPeZ84uJDnfChz9Y45b3xm6oVwKIJJYeYP/NdfUp9ZPz1ooagQq1U5ztmK2Ckw05BBd7U3Jjzv9jclLhPZ5SICingpsf9QfD5gmwZtlG1IdbVlU0CE3VRAG8bpwXv+H2aXaijWMYpQFprgdX0hJ4p9gnZub/Ngxc7PYJ8a6lIrEgdrbsf460VdxXMOTr3C3Kblzbkj1oUZ9uQmWnQnPiT5XN8OBow4/8dJJ9u6bSbRsEX1ETbMOOkP3eMzhrK88FseB4SqhiKHtrvnmoEw8HLOvtwmjxGV+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=YuO9we0+22ZHGv9exjceCoS+0fKOhyayQhSWy+90s9s=; b=h6G7vH4dfTzekbZJVDW1d0afSTM51J4/1cuB/8m1ass9avFyvYxgJAPfMQFXJIn28RBTnvoPUcBfMQxJC4Mqr4g/sfxqZR7C9HwOYvI5bT8CyRY8bAPLIVNl6X264MR1mOMdUSKOtqPizWIPrphVgPH1qvms4NGGhCEOZwAOeR70rRximpssBXa142iAD98sW7rAkwEgkD6/umVZZiWZm1U2C8kp0c2/Z2xoLeuZWfG1DK9M3J4D6XUZQyLqN23aBGuS32eR1x07EMdj+spRF59ibRk+dX7ZoFJ/Rf56TIv+fBvbfS+MvZgWLGh659ih7xlznivUaKlCLVA7eToo5g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YuO9we0+22ZHGv9exjceCoS+0fKOhyayQhSWy+90s9s=; b=ixnZ8c8nJU+u5STbOYJpaScoi6eeRyUgkbnUiH2f8iVvR6LPQP/dmHJ3jIlYv6JlXkIKwvgpqodRt2+hsxi//0rcm0zwaBDM5oanBdvcmL136FKJBwtNVnhHB90GRRfG/Xpet8qK74pWEjU67xYNx+2teeauzxoKGo+MzJRDTKy2YWzBRhHq6LAWUCPf5pRKdCIWjTFnnihd2nFBDhuzP0p2jz73MttH6m5vdB5zaXMnV9QV9mdSf6VPZtDfHAcAS8t/5PhnHVokWYSGP3kbk2hc+0uTiAXr8W84BDtD/sCHhh/HZpe0StXa3HEIZWOTuF42uirQSek9PkZTdup5tQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by AS8PR04MB7783.eurprd04.prod.outlook.com (2603:10a6:20b:2a4::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.11; Wed, 5 Feb 2025 09:50:58 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%3]) with mapi id 15.20.8398.025; Wed, 5 Feb 2025 09:50:58 +0000 From: "Peng Fan (OSS)" Date: Wed, 05 Feb 2025 17:49:52 +0800 Subject: [PATCH v2 2/4] clk: conf: Support assigned-clock-sscs Message-Id: <20250205-clk-ssc-v2-2-fa73083caa92@nxp.com> References: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> In-Reply-To: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> To: Michael Turquette , Stephen Boyd , Russell King , Sudeep Holla , Cristian Marussi , Abel Vesa Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Rob Herring , Krzysztof Kozlowski , Dario Binacchi , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , imx@lists.linux.dev, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1738749007; l=2974; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=uyR6TUrIVOws23hW9VEyZgxU8YuEl7WFQo0HvLWbyc4=; b=ebQ0jEbKo5D7iWUb3MyG5+W2cVbDnOEijoMz0TP1SKmacytUoZBo0QxxEmQ4waH5ib3/g5OGY oIfx8lApQDLAw744xT0eusE3G7R2FQMwBJvg1+z3cyuDAr6/9skcDR6 X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR02CA0037.apcprd02.prod.outlook.com (2603:1096:4:196::8) To PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|AS8PR04MB7783:EE_ X-MS-Office365-Filtering-Correlation-Id: 46efdc5a-3bbc-460a-8941-08dd45ca975c X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|52116014|376014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?Dh+YaKXzMxiNEqw5xWHNinOaoCdHE2J?= =?utf-8?q?Aos3rq6Ol/wz5aQ9AeSTuNcD4wFCnVmYq+b7BKjfYWlA2N5lMJapzvt3o5p7CQ7+R?= =?utf-8?q?KWjnJ0/LJmkh0qFj4T4O0fArUyGa1WBZX35B+fAQvWJQ82Qrc2XZ+XIQf1t5GPGFj?= =?utf-8?q?1gPU3g9+KIoqpdi2NQx/svihyp0yHoMM9K+UKU3b+qh4dUrP23TVi+bXtoSQ1qnbD?= =?utf-8?q?lKejbNdAnA5khXFC39QqbCQklkMMq3KhJm3S2qXS22CSnXbDAGXr+zs/zSdxIh34k?= =?utf-8?q?inNWiUroIz8hUABmjo4O+mhG4N2Cnbwg455fCZPfzvmA5KsRmgXHvkuI3AjfZkmDk?= =?utf-8?q?Wj1k0MhxEa7m54CsMzBe/LRgRw4HhPU8gAcZs0zqMUkHNu53rRrWhuRQcljMWukP7?= =?utf-8?q?aHIjK5IKzx3gUgIlEdcUnDAd8vmFPOGk6n7V/u+AAp1193CMo6LDguGa0RG1lURmO?= =?utf-8?q?DhY57qemp/7tdVo+MIaOU7T4LctaDaHjWH7zf5oT1pXOAHCQ6kTo0xrdjfd5BRL7t?= =?utf-8?q?DbREA1XKc7yfL3VgP5O7ocIdEiWM/KASMi7bvqJ8PWNPln0fnVdBjIAqizyU5nG4d?= =?utf-8?q?kbZvNxQ5nO3KsIXv2nwOtwmYBEJUcVbp3wnmqbnDvCLXsI8YBpdRHb3VooyZKQ4MY?= =?utf-8?q?2T23JMK7rsDTge7sa6tCwf8hmqJuWHyh/s93OeKmEIOlKNQTE3AtZDu5VMtYNCL9D?= =?utf-8?q?I1b2/uufBqgMhGM4Gg3svv5JX2K7dkK7Kh3bkJKE5pzHdOgbKUqJmX8mzfi4L3E6W?= =?utf-8?q?D0cL8hwwFgO6O02Xt1Q3M+E3l6buJpbGUdzzzDYxn0E1JfrcS01IvCwQV0izfPQSk?= =?utf-8?q?dIpdAmtArbiYsUU/f+QM1hvI+DHuHovgiIwzrQy2QlkV1k7kYEFEwa0oLYanrBbJS?= =?utf-8?q?o8F4qx2SWPCVfryZSLLzyK20Ymoe4qivNQTFpq5LS15SKjJ+7lMjR5ELj23zSusCh?= =?utf-8?q?ap/GAt781V6l1qisS9SuUf+Pd/rcKViQDUPJSk7538bW+UwKwqaqH0TNRlMDGWqiy?= =?utf-8?q?08tPcfhp6TZCvgMbQcinVtgbZRdKRVKc2hOpcMmoX4tD1mLkrenHoWnr1OL4fVW93?= =?utf-8?q?jz3MDq5qah0wLrCl+KJ/kUkuPKi9aGECm2HnsJMntCYoBMB7YIDUUCgJY+xQAbgjs?= =?utf-8?q?YCIqylN3mtZN2oTzfLVJe+VJ6xv+o2tp70xok7CWxG9U7a8/y5mY0pVcZOg6l/q8w?= =?utf-8?q?i3UrOfLaXGUT0VWV8dON5jqD3q3DrGaHOJo/bD2ceEIIMSv5+GxE0QaoPDg/a/DDf?= =?utf-8?q?gc+uzwJl9n3uAkToEBwA0yGfvNbi5hFpLMUquTEHQ1v9KAAzGNQDA+p8HYmxIQTQE?= =?utf-8?q?19kyI6Uk0fBI+kupLjkJGGrI2Mb2HgTFjj0FkBN7ZVbjLzyh3MAQ6N4YgH893wbnf?= =?utf-8?q?XX4vcpg//fb?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(7416014)(52116014)(376014)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?BZl5KxHcx1ijVA1F/5o9ugKNB9e5?= =?utf-8?q?jMP/8djj+a0avV2Yz0uqsXcERgw3duiRJHSEuk3MlMIksrMUCfso9l7ygMZgs1qOA?= =?utf-8?q?YVmWy1H/6YOLaZxD5/tnKgyVBQt4Jqun5od0rzoGAfceI3Ql7Gf7zxQwJEiTcVUDI?= =?utf-8?q?cG2ByvxuvN8CL2eqgjjAay/5jFTbT+WNirC+ihG3Hl6EbhT1bwjQLHdbgm77aqHbq?= =?utf-8?q?UTGf8YL+C2vdLHLxKpTbCyYRoLjKNBLbiyR66XH3TSvan7x/E4ICMrzVpkV15NvCS?= =?utf-8?q?kJ9DWAlh9MQLAenHvRsWm2TCkKYRLqNFgfn6n+VUThroNv0MACAtbzn9AXWaxo3kE?= =?utf-8?q?1zdXMAskdtHFCGhsvaH7cBYC4eQQri3pPMuo2sr4d3qZm6/oxBwYmHIrGoOfsZf/4?= =?utf-8?q?AGy/d6hY16qUVwgnbBens7mGyutEThX1i3fbnOfHg5xupyaFO23VpfO2/3nIqKBNT?= =?utf-8?q?otOibq8nXEp/+uUE5OcZXNgv6DH/OwOZv84sXNZwHqkWxv+KH7jwXQEWSr009VCgz?= =?utf-8?q?xE4vQU+R/5IJhGzfL7Z+7gw+y/AbbuX/VqxVQSi1oz4/hhFUcT8qQf+3oBNWp8gez?= =?utf-8?q?3yoTIrqb3Cr1vi6rze+D0ASu17b+muoGrSe1gCIEAoavZAquhMvgEMRNRveoiqGJD?= =?utf-8?q?WFtVUCW3fLX8iuAY66O1GE7lN3rYzE+OSf+4nEypfXTCaA+h7QC2WxaKu6LExOecs?= =?utf-8?q?AMg6CnaiPpQTWQnG7Aq0loWS6hjvWfZkRY7sLXoLox1UrX9IgpPHUGeTV9QIaO3Iy?= =?utf-8?q?kKfWIUsqBmYlYQmXmsmVUDUkXZ7z0oPbI5cAwto2yUz5m/W2O+lKMIWrDyVRYDQcD?= =?utf-8?q?PH2HDktHSK3+4VY1350/QF413NZlZEmF9/A6zVSVzdN4Ks9w7DplZG5lU0byZmN2D?= =?utf-8?q?+2827pJ63puIKd34WbNLiBu/QoLwFWBntHFXUtA3uQQaHIyYIRZOQU6uexuSoiwov?= =?utf-8?q?BIh4yEUR1Wvbr9v6fyE+QzaMp02C24MjnyZ30Xi1MTLnSk5K6/MljDEv5ZnAUfdO1?= =?utf-8?q?KZ9kvxRLEy0GRVKXsgY6vIXWaGdaiGQCKSADiDVUj7MepL6QwAOdQDNscC4DHftfH?= =?utf-8?q?sE5tNtA552v7wuQbabALiUQbGLibNnB5aKtuLTFAabl1rH+rOveW3/0JtZjM1vguo?= =?utf-8?q?6jfj6/zmihnm6o3eiQPEuZ+m2avuz7LhBWraNrfqjY1QuFPOGAw6z46ydSTIFe3Z6?= =?utf-8?q?JUNMNf/nQItfoAHdgtM3XgeQjDPRksokxrXE79UFjDgIt6J9Zy3XIRc4etMDC5y5O?= =?utf-8?q?kPzBqILqr8vkhZ2TDh/WFVZXuTyAXgyLYUu+yGd/5bF0imcW3LfhtSvAF83h7Vv/P?= =?utf-8?q?Dc5Lo54I0Xfq40AzPQHMM47nEppv31EOsTLa+SQFJExQMmMI0fSpPtMEuy8akK4NM?= =?utf-8?q?HZc2I6zC/zzDKVysaQtyHi2pybJbtmmxdgzRe+4ZnVUkGeTPcZ40Y9mldF/NcxlIF?= =?utf-8?q?j/OD7FJlOF+y8MBn3mCQBn0oDyNWHRXaF/v0C5gxkL7nJqUA9q40BfY23n9c7shna?= =?utf-8?q?Oxx2a575K0hp?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 46efdc5a-3bbc-460a-8941-08dd45ca975c X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Feb 2025 09:50:58.3038 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Io+7gP/2CbHbE0mQuj9IAFvkuFaxq7r5rc2ij40yrAo7/tgzTFDcKovVext+nPZtZhFJYPMNsFJIOi3cMOs/fg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB7783 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250205_015102_725830_9C0C64A8 X-CRM114-Status: GOOD ( 16.77 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Peng Fan Parse the Spread Spectrum Configuration(SSC) from device tree and configure them before using the clock. Each SSC is three u32 elements which means '', so assigned-clock-sscs is an array of multiple three u32 elements. Signed-off-by: Peng Fan --- drivers/clk/clk-conf.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/drivers/clk/clk-conf.c b/drivers/clk/clk-conf.c index 303a0bb26e54a95655ce094a35b989c97ebc6fd8..9046a7710236839a30a72dc15c5fcebdbed5e9c6 100644 --- a/drivers/clk/clk-conf.c +++ b/drivers/clk/clk-conf.c @@ -155,6 +155,72 @@ static int __set_clk_rates(struct device_node *node, bool clk_supplier) return 0; } +static int __set_clk_spread_spectrum(struct device_node *node, bool clk_supplier) +{ + u32 *sscs __free(kfree) = NULL; + u32 elem_size = sizeof(u32) * 3; + struct of_phandle_args clkspec; + int rc, count, index; + struct clk *clk; + + /* modfreq, spreadPercent, modmethod */ + count = of_property_count_elems_of_size(node, "assigned-clock-sscs", elem_size); + if (count > 0) { + sscs = kcalloc(count, elem_size, GFP_KERNEL); + if (!sscs) + return -ENOMEM; + rc = of_property_read_u32_array(node, + "assigned-clock-sscs", + sscs, count * 3); + } else { + return 0; + } + + if (rc) + return rc; + + for (index = 0; index < count; index++) { + u32 modfreq = sscs[index * 3], spreaddepth = sscs[index * 3 + 1]; + u32 method = sscs[index * 3 + 2]; + struct clk_hw *hw; + + if (modfreq || spreaddepth || method) { + rc = of_parse_phandle_with_args(node, "assigned-clocks", + "#clock-cells", index, &clkspec); + if (rc < 0) { + /* skip empty (null) phandles */ + if (rc == -ENOENT) + continue; + else + return rc; + } + + if (clkspec.np == node && !clk_supplier) { + of_node_put(clkspec.np); + return 0; + } + + clk = of_clk_get_from_provider(&clkspec); + of_node_put(clkspec.np); + if (IS_ERR(clk)) { + if (PTR_ERR(clk) != -EPROBE_DEFER) + pr_warn("clk: couldn't get clock %d for %pOF\n", + index, node); + return PTR_ERR(clk); + } + + hw = __clk_get_hw(clk); + rc = clk_hw_set_spread_spectrum(hw, modfreq, spreaddepth, method, true); + if (rc < 0) + pr_err("clk: couldn't set %s clk spread spectrum %u %u %u: %d\n", + __clk_get_name(clk), modfreq, spreaddepth, method, rc); + clk_put(clk); + } + } + + return 0; +} + /** * of_clk_set_defaults() - parse and set assigned clocks configuration * @node: device node to apply clock settings for @@ -174,6 +240,10 @@ int of_clk_set_defaults(struct device_node *node, bool clk_supplier) if (!node) return 0; + rc = __set_clk_spread_spectrum(node, clk_supplier); + if (rc < 0) + return rc; + rc = __set_clk_parents(node, clk_supplier); if (rc < 0) return rc; From patchwork Wed Feb 5 09:49:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Peng Fan (OSS)" X-Patchwork-Id: 13960758 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 92610C02192 for ; Wed, 5 Feb 2025 09:56:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Cc:To: In-Reply-To:References:Message-Id:Content-Transfer-Encoding:Content-Type: Subject:Date:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=gU7+ZP6pMIoCBsURY7iz7g3g0e2ppp8+Og0/JWVDMQo=; b=wFdulaUtSNghchU8PN7fhrJfx8 XsuAGiRNJsdjeWhdYxI0OxNmx2u3vjjcC2ZTLCMiMrPIUQV01pyvjm43WsXG/FnE+884J2CXwS3Gj GBJlbiCA79hzcy8GqAtbXn4BGOpoJxVWnrBFp1OV1SB+TKHdmxOfMen+Ml9s2ihm30/1o9KlVFLUA M7ma+KTwq4Hb7d2fDdacudIsoxLtewV6OsYpI9Cm9MC8wlwTNwPuREbL/MA3U96CxKKvE+hzjLMrv 7z73y4bh7JvFVoNGED99UqeaisOh1+7wAm1TZHMeayxeN84mUSnavvSR+egk3pteyb3XvRYbG/2A9 kLwZmroA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tfc8y-00000002mSY-2rwW; Wed, 05 Feb 2025 09:56:28 +0000 Received: from mail-northeuropeazlp170110001.outbound.protection.outlook.com ([2a01:111:f403:c200::1] helo=DB3PR0202CU003.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tfc3n-00000002l9t-20rS for linux-arm-kernel@lists.infradead.org; Wed, 05 Feb 2025 09:51:08 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zKdqJ17+gGTbPxz6rbeoNRRZhFxgUVWKZGiSrlYs33Rb+Tj4hnApJihGmz14EXEVoY22FjGWXA6rSM3H5EJ6W0O1+H9JJ6W0kMcm9UfSu/TBZ6tO8rpO5CpflQPZtkGQXUhZ+jqi70QQi26RNCiGYL37D9OwNEoWAWQlMdrQQ/+hFOhkZk9IQB3mGa+HtWDTF6J5UrxthWrm9r5oiGqpRDtNPnkKUPo0yNWLys1w0ePdPIaItFW9fEplu1Soe0ZqTHAIELMmoOJsh8xOdTRYqUdQwrY9N2HMs6A0cZ2CEVkQhVXqIR0y5zmXuSB5m5omX2NStjxEObPYOrXk050z6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gU7+ZP6pMIoCBsURY7iz7g3g0e2ppp8+Og0/JWVDMQo=; b=h/PdDDCw8PiY3uPuFTncWeZmvhh8NEaLAIAheqU2UD5vwYpK6VbbHAmVFALuiJ82FnCwfTrm5nuEHAEFaXNtbZq/vrNw44FOrOBjKP78ohdSeZjn3/HiUeOgd0j3FxLcJ/XHbFOSYglvVlLsNXR/mEZ7VlXLwQIRSDV6uxMUozwzaAhUh0jxZfbgdO3ClSV21J5/tWl4m+7GDCf4aKEvI0q3tJtXNQDlx6GMInbV8VxqFE/7ii2VT3Amb5rwWqtFTYXCZR2d0jTDOmrrS4JExZ+Xlv4ABAOeawoSWZVgYiT2FDYFDxKU3L/jvMCUBaPPSxiX5/BOuvvI9Lq/NEv6TA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gU7+ZP6pMIoCBsURY7iz7g3g0e2ppp8+Og0/JWVDMQo=; b=J1xdtgWntkshYnG8paNWhAn4P5OJ8QigOFrScMnbqdoYLG7XS/z7OvugYmVisobnw2/UYRd1+S9egY3mrTZWstx6uphnSbXF0t8wPk5ZC0w30M7egIhIiHJRBFJLg7gJa6PHhMv17KM2a2wWpUwX8O5zSmyQ0Rp2lkfH2kVwXHbjudyxDKEKpcJYuxEf1BBXex1zkd1ySMb9FcanZdztgJd9/LEKUX+mg3gbhP1JeZOWO2KQaefdGDxfpKMwsQe8ZNYinh/MKjk4wZeww9sUC5YyH7DIQTdYJfVrZOQub0ChDSbh8WV00HwkmpZMurtzimrZ68uUgdB6qPtfRo0p3Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by AM9PR04MB8244.eurprd04.prod.outlook.com (2603:10a6:20b:3e0::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.10; Wed, 5 Feb 2025 09:51:03 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%3]) with mapi id 15.20.8398.025; Wed, 5 Feb 2025 09:51:03 +0000 From: "Peng Fan (OSS)" Date: Wed, 05 Feb 2025 17:49:53 +0800 Subject: [PATCH v2 3/4] clk: imx: pll14xx: support spread spectrum clock generation Message-Id: <20250205-clk-ssc-v2-3-fa73083caa92@nxp.com> References: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> In-Reply-To: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> To: Michael Turquette , Stephen Boyd , Russell King , Sudeep Holla , Cristian Marussi , Abel Vesa Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Rob Herring , Krzysztof Kozlowski , Dario Binacchi , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , imx@lists.linux.dev, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1738749007; l=4349; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=KRcjOzvpw/7k3Zo+dpLijDzx/J9AIHxlTggTa6PQqN8=; b=dULJcJfhwx1CNhkmzPH2eq1dJp374iXcZANZt/po7lNTP/oHHSUx+wsXXkuNMqxX+QWq7z4sH xa2blyq4zu/CyX3LoN9Sd8mtJamG/7bfFaMyji0QIsGjFoNfwvxNUaf X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR02CA0037.apcprd02.prod.outlook.com (2603:1096:4:196::8) To PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|AM9PR04MB8244:EE_ X-MS-Office365-Filtering-Correlation-Id: f3fa6fab-61b2-4922-33d3-08dd45ca9a7d X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?4UV0N+45Nm9KMuMnXzTD5xmXoxBjbaH?= =?utf-8?q?/Rymk2lKrisG5aFtT7gKsU9ILHyDpvivNyfAcBOv+YeD/i8UQffhWk3mN+vep4Hqj?= =?utf-8?q?y6PFV9Y7eRkqSWSnil6U+UexsZdjCRWKp9YZ8eVB6uPh5DeJGucMrt0oewVnUkoON?= =?utf-8?q?PqZocW8ru9Q5zRC2PW4G7lvvqCmI3R7TswRVg+P4VrtPGcavdyF5k/iOlACymA0Jt?= =?utf-8?q?fAX/Yyyiv/FGKE3AXEIB1/O1DgRrA+IcuyYrgkBXUeDhclOPMouwuyDrfGJm4sxuS?= =?utf-8?q?SlWurg7fMBCh6/rglVO6LFCX5pCkHBDCP5U9eclGk9Z/HkoD8Xc2TKuff+veNKU+w?= =?utf-8?q?wJXLIz/AzD3E1prDjUDjn+E8cmyAbZYY3IN5dm8scUBoAs+vY4BosTVvgto3s28sX?= =?utf-8?q?gx8WYPWo/h4LY0bbmHNvhkqVvGd2MrUlTTTUmLLe73+quP3RkZWLdmyAg377STlhA?= =?utf-8?q?22odVMBw08EiTsQQEVZg07A3q0AvuYhXp31Sajf2cRkcsn3KGCAdMeVF1pd98fc2z?= =?utf-8?q?Y91QwSe3WyPghORYJRjpLh1GFitY80lXxQuKpU7T/iHgE6ggNVL6xtMEsQEt05/wW?= =?utf-8?q?DqKdXXKvaNGTvET31+83uq5kUzUsmgpT8emI7ljRW51DdTuDlWsdQpJ4c9gG8oT1s?= =?utf-8?q?OZQOZGTn/jK6brf7J2Dn9fQCm+Pp8FUgAyLC2Vuq5SLDCsoqM0JyRq7YS7NPfIiNL?= =?utf-8?q?1LRdQPLaoZFOf+oFkcxV5SrsUyA/217V1IdOmQeqtLZJDkIoyrSvc5t4IZPnyPZsn?= =?utf-8?q?jq5YFa3NSH/MsS57Hs9fVQDsCeqRAIWCiO7P1MaYVrnX9AzLwJw4Halcecpe3Yeyf?= =?utf-8?q?k0YR5QWFpPjOy83mDvgqL7hELLObxmFMu3hMoNzbl5LOAXT8ssrkia8onnJ1nYA0t?= =?utf-8?q?tKtAjK+JEWTr8K1Oos8q2FH115jHc3KS+lBcZO7r0Z4LTxh8mEOmA1enscrM3/T4U?= =?utf-8?q?5FX8r53NkDdlFRE3ccwM3n4oeg3+FCDQrzPII+zkfsX/kpzT7GlDeZ6YkGvPFONrc?= =?utf-8?q?Vdiv2wIAROVCeNuyFIxCEyqNJZXvDJCbPtNkHVHPMLRbF6CwXH+dLwvVb2XWTTroO?= =?utf-8?q?b8a5WKuaKqwhivo/dBIcG30gXW4LXOhY70zTMh/yydI6FufrK7onjx8aveBWe540E?= =?utf-8?q?cOQjAGrV6aPyJvJh21+G4xNvBnVyo33Zv7Q9tOZkG+VqnLPUAmR8T/vomWiFnZnJy?= =?utf-8?q?qtHGDnxXzIMUEyLTHSqPIWJrplM0kFTltMf86YB6RtPMGI8ejVQz1/9aVbYNH2NP7?= =?utf-8?q?ovK8yU85u8q9WlW8vWjFhh7OfNHya7UjWitlKqAClfg4LOOlxxUX2HqWCC1ATwLbr?= =?utf-8?q?8gWd9tRwF3ZnHHAirf7YnUjRypv9DEbEuPwSXEGgN7SXM8XSca2H9XcB8ga8eOWdm?= =?utf-8?q?M0HNbukED25?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?yHHSTisrQK+hqB2xFhOt/YElyAmp?= =?utf-8?q?8CFLD6U5dbQhICubSyv0P9xn3JBCQVU6Dx9iDk5i31snLKo+5h3M2/WIKkP9k2v/f?= =?utf-8?q?DChap1CXNS+9Ej0Tm15d2xDcEmTS4E58k4SvXLbmaTUmNgDOLeHtOTFewq4OFpnpt?= =?utf-8?q?B4JQP/oiNnEM/Mek4ZJwJ5KxWTpVGpg78WHr81m4YPMTyJewu2n+DH/FloeFie2m6?= =?utf-8?q?6F+46B9SwjJN+lx7brNoTvxfW2f2geTUUGgGO+h8s1EKV3yYqXABDRbra0cqYP5td?= =?utf-8?q?iAyG5wWyHEGAJDrgQktr1C8heK/ZqiX/xfOHlM/xjNQsusFCXufr9Li0+BYHHf85t?= =?utf-8?q?9CtV6F9+sKZuxvy80Vty+oCsw3yLNDRdaS2CQBgKtf2YuCnel/IHul4U3rir2cL9a?= =?utf-8?q?fcehhL0bVsmy3RHfGFv6uZcR0YekcZw0lB3RhnfuDw8T4KZ91pBOAaJGfdZEk5Pd8?= =?utf-8?q?MHcVFBIcdhZJDhm3AIKdeGhxKVeT6WhcSoN3WtmxZH59KqPFFl5Eg3feodFblLAC8?= =?utf-8?q?5BT/KomK+QAEmwTRTXNzn2JPQr3c+CkiHKwEjhUu0rHDgrzgLoVgD6q6ii2J5y9gh?= =?utf-8?q?tA21jSb3TzI4hU6OxtfOCV7bG+O6xzshSLqWGe0X4KuUodc1p/KjLrctUCOy8qgmO?= =?utf-8?q?ziO6rvn1G8wr8RAbdUxaD+2niujqc6u54hmtZS/hQUIaDBwKW7wXPhbjI/tqMPUs0?= =?utf-8?q?aeDExE6/h/Xbh2kMIjLW/bw3fbh8JeAX+91u/eiA4g8qhTFjj2lJM5Lb8aRa9WQzk?= =?utf-8?q?VfJZetq49g7umlOLW2Rs9Yv8OjZbX+aiV5p3/14QTu4xCF2EmHeD7DOjxA8dPeXNY?= =?utf-8?q?/7UePTYsC3Oj+G4YghvUuo3EC79An8hRWJ7ZZl8JPxt3xEy4tbnggrunH0WTs54Jl?= =?utf-8?q?pcu5XjdVeXpIh/dz8dsKYmSyyjdQ/heY4zcH28HFBedWwb0dUYG+nsPvcDfFo5uwF?= =?utf-8?q?p9uwyXvNsFx/0JPjSDVB8vGYN+QeY0ZEzwypjSC0z5B+Qo8AQ8Ljo0NVpfpCEqlf2?= =?utf-8?q?mAGoVTcAapvTfd/8Ph04CrvpDjh6R8TX1i+DslDOqUlcWYhsvQU/fzbPCepqoxxtr?= =?utf-8?q?QFEtKHLgTD08d0mpB8m66307B+efeuxoGkYS9ELdkveBq2AUY4x7ZL8AoxCsRjX4I?= =?utf-8?q?uQowjk56ma9moLuI37wP1AAyT/LRI3x9mmacI23rPqY3LVWbgrdLDx67k+8vx2MpK?= =?utf-8?q?U8w4gShwyY7R8DmxcZauypI9Lxujtzda1ltAC4NkGB1PW025vDPDjR29s5cG+VKcn?= =?utf-8?q?hBcDNbLEpopcPdCvXQGO71sc/Mxbjz720xKvFTHVM6K/9//dRlRgyND7hh2ayUOXU?= =?utf-8?q?gmoijTGDQAVLaa+24kUVprByY6Jbsdg4wh4Nol6NADoKgdr9EPzKU+IXXU+Q6o+wk?= =?utf-8?q?QvyRcngAKLEEJ9adDdszwA4lTOdJxQFRaSsrmfPswzc/pY2V/Qd4lcpaYRFwByUZm?= =?utf-8?q?5iLpjdYG1fml1HOJlgF5bJOc/hSjviaKE4HRFlpiLAcdBsTOYRSEvUBYTBaxe5xxJ?= =?utf-8?q?UVkNGT2suQR1?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f3fa6fab-61b2-4922-33d3-08dd45ca9a7d X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Feb 2025 09:51:03.5587 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Ov6tmedNSewPTvPIHCo8ieKC/SxTBdirKj3QC4BfwlXcpaOKPcq88+95hmkoL/rkdnCPTS7wVU3692Z37V1xKA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8244 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250205_015107_682303_5466E60B X-CRM114-Status: GOOD ( 14.19 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Peng Fan Add support for spread spectrum clock (SSC) generation to the pll14xxx driver. Co-developed-by: Dario Binacchi Signed-off-by: Dario Binacchi Signed-off-by: Peng Fan --- drivers/clk/imx/clk-pll14xx.c | 66 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/drivers/clk/imx/clk-pll14xx.c b/drivers/clk/imx/clk-pll14xx.c index f290981ea13bdba3602af7aa44aaadfe0b78dcf9..3bdce762a9d651a6fb048dcbf58db396af9d3aaf 100644 --- a/drivers/clk/imx/clk-pll14xx.c +++ b/drivers/clk/imx/clk-pll14xx.c @@ -20,6 +20,8 @@ #define GNRL_CTL 0x0 #define DIV_CTL0 0x4 #define DIV_CTL1 0x8 +#define SSCG_CTRL 0xc + #define LOCK_STATUS BIT(31) #define LOCK_SEL_MASK BIT(29) #define CLKE_MASK BIT(11) @@ -31,15 +33,26 @@ #define KDIV_MASK GENMASK(15, 0) #define KDIV_MIN SHRT_MIN #define KDIV_MAX SHRT_MAX +#define SSCG_ENABLE BIT(31) +#define MFREQ_CTL_MASK GENMASK(19, 12) +#define MRAT_CTL_MASK GENMASK(9, 4) +#define SEL_PF_MASK GENMASK(1, 0) #define LOCK_TIMEOUT_US 10000 +enum imx_pll14xx_ssc_mod_type { + IMX_PLL14XX_SSC_DOWN_SPREAD, + IMX_PLL14XX_SSC_UP_SPREAD, + IMX_PLL14XX_SSC_CENTER_SPREAD, +}; + struct clk_pll14xx { struct clk_hw hw; void __iomem *base; enum imx_pll14xx_type type; const struct imx_pll14xx_rate_table *rate_table; int rate_count; + struct clk_spread_spectrum ssc_conf; }; #define to_clk_pll14xx(_hw) container_of(_hw, struct clk_pll14xx, hw) @@ -349,6 +362,42 @@ static int clk_pll1416x_set_rate(struct clk_hw *hw, unsigned long drate, return 0; } +static void clk_pll1443x_enable_ssc(struct clk_hw *hw, unsigned long parent_rate, + unsigned int pdiv, unsigned int mdiv) +{ + struct clk_pll14xx *pll = to_clk_pll14xx(hw); + struct clk_spread_spectrum *conf = &pll->ssc_conf; + u32 sscg_ctrl, mfr, mrr, mod_type; + + sscg_ctrl = readl_relaxed(pll->base + SSCG_CTRL); + sscg_ctrl &= + ~(SSCG_ENABLE | MFREQ_CTL_MASK | MRAT_CTL_MASK | SEL_PF_MASK); + + mfr = parent_rate / (conf->modfreq * pdiv * (1 << 5)); + mrr = ((conf->spreaddepth / 100) * mdiv * (1 << 6)) / (100 * mfr); + + switch (conf->method) { + case CLK_SSC_CENTER_SPREAD: + mod_type = IMX_PLL14XX_SSC_CENTER_SPREAD; + break; + case CLK_SSC_UP_SPREAD: + mod_type = IMX_PLL14XX_SSC_UP_SPREAD; + break; + case CLK_SSC_DOWN_SPREAD: + mod_type = IMX_PLL14XX_SSC_DOWN_SPREAD; + break; + default: + mod_type = IMX_PLL14XX_SSC_DOWN_SPREAD; + break; + } + + sscg_ctrl |= SSCG_ENABLE | FIELD_PREP(MFREQ_CTL_MASK, mfr) | + FIELD_PREP(MRAT_CTL_MASK, mrr) | + FIELD_PREP(SEL_PF_MASK, mod_type); + + writel_relaxed(sscg_ctrl, pll->base + SSCG_CTRL); +} + static int clk_pll1443x_set_rate(struct clk_hw *hw, unsigned long drate, unsigned long prate) { @@ -370,6 +419,9 @@ static int clk_pll1443x_set_rate(struct clk_hw *hw, unsigned long drate, writel_relaxed(FIELD_PREP(KDIV_MASK, rate.kdiv), pll->base + DIV_CTL1); + if (pll->ssc_conf.enable) + clk_pll1443x_enable_ssc(hw, prate, rate.pdiv, rate.mdiv); + return 0; } @@ -410,6 +462,9 @@ static int clk_pll1443x_set_rate(struct clk_hw *hw, unsigned long drate, gnrl_ctl &= ~BYPASS_MASK; writel_relaxed(gnrl_ctl, pll->base + GNRL_CTL); + if (pll->ssc_conf.enable) + clk_pll1443x_enable_ssc(hw, prate, rate.pdiv, rate.mdiv); + return 0; } @@ -465,6 +520,16 @@ static void clk_pll14xx_unprepare(struct clk_hw *hw) writel_relaxed(val, pll->base + GNRL_CTL); } +static int clk_pll1443x_set_spread_spectrum(struct clk_hw *hw, + struct clk_spread_spectrum *clk_ss) +{ + struct clk_pll14xx *pll = to_clk_pll14xx(hw); + + memcpy(&pll->ssc_conf, clk_ss, sizeof(pll->ssc_conf)); + + return 0; +} + static const struct clk_ops clk_pll1416x_ops = { .prepare = clk_pll14xx_prepare, .unprepare = clk_pll14xx_unprepare, @@ -485,6 +550,7 @@ static const struct clk_ops clk_pll1443x_ops = { .recalc_rate = clk_pll14xx_recalc_rate, .round_rate = clk_pll1443x_round_rate, .set_rate = clk_pll1443x_set_rate, + .set_spread_spectrum = clk_pll1443x_set_spread_spectrum, }; struct clk_hw *imx_dev_clk_hw_pll14xx(struct device *dev, const char *name, From patchwork Wed Feb 5 09:49:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Peng Fan (OSS)" X-Patchwork-Id: 13960759 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6E62EC02192 for ; Wed, 5 Feb 2025 09:58:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Cc:To: In-Reply-To:References:Message-Id:Content-Transfer-Encoding:Content-Type: Subject:Date:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=vZ7ABMH2IHcV0+Ndy6UOvfqlEln4Y6asVXxKsblBmqw=; b=mS/N0x2/yFtCz+vj12W8IA7uU/ hkB+zeKEVrqJQus6j5hILeKIn4Go0jN3qOQnkYVdNVEYOeXxo591E9Czb7sxp30IUk0+7wM8NbYqK fEDunU6yQduwmrkcEgjmqGtILoAuqxRHkWjVVrknxnW42+OaDU6ezkb1V7qYWEpZisMV6rUfDejP6 T6rxTdNie9q2nWFKFK7hISMGmzATQiIKyRA5w0Y91XKEzkHmeszFifNz17Aodh9UH3x7bBUXRa24I hP7cm1kAIGcMZAVosZv1JLyQoOSWfzL32QgycF5X9wcMkGYzu+lHUHC+9aIw73mQVDabK6x0jB3sQ SIzA6FuA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tfcAJ-00000002mmg-25cG; Wed, 05 Feb 2025 09:57:51 +0000 Received: from mail-francecentralazlp170130007.outbound.protection.outlook.com ([2a01:111:f403:c20a::7] helo=PA4PR04CU001.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tfc3s-00000002lC1-2Ymg for linux-arm-kernel@lists.infradead.org; Wed, 05 Feb 2025 09:51:13 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=a1Kuk8DBxxqA0Pc1ezhn/9b4Uo2lau9LdDJzB2ymmqnUccOBfosWjFjrrhahmSe/a1QJh6IY50v5GrbWjFOeA21yivWfr+eYjqjsQXE+kQOwY9xTDmtTFQd2r8Pup0+jm5F7Ex/G/yy/Wj6gkXdwdYfL3bbnBLd65qK+ytOaogwaAW1IJQpEgYZ6cr6jamhwdATmTGoBCTfA4QzjnlDZRahQTlcESKmwsz35akQZA7IZnkQ1p4V+zJMDQEC7TBRriN4NlAKMwOi53XI2+rjatrVtZynNwDFHpwoCllUQhhw8miBbo3fEM81SX3OAeQQWftI3xgh3pihkLFuT3p5K5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=vZ7ABMH2IHcV0+Ndy6UOvfqlEln4Y6asVXxKsblBmqw=; b=OsnPIjtkt5J2o04pbQZZfChz06Xf38xGeF4Rw/W2VEC0jbXF6pwP66vsQ9PlpE6QYxhmcbOdhcqvm0BoAYMgETB4DYap9gcKkk/S2PxukodYB8ON3fRhk+PXZWyxARZXZA2y7yEBy1rlAG7FhGafR2E8ANcHDQCi5EQtO9soi+QClwH9I3NOe+731XIcvaAcJSphyReVPaa64wcAhLcJdJk6BJPyyUdLZisP1+5I4CjyItQnAG1XtdKka2uQvWi5y8hMnF7QrociLRQcgje5goNSNTE0vC6OypjYUSkKj3VYc+UiE0YjM8JgeoFXqkb8aS3bS7hgthQkwrzlLXHuCw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vZ7ABMH2IHcV0+Ndy6UOvfqlEln4Y6asVXxKsblBmqw=; b=SQDvZOD5wN8PiLYToTTsvsZPY6xv6Z6rx8zww5J4heB6eCm8F1EHQ2hoiKGh+ZijET+MwHV295WQn1Ll3eWGF7i1RS5uPyFL/rO2roobNGL04BHy/z730OBMgAfBV2GqZwiLnCkv/hYUlvZQrSQItFtMoN5DkgbyD91I7tGs3yPwZWzQC8FVgXPqUZtFg+qW6f3Aj3W12Rk9VjBTswcZGYwfyG0orBvD8LzK/zhp0gpAThPGobtxShHgqo70dUAgrmM2X2wPrIAkbllC3W6vEQbcKopaNxX03GsMDOOt61fKleKdSYrLpjxI+Dow0X0v0jauxR55qIb5yigAeiADcQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) by AM9PR04MB8244.eurprd04.prod.outlook.com (2603:10a6:20b:3e0::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.10; Wed, 5 Feb 2025 09:51:08 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%3]) with mapi id 15.20.8398.025; Wed, 5 Feb 2025 09:51:08 +0000 From: "Peng Fan (OSS)" Date: Wed, 05 Feb 2025 17:49:54 +0800 Subject: [PATCH NOT APPLY v2 4/4] clk: scmi: Support spread spectrum Message-Id: <20250205-clk-ssc-v2-4-fa73083caa92@nxp.com> References: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> In-Reply-To: <20250205-clk-ssc-v2-0-fa73083caa92@nxp.com> To: Michael Turquette , Stephen Boyd , Russell King , Sudeep Holla , Cristian Marussi , Abel Vesa Cc: linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Rob Herring , Krzysztof Kozlowski , Dario Binacchi , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , imx@lists.linux.dev, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1738749007; l=3821; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=B9bkg4LSg3rabVuXSAhnz4jgp6FzySdE8U8t9y/s84w=; b=JiIpKoY3It1u1s5pTXVSdzCslISD29ZwN25JniPJkhwdy5LP8VA6afU5GELgEtJTbjycn+2mc pKpHAAMs+N/DcnnQHDhPTUiDjRxxKjaSmb4thjH6OWBgqGmJBPiG97u X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2PR02CA0037.apcprd02.prod.outlook.com (2603:1096:4:196::8) To PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PAXPR04MB8459:EE_|AM9PR04MB8244:EE_ X-MS-Office365-Filtering-Correlation-Id: 35e3e5b2-9e26-4bf6-3609-08dd45ca9da1 X-MS-Exchange-SharedMailbox-RoutingAgent-Processed: True X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|52116014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?95zC0zJHxe8GopDzj6fOVVmH6z7BiCU?= =?utf-8?q?X+HuVFhjuHXHkTRfBgpeO02c/7uNW4D/zQP92sM9gRfaN7JqmKgO7ypb4OYqJ0vbA?= =?utf-8?q?fazSiQcswtucwlVYycIftd+bX32mZdJbGcKgd5CzIEwd/xA/qZUDYD8+QAI2fKQqQ?= =?utf-8?q?FrS4VR4sVhwnDI74ejlYSoum3kpPWFbm1a876x151+KjBKya7gLAo5IsmEGf9YzRX?= =?utf-8?q?rvHK4+7G+eyxchtI8oKF5Z61n8LiS1kLB1fypWApk7o4hCOktwyJMyGa2SnZXvZV4?= =?utf-8?q?ce8Cy9BBYIG1z6KSXJU9dmIQLQWdnnYfgc1mx01YANN2QrLs0xYw3JEY1Rblb2mEo?= =?utf-8?q?9XchWfPTl68Hbfqg9QZbfxDNdmJCWm5B9qsYon0H3A8wB8bFzATiVTqo/efrBv5xf?= =?utf-8?q?/FJQ2BLzLBetu/53XxMKjLLpfEIVbvILA0mFK5Dd7crPpZa9xOLbwQDqeKWt074U7?= =?utf-8?q?7FFohkmzkUDOhlgoWmpIeAQtTOpJO+Xf0mC/ILtL85Y0tubbdK1XAwon09tzivlGi?= =?utf-8?q?rVlOZa8riE4s6VCAtgP2ow4cRt5B+o9pfaic3GFMM8TaIlmFuYhGWSRWfE2aewkEL?= =?utf-8?q?5XsmzImeUMinrgve1EAKRHTzdrv1A0kIWG9Ujqk1zGpY4nR6Y/hM4yalEay2vQrOT?= =?utf-8?q?aTzYEi5+4eUJICd5rSFxzVd2xTKwYMPTCyGBWcLLqXha3sLbW58i/gTq4Oa1tT1xp?= =?utf-8?q?z4/RwLmniEoQzBvK0u9iEMht4rO/q4eavfpThA1oySqKJ2HuJqW3XLciCTwA7VkSB?= =?utf-8?q?q6PPqj53h2uiYQyTiInoZadzA+a8qEvdTZqunQDKrx/22Tv85eq2iYcsKf/SS/fPG?= =?utf-8?q?ZYxgZc+NEaiVPZyeuNjt3AA671kSPtfVhkC65IH9qa2bhX+vrQfSXfmi5mFHspbnA?= =?utf-8?q?KUbsufRUi6Bl7oJyonvtq8TgMLSG7QSMYMwm9d9CG26BN5F9n0c/GxZbs1eX3tOK3?= =?utf-8?q?6mcDoFoiKBa4HRmtge/sl467SrN1Mb8Ms7p2MdrSVwRbVmDlQdsN7OPtYR27iXo89?= =?utf-8?q?GLS37++GF9tAgO/wRsGUrZAjxgwUdpxApb9XvF5BCSorzkzyZBQ2DRxHXFadCbXVN?= =?utf-8?q?SW6nS3VHiFusfAnFCVmiTlgk7/5+nbuNNnPwWrgVeAdRqL9EOjAJ4MLahJuqs+cEA?= =?utf-8?q?NuXthcJjS+iUTffekU+ZfCtJOvc09o8Y/WR8EF1pO0K7LNHp8qng4Om4iybI6OghX?= =?utf-8?q?Tp6A5VA4B1uIvj2qFCM5XMlt+ADwtpwU/JYkmS+GzjMRbGJ+hwMw9woQLYdHt6J+g?= =?utf-8?q?BUaiLOuxt2AaRmYmQflQOaWcjNv8PeotBEOB/2Oj/aytmd/8O5tgZY0Rq1D7PZxLt?= =?utf-8?q?z2RFjQgY3uUZdnNMv8gC+dfo+f/Bn6fiDey1HXW6bxZ0RGgeV008dx3VJdMAVOmTt?= =?utf-8?q?CPY7S0dTL+w?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8459.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014)(52116014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?gfmcfpPy/SwSf0FwEl8gX6XNT7ov?= =?utf-8?q?Im3EK4HxsiI8TbG3HrRV6EWbOiRrG/NCzoGjeMfBQDf+6t6hxVMYWYs7XqmFbJwXP?= =?utf-8?q?zxfbw+KPel8+lDoNMruoomAISZNX3/tJxDng6xmprZJAgxT2e3joMz8ZTVWbSRWhR?= =?utf-8?q?8OSat08LM6rzOStXF8Ej5FsTzkLp5megNu033T+2yvfJGzvwIl1L2kwL/kpH6PJVr?= =?utf-8?q?uyPfhACtZ+lOnvxNiT1/gSXnDt5NXS1X7mf/1JDUWiXGzeae/rNUqV3jBImSgMq1R?= =?utf-8?q?pQKHl1xx8vnwM9RtHv8WrYLpbIFPpxR3qJICw4hQdvr+2Dmdjw7G5P/8O56G1BBFt?= =?utf-8?q?2D9CdWoKVOuTJx7ZOY8kyA79RTF598FmSrxmxcHPAdDZq/mAECSIYtPcW41k9eGUA?= =?utf-8?q?lk+x7+URnh9Ac/3Qex7MKZrHYdX3q91XCUT6nNqc9pmc7q03t7j+q8HjuDu7XpN3o?= =?utf-8?q?DevFFtLJLz1AXuMdmKLO83OlDek/KuAqDqBJ+wD2jBpAdrk2GYeM0XGXH8nHXpgJJ?= =?utf-8?q?U9k3KeshN7LBuikm36JLpOsWWbKW755/KiDvsDmnxtvTTT/4klpwKYEp3BEiucMAu?= =?utf-8?q?iswzSR6Hx2DDs/QxQT7yF0/PtPzO2HzhDsS69vPETx2TriCkBbACfKRo3mY2Ur2sf?= =?utf-8?q?RIwz7A+yu1HxqRMpxmask8MzahZhoF2ERs95dSO3/iHaPLOw20NFl/8pnvktNH7Qf?= =?utf-8?q?DUFNqKlDPPRiCQvycJmxbUwybHTTwy6eq1Wbw6XHg+31wc1E/840cA9hyVdW1L/RJ?= =?utf-8?q?4lVf0uSUIc7vaOtVc8G7vrK8bk5T6uAQdqRpAET0HYF3Tou+HZKNQDo5hEHocPLMN?= =?utf-8?q?ovplKvqu0Q1IXNCYG7Tg3bEDLOusHwsWQ3/y50QC7WZ0Uv8CIAU+WZcwBxaDL7nfY?= =?utf-8?q?OuiJ+lGM49H6UxPEMSzc9TGecM4/AP3UliS6Pb5a0fxqAVt/5OSbnAcZbwICB0t6R?= =?utf-8?q?jBhlHbOwsbHtTamLb5SapNtHacw/N8cO+CxpbeJZdx1z7tLiVaaKA2IJ915EjOo9F?= =?utf-8?q?lC6sLo1OXOGdBU3IjJTtJcHRc2O0wQeeq1quPY/NyQJ5GwFexZeHffhynPfkv07En?= =?utf-8?q?Lr9Zwh/moTsC/DO5KsiP+cncB5i370pKjIoIqO/2yoLClrkgVOiAPID9ckVJJxU+0?= =?utf-8?q?Kc9HEKh34h+V4BDV+9hzEz5UK4PufTVHEoYv6PIeKzJ31x3hj7pObTASvtobzKVEO?= =?utf-8?q?ZQhLw6LXmhgc9hHYtW9IbhFUUGS7FDyncUxdafFE4KpAZus/wCSqgZIKM/ivGYR54?= =?utf-8?q?Vo71zwI3usZ9ihyRRjTfx8PISg+Svq+GSOjTiltf4QpePKBXK7gITOQShxTsDf2AN?= =?utf-8?q?CO5wZtgLkfoVltVnNXTA7dz6+yVj3tH9R+xBLfxv9XJN9ea0dFEyt4n9esuAQKctd?= =?utf-8?q?4e6cKKZNL0oKVk+MFNx8eb0pRIAI0CyfzWxfbGDt7tiy/SQLThHRnfA85iOnmDKuA?= =?utf-8?q?3T1cde+vmgIhDFP50BV4Gl6RrwMzt1WQTOUe4K7OrknH5N1/Wfvk+UO1zx6AWF0p3?= =?utf-8?q?mhD/6fFqTEDF?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 35e3e5b2-9e26-4bf6-3609-08dd45ca9da1 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Feb 2025 09:51:08.7993 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: RhqjgRQec0DdnTcoAzUiKiYIbAOtwn5+NaJHLGzNyGSeIZjO9dxgCNgEkQMfaV9nNMPYRWqp59GWD6BNTKfNFw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8244 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250205_015112_912055_A6C26DF4 X-CRM114-Status: GOOD ( 14.30 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org From: Peng Fan Support Spread Spectrum with adding scmi_clk_set_spread_spectrum Signed-off-by: Peng Fan --- drivers/clk/clk-scmi.c | 47 +++++++++++++++++++++++++++++++++++++++++-- include/linux/scmi_protocol.h | 6 ++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/drivers/clk/clk-scmi.c b/drivers/clk/clk-scmi.c index 15510c2ff21c0335f5cb30677343bd4ef59c0738..56b9d0166b0170807c1a83fff391033fecee2159 100644 --- a/drivers/clk/clk-scmi.c +++ b/drivers/clk/clk-scmi.c @@ -23,6 +23,7 @@ enum scmi_clk_feats { SCMI_CLK_RATE_CTRL_SUPPORTED, SCMI_CLK_PARENT_CTRL_SUPPORTED, SCMI_CLK_DUTY_CYCLE_SUPPORTED, + SCMI_CLK_SSC_SUPPORTED, SCMI_CLK_FEATS_COUNT }; @@ -98,6 +99,36 @@ static int scmi_clk_set_parent(struct clk_hw *hw, u8 parent_index) return scmi_proto_clk_ops->parent_set(clk->ph, clk->id, parent_index); } +static int scmi_clk_set_spread_spectrum(struct clk_hw *hw, + struct clk_spread_spectrum *clk_ss) +{ + struct scmi_clk *clk = to_scmi_clk(hw); + int ret; + u32 val; + + /* + * extConfigValue[7:0] - spread percentage (%) + * extConfigValue[23:8] - Modulation Frequency (KHz) + * extConfigValue[24] - Enable/Disable + * extConfigValue[31:25] - Modulation method + */ + val = FIELD_PREP(SCMI_CLOCK_EXT_SS_PERCENTAGE_MASK, clk_ss->spreaddepth); + val |= FIELD_PREP(SCMI_CLOCK_EXT_SS_MOD_FREQ_MASK, clk_ss->modfreq); + val |= FIELD_PREP(SCMI_CLOCK_EXT_SS_METHOD_MASK, clk_ss->method); + if (clk_ss->enable) + val |= SCMI_CLOCK_EXT_SS_ENABLE_MASK; + ret = scmi_proto_clk_ops->config_oem_set(clk->ph, clk->id, + SCMI_CLOCK_CFG_SSC, + val, false); + if (ret) + dev_warn(clk->dev, + "Failed to set spread spectrum(%u,%u,%u) for clock ID %d\n", + clk_ss->modfreq, clk_ss->spreaddepth, clk_ss->method, + clk->id); + + return ret; +} + static u8 scmi_clk_get_parent(struct clk_hw *hw) { struct scmi_clk *clk = to_scmi_clk(hw); @@ -316,9 +347,17 @@ scmi_clk_ops_alloc(struct device *dev, unsigned long feats_key) ops->set_duty_cycle = scmi_clk_set_duty_cycle; } + if (feats_key & BIT(SCMI_CLK_SSC_SUPPORTED)) + ops->set_spread_spectrum = scmi_clk_set_spread_spectrum; + return ops; } +static const char * const scmi_clk_imxlist[] = { + "fsl,imx95", + NULL +}; + /** * scmi_clk_ops_select() - Select a proper set of clock operations * @sclk: A reference to an SCMI clock descriptor @@ -370,8 +409,12 @@ scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic_capable, if (!ci->parent_ctrl_forbidden) feats_key |= BIT(SCMI_CLK_PARENT_CTRL_SUPPORTED); - if (ci->extended_config) - feats_key |= BIT(SCMI_CLK_DUTY_CYCLE_SUPPORTED); + if (ci->extended_config) { + if (of_machine_compatible_match(scmi_clk_imxlist)) + feats_key |= BIT(SCMI_CLK_SSC_SUPPORTED); + else + feats_key |= BIT(SCMI_CLK_DUTY_CYCLE_SUPPORTED); + } if (WARN_ON(feats_key >= db_size)) return NULL; diff --git a/include/linux/scmi_protocol.h b/include/linux/scmi_protocol.h index 688466a0e816247d24704f7ba109667a14226b67..a02a6d55568898ad0b5deed954e432415936dde2 100644 --- a/include/linux/scmi_protocol.h +++ b/include/linux/scmi_protocol.h @@ -79,10 +79,16 @@ struct scmi_protocol_handle; enum scmi_clock_oem_config { SCMI_CLOCK_CFG_DUTY_CYCLE = 0x1, SCMI_CLOCK_CFG_PHASE, + SCMI_CLOCK_CFG_SSC, SCMI_CLOCK_CFG_OEM_START = 0x80, SCMI_CLOCK_CFG_OEM_END = 0xFF, }; +#define SCMI_CLOCK_EXT_SS_PERCENTAGE_MASK GENMASK(7, 0) +#define SCMI_CLOCK_EXT_SS_MOD_FREQ_MASK GENMASK(23, 8) +#define SCMI_CLOCK_EXT_SS_ENABLE_MASK BIT(24) +#define SCMI_CLOCK_EXT_SS_METHOD_MASK GENMASK(31, 25) + /** * struct scmi_clk_proto_ops - represents the various operations provided * by SCMI Clock Protocol