From patchwork Wed Feb 12 07:40: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: 13971286 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2077.outbound.protection.outlook.com [40.107.20.77]) (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 5AB832046B0 for ; Wed, 12 Feb 2025 07:41:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.20.77 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739346108; cv=fail; b=LOExuVke+Z631imXKOwj/CgMvlcODYUUggfbai6vHQZBDc/rbq4Asn5+xa9d5+8n0EnsLYURPwFhkVRlE9RCSzAptbHwoqRaKPA6S9bl0xM4EWwDblSB2cQvCtNB2UChlnhI0A1v094rghIibvgL8+s5UG4/uXzonxiL693aEVQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739346108; c=relaxed/simple; bh=Imj1aqsCz/elYzETT9yhSOLkfO/Rl3aLjzPaRtfaOcg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=F7Dd4ieMUWF1dKSCvTtlpxtzu74whQEAYV/ldp1Ru3iV9+OqFRJDjVH0IOnoIycOnyp+PoIl+rcsXQL3qGm2cAZf2AngtQDq8HvTIR6/szx96s6b8cbhm6sYA2297npZAksTRED6ZpWJjaMOWBX/5jr7IaA8LCqDHkYyjdfpJJQ= 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=v8w2C3WX; arc=fail smtp.client-ip=40.107.20.77 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="v8w2C3WX" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TNmVHjNcPltsKMYvyxeD6STrq7LI0Iqgw49OiLqCSjgq/j2vvygPTcpy64qxehMM6MxLGrtTjbf6a+12Z0X4HC/dSJkDHxrCli2unMx1N5AOJundoy2SlqAdgTNQ57Pefikgdv0zDkQn+YBlBa5EELWG4ShI61QbshC7+QNsQto4Xu3qVuKj8NmiKXV05xbNIIsKRdFAUTpGS2zjRYiE58QNyMaj/57kO3BhSX8V3TkIUu+N6NDxfH/l51hAC0bFMS88jpstTljEphGQnJyHRfNc6EmtaCO6+/C17SmmhPcs0XIRtkawG/qOKxabDlOBJk8QMvhAIpXSGbgLn63a7g== 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=2ZV94HHvgsE9LVMm/kVq9QaGyh+zF78/pIcWhUA4ofo=; b=Z7fi8+yja3/9YMtmJdb00m20KVL514m7cZOLOkgZWeewNyEL885mk0/qRTO4KFDFCQ5qFfjcKwcVioXO+wFhJ7XijXFJLQrf0UCtBdqEocjKAEF8f0yoqsypISlq3GzQtAk/DiH1P4Z07TZucshHJIwbcoIbtVXhLhaR53uQa62CS3mg5QapFI65jLMfVo2CJ4XESuk+0Im5GK/P67XZtah1aIADYOMUioMLlwaYnVNOobxi5lMhDAgYMhMKX4lF2NxpbVJoHgZIjZJ9mbgXL6wMthmvNSIhpDQwDEu4fLyAG6MbY1T8d9//rlxYV7AJLJ2IjspdjlLZr4avUeS3AQ== 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=2ZV94HHvgsE9LVMm/kVq9QaGyh+zF78/pIcWhUA4ofo=; b=v8w2C3WXaBKThYCzVYUGVV9QGzPZpUfhm5U8JKZkDp7/VVBK+cOHrJx0+J3Ws5P8fBrI7LD4SEVi17IjUrUDPauvqAph9gR25U7NP1bDmKgs6Mftpk9TI+QGGo39gyd2ZUvhO2uZ129y2FX/MczENlOOlrUqtN9r8V/SZaqr9Qmv2hEFVLLr8GJ3vFmF4F+Bp/s4eEym78yZSCNc6RBHRGxXfkuDD1TUSesU655aH67cRW/Wf/zO7Xd45Isp4s512IY4YHVshrkFfbEnLeVTb6XIqMjAk+rGRW7B2y7EM2hBUdctYtZNmLw/fxnj10sNiO83nc0E9RWgfrcztXP7VQ== 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 PA1PR04MB10865.eurprd04.prod.outlook.com (2603:10a6:102:48a::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8422.18; Wed, 12 Feb 2025 07:41:43 +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.8445.008; Wed, 12 Feb 2025 07:41:43 +0000 From: "Peng Fan (OSS)" Date: Wed, 12 Feb 2025 15:40:27 +0800 Subject: [PATCH v2 5/7] firmware: imx: Add i.MX95 SCMI LMM driver Message-Id: <20250212-imx-lmm-cpu-v2-5-3aee005968c1@nxp.com> References: <20250212-imx-lmm-cpu-v2-0-3aee005968c1@nxp.com> In-Reply-To: <20250212-imx-lmm-cpu-v2-0-3aee005968c1@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=1739346036; l=5885; i=peng.fan@nxp.com; s=20230812; h=from:subject:message-id; bh=Y5YiY9EjHk3+0onquYZWlfsbcy9uIDhrsDG5HbDra3A=; b=S4yzzrarCecvGolZ0kijrvCM1rNIys93EejRC3DdizpOs7C6osovfxclvs9YinRfqT/39aIQa DoGv/EI5rbwAUHqOq/kRwqqIBm6xNdETHm4jQf1I6wi9W243Ay1XU/D 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) 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_|PA1PR04MB10865:EE_ X-MS-Office365-Filtering-Correlation-Id: 8f5e1181-f702-495a-24cf-08dd4b38b22e 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|7416014|376014|52116014|366016|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?q?0tBCZOvFD0XC33Yy3XR0TuRSprzbwK3?= =?utf-8?q?3ICyrMDR2VJqbHS3ImxdYOPe+tDe5mKvQ56mjZVTQKyzramp7pPBJRxd9X8N0YG83?= =?utf-8?q?CTUW4FDVGLrMX1jFhGD9bFKY1kLJYAkkwQPZz+pD1aMfykR70QtGVDqMsXoozx3sa?= =?utf-8?q?0yPMs6qJowqTQKVHpUkN01XUKC69eYjsklFmCsDXi1mj10n5jI7g+w1h0zdqB5bMD?= =?utf-8?q?rCbGu/J/WZdoPg8C+Fl4g49A879thaMqPoDUW1Ogc7RBmTAwPoMW1sh+qzERU0W+r?= =?utf-8?q?MXzyEfhelYaCiuLFoy5a9WQFRsIg+4hmbJ0m9ZC/hItvPOn7/tdQfohlxL1a/KMsY?= =?utf-8?q?SjtACULqGmtLA9xciKGp2gBN2niU/sP7+50bV7OIz4fckytNuMMxU22VbaUzcp031?= =?utf-8?q?l3B9HGHTBAaovUeXAOezEDuadPYxiSuBosmsT/osWTLhhvuLWDHq1lw9Ufw2YafAA?= =?utf-8?q?Vh26QkPeYXTTTpbcTwRaYGR/jtm8C+UHmVhklFQQvLhwYcY2hKhw1Kmxv6pBukPLY?= =?utf-8?q?B7TJxh8J3GKLd9mKHnveV7g3eek8p4Ib3CGluCI03gdNmiikNA99JwhbUCyl7BeBY?= =?utf-8?q?cTsj/bJqG7MrcLynAhZ56uGLTyMj1MqT8YMFylkwFnUk1cx2LSACxjF6pub2Yj8p+?= =?utf-8?q?EXVC6hT4OdsUw7Qif/zX75h0w5642bXz5H2KIVo9rejaWP6/9sxwA3iCHPZCuDs4y?= =?utf-8?q?gd53wZ6DNsSTYF5NZ4gd2sJPruZgSCqUxWsraXh190dtKRjX2VqtHAj1ALcfYUuKQ?= =?utf-8?q?gf7r49w4hxF986ZwtnBlqEq2FM6EVui1PMw53TBUG5ZYfdBA9n5glXRtqb68xTnMd?= =?utf-8?q?nmNAUiW63kNwFrpstrG0osbrpSJIm73YAsHBJnRe15oI62YNDXs6tkzbPTkcy/g7F?= =?utf-8?q?FBmtmQGGLRBnb2DMJ4+TphJn2XPpYlyX85OcpA6xLSNQu0Y8kNToHQA9cLZwIKVDl?= =?utf-8?q?3fnNqtRWNZysWr+Hl+U2/AY03DPtwVBJ0Ot133acevMD6EXWwR5C+NZlYcSURMnHt?= =?utf-8?q?REpnudrXAFvphGFuGtUo1O5TCbRsg6AZERfZXdStLPJsKPK7hyYtd4j3Y/Tdao0dJ?= =?utf-8?q?jV+FZQU9D0zA3cqckKgXx7ZG1v2rxPWOAxFHztts91ioqyrgmE6WP7ByY9/iV4TmT?= =?utf-8?q?8vKTrtXQI/T+fVqGQA9WvVdKJGYrb0XqxVpAQUxCRCDqlk/oJB9OrE9yIFE1UTG52?= =?utf-8?q?Gts6k/x+uKS9/ZlL1LM8AZSqR+N1w76GYauznKUgjds4nrTSCXegbga2EYlcU8sor?= =?utf-8?q?h+Wx2z4lHHKen1oFsV/8np820i8VJREE6aR2CU+JrEe3bMzkT5dDoZgpQ5SsDSADu?= =?utf-8?q?kbmIeKjbA7gB3rUs9OoDNORjWH4ynhWuhTW/S+FTgO0KKJYO9B10FlrHT0e5iiRv4?= =?utf-8?q?R4klQKcUCu4?= 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)(7416014)(376014)(52116014)(366016)(1800799024)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?tyPbBmtSGbNTWc89C+TvDKLjeH9X?= =?utf-8?q?GoIG4kANX2RZq4NbH8fVRIRfvcvjAT7NyOsvOHJYqPRJERkOSyGrP9/9JP9T0F9Ej?= =?utf-8?q?+eBqjJirfOyXS3T2XOT2lHOAbiOGlq/pzmG22WFgBktwMQ7dd483l81ql9lMJhakh?= =?utf-8?q?77Ua/pPF8TASkNakxz0jTnXl5h7ZqjSBhehXKksQfy1BBqwK53J/15STyfeZjv4Ax?= =?utf-8?q?/a76J1LNkBVakVWlD2SGGR02uSiEHNVETfB8dGN4qDa+294jreFH/g2vB52348Xaa?= =?utf-8?q?vHlbKheDzmWhY78Qai4AWIYo2vwpQZHnThVUACwirCMsPG4lFYGI6ckSPJYtXS/cC?= =?utf-8?q?EANe3BGBBXy4/hUyDPQCbvu4O7xL3kxEj9/8IKl7Yqow1VKfNWTu1AVqDYs32slg7?= =?utf-8?q?57S7TnoAx0DmZmt/284nz32Sg+nDaKI7a7VCumnmKJeo+8BSOH1Xx5ec1VJf41yJr?= =?utf-8?q?axAzJF1vYZ9uLxcYoVSFU7u+iRiieGY29uyaPD+1hjmT8d4qeyS3xP4f1xv/ttQ/w?= =?utf-8?q?QAvCa0guK9CpPlvzECVRLWhjsG0LsnhbwWkxe4oJS0AHdWmC7PsfSFUwnxSolBwtm?= =?utf-8?q?faRkyg1SZQ85jrKSkPDPnS6sp83n15J7TrImcQU4ElQ5xd5M9VAsSJzQNEx4rJFjQ?= =?utf-8?q?SeGuTd1rx/IOSXoDqNkrIgSNR8BjIy3o0HB2dkLsKbJb2meiTOQyjiqSmZph8Gpm8?= =?utf-8?q?38WtWBHNTRUGgkgWuKxzr8LCy+CAo8Y4ReYckkta7CtgVwQTdHzFoCL0v7sidTwxW?= =?utf-8?q?aZeGJng9o2GuFw1ksJqLmByG0caKk029aTRHk5u7iVq3kSE4wfAFskfhzHA2/Kgs7?= =?utf-8?q?I0z5BwCamCIHcSXuD6U9QM36ytmVDTJSMMz3Nrw5A4tMHCjrwV6N6McS/aUZp3+pX?= =?utf-8?q?ztc7MYYkf4MUExeEJMt3zAaLIPS1Alf+p5qysp/4PqhGZ4Mg6oTdqj/kx/I9HpJw+?= =?utf-8?q?2czQgZc2zzF3VIBElVuUrnC4HeWqvBUvHxx78gWkcXUtiEfyUFZPTQYeEoZ1PDBhP?= =?utf-8?q?/6/PCDFFxGAHnDCbI9vL+M9gFlxpQqIzeiayWDYEOLCNkLdRXvA2H13uZ8eNotkru?= =?utf-8?q?CVmIabBxBzBHf5/p+vobdAJbVS+9OFesB4fSz87P2MP1uci8F0XO7ZKuwZ11N1xYd?= =?utf-8?q?znJDwZUAzbRbCD4u1NLG3+xFal0HIYxrhtWAxLrwDYRS1mQtf1FB22Ayc/+piGgb2?= =?utf-8?q?8ct1WMV+ey45aNMw35+9TppHqA9taUndU+KvQ30JJfkm8ge1Kc9h+c6Hlioydemyu?= =?utf-8?q?v/EH5hihxVSexniArOwGsuzyatK5B/7kfpAuOyKb3v/FpZpn9p7VoQNvZF4NvNNWP?= =?utf-8?q?fdU61ADYRTRdWBUEp5T7K/RNPaa5Z4tT5z3wGoJTL0Gu3G25RwQeeZ/hRvyqMKHu+?= =?utf-8?q?XHkEZprJwC99f6dqj7ZRtCNkP+VtTngcnUnP5IFEcteEPSzchL0ynZfDonou/L9M6?= =?utf-8?q?hL4DLJQ+l5WczP94/iV2A+loQMR/6K23b6Jah0G3pd6R1gGsalbqNqXCBV+NMBIXv?= =?utf-8?q?GAQkcH6c36g8?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8f5e1181-f702-495a-24cf-08dd4b38b22e X-MS-Exchange-CrossTenant-AuthSource: PAXPR04MB8459.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2025 07:41:43.7249 (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: 5ocLmyvZDq1Q9YoAhnAfI5lgz5xQcZEO3ei7ZPZFsmbpMuwenUWqtzFAUi8JQd+7uWl1j3rqJz5DiJ+J2QltOQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1PR04MB10865 From: Peng Fan The i.MX95 System manager exports SCMI LMM protocol for linux to manage Logical Machines. The driver is to use the LMM Protocol interface to boot, shutdown a LM. Signed-off-by: Peng Fan --- drivers/firmware/imx/Kconfig | 11 +++++ drivers/firmware/imx/Makefile | 1 + drivers/firmware/imx/sm-lmm.c | 98 +++++++++++++++++++++++++++++++++++++++++ include/linux/firmware/imx/sm.h | 33 ++++++++++++++ 4 files changed, 143 insertions(+) diff --git a/drivers/firmware/imx/Kconfig b/drivers/firmware/imx/Kconfig index 907cd149c40a8b5f1b14c53e1c315ff4a28f32ac..c3e344d6ecc645df1f0e3ee8078934c47f347fd7 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_LMM_DRV + tristate "IMX SCMI LMM Protocol driver" + depends on IMX_SCMI_LMM_EXT || COMPILE_TEST + default y if ARCH_MXC + 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 Logical Machine management features. + + This driver can also be built as a module. + config IMX_SCMI_MISC_DRV tristate "IMX SCMI MISC Protocol driver" default y if ARCH_MXC diff --git a/drivers/firmware/imx/Makefile b/drivers/firmware/imx/Makefile index 8d046c341be878bb6dd1e6277992ff66ae90e292..7762855d2a771169d4f1867d27e0d51be7c9ad03 100644 --- a/drivers/firmware/imx/Makefile +++ b/drivers/firmware/imx/Makefile @@ -2,3 +2,4 @@ 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_MISC_DRV} += sm-misc.o +obj-${CONFIG_IMX_SCMI_LMM_DRV} += sm-lmm.o diff --git a/drivers/firmware/imx/sm-lmm.c b/drivers/firmware/imx/sm-lmm.c new file mode 100644 index 0000000000000000000000000000000000000000..ed9650a8cb7ca878874e8609f0a5c83b5e46204a --- /dev/null +++ b/drivers/firmware/imx/sm-lmm.c @@ -0,0 +1,98 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright 2025 NXP + */ + +#include +#include +#include +#include +#include +#include + +static const struct scmi_imx_lmm_proto_ops *imx_lmm_ops; +static struct scmi_protocol_handle *ph; + +int scmi_imx_lmm_boot(u32 lmid) +{ + if (!ph) + return -EPROBE_DEFER; + + return imx_lmm_ops->lmm_boot(ph, lmid); +}; +EXPORT_SYMBOL(scmi_imx_lmm_boot); + +int scmi_imx_lmm_info(u32 lmid, struct scmi_imx_lmm_info *info) +{ + if (!ph) + return -EPROBE_DEFER; + + if (!info) + return -EINVAL; + + return imx_lmm_ops->lmm_info(ph, lmid, info); +}; +EXPORT_SYMBOL(scmi_imx_lmm_info); + +int scmi_imx_lmm_reset_vector_set(u32 lmid, u32 cpuid, u32 flags, u64 vector) +{ + if (!ph) + return -EPROBE_DEFER; + + return imx_lmm_ops->lmm_reset_vector_set(ph, lmid, cpuid, flags, vector); +} +EXPORT_SYMBOL(scmi_imx_lmm_reset_vector_set); + +int scmi_imx_lmm_power_on(u32 lmid) +{ + if (!ph) + return -EPROBE_DEFER; + + return imx_lmm_ops->lmm_power_on(ph, lmid); +}; +EXPORT_SYMBOL(scmi_imx_lmm_power_on); + +int scmi_imx_lmm_shutdown(u32 lmid, u32 flags) +{ + if (!ph) + return -EPROBE_DEFER; + + return imx_lmm_ops->lmm_shutdown(ph, lmid, flags); +}; +EXPORT_SYMBOL(scmi_imx_lmm_shutdown); + +static int scmi_imx_lmm_probe(struct scmi_device *sdev) +{ + const struct scmi_handle *handle = sdev->handle; + + if (!handle) + return -ENODEV; + + if (imx_lmm_ops) { + dev_err(&sdev->dev, "lmm already initialized\n"); + return -EEXIST; + } + + imx_lmm_ops = handle->devm_protocol_get(sdev, SCMI_PROTOCOL_IMX_LMM, &ph); + if (IS_ERR(imx_lmm_ops)) + return PTR_ERR(imx_lmm_ops); + + return 0; +} + +static const struct scmi_device_id scmi_id_table[] = { + { SCMI_PROTOCOL_IMX_LMM, "imx-lmm" }, + { }, +}; +MODULE_DEVICE_TABLE(scmi, scmi_id_table); + +static struct scmi_driver scmi_imx_lmm_driver = { + .name = "scmi-imx-lmm", + .probe = scmi_imx_lmm_probe, + .id_table = scmi_id_table, +}; +module_scmi_driver(scmi_imx_lmm_driver); + +MODULE_AUTHOR("Peng Fan "); +MODULE_DESCRIPTION("IMX SM LMM driver"); +MODULE_LICENSE("GPL"); diff --git a/include/linux/firmware/imx/sm.h b/include/linux/firmware/imx/sm.h index 9b85a3f028d1b0a5287b453eb3ad8412a363fe6c..e02b7b558afb6f430f6fbeeaf3ee1f59feea3c1b 100644 --- a/include/linux/firmware/imx/sm.h +++ b/include/linux/firmware/imx/sm.h @@ -8,6 +8,7 @@ #include #include +#include #include #define SCMI_IMX_CTRL_PDM_CLK_SEL 0 /* AON PDM clock sel */ @@ -20,4 +21,36 @@ int scmi_imx_misc_ctrl_get(u32 id, u32 *num, u32 *val); int scmi_imx_misc_ctrl_set(u32 id, u32 val); +#if IS_ENABLED(CONFIG_IMX_SCMI_LMM_DRV) || IS_ENABLED(CONFIG_COMPILE_TEST) +int scmi_imx_lmm_boot(u32 lmid); +int scmi_imx_lmm_info(u32 lmid, struct scmi_imx_lmm_info *info); +int scmi_imx_lmm_reset_vector_set(u32 lmid, u32 cpuid, u32 flags, u64 vector); +int scmi_imx_lmm_power_on(u32 lmid); +int scmi_imx_lmm_shutdown(u32 lmid, u32 flags); +#else +static inline int scmi_imx_lmm_boot(u32 lmid) +{ + return -EOPNOTSUPP; +} + +static inline int scmi_imx_lmm_info(u32 lmid, struct scmi_imx_lmm_info *info) +{ + return -EOPNOTSUPP; +} + +static inline int scmi_imx_lmm_reset_vector_set(u32 lmid, u32 cpuid, u32 flags, u64 vector) +{ + return -EOPNOTSUPP; +} + +static inline int scmi_imx_lmm_power_on(u32 lmid) +{ + return -EOPNOTSUPP; +} + +static inline int scmi_imx_lmm_shutdown(u32 lmid, u32 flags) +{ + return -EOPNOTSUPP; +} +#endif #endif