Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp198781pxf; Wed, 31 Mar 2021 00:39:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyUXAOsc6AMmgMn0gmkR9Z8knJfARJ869PCreGaZ10lY26+6ocGRk/hlfbzNAbiFHzqcAEW X-Received: by 2002:a05:6402:8d7:: with SMTP id d23mr2095840edz.256.1617176366007; Wed, 31 Mar 2021 00:39:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617176366; cv=none; d=google.com; s=arc-20160816; b=ZrgDJDEWT2/TSFV/CpIGk5xQgtf51ysmUh/lOs0mmj8N5pl4uhBYX01CMm/8rCnlNK SK2yzYDV+Q5fdx4WQAifvU6dvgWzpX6tLhHmsR2QlJE4i0lygg58EWG9F1cUIolWpt1n Ymjc1PWEtvZ0Qv2eM+yMKkDDVZLFciVB9uOkg89ZV6l7/rm+JtOpHbLiW+Ugs+1Jd3hI cSRHBTUvRy7yvTgc//Wim8mSLYmmu+rywxUlqG9y+IbDNPHdy+wOiAgn875jXX0lmjbs U9sw0hbXAYfCFXOLKZv0XtzRiJi5iLFA7AN1xIyGi9oobPW0SUDZmfN6adHRyTgD/DMZ TdkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=sOPZGKxs31esqWKdEdFfBoqT8Lt1wmL7+ZWCc26UeUQ=; b=gIf7u5+XcuNTIoT12+tJPUVbQnO5YXmMALADJzuumjFcpPw0z3BQoLWWCqvVUIs9xC qjyLXDMBwzx0yrhTTwiyh+mHsDHiVecqiSSsCA2/A+ART9rCcrONqnwMtRh9nzdQ6lut R9LK/gBZ2wmg2InNClpH4Ptmv8RDVDIv3R9vDKOuVIS4GmPvvkkqCwVp/Ng9hb0t8b2V bYnC0EKPxssYGGD8+VeQXjM+UXHDeGA4DyWD2rXNSmW/6qxuN3vxLy3N0pYJnZxS/xgr L0VIFQQY/NvWpfZuu5K3MMH0nQMfaYcpQGHa8pJhm6EiD9ccIai0NPu4ZdlKwxn6Tf7H 62Gg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@foss.st.com header.s=selector1 header.b=GEg3i6CG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=foss.st.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f1si1024425ejh.95.2021.03.31.00.39.02; Wed, 31 Mar 2021 00:39:25 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@foss.st.com header.s=selector1 header.b=GEg3i6CG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=foss.st.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234132AbhCaHgK (ORCPT + 99 others); Wed, 31 Mar 2021 03:36:10 -0400 Received: from mx07-00178001.pphosted.com ([185.132.182.106]:56265 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234104AbhCaHfm (ORCPT ); Wed, 31 Mar 2021 03:35:42 -0400 Received: from pps.filterd (m0046668.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 12V7WGk4030045; Wed, 31 Mar 2021 09:35:29 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=selector1; bh=sOPZGKxs31esqWKdEdFfBoqT8Lt1wmL7+ZWCc26UeUQ=; b=GEg3i6CGm7BeGJ80sPYPPLFNfdLmpRrkG3B9w8e9nDzR1bqkwuAI/sWbHu4VsUz7KDYZ GXDiXcwep5vV82N4a4jKoS5WXO2quz+Vktikmd7cuMjKgvkmluFzGsjv0eCx9fCWMqS/ j6LTwoZG2Ty/Zbtkc+6ldNWx+EKBy1BbXttX4iBGu+B40VtTLl5/gp/cNFVXw/ddJQQY xkMqJak+nHqwkEo6aEpZ9hlpbZp5oA9+G7y7+jeK0JIlXOnEhL1brlSjdV0MgFnkwsqX KReQWd4EhBQlu6UKj9OA1YC647qbJJHCfTvkiCyyfInB3NYQShdF4aIJu1U6un+c/ASW YA== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com with ESMTP id 37mab3tvkc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 31 Mar 2021 09:35:29 +0200 Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 71CB310002A; Wed, 31 Mar 2021 09:35:29 +0200 (CEST) Received: from Webmail-eu.st.com (sfhdag2node3.st.com [10.75.127.6]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 6269D224825; Wed, 31 Mar 2021 09:35:29 +0200 (CEST) Received: from localhost (10.75.127.45) by SFHDAG2NODE3.st.com (10.75.127.6) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 31 Mar 2021 09:35:29 +0200 From: Arnaud Pouliquen To: Bjorn Andersson , Ohad Ben-Cohen , Mathieu Poirier , Rob Herring , Alexandre Torgue CC: , , , , , Arnaud Pouliquen Subject: [PATCH v4 2/2] remoteproc: stm32: add capability to detach Date: Wed, 31 Mar 2021 09:33:47 +0200 Message-ID: <20210331073347.8293-3-arnaud.pouliquen@foss.st.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210331073347.8293-1-arnaud.pouliquen@foss.st.com> References: <20210331073347.8293-1-arnaud.pouliquen@foss.st.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.75.127.45] X-ClientProxiedBy: SFHDAG1NODE3.st.com (10.75.127.3) To SFHDAG2NODE3.st.com (10.75.127.6) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.369,18.0.761 definitions=2021-03-31_01:2021-03-30,2021-03-31 signatures=0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A mechanism similar to the shutdown mailbox signal is implemented to detach a remote processor. Upon detachment, a signal is sent to the remote firmware, allowing it to perform specific actions such as stopping rpmsg communication. The Cortex-M hold boot is also disabled to allow the remote processor to restart in case of crash. Signed-off-by: Arnaud Pouliquen Reviewed-by: Mathieu Poirier Tested-by: Mathieu Poirier --- drivers/remoteproc/stm32_rproc.c | 39 ++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/drivers/remoteproc/stm32_rproc.c b/drivers/remoteproc/stm32_rproc.c index 3d45f51de4d0..7353f9e7e7af 100644 --- a/drivers/remoteproc/stm32_rproc.c +++ b/drivers/remoteproc/stm32_rproc.c @@ -28,7 +28,7 @@ #define RELEASE_BOOT 1 #define MBOX_NB_VQ 2 -#define MBOX_NB_MBX 3 +#define MBOX_NB_MBX 4 #define STM32_SMC_RCC 0x82001000 #define STM32_SMC_REG_WRITE 0x1 @@ -38,6 +38,7 @@ #define STM32_MBX_VQ1 "vq1" #define STM32_MBX_VQ1_ID 1 #define STM32_MBX_SHUTDOWN "shutdown" +#define STM32_MBX_DETACH "detach" #define RSC_TBL_SIZE 1024 @@ -336,6 +337,15 @@ static const struct stm32_mbox stm32_rproc_mbox[MBOX_NB_MBX] = { .tx_done = NULL, .tx_tout = 500, /* 500 ms time out */ }, + }, + { + .name = STM32_MBX_DETACH, + .vq_id = -1, + .client = { + .tx_block = true, + .tx_done = NULL, + .tx_tout = 200, /* 200 ms time out to detach should be fair enough */ + }, } }; @@ -461,6 +471,25 @@ static int stm32_rproc_attach(struct rproc *rproc) return stm32_rproc_set_hold_boot(rproc, true); } +static int stm32_rproc_detach(struct rproc *rproc) +{ + struct stm32_rproc *ddata = rproc->priv; + int err, dummy_data, idx; + + /* Inform the remote processor of the detach */ + idx = stm32_rproc_mbox_idx(rproc, STM32_MBX_DETACH); + if (idx >= 0 && ddata->mb[idx].chan) { + /* A dummy data is sent to allow to block on transmit */ + err = mbox_send_message(ddata->mb[idx].chan, + &dummy_data); + if (err < 0) + dev_warn(&rproc->dev, "warning: remote FW detach without ack\n"); + } + + /* Allow remote processor to auto-reboot */ + return stm32_rproc_set_hold_boot(rproc, false); +} + static int stm32_rproc_stop(struct rproc *rproc) { struct stm32_rproc *ddata = rproc->priv; @@ -597,7 +626,12 @@ stm32_rproc_get_loaded_rsc_table(struct rproc *rproc, size_t *table_sz) } done: - /* Assuming the resource table fits in 1kB is fair */ + /* + * Assuming the resource table fits in 1kB is fair. + * Notice for the detach, that this 1 kB memory area has to be reserved in the coprocessor + * firmware for the resource table. On detach, the remoteproc core re-initializes this + * entire area by overwriting it with the initial values stored in rproc->clean_table. + */ *table_sz = RSC_TBL_SIZE; return (struct resource_table *)ddata->rsc_va; } @@ -607,6 +641,7 @@ static const struct rproc_ops st_rproc_ops = { .start = stm32_rproc_start, .stop = stm32_rproc_stop, .attach = stm32_rproc_attach, + .detach = stm32_rproc_detach, .kick = stm32_rproc_kick, .load = rproc_elf_load_segments, .parse_fw = stm32_rproc_parse_fw, -- 2.17.1