From mboxrd@z Thu Jan 1 00:00:00 1970 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 34B97C3DA45 for ; Thu, 11 Jul 2024 13:34:36 +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:In-Reply-To:Content-Type: MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=6uh7aEQxCzUguxRuuLrPkJw6AcQGr0Bhw5j/mjO0fGw=; b=q4oi4zlO4UjHXjBHITcGPrTiYn yWlRrvn/BoOzXleN0T82f6uWj4KrOT3khuQaMoNX7RxYq+tlPBjWCNKPWkaTcYmnKHNlqJbbiBt45 if6HAByiXvAy4H7NMq4TIHsI3peyWxb/TTIfh8llQnesU8RWyYrw67CpBtGivB21nfX+Wis3IrCyd pEBySEiLlRLcLMAc+C3ltxWd4VQE1vLKGLpsu4wnq0epN0jhAjsBw5nhd91FcoTVt+AUbkj0RUwm4 9A+LGXPGXHFcnPftKrfiTCy4iuLilhOE1oV8Ezn0BfkTP6lUKEubKCurhiiGB5dqFunI+jVrNWfFn J4XAl+SQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sRtwG-0000000EB5w-1e8E; Thu, 11 Jul 2024 13:34:24 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sRtvn-0000000EAtd-18P6 for linux-arm-kernel@lists.infradead.org; Thu, 11 Jul 2024 13:33:56 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 508CAFEC; Thu, 11 Jul 2024 06:34:19 -0700 (PDT) Received: from pluto (usa-sjc-mx-foss1.foss.arm.com [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 0F8523F766; Thu, 11 Jul 2024 06:33:49 -0700 (PDT) Date: Thu, 11 Jul 2024 14:33:39 +0100 From: Cristian Marussi To: "Peng Fan (OSS)" Cc: Jonathan Corbet , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Sudeep Holla , Cristian Marussi , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Peng Fan , Alexandre Belloni , Dmitry Torokhov , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, arm-scmi@vger.kernel.org, linux-rtc@vger.kernel.org, linux-input@vger.kernel.org Subject: Re: [PATCH v5 5/7] firmware: imx: add i.MX95 MISC driver Message-ID: References: <20240621-imx95-bbm-misc-v2-v5-0-b85a6bf778cb@nxp.com> <20240621-imx95-bbm-misc-v2-v5-5-b85a6bf778cb@nxp.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240621-imx95-bbm-misc-v2-v5-5-b85a6bf778cb@nxp.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240711_063355_435535_91F9FBE8 X-CRM114-Status: GOOD ( 29.87 ) 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 On Fri, Jun 21, 2024 at 03:04:40PM +0800, Peng Fan (OSS) wrote: > From: Peng Fan > > The i.MX95 System manager exports SCMI MISC protocol for linux to do > various settings, such as set board gpio expander as wakeup source. > > The driver is to add the support. > Hi, a small style nitpick down below. Other than that, LGTM. Reviewed-by: Cristian Marussi > Signed-off-by: Peng Fan > --- > drivers/firmware/imx/Kconfig | 11 ++++ > drivers/firmware/imx/Makefile | 1 + > drivers/firmware/imx/sm-misc.c | 119 ++++++++++++++++++++++++++++++++++++++++ > include/linux/firmware/imx/sm.h | 33 +++++++++++ > 4 files changed, 164 insertions(+) > > diff --git a/drivers/firmware/imx/Kconfig b/drivers/firmware/imx/Kconfig > index 183613f82a11..477d3f32d99a 100644 > --- a/drivers/firmware/imx/Kconfig > +++ b/drivers/firmware/imx/Kconfig > @@ -22,3 +22,14 @@ config IMX_SCU > > This driver manages the IPC interface between host CPU and the > SCU firmware running on M4. > + > +config IMX_SCMI_MISC_DRV > + tristate "IMX SCMI MISC Protocol driver" > + depends on IMX_SCMI_MISC_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 misc functions such as board control. > + > + This driver can also be built as a module. > diff --git a/drivers/firmware/imx/Makefile b/drivers/firmware/imx/Makefile > index 8f9f04a513a8..8d046c341be8 100644 > --- a/drivers/firmware/imx/Makefile > +++ b/drivers/firmware/imx/Makefile > @@ -1,3 +1,4 @@ > # 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_MISC_DRV} += sm-misc.o > diff --git a/drivers/firmware/imx/sm-misc.c b/drivers/firmware/imx/sm-misc.c > new file mode 100644 > index 000000000000..342e1254a356 > --- /dev/null > +++ b/drivers/firmware/imx/sm-misc.c > @@ -0,0 +1,119 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * Copyright 2024 NXP > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > + > +static const struct scmi_imx_misc_proto_ops *imx_misc_ctrl_ops; > +static struct scmi_protocol_handle *ph; > +struct notifier_block scmi_imx_misc_ctrl_nb; > + > +int scmi_imx_misc_ctrl_set(u32 id, u32 val) > +{ > + if (!ph) > + return -EPROBE_DEFER; > + > + return imx_misc_ctrl_ops->misc_ctrl_set(ph, id, 1, &val); > +}; > +EXPORT_SYMBOL(scmi_imx_misc_ctrl_set); > + > +int scmi_imx_misc_ctrl_get(u32 id, u32 *num, u32 *val) > +{ > + if (!ph) > + return -EPROBE_DEFER; > + > + return imx_misc_ctrl_ops->misc_ctrl_get(ph, id, num, val); > +} > +EXPORT_SYMBOL(scmi_imx_misc_ctrl_get); > + > +static int scmi_imx_misc_ctrl_notifier(struct notifier_block *nb, > + unsigned long event, void *data) > +{ > + /* > + * notifier_chain_register requires a valid notifier_block and > + * valid notifier_call. SCMI_EVENT_IMX_MISC_CONTROL is needed > + * to let SCMI firmware enable control events, but the hook here > + * is just a dummy function to avoid kernel panic as of now. > + */ > + return 0; > +} > + > +static int scmi_imx_misc_ctrl_probe(struct scmi_device *sdev) > +{ > + const struct scmi_handle *handle = sdev->handle; > + struct device_node *np = sdev->dev.of_node; > + u32 src_id, flags; > + int ret, i, num; > + > + if (!handle) > + return -ENODEV; > + > + if (imx_misc_ctrl_ops) { > + dev_err(&sdev->dev, "misc ctrl already initialized\n"); > + return -EEXIST; > + } > + > + imx_misc_ctrl_ops = handle->devm_protocol_get(sdev, SCMI_PROTOCOL_IMX_MISC, &ph); > + if (IS_ERR(imx_misc_ctrl_ops)) > + return PTR_ERR(imx_misc_ctrl_ops); > + > + num = of_property_count_u32_elems(np, "nxp,ctrl-ids"); > + if (num % 2) { > + dev_err(&sdev->dev, "Invalid wakeup-sources\n"); > + return -EINVAL; > + } > + > + scmi_imx_misc_ctrl_nb.notifier_call = &scmi_imx_misc_ctrl_notifier; > + for (i = 0; i < num; i += 2) { > + ret = of_property_read_u32_index(np, "nxp,ctrl-ids", i, &src_id); > + if (ret) { > + dev_err(&sdev->dev, "Failed to read ctrl-id: %i\n", i); > + continue; > + } > + > + ret = of_property_read_u32_index(np, "nxp,ctrl-ids", i + 1, &flags); > + if (ret) { > + dev_err(&sdev->dev, "Failed to read ctrl-id value: %d\n", i + 1); > + continue; > + } > + > + ret = handle->notify_ops->devm_event_notifier_register(sdev, SCMI_PROTOCOL_IMX_MISC, > + SCMI_EVENT_IMX_MISC_CONTROL, > + &src_id, > + &scmi_imx_misc_ctrl_nb); > + if (ret) missing { dev_err(&sdev->dev, "Failed to register scmi misc event: %d\n", src_id); } Thanks, Cristian