From patchwork Mon Mar 3 02:53:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 13998087 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 829FEC19F32 for ; Mon, 3 Mar 2025 03:02:48 +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=Ac+LIaNTlRnQqO1fU67vqU8uKOx5t1BpaaxTUT0XLLs=; b=ReCQ2Kr6Qrh8aoYsKdvDbUQzOa rVdzrUa5dF7iX33qRZkK2Xhy3EmCePui/GWndLJqRkvl32x/eP14kHKaPoJuSGWqU86s/2UVrtwus fqO38+9BxW6tZ0hiziqxfaAyirTSfLiRMdQ+ZUqkBe2E0FpFLPe1IwqJUOrwv8kTAofk+Txxypkm0 DdeUFgZZSKpNZ9t0PtnXSGF0Tx/1D1cpgnx1fwPEtAHhwoL5y1tCtnF8EtHbsu2t3J0A7P3qV0sSv sMVBOGtoC4ACCISbmcIpiQoq3EmB7QyZlk4ialG5UGHc6Bqag3WdAiiH3UpN31kQdBHWUdOLLqUXf pCQvp5kg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tow4i-0000000H1wH-48YH; Mon, 03 Mar 2025 03:02:36 +0000 Received: from mail-db8eur05on2061e.outbound.protection.outlook.com ([2a01:111:f403:2614::61e] helo=EUR05-DB8-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tovxK-0000000H191-3n0W for linux-arm-kernel@lists.infradead.org; Mon, 03 Mar 2025 02:55:00 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ON24BxB9TBdCT4G7KV6/oZMqTmTR99H+Yj/NeEq7axiLL6qtxNynqUi/OdHxIdLEEjXBPGkep9CXKkdC/szhpsxHIP+bWTu/znCafcIsgtceu374nln4llbxJUWfIl1lyiZz3QkOcXppgto4495oexqLioMeFgAn/HELoY/2uWe1DCEbbGnk17A0x57kWw0ypLJ5a9+Tgwey7JC6Kpgf/GSj3fxY10qgizzZNTxYKRx2SfZEbJybpDrJ0cojpNrr2PIiZykpeo3wzOqR+5DndUd9pQFz0n55wVp3DQiampVF31pcYkQGf0QRfidvPGmiiVAnYeiAMPiiEsEboB4zlg== 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=Ac+LIaNTlRnQqO1fU67vqU8uKOx5t1BpaaxTUT0XLLs=; b=ihlospK0l7zvbBi3fOkOeYgRwNjq/oKp7Pbft5IbF5jlm6sadL4Q3wUwfbBRBiegmI8TK0LKl4UPcCtlIzCNA82hxnH/eewgOQm6vS6dwAf2CbI3jfULFrWq2npAAwVRnwG4vnL/vp+mhlijjPsx8iTZv6gZT9UziE+TlKrjW3KU9K9xjR+77XKYPRUDvk0EhOy9mA26BHwhvJ5Rg7B8i/RYC2f+kjn2txSvnugFfGYFc/L2emd7XBxPcqzvV0rZtu+nIHnXXAgbFCEYKS0zt3R4Ht/VKWpGgzaBlAUTIvEBFfVvRAeOr81g5a0SRp6o5SMAu22hcbpPVUy9uK4T4A== 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=Ac+LIaNTlRnQqO1fU67vqU8uKOx5t1BpaaxTUT0XLLs=; b=T3V3uWqRey3ITO84VuZEOswCKhXrsBGr+jAAMDtydLT50/IFKlCweyYg28r6sWobbUZtvDh21mykzQkXzTJ2Hk9e/72wjOn7SVcWaPnjrYV2QLGlcjnlLaKkQ/J9suzU/iXpIBdQub6wa9HtownAyKHm1kuAq8nUYd3QKGtayW0BsbyU3856EzIXJYKahB14dpNBi0gZd9oeaUG6sGtfANfxRMGtJHPUyGLD1pPxLjIcRm5Wroz/Sap1HUmn50GSLrHcNl1DLq+RxHx4KWutDytSJkBR/BCeuIB79HnN0dvLo32/e/o7wuypoSAcexLUchVeP2KZ8x61DrNJ18/7mw== 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 AM9PR04MB8308.eurprd04.prod.outlook.com (2603:10a6:20b:3e3::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8489.27; Mon, 3 Mar 2025 02:54:52 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%4]) with mapi id 15.20.8489.025; Mon, 3 Mar 2025 02:54:52 +0000 From: "Peng Fan (OSS)" Date: Mon, 03 Mar 2025 10:53:27 +0800 Subject: [PATCH v3 6/7] firmware: imx: Add i.MX95 SCMI CPU driver Message-Id: <20250303-imx-lmm-cpu-v3-6-7695f6f61cfc@nxp.com> References: <20250303-imx-lmm-cpu-v3-0-7695f6f61cfc@nxp.com> In-Reply-To: <20250303-imx-lmm-cpu-v3-0-7695f6f61cfc@nxp.com> To: Sudeep Holla , Cristian Marussi , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: Dan Carpenter , linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, imx@lists.linux.dev, devicetree@vger.kernel.org, Peng Fan X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1740970413; l=5763; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=RAeXl59ykXx6Jn2tPWjZDrCKA+vTZRM1MrRBDtexg3o=; b=AA6tZi7HOz4uVs706iC3g+8mc6Jlu24JZybviujp5ee3T4PZ60fnbwhp73eun4Avi46/pLfK4 blW5e7xZbBkD2UvpXHcOJBFlsRi3wmdfEVxqwpdZCGYF8iLFBIcqvmn X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: SI2P153CA0014.APCP153.PROD.OUTLOOK.COM (2603:1096:4:140::6) 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_|AM9PR04MB8308:EE_ X-MS-Office365-Filtering-Correlation-Id: 1284dac1-84a5-4d37-357e-08dd59fec565 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|366016|52116014|7416014|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?hiZaLRnAEbEntW9PP7iu99uNcCgq5iv?= =?utf-8?q?LF1fc+xSaOCZVj3qDzm83psp1Z7xfWqGKBVCaanLNA32kmaep/3FK83osLt2ouC1d?= =?utf-8?q?bsR94egCYO6rVJuVRtkQPASktCbgVzTJr6TyQTrNL2YJD19sIZ3dMa0/tDx9N4Aep?= =?utf-8?q?aEBFyF9psXSWa/53ajniUvQbYPQ3Tzk28UWEchaCGa546QXfTRxruyujq3PcNBNu9?= =?utf-8?q?AAd4Oyr3tGGK0zCW64sopzgBzVNRW5Mu3M71Bi3e9Qcl2OeRRCH4pVVTfZ4jAoAVu?= =?utf-8?q?3ArdGTtKkDqXeKvESY03f8pehb97K+YfCMeJCeWF9Lr6Z9YyqNFteP5/K66E+PVFz?= =?utf-8?q?jF+z5leNH3fJmoeqdlIsOxORvLolBEsAc2sX3fD+KhWz9C2G/xAXlS8LFxqfRZd5h?= =?utf-8?q?gQK+FihWgjXw9Rts16n7jMHvxnNjp/aJWg0uOZtQebEA8yEggrhmNYJYgYP7EAEx7?= =?utf-8?q?gW8mMn6s+SjseTSFQBRZS/J8CIzQyNA0l33tRBNobDlYEAjekWdZgNb/YKwwnz1/X?= =?utf-8?q?ARkNcinrTd6tvomCV+3KzdSB/w1/Yt3dPGTjst/Dyo5tOZDzgtW0OlgkkYOJhA8BL?= =?utf-8?q?3yO4XPsbweHo0St0rZQ8PzmW/CId36KOskBBUoBIPrS6oh1r3nNFdVMZ/LcqmnjFq?= =?utf-8?q?Gdyq2tGS+uKxL8fqkt3EHgeHfC+vsaTAnWTTXnQcD1XFbmSH2ZyQuRJoQh0Rkm3aS?= =?utf-8?q?VwwqhWmvIi+RpkrBSp2ttgFNN8RDQEYOUmd1G6yE9lG2H6WvAAztDNvQfSO9VCfWA?= =?utf-8?q?iK3xXiU0h+saAHj+6udtJ0Uledc8wWAhGbui6yZEWYBwiiL25LK3LSA3JUgXSIvwt?= =?utf-8?q?fgqv3F1OSswD+9c5uXSsTwoCTNRMAI/6Rxflte8jKm7cMuWZeIcKKHKrDYgMTYcfh?= =?utf-8?q?A9kcmTJx1JSihcSiOkjUB0pLg7OmLR113rP8nGevP33GqJM+fXNtihOPITmlXFnjD?= =?utf-8?q?90IOgEQWhGrGTJO0SHwu9WGdtwJLF0rdZcQ91zN/1nfWRrK6BdmYDnXiN5iOUpY2X?= =?utf-8?q?uEXmqe1svORl8LPuWrritvbKZVQsPrY57+TQInyO+9IDLY4d/OGxusQo483wa0cER?= =?utf-8?q?FQJHOChEiDs6Nt2Ez09US/5loZ58twU2pJ6wNCRw+7dGpk++0bADcMCKM3aw3Z1ZY?= =?utf-8?q?DA8cCzroRTX7H1OhQWlhwgmq2JDm1UICYmwPzlaRINPe3DgttwYwXJRMSKMlrG4qM?= =?utf-8?q?pXlmzZIgtsR3IspihJvI8fLMayo9YJ2HLeGS3PBqsOc8DVZ7/6JKb8ocVNZtWBgHa?= =?utf-8?q?2R3ibC/H3B47GfMVOdOj/5LIpKuKed/io/hlKf4d4i4rQQQU3WQRbbU3JTKLkgMJu?= =?utf-8?q?ZWJJ+yjP/ViiKej/jT7ZC9dB+kkJwNbnUz0Dp0xILMWTTZGDs+DBNuCoi74mOji5I?= =?utf-8?q?MjG/RysTjc5?= 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)(366016)(52116014)(7416014)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?TZ0P+JQguLdfd5pzt4ZCP6DLnni4?= =?utf-8?q?RqjiygQDTtHnq9fSKeKPlwqskS79+SfsuoNFkyR4aiU8phsGX9jS04YOuetsbkky1?= =?utf-8?q?+qaNKwIw7+mnvuOmHs5YKWIr0F/yiQaBZ4y0bK6rMRW61pAaOHveXPcONEP2aHUTd?= =?utf-8?q?Krw1h691VPtu1hn5kDK3t7fGSsdOAOJxpeiQVhRqfH7k+PB1urFQYP+M3JlAS/lV8?= =?utf-8?q?/R7dSznvHQrEdHV2NgzQ8d6MHP5UtnfBic10PMZe/rQEJlIKqAypRT3LXV/6hB09i?= =?utf-8?q?PznHIQaSj3mz9OyYNFoICY+u8HWZ2cp+CJnKWJYEloIK7JHS7ot/qraGO+OBBtCg3?= =?utf-8?q?bRXEWkeL0qtNG4h3fjchY0Ncbbf2UI+WqULQuwpacHtPs1az495rrPnTGRAQTq8qv?= =?utf-8?q?sZ38D6GL1KiTNDz83czGpqoNVJ2jioI6SDwzvQ/3tbUbw1HZNq6ST1BC2ZhhCJ6zy?= =?utf-8?q?L96EqdQPve6+coq3oVoAxggaTxdM47GvOUaMGBXyv4fWDy8JSPYh4wQZEQsAMWuZU?= =?utf-8?q?MdTdSMqnfCtPjFTl6pxAQ2qr3BZpEJzuu5XuO3pTTPwj81aeLYatx3jBB9dBsUFC1?= =?utf-8?q?n6akFOvk90S6hvvTvcUnlO/G4cGW5QjkDkVNursVLhqLc36RxsGOfwIA6fu647PUs?= =?utf-8?q?fgNW/FaEPcv/GayEHzB/MzVTdwl5rYpBw9uDf78oIoiCx3Tb6qFLC5q+LPZF2HZvb?= =?utf-8?q?8OngRGQ/i/IDDDpDDDyQVk57TPJV6E15gC/G/znGPk5XVBKJc65YJ/2jJUYCD2nUE?= =?utf-8?q?x2Z7L/OOOMLTc2ZOi8EsKDpiCCJxNE3wUKFxryVrmSzK6TxBi7uQBymvJ6hQkm8Tj?= =?utf-8?q?XTPhv7nEA/PdHps4LGZjcJcJdiH0gHgR2irHWeq1VxQVyWGufxCiS70YdvORhueG7?= =?utf-8?q?MU2VPVWlHmsKkZGYaz+hOSSKLmuaYxFFseABTWu+KDgtu9Q+RWMs16TePgvrtXZLo?= =?utf-8?q?HLQErKu/rsPMw21e63S3wWK03PrpOGWhCW92m6MRPg/qXgQLBxFhADwQPy4UGuJCd?= =?utf-8?q?419DDbrE6Kf+4bpQDZOMaG66nbGRFf7A3SN22iiiTrfXZNmV8mJa6SNalnc+aIzhn?= =?utf-8?q?opCIxioGFVxZL8NxBWM0ZTBGeQtSpgp3lzaSXNnEioRHzAv7524+sbNUdd3tttqlU?= =?utf-8?q?fWLJCBLr1byT2zmTNY9ho24vvF2YFQFkIHQc05pV224RL67y2Cs7lM2HudmDFhyCE?= =?utf-8?q?NcD02Lb82YKFAPxLfffXvkpy9LB458LArlzWYTkalw+lEWyBYZ8lZ+BVtJ03QyC8q?= =?utf-8?q?AWbgkKvhE+81y8+q+JI7JYHjJ3fYf/xsjJFpOq4+cBlHNOV/Qsk1t6jmAfpOt37JL?= =?utf-8?q?sgjfYhTRSNHSqcx4f1qt5bYyw3qahMY3GlYGTpWd1Yqlt6vmMqTojcdStJ8eskc6M?= =?utf-8?q?nE6BbUEYXMHQeohB3e7FfwWi43Bym3Au6LXSLCoYEbRaCKRt+cmfWhW2Lu0v3DTsf?= =?utf-8?q?epzDa5slXwvA0ZqBX2bouZS6AszhWxOmyl3EZ4kktztMtuc4g0no2mGF1x9sZwUHB?= =?utf-8?q?qdDvtB0u+Y6Z?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1284dac1-84a5-4d37-357e-08dd59fec565 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Mar 2025 02:54:52.6840 (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: RdHYy0Y9gD+Wj4kRl0a0vb3vFnd57qE29+c3RqwAVxxirp/0Jz9FQvSjbBsyQ/y8qiT7RnwbaRlyrD6NRNeVdQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB8308 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250302_185459_104988_7CF04ED8 X-CRM114-Status: GOOD ( 18.79 ) 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 The i.MX95 System manager exports SCMI CPU protocol for linux to manage cpu cores. The driver is to use the cpu Protocol interface to start, stop a cpu cores (eg, M7). Reviewed-by: Cristian Marussi Signed-off-by: Peng Fan --- drivers/firmware/arm_scmi/vendors/imx/Kconfig | 3 +- drivers/firmware/imx/Kconfig | 11 ++++ drivers/firmware/imx/Makefile | 1 + drivers/firmware/imx/sm-cpu.c | 85 +++++++++++++++++++++++++++ include/linux/firmware/imx/sm.h | 5 ++ 5 files changed, 104 insertions(+), 1 deletion(-) diff --git a/drivers/firmware/arm_scmi/vendors/imx/Kconfig b/drivers/firmware/arm_scmi/vendors/imx/Kconfig index 4c24e17425f830810f8ba376ece9db93c8cded6d..9b4339b93826804599371f2e3a2e79f27449582b 100644 --- a/drivers/firmware/arm_scmi/vendors/imx/Kconfig +++ b/drivers/firmware/arm_scmi/vendors/imx/Kconfig @@ -15,7 +15,8 @@ config IMX_SCMI_BBM_EXT config IMX_SCMI_CPU_EXT tristate "i.MX SCMI CPU EXTENSION" depends on ARM_SCMI_PROTOCOL || (COMPILE_TEST && OF) - default y if ARCH_MXC + depends on IMX_SCMI_CPU_DRV + default y if ARCH_MXC && ARM64 help This enables i.MX System CPU Protocol to manage cpu start, stop and etc. diff --git a/drivers/firmware/imx/Kconfig b/drivers/firmware/imx/Kconfig index 70c092424328067ea6b946cee59f072661e27e47..8236f81e054ff43c5fbc660a67c53ea9324ab402 100644 --- a/drivers/firmware/imx/Kconfig +++ b/drivers/firmware/imx/Kconfig @@ -23,6 +23,17 @@ config IMX_SCU This driver manages the IPC interface between host CPU and the SCU firmware running on M4. +config IMX_SCMI_CPU_DRV + tristate "IMX SCMI CPU Protocol driver" + depends on ARCH_MXC && ARM64 || COMPILE_TEST + default y if ARCH_MXC && ARM64 + help + The System Controller Management Interface firmware (SCMI FW) is + a low-level system function which runs on a dedicated Cortex-M + core that could provide cpu management features. + + This driver can also be built as a module. + config IMX_SCMI_LMM_DRV tristate "IMX SCMI LMM Protocol driver" depends on ARCH_MXC && ARM64 || COMPILE_TEST diff --git a/drivers/firmware/imx/Makefile b/drivers/firmware/imx/Makefile index 7762855d2a771169d4f1867d27e0d51be7c9ad03..3bbaffa6e3478112638ed031375602389f18ef09 100644 --- a/drivers/firmware/imx/Makefile +++ b/drivers/firmware/imx/Makefile @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 obj-$(CONFIG_IMX_DSP) += imx-dsp.o obj-$(CONFIG_IMX_SCU) += imx-scu.o misc.o imx-scu-irq.o rm.o imx-scu-soc.o +obj-${CONFIG_IMX_SCMI_CPU_DRV} += sm-cpu.o obj-${CONFIG_IMX_SCMI_MISC_DRV} += sm-misc.o obj-${CONFIG_IMX_SCMI_LMM_DRV} += sm-lmm.o diff --git a/drivers/firmware/imx/sm-cpu.c b/drivers/firmware/imx/sm-cpu.c new file mode 100644 index 0000000000000000000000000000000000000000..091b014f739f68d815d71f9b53a2a7eaf0bd607b --- /dev/null +++ b/drivers/firmware/imx/sm-cpu.c @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright 2025 NXP + */ + +#include +#include +#include +#include +#include +#include + +static const struct scmi_imx_cpu_proto_ops *imx_cpu_ops; +static struct scmi_protocol_handle *ph; + +int scmi_imx_cpu_reset_vector_set(u32 cpuid, u64 vector, bool start, bool boot, + bool resume) +{ + if (!ph) + return -EPROBE_DEFER; + + return imx_cpu_ops->cpu_reset_vector_set(ph, cpuid, vector, start, + boot, resume); +} +EXPORT_SYMBOL(scmi_imx_cpu_reset_vector_set); + +int scmi_imx_cpu_start(u32 cpuid, bool start) +{ + if (!ph) + return -EPROBE_DEFER; + + if (start) + return imx_cpu_ops->cpu_start(ph, cpuid, true); + + return imx_cpu_ops->cpu_start(ph, cpuid, false); +}; +EXPORT_SYMBOL(scmi_imx_cpu_start); + +int scmi_imx_cpu_started(u32 cpuid, bool *started) +{ + if (!ph) + return -EPROBE_DEFER; + + if (!started) + return -EINVAL; + + return imx_cpu_ops->cpu_started(ph, cpuid, started); +}; +EXPORT_SYMBOL(scmi_imx_cpu_started); + +static int scmi_imx_cpu_probe(struct scmi_device *sdev) +{ + const struct scmi_handle *handle = sdev->handle; + + if (!handle) + return -ENODEV; + + if (imx_cpu_ops) { + dev_err(&sdev->dev, "sm cpu already initialized\n"); + return -EEXIST; + } + + imx_cpu_ops = handle->devm_protocol_get(sdev, SCMI_PROTOCOL_IMX_CPU, &ph); + if (IS_ERR(imx_cpu_ops)) + return PTR_ERR(imx_cpu_ops); + + return 0; +} + +static const struct scmi_device_id scmi_id_table[] = { + { SCMI_PROTOCOL_IMX_CPU, "imx-cpu" }, + { }, +}; +MODULE_DEVICE_TABLE(scmi, scmi_id_table); + +static struct scmi_driver scmi_imx_cpu_driver = { + .name = "scmi-imx-cpu", + .probe = scmi_imx_cpu_probe, + .id_table = scmi_id_table, +}; +module_scmi_driver(scmi_imx_cpu_driver); + +MODULE_AUTHOR("Peng Fan "); +MODULE_DESCRIPTION("IMX SM CPU driver"); +MODULE_LICENSE("GPL"); diff --git a/include/linux/firmware/imx/sm.h b/include/linux/firmware/imx/sm.h index bc27b04afb2f68b048955f51c07a106f4c7e5852..a8a17eeb7d907ef8ac074c4ed1d3ac83f1104627 100644 --- a/include/linux/firmware/imx/sm.h +++ b/include/linux/firmware/imx/sm.h @@ -21,6 +21,11 @@ int scmi_imx_misc_ctrl_get(u32 id, u32 *num, u32 *val); int scmi_imx_misc_ctrl_set(u32 id, u32 val); +int scmi_imx_cpu_start(u32 cpuid, bool start); +int scmi_imx_cpu_started(u32 cpuid, bool *started); +int scmi_imx_cpu_reset_vector_set(u32 cpuid, u64 vector, bool start, bool boot, + bool resume); + enum scmi_imx_lmm_op { SCMI_IMX_LMM_BOOT, SCMI_IMX_LMM_POWER_ON,