From nobody Wed Dec 17 13:59:53 2025 Received: from lelvem-ot02.ext.ti.com (lelvem-ot02.ext.ti.com [198.47.23.235]) (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 CCBA51CCEC8; Tue, 13 May 2025 05:45:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.235 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115130; cv=none; b=AQpRADezYWWOFo2NeGy7tQGOQLLeojInXDr4TjTLAuL9ieDW9IHTr2Lh5PrC+HpH/ELf50HCXzgBLQ7kijdqn5pc9NlFDt5oIsRnBrhn/tTWi+JyZ2FSboM6r8p48szvzF9zBzgFSFUh16cesQ79fQ8LTD7HZSfYvgbjznBSZEM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115130; c=relaxed/simple; bh=o6n2b2prLNRMQqo9/TPYa0xx8mLRSli7szH2/GCn/XE=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=gz6PTsW18HCo0k/ZMYFcbMV2vDgSLEKeELt3MiKx3ccijlixDajNhPTreMJbuuwdVSD3NMvD0yaaycQJaPN2i8CWwwYU3CPsJW93rxaE230DCYlJ2bXnHylLabGhOppLaN07TFqgD8cDERn9YtbIPRy5bupZXLfsiaAQFdbKsOM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=hmto8NHr; arc=none smtp.client-ip=198.47.23.235 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="hmto8NHr" Received: from lelv0265.itg.ti.com ([10.180.67.224]) by lelvem-ot02.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5jJCs2985462 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:45:20 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115120; bh=Ow7cyDCw386R9q24/E8HuXKhKtnAWR8U7phtcMGmNFg=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=hmto8NHrrlSy1tz0RZ6HPjkOzcrfirC2PXrSxWYYIBti3QGxk0T3IjsMI47qZGBCK IAcTGBx5kpSEqybY7t7wIi332H3ZTPE1KYyCDdqCPJZBOh+3tb378lP0jRcz6DcLmV hYm54cq48dCqeA7YMlXbBH71n5+TwceDmeJOYBxM= Received: from DFLE113.ent.ti.com (dfle113.ent.ti.com [10.64.6.34]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5jJbR032023 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:45:19 -0500 Received: from DFLE102.ent.ti.com (10.64.6.23) by DFLE113.ent.ti.com (10.64.6.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:45:19 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DFLE102.ent.ti.com (10.64.6.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:45:19 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqA131001; Tue, 13 May 2025 00:45:15 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 01/36] remoteproc: k3-r5: Drop check performed in k3_r5_rproc_{mbox_callback/kick} Date: Tue, 13 May 2025 11:14:35 +0530 Message-ID: <20250513054510.3439842-2-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" From: Siddharth Vadapalli Commit f3f11cfe8907 ("remoteproc: k3-r5: Acquire mailbox handle during probe routine") introduced a check in the "k3_r5_rproc_mbox_callback()" and "k3_r5_rproc_kick()" callbacks, causing them to exit if the remote core's state is "RPROC_DETACHED". However, the "__rproc_attach()" function that is responsible for attaching to a remote core, updates the state of the remote core to "RPROC_ATTACHED" only after invoking "rproc_start_subdevices()". The "rproc_start_subdevices()" function triggers the probe of the Virtio RPMsg devices associated with the remote core, which require that the "k3_r5_rproc_kick()" and "k3_r5_rproc_mbox_callback()" callbacks are functional. Hence, drop the check in the callbacks. Fixes: f3f11cfe8907 ("remoteproc: k3-r5: Acquire mailbox handle during prob= e routine") Signed-off-by: Siddharth Vadapalli Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-2-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-2-b-padhi@ti.com/ v10: Changelog: 1. Re-ordered this patch to come at the start of the series. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-7-b-padhi@ti.com/ drivers/remoteproc/ti_k3_r5_remoteproc.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index dbc513c5569cb..3fc0b97dec600 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -194,10 +194,6 @@ static void k3_r5_rproc_mbox_callback(struct mbox_clie= nt *client, void *data) const char *name =3D kproc->rproc->name; u32 msg =3D omap_mbox_message(data); =20 - /* Do not forward message from a detached core */ - if (kproc->rproc->state =3D=3D RPROC_DETACHED) - return; - dev_dbg(dev, "mbox msg: 0x%x\n", msg); =20 switch (msg) { @@ -233,10 +229,6 @@ static void k3_r5_rproc_kick(struct rproc *rproc, int = vqid) mbox_msg_t msg =3D (mbox_msg_t)vqid; int ret; =20 - /* Do not forward message to a detached core */ - if (kproc->rproc->state =3D=3D RPROC_DETACHED) - return; - /* send the index of the triggered virtqueue in the mailbox payload */ ret =3D mbox_send_message(kproc->mbox, (void *)msg); if (ret < 0) --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from lelvem-ot02.ext.ti.com (lelvem-ot02.ext.ti.com [198.47.23.235]) (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 9DAAD182BD; Tue, 13 May 2025 05:45:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.235 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115137; cv=none; b=mafpTzfV8N3k31SnNb9cCSIVlmq3v1izaPFAgzpAMDP3YBtuDZ3EFPRsOLR7aU1tMyTD4JHKs4ILo0M+t/TbLG2cyafm+o2Oyt7x3vBTga7xkyxS+WErXlxT+TDqU0yRuOJx4aFfigl23GDVOM5UuY9W5XwVsNbIFTuBN+/kLz8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115137; c=relaxed/simple; bh=0VLUGC3xxU1GS9NEAmRIuEXaIe9jwuWkyhZ/+DNxtf8=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=RKkY9hMqWqV0VLck2hxFkVjpS+kmTO6YWLyq0o4Hfp0ky5y5o9M1fdU6no5QgAwEkjP4/EHg62CW0yNUPam6Dk/nBpqsP7YzvhruZ9A5972z37+os2DOw+gTuDAnhg9QdVNkhj5Ybkx9yTXmw4mHR4oF49IR81eJV0M0os02qk8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=MJEKOloA; arc=none smtp.client-ip=198.47.23.235 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="MJEKOloA" Received: from lelv0266.itg.ti.com ([10.180.67.225]) by lelvem-ot02.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5jOpa2985476 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:45:24 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115124; bh=QF+ZDfJgaCy5roaKN17rl9OjHc1UyQdPyLWD8tP6Vog=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=MJEKOloA9ZLIs/qXtf5usbjOS9oKysoFOClm/nmmaT7QjQJyxFLV6Qde6yrAckNNF GxKn9615jRkX7zFjLJ4DcmkkXL0UFP3PyS7uKXHBcjZdAb3cJP4WElvq7f0FYeTlP9 MLx7/yHn05CEUpCH1h//CcS8hMqctXdIyFwIhXPk= Received: from DLEE102.ent.ti.com (dlee102.ent.ti.com [157.170.170.32]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5jNdk027558 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:45:24 -0500 Received: from DLEE102.ent.ti.com (157.170.170.32) by DLEE102.ent.ti.com (157.170.170.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:45:23 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE102.ent.ti.com (157.170.170.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:45:23 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqB131001; Tue, 13 May 2025 00:45:20 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 02/36] remoteproc: k3-dsp: Drop check performed in k3_dsp_rproc_{mbox_callback/kick} Date: Tue, 13 May 2025 11:14:36 +0530 Message-ID: <20250513054510.3439842-3-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" From: Siddharth Vadapalli Commit ea1d6fb5b571 ("remoteproc: k3-dsp: Acquire mailbox handle during probe routine") introduced a check in the "k3_dsp_rproc_mbox_callback()" and "k3_dsp_rproc_kick()" callbacks, causing them to exit if the remote core's state is "RPROC_DETACHED". However, the "__rproc_attach()" function that is responsible for attaching to a remote core, updates the state of the remote core to "RPROC_ATTACHED" only after invoking "rproc_start_subdevices()". The "rproc_start_subdevices()" function triggers the probe of the Virtio RPMsg devices associated with the remote core, which require that the "k3_dsp_rproc_kick()" and "k3_dsp_rproc_mbox_callback()" callbacks are functional. Hence, drop the check in the callbacks. Fixes: ea1d6fb5b571 ("remoteproc: k3-dsp: Acquire mailbox handle during pro= be routine") Signed-off-by: Siddharth Vadapalli Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-3-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-3-b-padhi@ti.com/ v10: Changelog: 1. Re-ordered this patch from [v9 07/26] to [v10 02/33]. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-8-b-padhi@ti.com/ drivers/remoteproc/ti_k3_dsp_remoteproc.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index a695890254ff7..35e8c3cc313c3 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -115,10 +115,6 @@ static void k3_dsp_rproc_mbox_callback(struct mbox_cli= ent *client, void *data) const char *name =3D kproc->rproc->name; u32 msg =3D omap_mbox_message(data); =20 - /* Do not forward messages from a detached core */ - if (kproc->rproc->state =3D=3D RPROC_DETACHED) - return; - dev_dbg(dev, "mbox msg: 0x%x\n", msg); =20 switch (msg) { @@ -159,10 +155,6 @@ static void k3_dsp_rproc_kick(struct rproc *rproc, int= vqid) mbox_msg_t msg =3D (mbox_msg_t)vqid; int ret; =20 - /* Do not forward messages to a detached core */ - if (kproc->rproc->state =3D=3D RPROC_DETACHED) - return; - /* send the index of the triggered virtqueue in the mailbox payload */ ret =3D mbox_send_message(kproc->mbox, (void *)msg); if (ret < 0) --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot04.ext.ti.com (fllvem-ot04.ext.ti.com [198.47.19.246]) (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 988047DA7F; Tue, 13 May 2025 05:45:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.246 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115138; cv=none; b=aewm4eUD7UqdlcRy8qgoyYhE8e31+gmnxPUZ1hmsw/MqQMYKAACvYXzUxdPPI+siAuy1SOTaoGfcqLbrfkH0db6i905dh9Aej4eyRMxjsQ06kkvGp1sVMMEWxBLKjGo0rULHSgteRJf0eTBSpYvwRP41DH2KgdpW2wn3bSyEyAU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115138; c=relaxed/simple; bh=0J09EsxHKrk964zQrojEq2bXM5GKL329ixByMUyBP/Q=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=qL7ZE0FIB/hC5LwzTRB9NE+7ut0e2iPjBCk5+jvJ+ifCurTsfOjgDFwe291yRq6blLF4dJ02dN6M257s2E+qSJTNn0NEv3JmLJV2C8E8TMd9ptbZAtI7CsvwaT5vpfJwdFSncxMSx5HTihWVRg23LFioxM7vqYm/0uHANB6OBbQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=uo4p5X2f; arc=none smtp.client-ip=198.47.19.246 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="uo4p5X2f" Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllvem-ot04.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5jSJA2764224 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:45:28 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115128; bh=ZhvFCfBAy7aVEJqwbeVRNOdju6nJ1u+171Ob+t10kBw=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=uo4p5X2fdlgb1IOuVqiM6dLpSJqGO/+N4Xgs4CdxWSuoQ9N4XTv+n1NrjBbfKcOhI fznb1el55wj9C9pvFh9RCDgLu8YoNRe6BvJxE4+Agvz1gCpmpraGE4g5XWXJEp/Ows W4rDJz4yXs6w76zdDlC8tqYlNcc/5nBMEajI6Pwg= Received: from DLEE114.ent.ti.com (dlee114.ent.ti.com [157.170.170.25]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5jSL3088455 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:45:28 -0500 Received: from DLEE101.ent.ti.com (157.170.170.31) by DLEE114.ent.ti.com (157.170.170.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:45:28 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE101.ent.ti.com (157.170.170.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:45:27 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqC131001; Tue, 13 May 2025 00:45:24 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 03/36] remoteproc: k3-r5: Refactor sequential core power up/down operations Date: Tue, 13 May 2025 11:14:37 +0530 Message-ID: <20250513054510.3439842-4-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The existing implementation of the waiting mechanism in "k3_r5_cluster_rproc_init()" waits for the "released_from_reset" flag to be set as part of the firmware boot process in "k3_r5_rproc_start()". The "k3_r5_cluster_rproc_init()" function is invoked in the probe routine which causes unexpected failures in cases where the firmware is unavailable at boot time, resulting in probe failure and removal of the remoteproc handles in the sysfs paths. To address this, the waiting mechanism is refactored out of the probe routine into the appropriate "k3_r5_rproc_{prepare/unprepare}()" functions. This allows the probe routine to complete without depending on firmware booting, while still maintaining the required power-synchronization between cores. Further, this wait mechanism is dropped from "k3_r5_rproc_{start/stop}()" functions as they deal with Core Run/Halt operations, and as such, there is no constraint in Running or Halting the cores of a cluster in order. Fixes: 61f6f68447ab ("remoteproc: k3-r5: Wait for core0 power-up before pow= ering up core1") Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-4-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-4-b-padhi@ti.com/ v10: Changelog: 1. Re-ordered this patch from [v9 08/26] to [v10 03/33]. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-9-b-padhi@ti.com/ drivers/remoteproc/ti_k3_r5_remoteproc.c | 110 +++++++++++++---------- 1 file changed, 63 insertions(+), 47 deletions(-) diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index 3fc0b97dec600..ba082ca13e750 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -440,13 +440,36 @@ static int k3_r5_rproc_prepare(struct rproc *rproc) { struct k3_r5_rproc *kproc =3D rproc->priv; struct k3_r5_cluster *cluster =3D kproc->cluster; - struct k3_r5_core *core =3D kproc->core; + struct k3_r5_core *core =3D kproc->core, *core0, *core1; struct device *dev =3D kproc->dev; u32 ctrl =3D 0, cfg =3D 0, stat =3D 0; u64 boot_vec =3D 0; bool mem_init_dis; int ret; =20 + /* + * R5 cores require to be powered on sequentially, core0 should be in + * higher power state than core1 in a cluster. So, wait for core0 to + * power up before proceeding to core1 and put timeout of 2sec. This + * waiting mechanism is necessary because rproc_auto_boot_callback() for + * core1 can be called before core0 due to thread execution order. + * + * By placing the wait mechanism here in .prepare() ops, this condition + * is enforced for rproc boot requests from sysfs as well. + */ + core0 =3D list_first_entry(&cluster->cores, struct k3_r5_core, elem); + core1 =3D list_last_entry(&cluster->cores, struct k3_r5_core, elem); + if (cluster->mode =3D=3D CLUSTER_MODE_SPLIT && core =3D=3D core1 && + !core0->released_from_reset) { + ret =3D wait_event_interruptible_timeout(cluster->core_transition, + core0->released_from_reset, + msecs_to_jiffies(2000)); + if (ret <=3D 0) { + dev_err(dev, "can not power up core1 before core0"); + return -EPERM; + } + } + ret =3D ti_sci_proc_get_status(core->tsp, &boot_vec, &cfg, &ctrl, &stat); if (ret < 0) return ret; @@ -462,6 +485,14 @@ static int k3_r5_rproc_prepare(struct rproc *rproc) return ret; } =20 + /* + * Notify all threads in the wait queue when core0 state has changed so + * that threads waiting for this condition can be executed. + */ + core->released_from_reset =3D true; + if (core =3D=3D core0) + wake_up_interruptible(&cluster->core_transition); + /* * Newer IP revisions like on J7200 SoCs support h/w auto-initialization * of TCMs, so there is no need to perform the s/w memzero. This bit is @@ -507,10 +538,30 @@ static int k3_r5_rproc_unprepare(struct rproc *rproc) { struct k3_r5_rproc *kproc =3D rproc->priv; struct k3_r5_cluster *cluster =3D kproc->cluster; - struct k3_r5_core *core =3D kproc->core; + struct k3_r5_core *core =3D kproc->core, *core0, *core1; struct device *dev =3D kproc->dev; int ret; =20 + /* + * Ensure power-down of cores is sequential in split mode. Core1 must + * power down before Core0 to maintain the expected state. By placing + * the wait mechanism here in .unprepare() ops, this condition is + * enforced for rproc stop or shutdown requests from sysfs and device + * removal as well. + */ + core0 =3D list_first_entry(&cluster->cores, struct k3_r5_core, elem); + core1 =3D list_last_entry(&cluster->cores, struct k3_r5_core, elem); + if (cluster->mode =3D=3D CLUSTER_MODE_SPLIT && core =3D=3D core0 && + core1->released_from_reset) { + ret =3D wait_event_interruptible_timeout(cluster->core_transition, + !core1->released_from_reset, + msecs_to_jiffies(2000)); + if (ret <=3D 0) { + dev_err(dev, "can not power down core0 before core1"); + return -EPERM; + } + } + /* Re-use LockStep-mode reset logic for Single-CPU mode */ ret =3D (cluster->mode =3D=3D CLUSTER_MODE_LOCKSTEP || cluster->mode =3D=3D CLUSTER_MODE_SINGLECPU) ? @@ -518,6 +569,14 @@ static int k3_r5_rproc_unprepare(struct rproc *rproc) if (ret) dev_err(dev, "unable to disable cores, ret =3D %d\n", ret); =20 + /* + * Notify all threads in the wait queue when core1 state has changed so + * that threads waiting for this condition can be executed. + */ + core->released_from_reset =3D false; + if (core =3D=3D core1) + wake_up_interruptible(&cluster->core_transition); + return ret; } =20 @@ -543,7 +602,7 @@ static int k3_r5_rproc_start(struct rproc *rproc) struct k3_r5_rproc *kproc =3D rproc->priv; struct k3_r5_cluster *cluster =3D kproc->cluster; struct device *dev =3D kproc->dev; - struct k3_r5_core *core0, *core; + struct k3_r5_core *core; u32 boot_addr; int ret; =20 @@ -565,21 +624,9 @@ static int k3_r5_rproc_start(struct rproc *rproc) goto unroll_core_run; } } else { - /* do not allow core 1 to start before core 0 */ - core0 =3D list_first_entry(&cluster->cores, struct k3_r5_core, - elem); - if (core !=3D core0 && core0->rproc->state =3D=3D RPROC_OFFLINE) { - dev_err(dev, "%s: can not start core 1 before core 0\n", - __func__); - return -EPERM; - } - ret =3D k3_r5_core_run(core); if (ret) return ret; - - core->released_from_reset =3D true; - wake_up_interruptible(&cluster->core_transition); } =20 return 0; @@ -620,8 +667,7 @@ static int k3_r5_rproc_stop(struct rproc *rproc) { struct k3_r5_rproc *kproc =3D rproc->priv; struct k3_r5_cluster *cluster =3D kproc->cluster; - struct device *dev =3D kproc->dev; - struct k3_r5_core *core1, *core =3D kproc->core; + struct k3_r5_core *core =3D kproc->core; int ret; =20 /* halt all applicable cores */ @@ -634,16 +680,6 @@ static int k3_r5_rproc_stop(struct rproc *rproc) } } } else { - /* do not allow core 0 to stop before core 1 */ - core1 =3D list_last_entry(&cluster->cores, struct k3_r5_core, - elem); - if (core !=3D core1 && core1->rproc->state !=3D RPROC_OFFLINE) { - dev_err(dev, "%s: can not stop core 0 before core 1\n", - __func__); - ret =3D -EPERM; - goto out; - } - ret =3D k3_r5_core_halt(core); if (ret) goto out; @@ -1271,26 +1307,6 @@ static int k3_r5_cluster_rproc_init(struct platform_= device *pdev) cluster->mode =3D=3D CLUSTER_MODE_SINGLECPU || cluster->mode =3D=3D CLUSTER_MODE_SINGLECORE) break; - - /* - * R5 cores require to be powered on sequentially, core0 - * should be in higher power state than core1 in a cluster - * So, wait for current core to power up before proceeding - * to next core and put timeout of 2sec for each core. - * - * This waiting mechanism is necessary because - * rproc_auto_boot_callback() for core1 can be called before - * core0 due to thread execution order. - */ - ret =3D wait_event_interruptible_timeout(cluster->core_transition, - core->released_from_reset, - msecs_to_jiffies(2000)); - if (ret <=3D 0) { - dev_err(dev, - "Timed out waiting for %s core to power up!\n", - rproc->name); - goto out; - } } =20 return 0; --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot03.ext.ti.com (fllvem-ot03.ext.ti.com [198.47.19.245]) (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 B8F6B7DA7F; Tue, 13 May 2025 05:45:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.245 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115153; cv=none; b=j0neYlaAbUubNMeAhh35OwgQbeEAPeeK+wvpsR+PvbHivkzxwfpS7sp3MftN2D76YXuhY/uRJH2d8PkX+ZWF9vakIj24KOWvnBrJKHB0hd/NjW801AIGnBAe4GKf26UqVWPFGc+F7XDwcTp3euITgazBA8siighMvC6mkCP2u3M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115153; c=relaxed/simple; bh=tWCLFzBq4QtkTyQZg5vtookrGmyrTXs0yYMMqyN6XR4=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=lr1r3qYtRFs9QFEegaA9TGkWs7PZBMpxnvBPKmh4p2E5jwUarEZMce0el6ILRV9iKg3m4PbnQ6wwNP+eN6NReImPNYz7ErcdEzyYot/MtO1OWHeh0TQ5WOb05wZVmzFiP+kgrpboiQ7Wxt9+khbKMWUNa/EmedukGhR9vSNMgUM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=lFIg5Ki5; arc=none smtp.client-ip=198.47.19.245 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="lFIg5Ki5" Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllvem-ot03.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5jWac2210703 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:45:32 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115132; bh=h9g7xkVWq9sPE/E369IfByaxL5kqikNRGPZz49On2b4=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=lFIg5Ki5mYghP8R4qxGVFMGc/avNVS0tQu4812hl5dGbCDED5qGTGKH2DLLPWUREl JDD+I4oKa+jBS4m1950UJWnCP7HoXyaWvpve3qZFAWw21vejMWxKU6SZD8qPFkwH7v Vqx0tAay7BuZZkaHjYa6SL4RHtN7w+2wmUhi7hcc= Received: from DFLE109.ent.ti.com (dfle109.ent.ti.com [10.64.6.30]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5jWHR088475 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:45:32 -0500 Received: from DFLE101.ent.ti.com (10.64.6.22) by DFLE109.ent.ti.com (10.64.6.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:45:32 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DFLE101.ent.ti.com (10.64.6.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:45:31 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqD131001; Tue, 13 May 2025 00:45:28 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 04/36] remoteproc: k3-m4: Don't assert reset in detach routine Date: Tue, 13 May 2025 11:14:38 +0530 Message-ID: <20250513054510.3439842-5-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The rproc_detach() function invokes __rproc_detach() before rproc_unprepare_device(). The __rproc_detach() function sets the rproc->state to "RPROC_DETACHED". However, the TI K3 M4 driver erroneously looks for "RPROC_ATTACHED" state in its .unprepare ops to identify IPC-only mode; which leads to resetting the rproc in detach routine. Therefore, correct the IPC-only mode detection logic to look for "RPROC_DETACHED" in k3_m4_rproc_unprepare() function. Fixes: ebcf9008a895 ("remoteproc: k3-m4: Add a remoteproc driver for M4F su= bsystem") Signed-off-by: Beleswar Padhi Reviewed-by: Hari Nagalla Reviewed-by: Martyn Welch --- v12: Changelog: 1. New patch. Fixup a state detection logic. drivers/remoteproc/ti_k3_m4_remoteproc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index a16fb165fcedd..6cd50b16a8e82 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -228,7 +228,7 @@ static int k3_m4_rproc_unprepare(struct rproc *rproc) int ret; =20 /* If the core is going to be detached do not assert the module reset */ - if (rproc->state =3D=3D RPROC_ATTACHED) + if (rproc->state =3D=3D RPROC_DETACHED) return 0; =20 ret =3D kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from lelvem-ot01.ext.ti.com (lelvem-ot01.ext.ti.com [198.47.23.234]) (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 6023F7DA7F; Tue, 13 May 2025 05:45:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115146; cv=none; b=ZfzB4D8XyZavXaL2nFDiq75wb0foDu9bBpeAEPpK1WKBFJeMcpwXAgExIaGqt6K6KuuD00I1DMbavCsf2BiG5nhBjRL2AjUJg4h3wGrEm6uIvKqTuf+1AWSRl3SBAlhlDLcqfmkUOm4khGeJ4HH6wIHMPbBZ0ggYQOX2vquJKNs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115146; c=relaxed/simple; bh=GO9FfsL09bUmQcVrlG2H2lZfuUcloiASH3s0QosKeCA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pc1kRzeQKk8iDXmokRck908bzpkg0aBcyWez++SHUv/tiF/XVSJgBUr9tca3T/Og2NKf7XPFgP3U7SIxndFptk2Y7a2znyHd7tZCgcIj4EFtYp0Zscur3gkRP0dgg2a63WzGMtns/c/yOaCFYOaSqxi5M5PDzEVIyXLBV4jVwFQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=lbbVOWFK; arc=none smtp.client-ip=198.47.23.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="lbbVOWFK" Received: from fllv0034.itg.ti.com ([10.64.40.246]) by lelvem-ot01.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5jaZX2226317 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:45:36 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115136; bh=zhAcpJlYU4/0MR5n21lEvZAva+QCUEB0sleYKRGULAo=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=lbbVOWFKR++8Kuw8L0P4ZeXM4uwd/047617kOeiTMWU8yvQqiMjd/iIh4usDZITlD C29IR+2/L9ysqCGawWLtg2PhuANKk5gBVceNvLLwWQcXS7kGx1gV5s2LNqM+iQZRT8 9CvIZmu1meHp9JJI7VHsR/HELpG3qsKZoaIpmEe0= Received: from DFLE105.ent.ti.com (dfle105.ent.ti.com [10.64.6.26]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5ja5D062993 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:45:36 -0500 Received: from DFLE108.ent.ti.com (10.64.6.29) by DFLE105.ent.ti.com (10.64.6.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:45:36 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DFLE108.ent.ti.com (10.64.6.29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:45:36 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqE131001; Tue, 13 May 2025 00:45:32 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 05/36] remoteproc: k3-r5: Re-order internal memory initialization functions Date: Tue, 13 May 2025 11:14:39 +0530 Message-ID: <20250513054510.3439842-6-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The internal memory struct pointer, 'mem', will be refactored from k3_r5_core struct into k3_r5_rproc struct in a future commit. Therefore, move the internal memory initialization function, k3_r5_core_of_get_internal_memories() above k3_r5_cluster_rproc_init() so that the former can be invoked by the later. While at it, also re-order the k3_r5_core_of_get_sram_memories() to keep all the internal memory initialization functions at one place. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-5-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-5-b-padhi@ti.com/ v10: Changelog: 1. Re-ordered both core_of_get_{internal/sram}_memories() together. 2. Moved release_tsp() re-ordering into a separate future commit. 3. Updated commit message to call out changes in a better way. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-2-b-padhi@ti.com/ drivers/remoteproc/ti_k3_r5_remoteproc.c | 258 +++++++++++------------ 1 file changed, 129 insertions(+), 129 deletions(-) diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index ba082ca13e750..062a654cac0f0 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -1227,6 +1227,135 @@ static int k3_r5_rproc_configure_mode(struct k3_r5_= rproc *kproc) return ret; } =20 +static int k3_r5_core_of_get_internal_memories(struct platform_device *pde= v, + struct k3_r5_core *core) +{ + static const char * const mem_names[] =3D {"atcm", "btcm"}; + struct device *dev =3D &pdev->dev; + struct resource *res; + int num_mems; + int i; + + num_mems =3D ARRAY_SIZE(mem_names); + core->mem =3D devm_kcalloc(dev, num_mems, sizeof(*core->mem), GFP_KERNEL); + if (!core->mem) + return -ENOMEM; + + for (i =3D 0; i < num_mems; i++) { + res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, + mem_names[i]); + if (!res) { + dev_err(dev, "found no memory resource for %s\n", + mem_names[i]); + return -EINVAL; + } + if (!devm_request_mem_region(dev, res->start, + resource_size(res), + dev_name(dev))) { + dev_err(dev, "could not request %s region for resource\n", + mem_names[i]); + return -EBUSY; + } + + /* + * TCMs are designed in general to support RAM-like backing + * memories. So, map these as Normal Non-Cached memories. This + * also avoids/fixes any potential alignment faults due to + * unaligned data accesses when using memcpy() or memset() + * functions (normally seen with device type memory). + */ + core->mem[i].cpu_addr =3D devm_ioremap_wc(dev, res->start, + resource_size(res)); + if (!core->mem[i].cpu_addr) { + dev_err(dev, "failed to map %s memory\n", mem_names[i]); + return -ENOMEM; + } + core->mem[i].bus_addr =3D res->start; + + /* + * TODO: + * The R5F cores can place ATCM & BTCM anywhere in its address + * based on the corresponding Region Registers in the System + * Control coprocessor. For now, place ATCM and BTCM at + * addresses 0 and 0x41010000 (same as the bus address on AM65x + * SoCs) based on loczrama setting + */ + if (!strcmp(mem_names[i], "atcm")) { + core->mem[i].dev_addr =3D core->loczrama ? + 0 : K3_R5_TCM_DEV_ADDR; + } else { + core->mem[i].dev_addr =3D core->loczrama ? + K3_R5_TCM_DEV_ADDR : 0; + } + core->mem[i].size =3D resource_size(res); + + dev_dbg(dev, "memory %5s: bus addr %pa size 0x%zx va %pK da 0x%x\n", + mem_names[i], &core->mem[i].bus_addr, + core->mem[i].size, core->mem[i].cpu_addr, + core->mem[i].dev_addr); + } + core->num_mems =3D num_mems; + + return 0; +} + +static int k3_r5_core_of_get_sram_memories(struct platform_device *pdev, + struct k3_r5_core *core) +{ + struct device_node *np =3D pdev->dev.of_node; + struct device *dev =3D &pdev->dev; + struct device_node *sram_np; + struct resource res; + int num_sram; + int i, ret; + + num_sram =3D of_property_count_elems_of_size(np, "sram", sizeof(phandle)); + if (num_sram <=3D 0) { + dev_dbg(dev, "device does not use reserved on-chip memories, num_sram = =3D %d\n", + num_sram); + return 0; + } + + core->sram =3D devm_kcalloc(dev, num_sram, sizeof(*core->sram), GFP_KERNE= L); + if (!core->sram) + return -ENOMEM; + + for (i =3D 0; i < num_sram; i++) { + sram_np =3D of_parse_phandle(np, "sram", i); + if (!sram_np) + return -EINVAL; + + if (!of_device_is_available(sram_np)) { + of_node_put(sram_np); + return -EINVAL; + } + + ret =3D of_address_to_resource(sram_np, 0, &res); + of_node_put(sram_np); + if (ret) + return -EINVAL; + + core->sram[i].bus_addr =3D res.start; + core->sram[i].dev_addr =3D res.start; + core->sram[i].size =3D resource_size(&res); + core->sram[i].cpu_addr =3D devm_ioremap_wc(dev, res.start, + resource_size(&res)); + if (!core->sram[i].cpu_addr) { + dev_err(dev, "failed to parse and map sram%d memory at %pad\n", + i, &res.start); + return -ENOMEM; + } + + dev_dbg(dev, "memory sram%d: bus addr %pa size 0x%zx va %pK da 0x%x\n", + i, &core->sram[i].bus_addr, + core->sram[i].size, core->sram[i].cpu_addr, + core->sram[i].dev_addr); + } + core->num_sram =3D num_sram; + + return 0; +} + static int k3_r5_cluster_rproc_init(struct platform_device *pdev) { struct k3_r5_cluster *cluster =3D platform_get_drvdata(pdev); @@ -1366,135 +1495,6 @@ static void k3_r5_cluster_rproc_exit(void *data) } } =20 -static int k3_r5_core_of_get_internal_memories(struct platform_device *pde= v, - struct k3_r5_core *core) -{ - static const char * const mem_names[] =3D {"atcm", "btcm"}; - struct device *dev =3D &pdev->dev; - struct resource *res; - int num_mems; - int i; - - num_mems =3D ARRAY_SIZE(mem_names); - core->mem =3D devm_kcalloc(dev, num_mems, sizeof(*core->mem), GFP_KERNEL); - if (!core->mem) - return -ENOMEM; - - for (i =3D 0; i < num_mems; i++) { - res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, - mem_names[i]); - if (!res) { - dev_err(dev, "found no memory resource for %s\n", - mem_names[i]); - return -EINVAL; - } - if (!devm_request_mem_region(dev, res->start, - resource_size(res), - dev_name(dev))) { - dev_err(dev, "could not request %s region for resource\n", - mem_names[i]); - return -EBUSY; - } - - /* - * TCMs are designed in general to support RAM-like backing - * memories. So, map these as Normal Non-Cached memories. This - * also avoids/fixes any potential alignment faults due to - * unaligned data accesses when using memcpy() or memset() - * functions (normally seen with device type memory). - */ - core->mem[i].cpu_addr =3D devm_ioremap_wc(dev, res->start, - resource_size(res)); - if (!core->mem[i].cpu_addr) { - dev_err(dev, "failed to map %s memory\n", mem_names[i]); - return -ENOMEM; - } - core->mem[i].bus_addr =3D res->start; - - /* - * TODO: - * The R5F cores can place ATCM & BTCM anywhere in its address - * based on the corresponding Region Registers in the System - * Control coprocessor. For now, place ATCM and BTCM at - * addresses 0 and 0x41010000 (same as the bus address on AM65x - * SoCs) based on loczrama setting - */ - if (!strcmp(mem_names[i], "atcm")) { - core->mem[i].dev_addr =3D core->loczrama ? - 0 : K3_R5_TCM_DEV_ADDR; - } else { - core->mem[i].dev_addr =3D core->loczrama ? - K3_R5_TCM_DEV_ADDR : 0; - } - core->mem[i].size =3D resource_size(res); - - dev_dbg(dev, "memory %5s: bus addr %pa size 0x%zx va %pK da 0x%x\n", - mem_names[i], &core->mem[i].bus_addr, - core->mem[i].size, core->mem[i].cpu_addr, - core->mem[i].dev_addr); - } - core->num_mems =3D num_mems; - - return 0; -} - -static int k3_r5_core_of_get_sram_memories(struct platform_device *pdev, - struct k3_r5_core *core) -{ - struct device_node *np =3D pdev->dev.of_node; - struct device *dev =3D &pdev->dev; - struct device_node *sram_np; - struct resource res; - int num_sram; - int i, ret; - - num_sram =3D of_property_count_elems_of_size(np, "sram", sizeof(phandle)); - if (num_sram <=3D 0) { - dev_dbg(dev, "device does not use reserved on-chip memories, num_sram = =3D %d\n", - num_sram); - return 0; - } - - core->sram =3D devm_kcalloc(dev, num_sram, sizeof(*core->sram), GFP_KERNE= L); - if (!core->sram) - return -ENOMEM; - - for (i =3D 0; i < num_sram; i++) { - sram_np =3D of_parse_phandle(np, "sram", i); - if (!sram_np) - return -EINVAL; - - if (!of_device_is_available(sram_np)) { - of_node_put(sram_np); - return -EINVAL; - } - - ret =3D of_address_to_resource(sram_np, 0, &res); - of_node_put(sram_np); - if (ret) - return -EINVAL; - - core->sram[i].bus_addr =3D res.start; - core->sram[i].dev_addr =3D res.start; - core->sram[i].size =3D resource_size(&res); - core->sram[i].cpu_addr =3D devm_ioremap_wc(dev, res.start, - resource_size(&res)); - if (!core->sram[i].cpu_addr) { - dev_err(dev, "failed to parse and map sram%d memory at %pad\n", - i, &res.start); - return -ENOMEM; - } - - dev_dbg(dev, "memory sram%d: bus addr %pa size 0x%zx va %pK da 0x%x\n", - i, &core->sram[i].bus_addr, - core->sram[i].size, core->sram[i].cpu_addr, - core->sram[i].dev_addr); - } - core->num_sram =3D num_sram; - - return 0; -} - static void k3_r5_release_tsp(void *data) { struct ti_sci_proc *tsp =3D data; --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot03.ext.ti.com (fllvem-ot03.ext.ti.com [198.47.19.245]) (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 D98D11EB18F; Tue, 13 May 2025 05:45:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.245 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115156; cv=none; b=LvJXfR5BcaDTTB4o/yPZ8sQC0i2Vzr+otiDp6CAxIWLocXZyurqEUpv+YxOG9SOp+mbDGQH5XQP9MZ3qVzvSBUK1Y14Z0ML4nGIgHZ9JY8K0uM+a755UEM2v7fjRkF8y+dYNeb3bmbixuuN0pL2pvnH7qEe+5L/EbbWEDB2Qplg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115156; c=relaxed/simple; bh=eEOKGt0Y5zK2upm2FnVB89I8iU+BZz2gMiSPLY38lXc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=n+xxni8KHRQmgJdXacBXqsQmEfZwokWTe4W0CTWfQ5eGZ7shlE1sFFhKg2QkaKTAtthXEBZjye89N2aP+h/0THwwSN7hB/G3VLFw9f7om4K8+JBLfU6U9ExCJjooY9odxvTfolhGoeeu+Te+UOmpiAupwjmYKIj4R30Skk1ldXw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=D4OO15RY; arc=none smtp.client-ip=198.47.19.245 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="D4OO15RY" Received: from lelv0266.itg.ti.com ([10.180.67.225]) by fllvem-ot03.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5jetr2210719 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:45:40 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115140; bh=LA11F4v1iOlWGSyWQwH2bJeiiAZlDZR2GO5S+cZ8ysQ=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=D4OO15RYrORDSYrTjUKgCeEyC+k9bMnnj3YEyYGm944qWZe8LCNVxCiPlqZ7QJ7ie KhvtVmeoLc7RbEx2lE4BaXnQmW69wySRom4bZuOVczxbRfIy2ArcmyN++H6lZzVSPC 8/bD2v+gfMDhtgwo5l0/XEO2x3iKYvmdaYAvGghg= Received: from DFLE103.ent.ti.com (dfle103.ent.ti.com [10.64.6.24]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5jeS3027651 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:45:40 -0500 Received: from DFLE104.ent.ti.com (10.64.6.25) by DFLE103.ent.ti.com (10.64.6.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:45:40 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DFLE104.ent.ti.com (10.64.6.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:45:40 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqF131001; Tue, 13 May 2025 00:45:36 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 06/36] remoteproc: k3-r5: Re-order k3_r5_release_tsp() function Date: Tue, 13 May 2025 11:14:40 +0530 Message-ID: <20250513054510.3439842-7-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The TI-SCI processor control handle, 'tsp', will be refactored from k3_r5_core struct into k3_r5_rproc struct in a future commit. So, the 'tsp' pointer will be initialized inside k3_r5_cluster_rproc_init() now. Move the k3_r5_release_tsp() function, which releases the tsp handle, above k3_r5_cluster_rproc_init(), so that the later can register the former as a devm action. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-6-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-6-b-padhi@ti.com/ v10: Changelog: 1. Split release_tsp() re-ordering from [v9 01/26] into this patch. 2. Updated commit message to call out changes in a better way. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-2-b-padhi@ti.com/ drivers/remoteproc/ti_k3_r5_remoteproc.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index 062a654cac0f0..8e2d9fa446662 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -1356,6 +1356,13 @@ static int k3_r5_core_of_get_sram_memories(struct pl= atform_device *pdev, return 0; } =20 +static void k3_r5_release_tsp(void *data) +{ + struct ti_sci_proc *tsp =3D data; + + ti_sci_proc_release(tsp); +} + static int k3_r5_cluster_rproc_init(struct platform_device *pdev) { struct k3_r5_cluster *cluster =3D platform_get_drvdata(pdev); @@ -1495,13 +1502,6 @@ static void k3_r5_cluster_rproc_exit(void *data) } } =20 -static void k3_r5_release_tsp(void *data) -{ - struct ti_sci_proc *tsp =3D data; - - ti_sci_proc_release(tsp); -} - static int k3_r5_core_of_init(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from lelvem-ot01.ext.ti.com (lelvem-ot01.ext.ti.com [198.47.23.234]) (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 426731EB18C; Tue, 13 May 2025 05:45:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115156; cv=none; b=SFxaOdY1Zm7FK3qNUbMhpHEOm50hXxCFLxDW6+kZ0h6PT/89fNBjJoov2FrZgVtgJGG14S3EoEZ9+xhH03ozc+sHET4hzJiCVwrVuYcLzsJrfWPMQqEOfymWD3ucRro1ia+0WxIGbxtJF2QaL+u2uxyL2RoV0KgRmYcZ0osdRk8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115156; c=relaxed/simple; bh=QGFI8vADiP4N8Qtz/l64FsS6pEAlIQzJ9mj832oGXNE=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=IsJpN2x/VYVRVicT3mxFSnCUMcmIbpnZp6m9/QBDL58zEvddA77i5MeoXKgRYEY5xEJlSn1izPuCjE/opKSV71T0MjASJW9uF/E6nrtwEf0knVngX+Ojx5OzoPV0IwT1oBR+kHFj/VRkeV0fu+gqqgvEeyIAUyFt0NrQ8SLSPM8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=gBcUWvcb; arc=none smtp.client-ip=198.47.23.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="gBcUWvcb" Received: from lelvem-sh01.itg.ti.com ([10.180.77.71]) by lelvem-ot01.ext.ti.com (8.15.2/8.15.2) with ESMTP id 54D5ji2Z2226341; Tue, 13 May 2025 00:45:44 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115144; bh=OMuMpdrkZNLlafpWz2ZTYvOrRSw41pTT/rl5gbRWp8M=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=gBcUWvcb49OHikIx8rm7rChKVbS7tQ6HMdMX2u3CM/kRX/bQG1T0k4/VlH52K2top 4sK3hSM7cuz4BgpuZyS208ZQM0cKNcSNyoNLaquEU6X9h1K7izAR5z+EHnbEy0gPeG UyitI73pPKVJlKYloUWaOJJwS8yY7n8iMUlIFWcc= Received: from DLEE115.ent.ti.com (dlee115.ent.ti.com [157.170.170.26]) by lelvem-sh01.itg.ti.com (8.18.1/8.18.1) with ESMTPS id 54D5jiXg1533560 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA256 bits=128 verify=FAIL); Tue, 13 May 2025 00:45:44 -0500 Received: from DLEE105.ent.ti.com (157.170.170.35) by DLEE115.ent.ti.com (157.170.170.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:45:44 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE105.ent.ti.com (157.170.170.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:45:44 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqG131001; Tue, 13 May 2025 00:45:40 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 07/36] remoteproc: k3-r5: Refactor Data Structures to Align with DSP and M4 Date: Tue, 13 May 2025 11:14:41 +0530 Message-ID: <20250513054510.3439842-8-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" Currently, struct members such as mem, num_mems, reset, tsp, ti_sci and ti_sci_id are part of the k3_r5_core structure. To align the rproc->priv data structure of the R5 remote processor with that of the DSP and M4, move the above members from k3_r5_core to k3_r5_rproc struct. Additionally, introduce a void *priv pointer in k3_r5_rproc that can be typecasted to point to the k3_r5_core structure. This abstraction is done to ensure common functionalities across R5, DSP and M4 drivers can be refactored at a later stage. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-7-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-7-b-padhi@ti.com/ v10: Changelog: None Link to v9: https://lore.kernel.org/all/20250317120622.1746415-3-b-padhi@ti.com/ drivers/remoteproc/ti_k3_r5_remoteproc.c | 375 ++++++++++++----------- 1 file changed, 195 insertions(+), 180 deletions(-) diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index 8e2d9fa446662..5a460cfdfb4c4 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -114,19 +114,16 @@ struct k3_r5_cluster { const struct k3_r5_soc_data *soc_data; }; =20 +struct k3_r5_rproc; + /** * struct k3_r5_core - K3 R5 core structure * @elem: linked list item * @dev: cached device pointer - * @rproc: rproc handle representing this core - * @mem: internal memory regions data + * @kproc: K3 rproc handle representing this core + * @cluster: cached pointer to parent cluster structure * @sram: on-chip SRAM memory regions data - * @num_mems: number of internal memory regions * @num_sram: number of on-chip SRAM memory regions - * @reset: reset control handle - * @tsp: TI-SCI processor control handle - * @ti_sci: TI-SCI handle - * @ti_sci_id: TI-SCI device identifier * @atcm_enable: flag to control ATCM enablement * @btcm_enable: flag to control BTCM enablement * @loczrama: flag to dictate which TCM is at device address 0x0 @@ -135,15 +132,10 @@ struct k3_r5_cluster { struct k3_r5_core { struct list_head elem; struct device *dev; - struct rproc *rproc; - struct k3_r5_mem *mem; + struct k3_r5_rproc *kproc; + struct k3_r5_cluster *cluster; struct k3_r5_mem *sram; - int num_mems; int num_sram; - struct reset_control *reset; - struct ti_sci_proc *tsp; - const struct ti_sci_handle *ti_sci; - u32 ti_sci_id; u32 atcm_enable; u32 btcm_enable; u32 loczrama; @@ -153,23 +145,33 @@ struct k3_r5_core { /** * struct k3_r5_rproc - K3 remote processor state * @dev: cached device pointer - * @cluster: cached pointer to parent cluster structure - * @mbox: mailbox channel handle - * @client: mailbox client to request the mailbox channel * @rproc: rproc handle - * @core: cached pointer to r5 core structure being used + * @mem: internal memory regions data + * @num_mems: number of internal memory regions * @rmem: reserved memory regions data * @num_rmems: number of reserved memory regions + * @reset: reset control handle + * @tsp: TI-SCI processor control handle + * @ti_sci: TI-SCI handle + * @ti_sci_id: TI-SCI device identifier + * @mbox: mailbox channel handle + * @client: mailbox client to request the mailbox channel + * @priv: Remote processor private data */ struct k3_r5_rproc { struct device *dev; - struct k3_r5_cluster *cluster; - struct mbox_chan *mbox; - struct mbox_client client; struct rproc *rproc; - struct k3_r5_core *core; + struct k3_r5_mem *mem; + int num_mems; struct k3_r5_mem *rmem; int num_rmems; + struct reset_control *reset; + struct ti_sci_proc *tsp; + const struct ti_sci_handle *ti_sci; + u32 ti_sci_id; + struct mbox_chan *mbox; + struct mbox_client client; + void *priv; }; =20 /** @@ -236,48 +238,48 @@ static void k3_r5_rproc_kick(struct rproc *rproc, int= vqid) ret); } =20 -static int k3_r5_split_reset(struct k3_r5_core *core) +static int k3_r5_split_reset(struct k3_r5_rproc *kproc) { int ret; =20 - ret =3D reset_control_assert(core->reset); + ret =3D reset_control_assert(kproc->reset); if (ret) { - dev_err(core->dev, "local-reset assert failed, ret =3D %d\n", + dev_err(kproc->dev, "local-reset assert failed, ret =3D %d\n", ret); return ret; } =20 - ret =3D core->ti_sci->ops.dev_ops.put_device(core->ti_sci, - core->ti_sci_id); + ret =3D kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, + kproc->ti_sci_id); if (ret) { - dev_err(core->dev, "module-reset assert failed, ret =3D %d\n", + dev_err(kproc->dev, "module-reset assert failed, ret =3D %d\n", ret); - if (reset_control_deassert(core->reset)) - dev_warn(core->dev, "local-reset deassert back failed\n"); + if (reset_control_deassert(kproc->reset)) + dev_warn(kproc->dev, "local-reset deassert back failed\n"); } =20 return ret; } =20 -static int k3_r5_split_release(struct k3_r5_core *core) +static int k3_r5_split_release(struct k3_r5_rproc *kproc) { int ret; =20 - ret =3D core->ti_sci->ops.dev_ops.get_device(core->ti_sci, - core->ti_sci_id); + ret =3D kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci, + kproc->ti_sci_id); if (ret) { - dev_err(core->dev, "module-reset deassert failed, ret =3D %d\n", + dev_err(kproc->dev, "module-reset deassert failed, ret =3D %d\n", ret); return ret; } =20 - ret =3D reset_control_deassert(core->reset); + ret =3D reset_control_deassert(kproc->reset); if (ret) { - dev_err(core->dev, "local-reset deassert failed, ret =3D %d\n", + dev_err(kproc->dev, "local-reset deassert failed, ret =3D %d\n", ret); - if (core->ti_sci->ops.dev_ops.put_device(core->ti_sci, - core->ti_sci_id)) - dev_warn(core->dev, "module-reset assert back failed\n"); + if (kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, + kproc->ti_sci_id)) + dev_warn(kproc->dev, "module-reset assert back failed\n"); } =20 return ret; @@ -286,11 +288,12 @@ static int k3_r5_split_release(struct k3_r5_core *cor= e) static int k3_r5_lockstep_reset(struct k3_r5_cluster *cluster) { struct k3_r5_core *core; + struct k3_r5_rproc *kproc; int ret; =20 /* assert local reset on all applicable cores */ list_for_each_entry(core, &cluster->cores, elem) { - ret =3D reset_control_assert(core->reset); + ret =3D reset_control_assert(core->kproc->reset); if (ret) { dev_err(core->dev, "local-reset assert failed, ret =3D %d\n", ret); @@ -301,8 +304,9 @@ static int k3_r5_lockstep_reset(struct k3_r5_cluster *c= luster) =20 /* disable PSC modules on all applicable cores */ list_for_each_entry(core, &cluster->cores, elem) { - ret =3D core->ti_sci->ops.dev_ops.put_device(core->ti_sci, - core->ti_sci_id); + kproc =3D core->kproc; + ret =3D kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, + kproc->ti_sci_id); if (ret) { dev_err(core->dev, "module-reset assert failed, ret =3D %d\n", ret); @@ -314,14 +318,15 @@ static int k3_r5_lockstep_reset(struct k3_r5_cluster = *cluster) =20 unroll_module_reset: list_for_each_entry_continue_reverse(core, &cluster->cores, elem) { - if (core->ti_sci->ops.dev_ops.put_device(core->ti_sci, - core->ti_sci_id)) + kproc =3D core->kproc; + if (kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, + kproc->ti_sci_id)) dev_warn(core->dev, "module-reset assert back failed\n"); } core =3D list_last_entry(&cluster->cores, struct k3_r5_core, elem); unroll_local_reset: list_for_each_entry_from_reverse(core, &cluster->cores, elem) { - if (reset_control_deassert(core->reset)) + if (reset_control_deassert(core->kproc->reset)) dev_warn(core->dev, "local-reset deassert back failed\n"); } =20 @@ -331,12 +336,14 @@ static int k3_r5_lockstep_reset(struct k3_r5_cluster = *cluster) static int k3_r5_lockstep_release(struct k3_r5_cluster *cluster) { struct k3_r5_core *core; + struct k3_r5_rproc *kproc; int ret; =20 /* enable PSC modules on all applicable cores */ list_for_each_entry_reverse(core, &cluster->cores, elem) { - ret =3D core->ti_sci->ops.dev_ops.get_device(core->ti_sci, - core->ti_sci_id); + kproc =3D core->kproc; + ret =3D kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci, + kproc->ti_sci_id); if (ret) { dev_err(core->dev, "module-reset deassert failed, ret =3D %d\n", ret); @@ -347,7 +354,7 @@ static int k3_r5_lockstep_release(struct k3_r5_cluster = *cluster) =20 /* deassert local reset on all applicable cores */ list_for_each_entry_reverse(core, &cluster->cores, elem) { - ret =3D reset_control_deassert(core->reset); + ret =3D reset_control_deassert(core->kproc->reset); if (ret) { dev_err(core->dev, "module-reset deassert failed, ret =3D %d\n", ret); @@ -359,29 +366,30 @@ static int k3_r5_lockstep_release(struct k3_r5_cluste= r *cluster) =20 unroll_local_reset: list_for_each_entry_continue(core, &cluster->cores, elem) { - if (reset_control_assert(core->reset)) + if (reset_control_assert(core->kproc->reset)) dev_warn(core->dev, "local-reset assert back failed\n"); } core =3D list_first_entry(&cluster->cores, struct k3_r5_core, elem); unroll_module_reset: list_for_each_entry_from(core, &cluster->cores, elem) { - if (core->ti_sci->ops.dev_ops.put_device(core->ti_sci, - core->ti_sci_id)) + kproc =3D core->kproc; + if (kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, + kproc->ti_sci_id)) dev_warn(core->dev, "module-reset assert back failed\n"); } =20 return ret; } =20 -static inline int k3_r5_core_halt(struct k3_r5_core *core) +static inline int k3_r5_core_halt(struct k3_r5_rproc *kproc) { - return ti_sci_proc_set_control(core->tsp, + return ti_sci_proc_set_control(kproc->tsp, PROC_BOOT_CTRL_FLAG_R5_CORE_HALT, 0); } =20 -static inline int k3_r5_core_run(struct k3_r5_core *core) +static inline int k3_r5_core_run(struct k3_r5_rproc *kproc) { - return ti_sci_proc_set_control(core->tsp, + return ti_sci_proc_set_control(kproc->tsp, 0, PROC_BOOT_CTRL_FLAG_R5_CORE_HALT); } =20 @@ -439,8 +447,8 @@ static int k3_r5_rproc_request_mbox(struct rproc *rproc) static int k3_r5_rproc_prepare(struct rproc *rproc) { struct k3_r5_rproc *kproc =3D rproc->priv; - struct k3_r5_cluster *cluster =3D kproc->cluster; - struct k3_r5_core *core =3D kproc->core, *core0, *core1; + struct k3_r5_core *core =3D kproc->priv, *core0, *core1; + struct k3_r5_cluster *cluster =3D core->cluster; struct device *dev =3D kproc->dev; u32 ctrl =3D 0, cfg =3D 0, stat =3D 0; u64 boot_vec =3D 0; @@ -470,7 +478,7 @@ static int k3_r5_rproc_prepare(struct rproc *rproc) } } =20 - ret =3D ti_sci_proc_get_status(core->tsp, &boot_vec, &cfg, &ctrl, &stat); + ret =3D ti_sci_proc_get_status(kproc->tsp, &boot_vec, &cfg, &ctrl, &stat); if (ret < 0) return ret; mem_init_dis =3D !!(cfg & PROC_BOOT_CFG_FLAG_R5_MEM_INIT_DIS); @@ -478,7 +486,7 @@ static int k3_r5_rproc_prepare(struct rproc *rproc) /* Re-use LockStep-mode reset logic for Single-CPU mode */ ret =3D (cluster->mode =3D=3D CLUSTER_MODE_LOCKSTEP || cluster->mode =3D=3D CLUSTER_MODE_SINGLECPU) ? - k3_r5_lockstep_release(cluster) : k3_r5_split_release(core); + k3_r5_lockstep_release(cluster) : k3_r5_split_release(kproc); if (ret) { dev_err(dev, "unable to enable cores for TCM loading, ret =3D %d\n", ret); @@ -510,10 +518,10 @@ static int k3_r5_rproc_prepare(struct rproc *rproc) * can be effective on all TCM addresses. */ dev_dbg(dev, "zeroing out ATCM memory\n"); - memset_io(core->mem[0].cpu_addr, 0x00, core->mem[0].size); + memset_io(kproc->mem[0].cpu_addr, 0x00, kproc->mem[0].size); =20 dev_dbg(dev, "zeroing out BTCM memory\n"); - memset_io(core->mem[1].cpu_addr, 0x00, core->mem[1].size); + memset_io(kproc->mem[1].cpu_addr, 0x00, kproc->mem[1].size); =20 return 0; } @@ -537,8 +545,8 @@ static int k3_r5_rproc_prepare(struct rproc *rproc) static int k3_r5_rproc_unprepare(struct rproc *rproc) { struct k3_r5_rproc *kproc =3D rproc->priv; - struct k3_r5_cluster *cluster =3D kproc->cluster; - struct k3_r5_core *core =3D kproc->core, *core0, *core1; + struct k3_r5_core *core =3D kproc->priv, *core0, *core1; + struct k3_r5_cluster *cluster =3D core->cluster; struct device *dev =3D kproc->dev; int ret; =20 @@ -565,7 +573,7 @@ static int k3_r5_rproc_unprepare(struct rproc *rproc) /* Re-use LockStep-mode reset logic for Single-CPU mode */ ret =3D (cluster->mode =3D=3D CLUSTER_MODE_LOCKSTEP || cluster->mode =3D=3D CLUSTER_MODE_SINGLECPU) ? - k3_r5_lockstep_reset(cluster) : k3_r5_split_reset(core); + k3_r5_lockstep_reset(cluster) : k3_r5_split_reset(kproc); if (ret) dev_err(dev, "unable to disable cores, ret =3D %d\n", ret); =20 @@ -600,9 +608,9 @@ static int k3_r5_rproc_unprepare(struct rproc *rproc) static int k3_r5_rproc_start(struct rproc *rproc) { struct k3_r5_rproc *kproc =3D rproc->priv; - struct k3_r5_cluster *cluster =3D kproc->cluster; + struct k3_r5_core *core =3D kproc->priv; + struct k3_r5_cluster *cluster =3D core->cluster; struct device *dev =3D kproc->dev; - struct k3_r5_core *core; u32 boot_addr; int ret; =20 @@ -611,20 +619,19 @@ static int k3_r5_rproc_start(struct rproc *rproc) dev_dbg(dev, "booting R5F core using boot addr =3D 0x%x\n", boot_addr); =20 /* boot vector need not be programmed for Core1 in LockStep mode */ - core =3D kproc->core; - ret =3D ti_sci_proc_set_config(core->tsp, boot_addr, 0, 0); + ret =3D ti_sci_proc_set_config(kproc->tsp, boot_addr, 0, 0); if (ret) return ret; =20 /* unhalt/run all applicable cores */ if (cluster->mode =3D=3D CLUSTER_MODE_LOCKSTEP) { list_for_each_entry_reverse(core, &cluster->cores, elem) { - ret =3D k3_r5_core_run(core); + ret =3D k3_r5_core_run(core->kproc); if (ret) goto unroll_core_run; } } else { - ret =3D k3_r5_core_run(core); + ret =3D k3_r5_core_run(core->kproc); if (ret) return ret; } @@ -633,7 +640,7 @@ static int k3_r5_rproc_start(struct rproc *rproc) =20 unroll_core_run: list_for_each_entry_continue(core, &cluster->cores, elem) { - if (k3_r5_core_halt(core)) + if (k3_r5_core_halt(core->kproc)) dev_warn(core->dev, "core halt back failed\n"); } return ret; @@ -666,21 +673,21 @@ static int k3_r5_rproc_start(struct rproc *rproc) static int k3_r5_rproc_stop(struct rproc *rproc) { struct k3_r5_rproc *kproc =3D rproc->priv; - struct k3_r5_cluster *cluster =3D kproc->cluster; - struct k3_r5_core *core =3D kproc->core; + struct k3_r5_core *core =3D kproc->priv; + struct k3_r5_cluster *cluster =3D core->cluster; int ret; =20 /* halt all applicable cores */ if (cluster->mode =3D=3D CLUSTER_MODE_LOCKSTEP) { list_for_each_entry(core, &cluster->cores, elem) { - ret =3D k3_r5_core_halt(core); + ret =3D k3_r5_core_halt(core->kproc); if (ret) { core =3D list_prev_entry(core, elem); goto unroll_core_halt; } } } else { - ret =3D k3_r5_core_halt(core); + ret =3D k3_r5_core_halt(core->kproc); if (ret) goto out; } @@ -689,7 +696,7 @@ static int k3_r5_rproc_stop(struct rproc *rproc) =20 unroll_core_halt: list_for_each_entry_from_reverse(core, &cluster->cores, elem) { - if (k3_r5_core_run(core)) + if (k3_r5_core_run(core->kproc)) dev_warn(core->dev, "core run back failed\n"); } out: @@ -759,7 +766,7 @@ static struct resource_table *k3_r5_get_loaded_rsc_tabl= e(struct rproc *rproc, static void *k3_r5_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len,= bool *is_iomem) { struct k3_r5_rproc *kproc =3D rproc->priv; - struct k3_r5_core *core =3D kproc->core; + struct k3_r5_core *core =3D kproc->priv; void __iomem *va =3D NULL; phys_addr_t bus_addr; u32 dev_addr, offset; @@ -770,22 +777,22 @@ static void *k3_r5_rproc_da_to_va(struct rproc *rproc= , u64 da, size_t len, bool return NULL; =20 /* handle both R5 and SoC views of ATCM and BTCM */ - for (i =3D 0; i < core->num_mems; i++) { - bus_addr =3D core->mem[i].bus_addr; - dev_addr =3D core->mem[i].dev_addr; - size =3D core->mem[i].size; + for (i =3D 0; i < kproc->num_mems; i++) { + bus_addr =3D kproc->mem[i].bus_addr; + dev_addr =3D kproc->mem[i].dev_addr; + size =3D kproc->mem[i].size; =20 /* handle R5-view addresses of TCMs */ if (da >=3D dev_addr && ((da + len) <=3D (dev_addr + size))) { offset =3D da - dev_addr; - va =3D core->mem[i].cpu_addr + offset; + va =3D kproc->mem[i].cpu_addr + offset; return (__force void *)va; } =20 /* handle SoC-view addresses of TCMs */ if (da >=3D bus_addr && ((da + len) <=3D (bus_addr + size))) { offset =3D da - bus_addr; - va =3D core->mem[i].cpu_addr + offset; + va =3D kproc->mem[i].cpu_addr + offset; return (__force void *)va; } } @@ -863,9 +870,9 @@ static const struct rproc_ops k3_r5_rproc_ops =3D { */ static int k3_r5_rproc_configure(struct k3_r5_rproc *kproc) { - struct k3_r5_cluster *cluster =3D kproc->cluster; + struct k3_r5_core *temp, *core0, *core =3D kproc->priv; + struct k3_r5_cluster *cluster =3D core->cluster; struct device *dev =3D kproc->dev; - struct k3_r5_core *core0, *core, *temp; u32 ctrl =3D 0, cfg =3D 0, stat =3D 0; u32 set_cfg =3D 0, clr_cfg =3D 0; u64 boot_vec =3D 0; @@ -879,10 +886,10 @@ static int k3_r5_rproc_configure(struct k3_r5_rproc *= kproc) cluster->mode =3D=3D CLUSTER_MODE_SINGLECORE) { core =3D core0; } else { - core =3D kproc->core; + core =3D kproc->priv; } =20 - ret =3D ti_sci_proc_get_status(core->tsp, &boot_vec, &cfg, &ctrl, + ret =3D ti_sci_proc_get_status(core->kproc->tsp, &boot_vec, &cfg, &ctrl, &stat); if (ret < 0) return ret; @@ -952,7 +959,7 @@ static int k3_r5_rproc_configure(struct k3_r5_rproc *kp= roc) * and TEINIT config is only allowed with Core0. */ list_for_each_entry(temp, &cluster->cores, elem) { - ret =3D k3_r5_core_halt(temp); + ret =3D k3_r5_core_halt(temp->kproc); if (ret) goto out; =20 @@ -960,7 +967,7 @@ static int k3_r5_rproc_configure(struct k3_r5_rproc *kp= roc) clr_cfg &=3D ~PROC_BOOT_CFG_FLAG_R5_LOCKSTEP; clr_cfg &=3D ~PROC_BOOT_CFG_FLAG_R5_TEINIT; } - ret =3D ti_sci_proc_set_config(temp->tsp, boot_vec, + ret =3D ti_sci_proc_set_config(temp->kproc->tsp, boot_vec, set_cfg, clr_cfg); if (ret) goto out; @@ -968,14 +975,14 @@ static int k3_r5_rproc_configure(struct k3_r5_rproc *= kproc) =20 set_cfg =3D PROC_BOOT_CFG_FLAG_R5_LOCKSTEP; clr_cfg =3D 0; - ret =3D ti_sci_proc_set_config(core->tsp, boot_vec, + ret =3D ti_sci_proc_set_config(core->kproc->tsp, boot_vec, set_cfg, clr_cfg); } else { - ret =3D k3_r5_core_halt(core); + ret =3D k3_r5_core_halt(core->kproc); if (ret) goto out; =20 - ret =3D ti_sci_proc_set_config(core->tsp, boot_vec, + ret =3D ti_sci_proc_set_config(core->kproc->tsp, boot_vec, set_cfg, clr_cfg); } =20 @@ -1085,10 +1092,9 @@ static int k3_r5_reserved_mem_init(struct k3_r5_rpro= c *kproc) */ static void k3_r5_adjust_tcm_sizes(struct k3_r5_rproc *kproc) { - struct k3_r5_cluster *cluster =3D kproc->cluster; - struct k3_r5_core *core =3D kproc->core; + struct k3_r5_core *core0, *core =3D kproc->priv; + struct k3_r5_cluster *cluster =3D core->cluster; struct device *cdev =3D core->dev; - struct k3_r5_core *core0; =20 if (cluster->mode =3D=3D CLUSTER_MODE_LOCKSTEP || cluster->mode =3D=3D CLUSTER_MODE_SINGLECPU || @@ -1098,14 +1104,14 @@ static void k3_r5_adjust_tcm_sizes(struct k3_r5_rpr= oc *kproc) =20 core0 =3D list_first_entry(&cluster->cores, struct k3_r5_core, elem); if (core =3D=3D core0) { - WARN_ON(core->mem[0].size !=3D SZ_64K); - WARN_ON(core->mem[1].size !=3D SZ_64K); + WARN_ON(kproc->mem[0].size !=3D SZ_64K); + WARN_ON(kproc->mem[1].size !=3D SZ_64K); =20 - core->mem[0].size /=3D 2; - core->mem[1].size /=3D 2; + kproc->mem[0].size /=3D 2; + kproc->mem[1].size /=3D 2; =20 dev_dbg(cdev, "adjusted TCM sizes, ATCM =3D 0x%zx BTCM =3D 0x%zx\n", - core->mem[0].size, core->mem[1].size); + kproc->mem[0].size, kproc->mem[1].size); } } =20 @@ -1124,22 +1130,21 @@ static void k3_r5_adjust_tcm_sizes(struct k3_r5_rpr= oc *kproc) */ static int k3_r5_rproc_configure_mode(struct k3_r5_rproc *kproc) { - struct k3_r5_cluster *cluster =3D kproc->cluster; - struct k3_r5_core *core =3D kproc->core; + struct k3_r5_core *core0, *core =3D kproc->priv; + struct k3_r5_cluster *cluster =3D core->cluster; struct device *cdev =3D core->dev; bool r_state =3D false, c_state =3D false, lockstep_en =3D false, single_= cpu =3D false; u32 ctrl =3D 0, cfg =3D 0, stat =3D 0, halted =3D 0; u64 boot_vec =3D 0; u32 atcm_enable, btcm_enable, loczrama; - struct k3_r5_core *core0; enum cluster_mode mode =3D cluster->mode; int reset_ctrl_status; int ret; =20 core0 =3D list_first_entry(&cluster->cores, struct k3_r5_core, elem); =20 - ret =3D core->ti_sci->ops.dev_ops.is_on(core->ti_sci, core->ti_sci_id, - &r_state, &c_state); + ret =3D kproc->ti_sci->ops.dev_ops.is_on(kproc->ti_sci, kproc->ti_sci_id, + &r_state, &c_state); if (ret) { dev_err(cdev, "failed to get initial state, mode cannot be determined, r= et =3D %d\n", ret); @@ -1150,7 +1155,7 @@ static int k3_r5_rproc_configure_mode(struct k3_r5_rp= roc *kproc) r_state, c_state); } =20 - reset_ctrl_status =3D reset_control_status(core->reset); + reset_ctrl_status =3D reset_control_status(kproc->reset); if (reset_ctrl_status < 0) { dev_err(cdev, "failed to get initial local reset status, ret =3D %d\n", reset_ctrl_status); @@ -1163,7 +1168,7 @@ static int k3_r5_rproc_configure_mode(struct k3_r5_rp= roc *kproc) */ core->released_from_reset =3D c_state; =20 - ret =3D ti_sci_proc_get_status(core->tsp, &boot_vec, &cfg, &ctrl, + ret =3D ti_sci_proc_get_status(kproc->tsp, &boot_vec, &cfg, &ctrl, &stat); if (ret < 0) { dev_err(cdev, "failed to get initial processor status, ret =3D %d\n", @@ -1220,25 +1225,26 @@ static int k3_r5_rproc_configure_mode(struct k3_r5_= rproc *kproc) core->atcm_enable =3D atcm_enable; core->btcm_enable =3D btcm_enable; core->loczrama =3D loczrama; - core->mem[0].dev_addr =3D loczrama ? 0 : K3_R5_TCM_DEV_ADDR; - core->mem[1].dev_addr =3D loczrama ? K3_R5_TCM_DEV_ADDR : 0; + kproc->mem[0].dev_addr =3D loczrama ? 0 : K3_R5_TCM_DEV_ADDR; + kproc->mem[1].dev_addr =3D loczrama ? K3_R5_TCM_DEV_ADDR : 0; } =20 return ret; } =20 static int k3_r5_core_of_get_internal_memories(struct platform_device *pde= v, - struct k3_r5_core *core) + struct k3_r5_rproc *kproc) { static const char * const mem_names[] =3D {"atcm", "btcm"}; struct device *dev =3D &pdev->dev; + struct k3_r5_core *core =3D kproc->priv; struct resource *res; int num_mems; int i; =20 num_mems =3D ARRAY_SIZE(mem_names); - core->mem =3D devm_kcalloc(dev, num_mems, sizeof(*core->mem), GFP_KERNEL); - if (!core->mem) + kproc->mem =3D devm_kcalloc(dev, num_mems, sizeof(*kproc->mem), GFP_KERNE= L); + if (!kproc->mem) return -ENOMEM; =20 for (i =3D 0; i < num_mems; i++) { @@ -1264,13 +1270,13 @@ static int k3_r5_core_of_get_internal_memories(stru= ct platform_device *pdev, * unaligned data accesses when using memcpy() or memset() * functions (normally seen with device type memory). */ - core->mem[i].cpu_addr =3D devm_ioremap_wc(dev, res->start, - resource_size(res)); - if (!core->mem[i].cpu_addr) { + kproc->mem[i].cpu_addr =3D devm_ioremap_wc(dev, res->start, + resource_size(res)); + if (!kproc->mem[i].cpu_addr) { dev_err(dev, "failed to map %s memory\n", mem_names[i]); return -ENOMEM; } - core->mem[i].bus_addr =3D res->start; + kproc->mem[i].bus_addr =3D res->start; =20 /* * TODO: @@ -1281,20 +1287,20 @@ static int k3_r5_core_of_get_internal_memories(stru= ct platform_device *pdev, * SoCs) based on loczrama setting */ if (!strcmp(mem_names[i], "atcm")) { - core->mem[i].dev_addr =3D core->loczrama ? + kproc->mem[i].dev_addr =3D core->loczrama ? 0 : K3_R5_TCM_DEV_ADDR; } else { - core->mem[i].dev_addr =3D core->loczrama ? + kproc->mem[i].dev_addr =3D core->loczrama ? K3_R5_TCM_DEV_ADDR : 0; } - core->mem[i].size =3D resource_size(res); + kproc->mem[i].size =3D resource_size(res); =20 dev_dbg(dev, "memory %5s: bus addr %pa size 0x%zx va %pK da 0x%x\n", - mem_names[i], &core->mem[i].bus_addr, - core->mem[i].size, core->mem[i].cpu_addr, - core->mem[i].dev_addr); + mem_names[i], &kproc->mem[i].bus_addr, + kproc->mem[i].size, kproc->mem[i].cpu_addr, + kproc->mem[i].dev_addr); } - core->num_mems =3D num_mems; + kproc->num_mems =3D num_mems; =20 return 0; } @@ -1369,6 +1375,7 @@ static int k3_r5_cluster_rproc_init(struct platform_d= evice *pdev) struct device *dev =3D &pdev->dev; struct k3_r5_rproc *kproc; struct k3_r5_core *core, *core1; + struct device_node *np; struct device *cdev; const char *fw_name; struct rproc *rproc; @@ -1377,6 +1384,7 @@ static int k3_r5_cluster_rproc_init(struct platform_d= evice *pdev) core1 =3D list_last_entry(&cluster->cores, struct k3_r5_core, elem); list_for_each_entry(core, &cluster->cores, elem) { cdev =3D core->dev; + np =3D dev_of_node(cdev); ret =3D rproc_of_parse_firmware(cdev, 0, &fw_name); if (ret) { dev_err(dev, "failed to parse firmware-name property, ret =3D %d\n", @@ -1397,11 +1405,63 @@ static int k3_r5_cluster_rproc_init(struct platform= _device *pdev) rproc->recovery_disabled =3D true; =20 kproc =3D rproc->priv; - kproc->cluster =3D cluster; - kproc->core =3D core; + kproc->priv =3D core; kproc->dev =3D cdev; kproc->rproc =3D rproc; - core->rproc =3D rproc; + core->kproc =3D kproc; + + kproc->ti_sci =3D devm_ti_sci_get_by_phandle(cdev, "ti,sci"); + if (IS_ERR(kproc->ti_sci)) { + ret =3D dev_err_probe(cdev, PTR_ERR(kproc->ti_sci), + "failed to get ti-sci handle\n"); + kproc->ti_sci =3D NULL; + goto out; + } + + ret =3D of_property_read_u32(np, "ti,sci-dev-id", &kproc->ti_sci_id); + if (ret) { + dev_err(cdev, "missing 'ti,sci-dev-id' property\n"); + goto out; + } + + kproc->reset =3D devm_reset_control_get_exclusive(cdev, NULL); + if (IS_ERR_OR_NULL(kproc->reset)) { + ret =3D PTR_ERR_OR_ZERO(kproc->reset); + if (!ret) + ret =3D -ENODEV; + dev_err_probe(cdev, ret, "failed to get reset handle\n"); + goto out; + } + + kproc->tsp =3D ti_sci_proc_of_get_tsp(cdev, kproc->ti_sci); + if (IS_ERR(kproc->tsp)) { + ret =3D dev_err_probe(cdev, PTR_ERR(kproc->tsp), + "failed to construct ti-sci proc control\n"); + goto out; + } + + ret =3D k3_r5_core_of_get_internal_memories(to_platform_device(cdev), kp= roc); + if (ret) { + dev_err(cdev, "failed to get internal memories, ret =3D %d\n", + ret); + goto out; + } + + ret =3D ti_sci_proc_request(kproc->tsp); + if (ret < 0) { + dev_err(cdev, "ti_sci_proc_request failed, ret =3D %d\n", ret); + goto out; + } + + ret =3D devm_add_action_or_reset(cdev, k3_r5_release_tsp, kproc->tsp); + if (ret) + goto out; + } + + list_for_each_entry(core, &cluster->cores, elem) { + cdev =3D core->dev; + kproc =3D core->kproc; + rproc =3D kproc->rproc; =20 ret =3D k3_r5_rproc_request_mbox(rproc); if (ret) @@ -1415,7 +1475,7 @@ static int k3_r5_cluster_rproc_init(struct platform_d= evice *pdev) =20 ret =3D k3_r5_rproc_configure(kproc); if (ret) { - dev_err(dev, "initial configure failed, ret =3D %d\n", + dev_err(cdev, "initial configure failed, ret =3D %d\n", ret); goto out; } @@ -1425,14 +1485,14 @@ static int k3_r5_cluster_rproc_init(struct platform= _device *pdev) =20 ret =3D k3_r5_reserved_mem_init(kproc); if (ret) { - dev_err(dev, "reserved memory init failed, ret =3D %d\n", + dev_err(cdev, "reserved memory init failed, ret =3D %d\n", ret); goto out; } =20 - ret =3D devm_rproc_add(dev, rproc); + ret =3D devm_rproc_add(cdev, rproc); if (ret) { - dev_err_probe(dev, ret, "rproc_add failed\n"); + dev_err_probe(cdev, ret, "rproc_add failed\n"); goto out; } =20 @@ -1461,8 +1521,8 @@ static int k3_r5_cluster_rproc_init(struct platform_d= evice *pdev) /* undo core0 upon any failures on core1 in split-mode */ if (cluster->mode =3D=3D CLUSTER_MODE_SPLIT && core =3D=3D core1) { core =3D list_prev_entry(core, elem); - rproc =3D core->rproc; - kproc =3D rproc->priv; + kproc =3D core->kproc; + rproc =3D kproc->rproc; goto err_split; } return ret; @@ -1487,8 +1547,8 @@ static void k3_r5_cluster_rproc_exit(void *data) list_last_entry(&cluster->cores, struct k3_r5_core, elem); =20 list_for_each_entry_from_reverse(core, &cluster->cores, elem) { - rproc =3D core->rproc; - kproc =3D rproc->priv; + kproc =3D core->kproc; + rproc =3D kproc->rproc; =20 if (rproc->state =3D=3D RPROC_ATTACHED) { ret =3D rproc_detach(rproc); @@ -1547,58 +1607,12 @@ static int k3_r5_core_of_init(struct platform_devic= e *pdev) goto err; } =20 - core->ti_sci =3D devm_ti_sci_get_by_phandle(dev, "ti,sci"); - if (IS_ERR(core->ti_sci)) { - ret =3D dev_err_probe(dev, PTR_ERR(core->ti_sci), "failed to get ti-sci = handle\n"); - core->ti_sci =3D NULL; - goto err; - } - - ret =3D of_property_read_u32(np, "ti,sci-dev-id", &core->ti_sci_id); - if (ret) { - dev_err(dev, "missing 'ti,sci-dev-id' property\n"); - goto err; - } - - core->reset =3D devm_reset_control_get_exclusive(dev, NULL); - if (IS_ERR_OR_NULL(core->reset)) { - ret =3D PTR_ERR_OR_ZERO(core->reset); - if (!ret) - ret =3D -ENODEV; - dev_err_probe(dev, ret, "failed to get reset handle\n"); - goto err; - } - - core->tsp =3D ti_sci_proc_of_get_tsp(dev, core->ti_sci); - if (IS_ERR(core->tsp)) { - ret =3D dev_err_probe(dev, PTR_ERR(core->tsp), - "failed to construct ti-sci proc control\n"); - goto err; - } - - ret =3D k3_r5_core_of_get_internal_memories(pdev, core); - if (ret) { - dev_err(dev, "failed to get internal memories, ret =3D %d\n", - ret); - goto err; - } - ret =3D k3_r5_core_of_get_sram_memories(pdev, core); if (ret) { dev_err(dev, "failed to get sram memories, ret =3D %d\n", ret); goto err; } =20 - ret =3D ti_sci_proc_request(core->tsp); - if (ret < 0) { - dev_err(dev, "ti_sci_proc_request failed, ret =3D %d\n", ret); - goto err; - } - - ret =3D devm_add_action_or_reset(dev, k3_r5_release_tsp, core->tsp); - if (ret) - goto err; - platform_set_drvdata(pdev, core); devres_close_group(dev, k3_r5_core_of_init); =20 @@ -1660,6 +1674,7 @@ static int k3_r5_cluster_of_init(struct platform_devi= ce *pdev) } =20 core =3D platform_get_drvdata(cpdev); + core->cluster =3D cluster; put_device(&cpdev->dev); list_add_tail(&core->elem, &cluster->cores); } --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot03.ext.ti.com (fllvem-ot03.ext.ti.com [198.47.19.245]) (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 9646F7DA7F; Tue, 13 May 2025 05:45:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.245 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115158; cv=none; b=UouCy/ZZLzcPGwevw88VMstQgYOZkedJA2Wfs7SEWEPkOTHefy5seHDpT9E8155kpbOT/koIi5f91E9iDVGXznYIIqo27vXJRbUkCk3kEb3sbsiFUrWRgs73Z97VeBdGjsHQdYqpw7wFd97zvPklkRXCJDoSjNSaWUk74GcoGts= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115158; c=relaxed/simple; bh=yIV5ktCzoZITGl6CBIByNpn2+M/1BZoHRyG2ySP5/6w=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=p4UGLB610sJ8Ghhx7PMYQCuQXP89IxTmCbbivTa4RPwxsboh0iwaDoRakgJG69BhKwq87Y7ApT9rkj8+reCBInuNmytbYDDV6n+7xP+R/MWM2iAb0upvq8WeAafhCHsEZtQ3eSpTilXoT2+JXdM2P/WWE4iT8DZKeBBZ2CJ3iSg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=H9bR7TcZ; arc=none smtp.client-ip=198.47.19.245 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="H9bR7TcZ" Received: from lelv0265.itg.ti.com ([10.180.67.224]) by fllvem-ot03.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5jn3M2210759 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:45:49 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115149; bh=eY5t4NrDp64ReFflQzkPOTs5sSWMX/pm+kgpSXRwn48=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=H9bR7TcZG+wD6njgAPKdWiMfjcC38KggXE7ZvtSsfZoOoEU8+OfgaxZ1Ls6VbuC1Y k+tbeu6+CqPO7Sjy4izu212Zx6GRyF49Pcd5r6Pf3XIpPoRj+49Ti2Q7tLxwKghu5/ 0jLWQIcFjy5KDLpctlg5/yrsD40MiJw5UoWkt5uw= Received: from DLEE106.ent.ti.com (dlee106.ent.ti.com [157.170.170.36]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5jmJY032170 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:45:48 -0500 Received: from DLEE100.ent.ti.com (157.170.170.30) by DLEE106.ent.ti.com (157.170.170.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:45:48 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE100.ent.ti.com (157.170.170.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:45:48 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqH131001; Tue, 13 May 2025 00:45:44 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 08/36] remoteproc: k3-r5: Use k3_r5_rproc_mem_data structure for memory info Date: Tue, 13 May 2025 11:14:42 +0530 Message-ID: <20250513054510.3439842-9-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The ti_k3_r5_remoteproc.c driver previously hardcoded device memory region addresses and names. Change this to use the k3_r5_rproc_mem_data structure to store memory information. This aligns with K3 DSP and M4 drivers, and can be refactored out later. Signed-off-by: Beleswar Padhi Reviewed-by: Andrew Davis Tested-by: Judith Mendez --- v12: Changelog: 1. Assign data->num_mems to num_mems. [Mathieu] Link to v11: https://lore.kernel.org/all/20250425104135.830255-8-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-8-b-padhi@ti.com/ v10: Changelog: 1. Collected R/B from v9 version of this patch. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-4-b-padhi@ti.com/ drivers/remoteproc/ti_k3_r5_remoteproc.c | 65 ++++++++++++++++++++---- 1 file changed, 56 insertions(+), 9 deletions(-) diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index 5a460cfdfb4c4..183e211c00550 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -84,18 +84,44 @@ enum cluster_mode { CLUSTER_MODE_SINGLECORE }; =20 +/** + * struct k3_r5_mem_data - memory definitions for a R5 + * @name: name for this memory entry + * @dev_addr: device address for the memory entry + */ +struct k3_r5_mem_data { + const char *name; + const u32 dev_addr; +}; + +/** + * struct k3_r5_dev_data - device data structure for a R5 + * @mems: pointer to memory definitions for a R5 + * @num_mems: number of memory regions in @mems + * @boot_align_addr: boot vector address alignment granularity + * @uses_lreset: flag to denote the need for local reset management + */ +struct k3_r5_dev_data { + const struct k3_r5_mem_data *mems; + u32 num_mems; + u32 boot_align_addr; + bool uses_lreset; +}; + /** * struct k3_r5_soc_data - match data to handle SoC variations * @tcm_is_double: flag to denote the larger unified TCMs in certain modes * @tcm_ecc_autoinit: flag to denote the auto-initialization of TCMs for E= CC * @single_cpu_mode: flag to denote if SoC/IP supports Single-CPU mode * @is_single_core: flag to denote if SoC/IP has only single core R5 + * @core_data: pointer to R5-core-specific device data */ struct k3_r5_soc_data { bool tcm_is_double; bool tcm_ecc_autoinit; bool single_cpu_mode; bool is_single_core; + const struct k3_r5_dev_data *core_data; }; =20 /** @@ -151,6 +177,7 @@ struct k3_r5_core { * @rmem: reserved memory regions data * @num_rmems: number of reserved memory regions * @reset: reset control handle + * @data: pointer to R5-core-specific device data * @tsp: TI-SCI processor control handle * @ti_sci: TI-SCI handle * @ti_sci_id: TI-SCI device identifier @@ -166,6 +193,7 @@ struct k3_r5_rproc { struct k3_r5_mem *rmem; int num_rmems; struct reset_control *reset; + const struct k3_r5_dev_data *data; struct ti_sci_proc *tsp; const struct ti_sci_handle *ti_sci; u32 ti_sci_id; @@ -1235,31 +1263,32 @@ static int k3_r5_rproc_configure_mode(struct k3_r5_= rproc *kproc) static int k3_r5_core_of_get_internal_memories(struct platform_device *pde= v, struct k3_r5_rproc *kproc) { - static const char * const mem_names[] =3D {"atcm", "btcm"}; + const struct k3_r5_dev_data *data =3D kproc->data; struct device *dev =3D &pdev->dev; struct k3_r5_core *core =3D kproc->priv; struct resource *res; int num_mems; int i; =20 - num_mems =3D ARRAY_SIZE(mem_names); - kproc->mem =3D devm_kcalloc(dev, num_mems, sizeof(*kproc->mem), GFP_KERNE= L); + num_mems =3D data->num_mems; + kproc->mem =3D devm_kcalloc(kproc->dev, num_mems, sizeof(*kproc->mem), + GFP_KERNEL); if (!kproc->mem) return -ENOMEM; =20 for (i =3D 0; i < num_mems; i++) { res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, - mem_names[i]); + data->mems[i].name); if (!res) { dev_err(dev, "found no memory resource for %s\n", - mem_names[i]); + data->mems[i].name); return -EINVAL; } if (!devm_request_mem_region(dev, res->start, resource_size(res), dev_name(dev))) { dev_err(dev, "could not request %s region for resource\n", - mem_names[i]); + data->mems[i].name); return -EBUSY; } =20 @@ -1273,7 +1302,8 @@ static int k3_r5_core_of_get_internal_memories(struct= platform_device *pdev, kproc->mem[i].cpu_addr =3D devm_ioremap_wc(dev, res->start, resource_size(res)); if (!kproc->mem[i].cpu_addr) { - dev_err(dev, "failed to map %s memory\n", mem_names[i]); + dev_err(dev, "failed to map %s memory\n", + data->mems[i].name); return -ENOMEM; } kproc->mem[i].bus_addr =3D res->start; @@ -1286,7 +1316,7 @@ static int k3_r5_core_of_get_internal_memories(struct= platform_device *pdev, * addresses 0 and 0x41010000 (same as the bus address on AM65x * SoCs) based on loczrama setting */ - if (!strcmp(mem_names[i], "atcm")) { + if (!strcmp(data->mems[i].name, "atcm")) { kproc->mem[i].dev_addr =3D core->loczrama ? 0 : K3_R5_TCM_DEV_ADDR; } else { @@ -1296,7 +1326,7 @@ static int k3_r5_core_of_get_internal_memories(struct= platform_device *pdev, kproc->mem[i].size =3D resource_size(res); =20 dev_dbg(dev, "memory %5s: bus addr %pa size 0x%zx va %pK da 0x%x\n", - mem_names[i], &kproc->mem[i].bus_addr, + data->mems[i].name, &kproc->mem[i].bus_addr, kproc->mem[i].size, kproc->mem[i].cpu_addr, kproc->mem[i].dev_addr); } @@ -1408,6 +1438,7 @@ static int k3_r5_cluster_rproc_init(struct platform_d= evice *pdev) kproc->priv =3D core; kproc->dev =3D cdev; kproc->rproc =3D rproc; + kproc->data =3D cluster->soc_data->core_data; core->kproc =3D kproc; =20 kproc->ti_sci =3D devm_ti_sci_get_by_phandle(cdev, "ti,sci"); @@ -1772,11 +1803,24 @@ static int k3_r5_probe(struct platform_device *pdev) return 0; } =20 +static const struct k3_r5_mem_data r5_mems[] =3D { + { .name =3D "atcm", .dev_addr =3D 0x0 }, + { .name =3D "btcm", .dev_addr =3D K3_R5_TCM_DEV_ADDR }, +}; + +static const struct k3_r5_dev_data r5_data =3D { + .mems =3D r5_mems, + .num_mems =3D ARRAY_SIZE(r5_mems), + .boot_align_addr =3D 0, + .uses_lreset =3D true, +}; + static const struct k3_r5_soc_data am65_j721e_soc_data =3D { .tcm_is_double =3D false, .tcm_ecc_autoinit =3D false, .single_cpu_mode =3D false, .is_single_core =3D false, + .core_data =3D &r5_data, }; =20 static const struct k3_r5_soc_data j7200_j721s2_soc_data =3D { @@ -1784,6 +1828,7 @@ static const struct k3_r5_soc_data j7200_j721s2_soc_d= ata =3D { .tcm_ecc_autoinit =3D true, .single_cpu_mode =3D false, .is_single_core =3D false, + .core_data =3D &r5_data, }; =20 static const struct k3_r5_soc_data am64_soc_data =3D { @@ -1791,6 +1836,7 @@ static const struct k3_r5_soc_data am64_soc_data =3D { .tcm_ecc_autoinit =3D true, .single_cpu_mode =3D true, .is_single_core =3D false, + .core_data =3D &r5_data, }; =20 static const struct k3_r5_soc_data am62_soc_data =3D { @@ -1798,6 +1844,7 @@ static const struct k3_r5_soc_data am62_soc_data =3D { .tcm_ecc_autoinit =3D true, .single_cpu_mode =3D false, .is_single_core =3D true, + .core_data =3D &r5_data, }; =20 static const struct of_device_id k3_r5_of_match[] =3D { --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from lelvem-ot02.ext.ti.com (lelvem-ot02.ext.ti.com [198.47.23.235]) (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 5F2B81EDA2F; Tue, 13 May 2025 05:46:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.235 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115163; cv=none; b=ARGKue0THxJQH8+2+pok7j+HlqtZd816KgX3xOURiJhd5UDUJg04SIZliK8OiTnL/MXd5y9/deKF6tJRrAOV6Ai32Fzj65PuEN4dV4TlPCn11iOMWLFH3mnBjj3B+OA6nZZVAuZFkZjB36BUMPENVgBnBfbyt59rkikX3JmxhN4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115163; c=relaxed/simple; bh=tbgSf7C0xQLydhBGd8ZQuEGQmKa19a/IllYysgobLz0=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=YPo6fQNd9ssGeomn0ERpJ7lR2Ibq4vIpsgPYYoR0xn/o309vk/8eRCK7timb+M+ju9BJ4JRPGMQ5WVlivKWZjRjq96yRp6B9eBTp0SAlDnuitXtb6ApzP/CJYztQWGs/7lLQTTX2pgJzpRovIuYCrvuLh1Nay4lh9B2GVN4mT80= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=cVHucxkw; arc=none smtp.client-ip=198.47.23.235 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="cVHucxkw" Received: from lelv0266.itg.ti.com ([10.180.67.225]) by lelvem-ot02.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5jrJQ2985533 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:45:53 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115153; bh=09yGL7zeZIImPy9c49v035SGN0vx7Iqh010EdE7WE3U=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=cVHucxkwn/0lHg87gOFS3u+PMABVoV3MJY1PztQetjaMsr2XfdTVR8CRDTT7/pVoz dnb+yFVWyYa4w5hjldvNz/5j+ach2luU04sCYQ5+h7jAccHCcKYvD1B65Ma7Sr/aEQ JlmUSwmaS6VlUh6tJcfsn01BNFBGiqDDfvY/wkX0= Received: from DLEE104.ent.ti.com (dlee104.ent.ti.com [157.170.170.34]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5jrHE027717 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:45:53 -0500 Received: from DLEE103.ent.ti.com (157.170.170.33) by DLEE104.ent.ti.com (157.170.170.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:45:52 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE103.ent.ti.com (157.170.170.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:45:52 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqI131001; Tue, 13 May 2025 00:45:49 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 09/36] remoteproc: k3-{m4/dsp}: Add a void ptr member in rproc internal struct Date: Tue, 13 May 2025 11:14:43 +0530 Message-ID: <20250513054510.3439842-10-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" Introduce a void pointer in the k3_{m4/dsp}_rproc internal data structure which can be used to point to any private data needed by the driver. Currently, the M4/DSP drivers do not have any private data, so the pointer can be left pointing to NULL. This is done to align the data structures with R5 driver which can be factored out at a later stage. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-9-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-9-b-padhi@ti.com/ v10: Changelog: 1. Split [v9 04/26] into [v10 08/33] and [v10 09/33] patches. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-5-b-padhi@ti.com/ drivers/remoteproc/ti_k3_dsp_remoteproc.c | 2 ++ drivers/remoteproc/ti_k3_m4_remoteproc.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 35e8c3cc313c3..2191547529c55 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -76,6 +76,7 @@ struct k3_dsp_dev_data { * @ti_sci_id: TI-SCI device identifier * @mbox: mailbox channel handle * @client: mailbox client to request the mailbox channel + * @priv: Remote processor private data */ struct k3_dsp_rproc { struct device *dev; @@ -91,6 +92,7 @@ struct k3_dsp_rproc { u32 ti_sci_id; struct mbox_chan *mbox; struct mbox_client client; + void *priv; }; =20 /** diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 6cd50b16a8e82..b161770dcb26f 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -60,6 +60,7 @@ struct k3_m4_rproc_mem_data { * @ti_sci_id: TI-SCI device identifier * @mbox: mailbox channel handle * @client: mailbox client to request the mailbox channel + * @priv: Remote processor private data */ struct k3_m4_rproc { struct device *dev; @@ -73,6 +74,7 @@ struct k3_m4_rproc { u32 ti_sci_id; struct mbox_chan *mbox; struct mbox_client client; + void *priv; }; =20 /** --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot03.ext.ti.com (fllvem-ot03.ext.ti.com [198.47.19.245]) (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 74BED1EE7BD; Tue, 13 May 2025 05:46:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.245 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115166; cv=none; b=TAnCgzi9uzYvsRrxvifaUZDnBhJQDjCz5Rtbb0YUdohkvP1TQ4Fmo2E3U8DnjjR+86TZrPMD0qzPvC5+Qf0aH6FnpN+tepGifeoaXjqh4Dc9k0A6mg+L3a4O1Ny04E3rS49ZlBr6gHve6MNNHMmlX6ICxl70bFIPCf0k0g/TiDs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115166; c=relaxed/simple; bh=iDpS7TwY+6rTwfXKEAdrlmRiq01OrY9PlJd8GUULm2I=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=HFCkaYUZ/jj2WH4YUq6l3MTtxLiotFPrtWeBbDoBblUXUCt6nrQmKur8OVtMvZPN9UrNPcEhEQqdeBCjtsEChRQgRdDSj1UXVTMjJCknY5+k30AI7AF1kb5zNPNI07g6yPWH3unqzmwOstM/Ivu92X+i4dEP8pEbLp2o48gpyfo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=G2CeA6j0; arc=none smtp.client-ip=198.47.19.245 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="G2CeA6j0" Received: from lelvem-sh02.itg.ti.com ([10.180.78.226]) by fllvem-ot03.ext.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jve52210791; Tue, 13 May 2025 00:45:57 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115157; bh=5abvST1uqeTTBWKRrEbNjkcmRuKmZQZsIAyCx0+vq4U=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=G2CeA6j0tFUAWlYdNCQSJOGMaizMz7h+qXoIu2oCF69gd8mpGjsVcV9XpSOUuqr6d Mj7w8GzZLpw97nTrfQyhb/raiuqLzubW+RgpMtO6NSAJl6PfukFzXsiixoO4rOOgmd T5LJOThKMJ5GZ9vLEPekixRZmPTtRKpUNyZL8qEc= Received: from DFLE115.ent.ti.com (dfle115.ent.ti.com [10.64.6.36]) by lelvem-sh02.itg.ti.com (8.18.1/8.18.1) with ESMTPS id 54D5jvvC651776 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA256 bits=128 verify=FAIL); Tue, 13 May 2025 00:45:57 -0500 Received: from DFLE113.ent.ti.com (10.64.6.34) by DFLE115.ent.ti.com (10.64.6.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:45:56 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DFLE113.ent.ti.com (10.64.6.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:45:56 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqJ131001; Tue, 13 May 2025 00:45:53 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 10/36] remoteproc: k3-m4: Add pointer to rproc struct within k3_m4_rproc Date: Tue, 13 May 2025 11:14:44 +0530 Message-ID: <20250513054510.3439842-11-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" Add a pointer to the rproc struct within k3_m4_rproc internal struct. This is done to align the M4 internal rproc data structure with R5 driver which can be factored out at a later stage. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-10-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-10-b-padhi@ti.com/ v10: Changelog: 1. Split [v9 04/26] into [v10 08/33] and [v10 09/33] patches.=20 Link to v9: https://lore.kernel.org/all/20250317120622.1746415-5-b-padhi@ti.com/ drivers/remoteproc/ti_k3_m4_remoteproc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index b161770dcb26f..99746618e1b96 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -50,6 +50,7 @@ struct k3_m4_rproc_mem_data { /** * struct k3_m4_rproc - k3 remote processor driver structure * @dev: cached device pointer + * @rproc: remoteproc device handle * @mem: internal memory regions data * @num_mems: number of internal memory regions * @rmem: reserved memory regions data @@ -64,6 +65,7 @@ struct k3_m4_rproc_mem_data { */ struct k3_m4_rproc { struct device *dev; + struct rproc *rproc; struct k3_m4_rproc_mem *mem; int num_mems; struct k3_m4_rproc_mem *rmem; @@ -580,6 +582,7 @@ static int k3_m4_rproc_probe(struct platform_device *pd= ev) rproc->recovery_disabled =3D true; kproc =3D rproc->priv; kproc->dev =3D dev; + kproc->rproc =3D rproc; platform_set_drvdata(pdev, rproc); =20 kproc->ti_sci =3D devm_ti_sci_get_by_phandle(dev, "ti,sci"); --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from lelvem-ot01.ext.ti.com (lelvem-ot01.ext.ti.com [198.47.23.234]) (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 C305D1E5B91; Tue, 13 May 2025 05:46:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115172; cv=none; b=lu5sKHn4zUEwet9r50ox0et9qThSYuK6X4Zg2bVC0siR4eWtzd9nwLHxYmAOOoThYEEAh8Ss5b3MUhcfR0hXoHhff1cEcBulglnEvDgD64fr5xy3k55zU3XpEMjvmlYAl1lEbB/56V8iyQ5aOHQGC0PyQLfCOBkslHuE6EDosds= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115172; c=relaxed/simple; bh=Cw1F0n4WvSmS+0jWqTVOg2AUnVZC7UxluaLsZxudYmQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=MgieEsWr/H2ZxLc1HFFRXLaMtgwMV1iIzgnDjHUkgzq9Tzmam2jrlMgvIhaXoyiWwpNRVqAqHXK5kmf47xY9R4bkbdmW0H6AFJUmsqCKxnhIjZUSV6FfRgsHCWT60nPF87AE3RWiWX85b5i+rKe2VFHfKJHTd/f6hmCNcpjXRNE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=Yjlq2Eet; arc=none smtp.client-ip=198.47.23.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="Yjlq2Eet" Received: from lelvem-sh01.itg.ti.com ([10.180.77.71]) by lelvem-ot01.ext.ti.com (8.15.2/8.15.2) with ESMTP id 54D5k1m22226377; Tue, 13 May 2025 00:46:01 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115161; bh=55adndmFTaQK98+CK+JPLpMmfqyz6XjDJoOUGp6S3zk=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=Yjlq2EettIl3euGpk8hT5+hrA7yOU5mjGBjoF4Na64xTgicbYeMhvK+MTlcVgnQce 50NygR61P1GYNvxQnIooWGnfiPips4+whk+4rysRc/sLHReIXf+wfvmGOo+MY835gv tYQXGaYHVdRZ1simfaDsdiQk6TFHKbqcyDfJmtRw= Received: from DFLE107.ent.ti.com (dfle107.ent.ti.com [10.64.6.28]) by lelvem-sh01.itg.ti.com (8.18.1/8.18.1) with ESMTPS id 54D5k1J21533650 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA256 bits=128 verify=FAIL); Tue, 13 May 2025 00:46:01 -0500 Received: from DFLE106.ent.ti.com (10.64.6.27) by DFLE107.ent.ti.com (10.64.6.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:46:00 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DFLE106.ent.ti.com (10.64.6.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:46:00 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqK131001; Tue, 13 May 2025 00:45:57 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 11/36] remoteproc: k3-m4: Use k3_rproc_mem_data structure for memory info Date: Tue, 13 May 2025 11:14:45 +0530 Message-ID: <20250513054510.3439842-12-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The ti_k3_m4_remoteproc.c driver previously hardcoded device memory region addresses and names. Change this to use the k3_rproc_mem_data structure to store memory information. This aligns with DSP and R5 drivers, and can be refactored out later. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Assign data->num_mems to num_mems. [Mathieu] 2. Move const declaration above variables. [Mathieu] 3. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-11-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-11-b-padhi@ti.com/ v10: Changelog: None Link to v9: https://lore.kernel.org/all/20250317120622.1746415-6-b-padhi@ti.com/ drivers/remoteproc/ti_k3_m4_remoteproc.c | 60 ++++++++++++++++++------ 1 file changed, 45 insertions(+), 15 deletions(-) diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 99746618e1b96..90c0bff113439 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -20,9 +20,6 @@ #include "remoteproc_internal.h" #include "ti_sci_proc.h" =20 -#define K3_M4_IRAM_DEV_ADDR 0x00000 -#define K3_M4_DRAM_DEV_ADDR 0x30000 - /** * struct k3_m4_rproc_mem - internal memory structure * @cpu_addr: MPU virtual address of the memory region @@ -38,15 +35,29 @@ struct k3_m4_rproc_mem { }; =20 /** - * struct k3_m4_rproc_mem_data - memory definitions for a remote processor + * struct k3_m4_mem_data - memory definitions for a remote processor * @name: name for this memory entry * @dev_addr: device address for the memory entry */ -struct k3_m4_rproc_mem_data { +struct k3_m4_mem_data { const char *name; const u32 dev_addr; }; =20 +/** + * struct k3_m4_dev_data - device data structure for a M4 core + * @mems: pointer to memory definitions for a M4 core + * @num_mems: number of memory regions in @mems + * @boot_align_addr: boot vector address alignment granularity + * @uses_lreset: flag to denote the need for local reset management + */ +struct k3_m4_dev_data { + const struct k3_m4_mem_data *mems; + u32 num_mems; + u32 boot_align_addr; + bool uses_lreset; +}; + /** * struct k3_m4_rproc - k3 remote processor driver structure * @dev: cached device pointer @@ -56,6 +67,7 @@ struct k3_m4_rproc_mem_data { * @rmem: reserved memory regions data * @num_rmems: number of reserved memory regions * @reset: reset control handle + * @data: pointer to M4-specific device data * @tsp: TI-SCI processor control handle * @ti_sci: TI-SCI handle * @ti_sci_id: TI-SCI device identifier @@ -71,6 +83,7 @@ struct k3_m4_rproc { struct k3_m4_rproc_mem *rmem; int num_rmems; struct reset_control *reset; + const struct k3_m4_dev_data *data; struct ti_sci_proc *tsp; const struct ti_sci_handle *ti_sci; u32 ti_sci_id; @@ -336,14 +349,13 @@ static void *k3_m4_rproc_da_to_va(struct rproc *rproc= , u64 da, size_t len, bool static int k3_m4_rproc_of_get_memories(struct platform_device *pdev, struct k3_m4_rproc *kproc) { - static const char * const mem_names[] =3D { "iram", "dram" }; - static const u32 mem_addrs[] =3D { K3_M4_IRAM_DEV_ADDR, K3_M4_DRAM_DEV_AD= DR }; + const struct k3_m4_dev_data *data =3D kproc->data; struct device *dev =3D &pdev->dev; struct resource *res; int num_mems; int i; =20 - num_mems =3D ARRAY_SIZE(mem_names); + num_mems =3D data->num_mems; kproc->mem =3D devm_kcalloc(kproc->dev, num_mems, sizeof(*kproc->mem), GFP_KERNEL); if (!kproc->mem) @@ -351,17 +363,17 @@ static int k3_m4_rproc_of_get_memories(struct platfor= m_device *pdev, =20 for (i =3D 0; i < num_mems; i++) { res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, - mem_names[i]); + data->mems[i].name); if (!res) { dev_err(dev, "found no memory resource for %s\n", - mem_names[i]); + data->mems[i].name); return -EINVAL; } if (!devm_request_mem_region(dev, res->start, resource_size(res), dev_name(dev))) { dev_err(dev, "could not request %s region for resource\n", - mem_names[i]); + data->mems[i].name); return -EBUSY; } =20 @@ -369,15 +381,15 @@ static int k3_m4_rproc_of_get_memories(struct platfor= m_device *pdev, resource_size(res)); if (!kproc->mem[i].cpu_addr) { dev_err(dev, "failed to map %s memory\n", - mem_names[i]); + data->mems[i].name); return -ENOMEM; } kproc->mem[i].bus_addr =3D res->start; - kproc->mem[i].dev_addr =3D mem_addrs[i]; + kproc->mem[i].dev_addr =3D data->mems[i].dev_addr; kproc->mem[i].size =3D resource_size(res); =20 dev_dbg(dev, "memory %8s: bus addr %pa size 0x%zx va %pK da 0x%x\n", - mem_names[i], &kproc->mem[i].bus_addr, + data->mems[i].name, &kproc->mem[i].bus_addr, kproc->mem[i].size, kproc->mem[i].cpu_addr, kproc->mem[i].dev_addr); } @@ -561,6 +573,7 @@ static const struct rproc_ops k3_m4_rproc_ops =3D { =20 static int k3_m4_rproc_probe(struct platform_device *pdev) { + const struct k3_m4_dev_data *data; struct device *dev =3D &pdev->dev; struct k3_m4_rproc *kproc; struct rproc *rproc; @@ -569,6 +582,10 @@ static int k3_m4_rproc_probe(struct platform_device *p= dev) bool p_state =3D false; int ret; =20 + data =3D of_device_get_match_data(dev); + if (!data) + return -ENODEV; + ret =3D rproc_of_parse_firmware(dev, 0, &fw_name); if (ret) return dev_err_probe(dev, ret, "failed to parse firmware-name property\n= "); @@ -583,6 +600,7 @@ static int k3_m4_rproc_probe(struct platform_device *pd= ev) kproc =3D rproc->priv; kproc->dev =3D dev; kproc->rproc =3D rproc; + kproc->data =3D data; platform_set_drvdata(pdev, rproc); =20 kproc->ti_sci =3D devm_ti_sci_get_by_phandle(dev, "ti,sci"); @@ -650,8 +668,20 @@ static int k3_m4_rproc_probe(struct platform_device *p= dev) return 0; } =20 +static const struct k3_m4_mem_data am64_m4_mems[] =3D { + { .name =3D "iram", .dev_addr =3D 0x0 }, + { .name =3D "dram", .dev_addr =3D 0x30000 }, +}; + +static const struct k3_m4_dev_data am64_m4_data =3D { + .mems =3D am64_m4_mems, + .num_mems =3D ARRAY_SIZE(am64_m4_mems), + .boot_align_addr =3D SZ_1K, + .uses_lreset =3D true, +}; + static const struct of_device_id k3_m4_of_match[] =3D { - { .compatible =3D "ti,am64-m4fss", }, + { .compatible =3D "ti,am64-m4fss", .data =3D &am64_m4_data, }, { /* sentinel */ }, }; MODULE_DEVICE_TABLE(of, k3_m4_of_match); --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from lelvem-ot02.ext.ti.com (lelvem-ot02.ext.ti.com [198.47.23.235]) (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 06F381E9B34; Tue, 13 May 2025 05:46:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.235 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115180; cv=none; b=X8cCPK2VlK6nGs7PuEepX9gr93CO8KsybXK54wOhqUn0wWFYE9A0ZX5dblkPtzLr0X6wb3bqhYUn8K8gF4APj0+/u3UphB1KMJKY9DTUc+IOWGYgG7DHCzs49j+/btZ042rtJex1haOtx1p60TarA6iMtXPrleDh72H8ix7joXA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115180; c=relaxed/simple; bh=q2aRBC/WdIMOIDJgJKCgznMsZxzv6Y2BODRvntSmO7M=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tIcQeK2L6x0JIHaf+aQdEg0LPK4wr5VbKYvt435WRr3TQceE+APc69c0QffGy+YjB6lTzBzIlyWLQvkrP7jz0Y85fLUp0OmKbG7nkLkmOBEQD6poDlv/S1vEk1xbVGkaNiz143CcAQi5RNM/Jp+xChciwhN70U/MUW6+QJcTUxw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=skhBIm/A; arc=none smtp.client-ip=198.47.23.235 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="skhBIm/A" Received: from fllv0034.itg.ti.com ([10.64.40.246]) by lelvem-ot02.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5k5rj2985601 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:46:05 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115165; bh=Nlg+t0iIZY1uRFMTiviA+uqxiI6apZZRnck8wBZ/UsQ=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=skhBIm/AJYjDNiRutyPlt49Gq+dwZ8NQSoGmhb1sDTgheFB/Ue6ACArvLjZkSFX+q NkYKnek3A53hLvQunBHQt80AXl3x8F/sV2PdcZSslnFA3deoqxYY+RpXrRBNrwBHTc MLylHI+iIMK7q6JUohwOqpp1tSeSUbaGYj6Sy36s= Received: from DLEE111.ent.ti.com (dlee111.ent.ti.com [157.170.170.22]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5k5AL063223 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:46:05 -0500 Received: from DLEE113.ent.ti.com (157.170.170.24) by DLEE111.ent.ti.com (157.170.170.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:46:05 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE113.ent.ti.com (157.170.170.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:46:05 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqL131001; Tue, 13 May 2025 00:46:01 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 12/36] remoteproc: k3: Refactor shared data structures Date: Tue, 13 May 2025 11:14:46 +0530 Message-ID: <20250513054510.3439842-13-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The TI K3 R5, DSP and M4 remoteproc drivers share the same data structure definitions. Refactor the shared data structures into a new common header file, 'ti_k3_common.h', and update the drivers to use the unified data structures. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Updated comment to call out that the header file is refactored out of R5= , DSP and M4 drivers. 2. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-12-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-12-b-padhi@ti.com/ v10: Changelog: None Link to v9: https://lore.kernel.org/all/20250317120622.1746415-10-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.h | 96 ++++++++++++++++ drivers/remoteproc/ti_k3_dsp_remoteproc.c | 120 ++++---------------- drivers/remoteproc/ti_k3_m4_remoteproc.c | 105 +++-------------- drivers/remoteproc/ti_k3_r5_remoteproc.c | 132 +++++----------------- 4 files changed, 166 insertions(+), 287 deletions(-) create mode 100644 drivers/remoteproc/ti_k3_common.h diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h new file mode 100644 index 0000000000000..3e09e090cb337 --- /dev/null +++ b/drivers/remoteproc/ti_k3_common.h @@ -0,0 +1,96 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * TI K3 Remote Processor(s) driver common code + * + * Refactored out of ti_k3_r5_remoteproc.c, ti_k3_dsp_remoteproc.c and + * ti_k3_m4_remoteproc.c. + * + * ti_k3_r5_remoteproc.c: + * Copyright (C) 2017-2022 Texas Instruments Incorporated - https://www.ti= .com/ + * Suman Anna + * + * ti_k3_dsp_remoteproc.c: + * Copyright (C) 2018-2022 Texas Instruments Incorporated - https://www.ti= .com/ + * Suman Anna + * + * ti_k3_m4_remoteproc.c: + * Copyright (C) 2021-2024 Texas Instruments Incorporated - https://www.ti= .com/ + * Hari Nagalla + */ + +#ifndef REMOTEPROC_TI_K3_COMMON_H +#define REMOTEPROC_TI_K3_COMMON_H + +/** + * struct k3_rproc_mem - internal memory structure + * @cpu_addr: MPU virtual address of the memory region + * @bus_addr: Bus address used to access the memory region + * @dev_addr: Device address of the memory region from remote processor vi= ew + * @size: Size of the memory region + */ +struct k3_rproc_mem { + void __iomem *cpu_addr; + phys_addr_t bus_addr; + u32 dev_addr; + size_t size; +}; + +/** + * struct k3_rproc_mem_data - memory definitions for a remote processor + * @name: name for this memory entry + * @dev_addr: device address for the memory entry + */ +struct k3_rproc_mem_data { + const char *name; + const u32 dev_addr; +}; + +/** + * struct k3_rproc_dev_data - device data structure for a remote processor + * @mems: pointer to memory definitions for a remote processor + * @num_mems: number of memory regions in @mems + * @boot_align_addr: boot vector address alignment granularity + * @uses_lreset: flag to denote the need for local reset management + */ +struct k3_rproc_dev_data { + const struct k3_rproc_mem_data *mems; + u32 num_mems; + u32 boot_align_addr; + bool uses_lreset; +}; + +/** + * struct k3_rproc - k3 remote processor driver structure + * @dev: cached device pointer + * @rproc: remoteproc device handle + * @mem: internal memory regions data + * @num_mems: number of internal memory regions + * @rmem: reserved memory regions data + * @num_rmems: number of reserved memory regions + * @reset: reset control handle + * @data: pointer to DSP-specific device data + * @tsp: TI-SCI processor control handle + * @ti_sci: TI-SCI handle + * @ti_sci_id: TI-SCI device identifier + * @mbox: mailbox channel handle + * @client: mailbox client to request the mailbox channel + * @priv: void pointer to carry any private data + */ +struct k3_rproc { + struct device *dev; + struct rproc *rproc; + struct k3_rproc_mem *mem; + int num_mems; + struct k3_rproc_mem *rmem; + int num_rmems; + struct reset_control *reset; + const struct k3_rproc_dev_data *data; + struct ti_sci_proc *tsp; + const struct ti_sci_handle *ti_sci; + u32 ti_sci_id; + struct mbox_chan *mbox; + struct mbox_client client; + void *priv; +}; + +#endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 2191547529c55..e92fab831670c 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -20,81 +20,10 @@ #include "omap_remoteproc.h" #include "remoteproc_internal.h" #include "ti_sci_proc.h" +#include "ti_k3_common.h" =20 #define KEYSTONE_RPROC_LOCAL_ADDRESS_MASK (SZ_16M - 1) =20 -/** - * struct k3_dsp_mem - internal memory structure - * @cpu_addr: MPU virtual address of the memory region - * @bus_addr: Bus address used to access the memory region - * @dev_addr: Device address of the memory region from DSP view - * @size: Size of the memory region - */ -struct k3_dsp_mem { - void __iomem *cpu_addr; - phys_addr_t bus_addr; - u32 dev_addr; - size_t size; -}; - -/** - * struct k3_dsp_mem_data - memory definitions for a DSP - * @name: name for this memory entry - * @dev_addr: device address for the memory entry - */ -struct k3_dsp_mem_data { - const char *name; - const u32 dev_addr; -}; - -/** - * struct k3_dsp_dev_data - device data structure for a DSP - * @mems: pointer to memory definitions for a DSP - * @num_mems: number of memory regions in @mems - * @boot_align_addr: boot vector address alignment granularity - * @uses_lreset: flag to denote the need for local reset management - */ -struct k3_dsp_dev_data { - const struct k3_dsp_mem_data *mems; - u32 num_mems; - u32 boot_align_addr; - bool uses_lreset; -}; - -/** - * struct k3_dsp_rproc - k3 DSP remote processor driver structure - * @dev: cached device pointer - * @rproc: remoteproc device handle - * @mem: internal memory regions data - * @num_mems: number of internal memory regions - * @rmem: reserved memory regions data - * @num_rmems: number of reserved memory regions - * @reset: reset control handle - * @data: pointer to DSP-specific device data - * @tsp: TI-SCI processor control handle - * @ti_sci: TI-SCI handle - * @ti_sci_id: TI-SCI device identifier - * @mbox: mailbox channel handle - * @client: mailbox client to request the mailbox channel - * @priv: Remote processor private data - */ -struct k3_dsp_rproc { - struct device *dev; - struct rproc *rproc; - struct k3_dsp_mem *mem; - int num_mems; - struct k3_dsp_mem *rmem; - int num_rmems; - struct reset_control *reset; - const struct k3_dsp_dev_data *data; - struct ti_sci_proc *tsp; - const struct ti_sci_handle *ti_sci; - u32 ti_sci_id; - struct mbox_chan *mbox; - struct mbox_client client; - void *priv; -}; - /** * k3_dsp_rproc_mbox_callback() - inbound mailbox message handler * @client: mailbox client pointer used for requesting the mailbox channel @@ -111,8 +40,7 @@ struct k3_dsp_rproc { */ static void k3_dsp_rproc_mbox_callback(struct mbox_client *client, void *d= ata) { - struct k3_dsp_rproc *kproc =3D container_of(client, struct k3_dsp_rproc, - client); + struct k3_rproc *kproc =3D container_of(client, struct k3_rproc, client); struct device *dev =3D kproc->rproc->dev.parent; const char *name =3D kproc->rproc->name; u32 msg =3D omap_mbox_message(data); @@ -152,7 +80,7 @@ static void k3_dsp_rproc_mbox_callback(struct mbox_clien= t *client, void *data) */ static void k3_dsp_rproc_kick(struct rproc *rproc, int vqid) { - struct k3_dsp_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D rproc->dev.parent; mbox_msg_t msg =3D (mbox_msg_t)vqid; int ret; @@ -165,7 +93,7 @@ static void k3_dsp_rproc_kick(struct rproc *rproc, int v= qid) } =20 /* Put the DSP processor into reset */ -static int k3_dsp_rproc_reset(struct k3_dsp_rproc *kproc) +static int k3_dsp_rproc_reset(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; int ret; @@ -191,7 +119,7 @@ static int k3_dsp_rproc_reset(struct k3_dsp_rproc *kpro= c) } =20 /* Release the DSP processor from reset */ -static int k3_dsp_rproc_release(struct k3_dsp_rproc *kproc) +static int k3_dsp_rproc_release(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; int ret; @@ -220,7 +148,7 @@ static int k3_dsp_rproc_release(struct k3_dsp_rproc *kp= roc) =20 static int k3_dsp_rproc_request_mbox(struct rproc *rproc) { - struct k3_dsp_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct mbox_client *client =3D &kproc->client; struct device *dev =3D kproc->dev; int ret; @@ -264,7 +192,7 @@ static int k3_dsp_rproc_request_mbox(struct rproc *rpro= c) */ static int k3_dsp_rproc_prepare(struct rproc *rproc) { - struct k3_dsp_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; int ret; =20 @@ -288,7 +216,7 @@ static int k3_dsp_rproc_prepare(struct rproc *rproc) */ static int k3_dsp_rproc_unprepare(struct rproc *rproc) { - struct k3_dsp_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; int ret; =20 @@ -309,7 +237,7 @@ static int k3_dsp_rproc_unprepare(struct rproc *rproc) */ static int k3_dsp_rproc_start(struct rproc *rproc) { - struct k3_dsp_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; u32 boot_addr; int ret; @@ -341,7 +269,7 @@ static int k3_dsp_rproc_start(struct rproc *rproc) */ static int k3_dsp_rproc_stop(struct rproc *rproc) { - struct k3_dsp_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; =20 k3_dsp_rproc_reset(kproc); =20 @@ -381,7 +309,7 @@ static int k3_dsp_rproc_detach(struct rproc *rproc) { r= eturn 0; } static struct resource_table *k3_dsp_get_loaded_rsc_table(struct rproc *rp= roc, size_t *rsc_table_sz) { - struct k3_dsp_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; =20 if (!kproc->rmem[0].cpu_addr) { @@ -410,7 +338,7 @@ static struct resource_table *k3_dsp_get_loaded_rsc_tab= le(struct rproc *rproc, */ static void *k3_dsp_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len= , bool *is_iomem) { - struct k3_dsp_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; void __iomem *va =3D NULL; phys_addr_t bus_addr; u32 dev_addr, offset; @@ -467,9 +395,9 @@ static const struct rproc_ops k3_dsp_rproc_ops =3D { }; =20 static int k3_dsp_rproc_of_get_memories(struct platform_device *pdev, - struct k3_dsp_rproc *kproc) + struct k3_rproc *kproc) { - const struct k3_dsp_dev_data *data =3D kproc->data; + const struct k3_rproc_dev_data *data =3D kproc->data; struct device *dev =3D &pdev->dev; struct resource *res; int num_mems =3D 0; @@ -525,7 +453,7 @@ static void k3_dsp_mem_release(void *data) of_reserved_mem_device_release(dev); } =20 -static int k3_dsp_reserved_mem_init(struct k3_dsp_rproc *kproc) +static int k3_dsp_reserved_mem_init(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; struct device_node *np =3D dev->of_node; @@ -606,8 +534,8 @@ static int k3_dsp_rproc_probe(struct platform_device *p= dev) { struct device *dev =3D &pdev->dev; struct device_node *np =3D dev->of_node; - const struct k3_dsp_dev_data *data; - struct k3_dsp_rproc *kproc; + const struct k3_rproc_dev_data *data; + struct k3_rproc *kproc; struct rproc *rproc; const char *fw_name; bool p_state =3D false; @@ -723,7 +651,7 @@ static int k3_dsp_rproc_probe(struct platform_device *p= dev) =20 static void k3_dsp_rproc_remove(struct platform_device *pdev) { - struct k3_dsp_rproc *kproc =3D platform_get_drvdata(pdev); + struct k3_rproc *kproc =3D platform_get_drvdata(pdev); struct rproc *rproc =3D kproc->rproc; struct device *dev =3D &pdev->dev; int ret; @@ -737,37 +665,37 @@ static void k3_dsp_rproc_remove(struct platform_devic= e *pdev) mbox_free_channel(kproc->mbox); } =20 -static const struct k3_dsp_mem_data c66_mems[] =3D { +static const struct k3_rproc_mem_data c66_mems[] =3D { { .name =3D "l2sram", .dev_addr =3D 0x800000 }, { .name =3D "l1pram", .dev_addr =3D 0xe00000 }, { .name =3D "l1dram", .dev_addr =3D 0xf00000 }, }; =20 /* C71x cores only have a L1P Cache, there are no L1P SRAMs */ -static const struct k3_dsp_mem_data c71_mems[] =3D { +static const struct k3_rproc_mem_data c71_mems[] =3D { { .name =3D "l2sram", .dev_addr =3D 0x800000 }, { .name =3D "l1dram", .dev_addr =3D 0xe00000 }, }; =20 -static const struct k3_dsp_mem_data c7xv_mems[] =3D { +static const struct k3_rproc_mem_data c7xv_mems[] =3D { { .name =3D "l2sram", .dev_addr =3D 0x800000 }, }; =20 -static const struct k3_dsp_dev_data c66_data =3D { +static const struct k3_rproc_dev_data c66_data =3D { .mems =3D c66_mems, .num_mems =3D ARRAY_SIZE(c66_mems), .boot_align_addr =3D SZ_1K, .uses_lreset =3D true, }; =20 -static const struct k3_dsp_dev_data c71_data =3D { +static const struct k3_rproc_dev_data c71_data =3D { .mems =3D c71_mems, .num_mems =3D ARRAY_SIZE(c71_mems), .boot_align_addr =3D SZ_2M, .uses_lreset =3D false, }; =20 -static const struct k3_dsp_dev_data c7xv_data =3D { +static const struct k3_rproc_dev_data c7xv_data =3D { .mems =3D c7xv_mems, .num_mems =3D ARRAY_SIZE(c7xv_mems), .boot_align_addr =3D SZ_2M, diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 90c0bff113439..053d50cf5e72b 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -19,78 +19,7 @@ #include "omap_remoteproc.h" #include "remoteproc_internal.h" #include "ti_sci_proc.h" - -/** - * struct k3_m4_rproc_mem - internal memory structure - * @cpu_addr: MPU virtual address of the memory region - * @bus_addr: Bus address used to access the memory region - * @dev_addr: Device address of the memory region from remote processor vi= ew - * @size: Size of the memory region - */ -struct k3_m4_rproc_mem { - void __iomem *cpu_addr; - phys_addr_t bus_addr; - u32 dev_addr; - size_t size; -}; - -/** - * struct k3_m4_mem_data - memory definitions for a remote processor - * @name: name for this memory entry - * @dev_addr: device address for the memory entry - */ -struct k3_m4_mem_data { - const char *name; - const u32 dev_addr; -}; - -/** - * struct k3_m4_dev_data - device data structure for a M4 core - * @mems: pointer to memory definitions for a M4 core - * @num_mems: number of memory regions in @mems - * @boot_align_addr: boot vector address alignment granularity - * @uses_lreset: flag to denote the need for local reset management - */ -struct k3_m4_dev_data { - const struct k3_m4_mem_data *mems; - u32 num_mems; - u32 boot_align_addr; - bool uses_lreset; -}; - -/** - * struct k3_m4_rproc - k3 remote processor driver structure - * @dev: cached device pointer - * @rproc: remoteproc device handle - * @mem: internal memory regions data - * @num_mems: number of internal memory regions - * @rmem: reserved memory regions data - * @num_rmems: number of reserved memory regions - * @reset: reset control handle - * @data: pointer to M4-specific device data - * @tsp: TI-SCI processor control handle - * @ti_sci: TI-SCI handle - * @ti_sci_id: TI-SCI device identifier - * @mbox: mailbox channel handle - * @client: mailbox client to request the mailbox channel - * @priv: Remote processor private data - */ -struct k3_m4_rproc { - struct device *dev; - struct rproc *rproc; - struct k3_m4_rproc_mem *mem; - int num_mems; - struct k3_m4_rproc_mem *rmem; - int num_rmems; - struct reset_control *reset; - const struct k3_m4_dev_data *data; - struct ti_sci_proc *tsp; - const struct ti_sci_handle *ti_sci; - u32 ti_sci_id; - struct mbox_chan *mbox; - struct mbox_client client; - void *priv; -}; +#include "ti_k3_common.h" =20 /** * k3_m4_rproc_mbox_callback() - inbound mailbox message handler @@ -147,7 +76,7 @@ static void k3_m4_rproc_mbox_callback(struct mbox_client= *client, void *data) */ static void k3_m4_rproc_kick(struct rproc *rproc, int vqid) { - struct k3_m4_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; u32 msg =3D (u32)vqid; int ret; @@ -163,7 +92,7 @@ static void k3_m4_rproc_kick(struct rproc *rproc, int vq= id) ret); } =20 -static int k3_m4_rproc_ping_mbox(struct k3_m4_rproc *kproc) +static int k3_m4_rproc_ping_mbox(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; int ret; @@ -195,7 +124,7 @@ static int k3_m4_rproc_ping_mbox(struct k3_m4_rproc *kp= roc) */ static int k3_m4_rproc_prepare(struct rproc *rproc) { - struct k3_m4_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; int ret; =20 @@ -240,7 +169,7 @@ static int k3_m4_rproc_prepare(struct rproc *rproc) */ static int k3_m4_rproc_unprepare(struct rproc *rproc) { - struct k3_m4_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; int ret; =20 @@ -271,7 +200,7 @@ static int k3_m4_rproc_unprepare(struct rproc *rproc) static struct resource_table *k3_m4_get_loaded_rsc_table(struct rproc *rpr= oc, size_t *rsc_table_sz) { - struct k3_m4_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; =20 if (!kproc->rmem[0].cpu_addr) { @@ -301,7 +230,7 @@ static struct resource_table *k3_m4_get_loaded_rsc_tabl= e(struct rproc *rproc, */ static void *k3_m4_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len,= bool *is_iomem) { - struct k3_m4_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; void __iomem *va =3D NULL; phys_addr_t bus_addr; u32 dev_addr, offset; @@ -347,9 +276,9 @@ static void *k3_m4_rproc_da_to_va(struct rproc *rproc, = u64 da, size_t len, bool } =20 static int k3_m4_rproc_of_get_memories(struct platform_device *pdev, - struct k3_m4_rproc *kproc) + struct k3_rproc *kproc) { - const struct k3_m4_dev_data *data =3D kproc->data; + const struct k3_rproc_dev_data *data =3D kproc->data; struct device *dev =3D &pdev->dev; struct resource *res; int num_mems; @@ -405,7 +334,7 @@ static void k3_m4_rproc_dev_mem_release(void *data) of_reserved_mem_device_release(dev); } =20 -static int k3_m4_reserved_mem_init(struct k3_m4_rproc *kproc) +static int k3_m4_reserved_mem_init(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; struct device_node *np =3D dev->of_node; @@ -490,7 +419,7 @@ static void k3_m4_release_tsp(void *data) */ static int k3_m4_rproc_start(struct rproc *rproc) { - struct k3_m4_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; int ret; =20 @@ -515,7 +444,7 @@ static int k3_m4_rproc_start(struct rproc *rproc) */ static int k3_m4_rproc_stop(struct rproc *rproc) { - struct k3_m4_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; int ret; =20 @@ -537,7 +466,7 @@ static int k3_m4_rproc_stop(struct rproc *rproc) */ static int k3_m4_rproc_attach(struct rproc *rproc) { - struct k3_m4_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; int ret; =20 ret =3D k3_m4_rproc_ping_mbox(kproc); @@ -573,9 +502,9 @@ static const struct rproc_ops k3_m4_rproc_ops =3D { =20 static int k3_m4_rproc_probe(struct platform_device *pdev) { - const struct k3_m4_dev_data *data; + const struct k3_rproc_dev_data *data; struct device *dev =3D &pdev->dev; - struct k3_m4_rproc *kproc; + struct k3_rproc *kproc; struct rproc *rproc; const char *fw_name; bool r_state =3D false; @@ -668,12 +597,12 @@ static int k3_m4_rproc_probe(struct platform_device *= pdev) return 0; } =20 -static const struct k3_m4_mem_data am64_m4_mems[] =3D { +static const struct k3_rproc_mem_data am64_m4_mems[] =3D { { .name =3D "iram", .dev_addr =3D 0x0 }, { .name =3D "dram", .dev_addr =3D 0x30000 }, }; =20 -static const struct k3_m4_dev_data am64_m4_data =3D { +static const struct k3_rproc_dev_data am64_m4_data =3D { .mems =3D am64_m4_mems, .num_mems =3D ARRAY_SIZE(am64_m4_mems), .boot_align_addr =3D SZ_1K, diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index 183e211c00550..ec9101972ff9e 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -26,6 +26,7 @@ #include "omap_remoteproc.h" #include "remoteproc_internal.h" #include "ti_sci_proc.h" +#include "ti_k3_common.h" =20 /* This address can either be for ATCM or BTCM with the other at address 0= x0 */ #define K3_R5_TCM_DEV_ADDR 0x41010000 @@ -55,20 +56,6 @@ /* Applicable to only AM64x SoCs */ #define PROC_BOOT_STATUS_FLAG_R5_SINGLECORE_ONLY 0x00000200 =20 -/** - * struct k3_r5_mem - internal memory structure - * @cpu_addr: MPU virtual address of the memory region - * @bus_addr: Bus address used to access the memory region - * @dev_addr: Device address from remoteproc view - * @size: Size of the memory region - */ -struct k3_r5_mem { - void __iomem *cpu_addr; - phys_addr_t bus_addr; - u32 dev_addr; - size_t size; -}; - /* * All cluster mode values are not applicable on all SoCs. The following * are the modes supported on various SoCs: @@ -84,30 +71,6 @@ enum cluster_mode { CLUSTER_MODE_SINGLECORE }; =20 -/** - * struct k3_r5_mem_data - memory definitions for a R5 - * @name: name for this memory entry - * @dev_addr: device address for the memory entry - */ -struct k3_r5_mem_data { - const char *name; - const u32 dev_addr; -}; - -/** - * struct k3_r5_dev_data - device data structure for a R5 - * @mems: pointer to memory definitions for a R5 - * @num_mems: number of memory regions in @mems - * @boot_align_addr: boot vector address alignment granularity - * @uses_lreset: flag to denote the need for local reset management - */ -struct k3_r5_dev_data { - const struct k3_r5_mem_data *mems; - u32 num_mems; - u32 boot_align_addr; - bool uses_lreset; -}; - /** * struct k3_r5_soc_data - match data to handle SoC variations * @tcm_is_double: flag to denote the larger unified TCMs in certain modes @@ -121,7 +84,7 @@ struct k3_r5_soc_data { bool tcm_ecc_autoinit; bool single_cpu_mode; bool is_single_core; - const struct k3_r5_dev_data *core_data; + const struct k3_rproc_dev_data *core_data; }; =20 /** @@ -140,8 +103,6 @@ struct k3_r5_cluster { const struct k3_r5_soc_data *soc_data; }; =20 -struct k3_r5_rproc; - /** * struct k3_r5_core - K3 R5 core structure * @elem: linked list item @@ -158,9 +119,9 @@ struct k3_r5_rproc; struct k3_r5_core { struct list_head elem; struct device *dev; - struct k3_r5_rproc *kproc; + struct k3_rproc *kproc; struct k3_r5_cluster *cluster; - struct k3_r5_mem *sram; + struct k3_rproc_mem *sram; int num_sram; u32 atcm_enable; u32 btcm_enable; @@ -168,40 +129,6 @@ struct k3_r5_core { bool released_from_reset; }; =20 -/** - * struct k3_r5_rproc - K3 remote processor state - * @dev: cached device pointer - * @rproc: rproc handle - * @mem: internal memory regions data - * @num_mems: number of internal memory regions - * @rmem: reserved memory regions data - * @num_rmems: number of reserved memory regions - * @reset: reset control handle - * @data: pointer to R5-core-specific device data - * @tsp: TI-SCI processor control handle - * @ti_sci: TI-SCI handle - * @ti_sci_id: TI-SCI device identifier - * @mbox: mailbox channel handle - * @client: mailbox client to request the mailbox channel - * @priv: Remote processor private data - */ -struct k3_r5_rproc { - struct device *dev; - struct rproc *rproc; - struct k3_r5_mem *mem; - int num_mems; - struct k3_r5_mem *rmem; - int num_rmems; - struct reset_control *reset; - const struct k3_r5_dev_data *data; - struct ti_sci_proc *tsp; - const struct ti_sci_handle *ti_sci; - u32 ti_sci_id; - struct mbox_chan *mbox; - struct mbox_client client; - void *priv; -}; - /** * k3_r5_rproc_mbox_callback() - inbound mailbox message handler * @client: mailbox client pointer used for requesting the mailbox channel @@ -218,8 +145,7 @@ struct k3_r5_rproc { */ static void k3_r5_rproc_mbox_callback(struct mbox_client *client, void *da= ta) { - struct k3_r5_rproc *kproc =3D container_of(client, struct k3_r5_rproc, - client); + struct k3_rproc *kproc =3D container_of(client, struct k3_rproc, client); struct device *dev =3D kproc->rproc->dev.parent; const char *name =3D kproc->rproc->name; u32 msg =3D omap_mbox_message(data); @@ -254,7 +180,7 @@ static void k3_r5_rproc_mbox_callback(struct mbox_clien= t *client, void *data) /* kick a virtqueue */ static void k3_r5_rproc_kick(struct rproc *rproc, int vqid) { - struct k3_r5_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D rproc->dev.parent; mbox_msg_t msg =3D (mbox_msg_t)vqid; int ret; @@ -266,7 +192,7 @@ static void k3_r5_rproc_kick(struct rproc *rproc, int v= qid) ret); } =20 -static int k3_r5_split_reset(struct k3_r5_rproc *kproc) +static int k3_r5_split_reset(struct k3_rproc *kproc) { int ret; =20 @@ -289,7 +215,7 @@ static int k3_r5_split_reset(struct k3_r5_rproc *kproc) return ret; } =20 -static int k3_r5_split_release(struct k3_r5_rproc *kproc) +static int k3_r5_split_release(struct k3_rproc *kproc) { int ret; =20 @@ -316,7 +242,7 @@ static int k3_r5_split_release(struct k3_r5_rproc *kpro= c) static int k3_r5_lockstep_reset(struct k3_r5_cluster *cluster) { struct k3_r5_core *core; - struct k3_r5_rproc *kproc; + struct k3_rproc *kproc; int ret; =20 /* assert local reset on all applicable cores */ @@ -364,7 +290,7 @@ static int k3_r5_lockstep_reset(struct k3_r5_cluster *c= luster) static int k3_r5_lockstep_release(struct k3_r5_cluster *cluster) { struct k3_r5_core *core; - struct k3_r5_rproc *kproc; + struct k3_rproc *kproc; int ret; =20 /* enable PSC modules on all applicable cores */ @@ -409,13 +335,13 @@ static int k3_r5_lockstep_release(struct k3_r5_cluste= r *cluster) return ret; } =20 -static inline int k3_r5_core_halt(struct k3_r5_rproc *kproc) +static inline int k3_r5_core_halt(struct k3_rproc *kproc) { return ti_sci_proc_set_control(kproc->tsp, PROC_BOOT_CTRL_FLAG_R5_CORE_HALT, 0); } =20 -static inline int k3_r5_core_run(struct k3_r5_rproc *kproc) +static inline int k3_r5_core_run(struct k3_rproc *kproc) { return ti_sci_proc_set_control(kproc->tsp, 0, PROC_BOOT_CTRL_FLAG_R5_CORE_HALT); @@ -423,7 +349,7 @@ static inline int k3_r5_core_run(struct k3_r5_rproc *kp= roc) =20 static int k3_r5_rproc_request_mbox(struct rproc *rproc) { - struct k3_r5_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct mbox_client *client =3D &kproc->client; struct device *dev =3D kproc->dev; int ret; @@ -474,7 +400,7 @@ static int k3_r5_rproc_request_mbox(struct rproc *rproc) */ static int k3_r5_rproc_prepare(struct rproc *rproc) { - struct k3_r5_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct k3_r5_core *core =3D kproc->priv, *core0, *core1; struct k3_r5_cluster *cluster =3D core->cluster; struct device *dev =3D kproc->dev; @@ -572,7 +498,7 @@ static int k3_r5_rproc_prepare(struct rproc *rproc) */ static int k3_r5_rproc_unprepare(struct rproc *rproc) { - struct k3_r5_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct k3_r5_core *core =3D kproc->priv, *core0, *core1; struct k3_r5_cluster *cluster =3D core->cluster; struct device *dev =3D kproc->dev; @@ -635,7 +561,7 @@ static int k3_r5_rproc_unprepare(struct rproc *rproc) */ static int k3_r5_rproc_start(struct rproc *rproc) { - struct k3_r5_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct k3_r5_core *core =3D kproc->priv; struct k3_r5_cluster *cluster =3D core->cluster; struct device *dev =3D kproc->dev; @@ -700,7 +626,7 @@ static int k3_r5_rproc_start(struct rproc *rproc) */ static int k3_r5_rproc_stop(struct rproc *rproc) { - struct k3_r5_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct k3_r5_core *core =3D kproc->priv; struct k3_r5_cluster *cluster =3D core->cluster; int ret; @@ -764,7 +690,7 @@ static int k3_r5_rproc_detach(struct rproc *rproc) { re= turn 0; } static struct resource_table *k3_r5_get_loaded_rsc_table(struct rproc *rpr= oc, size_t *rsc_table_sz) { - struct k3_r5_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct device *dev =3D kproc->dev; =20 if (!kproc->rmem[0].cpu_addr) { @@ -793,7 +719,7 @@ static struct resource_table *k3_r5_get_loaded_rsc_tabl= e(struct rproc *rproc, */ static void *k3_r5_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len,= bool *is_iomem) { - struct k3_r5_rproc *kproc =3D rproc->priv; + struct k3_rproc *kproc =3D rproc->priv; struct k3_r5_core *core =3D kproc->priv; void __iomem *va =3D NULL; phys_addr_t bus_addr; @@ -896,7 +822,7 @@ static const struct rproc_ops k3_r5_rproc_ops =3D { * both the cores with the same settings, before reconfiguing again for * LockStep mode. */ -static int k3_r5_rproc_configure(struct k3_r5_rproc *kproc) +static int k3_r5_rproc_configure(struct k3_rproc *kproc) { struct k3_r5_core *temp, *core0, *core =3D kproc->priv; struct k3_r5_cluster *cluster =3D core->cluster; @@ -1025,7 +951,7 @@ static void k3_r5_mem_release(void *data) of_reserved_mem_device_release(dev); } =20 -static int k3_r5_reserved_mem_init(struct k3_r5_rproc *kproc) +static int k3_r5_reserved_mem_init(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; struct device_node *np =3D dev_of_node(dev); @@ -1118,7 +1044,7 @@ static int k3_r5_reserved_mem_init(struct k3_r5_rproc= *kproc) * supported SoCs. The Core0 TCM sizes therefore have to be adjusted to on= ly * half the original size in Split mode. */ -static void k3_r5_adjust_tcm_sizes(struct k3_r5_rproc *kproc) +static void k3_r5_adjust_tcm_sizes(struct k3_rproc *kproc) { struct k3_r5_core *core0, *core =3D kproc->priv; struct k3_r5_cluster *cluster =3D core->cluster; @@ -1156,7 +1082,7 @@ static void k3_r5_adjust_tcm_sizes(struct k3_r5_rproc= *kproc) * actual values configured by bootloader. The driver internal device memo= ry * addresses for TCMs are also updated. */ -static int k3_r5_rproc_configure_mode(struct k3_r5_rproc *kproc) +static int k3_r5_rproc_configure_mode(struct k3_rproc *kproc) { struct k3_r5_core *core0, *core =3D kproc->priv; struct k3_r5_cluster *cluster =3D core->cluster; @@ -1261,9 +1187,9 @@ static int k3_r5_rproc_configure_mode(struct k3_r5_rp= roc *kproc) } =20 static int k3_r5_core_of_get_internal_memories(struct platform_device *pde= v, - struct k3_r5_rproc *kproc) + struct k3_rproc *kproc) { - const struct k3_r5_dev_data *data =3D kproc->data; + const struct k3_rproc_dev_data *data =3D kproc->data; struct device *dev =3D &pdev->dev; struct k3_r5_core *core =3D kproc->priv; struct resource *res; @@ -1403,7 +1329,7 @@ static int k3_r5_cluster_rproc_init(struct platform_d= evice *pdev) { struct k3_r5_cluster *cluster =3D platform_get_drvdata(pdev); struct device *dev =3D &pdev->dev; - struct k3_r5_rproc *kproc; + struct k3_rproc *kproc; struct k3_r5_core *core, *core1; struct device_node *np; struct device *cdev; @@ -1562,7 +1488,7 @@ static int k3_r5_cluster_rproc_init(struct platform_d= evice *pdev) static void k3_r5_cluster_rproc_exit(void *data) { struct k3_r5_cluster *cluster =3D platform_get_drvdata(data); - struct k3_r5_rproc *kproc; + struct k3_rproc *kproc; struct k3_r5_core *core; struct rproc *rproc; int ret; @@ -1803,12 +1729,12 @@ static int k3_r5_probe(struct platform_device *pdev) return 0; } =20 -static const struct k3_r5_mem_data r5_mems[] =3D { +static const struct k3_rproc_mem_data r5_mems[] =3D { { .name =3D "atcm", .dev_addr =3D 0x0 }, { .name =3D "btcm", .dev_addr =3D K3_R5_TCM_DEV_ADDR }, }; =20 -static const struct k3_r5_dev_data r5_data =3D { +static const struct k3_rproc_dev_data r5_data =3D { .mems =3D r5_mems, .num_mems =3D ARRAY_SIZE(r5_mems), .boot_align_addr =3D 0, --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot03.ext.ti.com (fllvem-ot03.ext.ti.com [198.47.19.245]) (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 C77F31E5B9B; Tue, 13 May 2025 05:46:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.245 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115180; cv=none; b=XD8YEPYAqNbsvHWY6cvro6rcr6muzzzTHFrDMGpj6MfaV8E220YVVtLpMqWLxk4oYUQv84HrR5AUpchALV4hpvfLuaNIz5fjOGPRzYrXRirjxW6Bskh1GvDmEzdY6tvkg5vp8PyofONazpIEdOQpOLmFyJJoLIKsExUDfhdHBL4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115180; c=relaxed/simple; bh=3gb52cl6ezaF8sQ3OHQS8bCpncG7HXFACqdsRhEeyhk=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=WtsFVjdk2zcf9ZU4RJxjC6oGQhuRa3MyW/Ui4/JfQaSk4nQy8fI+I+BDSQobxJ53XaR8hw8A8cS1sI1brVdFfIMYvRZ6uKb4Alc972iabSGEcHUXht3wKuVKo+1DIyEW4IqeO4u4mFiDZujOc0LIVVO8YmOx/iucaEDJ4vllkjE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=vIJgOKUs; arc=none smtp.client-ip=198.47.19.245 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="vIJgOKUs" Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllvem-ot03.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5k9Fh2210819 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:46:09 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115169; bh=p0lKhNICOLatbwT0nbJI5ZJ5bE8S7+RbuK1e/jHi/iY=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=vIJgOKUsiZ2qTB5BVwQVkgnRAa7gu3y0DETx48hbd4I4RE226iK0tm0gnCNmSACsf TTRLwzlFyWUWhXxsMHvd30u1rjzqAtHftgMn8dpAPEv4SZ3wy387rvEAlKQ6xnw4wO epWHXGOfEKDcLOHxY8Y91pGFbNTdE8MJFjSk7CTU= Received: from DFLE113.ent.ti.com (dfle113.ent.ti.com [10.64.6.34]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5k9BB088688 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:46:09 -0500 Received: from DFLE105.ent.ti.com (10.64.6.26) by DFLE113.ent.ti.com (10.64.6.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:46:08 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DFLE105.ent.ti.com (10.64.6.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:46:09 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqM131001; Tue, 13 May 2025 00:46:05 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 13/36] remoteproc: k3: Refactor mailbox rx_callback functions into common driver Date: Tue, 13 May 2025 11:14:47 +0530 Message-ID: <20250513054510.3439842-14-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The mailbox .rx_callback implementations in TI K3 R5, DSP and M4 remoteproc drivers handle inbound mailbox messages in the same way. Introduce a common driver 'ti_k3_common.c' and refactor the implementations into a common function 'k3_rproc_mbox_callback'() in it. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Compile ti_k3_common driver with ti_k3_r5_remoteproc driver. [Mathieu] 2. Update comment to call out that the driver is refactored out of R5, DSP = and M4 drivers. 3. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-13-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-13-b-padhi@ti.com/ v10: Changelog: None Link to v9: https://lore.kernel.org/all/20250317120622.1746415-11-b-padhi@ti.com/ drivers/remoteproc/Makefile | 6 +- drivers/remoteproc/ti_k3_common.c | 88 +++++++++++++++++++++++ drivers/remoteproc/ti_k3_common.h | 1 + drivers/remoteproc/ti_k3_dsp_remoteproc.c | 50 +------------ drivers/remoteproc/ti_k3_m4_remoteproc.c | 49 +------------ drivers/remoteproc/ti_k3_r5_remoteproc.c | 50 +------------ 6 files changed, 95 insertions(+), 149 deletions(-) create mode 100644 drivers/remoteproc/ti_k3_common.c diff --git a/drivers/remoteproc/Makefile b/drivers/remoteproc/Makefile index 5ff4e2fee4abd..1c7598b8475d6 100644 --- a/drivers/remoteproc/Makefile +++ b/drivers/remoteproc/Makefile @@ -36,7 +36,7 @@ obj-$(CONFIG_RCAR_REMOTEPROC) +=3D rcar_rproc.o obj-$(CONFIG_ST_REMOTEPROC) +=3D st_remoteproc.o obj-$(CONFIG_ST_SLIM_REMOTEPROC) +=3D st_slim_rproc.o obj-$(CONFIG_STM32_RPROC) +=3D stm32_rproc.o -obj-$(CONFIG_TI_K3_DSP_REMOTEPROC) +=3D ti_k3_dsp_remoteproc.o -obj-$(CONFIG_TI_K3_M4_REMOTEPROC) +=3D ti_k3_m4_remoteproc.o -obj-$(CONFIG_TI_K3_R5_REMOTEPROC) +=3D ti_k3_r5_remoteproc.o +obj-$(CONFIG_TI_K3_DSP_REMOTEPROC) +=3D ti_k3_dsp_remoteproc.o ti_k3_commo= n.o +obj-$(CONFIG_TI_K3_M4_REMOTEPROC) +=3D ti_k3_m4_remoteproc.o ti_k3_common.o +obj-$(CONFIG_TI_K3_R5_REMOTEPROC) +=3D ti_k3_r5_remoteproc.o ti_k3_common.o obj-$(CONFIG_XLNX_R5_REMOTEPROC) +=3D xlnx_r5_remoteproc.o diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c new file mode 100644 index 0000000000000..6ec8c3af19918 --- /dev/null +++ b/drivers/remoteproc/ti_k3_common.c @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * TI K3 Remote Processor(s) driver common code + * + * Refactored out of ti_k3_r5_remoteproc.c, ti_k3_dsp_remoteproc.c and + * ti_k3_m4_remoteproc.c. + * + * ti_k3_r5_remoteproc.c: + * Copyright (C) 2017-2022 Texas Instruments Incorporated - https://www.ti= .com/ + * Suman Anna + * + * ti_k3_dsp_remoteproc.c: + * Copyright (C) 2018-2022 Texas Instruments Incorporated - https://www.ti= .com/ + * Suman Anna + * + * ti_k3_m4_remoteproc.c: + * Copyright (C) 2021-2024 Texas Instruments Incorporated - https://www.ti= .com/ + * Hari Nagalla + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "omap_remoteproc.h" +#include "remoteproc_internal.h" +#include "ti_sci_proc.h" +#include "ti_k3_common.h" + +/** + * k3_rproc_mbox_callback() - inbound mailbox message handler + * @client: mailbox client pointer used for requesting the mailbox channel + * @data: mailbox payload + * + * This handler is invoked by the K3 mailbox driver whenever a mailbox + * message is received. Usually, the mailbox payload simply contains + * the index of the virtqueue that is kicked by the remote processor, + * and we let remoteproc core handle it. + * + * In addition to virtqueue indices, we also have some out-of-band values + * that indicate different events. Those values are deliberately very + * large so they don't coincide with virtqueue indices. + */ +void k3_rproc_mbox_callback(struct mbox_client *client, void *data) +{ + struct k3_rproc *kproc =3D container_of(client, struct k3_rproc, client); + struct device *dev =3D kproc->rproc->dev.parent; + struct rproc *rproc =3D kproc->rproc; + u32 msg =3D (u32)(uintptr_t)(data); + + dev_dbg(dev, "mbox msg: 0x%x\n", msg); + + switch (msg) { + case RP_MBOX_CRASH: + /* + * remoteproc detected an exception, but error recovery is not + * supported. So, just log this for now + */ + dev_err(dev, "K3 rproc %s crashed\n", rproc->name); + break; + case RP_MBOX_ECHO_REPLY: + dev_info(dev, "received echo reply from %s\n", rproc->name); + break; + default: + /* silently handle all other valid messages */ + if (msg >=3D RP_MBOX_READY && msg < RP_MBOX_END_MSG) + return; + if (msg > rproc->max_notifyid) { + dev_dbg(dev, "dropping unknown message 0x%x", msg); + return; + } + /* msg contains the index of the triggered vring */ + if (rproc_vq_interrupt(rproc, msg) =3D=3D IRQ_NONE) + dev_dbg(dev, "no message was found in vqid %d\n", msg); + } +} +EXPORT_SYMBOL_GPL(k3_rproc_mbox_callback); + +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index 3e09e090cb337..75c069f21756c 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -93,4 +93,5 @@ struct k3_rproc { void *priv; }; =20 +void k3_rproc_mbox_callback(struct mbox_client *client, void *data); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index e92fab831670c..7bd1d5a790cb2 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -24,54 +24,6 @@ =20 #define KEYSTONE_RPROC_LOCAL_ADDRESS_MASK (SZ_16M - 1) =20 -/** - * k3_dsp_rproc_mbox_callback() - inbound mailbox message handler - * @client: mailbox client pointer used for requesting the mailbox channel - * @data: mailbox payload - * - * This handler is invoked by the OMAP mailbox driver whenever a mailbox - * message is received. Usually, the mailbox payload simply contains - * the index of the virtqueue that is kicked by the remote processor, - * and we let remoteproc core handle it. - * - * In addition to virtqueue indices, we also have some out-of-band values - * that indicate different events. Those values are deliberately very - * large so they don't coincide with virtqueue indices. - */ -static void k3_dsp_rproc_mbox_callback(struct mbox_client *client, void *d= ata) -{ - struct k3_rproc *kproc =3D container_of(client, struct k3_rproc, client); - struct device *dev =3D kproc->rproc->dev.parent; - const char *name =3D kproc->rproc->name; - u32 msg =3D omap_mbox_message(data); - - dev_dbg(dev, "mbox msg: 0x%x\n", msg); - - switch (msg) { - case RP_MBOX_CRASH: - /* - * remoteproc detected an exception, but error recovery is not - * supported. So, just log this for now - */ - dev_err(dev, "K3 DSP rproc %s crashed\n", name); - break; - case RP_MBOX_ECHO_REPLY: - dev_info(dev, "received echo reply from %s\n", name); - break; - default: - /* silently handle all other valid messages */ - if (msg >=3D RP_MBOX_READY && msg < RP_MBOX_END_MSG) - return; - if (msg > kproc->rproc->max_notifyid) { - dev_dbg(dev, "dropping unknown message 0x%x", msg); - return; - } - /* msg contains the index of the triggered vring */ - if (rproc_vq_interrupt(kproc->rproc, msg) =3D=3D IRQ_NONE) - dev_dbg(dev, "no message was found in vqid %d\n", msg); - } -} - /* * Kick the remote processor to notify about pending unprocessed messages. * The vqid usage is not used and is inconsequential, as the kick is perfo= rmed @@ -155,7 +107,7 @@ static int k3_dsp_rproc_request_mbox(struct rproc *rpro= c) =20 client->dev =3D dev; client->tx_done =3D NULL; - client->rx_callback =3D k3_dsp_rproc_mbox_callback; + client->rx_callback =3D k3_rproc_mbox_callback; client->tx_block =3D false; client->knows_txdone =3D false; =20 diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 053d50cf5e72b..30126f8d9ac70 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -21,53 +21,6 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 -/** - * k3_m4_rproc_mbox_callback() - inbound mailbox message handler - * @client: mailbox client pointer used for requesting the mailbox channel - * @data: mailbox payload - * - * This handler is invoked by the K3 mailbox driver whenever a mailbox - * message is received. Usually, the mailbox payload simply contains - * the index of the virtqueue that is kicked by the remote processor, - * and we let remoteproc core handle it. - * - * In addition to virtqueue indices, we also have some out-of-band values - * that indicate different events. Those values are deliberately very - * large so they don't coincide with virtqueue indices. - */ -static void k3_m4_rproc_mbox_callback(struct mbox_client *client, void *da= ta) -{ - struct device *dev =3D client->dev; - struct rproc *rproc =3D dev_get_drvdata(dev); - u32 msg =3D (u32)(uintptr_t)(data); - - dev_dbg(dev, "mbox msg: 0x%x\n", msg); - - switch (msg) { - case RP_MBOX_CRASH: - /* - * remoteproc detected an exception, but error recovery is not - * supported. So, just log this for now - */ - dev_err(dev, "K3 rproc %s crashed\n", rproc->name); - break; - case RP_MBOX_ECHO_REPLY: - dev_info(dev, "received echo reply from %s\n", rproc->name); - break; - default: - /* silently handle all other valid messages */ - if (msg >=3D RP_MBOX_READY && msg < RP_MBOX_END_MSG) - return; - if (msg > rproc->max_notifyid) { - dev_dbg(dev, "dropping unknown message 0x%x", msg); - return; - } - /* msg contains the index of the triggered vring */ - if (rproc_vq_interrupt(rproc, msg) =3D=3D IRQ_NONE) - dev_dbg(dev, "no message was found in vqid %d\n", msg); - } -} - /* * Kick the remote processor to notify about pending unprocessed messages. * The vqid usage is not used and is inconsequential, as the kick is perfo= rmed @@ -581,7 +534,7 @@ static int k3_m4_rproc_probe(struct platform_device *pd= ev) =20 kproc->client.dev =3D dev; kproc->client.tx_done =3D NULL; - kproc->client.rx_callback =3D k3_m4_rproc_mbox_callback; + kproc->client.rx_callback =3D k3_rproc_mbox_callback; kproc->client.tx_block =3D false; kproc->client.knows_txdone =3D false; kproc->mbox =3D mbox_request_channel(&kproc->client, 0); diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index ec9101972ff9e..5caedc9dad181 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -129,54 +129,6 @@ struct k3_r5_core { bool released_from_reset; }; =20 -/** - * k3_r5_rproc_mbox_callback() - inbound mailbox message handler - * @client: mailbox client pointer used for requesting the mailbox channel - * @data: mailbox payload - * - * This handler is invoked by the OMAP mailbox driver whenever a mailbox - * message is received. Usually, the mailbox payload simply contains - * the index of the virtqueue that is kicked by the remote processor, - * and we let remoteproc core handle it. - * - * In addition to virtqueue indices, we also have some out-of-band values - * that indicate different events. Those values are deliberately very - * large so they don't coincide with virtqueue indices. - */ -static void k3_r5_rproc_mbox_callback(struct mbox_client *client, void *da= ta) -{ - struct k3_rproc *kproc =3D container_of(client, struct k3_rproc, client); - struct device *dev =3D kproc->rproc->dev.parent; - const char *name =3D kproc->rproc->name; - u32 msg =3D omap_mbox_message(data); - - dev_dbg(dev, "mbox msg: 0x%x\n", msg); - - switch (msg) { - case RP_MBOX_CRASH: - /* - * remoteproc detected an exception, but error recovery is not - * supported. So, just log this for now - */ - dev_err(dev, "K3 R5F rproc %s crashed\n", name); - break; - case RP_MBOX_ECHO_REPLY: - dev_info(dev, "received echo reply from %s\n", name); - break; - default: - /* silently handle all other valid messages */ - if (msg >=3D RP_MBOX_READY && msg < RP_MBOX_END_MSG) - return; - if (msg > kproc->rproc->max_notifyid) { - dev_dbg(dev, "dropping unknown message 0x%x", msg); - return; - } - /* msg contains the index of the triggered vring */ - if (rproc_vq_interrupt(kproc->rproc, msg) =3D=3D IRQ_NONE) - dev_dbg(dev, "no message was found in vqid %d\n", msg); - } -} - /* kick a virtqueue */ static void k3_r5_rproc_kick(struct rproc *rproc, int vqid) { @@ -356,7 +308,7 @@ static int k3_r5_rproc_request_mbox(struct rproc *rproc) =20 client->dev =3D dev; client->tx_done =3D NULL; - client->rx_callback =3D k3_r5_rproc_mbox_callback; + client->rx_callback =3D k3_rproc_mbox_callback; client->tx_block =3D false; client->knows_txdone =3D false; =20 --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot03.ext.ti.com (fllvem-ot03.ext.ti.com [198.47.19.245]) (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 973161EFF8B; Tue, 13 May 2025 05:46:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.245 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115184; cv=none; b=RrMTxxihTqLgITUwjw+yCFjKtvXSNwiaBKOYfl/Jv9hFB4BHyX1MliMyXZCcg+ZKi7KmCgMwU7HP3eRIG82TfqvaQ9U8m+tH+9mBsoBdYsK8IpZZTNtXTu5JGS1MQK0aXQFc0qLH5GjCkjjv3JN6OirPggZDbv1+jCzcYABz+b8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115184; c=relaxed/simple; bh=ay9Ppfj0l5VqF+zejjVMMmKrRmSfzYMnC4pCANm9cKs=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=n7StzWYhm1XtZn9tOymeRa7KsE+wjNDUj/uXETXqgr8G7F8R0qAhy/6X/chSgawPzfU5KvXKZgVVg/LR57LCwA2FH9+TG24+EUMnSa4UgMQs2CupIchLZqfckpOwt0SnXCZC0uon4TTmvJdsjY1UnYY3jcFKb1uRa7UINvTgQUQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=B9SDw++8; arc=none smtp.client-ip=198.47.19.245 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="B9SDw++8" Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllvem-ot03.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kDax2210835 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:46:13 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115173; bh=oACxMk87vRJHH2iEA+ZG18jdsUjes+8B7Pyy3bMFq0o=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=B9SDw++8xNu0rNVDB01H78XMRpVRx+fYWc654TcITJt2DAz02gaV2MiHJfczqm1f1 b4njWznemJ4qmsSVk4FJIv8qd4FXvrAHKy8sCYEjAtY29SDHVxQIcQOTe2dk3O/mSv +OXgpEbokUaJvMxhVaR83Qz+Y/Qf7u1VdtPuIEKI= Received: from DFLE113.ent.ti.com (dfle113.ent.ti.com [10.64.6.34]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kDJA088724 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:46:13 -0500 Received: from DFLE102.ent.ti.com (10.64.6.23) by DFLE113.ent.ti.com (10.64.6.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:46:12 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DFLE102.ent.ti.com (10.64.6.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:46:13 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqN131001; Tue, 13 May 2025 00:46:09 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 14/36] remoteproc: k3: Refactor .kick rproc ops into common driver Date: Tue, 13 May 2025 11:14:48 +0530 Message-ID: <20250513054510.3439842-15-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The .kick rproc ops implementations in TI K3 R5, DSP and M4 remoteproc drivers sends a mailbox message to the remote processor in the same way. Refactor the implementations into a common function 'k3_rproc_kick()' in the ti_k3_common.c driver. Signed-off-by: Beleswar Padhi Acked-by: Andrew Davis Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-14-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B and A/B tags. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-14-b-padhi@ti.com/ v10: Changelog: None Link to v9: https://lore.kernel.org/all/20250317120622.1746415-12-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.c | 25 ++++++++++++++++++++++ drivers/remoteproc/ti_k3_common.h | 1 + drivers/remoteproc/ti_k3_dsp_remoteproc.c | 22 +------------------ drivers/remoteproc/ti_k3_m4_remoteproc.c | 26 +---------------------- drivers/remoteproc/ti_k3_r5_remoteproc.c | 17 +-------------- 5 files changed, 29 insertions(+), 62 deletions(-) diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c index 6ec8c3af19918..c4a9e5df0ea59 100644 --- a/drivers/remoteproc/ti_k3_common.c +++ b/drivers/remoteproc/ti_k3_common.c @@ -84,5 +84,30 @@ void k3_rproc_mbox_callback(struct mbox_client *client, = void *data) } EXPORT_SYMBOL_GPL(k3_rproc_mbox_callback); =20 +/* + * Kick the remote processor to notify about pending unprocessed messages. + * The vqid usage is not used and is inconsequential, as the kick is perfo= rmed + * through a simulated GPIO (a bit in an IPC interrupt-triggering register= ), + * the remote processor is expected to process both its Tx and Rx virtqueu= es. + */ +void k3_rproc_kick(struct rproc *rproc, int vqid) +{ + struct k3_rproc *kproc =3D rproc->priv; + struct device *dev =3D kproc->dev; + u32 msg =3D (u32)vqid; + int ret; + + /* + * Send the index of the triggered virtqueue in the mailbox payload. + * NOTE: msg is cast to uintptr_t to prevent compiler warnings when + * void* is 64bit. It is safely cast back to u32 in the mailbox driver. + */ + ret =3D mbox_send_message(kproc->mbox, (void *)(uintptr_t)msg); + if (ret < 0) + dev_err(dev, "failed to send mailbox message, status =3D %d\n", + ret); +} +EXPORT_SYMBOL_GPL(k3_rproc_kick); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index 75c069f21756c..4d9640557c340 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -94,4 +94,5 @@ struct k3_rproc { }; =20 void k3_rproc_mbox_callback(struct mbox_client *client, void *data); +void k3_rproc_kick(struct rproc *rproc, int vqid); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 7bd1d5a790cb2..476f4e69d2c11 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -24,26 +24,6 @@ =20 #define KEYSTONE_RPROC_LOCAL_ADDRESS_MASK (SZ_16M - 1) =20 -/* - * Kick the remote processor to notify about pending unprocessed messages. - * The vqid usage is not used and is inconsequential, as the kick is perfo= rmed - * through a simulated GPIO (a bit in an IPC interrupt-triggering register= ), - * the remote processor is expected to process both its Tx and Rx virtqueu= es. - */ -static void k3_dsp_rproc_kick(struct rproc *rproc, int vqid) -{ - struct k3_rproc *kproc =3D rproc->priv; - struct device *dev =3D rproc->dev.parent; - mbox_msg_t msg =3D (mbox_msg_t)vqid; - int ret; - - /* send the index of the triggered virtqueue in the mailbox payload */ - ret =3D mbox_send_message(kproc->mbox, (void *)msg); - if (ret < 0) - dev_err(dev, "failed to send mailbox message (%pe)\n", - ERR_PTR(ret)); -} - /* Put the DSP processor into reset */ static int k3_dsp_rproc_reset(struct k3_rproc *kproc) { @@ -342,7 +322,7 @@ static void *k3_dsp_rproc_da_to_va(struct rproc *rproc,= u64 da, size_t len, bool static const struct rproc_ops k3_dsp_rproc_ops =3D { .start =3D k3_dsp_rproc_start, .stop =3D k3_dsp_rproc_stop, - .kick =3D k3_dsp_rproc_kick, + .kick =3D k3_rproc_kick, .da_to_va =3D k3_dsp_rproc_da_to_va, }; =20 diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 30126f8d9ac70..9dcae94121930 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -21,30 +21,6 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 -/* - * Kick the remote processor to notify about pending unprocessed messages. - * The vqid usage is not used and is inconsequential, as the kick is perfo= rmed - * through a simulated GPIO (a bit in an IPC interrupt-triggering register= ), - * the remote processor is expected to process both its Tx and Rx virtqueu= es. - */ -static void k3_m4_rproc_kick(struct rproc *rproc, int vqid) -{ - struct k3_rproc *kproc =3D rproc->priv; - struct device *dev =3D kproc->dev; - u32 msg =3D (u32)vqid; - int ret; - - /* - * Send the index of the triggered virtqueue in the mailbox payload. - * NOTE: msg is cast to uintptr_t to prevent compiler warnings when - * void* is 64bit. It is safely cast back to u32 in the mailbox driver. - */ - ret =3D mbox_send_message(kproc->mbox, (void *)(uintptr_t)msg); - if (ret < 0) - dev_err(dev, "failed to send mailbox message, status =3D %d\n", - ret); -} - static int k3_m4_rproc_ping_mbox(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; @@ -448,7 +424,7 @@ static const struct rproc_ops k3_m4_rproc_ops =3D { .stop =3D k3_m4_rproc_stop, .attach =3D k3_m4_rproc_attach, .detach =3D k3_m4_rproc_detach, - .kick =3D k3_m4_rproc_kick, + .kick =3D k3_rproc_kick, .da_to_va =3D k3_m4_rproc_da_to_va, .get_loaded_rsc_table =3D k3_m4_get_loaded_rsc_table, }; diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index 5caedc9dad181..337e3711cb143 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -129,21 +129,6 @@ struct k3_r5_core { bool released_from_reset; }; =20 -/* kick a virtqueue */ -static void k3_r5_rproc_kick(struct rproc *rproc, int vqid) -{ - struct k3_rproc *kproc =3D rproc->priv; - struct device *dev =3D rproc->dev.parent; - mbox_msg_t msg =3D (mbox_msg_t)vqid; - int ret; - - /* send the index of the triggered virtqueue in the mailbox payload */ - ret =3D mbox_send_message(kproc->mbox, (void *)msg); - if (ret < 0) - dev_err(dev, "failed to send mailbox message, status =3D %d\n", - ret); -} - static int k3_r5_split_reset(struct k3_rproc *kproc) { int ret; @@ -735,7 +720,7 @@ static const struct rproc_ops k3_r5_rproc_ops =3D { .unprepare =3D k3_r5_rproc_unprepare, .start =3D k3_r5_rproc_start, .stop =3D k3_r5_rproc_stop, - .kick =3D k3_r5_rproc_kick, + .kick =3D k3_rproc_kick, .da_to_va =3D k3_r5_rproc_da_to_va, }; =20 --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from lelvem-ot02.ext.ti.com (lelvem-ot02.ext.ti.com [198.47.23.235]) (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 E9B5D1EFF9A; Tue, 13 May 2025 05:46:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.235 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115190; cv=none; b=tiU5jcddOehQhmPC8fg+ChozPxCvy+ZwP02LjJ4ZyPCxoieb/CF9CRXuse1Yzg3/N9ZtNhYmbLDZpdV+RlIQw0Llk878FVv9tu7zf+xkBXQzwda+2+W+Lh/w/cb2C1O7pTBLn2j0AZVLxjHLdYHbG3ANICo0BEVMfpp6JCTM6kg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115190; c=relaxed/simple; bh=OEopinO3c5zea6BIXpmpfugpZ5ZMhTF5uodQRc8GTJU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pONi+J+TE0QOAgCM6EliKJQaS736G6A+GYjVDxoXBWt7q7OzHlWP7e9Sw0x7MOHLIWcgS0AYAyRkq5qIj+bEun3yP4LO8h5twVWlHpU83sbPuG538Ptcq3s66SNDiQivfiKXHK1C1VP4f8xw3Bepm4eRoFymZf0HXd+umfZeca8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=D/4kgQiy; arc=none smtp.client-ip=198.47.23.235 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="D/4kgQiy" Received: from fllv0034.itg.ti.com ([10.64.40.246]) by lelvem-ot02.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kHnh2985925 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:46:17 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115177; bh=ykXiJ6g7dD1Db3aXqucHZbCYZjNcttRHqZBnwEdjMHY=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=D/4kgQiy1tzsXqqGuppilmmVfvsJC0gRAqL1s4Y/eWPjQ1H1tqgEfJFTNAQcY1e4q nZZ8n9LQBgyFl/byCJYAgXZmz5CJbZfSHdCAfPI+H2tCHCNu9GkzZuj+C63f+Kglwy cetYGkExtd73wvkFD23PiwGzP2kXCGUYE1RR3F1E= Received: from DLEE114.ent.ti.com (dlee114.ent.ti.com [157.170.170.25]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kHVR063311 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:46:17 -0500 Received: from DLEE110.ent.ti.com (157.170.170.21) by DLEE114.ent.ti.com (157.170.170.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:46:17 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE110.ent.ti.com (157.170.170.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:46:17 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqO131001; Tue, 13 May 2025 00:46:13 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 15/36] remoteproc: k3-dsp: Correct Reset logic for devices without lresets Date: Tue, 13 May 2025 11:14:49 +0530 Message-ID: <20250513054510.3439842-16-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The k3_dsp_rproc_reset() function erroneously asserts the local reset even for devices which do not support it. Even though it results in a no-operation, Update the logic to explicitly assert the local reset for devices that support it and only the global reset for those that do not. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-15-b-padhi@ti.com/ v11: Changelog: 1. Don't deassert lreset back if asserting module reset fails. [Andrew] 2. Put if-else block for code path with lreset and w/o lreset. [Andrew] 3. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-15-b-padhi@ti.com/ v10: Changelog: 1. Split [v9 12/26] into [v10 14/33] and [v10 15/33] patches.=20 Link to v9: https://lore.kernel.org/all/20250317120622.1746415-13-b-padhi@ti.com/ drivers/remoteproc/ti_k3_dsp_remoteproc.c | 24 +++++++++-------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 476f4e69d2c11..2ffcdba1c7754 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -30,21 +30,15 @@ static int k3_dsp_rproc_reset(struct k3_rproc *kproc) struct device *dev =3D kproc->dev; int ret; =20 - ret =3D reset_control_assert(kproc->reset); - if (ret) { - dev_err(dev, "local-reset assert failed (%pe)\n", ERR_PTR(ret)); - return ret; - } - - if (kproc->data->uses_lreset) - return ret; - - ret =3D kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, - kproc->ti_sci_id); - if (ret) { - dev_err(dev, "module-reset assert failed (%pe)\n", ERR_PTR(ret)); - if (reset_control_deassert(kproc->reset)) - dev_warn(dev, "local-reset deassert back failed\n"); + if (kproc->data->uses_lreset) { + ret =3D reset_control_assert(kproc->reset); + if (ret) + dev_err(dev, "local-reset assert failed (%pe)\n", ERR_PTR(ret)); + } else { + ret =3D kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, + kproc->ti_sci_id); + if (ret) + dev_err(dev, "module-reset assert failed (%pe)\n", ERR_PTR(ret)); } =20 return ret; --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot04.ext.ti.com (fllvem-ot04.ext.ti.com [198.47.19.246]) (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 00AFB1EFF81; Tue, 13 May 2025 05:46:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.246 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115190; cv=none; b=H4/UUvyM3wyjdoI8nSQAEmKaV+QQBl+S8xyDjTeXmoYgCTMtdZQoC4QPBN3TzYFyiD3mVXcxyQTrxKdcfykc6UbM6nLzqCK7VztZVvglfjZ4mfFZZ421pm3hZy+YdiglshWeYRU9S9hZs0/6Nz6LUqE1gK0lioPjPzaQGO7UYXI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115190; c=relaxed/simple; bh=AXNR915YNI8Voc2Uh7fifl+gty7dVzja7BOvMvPZBnQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=k75GNyfXt0Ce/MeGh/C+0qSD5KRNJzd4KS5IqqYQnZ5J/CZhqreGaWy3b/Nm/WlpqRc74ly10CQBiA2kH9RKdCO3g0AMAAZBaaxaob1lSfwJqMTiri52M+mxYXn7LP2BzbHl/XZ1ofZzUCbNMlhVImf7gmAnzwJVImZ+D36V65Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=Q1kZKXht; arc=none smtp.client-ip=198.47.19.246 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="Q1kZKXht" Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllvem-ot04.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kLbK2764301 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:46:22 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115182; bh=TGfIRXIwQovYsnFdzb2rrvdrHBRKevG/Q/9+MuWR7Hs=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=Q1kZKXhtIecXvO41Pby5vkYz0NPr+U1YpD/1Qj10Hjrp3U9OvpI5u/Ednpr1DF1vm O4ltCdruP4uHWUwBSKLK1CDc9ODI9cGy2ssX4DZ7NN5+zzEuRKAPVTvy8A9qy68cQj Jp2+/m7KGjqye0s5zwIS6v6OgjFSPHPGsff2upLw= Received: from DFLE107.ent.ti.com (dfle107.ent.ti.com [10.64.6.28]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kLD1088760 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:46:21 -0500 Received: from DFLE106.ent.ti.com (10.64.6.27) by DFLE107.ent.ti.com (10.64.6.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:46:21 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DFLE106.ent.ti.com (10.64.6.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:46:21 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqP131001; Tue, 13 May 2025 00:46:18 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 16/36] remoteproc: k3-m4: Introduce central function to put rproc into reset Date: Tue, 13 May 2025 11:14:50 +0530 Message-ID: <20250513054510.3439842-17-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" Currently, the TI K3 M4 remoteproc driver assumes all of the M4 devices have local resets. Even though its true for all existing M4 devices, keep room for future devices which possibly may not have local resets and only have a module reset. Therefore introduce a central function, k3_m4_rproc_reset() which handles both type of devices (with and without local resets), and use it throughout the driver to put the remote processor into reset. This is done to align the reset implementation with DSP remoteproc driver and can be factored out later. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-16-b-padhi@ti.com/ v11: Changelog: 0. New patch in this series. 1. Split [v10 15/33] into [v11 15/35] and [v11 16/35]. [Andrew] Link to v10: https://lore.kernel.org/all/20250417182001.3903905-16-b-padhi@ti.com/ drivers/remoteproc/ti_k3_m4_remoteproc.c | 36 +++++++++++++++--------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 9dcae94121930..150c68e5f3967 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -21,6 +21,26 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 +/* Put the M4 remote processor into reset */ +static int k3_m4_rproc_reset(struct k3_rproc *kproc) +{ + struct device *dev =3D kproc->dev; + int ret; + + if (kproc->data->uses_lreset) { + ret =3D reset_control_assert(kproc->reset); + if (ret) + dev_err(dev, "local-reset assert failed, ret =3D %d\n", ret); + } else { + ret =3D kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, + kproc->ti_sci_id); + if (ret) + dev_err(dev, "module-reset assert failed, ret =3D %d\n", ret); + } + + return ret; +} + static int k3_m4_rproc_ping_mbox(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; @@ -65,11 +85,9 @@ static int k3_m4_rproc_prepare(struct rproc *rproc) * Ensure the local reset is asserted so the core doesn't * execute bogus code when the module reset is released. */ - ret =3D reset_control_assert(kproc->reset); - if (ret) { - dev_err(dev, "could not assert local reset\n"); + ret =3D k3_m4_rproc_reset(kproc); + if (ret) return ret; - } =20 ret =3D reset_control_status(kproc->reset); if (ret <=3D 0) { @@ -374,16 +392,8 @@ static int k3_m4_rproc_start(struct rproc *rproc) static int k3_m4_rproc_stop(struct rproc *rproc) { struct k3_rproc *kproc =3D rproc->priv; - struct device *dev =3D kproc->dev; - int ret; =20 - ret =3D reset_control_assert(kproc->reset); - if (ret) { - dev_err(dev, "local-reset assert failed, ret =3D %d\n", ret); - return ret; - } - - return 0; + return k3_m4_rproc_reset(kproc); } =20 /* --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from lelvem-ot02.ext.ti.com (lelvem-ot02.ext.ti.com [198.47.23.235]) (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 5C212136337; Tue, 13 May 2025 05:46:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.235 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115203; cv=none; b=jigbYKiIBncqIWJoE8kYuOyIn4W3vE2VEftiM6O8nbV+pASRlz+lTBKyjhvd1eZIATLW13iEZ9YaLqS8BnjsaPK2v53YyFrqimAfhADBmk6ZPhsYsZXTCsk+p4N2dxcDWXTEE4c+Q0hrXFZUnKqfjEiCFVeGmMK0la0MtbKajls= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115203; c=relaxed/simple; bh=81Wi6NAT9SOjQWyoRImxkhI0Tmm4YEAdxP4BqHBv9LM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ACHDjtN/DvofTKQbU/9zLoOHIrm+mDftCKXLfjylYE4nLY5KGwP6dkDavLHqPMajkuGXkFNaDIEJ0I5yw6oQBDnsnIfcrtVP8Tz49FymW6G7ubUHIyovx9IVAh2z1CxzMNzu3YYGUidgpGRJrNxB4xEoWF1h7GA1QEa5v1QfozM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=YAfqO2tX; arc=none smtp.client-ip=198.47.23.235 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="YAfqO2tX" Received: from lelv0266.itg.ti.com ([10.180.67.225]) by lelvem-ot02.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kQkv2986534 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:46:26 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115186; bh=MaH2O6D0RitZicu7NqnATjP4mKjgI2FA+gHOg+uW7iY=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=YAfqO2tXmXYOLOaRQfnKo5dCSmu96oVifcTrF0fDdznu5PDjZHe99OOMVBceY3L99 lq0aG7i+B7n0V2zizA9RNdgaUOk4jNrL/eqLEEduL+Wb7dBXGDlcQdbverZzbylzJX fAWApuPEe2mv16sRMp4kweeL1DUu9li/lX2O9JlE= Received: from DFLE110.ent.ti.com (dfle110.ent.ti.com [10.64.6.31]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kQeo028019 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:46:26 -0500 Received: from DFLE104.ent.ti.com (10.64.6.25) by DFLE110.ent.ti.com (10.64.6.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:46:25 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DFLE104.ent.ti.com (10.64.6.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:46:25 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqQ131001; Tue, 13 May 2025 00:46:22 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 17/36] remoteproc: k3: Refactor rproc_reset() implementation into common driver Date: Tue, 13 May 2025 11:14:51 +0530 Message-ID: <20250513054510.3439842-18-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The rproc_reset() implementations in TI K3 DSP and M4 remoteproc drivers assert reset in the same way. Refactor the above function into the ti_k3_common.c driver as k3_rproc_reset() and use it throughout DSP and M4 drivers for resetting the remote processor. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-17-b-padhi@ti.com/ v11: Changelog: 1. Split [v10 15/33] into [v11 15/35] and [v11 16/35]. 2. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-16-b-padhi@ti.com/ v10: Changelog: 1. Split [v9 12/26] into [v10 14/33] and [v10 15/33] patches.=20 Link to v9: https://lore.kernel.org/all/20250317120622.1746415-13-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.c | 21 ++++++++++++++++++++ drivers/remoteproc/ti_k3_common.h | 1 + drivers/remoteproc/ti_k3_dsp_remoteproc.c | 24 ++--------------------- drivers/remoteproc/ti_k3_m4_remoteproc.c | 24 ++--------------------- 4 files changed, 26 insertions(+), 44 deletions(-) diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c index c4a9e5df0ea59..7cd5f3ece8197 100644 --- a/drivers/remoteproc/ti_k3_common.c +++ b/drivers/remoteproc/ti_k3_common.c @@ -109,5 +109,26 @@ void k3_rproc_kick(struct rproc *rproc, int vqid) } EXPORT_SYMBOL_GPL(k3_rproc_kick); =20 +/* Put the remote processor into reset */ +int k3_rproc_reset(struct k3_rproc *kproc) +{ + struct device *dev =3D kproc->dev; + int ret; + + if (kproc->data->uses_lreset) { + ret =3D reset_control_assert(kproc->reset); + if (ret) + dev_err(dev, "local-reset assert failed (%pe)\n", ERR_PTR(ret)); + } else { + ret =3D kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, + kproc->ti_sci_id); + if (ret) + dev_err(dev, "module-reset assert failed (%pe)\n", ERR_PTR(ret)); + } + + return ret; +} +EXPORT_SYMBOL_GPL(k3_rproc_reset); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index 4d9640557c340..a2bb2484cebee 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -95,4 +95,5 @@ struct k3_rproc { =20 void k3_rproc_mbox_callback(struct mbox_client *client, void *data); void k3_rproc_kick(struct rproc *rproc, int vqid); +int k3_rproc_reset(struct k3_rproc *kproc); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 2ffcdba1c7754..f8a5282df5b71 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -24,26 +24,6 @@ =20 #define KEYSTONE_RPROC_LOCAL_ADDRESS_MASK (SZ_16M - 1) =20 -/* Put the DSP processor into reset */ -static int k3_dsp_rproc_reset(struct k3_rproc *kproc) -{ - struct device *dev =3D kproc->dev; - int ret; - - if (kproc->data->uses_lreset) { - ret =3D reset_control_assert(kproc->reset); - if (ret) - dev_err(dev, "local-reset assert failed (%pe)\n", ERR_PTR(ret)); - } else { - ret =3D kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, - kproc->ti_sci_id); - if (ret) - dev_err(dev, "module-reset assert failed (%pe)\n", ERR_PTR(ret)); - } - - return ret; -} - /* Release the DSP processor from reset */ static int k3_dsp_rproc_release(struct k3_rproc *kproc) { @@ -197,7 +177,7 @@ static int k3_dsp_rproc_stop(struct rproc *rproc) { struct k3_rproc *kproc =3D rproc->priv; =20 - k3_dsp_rproc_reset(kproc); + k3_rproc_reset(kproc); =20 return 0; } @@ -561,7 +541,7 @@ static int k3_dsp_rproc_probe(struct platform_device *p= dev) return dev_err_probe(dev, ret, "failed to get reset status\n"); } else if (ret =3D=3D 0) { dev_warn(dev, "local reset is deasserted for device\n"); - k3_dsp_rproc_reset(kproc); + k3_rproc_reset(kproc); } } } diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 150c68e5f3967..5123162748953 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -21,26 +21,6 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 -/* Put the M4 remote processor into reset */ -static int k3_m4_rproc_reset(struct k3_rproc *kproc) -{ - struct device *dev =3D kproc->dev; - int ret; - - if (kproc->data->uses_lreset) { - ret =3D reset_control_assert(kproc->reset); - if (ret) - dev_err(dev, "local-reset assert failed, ret =3D %d\n", ret); - } else { - ret =3D kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, - kproc->ti_sci_id); - if (ret) - dev_err(dev, "module-reset assert failed, ret =3D %d\n", ret); - } - - return ret; -} - static int k3_m4_rproc_ping_mbox(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; @@ -85,7 +65,7 @@ static int k3_m4_rproc_prepare(struct rproc *rproc) * Ensure the local reset is asserted so the core doesn't * execute bogus code when the module reset is released. */ - ret =3D k3_m4_rproc_reset(kproc); + ret =3D k3_rproc_reset(kproc); if (ret) return ret; =20 @@ -393,7 +373,7 @@ static int k3_m4_rproc_stop(struct rproc *rproc) { struct k3_rproc *kproc =3D rproc->priv; =20 - return k3_m4_rproc_reset(kproc); + return k3_rproc_reset(kproc); } =20 /* --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot03.ext.ti.com (fllvem-ot03.ext.ti.com [198.47.19.245]) (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 E1DED1E8356; Tue, 13 May 2025 05:46:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.245 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115202; cv=none; b=ekenKk723MLyYZgEJ2o5KeE010ezAt0/TiyCXi/ZpJJHzKt50g+y+ngyylFozahPl+un0gCVceckQtnN5OdPUY+jtBu81naJyU4winiIltbE/MP9pB8JF3flxgiyrQBPriQQKrkDzNgMQolqSEVm/fud1DkMm86i64WuMxkBMTE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115202; c=relaxed/simple; bh=Cb6qucv1yT9mYi1132/A/JKnGmSekIULBmoJnbOKR6A=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=NS6tJgjHCI7LEmA3BkPPEPYEG+hr3akNeUxzD6W9D70HmFynyHXWqKYwbA5aXsOkKi9SuOIf7UTulC7YOmx12nZLdj3VpLvGFVs920fQFl+4pfSLZ8rsy8DqLmbBPMtfIKFEG4b0HlfVh7MRcc0UFifgE9v45p5xcd5ly+LfLz4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=m3ifn2Hg; arc=none smtp.client-ip=198.47.19.245 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="m3ifn2Hg" Received: from fllv0034.itg.ti.com ([10.64.40.246]) by fllvem-ot03.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kUrQ2210859 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:46:30 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115190; bh=tlT5YSd8xcSMONdwid2Fmp+NNb8aA4tBsSGL5HENjK8=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=m3ifn2HgvVBUuiYPANCowMZ0jCka/NVsEJ5gv6ZlKsdBo/2ZZp45wNp3r2r53QO9a Iqzq8g2aHhlip9KPql6aGqOlMFHdlPGxSNZpVWO6TBG30jm3HiM2Mut32CPmb4fx/w KeFGkwbqFzE2Iz2f8aq2WNL3YoN1Xzg6ivf8KN64= Received: from DLEE103.ent.ti.com (dlee103.ent.ti.com [157.170.170.33]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kU7X063407 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:46:30 -0500 Received: from DLEE102.ent.ti.com (157.170.170.32) by DLEE103.ent.ti.com (157.170.170.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:46:29 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE102.ent.ti.com (157.170.170.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:46:29 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqR131001; Tue, 13 May 2025 00:46:26 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 18/36] remoteproc: k3-dsp: Correct Reset deassert logic for devices w/o lresets Date: Tue, 13 May 2025 11:14:52 +0530 Message-ID: <20250513054510.3439842-19-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The k3_dsp_rproc_release() function erroneously deasserts the local reset even for devices which do not support it. Even though it results in a no-operation, Update the logic to explicitly deassert only the global reset for devices that do not have a local reset. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-18-b-padhi@ti.com/ v11: Changelog: 1. Put if-else block for code path with lreset and w/o lreset. [Andrew] 2. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-17-b-padhi@ti.com/ v10: Changelog: 1. Split [v9 13/26] into [v10 16/33] and [v10 17/33] patches.=20 Link to v9: https://lore.kernel.org/all/20250317120622.1746415-14-b-padhi@ti.com/ drivers/remoteproc/ti_k3_dsp_remoteproc.c | 30 ++++++++++------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index f8a5282df5b71..08e6dde3ea267 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -30,23 +30,19 @@ static int k3_dsp_rproc_release(struct k3_rproc *kproc) struct device *dev =3D kproc->dev; int ret; =20 - if (kproc->data->uses_lreset) - goto lreset; - - ret =3D kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci, - kproc->ti_sci_id); - if (ret) { - dev_err(dev, "module-reset deassert failed (%pe)\n", ERR_PTR(ret)); - return ret; - } - -lreset: - ret =3D reset_control_deassert(kproc->reset); - if (ret) { - dev_err(dev, "local-reset deassert failed, (%pe)\n", ERR_PTR(ret)); - if (kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, - kproc->ti_sci_id)) - dev_warn(dev, "module-reset assert back failed\n"); + if (kproc->data->uses_lreset) { + ret =3D reset_control_deassert(kproc->reset); + if (ret) { + dev_err(dev, "local-reset deassert failed, (%pe)\n", ERR_PTR(ret)); + if (kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, + kproc->ti_sci_id)) + dev_warn(dev, "module-reset assert back failed\n"); + } + } else { + ret =3D kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci, + kproc->ti_sci_id); + if (ret) + dev_err(dev, "module-reset deassert failed (%pe)\n", ERR_PTR(ret)); } =20 return ret; --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from lelvem-ot01.ext.ti.com (lelvem-ot01.ext.ti.com [198.47.23.234]) (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 C6B871E885A; Tue, 13 May 2025 05:46:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115204; cv=none; b=pBwhk+wJgFzMRv5glYaVQRmhGfsblkD5sESD3NU7gKPEFNiXxGY3OTjuQwiDeIAkvHEKPiV+zQvFaBwcNzFUF8CmCa9dogchUzxd4LxOdF76XuLT+j30nPm+XXAFN+2vwt5D9oNRyiNnJoc5uXF3JmY6xH/bBbp3GznTwQ5vQqI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115204; c=relaxed/simple; bh=/143TBWT4ffE80Kwq4TRHCmtZw7LZE2r2UiJW1kE9Zg=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=GKv3jv+6ozC7+ueYSJ6HQ4sgstbujP+huWxjetKszBvoI4yi8RklEl3Kd59p7eXlT2ytujee7A/p6vH/atpoefnL7Lu5bwHbl3CPf1qWJahKBxzYnsOhSLMM8VrUfExovJ2rCQaGemDY0+2P8stWQ0I9MYwyGCVFRktumAXkaQk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=jjB7MFSb; arc=none smtp.client-ip=198.47.23.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="jjB7MFSb" Received: from lelv0265.itg.ti.com ([10.180.67.224]) by lelvem-ot01.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kYnv2226432 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:46:34 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115194; bh=Fj+hDKZ3DJhjfBqikb8AlwjEb4VaNZKT4lVh4ddWfts=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=jjB7MFSbpm56OkMoVjEV8PqjP07RB8aNetwyJVtqO1quu5JspPsHhQYJNK5ieVS9S dTCOW7gVbfD/GQ1+ZU06+VrwSCN2HGAqrE7J0G4SGmvMUUxIXryLtDVL3TMZ5q9PDg Ed8vY29WBaZSbt6ZLLsakoMfYlxvxgCji0L0nAEc= Received: from DLEE113.ent.ti.com (dlee113.ent.ti.com [157.170.170.24]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kY4v032490 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:46:34 -0500 Received: from DLEE100.ent.ti.com (157.170.170.30) by DLEE113.ent.ti.com (157.170.170.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:46:34 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE100.ent.ti.com (157.170.170.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:46:34 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqS131001; Tue, 13 May 2025 00:46:30 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 19/36] remoteproc: k3-m4: Introduce central function to release rproc from reset Date: Tue, 13 May 2025 11:14:53 +0530 Message-ID: <20250513054510.3439842-20-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" Currently, the TI K3 M4 remoteproc driver assumes all of the M4 devices have local resets. Even though its true for all existing M4 devices, keep room for future devices which possibly may not have local resets and only have a module reset. Therefore introduce a central function, k3_m4_rproc_release() which handles both type of devices (with and without local resets), and use it throughout the driver to release the remote processor from reset. Also, for devices with local reset, Assert the module reset back in case the local reset deassert operation failed. This is done to align the reset release implementation with DSP remoteproc driver and can be factored out later. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-19-b-padhi@ti.com/ v11: Changelog: 0. New patch in this series. 1. Split [v10 17/33] into [v11 18/35] and [v11 19/35].=20 Link to v10: https://lore.kernel.org/all/20250417182001.3903905-18-b-padhi@ti.com/ drivers/remoteproc/ti_k3_m4_remoteproc.c | 33 +++++++++++++++++++----- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 5123162748953..d9c105bc4845d 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -21,6 +21,30 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 +/* Release the M4 remote processor from reset */ +static int k3_m4_rproc_release(struct k3_rproc *kproc) +{ + struct device *dev =3D kproc->dev; + int ret; + + if (kproc->data->uses_lreset) { + ret =3D reset_control_deassert(kproc->reset); + if (ret) { + dev_err(dev, "local-reset deassert failed, ret =3D %d\n", ret); + if (kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, + kproc->ti_sci_id)) + dev_warn(dev, "module-reset assert back failed\n"); + } + } else { + ret =3D kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci, + kproc->ti_sci_id); + if (ret) + dev_err(dev, "module-reset deassert failed, ret =3D %d\n", ret); + } + + return ret; +} + static int k3_m4_rproc_ping_mbox(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; @@ -347,20 +371,15 @@ static void k3_m4_release_tsp(void *data) static int k3_m4_rproc_start(struct rproc *rproc) { struct k3_rproc *kproc =3D rproc->priv; - struct device *dev =3D kproc->dev; int ret; =20 ret =3D k3_m4_rproc_ping_mbox(kproc); if (ret) return ret; =20 - ret =3D reset_control_deassert(kproc->reset); - if (ret) { - dev_err(dev, "local-reset deassert failed, ret =3D %d\n", ret); - return ret; - } + ret =3D k3_m4_rproc_release(kproc); =20 - return 0; + return ret; } =20 /* --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from lelvem-ot02.ext.ti.com (lelvem-ot02.ext.ti.com [198.47.23.235]) (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 496271F1906; Tue, 13 May 2025 05:46:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.235 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115208; cv=none; b=Tpjrm3MbSJw63h7LcpA9DgmIDwZkh1UioriWjwG/mixxGr9DQqKujouBAjmlLSiwjtSXPM5uOfQVL4Df+QgSXS9PtgBMMLWsRbELnvFpnFW9N5k7e/aayfj6hh1WMRx3L82vaG7qtS+cLbyQCHl3iIx5TRPzKeYDwMS9Lguc+uo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115208; c=relaxed/simple; bh=JJn92PQFfVWk5XygAiJ4zijhsQAzjIFu8t6FeDzq7JA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Wr4agczS0Yw5co/Q3Jz3gyNbpgz1/P/BjTByYX7N2RGzUsP4OY848Pst1LYN6OcQdFJROauMiB+dWsTt/pMZWoydN6ex3pI/pTh51m/yiGMp4/rA0RkJw07/FD06HSzHFZ58DHd3mSk8c7rQNAtbhvL/9ZWJAAonwvLpkj5ZZQY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=jREo9fOK; arc=none smtp.client-ip=198.47.23.235 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="jREo9fOK" Received: from fllv0035.itg.ti.com ([10.64.41.0]) by lelvem-ot02.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kcaL2986906 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:46:39 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115199; bh=Nws17/MmADb4S1sCO5hEd39axacVL7RiGC1Wrf8PR7s=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=jREo9fOKLAMvcPdcIpfsQCl/7NVJh53c4gr62E2qqOR1gdeNpKDXctT15caz0K6S6 556kEh3HgoqMusJVTi36V8c5DTBB1pVsGqrD/x4wprRxMKTsxSEM6AYNDriB8XQCEX rfvRC326cRNkTo8vj5P1s2QieSEVXEf/lttIDZMw= Received: from DLEE107.ent.ti.com (dlee107.ent.ti.com [157.170.170.37]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kctX088885 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:46:38 -0500 Received: from DLEE101.ent.ti.com (157.170.170.31) by DLEE107.ent.ti.com (157.170.170.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:46:38 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE101.ent.ti.com (157.170.170.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:46:38 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqT131001; Tue, 13 May 2025 00:46:34 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 20/36] remoteproc: k3: Refactor rproc_release() implementation into common driver Date: Tue, 13 May 2025 11:14:54 +0530 Message-ID: <20250513054510.3439842-21-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The rproc_release() implementations in TI K3 DSP and M4 remoteproc drivers deassert reset in the same way. Refactor the above function into the ti_k3_common.c driver as k3_rproc_release() and use it throughout DSP and M4 drivers for releasing the reset from the remote processor. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-20-b-padhi@ti.com/ v11: Changelog: 1. Split [v10 17/33] into [v11 18/35] and [v11 19/35]. 2. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-18-b-padhi@ti.com/ v10: Changelog: 1. Split [v9 13/26] into [v10 16/33] and [v10 17/33] patches.=20 Link to v9: https://lore.kernel.org/all/20250317120622.1746415-14-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.c | 25 ++++++++++++++++++++++ drivers/remoteproc/ti_k3_common.h | 1 + drivers/remoteproc/ti_k3_dsp_remoteproc.c | 26 +---------------------- drivers/remoteproc/ti_k3_m4_remoteproc.c | 26 +---------------------- 4 files changed, 28 insertions(+), 50 deletions(-) diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c index 7cd5f3ece8197..ab1507290ee01 100644 --- a/drivers/remoteproc/ti_k3_common.c +++ b/drivers/remoteproc/ti_k3_common.c @@ -130,5 +130,30 @@ int k3_rproc_reset(struct k3_rproc *kproc) } EXPORT_SYMBOL_GPL(k3_rproc_reset); =20 +/* Release the remote processor from reset */ +int k3_rproc_release(struct k3_rproc *kproc) +{ + struct device *dev =3D kproc->dev; + int ret; + + if (kproc->data->uses_lreset) { + ret =3D reset_control_deassert(kproc->reset); + if (ret) { + dev_err(dev, "local-reset deassert failed, (%pe)\n", ERR_PTR(ret)); + if (kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, + kproc->ti_sci_id)) + dev_warn(dev, "module-reset assert back failed\n"); + } + } else { + ret =3D kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci, + kproc->ti_sci_id); + if (ret) + dev_err(dev, "module-reset deassert failed (%pe)\n", ERR_PTR(ret)); + } + + return ret; +} +EXPORT_SYMBOL_GPL(k3_rproc_release); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index a2bb2484cebee..c64c3fcb531ee 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -96,4 +96,5 @@ struct k3_rproc { void k3_rproc_mbox_callback(struct mbox_client *client, void *data); void k3_rproc_kick(struct rproc *rproc, int vqid); int k3_rproc_reset(struct k3_rproc *kproc); +int k3_rproc_release(struct k3_rproc *kproc); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 08e6dde3ea267..577dcd65093a9 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -24,30 +24,6 @@ =20 #define KEYSTONE_RPROC_LOCAL_ADDRESS_MASK (SZ_16M - 1) =20 -/* Release the DSP processor from reset */ -static int k3_dsp_rproc_release(struct k3_rproc *kproc) -{ - struct device *dev =3D kproc->dev; - int ret; - - if (kproc->data->uses_lreset) { - ret =3D reset_control_deassert(kproc->reset); - if (ret) { - dev_err(dev, "local-reset deassert failed, (%pe)\n", ERR_PTR(ret)); - if (kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, - kproc->ti_sci_id)) - dev_warn(dev, "module-reset assert back failed\n"); - } - } else { - ret =3D kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci, - kproc->ti_sci_id); - if (ret) - dev_err(dev, "module-reset deassert failed (%pe)\n", ERR_PTR(ret)); - } - - return ret; -} - static int k3_dsp_rproc_request_mbox(struct rproc *rproc) { struct k3_rproc *kproc =3D rproc->priv; @@ -156,7 +132,7 @@ static int k3_dsp_rproc_start(struct rproc *rproc) if (ret) return ret; =20 - ret =3D k3_dsp_rproc_release(kproc); + ret =3D k3_rproc_release(kproc); if (ret) return ret; =20 diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index d9c105bc4845d..3a21ff95046fd 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -21,30 +21,6 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 -/* Release the M4 remote processor from reset */ -static int k3_m4_rproc_release(struct k3_rproc *kproc) -{ - struct device *dev =3D kproc->dev; - int ret; - - if (kproc->data->uses_lreset) { - ret =3D reset_control_deassert(kproc->reset); - if (ret) { - dev_err(dev, "local-reset deassert failed, ret =3D %d\n", ret); - if (kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, - kproc->ti_sci_id)) - dev_warn(dev, "module-reset assert back failed\n"); - } - } else { - ret =3D kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci, - kproc->ti_sci_id); - if (ret) - dev_err(dev, "module-reset deassert failed, ret =3D %d\n", ret); - } - - return ret; -} - static int k3_m4_rproc_ping_mbox(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; @@ -377,7 +353,7 @@ static int k3_m4_rproc_start(struct rproc *rproc) if (ret) return ret; =20 - ret =3D k3_m4_rproc_release(kproc); + ret =3D k3_rproc_release(kproc); =20 return ret; } --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot04.ext.ti.com (fllvem-ot04.ext.ti.com [198.47.19.246]) (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 B47F31F4625; Tue, 13 May 2025 05:46:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.246 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115211; cv=none; b=IGmc+52/Fn+VvetlO+JyOb6UqXnPNYeSl7j/+1fXaxl10xGJbgBDY2AECu/SoW1cM+GYRHtHAwGVl2n8Gb9v4sqox3OvLPCBI+9IWVu8ogKHVGEX7ZifJKbKf7YYi0mWYcBkQHm+8dB5GJm2+ujslbUSImebBd0qTZrnfrJJj/k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115211; c=relaxed/simple; bh=fGe9s3NDUx6wFV5nWsBkDlsnv7XN6e/n3ZReyTb76ss=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=NBDPw/Y3pM1C4KIH89xCE/qP7nh0jUMopip61OMWep89kth8zyK9NefcFau6UScbY0Gn4n8r5qnBeozPKHBXdoCT6nDuWIF839AyHhc4IVLwEcOcfFT8UXbCjJAEAbzXNlVttDtYoDhgHVR/A5InQJvkIHYk9LWqY9xLLKVyzO8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=JXa9J2/Q; arc=none smtp.client-ip=198.47.19.246 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="JXa9J2/Q" Received: from lelv0266.itg.ti.com ([10.180.67.225]) by fllvem-ot04.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kgaN2764348 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:46:42 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115202; bh=XF9RyQ6Pcikze3L4r9TAbi4mF2d3RrAh3IUNhHe50hw=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=JXa9J2/Qesj1ut7SsPs/k0dwXTTYiPACER8w3PRmg7h5sxhlSVIprrXWVqC3MzTU+ n1oBHaWjrTFXFnuib8OMoP1e/ebXjX3ZGpStweMIKKR7fOKezx3GyhVmHAoeex6eli OpByR+dRzEJsKsF1tjzi+iES66O1b5s013XWLWtQ= Received: from DLEE115.ent.ti.com (dlee115.ent.ti.com [157.170.170.26]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kg8V028152 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:46:42 -0500 Received: from DLEE114.ent.ti.com (157.170.170.25) by DLEE115.ent.ti.com (157.170.170.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:46:42 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE114.ent.ti.com (157.170.170.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:46:42 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqU131001; Tue, 13 May 2025 00:46:38 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 21/36] remoteproc: k3-m4: Ping the mbox while acquiring the channel Date: Tue, 13 May 2025 11:14:55 +0530 Message-ID: <20250513054510.3439842-22-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The TI K3 M4 remoteproc driver acquires the mailbox channel in probe but sends a message through the acquired channel later in .attach()/.start() callbacks. Put both the things together in the form of 'k3_m4_rproc_request_mbox()' function and invoke that in the probe routine. This is done to align the rproc_request_mbox() implementation with R5 and DSP drivers which can be factored out at a later stage. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-21-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-19-b-padhi@ti.com/ v10: Changelog: 1. Split [v9 14/26] into [v10 18/33] and [v10 19/33] patches.=20 Link to v9: https://lore.kernel.org/all/20250317120622.1746415-15-b-padhi@ti.com/ drivers/remoteproc/ti_k3_m4_remoteproc.c | 44 ++++++++++-------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 3a21ff95046fd..182ac71e22da3 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -21,11 +21,24 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 -static int k3_m4_rproc_ping_mbox(struct k3_rproc *kproc) +static int k3_m4_rproc_request_mbox(struct rproc *rproc) { + struct k3_rproc *kproc =3D rproc->priv; + struct mbox_client *client =3D &kproc->client; struct device *dev =3D kproc->dev; int ret; =20 + client->dev =3D dev; + client->tx_done =3D NULL; + client->rx_callback =3D k3_rproc_mbox_callback; + client->tx_block =3D false; + client->knows_txdone =3D false; + + kproc->mbox =3D mbox_request_channel(client, 0); + if (IS_ERR(kproc->mbox)) + return dev_err_probe(dev, PTR_ERR(kproc->mbox), + "mbox_request_channel failed\n"); + /* * Ping the remote processor, this is only for sanity-sake for now; * there is no functional effect whatsoever. @@ -36,6 +49,7 @@ static int k3_m4_rproc_ping_mbox(struct k3_rproc *kproc) ret =3D mbox_send_message(kproc->mbox, (void *)RP_MBOX_ECHO_REQUEST); if (ret < 0) { dev_err(dev, "mbox_send_message failed: %d\n", ret); + mbox_free_channel(kproc->mbox); return ret; } =20 @@ -347,15 +361,8 @@ static void k3_m4_release_tsp(void *data) static int k3_m4_rproc_start(struct rproc *rproc) { struct k3_rproc *kproc =3D rproc->priv; - int ret; - - ret =3D k3_m4_rproc_ping_mbox(kproc); - if (ret) - return ret; - - ret =3D k3_rproc_release(kproc); =20 - return ret; + return k3_rproc_release(kproc); } =20 /* @@ -380,13 +387,6 @@ static int k3_m4_rproc_stop(struct rproc *rproc) */ static int k3_m4_rproc_attach(struct rproc *rproc) { - struct k3_rproc *kproc =3D rproc->priv; - int ret; - - ret =3D k3_m4_rproc_ping_mbox(kproc); - if (ret) - return ret; - return 0; } =20 @@ -493,15 +493,9 @@ static int k3_m4_rproc_probe(struct platform_device *p= dev) dev_info(dev, "configured M4F for remoteproc mode\n"); } =20 - kproc->client.dev =3D dev; - kproc->client.tx_done =3D NULL; - kproc->client.rx_callback =3D k3_rproc_mbox_callback; - kproc->client.tx_block =3D false; - kproc->client.knows_txdone =3D false; - kproc->mbox =3D mbox_request_channel(&kproc->client, 0); - if (IS_ERR(kproc->mbox)) - return dev_err_probe(dev, PTR_ERR(kproc->mbox), - "mbox_request_channel failed\n"); + ret =3D k3_m4_rproc_request_mbox(rproc); + if (ret) + return ret; =20 ret =3D devm_rproc_add(dev, rproc); if (ret) --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot04.ext.ti.com (fllvem-ot04.ext.ti.com [198.47.19.246]) (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 A41A51E9915; Tue, 13 May 2025 05:46:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.246 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115216; cv=none; b=UOu86B6cMtTuW9MsBF0eY5EhlaOwN32e5z/9ZaKPtTCsVp8OJWCmSQvAVAgIDoUfyoOIsvy7BLfTGFs85fHo8AK6NUM0BOCHT8NZROXKnucVGqLrz5Shp59T0Ybu8X4h3iB6KMnYFYfgfqrv49K4w7vgpWaxJIv8xfC2L+gRqG4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115216; c=relaxed/simple; bh=Px8UWBxiTkiuiKQEudgK+dPfbspkwIbpQ/TJ9xdd+CM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=KqAKs9J8e+Aul5BH66NuiSjcKs6B93x1xR04g2e/hSIm2c0RtzR70BtovwafP9Xg4+ydn6wKyNuWX5yY2jrrTSNhLxOoO52XOotP8cGQdlJR96emiNL2Gb62xJyhnkeAnXrnIgWGKtwUdujvTRkdcS2AS76C/zSL1WIsLuzIR54= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=lOmb7HKa; arc=none smtp.client-ip=198.47.19.246 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="lOmb7HKa" Received: from lelvem-sh01.itg.ti.com ([10.180.77.71]) by fllvem-ot04.ext.ti.com (8.15.2/8.15.2) with ESMTP id 54D5kl7a2764352; Tue, 13 May 2025 00:46:47 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115207; bh=H6bMeGxaPSkwtnr9c78x9XjtyoRCiezMUnGOu46Y/zg=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=lOmb7HKah8WBDxerSQZlGPYearTSwe9s8h+xdBrEjuD9zeeHivizlFAJ7RwU2538W Yxr4W5aszgqRRNY+UcGL3BMoDNkTw8ZlBHSr9Ruuu9ccqOFUWeklPp1UUrch89Ahxg MvMZtF9Eio8DzA/F/LgFHL+uI0oBibQnYIQxzE18= Received: from DLEE108.ent.ti.com (dlee108.ent.ti.com [157.170.170.38]) by lelvem-sh01.itg.ti.com (8.18.1/8.18.1) with ESMTPS id 54D5kkwD1533957 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA256 bits=128 verify=FAIL); Tue, 13 May 2025 00:46:47 -0500 Received: from DLEE101.ent.ti.com (157.170.170.31) by DLEE108.ent.ti.com (157.170.170.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:46:46 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE101.ent.ti.com (157.170.170.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:46:46 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqV131001; Tue, 13 May 2025 00:46:42 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 22/36] remoteproc: k3: Refactor rproc_request_mbox() implementations into common driver Date: Tue, 13 May 2025 11:14:56 +0530 Message-ID: <20250513054510.3439842-23-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The rproc_request_mbox() implementations in TI K3 R5, DSP and M4 remoteproc drivers acquire the mailbox channel and send the same message through the acquired channel. Refactor the above function into the ti_k3_common.c driver as k3_rproc_request_mbox() and use it throughout R5, DSP and M4 drivers. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-22-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-20-b-padhi@ti.com/ v10: Changelog: 1. Split [v9 14/26] into [v10 18/33] and [v10 19/33] patches.=20 Link to v9: https://lore.kernel.org/all/20250317120622.1746415-15-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.c | 36 ++++++++++++++++++++++ drivers/remoteproc/ti_k3_common.h | 1 + drivers/remoteproc/ti_k3_dsp_remoteproc.c | 36 +--------------------- drivers/remoteproc/ti_k3_m4_remoteproc.c | 37 +---------------------- drivers/remoteproc/ti_k3_r5_remoteproc.c | 37 +---------------------- 5 files changed, 40 insertions(+), 107 deletions(-) diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c index ab1507290ee01..908bc2209c2bb 100644 --- a/drivers/remoteproc/ti_k3_common.c +++ b/drivers/remoteproc/ti_k3_common.c @@ -155,5 +155,41 @@ int k3_rproc_release(struct k3_rproc *kproc) } EXPORT_SYMBOL_GPL(k3_rproc_release); =20 +int k3_rproc_request_mbox(struct rproc *rproc) +{ + struct k3_rproc *kproc =3D rproc->priv; + struct mbox_client *client =3D &kproc->client; + struct device *dev =3D kproc->dev; + int ret; + + client->dev =3D dev; + client->tx_done =3D NULL; + client->rx_callback =3D k3_rproc_mbox_callback; + client->tx_block =3D false; + client->knows_txdone =3D false; + + kproc->mbox =3D mbox_request_channel(client, 0); + if (IS_ERR(kproc->mbox)) + return dev_err_probe(dev, PTR_ERR(kproc->mbox), + "mbox_request_channel failed\n"); + + /* + * Ping the remote processor, this is only for sanity-sake for now; + * there is no functional effect whatsoever. + * + * Note that the reply will _not_ arrive immediately: this message + * will wait in the mailbox fifo until the remote processor is booted. + */ + ret =3D mbox_send_message(kproc->mbox, (void *)RP_MBOX_ECHO_REQUEST); + if (ret < 0) { + dev_err(dev, "mbox_send_message failed (%pe)\n", ERR_PTR(ret)); + mbox_free_channel(kproc->mbox); + return ret; + } + + return 0; +} +EXPORT_SYMBOL_GPL(k3_rproc_request_mbox); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index c64c3fcb531ee..01606513791f2 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -97,4 +97,5 @@ void k3_rproc_mbox_callback(struct mbox_client *client, v= oid *data); void k3_rproc_kick(struct rproc *rproc, int vqid); int k3_rproc_reset(struct k3_rproc *kproc); int k3_rproc_release(struct k3_rproc *kproc); +int k3_rproc_request_mbox(struct rproc *rproc); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 577dcd65093a9..d1d35f819c232 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -24,40 +24,6 @@ =20 #define KEYSTONE_RPROC_LOCAL_ADDRESS_MASK (SZ_16M - 1) =20 -static int k3_dsp_rproc_request_mbox(struct rproc *rproc) -{ - struct k3_rproc *kproc =3D rproc->priv; - struct mbox_client *client =3D &kproc->client; - struct device *dev =3D kproc->dev; - int ret; - - client->dev =3D dev; - client->tx_done =3D NULL; - client->rx_callback =3D k3_rproc_mbox_callback; - client->tx_block =3D false; - client->knows_txdone =3D false; - - kproc->mbox =3D mbox_request_channel(client, 0); - if (IS_ERR(kproc->mbox)) - return dev_err_probe(dev, PTR_ERR(kproc->mbox), - "mbox_request_channel failed\n"); - - /* - * Ping the remote processor, this is only for sanity-sake for now; - * there is no functional effect whatsoever. - * - * Note that the reply will _not_ arrive immediately: this message - * will wait in the mailbox fifo until the remote processor is booted. - */ - ret =3D mbox_send_message(kproc->mbox, (void *)RP_MBOX_ECHO_REQUEST); - if (ret < 0) { - dev_err(dev, "mbox_send_message failed (%pe)\n", ERR_PTR(ret)); - mbox_free_channel(kproc->mbox); - return ret; - } - - return 0; -} /* * The C66x DSP cores have a local reset that affects only the CPU, and a * generic module reset that powers on the device and allows the DSP inter= nal @@ -443,7 +409,7 @@ static int k3_dsp_rproc_probe(struct platform_device *p= dev) kproc->dev =3D dev; kproc->data =3D data; =20 - ret =3D k3_dsp_rproc_request_mbox(rproc); + ret =3D k3_rproc_request_mbox(rproc); if (ret) return ret; =20 diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 182ac71e22da3..c114369493bff 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -21,41 +21,6 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 -static int k3_m4_rproc_request_mbox(struct rproc *rproc) -{ - struct k3_rproc *kproc =3D rproc->priv; - struct mbox_client *client =3D &kproc->client; - struct device *dev =3D kproc->dev; - int ret; - - client->dev =3D dev; - client->tx_done =3D NULL; - client->rx_callback =3D k3_rproc_mbox_callback; - client->tx_block =3D false; - client->knows_txdone =3D false; - - kproc->mbox =3D mbox_request_channel(client, 0); - if (IS_ERR(kproc->mbox)) - return dev_err_probe(dev, PTR_ERR(kproc->mbox), - "mbox_request_channel failed\n"); - - /* - * Ping the remote processor, this is only for sanity-sake for now; - * there is no functional effect whatsoever. - * - * Note that the reply will _not_ arrive immediately: this message - * will wait in the mailbox fifo until the remote processor is booted. - */ - ret =3D mbox_send_message(kproc->mbox, (void *)RP_MBOX_ECHO_REQUEST); - if (ret < 0) { - dev_err(dev, "mbox_send_message failed: %d\n", ret); - mbox_free_channel(kproc->mbox); - return ret; - } - - return 0; -} - /* * The M4 cores have a local reset that affects only the CPU, and a * generic module reset that powers on the device and allows the internal @@ -493,7 +458,7 @@ static int k3_m4_rproc_probe(struct platform_device *pd= ev) dev_info(dev, "configured M4F for remoteproc mode\n"); } =20 - ret =3D k3_m4_rproc_request_mbox(rproc); + ret =3D k3_rproc_request_mbox(rproc); if (ret) return ret; =20 diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index 337e3711cb143..4082cc61a41af 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -284,41 +284,6 @@ static inline int k3_r5_core_run(struct k3_rproc *kpro= c) 0, PROC_BOOT_CTRL_FLAG_R5_CORE_HALT); } =20 -static int k3_r5_rproc_request_mbox(struct rproc *rproc) -{ - struct k3_rproc *kproc =3D rproc->priv; - struct mbox_client *client =3D &kproc->client; - struct device *dev =3D kproc->dev; - int ret; - - client->dev =3D dev; - client->tx_done =3D NULL; - client->rx_callback =3D k3_rproc_mbox_callback; - client->tx_block =3D false; - client->knows_txdone =3D false; - - kproc->mbox =3D mbox_request_channel(client, 0); - if (IS_ERR(kproc->mbox)) - return dev_err_probe(dev, PTR_ERR(kproc->mbox), - "mbox_request_channel failed\n"); - - /* - * Ping the remote processor, this is only for sanity-sake for now; - * there is no functional effect whatsoever. - * - * Note that the reply will _not_ arrive immediately: this message - * will wait in the mailbox fifo until the remote processor is booted. - */ - ret =3D mbox_send_message(kproc->mbox, (void *)RP_MBOX_ECHO_REQUEST); - if (ret < 0) { - dev_err(dev, "mbox_send_message failed: %d\n", ret); - mbox_free_channel(kproc->mbox); - return ret; - } - - return 0; -} - /* * The R5F cores have controls for both a reset and a halt/run. The code * execution from DDR requires the initial boot-strapping code to be run @@ -1357,7 +1322,7 @@ static int k3_r5_cluster_rproc_init(struct platform_d= evice *pdev) kproc =3D core->kproc; rproc =3D kproc->rproc; =20 - ret =3D k3_r5_rproc_request_mbox(rproc); + ret =3D k3_rproc_request_mbox(rproc); if (ret) return ret; =20 --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot04.ext.ti.com (fllvem-ot04.ext.ti.com [198.47.19.246]) (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 1F68B1F75A6; Tue, 13 May 2025 05:46:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.246 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115219; cv=none; b=gA10hBcqTjH2lpIwmeg/Q9to4J8w6FVF9C5Cu4O5/hyPKe4a2pP4V298Rb8bfUnNDI66yP2KezPR2Cus4pVSfANk6KIDLAOmtunn4RhxJiGuP8tBRdHdL05anPVJ+2J8gdfswfVMvk65JPZhRlJD1bpQTPKfKKQW3+iHsCqNor0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115219; c=relaxed/simple; bh=B8VHH8Yxr3XjdtMnB82WQN/QOL4irCgplIOYCG/DyyM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=iMnTi/Unw+LGEIIUH3uzBim2QObV9eqMAgDyMBrV67EoRfD6bgeDNS4Vi63J807ZyAI/5WMwzxkmbDJm8ombVf70Xdznwa14p7bHnA5sRsvzzMBeCdFsl8+2gBIqXQoL34H/BZJK0E12BaHstmS7h6p8w6P3rhcI57mdiNADn4U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=smmjgtwn; arc=none smtp.client-ip=198.47.19.246 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="smmjgtwn" Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllvem-ot04.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kpau2764360 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:46:51 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115211; bh=kZhNnFxB36ojRnRKdzvI326rAgX8fD+AEzjafybBWJM=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=smmjgtwnidEiicmxEHppdxpZwB3DAaTnbbtqmFJLzSz6ltgoUECYAaVSArnSD6pgm 67i3eUNM+MjwOInQr8QdO75KIMS/hHh66KsyylDG5qAtgSqbcp9TO4+NoIE3S61faE PCrPWv4T2FLIQMi+xTHiK+b2nfcfWGUWNvlzHuNo= Received: from DLEE104.ent.ti.com (dlee104.ent.ti.com [157.170.170.34]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kpX3088932 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:46:51 -0500 Received: from DLEE103.ent.ti.com (157.170.170.33) by DLEE104.ent.ti.com (157.170.170.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:46:50 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE103.ent.ti.com (157.170.170.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:46:50 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqW131001; Tue, 13 May 2025 00:46:46 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 23/36] remoteproc: k3-dsp: Don't override rproc ops in IPC-only mode Date: Tue, 13 May 2025 11:14:57 +0530 Message-ID: <20250513054510.3439842-24-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" Currently, the driver overrides the rproc ops when booting in IPC-only mode. Remove these overrides and register the ops unconditionally. This requires to have IPC-only mode checks in the .prepare and .unprepare ops and returning early. The other rproc ops are invoked when booting either in IPC-only mode or in remoteproc mode but not both. This is done to align the rproc ops implementations of DSP driver with M4 driver and can be factored out at a later stage. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-23-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-21-b-padhi@ti.com/ v10: Changelog: 1. New patch. Gets rid of overriding function pointers. Makes further commits more atomic. drivers/remoteproc/ti_k3_dsp_remoteproc.c | 27 +++++++++++++---------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index d1d35f819c232..9037e3948f4f5 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -40,6 +40,10 @@ static int k3_dsp_rproc_prepare(struct rproc *rproc) struct device *dev =3D kproc->dev; int ret; =20 + /* If the core is running already no need to deassert the module reset */ + if (rproc->state =3D=3D RPROC_DETACHED) + return 0; + ret =3D kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci, kproc->ti_sci_id); if (ret) @@ -64,6 +68,10 @@ static int k3_dsp_rproc_unprepare(struct rproc *rproc) struct device *dev =3D kproc->dev; int ret; =20 + /* If the core is running already no need to deassert the module reset */ + if (rproc->state =3D=3D RPROC_DETACHED) + return 0; + ret =3D kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, kproc->ti_sci_id); if (ret) @@ -232,10 +240,13 @@ static void *k3_dsp_rproc_da_to_va(struct rproc *rpro= c, u64 da, size_t len, bool } =20 static const struct rproc_ops k3_dsp_rproc_ops =3D { - .start =3D k3_dsp_rproc_start, - .stop =3D k3_dsp_rproc_stop, - .kick =3D k3_rproc_kick, - .da_to_va =3D k3_dsp_rproc_da_to_va, + .start =3D k3_dsp_rproc_start, + .stop =3D k3_dsp_rproc_stop, + .attach =3D k3_dsp_rproc_attach, + .detach =3D k3_dsp_rproc_detach, + .kick =3D k3_rproc_kick, + .da_to_va =3D k3_dsp_rproc_da_to_va, + .get_loaded_rsc_table =3D k3_dsp_get_loaded_rsc_table, }; =20 static int k3_dsp_rproc_of_get_memories(struct platform_device *pdev, @@ -458,14 +469,6 @@ static int k3_dsp_rproc_probe(struct platform_device *= pdev) if (p_state) { dev_info(dev, "configured DSP for IPC-only mode\n"); rproc->state =3D RPROC_DETACHED; - /* override rproc ops with only required IPC-only mode ops */ - rproc->ops->prepare =3D NULL; - rproc->ops->unprepare =3D NULL; - rproc->ops->start =3D NULL; - rproc->ops->stop =3D NULL; - rproc->ops->attach =3D k3_dsp_rproc_attach; - rproc->ops->detach =3D k3_dsp_rproc_detach; - rproc->ops->get_loaded_rsc_table =3D k3_dsp_get_loaded_rsc_table; } else { dev_info(dev, "configured DSP for remoteproc mode\n"); /* --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot04.ext.ti.com (fllvem-ot04.ext.ti.com [198.47.19.246]) (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 1B2391FBC90; Tue, 13 May 2025 05:47:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.246 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115224; cv=none; b=FnxRwVyZZPMV937dEeyBK8YngItLVVraK154Q8o55X4zvfRdaHnqF6+68XX7neW7BVNbxcbF9kVNfPgDeCc/38nFM1wqvUYmz6zhAd4qhWm/VM980qYeyI9y+ogAaw1gr1Rc+wHXon2mVhqZHKJOkk0aCU2Dw9Mg2Y+3KDYSB90= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115224; c=relaxed/simple; bh=oTnOOX41I/hrmk9SjywTSQM7hKsS4e2/6G3wbfhUwkg=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Fb9FpxLINc4VwTdpqXEzufPINDfafgD2u4VCAqUFD6wvFH/1fuuWbjJvH4SAbWk4B3gUA3SKaSncKtdloiGorxLqSz319D7FHYeGAoKDq3/vsjLKKTsmUN6kOCczGu4PDLWg6QrHgNi1wdHJ1PLUweFhIYqFsGnniZYwJ4lbTOI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=DQYW+otS; arc=none smtp.client-ip=198.47.19.246 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="DQYW+otS" Received: from fllv0034.itg.ti.com ([10.64.40.246]) by fllvem-ot04.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kt0K2764408 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:46:55 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115215; bh=ABgN5yYY7NglN8qCDPJK8JIaDdInuNrSv3MwESf8H9I=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=DQYW+otSSqXLm7WtunoBI1bqoq1iBtQaqyKCdrrwkRW4+aWBMiB+p60wAQxswRir+ 8ip9Sr3+5pkugMiBq6pq6YS2CmbLQKZZ1TfU7STUr29uol9xNbFXhWQa3ZhB/wxa94 ieeU99Zt0aIZt4N4JkwzWCfZ8y9W7NhFjsMncUqA= Received: from DFLE114.ent.ti.com (dfle114.ent.ti.com [10.64.6.35]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5ktg1063508 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:46:55 -0500 Received: from DFLE107.ent.ti.com (10.64.6.28) by DFLE114.ent.ti.com (10.64.6.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:46:54 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DFLE107.ent.ti.com (10.64.6.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:46:54 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqX131001; Tue, 13 May 2025 00:46:51 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 24/36] remoteproc: k3-dsp: Assert local reset during .prepare callback Date: Tue, 13 May 2025 11:14:58 +0530 Message-ID: <20250513054510.3439842-25-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The ti_k3_dsp_remoteproc.c driver asserts the local reset in probe and releases the module reset in .prepare callback. This is done to ensure the core does not execute bogus code when module reset is deasserted. Put both of these operations together in .prepare callback, which is more suitable as it ensures local reset is asserted for subsequent core start operations from sysfs. This is done to align the .prepare callback of DSP with the M4 driver which can be factored out at a later stage. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-24-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-22-b-padhi@ti.com/ v10: Changelog: 1. Split [v9 15/26] into [v10 21/33] and [v10 22/33] patches.=20 Link to v9: https://lore.kernel.org/all/20250317120622.1746415-16-b-padhi@ti.com/ drivers/remoteproc/ti_k3_dsp_remoteproc.c | 30 ++++++++++++----------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 9037e3948f4f5..a43715309eed5 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -44,6 +44,22 @@ static int k3_dsp_rproc_prepare(struct rproc *rproc) if (rproc->state =3D=3D RPROC_DETACHED) return 0; =20 + /* + * Ensure the local reset is asserted so the core doesn't + * execute bogus code when the module reset is released. + */ + if (kproc->data->uses_lreset) { + ret =3D k3_rproc_reset(kproc); + if (ret) + return ret; + + ret =3D reset_control_status(kproc->reset); + if (ret <=3D 0) { + dev_err(dev, "local reset still not asserted\n"); + return ret; + } + } + ret =3D kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci, kproc->ti_sci_id); if (ret) @@ -471,20 +487,6 @@ static int k3_dsp_rproc_probe(struct platform_device *= pdev) rproc->state =3D RPROC_DETACHED; } else { dev_info(dev, "configured DSP for remoteproc mode\n"); - /* - * ensure the DSP local reset is asserted to ensure the DSP - * doesn't execute bogus code in .prepare() when the module - * reset is released. - */ - if (data->uses_lreset) { - ret =3D reset_control_status(kproc->reset); - if (ret < 0) { - return dev_err_probe(dev, ret, "failed to get reset status\n"); - } else if (ret =3D=3D 0) { - dev_warn(dev, "local reset is deasserted for device\n"); - k3_rproc_reset(kproc); - } - } } =20 ret =3D devm_rproc_add(dev, rproc); --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot04.ext.ti.com (fllvem-ot04.ext.ti.com [198.47.19.246]) (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 790F51FCFE7; Tue, 13 May 2025 05:47:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.246 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115229; cv=none; b=o/qVAOvp5eK25+iXJFrJ07rCVMY8zoLLuNJA3Qcux/bsW14MaFwzVMorOdE9EeKtpYLGTnPeCEcX+fgR798Pv+74Kv0ZScI6SdKDkcUgQlGAVAaUuSRJjpSxNNzI4sgeLgRrShZ0J5S/ui5Ksnjc0I1n9aOKEh9tMflgWmwLQjA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115229; c=relaxed/simple; bh=u5dY+ouAWOtEv570ADwCKVNiH7xemUPWz0vbklHIa4s=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pv5JDrixTwd6/3jnlgAppqXY2s5Nej0PgEoffubN+084cd8E9UvLC9qwL7FkTQyqvqkqd8ZMA482YLuDHKe4tsK+rvKhrv+kpnHQtw1EeR3BQTeIDesndMIhJfgtZqI9L6AejvC0dv0wYUF/kZVQT0TwkNmps333F3ORp1l2lY0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=Oz6KlKXQ; arc=none smtp.client-ip=198.47.19.246 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="Oz6KlKXQ" Received: from lelv0265.itg.ti.com ([10.180.67.224]) by fllvem-ot04.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kxxv2764444 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:46:59 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115219; bh=iQYCL51RcJ1tk/qjPcOt3zwFv6ArdvxIvVGi5uepxsw=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=Oz6KlKXQuleXtMID5geQ/CpFmyaJR9WM3eCcU2S/gr4OCA+TnMlEa3aqjTGZfQmd1 ieaUFSJh55SoYOwFRgNUHYnEDRNkue4VTmXD7DxCg3KPzJWT6IHBP4yHB0KHpTjtdj dInTL71LyleLzslMvWJLfVc6hoxU5lndZIGmjwLw= Received: from DLEE101.ent.ti.com (dlee101.ent.ti.com [157.170.170.31]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5kx9m032611 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:46:59 -0500 Received: from DLEE108.ent.ti.com (157.170.170.38) by DLEE101.ent.ti.com (157.170.170.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:46:58 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE108.ent.ti.com (157.170.170.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:46:58 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqY131001; Tue, 13 May 2025 00:46:55 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 25/36] remoteproc: k3: Refactor .prepare rproc ops into common driver Date: Tue, 13 May 2025 11:14:59 +0530 Message-ID: <20250513054510.3439842-26-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The .prepare rproc ops implementations in TI K3 DSP and M4 remoteproc drivers deasserts the local and module reset of the processor to allow firmware loading into internal memory. Refactor the implementations into the ti_k3_common.c driver as k3_rproc_prepare() and register this common function as .prepare ops in the DSP and M4 drivers. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-25-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-23-b-padhi@ti.com/ v10: Changelog: 1. Split [v9 15/26] into [v10 21/33] and [v10 22/33] patches.=20 2. Don't remove dsp func override. Already done by [v10 20/33] patch. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-16-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.c | 46 ++++++++++++++++++++++ drivers/remoteproc/ti_k3_common.h | 1 + drivers/remoteproc/ti_k3_dsp_remoteproc.c | 47 +---------------------- drivers/remoteproc/ti_k3_m4_remoteproc.c | 45 +--------------------- 4 files changed, 49 insertions(+), 90 deletions(-) diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c index 908bc2209c2bb..66839c694b693 100644 --- a/drivers/remoteproc/ti_k3_common.c +++ b/drivers/remoteproc/ti_k3_common.c @@ -191,5 +191,51 @@ int k3_rproc_request_mbox(struct rproc *rproc) } EXPORT_SYMBOL_GPL(k3_rproc_request_mbox); =20 +/* + * The K3 DSP and M4 cores have a local reset that affects only the CPU, a= nd a + * generic module reset that powers on the device and allows the internal + * memories to be accessed while the local reset is asserted. This functio= n is + * used to release the global reset on remote cores to allow loading into = the + * internal RAMs. The .prepare() ops is invoked by remoteproc core before = any + * firmware loading, and is followed by the .start() ops after loading to + * actually let the remote cores to run. + */ +int k3_rproc_prepare(struct rproc *rproc) +{ + struct k3_rproc *kproc =3D rproc->priv; + struct device *dev =3D kproc->dev; + int ret; + + /* If the core is running already no need to deassert the module reset */ + if (rproc->state =3D=3D RPROC_DETACHED) + return 0; + + /* + * Ensure the local reset is asserted so the core doesn't + * execute bogus code when the module reset is released. + */ + if (kproc->data->uses_lreset) { + ret =3D k3_rproc_reset(kproc); + if (ret) + return ret; + + ret =3D reset_control_status(kproc->reset); + if (ret <=3D 0) { + dev_err(dev, "local reset still not asserted\n"); + return ret; + } + } + + ret =3D kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci, + kproc->ti_sci_id); + if (ret) { + dev_err(dev, "could not deassert module-reset for internal RAM loading\n= "); + return ret; + } + + return 0; +} +EXPORT_SYMBOL_GPL(k3_rproc_prepare); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index 01606513791f2..f1fce91190128 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -98,4 +98,5 @@ void k3_rproc_kick(struct rproc *rproc, int vqid); int k3_rproc_reset(struct k3_rproc *kproc); int k3_rproc_release(struct k3_rproc *kproc); int k3_rproc_request_mbox(struct rproc *rproc); +int k3_rproc_prepare(struct rproc *rproc); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index a43715309eed5..0f81e7c3e798e 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -24,51 +24,6 @@ =20 #define KEYSTONE_RPROC_LOCAL_ADDRESS_MASK (SZ_16M - 1) =20 -/* - * The C66x DSP cores have a local reset that affects only the CPU, and a - * generic module reset that powers on the device and allows the DSP inter= nal - * memories to be accessed while the local reset is asserted. This functio= n is - * used to release the global reset on C66x DSPs to allow loading into the= DSP - * internal RAMs. The .prepare() ops is invoked by remoteproc core before = any - * firmware loading, and is followed by the .start() ops after loading to - * actually let the C66x DSP cores run. This callback is invoked only in - * remoteproc mode. - */ -static int k3_dsp_rproc_prepare(struct rproc *rproc) -{ - struct k3_rproc *kproc =3D rproc->priv; - struct device *dev =3D kproc->dev; - int ret; - - /* If the core is running already no need to deassert the module reset */ - if (rproc->state =3D=3D RPROC_DETACHED) - return 0; - - /* - * Ensure the local reset is asserted so the core doesn't - * execute bogus code when the module reset is released. - */ - if (kproc->data->uses_lreset) { - ret =3D k3_rproc_reset(kproc); - if (ret) - return ret; - - ret =3D reset_control_status(kproc->reset); - if (ret <=3D 0) { - dev_err(dev, "local reset still not asserted\n"); - return ret; - } - } - - ret =3D kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci, - kproc->ti_sci_id); - if (ret) - dev_err(dev, "module-reset deassert failed, cannot enable internal RAM l= oading (%pe)\n", - ERR_PTR(ret)); - - return ret; -} - /* * This function implements the .unprepare() ops and performs the complime= ntary * operations to that of the .prepare() ops. The function is used to asser= t the @@ -428,7 +383,7 @@ static int k3_dsp_rproc_probe(struct platform_device *p= dev) rproc->has_iommu =3D false; rproc->recovery_disabled =3D true; if (data->uses_lreset) { - rproc->ops->prepare =3D k3_dsp_rproc_prepare; + rproc->ops->prepare =3D k3_rproc_prepare; rproc->ops->unprepare =3D k3_dsp_rproc_unprepare; } kproc =3D rproc->priv; diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index c114369493bff..7faa979f5caa9 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -21,49 +21,6 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 -/* - * The M4 cores have a local reset that affects only the CPU, and a - * generic module reset that powers on the device and allows the internal - * memories to be accessed while the local reset is asserted. This functio= n is - * used to release the global reset on remote cores to allow loading into = the - * internal RAMs. The .prepare() ops is invoked by remoteproc core before = any - * firmware loading, and is followed by the .start() ops after loading to - * actually let the remote cores to run. - */ -static int k3_m4_rproc_prepare(struct rproc *rproc) -{ - struct k3_rproc *kproc =3D rproc->priv; - struct device *dev =3D kproc->dev; - int ret; - - /* If the core is running already no need to deassert the module reset */ - if (rproc->state =3D=3D RPROC_DETACHED) - return 0; - - /* - * Ensure the local reset is asserted so the core doesn't - * execute bogus code when the module reset is released. - */ - ret =3D k3_rproc_reset(kproc); - if (ret) - return ret; - - ret =3D reset_control_status(kproc->reset); - if (ret <=3D 0) { - dev_err(dev, "local reset still not asserted\n"); - return ret; - } - - ret =3D kproc->ti_sci->ops.dev_ops.get_device(kproc->ti_sci, - kproc->ti_sci_id); - if (ret) { - dev_err(dev, "could not deassert module-reset for internal RAM loading\n= "); - return ret; - } - - return 0; -} - /* * This function implements the .unprepare() ops and performs the complime= ntary * operations to that of the .prepare() ops. The function is used to asser= t the @@ -368,7 +325,7 @@ static int k3_m4_rproc_detach(struct rproc *rproc) } =20 static const struct rproc_ops k3_m4_rproc_ops =3D { - .prepare =3D k3_m4_rproc_prepare, + .prepare =3D k3_rproc_prepare, .unprepare =3D k3_m4_rproc_unprepare, .start =3D k3_m4_rproc_start, .stop =3D k3_m4_rproc_stop, --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from lelvem-ot01.ext.ti.com (lelvem-ot01.ext.ti.com [198.47.23.234]) (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 512DF1FFC4B; Tue, 13 May 2025 05:47:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115234; cv=none; b=uJ+VIxmK6Q4f+cnBcZhi5oHhqac5njJVvDGWNmxAoL1DGToa2v7Pv12Xlwxry3RMasI7haHHrraaHnDA3APfoisHRP7EK7GHulbWdq3d5nDu50v5JDP1o57IfYzXX/qPr0cgo8gCecN/ZZ5KSR5JbLZjeBG+ikjcQ3pLHIz/KO0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115234; c=relaxed/simple; bh=uktFr7tP4QiGVTbArqqBdR+WIiOVtkVXeLFRpB06RPQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=qd2c19ezF9/J+NOU1nAjHaFFYM1+kGBpqBkkuI8s3JynkRPg8jfEFjY37x/SrFLXMQvtRdh5GmXExMQwaF0vqt5sLA6mBSVklcltmXMV8FqUEDMzAyjrFb02hmkA0mLMyk3p8ZVQ5ijFji3A3+GmS+UBbBe4usJ9xy87bRacht8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=m9kMXL7M; arc=none smtp.client-ip=198.47.23.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="m9kMXL7M" Received: from lelv0265.itg.ti.com ([10.180.67.224]) by lelvem-ot01.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5l3AP2226513 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:47:03 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115223; bh=JlDalmT9AiO1XRoPfWEWkIeyC14DwdDgNrpfVAUOfwk=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=m9kMXL7MAehaFhg04R9MS0haM5KCen0uEYxGv69uQC4XYMx5va3qiR6zpiTYJSvtq WOpEMrE7CQSGkHOG/Xg98tdVNvBR8ENdWEVqkOf3G8B9ycRjN9BOJEyrsReMOCFegl dJ+cTdks1pjkeFoAlsjDfQ6jmitp0ccTYsyFmAzM= Received: from DFLE105.ent.ti.com (dfle105.ent.ti.com [10.64.6.26]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5l3Bx032662 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:47:03 -0500 Received: from DFLE100.ent.ti.com (10.64.6.21) by DFLE105.ent.ti.com (10.64.6.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:47:03 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DFLE100.ent.ti.com (10.64.6.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:47:02 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqZ131001; Tue, 13 May 2025 00:46:59 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 26/36] remoteproc: k3: Refactor .unprepare rproc ops into common driver Date: Tue, 13 May 2025 11:15:00 +0530 Message-ID: <20250513054510.3439842-27-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The .unprepare rproc ops implementations in TI K3 DSP and M4 remoteproc drivers assert the module reset on the remote processor. Refactor the implementations into ti_k3_common.c driver as k3_rproc_unprepare() and register this common function as .unprepare ops in DSP and M4 drivers. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Updated the check in k3_rproc_unprepare() to look for RPROC_DETACHED. 2. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-26-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-24-b-padhi@ti.com/ v10: Changelog: 1. Don't remove dsp func override. Already done by [v10 20/33] patch. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-17-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.c | 30 ++++++++++++++++++++++ drivers/remoteproc/ti_k3_common.h | 1 + drivers/remoteproc/ti_k3_dsp_remoteproc.c | 29 +-------------------- drivers/remoteproc/ti_k3_m4_remoteproc.c | 31 +---------------------- 4 files changed, 33 insertions(+), 58 deletions(-) diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c index 66839c694b693..235f6fca675a3 100644 --- a/drivers/remoteproc/ti_k3_common.c +++ b/drivers/remoteproc/ti_k3_common.c @@ -237,5 +237,35 @@ int k3_rproc_prepare(struct rproc *rproc) } EXPORT_SYMBOL_GPL(k3_rproc_prepare); =20 +/* + * This function implements the .unprepare() ops and performs the complime= ntary + * operations to that of the .prepare() ops. The function is used to asser= t the + * global reset on applicable K3 DSP and M4 cores. This completes the seco= nd + * portion of powering down the remote core. The cores themselves are only + * halted in the .stop() callback through the local reset, and the .unprep= are() + * ops is invoked by the remoteproc core after the remoteproc is stopped to + * balance the global reset. + */ +int k3_rproc_unprepare(struct rproc *rproc) +{ + struct k3_rproc *kproc =3D rproc->priv; + struct device *dev =3D kproc->dev; + int ret; + + /* If the core is going to be detached do not assert the module reset */ + if (rproc->state =3D=3D RPROC_DETACHED) + return 0; + + ret =3D kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, + kproc->ti_sci_id); + if (ret) { + dev_err(dev, "module-reset assert failed\n"); + return ret; + } + + return 0; +} +EXPORT_SYMBOL_GPL(k3_rproc_unprepare); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index f1fce91190128..e0909fe0578e8 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -99,4 +99,5 @@ int k3_rproc_reset(struct k3_rproc *kproc); int k3_rproc_release(struct k3_rproc *kproc); int k3_rproc_request_mbox(struct rproc *rproc); int k3_rproc_prepare(struct rproc *rproc); +int k3_rproc_unprepare(struct rproc *rproc); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 0f81e7c3e798e..5099d21ce066f 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -24,33 +24,6 @@ =20 #define KEYSTONE_RPROC_LOCAL_ADDRESS_MASK (SZ_16M - 1) =20 -/* - * This function implements the .unprepare() ops and performs the complime= ntary - * operations to that of the .prepare() ops. The function is used to asser= t the - * global reset on applicable C66x cores. This completes the second portio= n of - * powering down the C66x DSP cores. The cores themselves are only halted = in the - * .stop() callback through the local reset, and the .unprepare() ops is i= nvoked - * by the remoteproc core after the remoteproc is stopped to balance the g= lobal - * reset. This callback is invoked only in remoteproc mode. - */ -static int k3_dsp_rproc_unprepare(struct rproc *rproc) -{ - struct k3_rproc *kproc =3D rproc->priv; - struct device *dev =3D kproc->dev; - int ret; - - /* If the core is running already no need to deassert the module reset */ - if (rproc->state =3D=3D RPROC_DETACHED) - return 0; - - ret =3D kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, - kproc->ti_sci_id); - if (ret) - dev_err(dev, "module-reset assert failed (%pe)\n", ERR_PTR(ret)); - - return ret; -} - /* * Power up the DSP remote processor. * @@ -384,7 +357,7 @@ static int k3_dsp_rproc_probe(struct platform_device *p= dev) rproc->recovery_disabled =3D true; if (data->uses_lreset) { rproc->ops->prepare =3D k3_rproc_prepare; - rproc->ops->unprepare =3D k3_dsp_rproc_unprepare; + rproc->ops->unprepare =3D k3_rproc_unprepare; } kproc =3D rproc->priv; kproc->rproc =3D rproc; diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 7faa979f5caa9..6e7d78ff78941 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -21,35 +21,6 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 -/* - * This function implements the .unprepare() ops and performs the complime= ntary - * operations to that of the .prepare() ops. The function is used to asser= t the - * global reset on applicable cores. This completes the second portion of - * powering down the remote core. The cores themselves are only halted in = the - * .stop() callback through the local reset, and the .unprepare() ops is i= nvoked - * by the remoteproc core after the remoteproc is stopped to balance the g= lobal - * reset. - */ -static int k3_m4_rproc_unprepare(struct rproc *rproc) -{ - struct k3_rproc *kproc =3D rproc->priv; - struct device *dev =3D kproc->dev; - int ret; - - /* If the core is going to be detached do not assert the module reset */ - if (rproc->state =3D=3D RPROC_DETACHED) - return 0; - - ret =3D kproc->ti_sci->ops.dev_ops.put_device(kproc->ti_sci, - kproc->ti_sci_id); - if (ret) { - dev_err(dev, "module-reset assert failed\n"); - return ret; - } - - return 0; -} - /* * This function implements the .get_loaded_rsc_table() callback and is us= ed * to provide the resource table for a booted remote processor in IPC-only @@ -326,7 +297,7 @@ static int k3_m4_rproc_detach(struct rproc *rproc) =20 static const struct rproc_ops k3_m4_rproc_ops =3D { .prepare =3D k3_rproc_prepare, - .unprepare =3D k3_m4_rproc_unprepare, + .unprepare =3D k3_rproc_unprepare, .start =3D k3_m4_rproc_start, .stop =3D k3_m4_rproc_stop, .attach =3D k3_m4_rproc_attach, --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot04.ext.ti.com (fllvem-ot04.ext.ti.com [198.47.19.246]) (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 8635920100D; Tue, 13 May 2025 05:47:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.246 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115236; cv=none; b=I9vNWHt4etRrGnvq2ON2bD5kGZaii6bIt4QlKDucFzSJ3Jgdbcn5/LrPGyAkBRnhf+nH5zZmg3j1zJ4uw7rr3OsXhcCHnC8O/OEljZo4cbA1x4FSxDIiAXhiF9ZoZHT44wFwyLcf8nPUpCzX/vUXnY+VDEAh/kVnHfvcCCMAqmQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115236; c=relaxed/simple; bh=MqOpYIv54AbI0UPExY1KfDVtjwlcjC14DhjRaelAEdk=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ryvrfaA/Yl1OuiaUfN/oMzuwOhyoQ9afe4p2MyJrd2zumPZesW4/qLVAnuc6sKIr7t8t0me7RYPO2P0JWO+du+16wR0kO1BnRPNjkABOeWj74mQQcv2WNFlL8BiKPjod6gZmX3JYZ/3owm3DPxypMo50Wg7LDQjQzBCzZ9gzQFQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=QIX/dg16; arc=none smtp.client-ip=198.47.19.246 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="QIX/dg16" Received: from lelv0265.itg.ti.com ([10.180.67.224]) by fllvem-ot04.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5l7hZ2764482 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:47:07 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115227; bh=3DiAhAZSBfrvgY1JC54CddHqmQInseCYzKoE2eXS63A=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=QIX/dg16PSvlfgCpT6+9oYT0x/b9FYMftCAw5Oy95piV+fqto6HSvOBQquDsbgX+1 2cx9UHcpl8TdOrRWH8isicofFhYTp9trcHJMuE2vYXpbw4TPEID+dXzS7+qAr+u1ga LrZR0ETXfS1es0ynDtryd9VhuV5sTYtrzpPi2YNE= Received: from DLEE103.ent.ti.com (dlee103.ent.ti.com [157.170.170.33]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5l7EI032709 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:47:07 -0500 Received: from DLEE102.ent.ti.com (157.170.170.32) by DLEE103.ent.ti.com (157.170.170.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:47:07 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE102.ent.ti.com (157.170.170.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:47:06 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqa131001; Tue, 13 May 2025 00:47:03 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 27/36] remoteproc: k3: Refactor .start rproc ops into common driver Date: Tue, 13 May 2025 11:15:01 +0530 Message-ID: <20250513054510.3439842-28-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The k3_dsp_rproc_start() function sets the boot vector and releases the reset on the remote processor. Whereas, the k3_m4_rproc_start() function only needs to release the reset. Refactor the k3_m4_rproc_start() into ti_k3_common.c as k3_rproc_start() and align the DSP and M4 drivers to invoke this common function when releasing the reset on the remote processor. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-27-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-25-b-padhi@ti.com/ v10: Changelog: 1. Don't remove dsp func override. Already done by [v10 20/33] patch. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-18-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.c | 15 +++++++++++++++ drivers/remoteproc/ti_k3_common.h | 1 + drivers/remoteproc/ti_k3_dsp_remoteproc.c | 3 ++- drivers/remoteproc/ti_k3_m4_remoteproc.c | 16 +--------------- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c index 235f6fca675a3..32569c00cfc0c 100644 --- a/drivers/remoteproc/ti_k3_common.c +++ b/drivers/remoteproc/ti_k3_common.c @@ -267,5 +267,20 @@ int k3_rproc_unprepare(struct rproc *rproc) } EXPORT_SYMBOL_GPL(k3_rproc_unprepare); =20 +/* + * Power up the remote processor. + * + * This function will be invoked only after the firmware for this rproc + * was loaded, parsed successfully, and all of its resource requirements + * were met. This callback is invoked only in remoteproc mode. + */ +int k3_rproc_start(struct rproc *rproc) +{ + struct k3_rproc *kproc =3D rproc->priv; + + return k3_rproc_release(kproc); +} +EXPORT_SYMBOL_GPL(k3_rproc_start); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index e0909fe0578e8..5237223f05028 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -100,4 +100,5 @@ int k3_rproc_release(struct k3_rproc *kproc); int k3_rproc_request_mbox(struct rproc *rproc); int k3_rproc_prepare(struct rproc *rproc); int k3_rproc_unprepare(struct rproc *rproc); +int k3_rproc_start(struct rproc *rproc); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 5099d21ce066f..67d46c4a1ba61 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -50,7 +50,8 @@ static int k3_dsp_rproc_start(struct rproc *rproc) if (ret) return ret; =20 - ret =3D k3_rproc_release(kproc); + /* Call the K3 common start function after doing DSP specific stuff */ + ret =3D k3_rproc_start(rproc); if (ret) return ret; =20 diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 6e7d78ff78941..af206e2f50cf5 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -244,20 +244,6 @@ static void k3_m4_release_tsp(void *data) ti_sci_proc_release(tsp); } =20 -/* - * Power up the M4 remote processor. - * - * This function will be invoked only after the firmware for this rproc - * was loaded, parsed successfully, and all of its resource requirements - * were met. This callback is invoked only in remoteproc mode. - */ -static int k3_m4_rproc_start(struct rproc *rproc) -{ - struct k3_rproc *kproc =3D rproc->priv; - - return k3_rproc_release(kproc); -} - /* * Stop the M4 remote processor. * @@ -298,7 +284,7 @@ static int k3_m4_rproc_detach(struct rproc *rproc) static const struct rproc_ops k3_m4_rproc_ops =3D { .prepare =3D k3_rproc_prepare, .unprepare =3D k3_rproc_unprepare, - .start =3D k3_m4_rproc_start, + .start =3D k3_rproc_start, .stop =3D k3_m4_rproc_stop, .attach =3D k3_m4_rproc_attach, .detach =3D k3_m4_rproc_detach, --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from lelvem-ot01.ext.ti.com (lelvem-ot01.ext.ti.com [198.47.23.234]) (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 C84F2202C3A; Tue, 13 May 2025 05:47:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115240; cv=none; b=tU3T2FAhWy1qVWuFUaCak296UR6PcaumFehDTv7/rsO/vHBXWwkgI/fczdD0rQr0k+84eW9XHI8w3vvjEKMO6oE5pmD7qEErgqgsFoctwgUCTQgsN+h5FewD0YIGpxEH2e2JL60FiX42fKtWtWM7WcbEhPEAEUbtPmeg7YfOz2s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115240; c=relaxed/simple; bh=9+lXfyLRU3iV4vTjiyry+soiiSQmbGbmpQ1g854U5fM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=fwp2cqxUXXxMb+0Fh63C2pLVFxBtd6GEsWrNH1SWP27AqIntfODuMUFMtGIY7cT9G2QooZs7/hLJpsgCoj5rrv2HHfIjdLxSnUbVep+DWhXAJfowVQjEoTDwxph1FxIXcuWM7ZzG92RdPMU/B5dDr5rOAp8M5IhEdtJwwS9jUBc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=kVzo4xeu; arc=none smtp.client-ip=198.47.23.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="kVzo4xeu" Received: from lelv0265.itg.ti.com ([10.180.67.224]) by lelvem-ot01.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5lBi82226543 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:47:11 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115231; bh=9/VJLPptnEoOwbYmd3zCUSLHZeXc2RxnXIJnaJEDJms=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=kVzo4xeuN72SwOk8I7TcpkMzCRKaG3HnZPXyAa1j/kKTZX6qR6ui6PWx/j2Q2FAL7 QWg2pd+O19qYbZK8uR+BE2llwm7B8WrvveWcJBtcIyMot+aBHcZA1vUlnAXvjdND4A aHjEE+1PsOXIItCPsfZ2achcEbKLGhYyIic42/P4= Received: from DFLE115.ent.ti.com (dfle115.ent.ti.com [10.64.6.36]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5lB9v032719 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:47:11 -0500 Received: from DFLE102.ent.ti.com (10.64.6.23) by DFLE115.ent.ti.com (10.64.6.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:47:11 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DFLE102.ent.ti.com (10.64.6.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:47:11 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqb131001; Tue, 13 May 2025 00:47:07 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 28/36] remoteproc: k3: Refactor .stop rproc ops into common driver Date: Tue, 13 May 2025 11:15:02 +0530 Message-ID: <20250513054510.3439842-29-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The .stop rproc ops implementations in TI K3 DSP and M4 remoteproc drivers put the remote processor into reset. Refactor the implementations into ti_k3_common.c driver as k3_rproc_stop() and register this common function as .stop ops in DSP and M4 drivers. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-28-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-26-b-padhi@ti.com/ v10: Changelog: 1. Don't remove dsp func override. Already done by [v10 20/33] patch. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-19-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.c | 14 ++++++++++++++ drivers/remoteproc/ti_k3_common.h | 1 + drivers/remoteproc/ti_k3_dsp_remoteproc.c | 17 +---------------- drivers/remoteproc/ti_k3_m4_remoteproc.c | 15 +-------------- 4 files changed, 17 insertions(+), 30 deletions(-) diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c index 32569c00cfc0c..50df7164b0caf 100644 --- a/drivers/remoteproc/ti_k3_common.c +++ b/drivers/remoteproc/ti_k3_common.c @@ -282,5 +282,19 @@ int k3_rproc_start(struct rproc *rproc) } EXPORT_SYMBOL_GPL(k3_rproc_start); =20 +/* + * Stop the remote processor. + * + * This function puts the remote processor into reset, and finishes proces= sing + * of any pending messages. This callback is invoked only in remoteproc mo= de. + */ +int k3_rproc_stop(struct rproc *rproc) +{ + struct k3_rproc *kproc =3D rproc->priv; + + return k3_rproc_reset(kproc); +} +EXPORT_SYMBOL_GPL(k3_rproc_stop); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index 5237223f05028..98e57a298e73a 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -101,4 +101,5 @@ int k3_rproc_request_mbox(struct rproc *rproc); int k3_rproc_prepare(struct rproc *rproc); int k3_rproc_unprepare(struct rproc *rproc); int k3_rproc_start(struct rproc *rproc); +int k3_rproc_stop(struct rproc *rproc); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 67d46c4a1ba61..f506a9360879a 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -58,21 +58,6 @@ static int k3_dsp_rproc_start(struct rproc *rproc) return 0; } =20 -/* - * Stop the DSP remote processor. - * - * This function puts the DSP processor into reset, and finishes processing - * of any pending messages. This callback is invoked only in remoteproc mo= de. - */ -static int k3_dsp_rproc_stop(struct rproc *rproc) -{ - struct k3_rproc *kproc =3D rproc->priv; - - k3_rproc_reset(kproc); - - return 0; -} - /* * Attach to a running DSP remote processor (IPC-only mode) * @@ -186,7 +171,7 @@ static void *k3_dsp_rproc_da_to_va(struct rproc *rproc,= u64 da, size_t len, bool =20 static const struct rproc_ops k3_dsp_rproc_ops =3D { .start =3D k3_dsp_rproc_start, - .stop =3D k3_dsp_rproc_stop, + .stop =3D k3_rproc_stop, .attach =3D k3_dsp_rproc_attach, .detach =3D k3_dsp_rproc_detach, .kick =3D k3_rproc_kick, diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index af206e2f50cf5..de8809cc95fe8 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -244,19 +244,6 @@ static void k3_m4_release_tsp(void *data) ti_sci_proc_release(tsp); } =20 -/* - * Stop the M4 remote processor. - * - * This function puts the M4 processor into reset, and finishes processing - * of any pending messages. This callback is invoked only in remoteproc mo= de. - */ -static int k3_m4_rproc_stop(struct rproc *rproc) -{ - struct k3_rproc *kproc =3D rproc->priv; - - return k3_rproc_reset(kproc); -} - /* * Attach to a running M4 remote processor (IPC-only mode) * @@ -285,7 +272,7 @@ static const struct rproc_ops k3_m4_rproc_ops =3D { .prepare =3D k3_rproc_prepare, .unprepare =3D k3_rproc_unprepare, .start =3D k3_rproc_start, - .stop =3D k3_m4_rproc_stop, + .stop =3D k3_rproc_stop, .attach =3D k3_m4_rproc_attach, .detach =3D k3_m4_rproc_detach, .kick =3D k3_rproc_kick, --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot03.ext.ti.com (fllvem-ot03.ext.ti.com [198.47.19.245]) (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 ED14D1EE00C; Tue, 13 May 2025 05:47:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.245 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115247; cv=none; b=G6/hc9PJ0spT22ZMv87PFCCdI7WMqWB4mdp8J2Jy2cqZFFPO0y7ll45QewG6u10AYzXXV9lUJAgbr23xqxz0YKUNQGIa1l8x8vxNKuUjlIe320wZ3BS7SiQ6lPd4Q6qoSYeD6YxPhPOjzZHDUYY8gc5piI7+/ivexygDoC7suJ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115247; c=relaxed/simple; bh=0sX7hkk+45vXuLRsZuBgacGY8u3BEg93KCbAY0/nBDs=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=LW+rIPhC/NOkhBVdsSxeS6bv1VJyV+JVtsRnCICoUDxNR4MrFcVavgzpfbWpECrkjXtw4Wazsho7W0NUd25EQqyz04QNgP4gQn4+qkGzqGckjxTNdxs5tw7Y0uqST1KeWtQLGuB5RknlhNgsrdtpkgOnThCVEBSnCV1lXiFAe4k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=nn6B50qI; arc=none smtp.client-ip=198.47.19.245 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="nn6B50qI" Received: from lelv0266.itg.ti.com ([10.180.67.225]) by fllvem-ot03.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5lFPO2210914 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:47:15 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115236; bh=0yHdHRDw7EPMsqkBKDcoOGCY5hfHrve2aNyW9vJkT2k=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=nn6B50qIiCTCkvp6riecMdV/EHty1PgqrAxOWxpgKeyf06epf+f6LAH/kguT18VPH Te2Gd6u8Coo6teAseHeFG931RKEkuhBnNxQoO9J0/n03PMcv6A/WhnyrV9ftRtnFXT tsp4QfRPdszrOLNoiGNuWoiBYJoKaCiDbqtL+j8E= Received: from DLEE108.ent.ti.com (dlee108.ent.ti.com [157.170.170.38]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5lFIA028367 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:47:15 -0500 Received: from DLEE110.ent.ti.com (157.170.170.21) by DLEE108.ent.ti.com (157.170.170.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:47:15 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE110.ent.ti.com (157.170.170.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:47:15 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqc131001; Tue, 13 May 2025 00:47:11 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 29/36] remoteproc: k3: Refactor .attach rproc ops into common driver Date: Tue, 13 May 2025 11:15:03 +0530 Message-ID: <20250513054510.3439842-30-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The .attach rproc ops implementations in TI K3 R5, DSP and M4 drivers are NOPs. Refactor the implementations into ti_k3_common.c driver as k3_rproc_attach() and register this common function as .attach ops in R5, DSP and M4 drivers. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-29-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-27-b-padhi@ti.com/ v10: Changelog: 1. Don't remove dsp func override. Already done by [v10 20/33] patch. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-20-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.c | 12 ++++++++++++ drivers/remoteproc/ti_k3_common.h | 1 + drivers/remoteproc/ti_k3_dsp_remoteproc.c | 13 +------------ drivers/remoteproc/ti_k3_m4_remoteproc.c | 14 +------------- drivers/remoteproc/ti_k3_r5_remoteproc.c | 13 +------------ 5 files changed, 16 insertions(+), 37 deletions(-) diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c index 50df7164b0caf..ffd6639e6d63c 100644 --- a/drivers/remoteproc/ti_k3_common.c +++ b/drivers/remoteproc/ti_k3_common.c @@ -296,5 +296,17 @@ int k3_rproc_stop(struct rproc *rproc) } EXPORT_SYMBOL_GPL(k3_rproc_stop); =20 +/* + * Attach to a running remote processor (IPC-only mode) + * + * The rproc attach callback is a NOP. The remote processor is already boo= ted, + * and all required resources have been acquired during probe routine, so = there + * is no need to issue any TI-SCI commands to boot the remote cores in IPC= -only + * mode. This callback is invoked only in IPC-only mode and exists because + * rproc_validate() checks for its existence. + */ +int k3_rproc_attach(struct rproc *rproc) { return 0; } +EXPORT_SYMBOL_GPL(k3_rproc_attach); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index 98e57a298e73a..c369715b2d768 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -102,4 +102,5 @@ int k3_rproc_prepare(struct rproc *rproc); int k3_rproc_unprepare(struct rproc *rproc); int k3_rproc_start(struct rproc *rproc); int k3_rproc_stop(struct rproc *rproc); +int k3_rproc_attach(struct rproc *rproc); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index f506a9360879a..12858c7f1958d 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -58,17 +58,6 @@ static int k3_dsp_rproc_start(struct rproc *rproc) return 0; } =20 -/* - * Attach to a running DSP remote processor (IPC-only mode) - * - * This rproc attach callback is a NOP. The remote processor is already bo= oted, - * and all required resources have been acquired during probe routine, so = there - * is no need to issue any TI-SCI commands to boot the DSP core. This call= back - * is invoked only in IPC-only mode and exists because rproc_validate() ch= ecks - * for its existence. - */ -static int k3_dsp_rproc_attach(struct rproc *rproc) { return 0; } - /* * Detach from a running DSP remote processor (IPC-only mode) * @@ -172,7 +161,7 @@ static void *k3_dsp_rproc_da_to_va(struct rproc *rproc,= u64 da, size_t len, bool static const struct rproc_ops k3_dsp_rproc_ops =3D { .start =3D k3_dsp_rproc_start, .stop =3D k3_rproc_stop, - .attach =3D k3_dsp_rproc_attach, + .attach =3D k3_rproc_attach, .detach =3D k3_dsp_rproc_detach, .kick =3D k3_rproc_kick, .da_to_va =3D k3_dsp_rproc_da_to_va, diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index de8809cc95fe8..7f3c8d3d1398b 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -244,18 +244,6 @@ static void k3_m4_release_tsp(void *data) ti_sci_proc_release(tsp); } =20 -/* - * Attach to a running M4 remote processor (IPC-only mode) - * - * The remote processor is already booted, so there is no need to issue any - * TI-SCI commands to boot the M4 core. This callback is used only in IPC-= only - * mode. - */ -static int k3_m4_rproc_attach(struct rproc *rproc) -{ - return 0; -} - /* * Detach from a running M4 remote processor (IPC-only mode) * @@ -273,7 +261,7 @@ static const struct rproc_ops k3_m4_rproc_ops =3D { .unprepare =3D k3_rproc_unprepare, .start =3D k3_rproc_start, .stop =3D k3_rproc_stop, - .attach =3D k3_m4_rproc_attach, + .attach =3D k3_rproc_attach, .detach =3D k3_m4_rproc_detach, .kick =3D k3_rproc_kick, .da_to_va =3D k3_m4_rproc_da_to_va, diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index 4082cc61a41af..7c0434093ca50 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -559,17 +559,6 @@ static int k3_r5_rproc_stop(struct rproc *rproc) return ret; } =20 -/* - * Attach to a running R5F remote processor (IPC-only mode) - * - * The R5F attach callback is a NOP. The remote processor is already boote= d, and - * all required resources have been acquired during probe routine, so ther= e is - * no need to issue any TI-SCI commands to boot the R5F cores in IPC-only = mode. - * This callback is invoked only in IPC-only mode and exists because - * rproc_validate() checks for its existence. - */ -static int k3_r5_rproc_attach(struct rproc *rproc) { return 0; } - /* * Detach from a running R5F remote processor (IPC-only mode) * @@ -1059,7 +1048,7 @@ static int k3_r5_rproc_configure_mode(struct k3_rproc= *kproc) kproc->rproc->ops->unprepare =3D NULL; kproc->rproc->ops->start =3D NULL; kproc->rproc->ops->stop =3D NULL; - kproc->rproc->ops->attach =3D k3_r5_rproc_attach; + kproc->rproc->ops->attach =3D k3_rproc_attach; kproc->rproc->ops->detach =3D k3_r5_rproc_detach; kproc->rproc->ops->get_loaded_rsc_table =3D k3_r5_get_loaded_rsc_table; --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot04.ext.ti.com (fllvem-ot04.ext.ti.com [198.47.19.246]) (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 E909C7DA7F; Tue, 13 May 2025 05:47:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.246 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115248; cv=none; b=rkBIoOCSB/3Cr5n1qpDUWBmzcpTBRrFSu915FI+qfSSOGiyWeosHZSNWt+lUZ2PwY1ofphtpMH1wEfSLQ4jEls9/wGoO+nTRJIdDgNKM9hWmM+twpLCnlHmmb0TXcKNIdkg4TGOjEgm/TZegYLz3HRTDSNbrrjNn5TDWjbjE8kU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115248; c=relaxed/simple; bh=84H6ry/WNdWRYFlV/fBZbjfw3FR/6vaGgy2WNwMmqjQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=FAt88TbDYFv4FU4UDrD2KwU+7qT2HfVtk9esvcdHgOtXY5Pp05lSMxY7n9WqAfeDfkvBXCV0U3MJppYA0vXZZNrp+FPcWm301TF3unvEP+Oovim3z2MMhZDLWNbRXsukyLz2751huECqNVXWXUWCX0o2QHDLG3YplMgwcg/7toQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=bZzQ7Wcz; arc=none smtp.client-ip=198.47.19.246 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="bZzQ7Wcz" Received: from lelvem-sh02.itg.ti.com ([10.180.78.226]) by fllvem-ot04.ext.ti.com (8.15.2/8.15.2) with ESMTP id 54D5lJAv2764585; Tue, 13 May 2025 00:47:19 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115240; bh=UWYzz22DYwLubR/JbG6VUMqRPCfwDnwidK3OoxAqaXk=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=bZzQ7WczGI8fZumUvp35SfSLP4Z1DQ8q/rc+BJFSx86z7z6PhgKCs7V9gfVxs/pGv QDtX8xfXuiY3TQ1Rmin1rkKwOlVZaBHwGhqeWAICYGVDk091rIu0t/DEE/YVhe+gK4 X32vlYfFlfBLAEu8Q8LTTxtfHpXYHO8Z+Q6AzBb0= Received: from DLEE110.ent.ti.com (dlee110.ent.ti.com [157.170.170.21]) by lelvem-sh02.itg.ti.com (8.18.1/8.18.1) with ESMTPS id 54D5lJGO652456 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA256 bits=128 verify=FAIL); Tue, 13 May 2025 00:47:19 -0500 Received: from DLEE113.ent.ti.com (157.170.170.24) by DLEE110.ent.ti.com (157.170.170.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:47:19 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE113.ent.ti.com (157.170.170.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:47:19 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqd131001; Tue, 13 May 2025 00:47:15 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 30/36] remoteproc: k3: Refactor .detach rproc ops into common driver Date: Tue, 13 May 2025 11:15:04 +0530 Message-ID: <20250513054510.3439842-31-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The .detach rproc ops implementations in TI K3 R5, DSP and M4 remoteproc drivers are NOPs. Refactor the implementations into ti_k3_common.c driver as k3_rproc_detach() and register this common function as .detach ops in R5, DSP and M4 drivers. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-30-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-28-b-padhi@ti.com/ v10: Changelog: 1. Don't remove dsp func override. Already done by [v10 20/33] patch. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-21-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.c | 10 ++++++++++ drivers/remoteproc/ti_k3_common.h | 1 + drivers/remoteproc/ti_k3_dsp_remoteproc.c | 11 +---------- drivers/remoteproc/ti_k3_m4_remoteproc.c | 14 +------------- drivers/remoteproc/ti_k3_r5_remoteproc.c | 11 +---------- 5 files changed, 14 insertions(+), 33 deletions(-) diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c index ffd6639e6d63c..5c976fb570d0f 100644 --- a/drivers/remoteproc/ti_k3_common.c +++ b/drivers/remoteproc/ti_k3_common.c @@ -308,5 +308,15 @@ EXPORT_SYMBOL_GPL(k3_rproc_stop); int k3_rproc_attach(struct rproc *rproc) { return 0; } EXPORT_SYMBOL_GPL(k3_rproc_attach); =20 +/* + * Detach from a running remote processor (IPC-only mode) + * + * The rproc detach callback is a NOP. The remote processor is not stopped= and + * will be left in booted state in IPC-only mode. This callback is invoked= only + * in IPC-only mode and exists for sanity sake + */ +int k3_rproc_detach(struct rproc *rproc) { return 0; } +EXPORT_SYMBOL_GPL(k3_rproc_detach); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index c369715b2d768..42358bf5aae94 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -103,4 +103,5 @@ int k3_rproc_unprepare(struct rproc *rproc); int k3_rproc_start(struct rproc *rproc); int k3_rproc_stop(struct rproc *rproc); int k3_rproc_attach(struct rproc *rproc); +int k3_rproc_detach(struct rproc *rproc); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 12858c7f1958d..a62a69d9f80ed 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -58,15 +58,6 @@ static int k3_dsp_rproc_start(struct rproc *rproc) return 0; } =20 -/* - * Detach from a running DSP remote processor (IPC-only mode) - * - * This rproc detach callback is a NOP. The DSP core is not stopped and wi= ll be - * left to continue to run its booted firmware. This callback is invoked o= nly in - * IPC-only mode and exists for sanity sake. - */ -static int k3_dsp_rproc_detach(struct rproc *rproc) { return 0; } - /* * This function implements the .get_loaded_rsc_table() callback and is us= ed * to provide the resource table for a booted DSP in IPC-only mode. The K3= DSP @@ -162,7 +153,7 @@ static const struct rproc_ops k3_dsp_rproc_ops =3D { .start =3D k3_dsp_rproc_start, .stop =3D k3_rproc_stop, .attach =3D k3_rproc_attach, - .detach =3D k3_dsp_rproc_detach, + .detach =3D k3_rproc_detach, .kick =3D k3_rproc_kick, .da_to_va =3D k3_dsp_rproc_da_to_va, .get_loaded_rsc_table =3D k3_dsp_get_loaded_rsc_table, diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 7f3c8d3d1398b..d75362717155d 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -244,25 +244,13 @@ static void k3_m4_release_tsp(void *data) ti_sci_proc_release(tsp); } =20 -/* - * Detach from a running M4 remote processor (IPC-only mode) - * - * This rproc detach callback performs the opposite operation to attach - * callback, the M4 core is not stopped and will be left to continue to - * run its booted firmware. This callback is invoked only in IPC-only mode. - */ -static int k3_m4_rproc_detach(struct rproc *rproc) -{ - return 0; -} - static const struct rproc_ops k3_m4_rproc_ops =3D { .prepare =3D k3_rproc_prepare, .unprepare =3D k3_rproc_unprepare, .start =3D k3_rproc_start, .stop =3D k3_rproc_stop, .attach =3D k3_rproc_attach, - .detach =3D k3_m4_rproc_detach, + .detach =3D k3_rproc_detach, .kick =3D k3_rproc_kick, .da_to_va =3D k3_m4_rproc_da_to_va, .get_loaded_rsc_table =3D k3_m4_get_loaded_rsc_table, diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index 7c0434093ca50..ecd6e6b15d608 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -559,15 +559,6 @@ static int k3_r5_rproc_stop(struct rproc *rproc) return ret; } =20 -/* - * Detach from a running R5F remote processor (IPC-only mode) - * - * The R5F detach callback is a NOP. The R5F cores are not stopped and wil= l be - * left in booted state in IPC-only mode. This callback is invoked only in - * IPC-only mode and exists for sanity sake. - */ -static int k3_r5_rproc_detach(struct rproc *rproc) { return 0; } - /* * This function implements the .get_loaded_rsc_table() callback and is us= ed * to provide the resource table for the booted R5F in IPC-only mode. The = K3 R5F @@ -1049,7 +1040,7 @@ static int k3_r5_rproc_configure_mode(struct k3_rproc= *kproc) kproc->rproc->ops->start =3D NULL; kproc->rproc->ops->stop =3D NULL; kproc->rproc->ops->attach =3D k3_rproc_attach; - kproc->rproc->ops->detach =3D k3_r5_rproc_detach; + kproc->rproc->ops->detach =3D k3_rproc_detach; kproc->rproc->ops->get_loaded_rsc_table =3D k3_r5_get_loaded_rsc_table; } else if (!c_state) { --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot04.ext.ti.com (fllvem-ot04.ext.ti.com [198.47.19.246]) (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 0D09A20C482; Tue, 13 May 2025 05:47:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.246 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115254; cv=none; b=g7qPVh+vVt6MyNAJgAZgeGnTEF9GI+Lrr/MqNxEC09amxVNkIhRPoPXdbKbW93E35Enn5jR2deLNqJYrzAo7XNO9gmr/TE3JagphCHSI8bnYQKXf9JY2SwOyfXupiSE5EmS80F+slp8LuHQEegWYDDK+PBRCLx4B1o7qDlFByWU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115254; c=relaxed/simple; bh=t6/LYGq7mIca1mwVBTuUcJpIcCUBdNF7/dqUWosdfXU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Xp1d8/2kyARqM/MCuoOs+dmHKe28HPk+4ODo4srBMZv5Kq+gNkThS954j2q1C/rbJPZXzdaV36CSUXbAr2h2W4ymsXOJxogrwP5crQSNP5md1Ex55/DWzfpgDlqJ948tGt7jeCOxaQUuG6YGhUXlAGoNCdlQ4ByBXiGDTOebKZk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=s7MBzUvl; arc=none smtp.client-ip=198.47.19.246 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="s7MBzUvl" Received: from fllv0034.itg.ti.com ([10.64.40.246]) by fllvem-ot04.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5lOeA2764701 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:47:24 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115244; bh=c5GSjhshyjW42YE9UlxCYadhh5AmWj09hiTtk6gpwG4=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=s7MBzUvlbGtEc7p9sqpK7Veu5FKQdxkmzkNt6OnCZDB6sp7rZC7f9/gwBzA/nVcBs Njbr3kyHR9a9NNYhy3G03BrZ5/8qh17NiJ3XEY2x980dqIy64TpYZ0KWJ3HYkVFolP uog+2kquyEETj+qsTHUAAn2sHaE1a8HjNZhNbNPA= Received: from DLEE103.ent.ti.com (dlee103.ent.ti.com [157.170.170.33]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5lOn5063691 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:47:24 -0500 Received: from DLEE110.ent.ti.com (157.170.170.21) by DLEE103.ent.ti.com (157.170.170.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:47:23 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE110.ent.ti.com (157.170.170.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:47:23 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqe131001; Tue, 13 May 2025 00:47:20 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 31/36] remoteproc: k3: Refactor .get_loaded_rsc_table ops into common driver Date: Tue, 13 May 2025 11:15:05 +0530 Message-ID: <20250513054510.3439842-32-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The .get_loaded_rsc_table rproc ops implementations in TI K3 R5, DSP and M4 remoteproc drivers return a pointer to the resource table that was pre-loaded at the base address of the DDR region reserved for firmware usage. Refactor the implementations into ti_k3_common.c driver as k3_get_loaded_rsc_table() and register this common function as .get_loaded_rsc_table ops in R5, DSP and M4 drivers. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-31-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-29-b-padhi@ti.com/ v10: Changelog: 1. Don't remove dsp func override. Already done by [v10 20/33] patch. 2. Update commit message to call out changes in a better way. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-22-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.c | 33 ++++++++++++++++++++++ drivers/remoteproc/ti_k3_common.h | 2 ++ drivers/remoteproc/ti_k3_dsp_remoteproc.c | 34 +---------------------- drivers/remoteproc/ti_k3_m4_remoteproc.c | 34 +---------------------- drivers/remoteproc/ti_k3_r5_remoteproc.c | 34 +---------------------- 5 files changed, 38 insertions(+), 99 deletions(-) diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c index 5c976fb570d0f..1219294b5de69 100644 --- a/drivers/remoteproc/ti_k3_common.c +++ b/drivers/remoteproc/ti_k3_common.c @@ -318,5 +318,38 @@ EXPORT_SYMBOL_GPL(k3_rproc_attach); int k3_rproc_detach(struct rproc *rproc) { return 0; } EXPORT_SYMBOL_GPL(k3_rproc_detach); =20 +/* + * This function implements the .get_loaded_rsc_table() callback and is us= ed + * to provide the resource table for a booted remote processor in IPC-only + * mode. The remote processor firmwares follow a design-by-contract approa= ch + * and are expected to have the resource table at the base of the DDR regi= on + * reserved for firmware usage. This provides flexibility for the remote + * processor to be booted by different bootloaders that may or may not hav= e the + * ability to publish the resource table address and size through a DT + * property. + */ +struct resource_table *k3_get_loaded_rsc_table(struct rproc *rproc, + size_t *rsc_table_sz) +{ + struct k3_rproc *kproc =3D rproc->priv; + struct device *dev =3D kproc->dev; + + if (!kproc->rmem[0].cpu_addr) { + dev_err(dev, "memory-region #1 does not exist, loaded rsc table can't be= found"); + return ERR_PTR(-ENOMEM); + } + + /* + * NOTE: The resource table size is currently hard-coded to a maximum + * of 256 bytes. The most common resource table usage for K3 firmwares + * is to only have the vdev resource entry and an optional trace entry. + * The exact size could be computed based on resource table address, but + * the hard-coded value suffices to support the IPC-only mode. + */ + *rsc_table_sz =3D 256; + return (__force struct resource_table *)kproc->rmem[0].cpu_addr; +} +EXPORT_SYMBOL_GPL(k3_get_loaded_rsc_table); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index 42358bf5aae94..61e617d2065e7 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -104,4 +104,6 @@ int k3_rproc_start(struct rproc *rproc); int k3_rproc_stop(struct rproc *rproc); int k3_rproc_attach(struct rproc *rproc); int k3_rproc_detach(struct rproc *rproc); +struct resource_table *k3_get_loaded_rsc_table(struct rproc *rproc, + size_t *rsc_table_sz); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index a62a69d9f80ed..8a51b304ed1f2 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -58,38 +58,6 @@ static int k3_dsp_rproc_start(struct rproc *rproc) return 0; } =20 -/* - * This function implements the .get_loaded_rsc_table() callback and is us= ed - * to provide the resource table for a booted DSP in IPC-only mode. The K3= DSP - * firmwares follow a design-by-contract approach and are expected to have= the - * resource table at the base of the DDR region reserved for firmware usag= e. - * This provides flexibility for the remote processor to be booted by diff= erent - * bootloaders that may or may not have the ability to publish the resourc= e table - * address and size through a DT property. This callback is invoked only in - * IPC-only mode. - */ -static struct resource_table *k3_dsp_get_loaded_rsc_table(struct rproc *rp= roc, - size_t *rsc_table_sz) -{ - struct k3_rproc *kproc =3D rproc->priv; - struct device *dev =3D kproc->dev; - - if (!kproc->rmem[0].cpu_addr) { - dev_err(dev, "memory-region #1 does not exist, loaded rsc table can't be= found"); - return ERR_PTR(-ENOMEM); - } - - /* - * NOTE: The resource table size is currently hard-coded to a maximum - * of 256 bytes. The most common resource table usage for K3 firmwares - * is to only have the vdev resource entry and an optional trace entry. - * The exact size could be computed based on resource table address, but - * the hard-coded value suffices to support the IPC-only mode. - */ - *rsc_table_sz =3D 256; - return (__force struct resource_table *)kproc->rmem[0].cpu_addr; -} - /* * Custom function to translate a DSP device address (internal RAMs only) = to a * kernel virtual address. The DSPs can access their RAMs at either an in= ternal @@ -156,7 +124,7 @@ static const struct rproc_ops k3_dsp_rproc_ops =3D { .detach =3D k3_rproc_detach, .kick =3D k3_rproc_kick, .da_to_va =3D k3_dsp_rproc_da_to_va, - .get_loaded_rsc_table =3D k3_dsp_get_loaded_rsc_table, + .get_loaded_rsc_table =3D k3_get_loaded_rsc_table, }; =20 static int k3_dsp_rproc_of_get_memories(struct platform_device *pdev, diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index d75362717155d..d6fbbe3385567 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -21,38 +21,6 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 -/* - * This function implements the .get_loaded_rsc_table() callback and is us= ed - * to provide the resource table for a booted remote processor in IPC-only - * mode. The remote processor firmwares follow a design-by-contract approa= ch - * and are expected to have the resource table at the base of the DDR regi= on - * reserved for firmware usage. This provides flexibility for the remote - * processor to be booted by different bootloaders that may or may not hav= e the - * ability to publish the resource table address and size through a DT - * property. - */ -static struct resource_table *k3_m4_get_loaded_rsc_table(struct rproc *rpr= oc, - size_t *rsc_table_sz) -{ - struct k3_rproc *kproc =3D rproc->priv; - struct device *dev =3D kproc->dev; - - if (!kproc->rmem[0].cpu_addr) { - dev_err(dev, "memory-region #1 does not exist, loaded rsc table can't be= found"); - return ERR_PTR(-ENOMEM); - } - - /* - * NOTE: The resource table size is currently hard-coded to a maximum - * of 256 bytes. The most common resource table usage for K3 firmwares - * is to only have the vdev resource entry and an optional trace entry. - * The exact size could be computed based on resource table address, but - * the hard-coded value suffices to support the IPC-only mode. - */ - *rsc_table_sz =3D 256; - return (__force struct resource_table *)kproc->rmem[0].cpu_addr; -} - /* * Custom function to translate a remote processor device address (internal * RAMs only) to a kernel virtual address. The remote processors can acce= ss @@ -253,7 +221,7 @@ static const struct rproc_ops k3_m4_rproc_ops =3D { .detach =3D k3_rproc_detach, .kick =3D k3_rproc_kick, .da_to_va =3D k3_m4_rproc_da_to_va, - .get_loaded_rsc_table =3D k3_m4_get_loaded_rsc_table, + .get_loaded_rsc_table =3D k3_get_loaded_rsc_table, }; =20 static int k3_m4_rproc_probe(struct platform_device *pdev) diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index ecd6e6b15d608..2e9e2312384f1 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -559,38 +559,6 @@ static int k3_r5_rproc_stop(struct rproc *rproc) return ret; } =20 -/* - * This function implements the .get_loaded_rsc_table() callback and is us= ed - * to provide the resource table for the booted R5F in IPC-only mode. The = K3 R5F - * firmwares follow a design-by-contract approach and are expected to have= the - * resource table at the base of the DDR region reserved for firmware usag= e. - * This provides flexibility for the remote processor to be booted by diff= erent - * bootloaders that may or may not have the ability to publish the resourc= e table - * address and size through a DT property. This callback is invoked only in - * IPC-only mode. - */ -static struct resource_table *k3_r5_get_loaded_rsc_table(struct rproc *rpr= oc, - size_t *rsc_table_sz) -{ - struct k3_rproc *kproc =3D rproc->priv; - struct device *dev =3D kproc->dev; - - if (!kproc->rmem[0].cpu_addr) { - dev_err(dev, "memory-region #1 does not exist, loaded rsc table can't be= found"); - return ERR_PTR(-ENOMEM); - } - - /* - * NOTE: The resource table size is currently hard-coded to a maximum - * of 256 bytes. The most common resource table usage for K3 firmwares - * is to only have the vdev resource entry and an optional trace entry. - * The exact size could be computed based on resource table address, but - * the hard-coded value suffices to support the IPC-only mode. - */ - *rsc_table_sz =3D 256; - return (__force struct resource_table *)kproc->rmem[0].cpu_addr; -} - /* * Internal Memory translation helper * @@ -1042,7 +1010,7 @@ static int k3_r5_rproc_configure_mode(struct k3_rproc= *kproc) kproc->rproc->ops->attach =3D k3_rproc_attach; kproc->rproc->ops->detach =3D k3_rproc_detach; kproc->rproc->ops->get_loaded_rsc_table =3D - k3_r5_get_loaded_rsc_table; + k3_get_loaded_rsc_table; } else if (!c_state) { dev_info(cdev, "configured R5F for remoteproc mode\n"); ret =3D 0; --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot04.ext.ti.com (fllvem-ot04.ext.ti.com [198.47.19.246]) (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 CCFD820D4F4; Tue, 13 May 2025 05:47:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.246 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115259; cv=none; b=Pq+naEwO/fIxSE7hRg29AUJs8w6r6J7rO+stGipHZc/j4AW6NqFm5RBlV1eHKH0KWt/bgOjlEPc+4DVdk8SPkIVUFv7OZlaK5m7YDPIC9qgmltSnEOgyYoKEj/lH2BE0dE1uI9Qa8GQPswBy6pNvGDKCZiG+B8HvUiNCRg/Rgo4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115259; c=relaxed/simple; bh=CXJS6mA3yTirj6gnBiIgetvgoP9VnVn8bFb8u+2tMss=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oXZ4NhXSiYGljeu6be/2o/Qdm0KQWgRB9nY7RxHgZuhu7BVdPRCvnnL/yqPosbyhJnFfwggbI8MNv4zjjgdd8nJ0Jx25oBX4mbCAWdnjpFdG9z6jEeVlJrwivhmfOT4nMYRNZsG+OUKMedGEKaYYStaur+G9jh9GN16aZ/XHu5A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=HKYdMZuv; arc=none smtp.client-ip=198.47.19.246 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="HKYdMZuv" Received: from lelvem-sh02.itg.ti.com ([10.180.78.226]) by fllvem-ot04.ext.ti.com (8.15.2/8.15.2) with ESMTP id 54D5lSpj2764705; Tue, 13 May 2025 00:47:28 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115248; bh=eU/c2Xg4tRlyOZWPrgHycbJAYQi68wB1E9XBnV5oaPc=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=HKYdMZuvy9+u7x4rYI5XKxODAUOJ/w1Rv8+fXOCK4iFh85kbZ1sXWr73ONINojiQn +r/cBYvDgDnDiUcD+eEszrN/l1nL4+NvgwJgl6i4h1NfXR4sHZysQLnY63UF7Acv6u 1KDiVDGVB0TZ/Gpv1jqoO70lvxsN+L9DzSPHiMaw= Received: from DLEE107.ent.ti.com (dlee107.ent.ti.com [157.170.170.37]) by lelvem-sh02.itg.ti.com (8.18.1/8.18.1) with ESMTPS id 54D5lShg652480 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA256 bits=128 verify=FAIL); Tue, 13 May 2025 00:47:28 -0500 Received: from DLEE114.ent.ti.com (157.170.170.25) by DLEE107.ent.ti.com (157.170.170.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:47:27 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE114.ent.ti.com (157.170.170.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:47:28 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqf131001; Tue, 13 May 2025 00:47:24 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 32/36] remoteproc: k3: Refactor .da_to_va rproc ops into common driver Date: Tue, 13 May 2025 11:15:06 +0530 Message-ID: <20250513054510.3439842-33-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The .da_to_va rproc ops implementations in TI K3 R5, DSP and M4 remoteproc drivers return the Kernel virtual address for a corresponding rproc device address. Refactor the implementations into the ti_k3_common.c driver as k3_rproc_da_to_va and use this common function for address translation of DDR and internal memory regions in R5, DSP and M4 drivers. Note: The R5 SRAM memory translations are still handled in the .da_to_va ops of the R5 remoteproc driver. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Added R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-32-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-30-b-padhi@ti.com/ v10: Changelog: 1. Updated commit message to call out the changes better. 2. Don't remove dsp func override. Already done by [v10 20/33] patch. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-23-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.c | 57 ++++++++++++++++++++ drivers/remoteproc/ti_k3_common.h | 4 ++ drivers/remoteproc/ti_k3_dsp_remoteproc.c | 63 +---------------------- drivers/remoteproc/ti_k3_m4_remoteproc.c | 58 +-------------------- drivers/remoteproc/ti_k3_r5_remoteproc.c | 37 +------------ 5 files changed, 65 insertions(+), 154 deletions(-) diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c index 1219294b5de69..9762a9af6b5ff 100644 --- a/drivers/remoteproc/ti_k3_common.c +++ b/drivers/remoteproc/ti_k3_common.c @@ -351,5 +351,62 @@ struct resource_table *k3_get_loaded_rsc_table(struct = rproc *rproc, } EXPORT_SYMBOL_GPL(k3_get_loaded_rsc_table); =20 +/* + * Custom function to translate a remote processor device address (internal + * RAMs only) to a kernel virtual address. The remote processors can acce= ss + * their RAMs at either an internal address visible only from a remote + * processor, or at the SoC-level bus address. Both these addresses need t= o be + * looked through for translation. The translated addresses can be used ei= ther + * by the remoteproc core for loading (when using kernel remoteproc loader= ), or + * by any rpmsg bus drivers. + */ +void *k3_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len, bool *is_= iomem) +{ + struct k3_rproc *kproc =3D rproc->priv; + void __iomem *va =3D NULL; + phys_addr_t bus_addr; + u32 dev_addr, offset; + size_t size; + int i; + + if (len =3D=3D 0) + return NULL; + + for (i =3D 0; i < kproc->num_mems; i++) { + bus_addr =3D kproc->mem[i].bus_addr; + dev_addr =3D kproc->mem[i].dev_addr; + size =3D kproc->mem[i].size; + + /* handle rproc-view addresses */ + if (da >=3D dev_addr && ((da + len) <=3D (dev_addr + size))) { + offset =3D da - dev_addr; + va =3D kproc->mem[i].cpu_addr + offset; + return (__force void *)va; + } + + /* handle SoC-view addresses */ + if (da >=3D bus_addr && (da + len) <=3D (bus_addr + size)) { + offset =3D da - bus_addr; + va =3D kproc->mem[i].cpu_addr + offset; + return (__force void *)va; + } + } + + /* handle static DDR reserved memory regions */ + for (i =3D 0; i < kproc->num_rmems; i++) { + dev_addr =3D kproc->rmem[i].dev_addr; + size =3D kproc->rmem[i].size; + + if (da >=3D dev_addr && ((da + len) <=3D (dev_addr + size))) { + offset =3D da - dev_addr; + va =3D kproc->rmem[i].cpu_addr + offset; + return (__force void *)va; + } + } + + return NULL; +} +EXPORT_SYMBOL_GPL(k3_rproc_da_to_va); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index 61e617d2065e7..cfecbf8fc73c4 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -21,6 +21,8 @@ #ifndef REMOTEPROC_TI_K3_COMMON_H #define REMOTEPROC_TI_K3_COMMON_H =20 +#define KEYSTONE_RPROC_LOCAL_ADDRESS_MASK (SZ_16M - 1) + /** * struct k3_rproc_mem - internal memory structure * @cpu_addr: MPU virtual address of the memory region @@ -106,4 +108,6 @@ int k3_rproc_attach(struct rproc *rproc); int k3_rproc_detach(struct rproc *rproc); struct resource_table *k3_get_loaded_rsc_table(struct rproc *rproc, size_t *rsc_table_sz); +void *k3_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len, + bool *is_iomem); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 8a51b304ed1f2..fa1943c39df90 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -22,8 +22,6 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 -#define KEYSTONE_RPROC_LOCAL_ADDRESS_MASK (SZ_16M - 1) - /* * Power up the DSP remote processor. * @@ -58,72 +56,13 @@ static int k3_dsp_rproc_start(struct rproc *rproc) return 0; } =20 -/* - * Custom function to translate a DSP device address (internal RAMs only) = to a - * kernel virtual address. The DSPs can access their RAMs at either an in= ternal - * address visible only from a DSP, or at the SoC-level bus address. Both = these - * addresses need to be looked through for translation. The translated add= resses - * can be used either by the remoteproc core for loading (when using kernel - * remoteproc loader), or by any rpmsg bus drivers. - */ -static void *k3_dsp_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len= , bool *is_iomem) -{ - struct k3_rproc *kproc =3D rproc->priv; - void __iomem *va =3D NULL; - phys_addr_t bus_addr; - u32 dev_addr, offset; - size_t size; - int i; - - if (len =3D=3D 0) - return NULL; - - for (i =3D 0; i < kproc->num_mems; i++) { - bus_addr =3D kproc->mem[i].bus_addr; - dev_addr =3D kproc->mem[i].dev_addr; - size =3D kproc->mem[i].size; - - if (da < KEYSTONE_RPROC_LOCAL_ADDRESS_MASK) { - /* handle DSP-view addresses */ - if (da >=3D dev_addr && - ((da + len) <=3D (dev_addr + size))) { - offset =3D da - dev_addr; - va =3D kproc->mem[i].cpu_addr + offset; - return (__force void *)va; - } - } else { - /* handle SoC-view addresses */ - if (da >=3D bus_addr && - (da + len) <=3D (bus_addr + size)) { - offset =3D da - bus_addr; - va =3D kproc->mem[i].cpu_addr + offset; - return (__force void *)va; - } - } - } - - /* handle static DDR reserved memory regions */ - for (i =3D 0; i < kproc->num_rmems; i++) { - dev_addr =3D kproc->rmem[i].dev_addr; - size =3D kproc->rmem[i].size; - - if (da >=3D dev_addr && ((da + len) <=3D (dev_addr + size))) { - offset =3D da - dev_addr; - va =3D kproc->rmem[i].cpu_addr + offset; - return (__force void *)va; - } - } - - return NULL; -} - static const struct rproc_ops k3_dsp_rproc_ops =3D { .start =3D k3_dsp_rproc_start, .stop =3D k3_rproc_stop, .attach =3D k3_rproc_attach, .detach =3D k3_rproc_detach, .kick =3D k3_rproc_kick, - .da_to_va =3D k3_dsp_rproc_da_to_va, + .da_to_va =3D k3_rproc_da_to_va, .get_loaded_rsc_table =3D k3_get_loaded_rsc_table, }; =20 diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index d6fbbe3385567..7d1c7d8054738 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -21,62 +21,6 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 -/* - * Custom function to translate a remote processor device address (internal - * RAMs only) to a kernel virtual address. The remote processors can acce= ss - * their RAMs at either an internal address visible only from a remote - * processor, or at the SoC-level bus address. Both these addresses need t= o be - * looked through for translation. The translated addresses can be used ei= ther - * by the remoteproc core for loading (when using kernel remoteproc loader= ), or - * by any rpmsg bus drivers. - */ -static void *k3_m4_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len,= bool *is_iomem) -{ - struct k3_rproc *kproc =3D rproc->priv; - void __iomem *va =3D NULL; - phys_addr_t bus_addr; - u32 dev_addr, offset; - size_t size; - int i; - - if (len =3D=3D 0) - return NULL; - - for (i =3D 0; i < kproc->num_mems; i++) { - bus_addr =3D kproc->mem[i].bus_addr; - dev_addr =3D kproc->mem[i].dev_addr; - size =3D kproc->mem[i].size; - - /* handle M4-view addresses */ - if (da >=3D dev_addr && ((da + len) <=3D (dev_addr + size))) { - offset =3D da - dev_addr; - va =3D kproc->mem[i].cpu_addr + offset; - return (__force void *)va; - } - - /* handle SoC-view addresses */ - if (da >=3D bus_addr && ((da + len) <=3D (bus_addr + size))) { - offset =3D da - bus_addr; - va =3D kproc->mem[i].cpu_addr + offset; - return (__force void *)va; - } - } - - /* handle static DDR reserved memory regions */ - for (i =3D 0; i < kproc->num_rmems; i++) { - dev_addr =3D kproc->rmem[i].dev_addr; - size =3D kproc->rmem[i].size; - - if (da >=3D dev_addr && ((da + len) <=3D (dev_addr + size))) { - offset =3D da - dev_addr; - va =3D kproc->rmem[i].cpu_addr + offset; - return (__force void *)va; - } - } - - return NULL; -} - static int k3_m4_rproc_of_get_memories(struct platform_device *pdev, struct k3_rproc *kproc) { @@ -220,7 +164,7 @@ static const struct rproc_ops k3_m4_rproc_ops =3D { .attach =3D k3_rproc_attach, .detach =3D k3_rproc_detach, .kick =3D k3_rproc_kick, - .da_to_va =3D k3_m4_rproc_da_to_va, + .da_to_va =3D k3_rproc_da_to_va, .get_loaded_rsc_table =3D k3_get_loaded_rsc_table, }; =20 diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index 2e9e2312384f1..58c1bc5781d90 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -572,7 +572,6 @@ static void *k3_r5_rproc_da_to_va(struct rproc *rproc, = u64 da, size_t len, bool struct k3_rproc *kproc =3D rproc->priv; struct k3_r5_core *core =3D kproc->priv; void __iomem *va =3D NULL; - phys_addr_t bus_addr; u32 dev_addr, offset; size_t size; int i; @@ -580,27 +579,6 @@ static void *k3_r5_rproc_da_to_va(struct rproc *rproc,= u64 da, size_t len, bool if (len =3D=3D 0) return NULL; =20 - /* handle both R5 and SoC views of ATCM and BTCM */ - for (i =3D 0; i < kproc->num_mems; i++) { - bus_addr =3D kproc->mem[i].bus_addr; - dev_addr =3D kproc->mem[i].dev_addr; - size =3D kproc->mem[i].size; - - /* handle R5-view addresses of TCMs */ - if (da >=3D dev_addr && ((da + len) <=3D (dev_addr + size))) { - offset =3D da - dev_addr; - va =3D kproc->mem[i].cpu_addr + offset; - return (__force void *)va; - } - - /* handle SoC-view addresses of TCMs */ - if (da >=3D bus_addr && ((da + len) <=3D (bus_addr + size))) { - offset =3D da - bus_addr; - va =3D kproc->mem[i].cpu_addr + offset; - return (__force void *)va; - } - } - /* handle any SRAM regions using SoC-view addresses */ for (i =3D 0; i < core->num_sram; i++) { dev_addr =3D core->sram[i].dev_addr; @@ -613,19 +591,8 @@ static void *k3_r5_rproc_da_to_va(struct rproc *rproc,= u64 da, size_t len, bool } } =20 - /* handle static DDR reserved memory regions */ - for (i =3D 0; i < kproc->num_rmems; i++) { - dev_addr =3D kproc->rmem[i].dev_addr; - size =3D kproc->rmem[i].size; - - if (da >=3D dev_addr && ((da + len) <=3D (dev_addr + size))) { - offset =3D da - dev_addr; - va =3D kproc->rmem[i].cpu_addr + offset; - return (__force void *)va; - } - } - - return NULL; + /* handle both TCM and DDR memory regions */ + return k3_rproc_da_to_va(rproc, da, len, is_iomem); } =20 static const struct rproc_ops k3_r5_rproc_ops =3D { --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot04.ext.ti.com (fllvem-ot04.ext.ti.com [198.47.19.246]) (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 88E171EE7DA; Tue, 13 May 2025 05:47:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.246 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115262; cv=none; b=nphDWTQ2I4iAML6AAierIKVRhMiScRSVNhmlYEZhcn8AEOUhmqrvxwUSEXkarRk6XSycRETu1BF8IzxM2rJVRphDoXSDT977f4N66t36b0mOqZkKkLpCTMwZ7CGWNwpRNmecwsm9eoey35oNXqL+PwPt9orT5hz/JfBja7TAukE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115262; c=relaxed/simple; bh=hgzE+hFPOTDMfvpdeUbKY1K4okeoFgoBfZngoDNJIIQ=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tT8SkwCPRolMuNFd94iEoaFRKdL7F+dMcY+OupXGfjBCOUTEsrhDRikT8GaIAILDNGlwACGHLr/uYTI4wD2e4MmuwhvqZ5MCJaq5a812zz+/V7SvzHgJQDof7p3rM52uP8B30ovSRT8XNqAmDGm8b7LNVINx8js8iLZ3WfVF2fo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=cgzAvFDf; arc=none smtp.client-ip=198.47.19.246 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="cgzAvFDf" Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllvem-ot04.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5lWsL2764715 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:47:32 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115252; bh=ZnWYaZA5ynhkpD2LP/eCnmnWLqMa0zlIQzY4B6Ne42Y=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=cgzAvFDfwCNQWc5r6XhegDByR5utdPOqKus8o28ocpAdlZb4bFQiiPVD9jezkzdtU 80ZCtpAqqb7ikCd9yAxzRRJmsuZTu/pGHWFRIPrLTpWfuInNv7eFYSUfde9/ic/HAj zgQIJDg7/zPX7IWklIF1JfUEExFVwbCXh1OBbr0o= Received: from DLEE102.ent.ti.com (dlee102.ent.ti.com [157.170.170.32]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5lWZU089103 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:47:32 -0500 Received: from DLEE100.ent.ti.com (157.170.170.30) by DLEE102.ent.ti.com (157.170.170.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:47:31 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE100.ent.ti.com (157.170.170.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:47:31 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqg131001; Tue, 13 May 2025 00:47:28 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 33/36] remoteproc: k3: Refactor of_get_memories() functions into common driver Date: Tue, 13 May 2025 11:15:07 +0530 Message-ID: <20250513054510.3439842-34-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The of_get_memories() implementations in the TI K3 R5, DSP and M4 remoteproc drivers initialize and assign memory regions used by the remote processor in the same way. Refactor these implementations into ti_k3_common.c driver as k3_rproc_of_get_memories() use this common function for mem initialization in R5, DSP and M4 drivers. Note: The TCM addresses for R5 core are configurable based on the 'loczrama' setting. Therefore, override the bus_addr assignment done by the common function for TCMs of R5 remote processors by reading the 'loczrama' DT property in k3_r5_core_of_get_internal_memories(). Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Assign data->num_mems to num_mems. [Mathieu] 2. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-33-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-31-b-padhi@ti.com/ v10: Changelog: 1. Updated commit message to call out the changes better. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-24-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.c | 53 ++++++++++++++++++++++ drivers/remoteproc/ti_k3_common.h | 2 + drivers/remoteproc/ti_k3_dsp_remoteproc.c | 54 +---------------------- drivers/remoteproc/ti_k3_m4_remoteproc.c | 54 +---------------------- drivers/remoteproc/ti_k3_r5_remoteproc.c | 49 ++++---------------- 5 files changed, 66 insertions(+), 146 deletions(-) diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c index 9762a9af6b5ff..2200af4edaf85 100644 --- a/drivers/remoteproc/ti_k3_common.c +++ b/drivers/remoteproc/ti_k3_common.c @@ -408,5 +408,58 @@ void *k3_rproc_da_to_va(struct rproc *rproc, u64 da, s= ize_t len, bool *is_iomem) } EXPORT_SYMBOL_GPL(k3_rproc_da_to_va); =20 +int k3_rproc_of_get_memories(struct platform_device *pdev, + struct k3_rproc *kproc) +{ + const struct k3_rproc_dev_data *data =3D kproc->data; + struct device *dev =3D &pdev->dev; + struct resource *res; + int num_mems =3D 0; + int i; + + num_mems =3D data->num_mems; + kproc->mem =3D devm_kcalloc(kproc->dev, num_mems, + sizeof(*kproc->mem), GFP_KERNEL); + if (!kproc->mem) + return -ENOMEM; + + for (i =3D 0; i < num_mems; i++) { + res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, + data->mems[i].name); + if (!res) { + dev_err(dev, "found no memory resource for %s\n", + data->mems[i].name); + return -EINVAL; + } + if (!devm_request_mem_region(dev, res->start, + resource_size(res), + dev_name(dev))) { + dev_err(dev, "could not request %s region for resource\n", + data->mems[i].name); + return -EBUSY; + } + + kproc->mem[i].cpu_addr =3D devm_ioremap_wc(dev, res->start, + resource_size(res)); + if (!kproc->mem[i].cpu_addr) { + dev_err(dev, "failed to map %s memory\n", + data->mems[i].name); + return -ENOMEM; + } + kproc->mem[i].bus_addr =3D res->start; + kproc->mem[i].dev_addr =3D data->mems[i].dev_addr; + kproc->mem[i].size =3D resource_size(res); + + dev_dbg(dev, "memory %8s: bus addr %pa size 0x%zx va %pK da 0x%x\n", + data->mems[i].name, &kproc->mem[i].bus_addr, + kproc->mem[i].size, kproc->mem[i].cpu_addr, + kproc->mem[i].dev_addr); + } + kproc->num_mems =3D num_mems; + + return 0; +} +EXPORT_SYMBOL_GPL(k3_rproc_of_get_memories); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index cfecbf8fc73c4..d05f53bd9073a 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -110,4 +110,6 @@ struct resource_table *k3_get_loaded_rsc_table(struct r= proc *rproc, size_t *rsc_table_sz); void *k3_rproc_da_to_va(struct rproc *rproc, u64 da, size_t len, bool *is_iomem); +int k3_rproc_of_get_memories(struct platform_device *pdev, + struct k3_rproc *kproc); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index fa1943c39df90..5ba82944a537f 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -66,58 +66,6 @@ static const struct rproc_ops k3_dsp_rproc_ops =3D { .get_loaded_rsc_table =3D k3_get_loaded_rsc_table, }; =20 -static int k3_dsp_rproc_of_get_memories(struct platform_device *pdev, - struct k3_rproc *kproc) -{ - const struct k3_rproc_dev_data *data =3D kproc->data; - struct device *dev =3D &pdev->dev; - struct resource *res; - int num_mems =3D 0; - int i; - - num_mems =3D kproc->data->num_mems; - kproc->mem =3D devm_kcalloc(kproc->dev, num_mems, - sizeof(*kproc->mem), GFP_KERNEL); - if (!kproc->mem) - return -ENOMEM; - - for (i =3D 0; i < num_mems; i++) { - res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, - data->mems[i].name); - if (!res) { - dev_err(dev, "found no memory resource for %s\n", - data->mems[i].name); - return -EINVAL; - } - if (!devm_request_mem_region(dev, res->start, - resource_size(res), - dev_name(dev))) { - dev_err(dev, "could not request %s region for resource\n", - data->mems[i].name); - return -EBUSY; - } - - kproc->mem[i].cpu_addr =3D devm_ioremap_wc(dev, res->start, - resource_size(res)); - if (!kproc->mem[i].cpu_addr) { - dev_err(dev, "failed to map %s memory\n", - data->mems[i].name); - return -ENOMEM; - } - kproc->mem[i].bus_addr =3D res->start; - kproc->mem[i].dev_addr =3D data->mems[i].dev_addr; - kproc->mem[i].size =3D resource_size(res); - - dev_dbg(dev, "memory %8s: bus addr %pa size 0x%zx va %pK da 0x%x\n", - data->mems[i].name, &kproc->mem[i].bus_addr, - kproc->mem[i].size, kproc->mem[i].cpu_addr, - kproc->mem[i].dev_addr); - } - kproc->num_mems =3D num_mems; - - return 0; -} - static void k3_dsp_mem_release(void *data) { struct device *dev =3D data; @@ -269,7 +217,7 @@ static int k3_dsp_rproc_probe(struct platform_device *p= dev) if (ret) return ret; =20 - ret =3D k3_dsp_rproc_of_get_memories(pdev, kproc); + ret =3D k3_rproc_of_get_memories(pdev, kproc); if (ret) return ret; =20 diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 7d1c7d8054738..30453aca3c7b0 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -21,58 +21,6 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 -static int k3_m4_rproc_of_get_memories(struct platform_device *pdev, - struct k3_rproc *kproc) -{ - const struct k3_rproc_dev_data *data =3D kproc->data; - struct device *dev =3D &pdev->dev; - struct resource *res; - int num_mems; - int i; - - num_mems =3D data->num_mems; - kproc->mem =3D devm_kcalloc(kproc->dev, num_mems, - sizeof(*kproc->mem), GFP_KERNEL); - if (!kproc->mem) - return -ENOMEM; - - for (i =3D 0; i < num_mems; i++) { - res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, - data->mems[i].name); - if (!res) { - dev_err(dev, "found no memory resource for %s\n", - data->mems[i].name); - return -EINVAL; - } - if (!devm_request_mem_region(dev, res->start, - resource_size(res), - dev_name(dev))) { - dev_err(dev, "could not request %s region for resource\n", - data->mems[i].name); - return -EBUSY; - } - - kproc->mem[i].cpu_addr =3D devm_ioremap_wc(dev, res->start, - resource_size(res)); - if (!kproc->mem[i].cpu_addr) { - dev_err(dev, "failed to map %s memory\n", - data->mems[i].name); - return -ENOMEM; - } - kproc->mem[i].bus_addr =3D res->start; - kproc->mem[i].dev_addr =3D data->mems[i].dev_addr; - kproc->mem[i].size =3D resource_size(res); - - dev_dbg(dev, "memory %8s: bus addr %pa size 0x%zx va %pK da 0x%x\n", - data->mems[i].name, &kproc->mem[i].bus_addr, - kproc->mem[i].size, kproc->mem[i].cpu_addr, - kproc->mem[i].dev_addr); - } - kproc->num_mems =3D num_mems; - - return 0; -} - static void k3_m4_rproc_dev_mem_release(void *data) { struct device *dev =3D data; @@ -225,7 +173,7 @@ static int k3_m4_rproc_probe(struct platform_device *pd= ev) if (ret) return ret; =20 - ret =3D k3_m4_rproc_of_get_memories(pdev, kproc); + ret =3D k3_rproc_of_get_memories(pdev, kproc); if (ret) return ret; =20 diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index 58c1bc5781d90..86b4135a5d31d 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -1009,9 +1009,8 @@ static int k3_r5_core_of_get_internal_memories(struct= platform_device *pdev, const struct k3_rproc_dev_data *data =3D kproc->data; struct device *dev =3D &pdev->dev; struct k3_r5_core *core =3D kproc->priv; - struct resource *res; int num_mems; - int i; + int i, ret; =20 num_mems =3D data->num_mems; kproc->mem =3D devm_kcalloc(kproc->dev, num_mems, sizeof(*kproc->mem), @@ -1019,45 +1018,19 @@ static int k3_r5_core_of_get_internal_memories(stru= ct platform_device *pdev, if (!kproc->mem) return -ENOMEM; =20 - for (i =3D 0; i < num_mems; i++) { - res =3D platform_get_resource_byname(pdev, IORESOURCE_MEM, - data->mems[i].name); - if (!res) { - dev_err(dev, "found no memory resource for %s\n", - data->mems[i].name); - return -EINVAL; - } - if (!devm_request_mem_region(dev, res->start, - resource_size(res), - dev_name(dev))) { - dev_err(dev, "could not request %s region for resource\n", - data->mems[i].name); - return -EBUSY; - } - - /* - * TCMs are designed in general to support RAM-like backing - * memories. So, map these as Normal Non-Cached memories. This - * also avoids/fixes any potential alignment faults due to - * unaligned data accesses when using memcpy() or memset() - * functions (normally seen with device type memory). - */ - kproc->mem[i].cpu_addr =3D devm_ioremap_wc(dev, res->start, - resource_size(res)); - if (!kproc->mem[i].cpu_addr) { - dev_err(dev, "failed to map %s memory\n", - data->mems[i].name); - return -ENOMEM; - } - kproc->mem[i].bus_addr =3D res->start; + ret =3D k3_rproc_of_get_memories(pdev, kproc); + if (ret) + return ret; =20 + for (i =3D 0; i < num_mems; i++) { /* * TODO: * The R5F cores can place ATCM & BTCM anywhere in its address * based on the corresponding Region Registers in the System * Control coprocessor. For now, place ATCM and BTCM at * addresses 0 and 0x41010000 (same as the bus address on AM65x - * SoCs) based on loczrama setting + * SoCs) based on loczrama setting overriding default assignment + * done by k3_rproc_of_get_memories(). */ if (!strcmp(data->mems[i].name, "atcm")) { kproc->mem[i].dev_addr =3D core->loczrama ? @@ -1066,14 +1039,10 @@ static int k3_r5_core_of_get_internal_memories(stru= ct platform_device *pdev, kproc->mem[i].dev_addr =3D core->loczrama ? K3_R5_TCM_DEV_ADDR : 0; } - kproc->mem[i].size =3D resource_size(res); =20 - dev_dbg(dev, "memory %5s: bus addr %pa size 0x%zx va %pK da 0x%x\n", - data->mems[i].name, &kproc->mem[i].bus_addr, - kproc->mem[i].size, kproc->mem[i].cpu_addr, - kproc->mem[i].dev_addr); + dev_dbg(dev, "Updating bus addr %pa of memory %5s\n", + &kproc->mem[i].bus_addr, data->mems[i].name); } - kproc->num_mems =3D num_mems; =20 return 0; } --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from fllvem-ot03.ext.ti.com (fllvem-ot03.ext.ti.com [198.47.19.245]) (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 66DA220DD72; Tue, 13 May 2025 05:47:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.19.245 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115266; cv=none; b=aAQaOP30NHayxqe1awmuoQS7n5JMy5uoHFzfPK3NU/LEkihNRucQjN0kGLY9hHLKHkauL3bhBuOLPseAHqqJZXhAsrD6CbqHuF8l1d6s2YSFrLxHT7u4aBbtpqs5rBV9X6j/KKDXfmunxKoWunITxXSf/OKjvnnN4eA908SICqQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115266; c=relaxed/simple; bh=QKF8vs3iCMtue9SamlbSryJLl+jVSN01bpAA0oP+qtc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=hbFqeiQDFnJy5HSkZfHxRhxOwtmQuo/9a3rAGZ3zhj5BdYqTxqUB44Bu6/kIqrYsonqh3FKRZfUJZqBAfZVGybAeS4Qt97gzljSdfWYhSwwkAVc59pDsXkb19m2BRpypTMPrLzoLDI4mFFS0723TDTNNXbQaoN5oj2Su0Bi29jM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=Cf3CY0zG; arc=none smtp.client-ip=198.47.19.245 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="Cf3CY0zG" Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllvem-ot03.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5laV92210938 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:47:36 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115256; bh=Y8u65IqCA2+EsDa6C7OkOWQhcHRdY44PD558oLvTrtc=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=Cf3CY0zGvw/y2lyzJ/oynLaka67fRtqPDT+sJwl9JNaa8ckggN825RRQNRhrdJ1Vl WU2hP1pnOCScv35b1kyBxrHzmmV6635H9dfJVKaI80CD9pxDB9tqc9P+zyfKiWlqbk o3Rd5D0PKgQ/TpR7Y/h3J2zTVOArEBYHdgv21fKc= Received: from DFLE111.ent.ti.com (dfle111.ent.ti.com [10.64.6.32]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5laAN089120 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:47:36 -0500 Received: from DFLE102.ent.ti.com (10.64.6.23) by DFLE111.ent.ti.com (10.64.6.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:47:36 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DFLE102.ent.ti.com (10.64.6.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:47:36 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqh131001; Tue, 13 May 2025 00:47:32 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 34/36] remoteproc: k3: Refactor mem_release() functions into common driver Date: Tue, 13 May 2025 11:15:08 +0530 Message-ID: <20250513054510.3439842-35-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The mem_release() implementations in the TI K3 R5, DSP and M4 remoteproc drivers release the reserved memory of the device, which get auto triggered upon device removal. Refactor these functions into ti_k3_common.c driver as k3_mem_release() and use this common function in R5, DSP and M4 drivers. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-34-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-32-b-padhi@ti.com/ v10: Changelog: 1. Update commit message to call out changes in a better way. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-25-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.c | 8 ++++++++ drivers/remoteproc/ti_k3_common.h | 1 + drivers/remoteproc/ti_k3_dsp_remoteproc.c | 9 +-------- drivers/remoteproc/ti_k3_m4_remoteproc.c | 9 +-------- drivers/remoteproc/ti_k3_r5_remoteproc.c | 9 +-------- 5 files changed, 12 insertions(+), 24 deletions(-) diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c index 2200af4edaf85..5d257242d5752 100644 --- a/drivers/remoteproc/ti_k3_common.c +++ b/drivers/remoteproc/ti_k3_common.c @@ -461,5 +461,13 @@ int k3_rproc_of_get_memories(struct platform_device *p= dev, } EXPORT_SYMBOL_GPL(k3_rproc_of_get_memories); =20 +void k3_mem_release(void *data) +{ + struct device *dev =3D data; + + of_reserved_mem_device_release(dev); +} +EXPORT_SYMBOL_GPL(k3_mem_release); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index d05f53bd9073a..63f094a375604 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -112,4 +112,5 @@ void *k3_rproc_da_to_va(struct rproc *rproc, u64 da, si= ze_t len, bool *is_iomem); int k3_rproc_of_get_memories(struct platform_device *pdev, struct k3_rproc *kproc); +void k3_mem_release(void *data); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 5ba82944a537f..6c79b347a610a 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -66,13 +66,6 @@ static const struct rproc_ops k3_dsp_rproc_ops =3D { .get_loaded_rsc_table =3D k3_get_loaded_rsc_table, }; =20 -static void k3_dsp_mem_release(void *data) -{ - struct device *dev =3D data; - - of_reserved_mem_device_release(dev); -} - static int k3_dsp_reserved_mem_init(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; @@ -102,7 +95,7 @@ static int k3_dsp_reserved_mem_init(struct k3_rproc *kpr= oc) ERR_PTR(ret)); return ret; } - ret =3D devm_add_action_or_reset(dev, k3_dsp_mem_release, dev); + ret =3D devm_add_action_or_reset(dev, k3_mem_release, dev); if (ret) return ret; =20 diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 30453aca3c7b0..1a87d012ed42e 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -21,13 +21,6 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 -static void k3_m4_rproc_dev_mem_release(void *data) -{ - struct device *dev =3D data; - - of_reserved_mem_device_release(dev); -} - static int k3_m4_reserved_mem_init(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; @@ -56,7 +49,7 @@ static int k3_m4_reserved_mem_init(struct k3_rproc *kproc) dev_err(dev, "device cannot initialize DMA pool (%d)\n", ret); return ret; } - ret =3D devm_add_action_or_reset(dev, k3_m4_rproc_dev_mem_release, dev); + ret =3D devm_add_action_or_reset(dev, k3_mem_release, dev); if (ret) return ret; =20 diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index 86b4135a5d31d..1e770121e0991 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -761,13 +761,6 @@ static int k3_r5_rproc_configure(struct k3_rproc *kpro= c) return ret; } =20 -static void k3_r5_mem_release(void *data) -{ - struct device *dev =3D data; - - of_reserved_mem_device_release(dev); -} - static int k3_r5_reserved_mem_init(struct k3_rproc *kproc) { struct device *dev =3D kproc->dev; @@ -798,7 +791,7 @@ static int k3_r5_reserved_mem_init(struct k3_rproc *kpr= oc) return ret; } =20 - ret =3D devm_add_action_or_reset(dev, k3_r5_mem_release, dev); + ret =3D devm_add_action_or_reset(dev, k3_mem_release, dev); if (ret) return ret; =20 --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from lelvem-ot01.ext.ti.com (lelvem-ot01.ext.ti.com [198.47.23.234]) (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 5F29E20F09A; Tue, 13 May 2025 05:47:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.234 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115270; cv=none; b=faoRzq6QK4UL6tF3ktuIDQ/rjABEYO8ha3wlM9KZ859B3KHPx4s4pTe5pRtOHucHEXN/xOn0PnuOiCxEoeV3fcBvhakY86teiwdhB5ez2m4O10bZD+cDDovm/Gauiof1JK9lzLMevViccPwr79nGQlXjp0G9n18CsKgVNx7ey/U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115270; c=relaxed/simple; bh=owi3YRbKxgYIuIG7EL9gd5xwKEuZUJBLHkz+zebsEMo=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=bIJhKxRIPyviKyzxvV6J1r6zN5lvuiVUJ73woeCKIzEGqPGfhCLGN1subyBwjIKwuAN8p2HJZ2lPEA7gdHNVjGKu9nPSHTE13U1dwVg7ip9L8hAul3ZXcqctCXhOV1aUKO38QbxBDv1v88B6Sf3kCjVTTES5RJ8NW2rTa6xic0E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=ArKzSR32; arc=none smtp.client-ip=198.47.23.234 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="ArKzSR32" Received: from lelvem-sh02.itg.ti.com ([10.180.78.226]) by lelvem-ot01.ext.ti.com (8.15.2/8.15.2) with ESMTP id 54D5leHN2226586; Tue, 13 May 2025 00:47:40 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115260; bh=S8SaQXc9kwv1TczoQd49jGbxPqdF7+QhOCOmIEF+bos=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=ArKzSR32HNlLBBDIiRZ4kPgPFrQ5dlclNub6MkHGQfDtVDnZrvv8vzAztw4wXmpGV +DuXobRHj9uuoUiaFv+CKXQ3RZWxYs08VBeETKQPOVRqeaKu7Ryso9TF50CgxwPpeh Nk9BjFXqxiBiQFwEVhdeMCNTRgC88AdzpkK1CPSo= Received: from DFLE114.ent.ti.com (dfle114.ent.ti.com [10.64.6.35]) by lelvem-sh02.itg.ti.com (8.18.1/8.18.1) with ESMTPS id 54D5lean652516 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA256 bits=128 verify=FAIL); Tue, 13 May 2025 00:47:40 -0500 Received: from DFLE110.ent.ti.com (10.64.6.31) by DFLE114.ent.ti.com (10.64.6.35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:47:40 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DFLE110.ent.ti.com (10.64.6.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:47:40 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqi131001; Tue, 13 May 2025 00:47:36 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 35/36] remoteproc: k3: Refactor reserved_mem_init() functions into common driver Date: Tue, 13 May 2025 11:15:09 +0530 Message-ID: <20250513054510.3439842-36-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The reserved_mem_init() implementations in the R5, DSP and M4 remoteproc drivers initialize the reserved memory regions associated with the remote processor. Refactor these functions into the ti_k3_common.c driver as k3_reserved_mem_init() and use this common function throughout in R5, DSP and M4 drivers. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-35-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-33-b-padhi@ti.com/ v10: Changelog: 1. Update commit message to call out changes in a better way. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-26-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.c | 70 +++++++++++++++++++ drivers/remoteproc/ti_k3_common.h | 1 + drivers/remoteproc/ti_k3_dsp_remoteproc.c | 72 +------------------- drivers/remoteproc/ti_k3_m4_remoteproc.c | 71 +------------------- drivers/remoteproc/ti_k3_r5_remoteproc.c | 82 +---------------------- 5 files changed, 74 insertions(+), 222 deletions(-) diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c index 5d257242d5752..92da2af2733d9 100644 --- a/drivers/remoteproc/ti_k3_common.c +++ b/drivers/remoteproc/ti_k3_common.c @@ -469,5 +469,75 @@ void k3_mem_release(void *data) } EXPORT_SYMBOL_GPL(k3_mem_release); =20 +int k3_reserved_mem_init(struct k3_rproc *kproc) +{ + struct device *dev =3D kproc->dev; + struct device_node *np =3D dev->of_node; + struct device_node *rmem_np; + struct reserved_mem *rmem; + int num_rmems; + int ret, i; + + num_rmems =3D of_property_count_elems_of_size(np, "memory-region", + sizeof(phandle)); + if (num_rmems < 0) { + dev_err(dev, "device does not reserved memory regions (%d)\n", + num_rmems); + return -EINVAL; + } + if (num_rmems < 2) { + dev_err(dev, "device needs at least two memory regions to be defined, nu= m =3D %d\n", + num_rmems); + return -EINVAL; + } + + /* use reserved memory region 0 for vring DMA allocations */ + ret =3D of_reserved_mem_device_init_by_idx(dev, np, 0); + if (ret) { + dev_err(dev, "device cannot initialize DMA pool (%d)\n", ret); + return ret; + } + ret =3D devm_add_action_or_reset(dev, k3_mem_release, dev); + if (ret) + return ret; + + num_rmems--; + kproc->rmem =3D devm_kcalloc(dev, num_rmems, sizeof(*kproc->rmem), GFP_KE= RNEL); + if (!kproc->rmem) + return -ENOMEM; + + /* use remaining reserved memory regions for static carveouts */ + for (i =3D 0; i < num_rmems; i++) { + rmem_np =3D of_parse_phandle(np, "memory-region", i + 1); + if (!rmem_np) + return -EINVAL; + + rmem =3D of_reserved_mem_lookup(rmem_np); + of_node_put(rmem_np); + if (!rmem) + return -EINVAL; + + kproc->rmem[i].bus_addr =3D rmem->base; + /* 64-bit address regions currently not supported */ + kproc->rmem[i].dev_addr =3D (u32)rmem->base; + kproc->rmem[i].size =3D rmem->size; + kproc->rmem[i].cpu_addr =3D devm_ioremap_wc(dev, rmem->base, rmem->size); + if (!kproc->rmem[i].cpu_addr) { + dev_err(dev, "failed to map reserved memory#%d at %pa of size %pa\n", + i + 1, &rmem->base, &rmem->size); + return -ENOMEM; + } + + dev_dbg(dev, "reserved memory%d: bus addr %pa size 0x%zx va %pK da 0x%x\= n", + i + 1, &kproc->rmem[i].bus_addr, + kproc->rmem[i].size, kproc->rmem[i].cpu_addr, + kproc->rmem[i].dev_addr); + } + kproc->num_rmems =3D num_rmems; + + return 0; +} +EXPORT_SYMBOL_GPL(k3_reserved_mem_init); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index 63f094a375604..d304755990a94 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -113,4 +113,5 @@ void *k3_rproc_da_to_va(struct rproc *rproc, u64 da, si= ze_t len, int k3_rproc_of_get_memories(struct platform_device *pdev, struct k3_rproc *kproc); void k3_mem_release(void *data); +int k3_reserved_mem_init(struct k3_rproc *kproc); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 6c79b347a610a..45000b68260c1 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -66,76 +66,6 @@ static const struct rproc_ops k3_dsp_rproc_ops =3D { .get_loaded_rsc_table =3D k3_get_loaded_rsc_table, }; =20 -static int k3_dsp_reserved_mem_init(struct k3_rproc *kproc) -{ - struct device *dev =3D kproc->dev; - struct device_node *np =3D dev->of_node; - struct device_node *rmem_np; - struct reserved_mem *rmem; - int num_rmems; - int ret, i; - - num_rmems =3D of_property_count_elems_of_size(np, "memory-region", - sizeof(phandle)); - if (num_rmems < 0) { - dev_err(dev, "device does not reserved memory regions (%pe)\n", - ERR_PTR(num_rmems)); - return -EINVAL; - } - if (num_rmems < 2) { - dev_err(dev, "device needs at least two memory regions to be defined, nu= m =3D %d\n", - num_rmems); - return -EINVAL; - } - - /* use reserved memory region 0 for vring DMA allocations */ - ret =3D of_reserved_mem_device_init_by_idx(dev, np, 0); - if (ret) { - dev_err(dev, "device cannot initialize DMA pool (%pe)\n", - ERR_PTR(ret)); - return ret; - } - ret =3D devm_add_action_or_reset(dev, k3_mem_release, dev); - if (ret) - return ret; - - num_rmems--; - kproc->rmem =3D devm_kcalloc(dev, num_rmems, sizeof(*kproc->rmem), GFP_KE= RNEL); - if (!kproc->rmem) - return -ENOMEM; - - /* use remaining reserved memory regions for static carveouts */ - for (i =3D 0; i < num_rmems; i++) { - rmem_np =3D of_parse_phandle(np, "memory-region", i + 1); - if (!rmem_np) - return -EINVAL; - - rmem =3D of_reserved_mem_lookup(rmem_np); - of_node_put(rmem_np); - if (!rmem) - return -EINVAL; - - kproc->rmem[i].bus_addr =3D rmem->base; - /* 64-bit address regions currently not supported */ - kproc->rmem[i].dev_addr =3D (u32)rmem->base; - kproc->rmem[i].size =3D rmem->size; - kproc->rmem[i].cpu_addr =3D devm_ioremap_wc(dev, rmem->base, rmem->size); - if (!kproc->rmem[i].cpu_addr) { - dev_err(dev, "failed to map reserved memory#%d at %pa of size %pa\n", - i + 1, &rmem->base, &rmem->size); - return -ENOMEM; - } - - dev_dbg(dev, "reserved memory%d: bus addr %pa size 0x%zx va %pK da 0x%x\= n", - i + 1, &kproc->rmem[i].bus_addr, - kproc->rmem[i].size, kproc->rmem[i].cpu_addr, - kproc->rmem[i].dev_addr); - } - kproc->num_rmems =3D num_rmems; - - return 0; -} - static void k3_dsp_release_tsp(void *data) { struct ti_sci_proc *tsp =3D data; @@ -214,7 +144,7 @@ static int k3_dsp_rproc_probe(struct platform_device *p= dev) if (ret) return ret; =20 - ret =3D k3_dsp_reserved_mem_init(kproc); + ret =3D k3_reserved_mem_init(kproc); if (ret) return dev_err_probe(dev, ret, "reserved memory init failed\n"); =20 diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 1a87d012ed42e..41bca6b64517a 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -21,75 +21,6 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 -static int k3_m4_reserved_mem_init(struct k3_rproc *kproc) -{ - struct device *dev =3D kproc->dev; - struct device_node *np =3D dev->of_node; - struct device_node *rmem_np; - struct reserved_mem *rmem; - int num_rmems; - int ret, i; - - num_rmems =3D of_property_count_elems_of_size(np, "memory-region", - sizeof(phandle)); - if (num_rmems < 0) { - dev_err(dev, "device does not reserved memory regions (%d)\n", - num_rmems); - return -EINVAL; - } - if (num_rmems < 2) { - dev_err(dev, "device needs at least two memory regions to be defined, nu= m =3D %d\n", - num_rmems); - return -EINVAL; - } - - /* use reserved memory region 0 for vring DMA allocations */ - ret =3D of_reserved_mem_device_init_by_idx(dev, np, 0); - if (ret) { - dev_err(dev, "device cannot initialize DMA pool (%d)\n", ret); - return ret; - } - ret =3D devm_add_action_or_reset(dev, k3_mem_release, dev); - if (ret) - return ret; - - num_rmems--; - kproc->rmem =3D devm_kcalloc(dev, num_rmems, sizeof(*kproc->rmem), GFP_KE= RNEL); - if (!kproc->rmem) - return -ENOMEM; - - /* use remaining reserved memory regions for static carveouts */ - for (i =3D 0; i < num_rmems; i++) { - rmem_np =3D of_parse_phandle(np, "memory-region", i + 1); - if (!rmem_np) - return -EINVAL; - - rmem =3D of_reserved_mem_lookup(rmem_np); - of_node_put(rmem_np); - if (!rmem) - return -EINVAL; - - kproc->rmem[i].bus_addr =3D rmem->base; - /* 64-bit address regions currently not supported */ - kproc->rmem[i].dev_addr =3D (u32)rmem->base; - kproc->rmem[i].size =3D rmem->size; - kproc->rmem[i].cpu_addr =3D devm_ioremap_wc(dev, rmem->base, rmem->size); - if (!kproc->rmem[i].cpu_addr) { - dev_err(dev, "failed to map reserved memory#%d at %pa of size %pa\n", - i + 1, &rmem->base, &rmem->size); - return -ENOMEM; - } - - dev_dbg(dev, "reserved memory%d: bus addr %pa size 0x%zx va %pK da 0x%x\= n", - i + 1, &kproc->rmem[i].bus_addr, - kproc->rmem[i].size, kproc->rmem[i].cpu_addr, - kproc->rmem[i].dev_addr); - } - kproc->num_rmems =3D num_rmems; - - return 0; -} - static void k3_m4_release_tsp(void *data) { struct ti_sci_proc *tsp =3D data; @@ -170,7 +101,7 @@ static int k3_m4_rproc_probe(struct platform_device *pd= ev) if (ret) return ret; =20 - ret =3D k3_m4_reserved_mem_init(kproc); + ret =3D k3_reserved_mem_init(kproc); if (ret) return dev_err_probe(dev, ret, "reserved memory init failed\n"); =20 diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index 1e770121e0991..3cd8391212f7b 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -761,86 +761,6 @@ static int k3_r5_rproc_configure(struct k3_rproc *kpro= c) return ret; } =20 -static int k3_r5_reserved_mem_init(struct k3_rproc *kproc) -{ - struct device *dev =3D kproc->dev; - struct device_node *np =3D dev_of_node(dev); - struct device_node *rmem_np; - struct reserved_mem *rmem; - int num_rmems; - int ret, i; - - num_rmems =3D of_property_count_elems_of_size(np, "memory-region", - sizeof(phandle)); - if (num_rmems <=3D 0) { - dev_err(dev, "device does not have reserved memory regions, ret =3D %d\n= ", - num_rmems); - return -EINVAL; - } - if (num_rmems < 2) { - dev_err(dev, "device needs at least two memory regions to be defined, nu= m =3D %d\n", - num_rmems); - return -EINVAL; - } - - /* use reserved memory region 0 for vring DMA allocations */ - ret =3D of_reserved_mem_device_init_by_idx(dev, np, 0); - if (ret) { - dev_err(dev, "device cannot initialize DMA pool, ret =3D %d\n", - ret); - return ret; - } - - ret =3D devm_add_action_or_reset(dev, k3_mem_release, dev); - if (ret) - return ret; - - num_rmems--; - kproc->rmem =3D devm_kcalloc(dev, num_rmems, sizeof(*kproc->rmem), GFP_KE= RNEL); - if (!kproc->rmem) - return -ENOMEM; - - /* use remaining reserved memory regions for static carveouts */ - for (i =3D 0; i < num_rmems; i++) { - rmem_np =3D of_parse_phandle(np, "memory-region", i + 1); - if (!rmem_np) - return -EINVAL; - - rmem =3D of_reserved_mem_lookup(rmem_np); - of_node_put(rmem_np); - if (!rmem) - return -EINVAL; - - kproc->rmem[i].bus_addr =3D rmem->base; - /* - * R5Fs do not have an MMU, but have a Region Address Translator - * (RAT) module that provides a fixed entry translation between - * the 32-bit processor addresses to 64-bit bus addresses. The - * RAT is programmable only by the R5F cores. Support for RAT - * is currently not supported, so 64-bit address regions are not - * supported. The absence of MMUs implies that the R5F device - * addresses/supported memory regions are restricted to 32-bit - * bus addresses, and are identical - */ - kproc->rmem[i].dev_addr =3D (u32)rmem->base; - kproc->rmem[i].size =3D rmem->size; - kproc->rmem[i].cpu_addr =3D devm_ioremap_wc(dev, rmem->base, rmem->size); - if (!kproc->rmem[i].cpu_addr) { - dev_err(dev, "failed to map reserved memory#%d at %pa of size %pa\n", - i + 1, &rmem->base, &rmem->size); - return -ENOMEM; - } - - dev_dbg(dev, "reserved memory%d: bus addr %pa size 0x%zx va %pK da 0x%x\= n", - i + 1, &kproc->rmem[i].bus_addr, - kproc->rmem[i].size, kproc->rmem[i].cpu_addr, - kproc->rmem[i].dev_addr); - } - kproc->num_rmems =3D num_rmems; - - return 0; -} - /* * Each R5F core within a typical R5FSS instance has a total of 64 KB of T= CMs, * split equally into two 32 KB banks between ATCM and BTCM. The TCMs from= both @@ -1219,7 +1139,7 @@ static int k3_r5_cluster_rproc_init(struct platform_d= evice *pdev) init_rmem: k3_r5_adjust_tcm_sizes(kproc); =20 - ret =3D k3_r5_reserved_mem_init(kproc); + ret =3D k3_reserved_mem_init(kproc); if (ret) { dev_err(cdev, "reserved memory init failed, ret =3D %d\n", ret); --=20 2.34.1 From nobody Wed Dec 17 13:59:53 2025 Received: from lelvem-ot02.ext.ti.com (lelvem-ot02.ext.ti.com [198.47.23.235]) (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 A861D1E9B06; Tue, 13 May 2025 05:47:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.47.23.235 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115273; cv=none; b=G7GPjLKm05o1B2XVNpZmGdjDv/MY2QJSBuj5OOZT/v3l0U80KF/y0kRDSHwR0TZBeC3GoBJCeQcKoV0FCSjMi8az6ZfD2QymSs//vLaNRAFETJ67uncOXvh+B5ZkrhAd4Licv8M/28J024GNg2W1brBnupO0+BhqQtV9E9Oq1SM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747115273; c=relaxed/simple; bh=LYePpIuaUT2Cnoz8Dt+iHLnOMUEuRuQUzZ9t0qMJNY4=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=AuXOPyHOZcTlZoM0wbpe2hhxz+oMSsmpGYokNVG1vjI1K1RoVjKBRM2+Yoc4TTtuE+GSU8Y9XRMZp4lA+2xiATjv8g3Vpb/pN1/acFU1zysueQENbqzdu0ei+Z073n/lcScqCqtrMg7XYIQUy0chwHK3TFZJxYkmdWQcUnuJjc0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com; spf=pass smtp.mailfrom=ti.com; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=M8ZU4X82; arc=none smtp.client-ip=198.47.23.235 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=ti.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ti.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="M8ZU4X82" Received: from fllv0035.itg.ti.com ([10.64.41.0]) by lelvem-ot02.ext.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5li0S2987287 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 May 2025 00:47:44 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1747115264; bh=GSQA7LysnwSzXVakSfe7wQULdMN5JQmPEO4p4jH9FDU=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=M8ZU4X82U35ELjO0xHVHEG2S6KYHlt3/IzLOcIEcyBTYVuVbArCv3iPj0TiF1Ima3 Nw9Yf/rLW25fmo6tY7fUi+l12kKLNva4iwku2A4sg2XhawXMyQ3q/Ia3FPvnI6HE88 cJ12mV9dJMNwnYDcxgffU6zo/W9IIxlZRMNdUW5M= Received: from DLEE103.ent.ti.com (dlee103.ent.ti.com [157.170.170.33]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 54D5lirM089136 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 13 May 2025 00:47:44 -0500 Received: from DLEE106.ent.ti.com (157.170.170.36) by DLEE103.ent.ti.com (157.170.170.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23; Tue, 13 May 2025 00:47:44 -0500 Received: from lelvsmtp6.itg.ti.com (10.180.75.249) by DLEE106.ent.ti.com (157.170.170.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.23 via Frontend Transport; Tue, 13 May 2025 00:47:44 -0500 Received: from uda0510294.dhcp.ti.com (uda0510294.dhcp.ti.com [172.24.227.151]) by lelvsmtp6.itg.ti.com (8.15.2/8.15.2) with ESMTP id 54D5jAqj131001; Tue, 13 May 2025 00:47:40 -0500 From: Beleswar Padhi To: , CC: , , , , , , , , , , Subject: [PATCH v12 36/36] remoteproc: k3: Refactor release_tsp() functions into common driver Date: Tue, 13 May 2025 11:15:10 +0530 Message-ID: <20250513054510.3439842-37-b-padhi@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250513054510.3439842-1-b-padhi@ti.com> References: <20250513054510.3439842-1-b-padhi@ti.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-C2ProcessedOrg: 333ef613-75bf-4e12-a4b1-8e3623f5dcea Content-Type: text/plain; charset="utf-8" The release_tsp() implementations in the TI K3 R5, DSP and M4 remoteproc drivers release the TI-SCI processor control of a remote processor, which is auto triggered upon device removal. Refactor these functions into ti_k3_common.c driver as k3_release_tsp() and use this common function throughout in R5, DSP and M4 drivers. Signed-off-by: Beleswar Padhi Tested-by: Judith Mendez Reviewed-by: Andrew Davis --- v12: Changelog: 1. Carried R/B tag. Link to v11: https://lore.kernel.org/all/20250425104135.830255-36-b-padhi@ti.com/ v11: Changelog: 1. Carried T/B tag. Link to v10: https://lore.kernel.org/all/20250417182001.3903905-34-b-padhi@ti.com/ v10: Changelog: 1. Update commit message to call out changes in a better way. Link to v9: https://lore.kernel.org/all/20250317120622.1746415-27-b-padhi@ti.com/ drivers/remoteproc/ti_k3_common.c | 8 ++++++++ drivers/remoteproc/ti_k3_common.h | 1 + drivers/remoteproc/ti_k3_dsp_remoteproc.c | 9 +-------- drivers/remoteproc/ti_k3_m4_remoteproc.c | 9 +-------- drivers/remoteproc/ti_k3_r5_remoteproc.c | 9 +-------- 5 files changed, 12 insertions(+), 24 deletions(-) diff --git a/drivers/remoteproc/ti_k3_common.c b/drivers/remoteproc/ti_k3_c= ommon.c index 92da2af2733d9..d5dccc81d4604 100644 --- a/drivers/remoteproc/ti_k3_common.c +++ b/drivers/remoteproc/ti_k3_common.c @@ -539,5 +539,13 @@ int k3_reserved_mem_init(struct k3_rproc *kproc) } EXPORT_SYMBOL_GPL(k3_reserved_mem_init); =20 +void k3_release_tsp(void *data) +{ + struct ti_sci_proc *tsp =3D data; + + ti_sci_proc_release(tsp); +} +EXPORT_SYMBOL_GPL(k3_release_tsp); + MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("TI K3 common Remoteproc code"); diff --git a/drivers/remoteproc/ti_k3_common.h b/drivers/remoteproc/ti_k3_c= ommon.h index d304755990a94..aee3c28dbe510 100644 --- a/drivers/remoteproc/ti_k3_common.h +++ b/drivers/remoteproc/ti_k3_common.h @@ -114,4 +114,5 @@ int k3_rproc_of_get_memories(struct platform_device *pd= ev, struct k3_rproc *kproc); void k3_mem_release(void *data); int k3_reserved_mem_init(struct k3_rproc *kproc); +void k3_release_tsp(void *data); #endif /* REMOTEPROC_TI_K3_COMMON_H */ diff --git a/drivers/remoteproc/ti_k3_dsp_remoteproc.c b/drivers/remoteproc= /ti_k3_dsp_remoteproc.c index 45000b68260c1..7a72933bd403b 100644 --- a/drivers/remoteproc/ti_k3_dsp_remoteproc.c +++ b/drivers/remoteproc/ti_k3_dsp_remoteproc.c @@ -66,13 +66,6 @@ static const struct rproc_ops k3_dsp_rproc_ops =3D { .get_loaded_rsc_table =3D k3_get_loaded_rsc_table, }; =20 -static void k3_dsp_release_tsp(void *data) -{ - struct ti_sci_proc *tsp =3D data; - - ti_sci_proc_release(tsp); -} - static int k3_dsp_rproc_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; @@ -136,7 +129,7 @@ static int k3_dsp_rproc_probe(struct platform_device *p= dev) dev_err_probe(dev, ret, "ti_sci_proc_request failed\n"); return ret; } - ret =3D devm_add_action_or_reset(dev, k3_dsp_release_tsp, kproc->tsp); + ret =3D devm_add_action_or_reset(dev, k3_release_tsp, kproc->tsp); if (ret) return ret; =20 diff --git a/drivers/remoteproc/ti_k3_m4_remoteproc.c b/drivers/remoteproc/= ti_k3_m4_remoteproc.c index 41bca6b64517a..3a11fd24eb52b 100644 --- a/drivers/remoteproc/ti_k3_m4_remoteproc.c +++ b/drivers/remoteproc/ti_k3_m4_remoteproc.c @@ -21,13 +21,6 @@ #include "ti_sci_proc.h" #include "ti_k3_common.h" =20 -static void k3_m4_release_tsp(void *data) -{ - struct ti_sci_proc *tsp =3D data; - - ti_sci_proc_release(tsp); -} - static const struct rproc_ops k3_m4_rproc_ops =3D { .prepare =3D k3_rproc_prepare, .unprepare =3D k3_rproc_unprepare, @@ -93,7 +86,7 @@ static int k3_m4_rproc_probe(struct platform_device *pdev) ret =3D ti_sci_proc_request(kproc->tsp); if (ret < 0) return dev_err_probe(dev, ret, "ti_sci_proc_request failed\n"); - ret =3D devm_add_action_or_reset(dev, k3_m4_release_tsp, kproc->tsp); + ret =3D devm_add_action_or_reset(dev, k3_release_tsp, kproc->tsp); if (ret) return ret; =20 diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/= ti_k3_r5_remoteproc.c index 3cd8391212f7b..e34c04c135fc9 100644 --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c +++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c @@ -1017,13 +1017,6 @@ static int k3_r5_core_of_get_sram_memories(struct pl= atform_device *pdev, return 0; } =20 -static void k3_r5_release_tsp(void *data) -{ - struct ti_sci_proc *tsp =3D data; - - ti_sci_proc_release(tsp); -} - static int k3_r5_cluster_rproc_init(struct platform_device *pdev) { struct k3_r5_cluster *cluster =3D platform_get_drvdata(pdev); @@ -1109,7 +1102,7 @@ static int k3_r5_cluster_rproc_init(struct platform_d= evice *pdev) goto out; } =20 - ret =3D devm_add_action_or_reset(cdev, k3_r5_release_tsp, kproc->tsp); + ret =3D devm_add_action_or_reset(cdev, k3_release_tsp, kproc->tsp); if (ret) goto out; } --=20 2.34.1