From patchwork Fri Mar 1 16:42:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Abdellatif El Khlifi X-Patchwork-Id: 13578719 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 4DC42C5478C for ; Fri, 1 Mar 2024 16:43:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=vJdZMWWpyPHf81M+C1pRMgi0syh5qrF1Uvw7uIWMzlI=; b=K9mN75MbaizUDX I4p7Ej3lW9Nb8FUwpeJ2+UzL3QHGBVFrZUopE0Nlg/6PFlFWvZB0HkmSWAaCDGHPradVq1LAHj9eA wCHZMHIvVE+lwSAjVU4qthFN1g6FNQ9KWTxuZAIhBtE2TOG/No0RAsQ+sLYoakPu6WFLae7mceXhq +czPbG2tsGZOa8lVzFdL9rxaraooEI1B22/kjLzCUV21JB/si6Hrw1u+h19Uwr22KQZ4/uLhiVnbo Sr0cjsgd/s8eVgeby2WhCQHXtbji8rDqSjUyu/GTbbUU/f6X+hbmeunkOi1GnmTycI9J1H6zPeL6f 6X/M4q9437By7zF4LACw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rg5yV-000000019ad-2kEP; Fri, 01 Mar 2024 16:43:07 +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 1rg5yT-000000019YZ-1OXm for linux-arm-kernel@lists.infradead.org; Fri, 01 Mar 2024 16:43:06 +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 D7D5A11FB; Fri, 1 Mar 2024 08:43:40 -0800 (PST) Received: from e130802.arm.com (unknown [10.57.69.63]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 33FCE3F73F; Fri, 1 Mar 2024 08:42:59 -0800 (PST) From: abdellatif.elkhlifi@arm.com To: Bjorn Andersson , Mathieu Poirier , Rob Herring Cc: Liviu Dudau , Sudeep Holla , Lorenzo Pieralisi , Krzysztof Kozlowski , Conor Dooley , Drew.Reed@arm.com, Adam.Johnston@arm.com, Abdellatif El Khlifi , linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-remoteproc@vger.kernel.org Subject: [PATCH 1/3] remoteproc: Add Arm remoteproc driver Date: Fri, 1 Mar 2024 16:42:25 +0000 Message-Id: <20240301164227.339208-2-abdellatif.elkhlifi@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240301164227.339208-1-abdellatif.elkhlifi@arm.com> References: <20240301164227.339208-1-abdellatif.elkhlifi@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240301_084305_522627_B67F9D54 X-CRM114-Status: GOOD ( 31.10 ) 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: Abdellatif El Khlifi introduce remoteproc support for Arm remote processors The supported remote processors are those that come with a reset control register and a reset status register. The driver allows to switch on or off the remote processor. The current use case is Corstone-1000 External System (Cortex-M3). The driver can be extended to support other remote processors controlled with a reset control and a reset status registers. The driver also supports control of multiple remote processors at the same time. Signed-off-by: Abdellatif El Khlifi --- MAINTAINERS | 6 + drivers/remoteproc/Kconfig | 18 ++ drivers/remoteproc/Makefile | 1 + drivers/remoteproc/arm_rproc.c | 395 +++++++++++++++++++++++++++++++++ 4 files changed, 420 insertions(+) create mode 100644 drivers/remoteproc/arm_rproc.c diff --git a/MAINTAINERS b/MAINTAINERS index 8d1052fa6a69..54d6a40feea5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1764,6 +1764,12 @@ S: Maintained F: Documentation/devicetree/bindings/interrupt-controller/arm,vic.yaml F: drivers/irqchip/irq-vic.c +ARM REMOTEPROC DRIVER +M: Abdellatif El Khlifi +L: linux-remoteproc@vger.kernel.org +S: Maintained +F: drivers/remoteproc/arm_rproc.c + ARM SMC WATCHDOG DRIVER M: Julius Werner R: Evan Benn diff --git a/drivers/remoteproc/Kconfig b/drivers/remoteproc/Kconfig index 48845dc8fa85..57fbac454a5d 100644 --- a/drivers/remoteproc/Kconfig +++ b/drivers/remoteproc/Kconfig @@ -365,6 +365,24 @@ config XLNX_R5_REMOTEPROC It's safe to say N if not interested in using RPU r5f cores. +config ARM_REMOTEPROC + tristate "Arm remoteproc support" + depends on HAS_IOMEM && ARM64 + default n + help + Say y here to support Arm remote processors via the remote + processor framework. + + The supported processors are those that come with a reset control register + and a reset status register. The design can be extended to support different + processors meeting these requirements. + The driver also supports control of multiple remote cores at the same time. + + Supported remote cores: + Corstone-1000 External System (Cortex-M3) + + It's safe to say N here. + endif # REMOTEPROC endmenu diff --git a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile index 91314a9b43ce..73126310835b 100644 --- a/drivers/remoteproc/Makefile +++ b/drivers/remoteproc/Makefile @@ -39,3 +39,4 @@ obj-$(CONFIG_STM32_RPROC) += stm32_rproc.o obj-$(CONFIG_TI_K3_DSP_REMOTEPROC) += ti_k3_dsp_remoteproc.o obj-$(CONFIG_TI_K3_R5_REMOTEPROC) += ti_k3_r5_remoteproc.o obj-$(CONFIG_XLNX_R5_REMOTEPROC) += xlnx_r5_remoteproc.o +obj-$(CONFIG_ARM_REMOTEPROC) += arm_rproc.o diff --git a/drivers/remoteproc/arm_rproc.c b/drivers/remoteproc/arm_rproc.c new file mode 100644 index 000000000000..6afa78ae7ad3 --- /dev/null +++ b/drivers/remoteproc/arm_rproc.c @@ -0,0 +1,395 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright 2024 Arm Limited and/or its affiliates + * + * Authors: + * Abdellatif El Khlifi + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "remoteproc_internal.h" + +/** + * struct arm_rproc_reset_cfg - remote processor reset configuration + * @ctrl_reg: address of the control register + * @state_reg: address of the reset status register + */ +struct arm_rproc_reset_cfg { + void __iomem *ctrl_reg; + void __iomem *state_reg; +}; + +struct arm_rproc; + +/** + * struct arm_rproc_dcfg - Arm remote processor configuration + * @stop: stop callback function + * @start: start callback function + */ +struct arm_rproc_dcfg { + int (*stop)(struct rproc *rproc); + int (*start)(struct rproc *rproc); +}; + +/** + * struct arm_rproc - Arm remote processor instance + * @rproc: rproc handler + * @core_dcfg: device configuration pointer + * @reset_cfg: reset configuration registers + */ +struct arm_rproc { + struct rproc *rproc; + const struct arm_rproc_dcfg *core_dcfg; + struct arm_rproc_reset_cfg reset_cfg; +}; + +/* Definitions for Arm Corstone-1000 External System */ + +#define EXTSYS_RST_CTRL_CPUWAIT BIT(0) +#define EXTSYS_RST_CTRL_RST_REQ BIT(1) + +#define EXTSYS_RST_ACK_MASK GENMASK(2, 1) +#define EXTSYS_RST_ST_RST_ACK(x) \ + ((u8)(FIELD_GET(EXTSYS_RST_ACK_MASK, (x)))) + +#define EXTSYS_RST_ACK_NO_RESET_REQ (0x0) +#define EXTSYS_RST_ACK_NOT_COMPLETE (0x1) +#define EXTSYS_RST_ACK_COMPLETE (0x2) +#define EXTSYS_RST_ACK_RESERVED (0x3) + +#define EXTSYS_RST_ACK_POLL_TRIES (3) +#define EXTSYS_RST_ACK_POLL_TIMEOUT (1000) + +/** + * arm_rproc_start_cs1000_extsys() - custom start function + * @rproc: pointer to the remote processor object + * + * Start function for Corstone-1000 External System. + * Allow the External System core start execute instructions. + * + * Return: + * + * 0 on success. Otherwise, failure + */ +static int arm_rproc_start_cs1000_extsys(struct rproc *rproc) +{ + struct arm_rproc *priv = rproc->priv; + u32 ctrl_reg; + + /* CPUWAIT signal of the External System is de-asserted */ + ctrl_reg = readl(priv->reset_cfg.ctrl_reg); + ctrl_reg &= ~EXTSYS_RST_CTRL_CPUWAIT; + writel(ctrl_reg, priv->reset_cfg.ctrl_reg); + + return 0; +} + +/** + * arm_rproc_cs1000_extsys_poll_rst_ack() - poll RST_ACK bits + * @rproc: pointer to the remote processor object + * @exp_ack: expected bits value + * @rst_ack: bits value read + * + * Tries to read RST_ACK bits until the timeout expires. + * EXTSYS_RST_ACK_POLL_TRIES tries are made, + * every EXTSYS_RST_ACK_POLL_TIMEOUT milliseconds. + * + * Return: + * + * 0 on success. Otherwise, failure + */ +static int arm_rproc_cs1000_extsys_poll_rst_ack(struct rproc *rproc, + u8 exp_ack, u8 *rst_ack) +{ + struct arm_rproc *priv = rproc->priv; + struct device *dev = rproc->dev.parent; + u32 state_reg; + int tries = EXTSYS_RST_ACK_POLL_TRIES; + unsigned long timeout; + + do { + state_reg = readl(priv->reset_cfg.state_reg); + *rst_ack = EXTSYS_RST_ST_RST_ACK(state_reg); + + if (*rst_ack == EXTSYS_RST_ACK_RESERVED) { + dev_err(dev, "unexpected RST_ACK value: 0x%x\n", + *rst_ack); + return -EINVAL; + } + + /* expected ACK value read */ + if ((*rst_ack & exp_ack) || (*rst_ack == exp_ack)) + return 0; + + timeout = msleep_interruptible(EXTSYS_RST_ACK_POLL_TIMEOUT); + + if (timeout) { + dev_err(dev, "polling RST_ACK aborted\n"); + return -ECONNABORTED; + } + } while (--tries); + + dev_err(dev, "polling RST_ACK timed out\n"); + + return -ETIMEDOUT; +} + +/** + * arm_rproc_stop_cs1000_extsys() - custom stop function + * @rproc: pointer to the remote processor object + * + * Reset all logic within the External System, the core will be in a halt state. + * + * Return: + * + * 0 on success. Otherwise, failure + */ +static int arm_rproc_stop_cs1000_extsys(struct rproc *rproc) +{ + struct arm_rproc *priv = rproc->priv; + struct device *dev = rproc->dev.parent; + u32 ctrl_reg; + u8 rst_ack, req_status; + int ret; + + ctrl_reg = readl(priv->reset_cfg.ctrl_reg); + ctrl_reg |= EXTSYS_RST_CTRL_RST_REQ; + writel(ctrl_reg, priv->reset_cfg.ctrl_reg); + + ret = arm_rproc_cs1000_extsys_poll_rst_ack(rproc, + EXTSYS_RST_ACK_COMPLETE | + EXTSYS_RST_ACK_NOT_COMPLETE, + &rst_ack); + if (ret) + return ret; + + req_status = rst_ack; + + ctrl_reg = readl(priv->reset_cfg.ctrl_reg); + ctrl_reg &= ~EXTSYS_RST_CTRL_RST_REQ; + writel(ctrl_reg, priv->reset_cfg.ctrl_reg); + + ret = arm_rproc_cs1000_extsys_poll_rst_ack(rproc, 0, &rst_ack); + if (ret) + return ret; + + if (req_status == EXTSYS_RST_ACK_COMPLETE) { + dev_dbg(dev, "the requested reset has been accepted\n"); + return 0; + } + + dev_err(dev, "the requested reset has been denied\n"); + return -EACCES; +} + +static const struct arm_rproc_dcfg arm_rproc_cfg_corstone1000_extsys = { + .stop = arm_rproc_stop_cs1000_extsys, + .start = arm_rproc_start_cs1000_extsys, +}; + +/** + * arm_rproc_stop() - Stop function for rproc_ops + * @rproc: pointer to the remote processor object + * + * Calls the stop() callback of the remote core + * + * Return: + * + * 0 on success. Otherwise, failure + */ +static int arm_rproc_stop(struct rproc *rproc) +{ + struct arm_rproc *priv = rproc->priv; + + return priv->core_dcfg->stop(rproc); +} + +/** + * arm_rproc_start() - Start function for rproc_ops + * @rproc: pointer to the remote processor object + * + * Calls the start() callback of the remote core + * + * Return: + * + * 0 on success. Otherwise, failure + */ +static int arm_rproc_start(struct rproc *rproc) +{ + struct arm_rproc *priv = rproc->priv; + + return priv->core_dcfg->start(rproc); +} + +/** + * arm_rproc_parse_fw() - Parse firmware function for rproc_ops + * @rproc: pointer to the remote processor object + * @fw: pointer to the firmware + * + * Does nothing currently. + * + * Return: + * + * 0 for success. + */ +static int arm_rproc_parse_fw(struct rproc *rproc, const struct firmware *fw) +{ + return 0; +} + +/** + * arm_rproc_load() - Load firmware to memory function for rproc_ops + * @rproc: pointer to the remote processor object + * @fw: pointer to the firmware + * + * Does nothing currently. + * + * Return: + * + * 0 for success. + */ +static int arm_rproc_load(struct rproc *rproc, const struct firmware *fw) +{ + return 0; +} + +static const struct rproc_ops arm_rproc_ops = { + .start = arm_rproc_start, + .stop = arm_rproc_stop, + .load = arm_rproc_load, + .parse_fw = arm_rproc_parse_fw, +}; + +/** + * arm_rproc_probe() - the platform device probe + * @pdev: the platform device + * + * Read from the device tree the properties needed to setup + * the reset and comms for the remote processor. + * Also, allocate a rproc device and register it with the remoteproc subsystem. + * + * Return: + * + * 0 on success. Otherwise, failure + */ +static int arm_rproc_probe(struct platform_device *pdev) +{ + const struct arm_rproc_dcfg *core_dcfg; + struct device *dev = &pdev->dev; + struct device_node *np = dev->of_node; + struct arm_rproc *priv; + struct rproc *rproc; + const char *fw_name; + int ret; + struct resource *res; + + core_dcfg = of_device_get_match_data(dev); + if (!core_dcfg) + return -ENODEV; + + ret = rproc_of_parse_firmware(dev, 0, &fw_name); + if (ret) { + dev_err(dev, + "can't parse firmware-name from device tree (%pe)\n", + ERR_PTR(ret)); + return ret; + } + + dev_dbg(dev, "firmware-name: %s\n", fw_name); + + rproc = rproc_alloc(dev, np->name, &arm_rproc_ops, fw_name, + sizeof(*priv)); + if (!rproc) + return -ENOMEM; + + priv = rproc->priv; + priv->rproc = rproc; + priv->core_dcfg = core_dcfg; + + res = platform_get_resource_byname(pdev, + IORESOURCE_MEM, "reset-control"); + priv->reset_cfg.ctrl_reg = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(priv->reset_cfg.ctrl_reg)) { + ret = PTR_ERR(priv->reset_cfg.ctrl_reg); + dev_err(dev, + "can't map the reset-control register (%pe)\n", + ERR_PTR((unsigned long)priv->reset_cfg.ctrl_reg)); + goto err_free_rproc; + } else { + dev_dbg(dev, "reset-control: %p\n", priv->reset_cfg.ctrl_reg); + } + + res = platform_get_resource_byname(pdev, + IORESOURCE_MEM, "reset-status"); + priv->reset_cfg.state_reg = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(priv->reset_cfg.state_reg)) { + ret = PTR_ERR(priv->reset_cfg.state_reg); + dev_err(dev, + "can't map the reset-status register (%pe)\n", + ERR_PTR((unsigned long)priv->reset_cfg.state_reg)); + goto err_free_rproc; + } else { + dev_dbg(dev, "reset-status: %p\n", + priv->reset_cfg.state_reg); + } + + platform_set_drvdata(pdev, rproc); + + ret = rproc_add(rproc); + if (ret) { + dev_err(dev, "can't add remote processor (%pe)\n", + ERR_PTR(ret)); + goto err_free_rproc; + } else { + dev_dbg(dev, "remote processor added\n"); + } + + return 0; + +err_free_rproc: + rproc_free(rproc); + + return ret; +} + +/** + * arm_rproc_remove() - the platform device remove + * @pdev: the platform device + * + * Delete and free the resources used. + */ +static void arm_rproc_remove(struct platform_device *pdev) +{ + struct rproc *rproc = platform_get_drvdata(pdev); + + rproc_del(rproc); + rproc_free(rproc); +} + +static const struct of_device_id arm_rproc_of_match[] = { + { .compatible = "arm,corstone1000-extsys", .data = &arm_rproc_cfg_corstone1000_extsys }, + {}, +}; +MODULE_DEVICE_TABLE(of, arm_rproc_of_match); + +static struct platform_driver arm_rproc_driver = { + .probe = arm_rproc_probe, + .remove_new = arm_rproc_remove, + .driver = { + .name = "arm-rproc", + .of_match_table = arm_rproc_of_match, + }, +}; +module_platform_driver(arm_rproc_driver); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("Arm Remote Processor Control Driver"); +MODULE_AUTHOR("Abdellatif El Khlifi "); From patchwork Fri Mar 1 16:42:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Abdellatif El Khlifi X-Patchwork-Id: 13578717 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 00839C5478C for ; Fri, 1 Mar 2024 16:43:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Lr4t/nTMRtYcLHSiC1aRYdIclU0fzIBDxUXmOp8W5GM=; b=H+M2NCfn14UfII 8JrESgzM1gm+f4WHaalI16zLoSxn/my8lSUO/qSY8dsIZMCCApGd/u3R/FjmJp5UDYSdbWItrc2vj XxA/h8ICybVZKMBFgO1Z5ntYVb3q7LezCgRhQyzjhOj59hpsmcVljVMmcUfs/leAPAunCqdBAVlXr njTDNc2Kly9GiRX2XtCS+gXQtjHNWwHoctpyJAW18I8fV9YXQs9MWjNp86qhu1wsJRjvQ3+u6ZvF7 v1ObDuxsXn7lwxOU2ss0+YhVamBeDI/GwiWXIlVQWSIpDpQtzVS0j0XvIWbVSMi6EO2kEuTuqyi/e IhoattdSTsiiVtrkZJwQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rg5yY-000000019cA-22M7; Fri, 01 Mar 2024 16:43:10 +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 1rg5yV-000000019aN-1gml for linux-arm-kernel@lists.infradead.org; Fri, 01 Mar 2024 16:43:08 +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 A252D1FB; Fri, 1 Mar 2024 08:43:44 -0800 (PST) Received: from e130802.arm.com (unknown [10.57.69.63]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1AB833F73F; Fri, 1 Mar 2024 08:43:02 -0800 (PST) From: abdellatif.elkhlifi@arm.com To: Bjorn Andersson , Mathieu Poirier , Rob Herring Cc: Liviu Dudau , Sudeep Holla , Lorenzo Pieralisi , Krzysztof Kozlowski , Conor Dooley , Drew.Reed@arm.com, Adam.Johnston@arm.com, Abdellatif El Khlifi , linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-remoteproc@vger.kernel.org Subject: [PATCH 2/3] arm64: dts: Add corstone1000 external system device node Date: Fri, 1 Mar 2024 16:42:26 +0000 Message-Id: <20240301164227.339208-3-abdellatif.elkhlifi@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240301164227.339208-1-abdellatif.elkhlifi@arm.com> References: <20240301164227.339208-1-abdellatif.elkhlifi@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240301_084307_523598_229965FF X-CRM114-Status: GOOD ( 10.90 ) 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: Abdellatif El Khlifi add device tree node for the external system core in Corstone-1000 Signed-off-by: Abdellatif El Khlifi --- arch/arm64/boot/dts/arm/corstone1000.dtsi | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/arm/corstone1000.dtsi b/arch/arm64/boot/dts/arm/corstone1000.dtsi index 6ad7829f9e28..67df642363e9 100644 --- a/arch/arm64/boot/dts/arm/corstone1000.dtsi +++ b/arch/arm64/boot/dts/arm/corstone1000.dtsi @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 OR MIT /* - * Copyright (c) 2022, Arm Limited. All rights reserved. + * Copyright 2022, 2024, Arm Limited and/or its affiliates * Copyright (c) 2022, Linaro Limited. All rights reserved. * */ @@ -157,5 +157,13 @@ mhu_seh1: mailbox@1b830000 { secure-status = "okay"; /* secure-world-only */ status = "disabled"; }; + + extsys0: remoteproc@1a010310 { + compatible = "arm,corstone1000-extsys"; + reg = <0x1a010310 0x4>, + <0x1a010314 0X4>; + reg-names = "reset-control", "reset-status"; + firmware-name = "es_flashfw.elf"; + }; }; }; From patchwork Fri Mar 1 16:42:27 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Abdellatif El Khlifi X-Patchwork-Id: 13578718 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 445DFC5478C for ; Fri, 1 Mar 2024 16:43:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=8QawlfMa2FCBauq5aNb2eiZ2sTkCHoaH/LnaWayQFRA=; b=fIspRSbZtIborm /HVrAbFmG4vi5wr74+3mJSEQrU306QKotc4LRyBClLYBqzylNebusyGpNgbCuDX6hcx25mwfjs/tN nbVFP/PQLzdKcFnwjRyDrLpxEXh7nz8wp+9OOpRB+bHCAQP7744V4lEUvpUFZDA5aUPN1JOMT85Ky xGWGeZ9T7zibdQubvTmdyeAUlD39l3rMu9+hy8DQ4g3XhHc6j9VelMoC4h83c+y4c1fEb0i3jtJNU ih30o9J8poT51c1rrgcDE9FM8VwVYxEp/N9JxJV1D/MWGAgxjQ5hl8eJLBmNCHor8+H66qZoEe9Uq zfWdhb3C0kLnK4d9Tuxg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rg5yd-000000019eW-1Uja; Fri, 01 Mar 2024 16:43:15 +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 1rg5ya-000000019dS-2A0O for linux-arm-kernel@lists.infradead.org; Fri, 01 Mar 2024 16:43:13 +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 17A961FB; Fri, 1 Mar 2024 08:43:48 -0800 (PST) Received: from e130802.arm.com (unknown [10.57.69.63]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id F2D5A3F73F; Fri, 1 Mar 2024 08:43:06 -0800 (PST) From: abdellatif.elkhlifi@arm.com To: Bjorn Andersson , Mathieu Poirier , Rob Herring Cc: Liviu Dudau , Sudeep Holla , Lorenzo Pieralisi , Krzysztof Kozlowski , Conor Dooley , Drew.Reed@arm.com, Adam.Johnston@arm.com, Abdellatif El Khlifi , linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-remoteproc@vger.kernel.org Subject: [PATCH 3/3] dt-bindings: remoteproc: Add Arm remoteproc Date: Fri, 1 Mar 2024 16:42:27 +0000 Message-Id: <20240301164227.339208-4-abdellatif.elkhlifi@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240301164227.339208-1-abdellatif.elkhlifi@arm.com> References: <20240301164227.339208-1-abdellatif.elkhlifi@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240301_084312_680950_BA4C10B4 X-CRM114-Status: GOOD ( 17.32 ) 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: Abdellatif El Khlifi introduce the bindings for Arm remoteproc support. Signed-off-by: Abdellatif El Khlifi --- .../bindings/remoteproc/arm,rproc.yaml | 69 +++++++++++++++++++ MAINTAINERS | 1 + 2 files changed, 70 insertions(+) create mode 100644 Documentation/devicetree/bindings/remoteproc/arm,rproc.yaml diff --git a/Documentation/devicetree/bindings/remoteproc/arm,rproc.yaml b/Documentation/devicetree/bindings/remoteproc/arm,rproc.yaml new file mode 100644 index 000000000000..322197158059 --- /dev/null +++ b/Documentation/devicetree/bindings/remoteproc/arm,rproc.yaml @@ -0,0 +1,69 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/remoteproc/arm,rproc.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Arm Remoteproc Devices + +maintainers: + - Abdellatif El Khlifi + +description: | + Some Arm heterogeneous System-On-Chips feature remote processors that can + be controlled with a reset control register and a reset status register to + start or stop the processor. + + This document defines the bindings for these remote processors. + +properties: + compatible: + enum: + - arm,corstone1000-extsys + + reg: + minItems: 2 + maxItems: 2 + description: | + Address and size in bytes of the reset control register + and the reset status register. + Expects the registers to be in the order as above. + Should contain an entry for each value in 'reg-names'. + + reg-names: + description: | + Required names for each of the reset registers defined in + the 'reg' property. Expects the names from the following + list, in the specified order, each representing the corresponding + reset register. + items: + - const: reset-control + - const: reset-status + + firmware-name: + description: | + Default name of the firmware to load to the remote processor. + +required: + - compatible + - reg + - reg-names + - firmware-name + +additionalProperties: false + +examples: + - | + extsys0: remoteproc@1a010310 { + compatible = "arm,corstone1000-extsys"; + reg = <0x1a010310 0x4>, <0x1a010314 0x4>; + reg-names = "reset-control", "reset-status"; + firmware-name = "es0_flashfw.elf"; + }; + + extsys1: remoteproc@1a010318 { + compatible = "arm,corstone1000-extsys"; + reg = <0x1a010318 0x4>, <0x1a01031c 0x4>; + reg-names = "reset-control", "reset-status"; + firmware-name = "es1_flashfw.elf"; + }; diff --git a/MAINTAINERS b/MAINTAINERS index 54d6a40feea5..eddaa3841a65 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1768,6 +1768,7 @@ ARM REMOTEPROC DRIVER M: Abdellatif El Khlifi L: linux-remoteproc@vger.kernel.org S: Maintained +F: Documentation/devicetree/bindings/remoteproc/arm,rproc.yaml F: drivers/remoteproc/arm_rproc.c ARM SMC WATCHDOG DRIVER