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,