From patchwork Mon Oct 14 09:11:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Peng Fan (OSS)" X-Patchwork-Id: 13834420 Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02on2052.outbound.protection.outlook.com [40.107.247.52]) (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 2A8731BC58 for ; Mon, 14 Oct 2024 09:04:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.247.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728896651; cv=fail; b=KXTQ7s0Gyzbq/UhLH7W9iPkZRTUzfEpie2QwdmLd0AKnJpSHzISiRUPf5emE0Xuqg0mj4lgvz/tbk/iX4JYXYLp9lL2J7zQbnDbtNQWL4h4SAdKUwoQQL+oPu/H30TzzrIfwZdXWSHXWSHimkCIA9L1s5IhDOTcwhB9+gkpW87U= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1728896651; c=relaxed/simple; bh=nyNphbDXdv9/89sxQwH8tfm2s5SLSBvnQOiphaKcSfM=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=rd6Jl0yav41e0+vHKOFWae7lrFV7GDy4TkwSWLE5cjNmcQBeua8d+rCWTBpUTSwDuYOOKMFCtfjSxhQ5+S/U6UIBqWj5xobl/yxYlpDVSi8vggqRJknjVZP5kol0PvQNJRUewq7JmiGeNSqMXyuy3Ho1VSoWrv3NyYX+AUq0dVM= 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=iu97b0DL; arc=fail smtp.client-ip=40.107.247.52 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="iu97b0DL" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qVFJkXecSH9AeX1f11Tlbl+gGwkYSV5HvW4ekg99Xidxds9E4/FB24ZXxfPhqgy1lG6ZoXOOzpd2wyXRDFgDPkY9b/BYY4A+VRthyWnteWOBh8LLfA7GuQUukL6S3+4FMQimBxqK0vAblcT9S5xGDYsOMUGcGhu+jBgccyr1Rzmr+qMLx10k/RwRM6eiU8Psj2j5CZUjKhxOBWACPWe//xgeAAfxrtXxJ92iPJ4i/yYQnAWr8G4RZLJrZ+W92Ut++aV0cLvkbTtq7tE6in9Sy9ELGSOH+DtBsgpDsO1JgYrQKY3Y6UKq0mzwDom42ai8ryVHWB3kJRPPuk8HXbB6+A== 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=PWkiDlRqKMQVrdTslJQGTlBhAYtEMGibd+A9k4ZRs+w=; b=cXdZwyUMC94W87LNPaZ58UUyw+mSmIK5jtw7NKMdoaKttXbvwEw7z0/aiZWzFFarNvdvAsShmYKkZXKYJTTXa31eawKwvMguICzE4s4JJpuhLwjI9BWAehuxoSCC2CmBnVLBNYiGbinY2tNkcK2VXMIbi2X+soY3r+IU6RkJZBZgCD71xrIl0SUOx61TJ5h90spBN8wHBxMlCBQAtgLvbn/LdkHOk8uB6R0XZ1dVtr/4zsWgWlC7WQ9EGpZKN6kSgIQv59WTPOB4koYOh6cFJxWLuF7GbmmUPXAa/vPnmhBqh6ciz7IMownX0fyGXhmznef+ejAL1BqobU763Goskw== 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=PWkiDlRqKMQVrdTslJQGTlBhAYtEMGibd+A9k4ZRs+w=; b=iu97b0DLUMF6ID8t8zXVNQElPOVPLpIyWuhPwnUzVqn5D3fD+XRHE0WUzYO2QuORuPEto+nSB+58CbpCA0GsIyK2q4NdMuhoU30jv+OqvdwrytsrctrpcNbtPLB9XnmhXsnmWzhptMH9AiWr2mp/xGCCoaomQFzrqqCXKg3WbjtetZjQpBd86lMXqHui6CXGt1UOeaPXiKOS9eMa2vGBr1qiDGLqp3+atmpZrCsEY1/KTlpPOxy8u9CQf9Z/suJVNvJG+OcFo78zrP6ZtfVg2e6snIjiPESAiAOacKIaffgKTpit/qaIl9uU03a567aWp9M9lfkcWtoiUpTU/ojm8A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from DB9PR04MB8461.eurprd04.prod.outlook.com (2603:10a6:10:2cf::20) by PAXPR04MB8765.eurprd04.prod.outlook.com (2603:10a6:102:20c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8048.26; Mon, 14 Oct 2024 09:02:49 +0000 Received: from DB9PR04MB8461.eurprd04.prod.outlook.com ([fe80::b1b9:faa9:901b:c197]) by DB9PR04MB8461.eurprd04.prod.outlook.com ([fe80::b1b9:faa9:901b:c197%3]) with mapi id 15.20.8048.020; Mon, 14 Oct 2024 09:02:49 +0000 From: "Peng Fan (OSS)" Date: Mon, 14 Oct 2024 17:11:22 +0800 Subject: [PATCH 1/4] clk: imx: lpcg-scu: SW workaround for errata (e10858) Message-Id: <20241014-imx-clk-v1-v1-1-ee75876d3102@nxp.com> References: <20241014-imx-clk-v1-v1-0-ee75876d3102@nxp.com> In-Reply-To: <20241014-imx-clk-v1-v1-0-ee75876d3102@nxp.com> To: Abel Vesa , Michael Turquette , Stephen Boyd , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Aisheng Dong Cc: linux-clk@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1728897092; l=3000; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=gPVJ62hn10fd8Mk5dUx6+DMIgNMDHMz4XiIGb+nUuxg=; b=+PT+d02018SH4dIlmd6VmmT5NpESWMszR+mVBeYO8QAysQV722o2BDe4uxr5gx7KCnZFckipX D48pvrY+sWGDFzskGMUlIUT+aY5VoRMlq3N71FQv4yLTN7KWP5bdTgX X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI1PR02CA0019.apcprd02.prod.outlook.com (2603:1096:4:1f4::15) To DB9PR04MB8461.eurprd04.prod.outlook.com (2603:10a6:10:2cf::20) Precedence: bulk X-Mailing-List: imx@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9PR04MB8461:EE_|PAXPR04MB8765:EE_ X-MS-Office365-Filtering-Correlation-Id: 42597541-d9ad-4d82-ebf1-08dcec2efa48 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|376014|7416014|52116014|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?fr/D0E0e9AWSuosu7HnGCioDi1ngB2l?= =?utf-8?q?V6MHtq41d1qqsAfWC3bhI8LQHoGKURXKBQ+7YjG3RiQVvvHNHiP2f4NmbBVMgMgEh?= =?utf-8?q?cLymex8tx143NmLthGc+h9nCwXeHr5JSVcxPNIKPiAMrTQXZurvyvEPsX8wpjLVAH?= =?utf-8?q?bFUp3XUvD1x3FodFJWBMDd1JfEJRimx4DVCmhyY5qvZ76mHOo0xJUCVBEkrFdzvpV?= =?utf-8?q?d6lcQ7QYx+MFhLAFrfScUWmkFNgsjbnXS5M5MzVRTFW8KrLTFq+rSWTbdu0BBPn4K?= =?utf-8?q?rwPHWjwb3/NdttQWh6oYdeJbQRIW2tY4GzB2+cJHhK7bOOAr/L8GEgv6hZkEJppPG?= =?utf-8?q?LHgvLNH0owKuF61pzhubOh3vQslflRN0SFPPS+cwFmsrmYgGIQLVraWIE9c4DFJbY?= =?utf-8?q?e8zoM2xPY+ce+fATSCh+LUHk2l1Vyj2tz6lxgUzBS8zPbvdj/77TUSq2tHOyDy+3g?= =?utf-8?q?pqzqvuLvliAGDaRecLumwqTa/tEKr/QT8v84WHQMK7tlpOdnEDkyvYrXcsQW7UhV2?= =?utf-8?q?7IPGrBMajZ2lQjAm9iIz8Riao89yjQh3rOH/j9jrjCsBRQj7ddCpOPV+EZ0ltaQc1?= =?utf-8?q?g9xBJtEI8LWb9BTuHDjhUuBXE0DZAcoyne6IG7op+j9I/rkduWKTpmpNipACOwuw/?= =?utf-8?q?1Va+2gFAtlmAcPvg5gWo/mQmx8tmNDW4aZSy2WkPcseDXFQUrcQhOtPzxhumWz+kW?= =?utf-8?q?PS9Wa3D9bfNJwGLcMBYQXFIIQjZC2EcWSxE6QDJRemTHlRlUcgHuQ80ntfkAdhP0g?= =?utf-8?q?ErQjgHeiu9F9SW1ZQkmS+D8BBRM0iFIC57VNvtDRs6CYQlgx0NePDR+hoQPLxIHzN?= =?utf-8?q?6TuZo9fe+svjwiChQFDUykZEcHx7irCXpgkIyrhLnoCCmX/vhg1kotzP9lRcLBEJO?= =?utf-8?q?TW9M39mNQpneh66DqFHOz6fVlzPIg38qQRScOKW0JdaKdcl6q+clheJw3ZxOmA9Jf?= =?utf-8?q?qCF4d8oqxFGcl3bnGIYm51rsfKxzUB/OwycvUDKbz91/y1HO/LPBdLpqwpasiWuy+?= =?utf-8?q?oPEgIgt3Z0g1+YyUIK9OXypX9YXTXEyv+S6Kru/bwkT4eFtUPUd0DxXOpNlrFCadc?= =?utf-8?q?bMH2l8UKvkYieB1tpyj1BC0qa1IRCOH/TcI9a+xN/dRorXvHGhx/tq3MHOQeylIQl?= =?utf-8?q?+0SYTsZLEAU5jWqiKgHIxthYc0iwmDfwTlzl/riKPSYjUyzv1mj5cCcFX8yS93bSX?= =?utf-8?q?okJA5nb+35PCU7va+2arIB2u+SZU16fJY92Kqnrt/kSyUQgJKDPiheYkm4TqknSxR?= =?utf-8?q?8/QLSzFywlLi0h69os3/2YbjugV2C54PDQw=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR04MB8461.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(52116014)(366016)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?AzWZovVpso2Z33rW4UNuYxjzmsM7?= =?utf-8?q?GWVgw6VAXIjQ8SoMMORC2sE1p+3QbLWfhxGrY2qSCB+ttMqMivBejti2vtwKWodlj?= =?utf-8?q?++3SxTHgReG2IaotryrLmEwd5v9I561eNNHbNoy8ClOfSViR2YpXlQ+1hwlafUx9P?= =?utf-8?q?lEXgjTtzAUdiuHDVjgFsagJccyO2qa/y5q0HrpwB7+A88ClbWmWoZeIht0i2ZOq+W?= =?utf-8?q?cFavBKAfbzbwseo2qTQ5MpC7fL2OWBmpFe7FZj9gNFzlydQKLJxvci+14eI1JxTZu?= =?utf-8?q?mQck5h4aFjG89qQ7T0Jggq5Uey+tNaROsnhk6mQuiqY81FxXUdEiuse5U6JeuaS8Z?= =?utf-8?q?MA3I3WefY0Iu+jqKFm0gdPh2d8AbJ9nRGBW9c/qPG/TDxVqorh7UDEUdNvRMNULeg?= =?utf-8?q?egO4veAcfKJPnVqYmpvj683HdX4XWFm68vuelxm/6O9G2mlSuRQUONFEcxvfN0ILA?= =?utf-8?q?QvEmfFjyG5y/H+dE3HQM4RnSghpoMncIY5PLea8dRuvW3cNLolhrTsRuXnAexTr16?= =?utf-8?q?dB5+YwhUn0KnXVw1O1Nl4mwGUi0wlIUohWpJsh0Xcag0KEbWmWdq5naCqbi3Xe97z?= =?utf-8?q?HOjzz2/z38t0og/rrzTbYrkFiPOx63dfVX+pz00hLK4EuuugY7uu96PoFMlnVCizl?= =?utf-8?q?ZGK5dIrqk6s4tJwGfcCz0F4Z3crRarBfDb2uaMwy/unZLGRIStXjgVyAdCYz5UmKh?= =?utf-8?q?zsOz7t5WIOlKo5jh0PK1jzI3xdTTLjTJfoOb0WiXO8upYnlU5xpM65ztJilQi+GP2?= =?utf-8?q?vXBwWLuO2onKnjvUWiDCSqbyYAgO0T/J/4mlMSfks08B9eZkdLxgsbNOEshod+msI?= =?utf-8?q?zAVOK6JG26lF0DzCOjmPz6jKELNQjBgwQZ5w7SCVugsuJdOIboeJgLHfviQ+byNXi?= =?utf-8?q?pFPPwc0zJSVAQX0uKDIAdyPjiVrQ60EFPZI99A73n2fJhzuYJ9iPzS9Cs+Yinix17?= =?utf-8?q?9+OsLoGedhVe7T5g+GdE8UNYAZ1PfKgXEWIWX69j7uUT19GyahhdOxL0/vw3dxQjs?= =?utf-8?q?IEg8aoYIyW18B6A1xfMnjC7hbjpDjrMvBSv9nvYL2dNrIwl9ludKex+90oo7Enpdc?= =?utf-8?q?zFTEIOYSNa9hKB5Miqv0a3tKsKYQ6HNbdwlTakuk3z7QmH2bi/GKyTu2mfXDC7Tzm?= =?utf-8?q?MNTnkbW+u0BNqs4FOEB0cPWMt1HRvLkp7WstAWbVyoNiXSiFB0O4dQizyrc5IEreg?= =?utf-8?q?AtTB1upvzKu1sIYEoKWkgoJeJIe3lBAe7SyPV5bExrvOHUFzBEbtkfat0SVsyQ0vA?= =?utf-8?q?lVX8rwIiIbMQbd82uiAqywTglzIbtGibnpTRdpYU2rvG3vwQYoRXNhPZEijS1dV/c?= =?utf-8?q?HtcpMNERwo/GUBpLxz87fj4zNLiLMsYIaBXOIdiOKWX6wC4VERNj86MPcIOM6Nv62?= =?utf-8?q?yp+dm4LZRIM9GP+LQ1+C3zUjgeLSoRwliGMnARvLYZHeyCONwoyGGMRxaxRjUnU6k?= =?utf-8?q?7S2gVucZHenBXF2IoB9SwMfAiv23F7TnvHIzMOmreWnwbnmuMvEF4LYEY6CT6miPp?= =?utf-8?q?4FyZdJMrW2RP?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 42597541-d9ad-4d82-ebf1-08dcec2efa48 X-MS-Exchange-CrossTenant-AuthSource: DB9PR04MB8461.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Oct 2024 09:02:49.2906 (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: Fiz9BBZG2yLBfYeTAg9Xr7u2aH7G1kRfxWfgrBG6VgchT48fz6r3R+EmKjfma01m6u9YFqPbmYSBo+OTgCD9Fw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8765 From: Peng Fan Back-to-back LPCG writes can be ignored by the LPCG register due to a HW bug. The writes need to be separated by at least 4 cycles of the gated clock. The workaround is implemented as follows: 1. For clocks running greater than or equal to 24MHz, a read followed by the write will provide sufficient delay. 2. For clocks running below 24MHz, add a delay of 4 clock cylces after the write to the LPCG register. Fixes: 2f77296d3df9 ("clk: imx: add lpcg clock support") Signed-off-by: Peng Fan --- drivers/clk/imx/clk-lpcg-scu.c | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/drivers/clk/imx/clk-lpcg-scu.c b/drivers/clk/imx/clk-lpcg-scu.c index dd5abd09f3e206a5073767561b517d5b3320b28c..2cffec0c42dccc256e8dc5e9181952e250870a76 100644 --- a/drivers/clk/imx/clk-lpcg-scu.c +++ b/drivers/clk/imx/clk-lpcg-scu.c @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -41,6 +42,31 @@ struct clk_lpcg_scu { #define to_clk_lpcg_scu(_hw) container_of(_hw, struct clk_lpcg_scu, hw) +/* e10858 -LPCG clock gating register synchronization errata */ +static void lpcg_e10858_writel(ulong rate, void __iomem *reg, u32 val) +{ + u32 reg1; + + writel(val, reg); + + if (rate >= 24000000 || rate == 0) { + /* + * The time taken to access the LPCG registers from the AP core + * through the interconnect is longer than the minimum delay + * of 4 clock cycles required by the errata. + * Adding a readl will provide sufficient delay to prevent + * back-to-back writes. + */ + reg1 = readl(reg); + } else { + /* + * For clocks running below 24MHz, wait a minimum of + * 4 clock cycles. + */ + ndelay(4 * (DIV_ROUND_UP(1000000000, rate))); + } +} + static int clk_lpcg_scu_enable(struct clk_hw *hw) { struct clk_lpcg_scu *clk = to_clk_lpcg_scu(hw); @@ -57,7 +83,8 @@ static int clk_lpcg_scu_enable(struct clk_hw *hw) val |= CLK_GATE_SCU_LPCG_HW_SEL; reg |= val << clk->bit_idx; - writel(reg, clk->reg); + + lpcg_e10858_writel(clk_hw_get_rate(hw), clk->reg, reg); spin_unlock_irqrestore(&imx_lpcg_scu_lock, flags); @@ -74,7 +101,7 @@ static void clk_lpcg_scu_disable(struct clk_hw *hw) reg = readl_relaxed(clk->reg); reg &= ~(CLK_GATE_SCU_LPCG_MASK << clk->bit_idx); - writel(reg, clk->reg); + lpcg_e10858_writel(clk_hw_get_rate(hw), clk->reg, reg); spin_unlock_irqrestore(&imx_lpcg_scu_lock, flags); } @@ -149,9 +176,8 @@ static int __maybe_unused imx_clk_lpcg_scu_resume(struct device *dev) * FIXME: Sometimes writes don't work unless the CPU issues * them twice */ - - writel(clk->state, clk->reg); writel(clk->state, clk->reg); + lpcg_e10858_writel(0, clk->reg, clk->state); dev_dbg(dev, "restore lpcg state 0x%x\n", clk->state); return 0;