From patchwork Fri Dec 16 05:33:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: MD Danish Anwar X-Patchwork-Id: 33861 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp783568wrn; Thu, 15 Dec 2022 21:36:09 -0800 (PST) X-Google-Smtp-Source: AA0mqf5JqPECHcOoblF+Bw9kCgcC+M97HGe/l56Wc3r8AYQSeVnStPqqTpcSMg8VqCzxcG1qKWTx X-Received: by 2002:a17:907:a604:b0:7bd:43e9:d3ab with SMTP id vt4-20020a170907a60400b007bd43e9d3abmr36002498ejc.52.1671168969686; Thu, 15 Dec 2022 21:36:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671168969; cv=none; d=google.com; s=arc-20160816; b=P9Pg83OE6Q5idE/4SYRaAhU8nwGqcwbqbUrDTYq4eM3NB2l4kiiJ6SRPsM0p3Rs4Zm REHDMZDDpQVANHq+TWCqHLK7A6CZKHwygfoJpxKZiGa/zmEiefZ5SGApnDAy5iS9sR9j cFIVvW/7C83xz1Iwcr5+2vrkwDLQjoVugh0NOul2alzrNyE0ONE3ZMk8xpEl5iisFKf8 aY86XeRBVq1dvKQwJjDtug+TsBLNPWqYXqKsw0F1oRWTDkJYVzxeyOLYXYtcvOeSLDDk I3S9b3MEKZJ4uH1aaU5SsGjObSJb39SljjYX0WTW+e7x0INidpclrT7DTHBxCKDv1LXy pMBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=mkPjwEGogI62uJtihkwiClxeDM8LlzG5SN3BLcVtk3o=; b=xONIVY9F26ESzQmZpJ3YqjEUYoIzZgUIbg1TsP5AQ1qednu8QrHxE+v4hyZgpgXVfJ y0puZs3vsN9AEds1nYsuCoyGNO/IbBGR59I93ON6/KW2aflHEoZzCmcAtJ8f2FIs+Q9w LclJ0GuzzmEGu6AHr+MGVJpL2iyrxzRRS9QjK0EBXW+zAF1Upj7NaOpp8gQQzgc+xOJd MQYcE4DMhTWiAdARVMXbOuoY5IftJwUYYIolEP20qCzkP1X8nEa7NEWh0Piid2RrhDGK xd48olnxi0KREBbJC28KmeLdfG08SHra6goZj3hcH2UK2AEfD4m/ZaYTYhOfbnsHlRjO +xbA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=iBtu+HfU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id cs18-20020a170906dc9200b007c172bd367fsi1701504ejc.193.2022.12.15.21.35.46; Thu, 15 Dec 2022 21:36:09 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=iBtu+HfU; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229885AbiLPFdl (ORCPT + 99 others); Fri, 16 Dec 2022 00:33:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59708 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229480AbiLPFdi (ORCPT ); Fri, 16 Dec 2022 00:33:38 -0500 Received: from lelv0143.ext.ti.com (lelv0143.ext.ti.com [198.47.23.248]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A9591175A6; Thu, 15 Dec 2022 21:33:34 -0800 (PST) Received: from lelv0265.itg.ti.com ([10.180.67.224]) by lelv0143.ext.ti.com (8.15.2/8.15.2) with ESMTP id 2BG5XHBs010032; Thu, 15 Dec 2022 23:33:17 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1671168797; bh=mkPjwEGogI62uJtihkwiClxeDM8LlzG5SN3BLcVtk3o=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=iBtu+HfURctYHK94uQ63HeJ0rbwgLvUToCIs1IVCx8GbNNo5Oe4iAYWO36hBZoFjo sU2zDYFcfnwtHinFgX9D1zlLWD64jOpSiR87ucoYvCps5wb8aF8eKJUmhnmxZaGOxl BgoF0Ll3FoRPJRZ6cUTresudfiy+NdnwWqNHrST0= Received: from DLEE115.ent.ti.com (dlee115.ent.ti.com [157.170.170.26]) by lelv0265.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 2BG5XHdk022676 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 15 Dec 2022 23:33:17 -0600 Received: from DLEE108.ent.ti.com (157.170.170.38) 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.16; Thu, 15 Dec 2022 23:33:17 -0600 Received: from lelv0327.itg.ti.com (10.180.67.183) 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.16 via Frontend Transport; Thu, 15 Dec 2022 23:33:17 -0600 Received: from lelv0854.itg.ti.com (lelv0854.itg.ti.com [10.181.64.140]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id 2BG5XHQE013174; Thu, 15 Dec 2022 23:33:17 -0600 Received: from localhost (a0501179-pc.dhcp.ti.com [10.24.69.114]) by lelv0854.itg.ti.com (8.14.7/8.14.7) with ESMTP id 2BG5XGfo008916; Thu, 15 Dec 2022 23:33:16 -0600 From: MD Danish Anwar To: Mathieu Poirier , Krzysztof Kozlowski , Rob Herring CC: Suman Anna , Roger Quadros , "Andrew F . Davis" , , , , , , , , MD Danish Anwar Subject: [PATCH v12 1/6] dt-bindings: remoteproc: Add PRU consumer bindings Date: Fri, 16 Dec 2022 11:03:08 +0530 Message-ID: <20221216053313.2974826-2-danishanwar@ti.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221216053313.2974826-1-danishanwar@ti.com> References: <20221216053313.2974826-1-danishanwar@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752347673471833812?= X-GMAIL-MSGID: =?utf-8?q?1752347673471833812?= From: Suman Anna Add DT schema binding for PRU consumers. The binding includes all the common properties that can be used by different PRU consumer or application nodes and supported by the PRU remoteproc driver. These are used to configure the PRU hardware for specific user applications. The application nodes themselves should define their own bindings. Signed-off-by: Tero Kristo Signed-off-by: Suman Anna Signed-off-by: Grzegorz Jaszczyk Signed-off-by: MD Danish Anwar Reviewed-by: Rob Herring --- .../bindings/remoteproc/ti,pru-consumer.yaml | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Documentation/devicetree/bindings/remoteproc/ti,pru-consumer.yaml diff --git a/Documentation/devicetree/bindings/remoteproc/ti,pru-consumer.yaml b/Documentation/devicetree/bindings/remoteproc/ti,pru-consumer.yaml new file mode 100644 index 000000000000..c6d86964b72a --- /dev/null +++ b/Documentation/devicetree/bindings/remoteproc/ti,pru-consumer.yaml @@ -0,0 +1,60 @@ +# SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/remoteproc/ti,pru-consumer.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Common TI PRU Consumer Binding + +maintainers: + - Suman Anna + +description: | + A PRU application/consumer/user node typically uses one or more PRU device + nodes to implement a PRU application/functionality. Each application/client + node would need a reference to at least a PRU node, and optionally define + some properties needed for hardware/firmware configuration. The below + properties are a list of common properties supported by the PRU remoteproc + infrastructure. + + The application nodes shall define their own bindings like regular platform + devices, so below are in addition to each node's bindings. + +properties: + ti,prus: + $ref: /schemas/types.yaml#/definitions/phandle-array + description: phandles to the PRU, RTU or Tx_PRU nodes used + minItems: 1 + maxItems: 6 + items: + maxItems: 1 + + firmware-name: + $ref: /schemas/types.yaml#/definitions/string-array + minItems: 1 + maxItems: 6 + description: | + firmwares for the PRU cores, the default firmware for the core from + the PRU node will be used if not provided. The firmware names should + correspond to the PRU cores listed in the 'ti,prus' property + + ti,pruss-gp-mux-sel: + $ref: /schemas/types.yaml#/definitions/uint32-array + minItems: 1 + maxItems: 6 + items: + enum: [0, 1, 2, 3, 4] + description: | + array of values for the GP_MUX_SEL under PRUSS_GPCFG register for a PRU. + This selects the internal muxing scheme for the PRU instance. Values + should correspond to the PRU cores listed in the 'ti,prus' property. The + GP_MUX_SEL setting is a per-slice setting (one setting for PRU0, RTU0, + and Tx_PRU0 on K3 SoCs). Use the same value for all cores within the + same slice in the associative array. If the array size is smaller than + the size of 'ti,prus' property, the default out-of-reset value (0) for the + PRU core is used. + +required: + - ti,prus + +additionalProperties: true From patchwork Fri Dec 16 05:33:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: MD Danish Anwar X-Patchwork-Id: 33860 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp783513wrn; Thu, 15 Dec 2022 21:35:58 -0800 (PST) X-Google-Smtp-Source: AA0mqf7SVD+UxxDKrFpNtknxHvnRXq/rdQM4rROe5tfC3BholpOAs+4JTjL+RoLtqxegQoGTISgV X-Received: by 2002:a17:906:4911:b0:7c0:f71b:8b3 with SMTP id b17-20020a170906491100b007c0f71b08b3mr25737711ejq.57.1671168957857; Thu, 15 Dec 2022 21:35:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671168957; cv=none; d=google.com; s=arc-20160816; b=Fs3Hz3YaG1PK5UTZ9gaFqGco8HaXSOMBKWaKw5Dcb9J5SksMaBMZ2G7qmOHKH9WXWL thtz7EjRPW2ctk6b6yyK+0gQMUcyyRt3DfPCzPTbLoKYSmHFGucvxNYQfNqyZed2syXc T1UL/zxA0dwqYP8jVgg+fHUPhQzIAJ3jOTsdHlVtjlls9SHftkRHkikF0scGnLELIRQs iBLcfn9zq9tRZoqz5eqXFj9Xc0HXTG+sXHMK7g0SBAvc9Uk2LHxbZwObWf+a794erQ3o lox2p6EusmuTBM69pWDkMTdsYYi4S7ycgWvzfFErpTXuRiR0jAo4gaRpNbJ2HoZvQbD9 iJVA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=QpTAIVh7j+hfdk9u9QJfTuSkM1bq1jTgxwTMUXPa/NI=; b=JvXSb5Rzowh5vK28GWR9P+ZcMttxtAgG97VE9zpVpBMEPvbroqJZ3pqaN+tJSLOKeH 1RJd0S6+rJRBQDdTGEv3w82SokyE8beNlCt+763zG/PcPpXMqyjRITy8RQthC2sH4rPe YvA3Ghfg8xtWWF+hJO7CBm/rt36qZi6/cK3CL8G8jhITiikixCPQQrlTqlpAh+N+exsn Kj5Vw0HqUWDBTATRpLeeJmyoC9PuphX2hfyQpF0Li/hXasbY+V2IxAIykfWk6dnuRPVX eJ6pyJlZ5mzf57s3B9Vpl0JS1Cp6F+ey49/vz5fQE1zY4r4fctijfBBiQFAU+3PjkiUS +62g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=hFnkXDJS; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id oz32-20020a1709077da000b007adca6532e3si1564968ejc.229.2022.12.15.21.35.34; Thu, 15 Dec 2022 21:35:57 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=hFnkXDJS; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229926AbiLPFds (ORCPT + 99 others); Fri, 16 Dec 2022 00:33:48 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59710 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229837AbiLPFdi (ORCPT ); Fri, 16 Dec 2022 00:33:38 -0500 Received: from lelv0143.ext.ti.com (lelv0143.ext.ti.com [198.47.23.248]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A99FC54458; Thu, 15 Dec 2022 21:33:34 -0800 (PST) Received: from fllv0034.itg.ti.com ([10.64.40.246]) by lelv0143.ext.ti.com (8.15.2/8.15.2) with ESMTP id 2BG5XKnF010042; Thu, 15 Dec 2022 23:33:20 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1671168800; bh=QpTAIVh7j+hfdk9u9QJfTuSkM1bq1jTgxwTMUXPa/NI=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=hFnkXDJSPZOEelZgmQWZdkGENVIg5dWn4F7wXh6hC4PoVuwGgK+r0EJoH9aRqhAZ9 SdImeVoqe5b6CQzO19RE8dBBaepI3YpPiU9Qdlj5Z1on8IC7dtctErkDCbhLg67Zln DvtcL1f/bG3JBBFat7odq3j2V9bJNiakQzwrXgy4= Received: from DFLE100.ent.ti.com (dfle100.ent.ti.com [10.64.6.21]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 2BG5XK9L113111 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 15 Dec 2022 23:33:20 -0600 Received: from DFLE113.ent.ti.com (10.64.6.34) 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.16; Thu, 15 Dec 2022 23:33:19 -0600 Received: from fllv0039.itg.ti.com (10.64.41.19) 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.16 via Frontend Transport; Thu, 15 Dec 2022 23:33:20 -0600 Received: from lelv0854.itg.ti.com (lelv0854.itg.ti.com [10.181.64.140]) by fllv0039.itg.ti.com (8.15.2/8.15.2) with ESMTP id 2BG5XJlj042469; Thu, 15 Dec 2022 23:33:19 -0600 Received: from localhost (a0501179-pc.dhcp.ti.com [10.24.69.114]) by lelv0854.itg.ti.com (8.14.7/8.14.7) with ESMTP id 2BG5XIvW008921; Thu, 15 Dec 2022 23:33:19 -0600 From: MD Danish Anwar To: Mathieu Poirier , Krzysztof Kozlowski , Rob Herring CC: Suman Anna , Roger Quadros , "Andrew F . Davis" , , , , , , , , MD Danish Anwar Subject: [PATCH v12 2/6] remoteproc: pru: Add enum for PRU Core Identifiers. Date: Fri, 16 Dec 2022 11:03:09 +0530 Message-ID: <20221216053313.2974826-3-danishanwar@ti.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221216053313.2974826-1-danishanwar@ti.com> References: <20221216053313.2974826-1-danishanwar@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752347660791445048?= X-GMAIL-MSGID: =?utf-8?q?1752347660791445048?= Introducing enum pruss_pru_id for PRU Core Identifiers. PRUSS_PRU0 indicates PRU Core 0. PRUSS_PRU1 indicates PRU Core 1. PRUSS_NUM_PRUS indicates the total number of PRU Cores. Signed-off-by: MD Danish Anwar Reviewed-by: Roger Quadros --- drivers/remoteproc/pru_rproc.c | 7 ++++--- include/linux/pruss.h | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 include/linux/pruss.h diff --git a/drivers/remoteproc/pru_rproc.c b/drivers/remoteproc/pru_rproc.c index 128bf9912f2c..a1a208b31846 100644 --- a/drivers/remoteproc/pru_rproc.c +++ b/drivers/remoteproc/pru_rproc.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -438,7 +439,7 @@ static void *pru_d_da_to_va(struct pru_rproc *pru, u32 da, size_t len) dram0 = pruss->mem_regions[PRUSS_MEM_DRAM0]; dram1 = pruss->mem_regions[PRUSS_MEM_DRAM1]; /* PRU1 has its local RAM addresses reversed */ - if (pru->id == 1) + if (pru->id == PRUSS_PRU1) swap(dram0, dram1); shrd_ram = pruss->mem_regions[PRUSS_MEM_SHRD_RAM2]; @@ -747,14 +748,14 @@ static int pru_rproc_set_id(struct pru_rproc *pru) case RTU0_IRAM_ADDR_MASK: fallthrough; case PRU0_IRAM_ADDR_MASK: - pru->id = 0; + pru->id = PRUSS_PRU0; break; case TX_PRU1_IRAM_ADDR_MASK: fallthrough; case RTU1_IRAM_ADDR_MASK: fallthrough; case PRU1_IRAM_ADDR_MASK: - pru->id = 1; + pru->id = PRUSS_PRU1; break; default: ret = -EINVAL; diff --git a/include/linux/pruss.h b/include/linux/pruss.h new file mode 100644 index 000000000000..fbe4fbb45807 --- /dev/null +++ b/include/linux/pruss.h @@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/** + * PRU-ICSS Subsystem user interfaces + * + * Copyright (C) 2015-2022 Texas Instruments Incorporated - http://www.ti.com + * Suman Anna + */ + +#ifndef __LINUX_PRUSS_H +#define __LINUX_PRUSS_H + +#include +#include + +#define PRU_RPROC_DRVNAME "pru-rproc" + +/** + * enum pruss_pru_id - PRU core identifiers + * @PRUSS_PRU0: PRU Core 0. + * @PRUSS_PRU1: PRU Core 1. + * @PRUSS_NUM_PRUS: Total number of PRU Cores available. + * + */ + +enum pruss_pru_id { + PRUSS_PRU0 = 0, + PRUSS_PRU1, + PRUSS_NUM_PRUS, +}; + + +#endif /* __LINUX_PRUSS_H */ \ No newline at end of file From patchwork Fri Dec 16 05:33:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: MD Danish Anwar X-Patchwork-Id: 33865 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp784214wrn; Thu, 15 Dec 2022 21:38:13 -0800 (PST) X-Google-Smtp-Source: AA0mqf698k2Z1q4hcdOlFO7xAyQcUvW7onbkz87EKL8Eujs76HQ7ruySP7uZjjdBIUIH0Fv1Z3dY X-Received: by 2002:a17:902:6901:b0:185:441e:4cfa with SMTP id j1-20020a170902690100b00185441e4cfamr30760532plk.42.1671169093242; Thu, 15 Dec 2022 21:38:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671169093; cv=none; d=google.com; s=arc-20160816; b=k6nh34oIVTPwaSXvbR05ggRvUn1YFah93b2wN7W8HGxVNHZ7pNlsi0HKc8s9NuoP9v 3GYyvV4681p+yZxXGcYnbO3sQ+bAF059jj5wJjMRzfGOUl0antLl06dA3H71bWg9LqLn hCholHZnFr/KQRab58GZEKdHxQmdNcTA7owkW8GmIISTRGwBKNgxxMDzKtiWn07IVIsY z2GVLBs/t5LWsOxpT1x1zIeUzNeH97Mv8fpiKgOpil6Kn4JrD8uy7wiaTAyrNpunWfcj eGjUlaNTEPSiVMSndI3osZDHrL4hc/h/Saycom1EaN4lyehB3lK0+3L2CuvQ954x0uRz s/5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=3X5iSQjkrEbpAD21Eif8EZYEj4D7VaACi1Irdy+JHNM=; b=rOx8ixsCA21g2dxwQcEAzukDod0DPJhDFjjjM/+iwd4ao3qbK7wkEC8sgVv69DaQ9e Vn+mgK6KGP69MluLT/IWWEOMqczqX+MVYeaFN7cNQpALpXAhTywvJ5KQHHeLgUhmgLyb pih8tnsvQc+2H1wV4ZJLsKgx2m48LupPePe1uE7VoncVVzML0NJ60eLXoJ18yVK1y4fU K4w/mjpdhSvaTQs5vgQEpe3Mnc3lCzEWHYe0ENN+CPtcaj09YeXiWHfGXqkJ00+ucBuC orQtAb9g19CtWmqt29McKqOA7/3/4VEwDTFkOtQhjnxKj6FZmhXG42WChyo+kU26MCEQ u22g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=fycCWC8J; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b18-20020a170902d41200b00176b3c7d158si1425112ple.99.2022.12.15.21.38.00; Thu, 15 Dec 2022 21:38:13 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=fycCWC8J; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230002AbiLPFeI (ORCPT + 99 others); Fri, 16 Dec 2022 00:34:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59790 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229904AbiLPFdo (ORCPT ); Fri, 16 Dec 2022 00:33:44 -0500 Received: from fllv0016.ext.ti.com (fllv0016.ext.ti.com [198.47.19.142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 01DA9554D8; Thu, 15 Dec 2022 21:33:42 -0800 (PST) Received: from fllv0034.itg.ti.com ([10.64.40.246]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id 2BG5XMQ1019007; Thu, 15 Dec 2022 23:33:22 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1671168802; bh=3X5iSQjkrEbpAD21Eif8EZYEj4D7VaACi1Irdy+JHNM=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=fycCWC8JatByVJQicylG1pjiAXOXUGmIO5QR/pswtgpQsTnneNplUKyrlfltDMKlG v8GIIxT6LdHx5AVomNPtMs6LgnEvN/7k48aOXzMcCcfBcF66PpTjkS0vPD5zUZzGzF aBqPbr7z+MUinMsVUldYpRgXY6F4Dj+kXLzGrNjY= Received: from DLEE108.ent.ti.com (dlee108.ent.ti.com [157.170.170.38]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 2BG5XM2C113129 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 15 Dec 2022 23:33:22 -0600 Received: from DLEE115.ent.ti.com (157.170.170.26) 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.16; Thu, 15 Dec 2022 23:33:22 -0600 Received: from fllv0039.itg.ti.com (10.64.41.19) 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.16 via Frontend Transport; Thu, 15 Dec 2022 23:33:22 -0600 Received: from lelv0854.itg.ti.com (lelv0854.itg.ti.com [10.181.64.140]) by fllv0039.itg.ti.com (8.15.2/8.15.2) with ESMTP id 2BG5XMhq042489; Thu, 15 Dec 2022 23:33:22 -0600 Received: from localhost (a0501179-pc.dhcp.ti.com [10.24.69.114]) by lelv0854.itg.ti.com (8.14.7/8.14.7) with ESMTP id 2BG5XKJ4008928; Thu, 15 Dec 2022 23:33:21 -0600 From: MD Danish Anwar To: Mathieu Poirier , Krzysztof Kozlowski , Rob Herring CC: Suman Anna , Roger Quadros , "Andrew F . Davis" , , , , , , , , MD Danish Anwar Subject: [PATCH v12 3/6] remoteproc: pru: Add APIs to get and put the PRU cores Date: Fri, 16 Dec 2022 11:03:10 +0530 Message-ID: <20221216053313.2974826-4-danishanwar@ti.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221216053313.2974826-1-danishanwar@ti.com> References: <20221216053313.2974826-1-danishanwar@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752347803098630237?= X-GMAIL-MSGID: =?utf-8?q?1752347803098630237?= Add two new APIs, pru_rproc_get() and pru_rproc_put(), to the PRU driver to allow client drivers to acquire and release the remoteproc device associated with a PRU core. The PRU cores are treated as resources with only one client owning it at a time. The pru_rproc_get() function returns the rproc handle corresponding to a PRU core identified by the device tree "ti,prus" property under the client node. The pru_rproc_put() is the complementary function to pru_rproc_get(). Signed-off-by: Suman Anna Signed-off-by: Tero Kristo Signed-off-by: Grzegorz Jaszczyk Signed-off-by: MD Danish Anwar Reviewed-by: Roger Quadros --- drivers/remoteproc/pru_rproc.c | 128 ++++++++++++++++++++++++++++++++- include/linux/pruss.h | 29 ++++++++ 2 files changed, 155 insertions(+), 2 deletions(-) diff --git a/drivers/remoteproc/pru_rproc.c b/drivers/remoteproc/pru_rproc.c index a1a208b31846..fe4ca1584e91 100644 --- a/drivers/remoteproc/pru_rproc.c +++ b/drivers/remoteproc/pru_rproc.c @@ -2,12 +2,14 @@ /* * PRU-ICSS remoteproc driver for various TI SoCs * - * Copyright (C) 2014-2020 Texas Instruments Incorporated - https://www.ti.com/ + * Copyright (C) 2014-2022 Texas Instruments Incorporated - https://www.ti.com/ * * Author(s): * Suman Anna * Andrew F. Davis * Grzegorz Jaszczyk for Texas Instruments + * Puranjay Mohan + * Md Danish Anwar */ #include @@ -112,6 +114,8 @@ struct pru_private_data { * @rproc: remoteproc pointer for this PRU core * @data: PRU core specific data * @mem_regions: data for each of the PRU memory regions + * @client_np: client device node + * @lock: mutex to protect client usage * @fw_name: name of firmware image used during loading * @mapped_irq: virtual interrupt numbers of created fw specific mapping * @pru_interrupt_map: pointer to interrupt mapping description (firmware) @@ -127,6 +131,8 @@ struct pru_rproc { struct rproc *rproc; const struct pru_private_data *data; struct pruss_mem_region mem_regions[PRU_IOMEM_MAX]; + struct device_node *client_np; + struct mutex lock; const char *fw_name; unsigned int *mapped_irq; struct pru_irq_rsc *pru_interrupt_map; @@ -147,6 +153,120 @@ void pru_control_write_reg(struct pru_rproc *pru, unsigned int reg, u32 val) writel_relaxed(val, pru->mem_regions[PRU_IOMEM_CTRL].va + reg); } +static struct rproc *__pru_rproc_get(struct device_node *np, int index) +{ + struct rproc *rproc; + phandle rproc_phandle; + int ret; + + ret = of_property_read_u32_index(np, "ti,prus", index, &rproc_phandle); + if (ret) + return ERR_PTR(ret); + + rproc = rproc_get_by_phandle(rproc_phandle); + if (!rproc) { + ret = -EPROBE_DEFER; + return ERR_PTR(ret); + } + + /* make sure it is PRU rproc */ + if (!is_pru_rproc(rproc->dev.parent)) { + rproc_put(rproc); + return ERR_PTR(-ENODEV); + } + + return rproc; +} + +/** + * pru_rproc_get() - get the PRU rproc instance from a device node + * @np: the user/client device node + * @index: index to use for the ti,prus property + * @pru_id: optional pointer to return the PRU remoteproc processor id + * + * This function looks through a client device node's "ti,prus" property at + * index @index and returns the rproc handle for a valid PRU remote processor if + * found. The function allows only one user to own the PRU rproc resource at a + * time. Caller must call pru_rproc_put() when done with using the rproc, not + * required if the function returns a failure. + * + * When optional @pru_id pointer is passed the PRU remoteproc processor id is + * returned. + * + * Return: rproc handle on success, and an ERR_PTR on failure using one + * of the following error values + * -ENODEV if device is not found + * -EBUSY if PRU is already acquired by anyone + * -EPROBE_DEFER is PRU device is not probed yet + */ +struct rproc *pru_rproc_get(struct device_node *np, int index, + enum pruss_pru_id *pru_id) +{ + struct rproc *rproc; + struct pru_rproc *pru; + struct device *dev; + int ret; + + rproc = __pru_rproc_get(np, index); + if (IS_ERR(rproc)) + return rproc; + + pru = rproc->priv; + dev = &rproc->dev; + + mutex_lock(&pru->lock); + + if (pru->client_np) { + mutex_unlock(&pru->lock); + ret = -EBUSY; + goto err_no_rproc_handle; + } + + pru->client_np = np; + + mutex_unlock(&pru->lock); + + if (pru_id) + *pru_id = pru->id; + + return rproc; + +err_no_rproc_handle: + rproc_put(rproc); + return ERR_PTR(ret); +} +EXPORT_SYMBOL_GPL(pru_rproc_get); + +/** + * pru_rproc_put() - release the PRU rproc resource + * @rproc: the rproc resource to release + * + * Releases the PRU rproc resource and makes it available to other + * users. + */ +void pru_rproc_put(struct rproc *rproc) +{ + struct pru_rproc *pru; + + if (IS_ERR_OR_NULL(rproc) || !is_pru_rproc(rproc->dev.parent)) + return; + + pru = rproc->priv; + + mutex_lock(&pru->lock); + + if (!pru->client_np) { + mutex_unlock(&pru->lock); + return; + } + + pru->client_np = NULL; + mutex_unlock(&pru->lock); + + rproc_put(rproc); +} +EXPORT_SYMBOL_GPL(pru_rproc_put); + static inline u32 pru_debug_read_reg(struct pru_rproc *pru, unsigned int reg) { return readl_relaxed(pru->mem_regions[PRU_IOMEM_DEBUG].va + reg); @@ -817,6 +937,8 @@ static int pru_rproc_probe(struct platform_device *pdev) pru->pruss = platform_get_drvdata(ppdev); pru->rproc = rproc; pru->fw_name = fw_name; + pru->client_np = NULL; + mutex_init(&pru->lock); for (i = 0; i < ARRAY_SIZE(mem_names); i++) { res = platform_get_resource_byname(pdev, IORESOURCE_MEM, @@ -905,7 +1027,7 @@ MODULE_DEVICE_TABLE(of, pru_rproc_match); static struct platform_driver pru_rproc_driver = { .driver = { - .name = "pru-rproc", + .name = PRU_RPROC_DRVNAME, .of_match_table = pru_rproc_match, .suppress_bind_attrs = true, }, @@ -917,5 +1039,7 @@ module_platform_driver(pru_rproc_driver); MODULE_AUTHOR("Suman Anna "); MODULE_AUTHOR("Andrew F. Davis "); MODULE_AUTHOR("Grzegorz Jaszczyk "); +MODULE_AUTHOR("Puranjay Mohan "); +MODULE_AUTHOR("Md Danish Anwar "); MODULE_DESCRIPTION("PRU-ICSS Remote Processor Driver"); MODULE_LICENSE("GPL v2"); diff --git a/include/linux/pruss.h b/include/linux/pruss.h index fbe4fbb45807..6ea737e995e9 100644 --- a/include/linux/pruss.h +++ b/include/linux/pruss.h @@ -28,5 +28,34 @@ enum pruss_pru_id { PRUSS_NUM_PRUS, }; +struct device_node; + +#if IS_ENABLED(CONFIG_PRU_REMOTEPROC) + +struct rproc *pru_rproc_get(struct device_node *np, int index, + enum pruss_pru_id *pru_id); +void pru_rproc_put(struct rproc *rproc); + +#else + +static inline struct rproc * +pru_rproc_get(struct device_node *np, int index, enum pruss_pru_id *pru_id) +{ + return ERR_PTR(-EOPNOTSUPP); +} + +static inline void pru_rproc_put(struct rproc *rproc) { } + +#endif /* CONFIG_PRU_REMOTEPROC */ + +static inline bool is_pru_rproc(struct device *dev) +{ + const char *drv_name = dev_driver_string(dev); + + if (strncmp(drv_name, PRU_RPROC_DRVNAME, sizeof(PRU_RPROC_DRVNAME))) + return false; + + return true; +} #endif /* __LINUX_PRUSS_H */ \ No newline at end of file From patchwork Fri Dec 16 05:33:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: MD Danish Anwar X-Patchwork-Id: 33864 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp784173wrn; Thu, 15 Dec 2022 21:38:02 -0800 (PST) X-Google-Smtp-Source: AA0mqf454Hp+XUWbJ+/i6vOIXUOa85Gyy1HNc04riz+BHLdLSpE1EmH+M52znYB5x2BAgtOOgzu8 X-Received: by 2002:a05:6a00:8cf:b0:56c:361c:a9af with SMTP id s15-20020a056a0008cf00b0056c361ca9afmr39454969pfu.10.1671169082524; Thu, 15 Dec 2022 21:38:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671169082; cv=none; d=google.com; s=arc-20160816; b=dT+P+8106O/K/ifAS9mNhq2F26uxTBYhLtukBA8Qm66rcVTIBUkpgsxgSDqgAafEPz gXjPxKOUDASRNzsUmzJM0ps0BC9PWhfNzxOEbRHGmPNlbC2T6gpFs9OBJAk6+Zn7BoYi vJKX1SR7zElU6spYrv22S5xI2CZK1AgPC/Jw7dloI38H0ftKwk9ai58u2T5gxsQ7tY+6 MV1jWCopFDpDBkISI1fjPvfJWu/VL6i/oOgdfrtzvsb2CPKGnBK2vtNi0bhCAadrtPyX ZybPTupkndcozBr8n5/Jfb3kP3bmu5yud6zJ8AX02KM9ffvZSUSwnXoZ/6pOoQAEwmKQ fzSA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=3CVAF0YUIn9kWZnuCfApdgCPhBQWukCJOKb27YrfUWI=; b=T3gPnMZKmx0S4/1qKgpqecy34urdcsdVGYw5yyb/MZ/ou1LdYK7i9SWSee4hEinh8y eudWSU7rgf5u1c8DuWif0hsC2kQMJZFq+sxX1oaEVHHZd54+jROl1gGFSGN2Y7/+b4ew prO3CgpRxzmMSbYLR0APiWZ2VcN5btl4c7wmrfr/1UmOEJvt1/m0nFyA07h4E6GCqibk wR377RRTiCPFZker1kblIsU07oJtHTmGLQIqkd0VOG935DcunYPfxNV83n+Dj8FiJJLK 0zDm6zfkEmY6sGrCrnp7SkMDPum3hsRPu8W/fdN9muv2DtPjNd7h8Xr64VDmfT0zRLV+ cFUw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=kqFeiR7i; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b6-20020a056a000cc600b00575757288e4si1512201pfv.90.2022.12.15.21.37.49; Thu, 15 Dec 2022 21:38:02 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=kqFeiR7i; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229988AbiLPFeE (ORCPT + 99 others); Fri, 16 Dec 2022 00:34:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59766 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229846AbiLPFdn (ORCPT ); Fri, 16 Dec 2022 00:33:43 -0500 Received: from fllv0016.ext.ti.com (fllv0016.ext.ti.com [198.47.19.142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C397C554C4; Thu, 15 Dec 2022 21:33:42 -0800 (PST) Received: from lelv0266.itg.ti.com ([10.180.67.225]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id 2BG5XOc9019021; Thu, 15 Dec 2022 23:33:24 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1671168804; bh=3CVAF0YUIn9kWZnuCfApdgCPhBQWukCJOKb27YrfUWI=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=kqFeiR7ionueMlNqu978/NMU0Ep773zU9XA25nodpOl4fk5cKht7BR1AckVpTvGIG ylzmCJiCkQwEnRRtAPeDceIF4ppOhmgm0mhGFm7hJmT/JIhxdcdfVW1g9aVt4rNZI5 uOM130D/oQ0xa25g/LH5WaTvsYd+BDF/Ot5VgxAk= Received: from DFLE100.ent.ti.com (dfle100.ent.ti.com [10.64.6.21]) by lelv0266.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 2BG5XOFD112971 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 15 Dec 2022 23:33:24 -0600 Received: from DFLE112.ent.ti.com (10.64.6.33) 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.16; Thu, 15 Dec 2022 23:33:24 -0600 Received: from fllv0040.itg.ti.com (10.64.41.20) by DFLE112.ent.ti.com (10.64.6.33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.16 via Frontend Transport; Thu, 15 Dec 2022 23:33:24 -0600 Received: from lelv0854.itg.ti.com (lelv0854.itg.ti.com [10.181.64.140]) by fllv0040.itg.ti.com (8.15.2/8.15.2) with ESMTP id 2BG5XOOC074190; Thu, 15 Dec 2022 23:33:24 -0600 Received: from localhost (a0501179-pc.dhcp.ti.com [10.24.69.114]) by lelv0854.itg.ti.com (8.14.7/8.14.7) with ESMTP id 2BG5XNAv008934; Thu, 15 Dec 2022 23:33:24 -0600 From: MD Danish Anwar To: Mathieu Poirier , Krzysztof Kozlowski , Rob Herring CC: Suman Anna , Roger Quadros , "Andrew F . Davis" , , , , , , , , MD Danish Anwar Subject: [PATCH v12 4/6] remoteproc: pru: Make sysfs entries read-only for PRU client driven boots Date: Fri, 16 Dec 2022 11:03:11 +0530 Message-ID: <20221216053313.2974826-5-danishanwar@ti.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221216053313.2974826-1-danishanwar@ti.com> References: <20221216053313.2974826-1-danishanwar@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752347791864001356?= X-GMAIL-MSGID: =?utf-8?q?1752347791864001356?= From: Suman Anna The PRU remoteproc driver is not configured for 'auto-boot' by default, and allows to be booted either by in-kernel PRU client drivers or by userspace using the generic remoteproc sysfs interfaces. The sysfs interfaces should not be permitted to change the remoteproc firmwares or states when a PRU is being managed by an in-kernel client driver. Use the newly introduced remoteproc generic 'sysfs_read_only' flag to provide these restrictions by setting and clearing it appropriately during the PRU acquire and release steps. Signed-off-by: Suman Anna Signed-off-by: Grzegorz Jaszczyk Signed-off-by: MD Danish Anwar Reviewed-by: Roger Quadros --- drivers/remoteproc/pru_rproc.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/remoteproc/pru_rproc.c b/drivers/remoteproc/pru_rproc.c index fe4ca1584e91..8e2fbe392ef3 100644 --- a/drivers/remoteproc/pru_rproc.c +++ b/drivers/remoteproc/pru_rproc.c @@ -223,6 +223,7 @@ struct rproc *pru_rproc_get(struct device_node *np, int index, } pru->client_np = np; + rproc->sysfs_read_only = true; mutex_unlock(&pru->lock); @@ -261,6 +262,7 @@ void pru_rproc_put(struct rproc *rproc) } pru->client_np = NULL; + rproc->sysfs_read_only = false; mutex_unlock(&pru->lock); rproc_put(rproc); From patchwork Fri Dec 16 05:33:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: MD Danish Anwar X-Patchwork-Id: 33862 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp784121wrn; Thu, 15 Dec 2022 21:37:52 -0800 (PST) X-Google-Smtp-Source: AA0mqf7aigF+svW81aQAdkuLaHNB3CWR6w/22ekLMwBC9pEvYYBfhLu76HiuXy7q1+XgS3c7xCFl X-Received: by 2002:a05:6a20:1bd5:b0:ad:7428:d326 with SMTP id cv21-20020a056a201bd500b000ad7428d326mr20132778pzb.30.1671169072159; Thu, 15 Dec 2022 21:37:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671169072; cv=none; d=google.com; s=arc-20160816; b=gyLy6Z0880AqzqST5cwOO3xMycbzrlAX/yXcRfbCh5c3n5gRotU1N+qNgkZP5maN2o d7G177hJRrcNnqXYR/TCIU9r4lQHulEAD5YVXD/QZh9NtD/2mNnq/FquZEhe3QnBFQ5C 4ADp3l8/SSSAOFf+qGUy+j83HLTNYHs6UkVAhUCTMjwGxAbhjtmX1Qan5Bso/yhzedjL BVBy634gNN3gquyBeD/w9/sRtqtKV4Y8cIeE833vP9TvlSyT3h11R966j5sXk1xPpUDG SIU8nSesyLKch2sJUl9TEko+25IWLUUVZxmDsMnmrzji4Wwd7/0d8ykZ576U8J80PjdI P5tA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=yFaP5IPn5vL/pmwNryG4cHnJuxVF33eStZePI0E8Wrw=; b=qRC76yghNLSakI88TqTLapkn/bJVCcijgkecYcFbdjnywsilKq4DOnHWrioVfo1DzK dG2+hfa8OS4vNbMaeB1GMOu52vyd0yCqi28vrmbavfNK2eGkkUk+lMiobidM9aHu4Kvc +gKGLXyWlqzo0YFnS416lrmpo4WQDweQWZoovHQenBQ4wnEYUYnk8GN+1Po5v1g2oDiL ixVrGm9XTF0VzqQ9lMsR4MxVvj+mCTC8aRS0ZaYymT/a7/GlruZMw1BmTvkrVOezxOGr wCU2XPvf7TKmlpAnRZTOzHsH17ufNyHPSV78ngHm5c2hvVGmhRgDzhRXIcAcEQbmfFJc PrUQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=Lqq1Fcvr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 186-20020a6303c3000000b00461bf5f86fdsi1626551pgd.403.2022.12.15.21.37.38; Thu, 15 Dec 2022 21:37:52 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=Lqq1Fcvr; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230018AbiLPFeL (ORCPT + 99 others); Fri, 16 Dec 2022 00:34:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59804 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229908AbiLPFdo (ORCPT ); Fri, 16 Dec 2022 00:33:44 -0500 Received: from fllv0016.ext.ti.com (fllv0016.ext.ti.com [198.47.19.142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 04111554F3; Thu, 15 Dec 2022 21:33:42 -0800 (PST) Received: from fllv0034.itg.ti.com ([10.64.40.246]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id 2BG5XR5G019031; Thu, 15 Dec 2022 23:33:27 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1671168807; bh=yFaP5IPn5vL/pmwNryG4cHnJuxVF33eStZePI0E8Wrw=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=Lqq1FcvraxGs+1YS3CknA9Aq7QiroV7ZDt0bpUPWi/tYePTDYrRbyR0yxZCkXmKaX 1/8DUrfR+KAB604nDXkm7bU9ODKx5ORBSY24ptrRY473zmf3WJa+U/s/Z8NuM1grBW 0FXd2UengQCkSnQoP75DZaLnnnKplqoyIJEhDQuM= Received: from DLEE115.ent.ti.com (dlee115.ent.ti.com [157.170.170.26]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 2BG5XRxf113156 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 15 Dec 2022 23:33:27 -0600 Received: from DLEE108.ent.ti.com (157.170.170.38) 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.16; Thu, 15 Dec 2022 23:33:27 -0600 Received: from lelv0327.itg.ti.com (10.180.67.183) 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.16 via Frontend Transport; Thu, 15 Dec 2022 23:33:26 -0600 Received: from fllv0122.itg.ti.com (fllv0122.itg.ti.com [10.247.120.72]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id 2BG5XR47013280; Thu, 15 Dec 2022 23:33:27 -0600 Received: from localhost (a0501179-pc.dhcp.ti.com [10.24.69.114]) by fllv0122.itg.ti.com (8.14.7/8.14.7) with ESMTP id 2BG5XPgr023208; Thu, 15 Dec 2022 23:33:26 -0600 From: MD Danish Anwar To: Mathieu Poirier , Krzysztof Kozlowski , Rob Herring CC: Suman Anna , Roger Quadros , "Andrew F . Davis" , , , , , , , , MD Danish Anwar Subject: [PATCH v12 5/6] remoteproc: pru: Add pru_rproc_set_ctable() function Date: Fri, 16 Dec 2022 11:03:12 +0530 Message-ID: <20221216053313.2974826-6-danishanwar@ti.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221216053313.2974826-1-danishanwar@ti.com> References: <20221216053313.2974826-1-danishanwar@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752347781216602112?= X-GMAIL-MSGID: =?utf-8?q?1752347781216602112?= From: Roger Quadros Some firmwares expect the OS drivers to configure the CTABLE entries publishing dynamically allocated memory regions. For example, the PRU Ethernet firmwares use the C28 and C30 entries for retrieving the Shared RAM and System SRAM (OCMC) areas allocated by the PRU Ethernet client driver. Provide a way for users to do that through a new API, pru_rproc_set_ctable(). The API returns 0 on success and a negative value on error. NOTE: The programmable CTABLE entries are typically re-programmed by the PRU firmwares when dealing with a certain block of memory during block processing. This API provides an interface to the PRU client drivers to publish a dynamically allocated memory block with the PRU firmware using a CTABLE entry instead of a negotiated address in shared memory. Additional synchronization may be needed between the PRU client drivers and firmwares if different addresses needs to be published at run-time reusing the same CTABLE entry. CTABLE for stands for "constant table". Each CTable entry just holds the upper address bits so PRU can reference to external memory with larger address bits. For use case please see prueth_sw_emac_config() in "drivers/net/ethernet/ti/prueth_switch.c" /* Set in constant table C28 of PRUn to ICSS Shared memory */ pru_rproc_set_ctable(prueth->pru0, PRU_C28, sharedramaddr); pru_rproc_set_ctable(prueth->pru1, PRU_C28, sharedramaddr); /* Set in constant table C30 of PRUn to OCMC memory */ pru_rproc_set_ctable(prueth->pru0, PRU_C30, ocmcaddr); pru_rproc_set_ctable(prueth->pru1, PRU_C30, ocmcaddr); Signed-off-by: Andrew F. Davis Signed-off-by: Suman Anna Signed-off-by: Roger Quadros Signed-off-by: Grzegorz Jaszczyk Signed-off-by: MD Danish Anwar --- drivers/remoteproc/pru_rproc.c | 59 ++++++++++++++++++++++++++++++++++ include/linux/pruss.h | 22 +++++++++++++ 2 files changed, 81 insertions(+) diff --git a/drivers/remoteproc/pru_rproc.c b/drivers/remoteproc/pru_rproc.c index 8e2fbe392ef3..176186882acf 100644 --- a/drivers/remoteproc/pru_rproc.c +++ b/drivers/remoteproc/pru_rproc.c @@ -120,6 +120,7 @@ struct pru_private_data { * @mapped_irq: virtual interrupt numbers of created fw specific mapping * @pru_interrupt_map: pointer to interrupt mapping description (firmware) * @pru_interrupt_map_sz: pru_interrupt_map size + * @rmw_lock: lock for read, modify, write operations on registers * @dbg_single_step: debug state variable to set PRU into single step mode * @dbg_continuous: debug state variable to restore PRU execution mode * @evt_count: number of mapped events @@ -137,6 +138,7 @@ struct pru_rproc { unsigned int *mapped_irq; struct pru_irq_rsc *pru_interrupt_map; size_t pru_interrupt_map_sz; + spinlock_t rmw_lock; u32 dbg_single_step; u32 dbg_continuous; u8 evt_count; @@ -153,6 +155,23 @@ void pru_control_write_reg(struct pru_rproc *pru, unsigned int reg, u32 val) writel_relaxed(val, pru->mem_regions[PRU_IOMEM_CTRL].va + reg); } +static inline +void pru_control_set_reg(struct pru_rproc *pru, unsigned int reg, + u32 mask, u32 set) +{ + u32 val; + unsigned long flags; + + spin_lock_irqsave(&pru->rmw_lock, flags); + + val = pru_control_read_reg(pru, reg); + val &= ~mask; + val |= (set & mask); + pru_control_write_reg(pru, reg, val); + + spin_unlock_irqrestore(&pru->rmw_lock, flags); +} + static struct rproc *__pru_rproc_get(struct device_node *np, int index) { struct rproc *rproc; @@ -269,6 +288,45 @@ void pru_rproc_put(struct rproc *rproc) } EXPORT_SYMBOL_GPL(pru_rproc_put); +/** + * pru_rproc_set_ctable() - set the constant table index for the PRU + * @rproc: the rproc instance of the PRU + * @c: constant table index to set + * @addr: physical address to set it to + * + * Return: 0 on success, or errno in error case. + */ +int pru_rproc_set_ctable(struct rproc *rproc, enum pru_ctable_idx c, u32 addr) +{ + struct pru_rproc *pru = rproc->priv; + unsigned int reg; + u32 mask, set; + u16 idx; + u16 idx_mask; + + if (IS_ERR_OR_NULL(rproc)) + return -EINVAL; + + if (!rproc->dev.parent || !is_pru_rproc(rproc->dev.parent)) + return -ENODEV; + + /* pointer is 16 bit and index is 8-bit so mask out the rest */ + idx_mask = (c >= PRU_C28) ? 0xFFFF : 0xFF; + + /* ctable uses bit 8 and upwards only */ + idx = (addr >> 8) & idx_mask; + + /* configurable ctable (i.e. C24) starts at PRU_CTRL_CTBIR0 */ + reg = PRU_CTRL_CTBIR0 + 4 * (c >> 1); + mask = idx_mask << (16 * (c & 1)); + set = idx << (16 * (c & 1)); + + pru_control_set_reg(pru, reg, mask, set); + + return 0; +} +EXPORT_SYMBOL_GPL(pru_rproc_set_ctable); + static inline u32 pru_debug_read_reg(struct pru_rproc *pru, unsigned int reg) { return readl_relaxed(pru->mem_regions[PRU_IOMEM_DEBUG].va + reg); @@ -940,6 +998,7 @@ static int pru_rproc_probe(struct platform_device *pdev) pru->rproc = rproc; pru->fw_name = fw_name; pru->client_np = NULL; + spin_lock_init(&pru->rmw_lock); mutex_init(&pru->lock); for (i = 0; i < ARRAY_SIZE(mem_names); i++) { diff --git a/include/linux/pruss.h b/include/linux/pruss.h index 6ea737e995e9..a6bc3df92fee 100644 --- a/include/linux/pruss.h +++ b/include/linux/pruss.h @@ -28,13 +28,29 @@ enum pruss_pru_id { PRUSS_NUM_PRUS, }; +/* + * enum pru_ctable_idx - Configurable Constant table index identifiers + */ +enum pru_ctable_idx { + PRU_C24 = 0, + PRU_C25, + PRU_C26, + PRU_C27, + PRU_C28, + PRU_C29, + PRU_C30, + PRU_C31, +}; + struct device_node; +struct rproc; #if IS_ENABLED(CONFIG_PRU_REMOTEPROC) struct rproc *pru_rproc_get(struct device_node *np, int index, enum pruss_pru_id *pru_id); void pru_rproc_put(struct rproc *rproc); +int pru_rproc_set_ctable(struct rproc *rproc, enum pru_ctable_idx c, u32 addr); #else @@ -46,6 +62,12 @@ pru_rproc_get(struct device_node *np, int index, enum pruss_pru_id *pru_id) static inline void pru_rproc_put(struct rproc *rproc) { } +static inline int pru_rproc_set_ctable(struct rproc *rproc, + enum pru_ctable_idx c, u32 addr) +{ + return -EOPNOTSUPP; +} + #endif /* CONFIG_PRU_REMOTEPROC */ static inline bool is_pru_rproc(struct device *dev) From patchwork Fri Dec 16 05:33:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: MD Danish Anwar X-Patchwork-Id: 33863 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp784142wrn; Thu, 15 Dec 2022 21:37:57 -0800 (PST) X-Google-Smtp-Source: AA0mqf5DGoa5fyqK+hKhugyDfJzPVhE2Ao9CLjd2TZ9Hyc6WiVnrJOLBuxavgeEShV+i/fAkgBlK X-Received: by 2002:a17:90a:4a97:b0:213:a9e1:fa89 with SMTP id f23-20020a17090a4a9700b00213a9e1fa89mr31324260pjh.37.1671169076915; Thu, 15 Dec 2022 21:37:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671169076; cv=none; d=google.com; s=arc-20160816; b=sefvT7O8CXBmoX1LNV+W+QxtArF1d83m6x/D5lNQ5CMP+BHi6xDNP27BF5xv9PRVz5 2UUOOcXFC987YSL2qHUqWvoRA2fxHp/pGlvsdU5A4YH1XfzoNfsTzDq70LwBTE4F+wrK GtWa49tiB0lWkLHRJ121RWXaXoCv2p/qaAb+m2STgx6jcyivfuew+K8yBRdp/36yGjJt CzFCOCnBHDJhus1SehwAa02eflh2kw1C808V3nlXi6nX/ieUAaNBwyGiSZ43TBYlCPuo UeFFAcdTYh4xyF+nyx3oYhcjF67vUmcmnPI6PMIF7VtU0bnJKLGRv6QHCithou7kXhR5 YFoQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=qbzCdbRyuvvR8jqC9LmudOVpCjSq86n2tpLu4mzvF2E=; b=v2htESKebvxJWbVPUCGucF28xby/PaG//W/bblq93IcEEkcMxinIUosCK7wRUCxJoR 99hnnKRDFqlt2VQxxf9DrxEzEWm1HgDYwTG/vRkY9hGj4GqWdNkYahcPl7P2IA3UC0bF Y3uSnF15xTwLhqkJzyW5Rpkw5QsHENq/ZiS5pJgVXwZId42cZAfNTxwBYhgZj6Znw8CO 6TzfoegBEFo2VMhovFUI8y+coQCy0mtTbGLPL/dBqdDBqb0M/JqI0iI5NEkHwsYBAD2g JkEe5zH1FUmmE6pSRELB+45zaONqiAyj4XE0gdB1kf1JP/UKYjF+OTgZVjEQIDWIY5Pb Q6Zw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=NS15k0eh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id l8-20020a63ba48000000b00478c46e8f96si1760818pgu.140.2022.12.15.21.37.44; Thu, 15 Dec 2022 21:37:56 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=NS15k0eh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229976AbiLPFeB (ORCPT + 99 others); Fri, 16 Dec 2022 00:34:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59738 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229901AbiLPFdm (ORCPT ); Fri, 16 Dec 2022 00:33:42 -0500 Received: from fllv0016.ext.ti.com (fllv0016.ext.ti.com [198.47.19.142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E0ADC18377; Thu, 15 Dec 2022 21:33:39 -0800 (PST) Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id 2BG5XTUQ019041; Thu, 15 Dec 2022 23:33:29 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1671168809; bh=qbzCdbRyuvvR8jqC9LmudOVpCjSq86n2tpLu4mzvF2E=; h=From:To:CC:Subject:Date:In-Reply-To:References; b=NS15k0ehMhD8MaEwYwRtfjuTpKWUQr87N/klYaQGPH6ZTkckar3p/FB7LPS6KwQur bt4ND3Pe28sDQLczHEAvvBTXjdftM98hN38fMS80qSmUWye0hLXIyxM5juNBR5PoHq 2p2pnH6ifuWjUE4mFIeJNuw9mL04zGEQs5sjV91M= Received: from DLEE112.ent.ti.com (dlee112.ent.ti.com [157.170.170.23]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id 2BG5XTIB076832 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 15 Dec 2022 23:33:29 -0600 Received: from DLEE102.ent.ti.com (157.170.170.32) by DLEE112.ent.ti.com (157.170.170.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2507.16; Thu, 15 Dec 2022 23:33:29 -0600 Received: from lelv0326.itg.ti.com (10.180.67.84) 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.16 via Frontend Transport; Thu, 15 Dec 2022 23:33:29 -0600 Received: from fllv0122.itg.ti.com (fllv0122.itg.ti.com [10.247.120.72]) by lelv0326.itg.ti.com (8.15.2/8.15.2) with ESMTP id 2BG5XT3l018808; Thu, 15 Dec 2022 23:33:29 -0600 Received: from localhost (a0501179-pc.dhcp.ti.com [10.24.69.114]) by fllv0122.itg.ti.com (8.14.7/8.14.7) with ESMTP id 2BG5XSlr023214; Thu, 15 Dec 2022 23:33:28 -0600 From: MD Danish Anwar To: Mathieu Poirier , Krzysztof Kozlowski , Rob Herring CC: Suman Anna , Roger Quadros , "Andrew F . Davis" , , , , , , , , MD Danish Anwar Subject: [PATCH v12 6/6] remoteproc: pru: Configure firmware based on client setup Date: Fri, 16 Dec 2022 11:03:13 +0530 Message-ID: <20221216053313.2974826-7-danishanwar@ti.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221216053313.2974826-1-danishanwar@ti.com> References: <20221216053313.2974826-1-danishanwar@ti.com> MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752347785890475453?= X-GMAIL-MSGID: =?utf-8?q?1752347785890475453?= From: Tero Kristo Client device node property firmware-name is now used to configure firmware for the PRU instances. The default firmware is also restored once releasing the PRU resource. Signed-off-by: Suman Anna Signed-off-by: Tero Kristo Signed-off-by: Grzegorz Jaszczyk Signed-off-by: MD Danish Anwar Reviewed-by: Roger Quadros --- drivers/remoteproc/pru_rproc.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/drivers/remoteproc/pru_rproc.c b/drivers/remoteproc/pru_rproc.c index 176186882acf..cc74786c4a12 100644 --- a/drivers/remoteproc/pru_rproc.c +++ b/drivers/remoteproc/pru_rproc.c @@ -172,6 +172,23 @@ void pru_control_set_reg(struct pru_rproc *pru, unsigned int reg, spin_unlock_irqrestore(&pru->rmw_lock, flags); } +/** + * pru_rproc_set_firmware() - set firmware for a PRU core + * @rproc: the rproc instance of the PRU + * @fw_name: the new firmware name, or NULL if default is desired + * + * Return: 0 on success, or errno in error case. + */ +static int pru_rproc_set_firmware(struct rproc *rproc, const char *fw_name) +{ + struct pru_rproc *pru = rproc->priv; + + if (!fw_name) + fw_name = pru->fw_name; + + return rproc_set_firmware(rproc, fw_name); +} + static struct rproc *__pru_rproc_get(struct device_node *np, int index) { struct rproc *rproc; @@ -224,6 +241,7 @@ struct rproc *pru_rproc_get(struct device_node *np, int index, struct rproc *rproc; struct pru_rproc *pru; struct device *dev; + const char *fw_name; int ret; rproc = __pru_rproc_get(np, index); @@ -249,11 +267,25 @@ struct rproc *pru_rproc_get(struct device_node *np, int index, if (pru_id) *pru_id = pru->id; + ret = of_property_read_string_index(np, "firmware-name", index, + &fw_name); + if (!ret) { + ret = pru_rproc_set_firmware(rproc, fw_name); + if (ret) { + dev_err(dev, "failed to set firmware: %d\n", ret); + goto err; + } + } + return rproc; err_no_rproc_handle: rproc_put(rproc); return ERR_PTR(ret); + +err: + pru_rproc_put(rproc); + return ERR_PTR(ret); } EXPORT_SYMBOL_GPL(pru_rproc_get); @@ -273,6 +305,8 @@ void pru_rproc_put(struct rproc *rproc) pru = rproc->priv; + pru_rproc_set_firmware(rproc, NULL); + mutex_lock(&pru->lock); if (!pru->client_np) {