From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754629AbdCMVya (ORCPT ); Mon, 13 Mar 2017 17:54:30 -0400 Received: from mail.kernel.org ([198.145.29.136]:57998 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754437AbdCMVxy (ORCPT ); Mon, 13 Mar 2017 17:53:54 -0400 From: Alan Tull To: Moritz Fischer Cc: Alan Tull , linux-kernel@vger.kernel.org, linux-fpga@vger.kernel.org Subject: [PATCH 3/5] doc: fpga-mgr: separate getting/locking FPGA manager Date: Mon, 13 Mar 2017 16:53:31 -0500 Message-Id: <20170313215333.3008-4-atull@kernel.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170313215333.3008-1-atull@kernel.org> References: <20170313215333.3008-1-atull@kernel.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Document that getting a reference to a FPGA Manager has been separated from locking the FPGA Mangager for use. fpga_mgr_lock/unlock functions get/release mutex. of_fpga_mgr_get, fpga_mgr_get, and fpga_mgr_put no longer lock the FPGA manager mutex. This makes it more straigtforward to save a reference to a FPGA manager and only attempting to lock it when programming the FPGA. Signed-off-by: Alan Tull Acked-by: Moritz Fischer --- v1: fixed some nits --- Documentation/fpga/fpga-mgr.txt | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/Documentation/fpga/fpga-mgr.txt b/Documentation/fpga/fpga-mgr.txt index 78f197f..0240caf 100644 --- a/Documentation/fpga/fpga-mgr.txt +++ b/Documentation/fpga/fpga-mgr.txt @@ -53,13 +53,26 @@ To get/put a reference to a FPGA manager: struct fpga_manager *of_fpga_mgr_get(struct device_node *node); struct fpga_manager *fpga_mgr_get(struct device *dev); -Given a DT node or device, get an exclusive reference to a FPGA manager. +Given a DT node or device, get a reference to a FPGA manager. This pointer +can be saved until you are ready to program the FPGA. void fpga_mgr_put(struct fpga_manager *mgr); Release the reference. +To get exclusive control of a FPGA manager: +------------------------------------------- + + int fpga_mgr_lock(struct fpga_magager *mgr); + +Call fpga_mgr_lock and verify that it returns 0 before attempting to +program the FPGA. + + void fpga_mgr_unlock(struct fpga_magager *mgr); + +Call fpga_mgr_unlock when done programming the FPGA. + To register or unregister the low level FPGA-specific driver: ------------------------------------------------------------- @@ -95,11 +108,13 @@ int ret; /* Get exclusive control of FPGA manager */ struct fpga_manager *mgr = of_fpga_mgr_get(mgr_node); +ret = fpga_mgr_lock(mgr); /* Load the buffer to the FPGA */ ret = fpga_mgr_buf_load(mgr, &info, buf, count); /* Release the FPGA manager */ +fpga_mgr_unlock(mgr); fpga_mgr_put(mgr); @@ -124,11 +139,13 @@ int ret; /* Get exclusive control of FPGA manager */ struct fpga_manager *mgr = of_fpga_mgr_get(mgr_node); +ret = fpga_mgr_lock(mgr); /* Get the firmware image (path) and load it to the FPGA */ ret = fpga_mgr_firmware_load(mgr, &info, path); /* Release the FPGA manager */ +fpga_mgr_unlock(mgr); fpga_mgr_put(mgr); -- 2.7.4