From nobody Wed Dec 31 04:37:38 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A73F4C4167D for ; Sat, 11 Nov 2023 12:16:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231164AbjKKMQW (ORCPT ); Sat, 11 Nov 2023 07:16:22 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40422 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230481AbjKKMQS (ORCPT ); Sat, 11 Nov 2023 07:16:18 -0500 Received: from fllv0015.ext.ti.com (fllv0015.ext.ti.com [198.47.19.141]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 422B23AA6; Sat, 11 Nov 2023 04:16:15 -0800 (PST) Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id 3ABCG15g095445; Sat, 11 Nov 2023 06:16:01 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1699704961; bh=V4T4sch1tiJyW5MPqw/gLkRYEZf1vXcBY1djKhH51uw=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=lQEn/0jncR8JisFB4/YDriCEpYFZKKNVept1MeulnrZbDU7jxYL82dQmTZHCan7ea 40gt/x3IqfVQKgGqBgeS3YYVdY/NcCa2kVcHubBkshDJhPVWG1mKebiEjs+B2b12b3 3bk+noeDmOGRTID9+0Sll4ip9xwmMWvRerx1uxhM= Received: from DLEE113.ent.ti.com (dlee113.ent.ti.com [157.170.170.24]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 3ABCG13d081646 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Sat, 11 Nov 2023 06:16:01 -0600 Received: from DLEE110.ent.ti.com (157.170.170.21) 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; Sat, 11 Nov 2023 06:16:01 -0600 Received: from lelv0327.itg.ti.com (10.180.67.183) 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; Sat, 11 Nov 2023 06:16:01 -0600 Received: from uda0492258.dhcp.ti.com (ileaxei01-snat2.itg.ti.com [10.180.69.6]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id 3ABCFtVW100939; Sat, 11 Nov 2023 06:15:59 -0600 From: Siddharth Vadapalli To: , CC: , , , , , Subject: [RFC PATCH 1/3] dmaengine: ti: k3-udma-glue: Add function to parse channel by ID Date: Sat, 11 Nov 2023 17:45:53 +0530 Message-ID: <20231111121555.2656760-2-s-vadapalli@ti.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231111121555.2656760-1-s-vadapalli@ti.com> References: <20231111121555.2656760-1-s-vadapalli@ti.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The existing helper function of_k3_udma_glue_parse() fetches the DMA Channel thread ID from the device-tree node. This makes it necessary to have a device-tree node with the Channel thread IDs populated. However, in the case where the thread ID is known by alternate methods (an example being that of Firmware running on remote core sharing details of the thread IDs), there is no equivalent function to implement the functionality of the existing of_k3_udma_glue_parse() function. Add the of_k3_udma_glue_parse_chn_by_id() helper function which accepts the thread ID as an argument, thereby making it unnecessary to have a device-tree node for obtaining the thread ID. Since of_k3_udma_glue_parse() and of_k3_udma_glue_parse_chn_by_id() share a lot of code in common, create a new function to handle the common code which is named as of_k3_udma_glue_parse_chn_common(). Signed-off-by: Siddharth Vadapalli --- drivers/dma/ti/k3-udma-glue.c | 81 +++++++++++++++++++++++------------ 1 file changed, 54 insertions(+), 27 deletions(-) diff --git a/drivers/dma/ti/k3-udma-glue.c b/drivers/dma/ti/k3-udma-glue.c index c278d5facf7d..9979785d30aa 100644 --- a/drivers/dma/ti/k3-udma-glue.c +++ b/drivers/dma/ti/k3-udma-glue.c @@ -111,6 +111,35 @@ static int of_k3_udma_glue_parse(struct device_node *u= dmax_np, return 0; } =20 +static int of_k3_udma_glue_parse_chn_common(struct k3_udma_glue_common *co= mmon, u32 thread_id, + bool tx_chn) +{ + if (tx_chn && !(thread_id & K3_PSIL_DST_THREAD_ID_OFFSET)) + return -EINVAL; + + if (!tx_chn && (thread_id & K3_PSIL_DST_THREAD_ID_OFFSET)) + return -EINVAL; + + /* get psil endpoint config */ + common->ep_config =3D psil_get_ep_config(thread_id); + if (IS_ERR(common->ep_config)) { + dev_err(common->dev, + "No configuration for psi-l thread 0x%04x\n", + thread_id); + return PTR_ERR(common->ep_config); + } + + common->epib =3D common->ep_config->needs_epib; + common->psdata_size =3D common->ep_config->psd_size; + + if (tx_chn) + common->dst_thread =3D thread_id; + else + common->src_thread =3D thread_id; + + return 0; +} + static int of_k3_udma_glue_parse_chn(struct device_node *chn_np, const char *name, struct k3_udma_glue_common *common, bool tx_chn) @@ -153,38 +182,36 @@ static int of_k3_udma_glue_parse_chn(struct device_no= de *chn_np, common->atype_asel =3D dma_spec.args[1]; } =20 - if (tx_chn && !(thread_id & K3_PSIL_DST_THREAD_ID_OFFSET)) { - ret =3D -EINVAL; + ret =3D of_k3_udma_glue_parse_chn_common(common, thread_id, tx_chn); + if (ret) goto out_put_spec; - } - - if (!tx_chn && (thread_id & K3_PSIL_DST_THREAD_ID_OFFSET)) { - ret =3D -EINVAL; - goto out_put_spec; - } - - /* get psil endpoint config */ - common->ep_config =3D psil_get_ep_config(thread_id); - if (IS_ERR(common->ep_config)) { - dev_err(common->dev, - "No configuration for psi-l thread 0x%04x\n", - thread_id); - ret =3D PTR_ERR(common->ep_config); - goto out_put_spec; - } - - common->epib =3D common->ep_config->needs_epib; - common->psdata_size =3D common->ep_config->psd_size; - - if (tx_chn) - common->dst_thread =3D thread_id; - else - common->src_thread =3D thread_id; =20 out_put_spec: of_node_put(dma_spec.np); return ret; -}; +} + +static int +of_k3_udma_glue_parse_chn_by_id(struct device_node *udmax_np, struct k3_ud= ma_glue_common *common, + bool tx_chn, u32 thread_id) +{ + int ret =3D 0; + + if (unlikely(!udmax_np)) + return -EINVAL; + + ret =3D of_k3_udma_glue_parse(udmax_np, common); + if (ret) + goto out_put_spec; + + ret =3D of_k3_udma_glue_parse_chn_common(common, thread_id, tx_chn); + if (ret) + goto out_put_spec; + +out_put_spec: + of_node_put(udmax_np); + return ret; +} =20 static void k3_udma_glue_dump_tx_chn(struct k3_udma_glue_tx_channel *tx_ch= n) { --=20 2.34.1