From patchwork Tue Apr 8 08:44:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 14042419 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2044.outbound.protection.outlook.com [40.107.20.44]) (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 57554266B52 for ; Tue, 8 Apr 2025 08:47:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.20.44 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744102065; cv=fail; b=ruQPUw6aNR85sCQOaaWb13C3C/btq0FGzOw9+OnLZQ962wnD+dGZ2w/D+xRBY1NHqR3qjs8BfgpRJBTl7x73JfM9AcGcAL/UQGiW+SOmkXajz8t6dqrKolEdEzihtMS4FcEShbr9quLHA6x14do0PYNxuqh9ygrcGQ3lsfj/Q4g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744102065; c=relaxed/simple; bh=jWzSMbbw/V/IvQlEKNz5imWYW++iVwi3sKNU6k9Sy9k=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=dcYOz+5ROcacJBG0PMbgEHE1UYbrG7rqkrxG7RQLBBe19eYV8UXbwFfyqqKYGmWwF+hNyOxVNfk7qHQG1QSoF1L8g/p0skCK3fV7H9pCwwwB6XqNifixxY08EYO/02JMKVOCyai/kWf+GiNE1SprGP5uAUJsYaGE8vMW8aHPoBE= 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=DFD9qdFz; arc=fail smtp.client-ip=40.107.20.44 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="DFD9qdFz" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qjwCPhQjvFDOV9PpjSgRJRjkN1eWtPHrH0I67zYbMgreeviwoC16MfOrlmNvLMQKok1bHKRbJmEbeRh22B/trVanIHnl/qS+H9RdOayih+PNzYtFCtMoTUFrbzUJtn13lI10ARnNeD8t874UNFbEma6o7P4VnNf+nrdBxCmQezZ1yNm5ryf++hds0OIOH1MmNUwnv+1ezBT2GrUCacYguJmcMStGaNwS/GOxcidNL/HMDYF8dWy0gI6MetMrcAiyR3DjtEH+NsYFJJIsSksYhE04dzyojqrGiMDoKvlxH8ZueQW1NkpF/BnjlArmbet5m1MJSbd1Kirf/v1y3rOnkg== 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=XtjnNBQ7VnWYvdd972sYmHEKLz4B1QcVbYa8dK/MqtX6DYFa9D+A2tb5dLAUv4aZoNtBZDrHemHxOqM2WiaZ+utGMQcEit038DmJUdRmnSOp4+9VK7IXtjqJ5bhLBVdYYKNGmvhBkiku1FanG0YHUKxehu6AeNHqi7kKqtPDbhRsIHQ6GecQzN199XDUos8JT9A3KGgrQNGAqAZaRRocLYMc4nLRNrW2sWIn8xbq5RaFTg6ikci2DrI+cD+/RqonVyHbWL2JGU/IPGN/Cpx+JlEikzYG43I/682rBoqC/ipWu0sbLbK3TDvdcssHINZkk51GAeCQujAMjmBUxZLu1Q== 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=DFD9qdFzBFba15l2U9EOm+9yWYEZ0WrlrhQHTI1vuTVprbvLOC9D8jkku/EVtSHyPcwejJANcEwTF8rGjJfgJQ5iwnCb/VY7iNfIHwFhICck9ifvLXnP+PNkO+IkfMhsToq5qasVz6dHYxTWO7sXztEW5lR+SnSPbiUVpopXIdvFTj5v8SqYb318RnlM+kHYZxdn1l5DpKSPhsK1SsWAaD8Egz7ClGiC/iZlW0Qt9ARXSVuLywSrHFojeKOmSuVhmg8yG6zqCGDp1Mm7gR3RXGnMk1q5upe2panR9PjuMmbKRvu6lkMSdIdoLZ2DEEQ+JABjzyhd32OnbCnoCjEQNA== 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 DUZPR04MB10063.eurprd04.prod.outlook.com (2603:10a6:10:4af::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8606.31; Tue, 8 Apr 2025 08:47:38 +0000 Received: from PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630]) by PAXPR04MB8459.eurprd04.prod.outlook.com ([fe80::165a:30a2:5835:9630%6]) with mapi id 15.20.8606.033; Tue, 8 Apr 2025 08:47:38 +0000 From: "Peng Fan (OSS)" Date: Tue, 08 Apr 2025 16:44:30 +0800 Subject: [PATCH v4 6/7] firmware: imx: Add i.MX95 SCMI CPU driver Message-Id: <20250408-imx-lmm-cpu-v4-6-4c5f4a456e49@nxp.com> References: <20250408-imx-lmm-cpu-v4-0-4c5f4a456e49@nxp.com> In-Reply-To: <20250408-imx-lmm-cpu-v4-0-4c5f4a456e49@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=1744101964; l=5763; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=RAeXl59ykXx6Jn2tPWjZDrCKA+vTZRM1MrRBDtexg3o=; b=s747Eb+wJbble6RmKedYQ+Pz3gxHO3PesCJaspYxdnoyNW3qX6zj2Ag0KhU2jipI8Z7HgX7Ca CpofjeD/1IWAekQUydAJ2gmC411G+P2NOmiekvlFrc8ws65M29VPKvH X-Developer-Key: i=peng.fan@nxp.com; a=ed25519; pk=I4sJg7atIT1g63H7bb5lDRGR2gJW14RKDD0wFL8TT1g= X-ClientProxiedBy: MA0PR01CA0056.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:ac::12) To PAXPR04MB8459.eurprd04.prod.outlook.com (2603:10a6:102:1da::15) 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: PAXPR04MB8459:EE_|DUZPR04MB10063:EE_ X-MS-Office365-Filtering-Correlation-Id: 67646095-270a-4632-c48b-08dd767a0401 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|52116014|7416014|376014|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?SpO9DcwApXlUcGtllf3WchKpEoOY0f5?= =?utf-8?q?az5eowEjvpCuLtSkIUW4/snc3ilKRUHJHCwCe6uj2SQTYrnjFB2aIEom6SSau3DNA?= =?utf-8?q?jG8wV2142UY9OaZFyotOP+/m9fNqo5qtmFhvh5noS3iaE9wTSLsuXvqgPM/nfUWvg?= =?utf-8?q?txcVlxZIJbONHj4QshNZ6SXPCDyZNxPEcQYgTfN9dFen88Qj80k8CdQq9SVgPHl9k?= =?utf-8?q?YPPSoNV9EqnmVIjh2qXJ1eESaeO02wGiC9C1MZ3EuI4M6jaIy/dV1BEPhh4J431V9?= =?utf-8?q?G1ixpdpKK9d3fwWr0Sr34WDl2ER4KMeqXATD9LlQ+6TXncZLy3CxYz2UoIKZHANB4?= =?utf-8?q?yYVBCM9ONLAofbyXdg5Np81YmfIsNqpmVBr1HKrx1zATw73nqyF2VBEPnfeF4wmef?= =?utf-8?q?uxqLoDBdcSOcNoZi1Wt4SEkfEeDBLYUp4lPWAuWpsE+P9S7okJZ5Tmf8+i+t3Ll/N?= =?utf-8?q?xp/XRjdpXS8ZMHkd/rmISPQw46HffzlxMGotBDVa/p5fFFxo0qPsgjp7St+fBoPMU?= =?utf-8?q?wfBWF77iRdAWDhhudPDw+S4GsE3vMpWT0tw684ljcnJnxc4siNBf2r5TfNo0RlNmZ?= =?utf-8?q?cnkuKQPvgR0zbUern/LK1DcT5nJzOfhUdR4wEsAkf/yGNWElDJeE1JX9gGtcolxfg?= =?utf-8?q?2VYnblnd85PfRywucXc9iO4Ob9hxaDXNihS4VKGlVyfYJF4ckwVS+SLLX0OHy6gye?= =?utf-8?q?h1LDJfdiKopmW+lVhL787ZRXpQng3xyrFV0Tj8fJTwWYZ8aevaxyNLNGeVOPVtdK2?= =?utf-8?q?O0qkpdPypBiiGoCnoQaY1P42yv7UMlmCy2/vzba8TJNOGnYrp+gqxUjKrGh/DIUPI?= =?utf-8?q?L6IcjkHXZ5aGv377YmX28u3dn9S9kNSmnzn1EOHuXKRjQZp5/bAF5QZfkvcrqjD8B?= =?utf-8?q?1wDTMRjWyBY+GkvS7YzAHWULlfCE17KdIRYZVuKGJVMp/OfNiS5/OkZ4sgwx41a+M?= =?utf-8?q?TGOuZ1FhTLqrdonplctPacy6P4xvlnMKpPf6e7GkLNbc+iXKIXWq3268i7Ua0vmmV?= =?utf-8?q?Q38KxudncWuTPpKcsQihJXyaWVWWXyqVy4pQ/m/qK6jjk7cxTouPTVb6oTxq4mDhI?= =?utf-8?q?fP/8Qz3HwfiaOr1kLGHpZlc+SsJ7gKX2y/dMSkAY22pLmvA3IKV6H+4nXVSlTlHM9?= =?utf-8?q?g/3mrevcvQzRYmbM15lq+bm3JE5QvZXYVB31K89D4hEOrk9g5DH8HT6SRRtZ8OKwj?= =?utf-8?q?Qhs38ddqruxPUEC+Ijqk9WuA4Rfmilfj+wJilQq4mFRfv9ohXyy6hKsaMGf3UuYVi?= =?utf-8?q?WPY8aUvKCWWiGdANXbhn2Tspp3+w4Y5+so08IJcKg9y4PyXpyDlnBKbtuqGDTekH/?= =?utf-8?q?DFmmbkhDqcEkbXTU/WsTiQw+qF2UPGhHtMNjFxV+T8161LYHzEWmRi3M+kZihXmPf?= =?utf-8?q?jbOM+IISVFn?= 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)(52116014)(7416014)(376014)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?TLAx4cZMp/snsOR37TSGEUtRvbLB?= =?utf-8?q?S0jSdaYMgTNkV2AXJi8IvCh7IftwWZC2pubLAgoQn5p6Br5QpNUZA4ltYIWF4zSFH?= =?utf-8?q?u+LmNQXq5GkEtu7s7e6sj56NQqcUzRmRMwSGw1/+3HGaLdbBvcidvkH9uO561GELf?= =?utf-8?q?NRkxS+7OxxFyUj5aXyqD8cedsJ7oRoeav23zPqvlunyeEuhTMIUy9nFf0dGAbVaF2?= =?utf-8?q?8rg6pc5eaF3Uk/Y8apy00XIzUDDW53+YtXMr0TCAei661h3k6GsCgGhnez7y0Y6ZZ?= =?utf-8?q?TQGPEhpxVH52bumqCnkz6W9QktmwpBxsj15sodN4zTn45CHJ5chjI6eh6zs+cyyAW?= =?utf-8?q?4/h2Mu7bYqo5FriPMZfVVuvRMpMS47Z6aSQeGb7O7iK67ZP57jMppQ5bbMz58r7vJ?= =?utf-8?q?+JTYzNFQ/dA1rXIpQawUkL+pDuGdrnLlMOTUu3omR9jVowoNSOZle08WoaGmNSEdj?= =?utf-8?q?xXTd96o4U9tmCqzk1boaZg+Hdmm0tmaMUCbZ5ely97czRfhyy0sIcVx7LbtjBVbQv?= =?utf-8?q?bJUmZ+QbUBEDwAIllI+8Q535flZdbdCLqENXe/MTDbpHcUyqnFkJWDletEpIoAqtc?= =?utf-8?q?FbgAUdlGkJcGHJ+QvGfuSxtq4h987DR3Q5eaPvBI3VH4RMFzmLFXZ+QNN4oGSIQVj?= =?utf-8?q?6b+R8E0ni14ZWX1j3Tx2x4vR6ZA3HpLv0lKIMzo2qygIrclQYedWVtjX+7qBFmP9Y?= =?utf-8?q?Fi6dRTTutCAqzpFphdwTbCLFjBDguzkO5bD+BsXf9OiR3RcfCfU049Jq4X7Eqk6o0?= =?utf-8?q?yI0ipHnDpqMjcNEgaAybCkTAS0oTxKy6WxGNQ4a/FeRkvR26OH6ugGOg3S8LOAvGP?= =?utf-8?q?LyenFPRIqGZjMu/UZVcBvstzos8JoqBknj1kGQOfVO2v42zsRzEZA+nsZtjkTs1+3?= =?utf-8?q?epSpo0eXdj+oskbM5GJXgFg798m+4H/0X3MBfX0pAG9LlFDUuW35vnNo5QDSSPewp?= =?utf-8?q?5IJFFkxIgFh+cvRbAb56tYD/S7kWbROwiZ/BX68IrQkXbmDvM2PeJp8ubnyruBUKy?= =?utf-8?q?PCbLVC7VuynfEh1yEG2No5T52Bx+C2VNL9vdAdVBkKaxSS4LZxyRTp7LCoOAmDCIZ?= =?utf-8?q?91y78Etykfn3YwPVuAc0R1aq7RKPBk/KoXCGIFzCG6pMMT/nL4Dd3nPgafxt4UgpL?= =?utf-8?q?V9H/Vu22y2QV/3KRrgPriUfLQs1QV286eKf14atyRGvReSqCw3B7gbAoxb9Ul4zF0?= =?utf-8?q?tHpTnpMwPliag77b4wJynoqSM9ZP17phOndy8FriD5YNUA9E58JeVEYgZcKhtxL4c?= =?utf-8?q?z+s81dB4yjlBHKXLQesy9nm09xKa46SUU/gewDQOaGqV0w6KbZfHfW3vgCHlBH97j?= =?utf-8?q?e7oL5o4ky1WupJlxKeQMFGLIZnyCT6bLOF6kBIfCcpUeFG3jCQx6Wn14n+rrsDpm7?= =?utf-8?q?tiL0dL7Bc5X8o9sIiN50DLkjJzrGDCe0uIhA7ToqmUiXX7mGjN+VywaBZvZmZnaYT?= =?utf-8?q?N2xcXJd0Ieg2rUV+8BSqpKcBk/umx3mjtCA2Mg1UvEuEFJS1+hr31JlaTTyAFNKUu?= =?utf-8?q?CQT64hdLbs8h?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 67646095-270a-4632-c48b-08dd767a0401 X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2025 08:47:38.2888 (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: 2O9Ykyy8I5weTk8ir5QSLUYVx7c0wOZz8j19wQ39+0j1SJRN5kCPQgBXsSDw03mO3rfD0JhJVOuF3wVsgNLkIg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DUZPR04MB10063 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,