From: <atull@opensource.altera.com>
To: gregkh@linuxfoundation.org, jgunthorpe@obsidianresearch.com,
hpa@zytor.com, monstr@monstr.eu, michal.simek@xilinx.com,
rdunlap@infradead.org
Cc: mark.rutland@arm.com, linux-doc@vger.kernel.org,
rubini@gnudd.com, pantelis.antoniou@konsulko.com,
s.trumtrar@pengutronix.de, devel@driverdev.osuosl.org,
sameo@linux.intel.com, nico@linaro.org,
ijc+devicetree@hellion.org.uk, kyle.teske@ni.com,
grant.likely@linaro.org, davidb@codeaurora.org,
linus.walleij@linaro.org, cesarb@cesarb.net,
devicetree@vger.kernel.org, jason@lakedaemon.net,
pawel.moll@arm.com, iws@ovro.caltech.edu,
Alan Tull <atull@opensource.altera.com>,
broonie@kernel.org, philip@balister.org,
Petr Cvek <petr.cvek@tul.cz>,
dinguyen@opensource.altera.com, pavel@denx.de,
yvanderv@opensource.altera.com, linux-kernel@vger.kernel.org,
balbi@ti.com, delicious.quinoa@gmail.com, robh+dt@kernel.org,
rob@landley.net, galak@codeaurora.org, akpm@linux-foundation.org,
davem@davemloft.net, m.chehab@samsung.com
Subject: [PATCH v9 1/7] staging: usage documentation for FPGA manager core
Date: Fri, 17 Jul 2015 10:51:11 -0500 [thread overview]
Message-ID: <1437148277-5405-2-git-send-email-atull@opensource.altera.com> (raw)
In-Reply-To: <1437148277-5405-1-git-send-email-atull@opensource.altera.com>
From: Alan Tull <atull@opensource.altera.com>
Add a document on the new FPGA manager core.
Signed-off-by: Alan Tull <atull@opensource.altera.com>
---
drivers/staging/fpga/Documentation/fpga-mgr.txt | 117 +++++++++++++++++++++++
1 file changed, 117 insertions(+)
create mode 100644 drivers/staging/fpga/Documentation/fpga-mgr.txt
diff --git a/drivers/staging/fpga/Documentation/fpga-mgr.txt b/drivers/staging/fpga/Documentation/fpga-mgr.txt
new file mode 100644
index 0000000..b5b6ed4
--- /dev/null
+++ b/drivers/staging/fpga/Documentation/fpga-mgr.txt
@@ -0,0 +1,117 @@
+ FPGA Manager Core
+
+ Alan Tull 2015
+
+ Overview
+ --------
+The FPGA manager core exports a set of functions for programming an image to a
+FPGA. All manufacturor specifics are hidden away in a low level driver. The
+API is manufacturor agnostic. Of course the FPGA image data itself is very
+manufacturor specific but for our purposes it's just data in a buffer or file
+or something. The FPGA manager core won't parse it or know anything about it.
+
+
+ Files
+ -----
+drivers/staging/fpga/fpga-mgr.c
+include/linux/fpga/fpga-mgr.h
+
+
+ The API Functions
+ ----------------
+The API that is exported is currently 6 functions:
+
+ int fpga_mgr_buf_load(struct fpga_manager *mgr,
+ u32 flags,
+ const char *buf,
+ size_t count);
+
+An FPGA image exists as a buffer in memory. Load it into the FPGA. The FPGA
+ends up in operating mode or return a negative error code.
+
+ int fpga_mgr_firmware_load(struct fpga_manager *mgr,
+ u32 flags,
+ const char *image_name);
+
+An FPGA image exists as a file that is on the firmware search path (see the
+firmware class documentation). Load as above.
+
+ struct fpga_manager *of_fpga_mgr_get(struct device_node *node);
+
+Given a DT node, get a reference to a fpga manager.
+
+ void fpga_mgr_put(struct fpga_manager *mgr);
+
+Release the reference to the fpga manager.
+
+ int fpga_mgr_register(struct device *dev,
+ const char *name,
+ const struct fpga_manager_ops *mops,
+ void *priv);
+ void fpga_mgr_unregister(struct device *dev);
+
+Register/unregister the lower level device specific driver.
+
+
+ How To Write an Image Buffer to a supported FPGA
+ ------------------------------------------------
+/* device node that specifies the fpga manager to use */
+struct device_node *mgr_node;
+
+/* FPGA image is in this buffer. count is size of buf. */
+char *buf;
+int count;
+int ret;
+
+struct fpga_manager *mgr = of_fpga_mgr_get(mgr_node);
+ret = fpga_mgr_buf_load(mgr, flags, buf, count);
+fpga_mgr_put(mgr);
+
+
+ How To Write an Image File to a supported FPGA
+ ------------------------------------------------
+/* device node that specifies the fpga manager to use */
+struct device_node *mgr_node;
+
+/* FPGA image is in this buffer. count is size of buf. */
+const char *path = "fpga-image-9.rbf"
+int ret;
+
+struct fpga_manager *mgr = of_fpga_mgr_get(mgr_node);
+ret = fpga_mgr_firmware_load(mgr, flags, path);
+fpga_mgr_put(mgr);
+
+
+ How To Support a new FPGA device
+ --------------------------------
+To add another fpga manager, look at the bottom part of socfpga.c for an
+example, starting with the declaration of socfpga_fpga_ops.
+
+static const struct fpga_manager_ops socfpga_fpga_ops = {
+ .write_init = socfpga_fpga_ops_configure_init,
+ .write = socfpga_fpga_ops_configure_write,
+ .write_complete = socfpga_fpga_ops_configure_complete,
+ .state = socfpga_fpga_ops_state,
+};
+
+You will want to create a platform driver that has a set of ops like that
+and then register it with fpga_mgr_register in your probe function. Your
+ops will implement whatever device specific register writes needed and
+will return negative error codes if things don't go well.
+
+The programming seqence is:
+ 1. .write_init
+ 2. .write (may be called once or multiple times)
+ 3. .write_complete
+
+The .write_init function will prepare the FPGA to receive the image data.
+
+The .write function receives an image buffer or a chunk of the image and
+writes it the FPGA. The buffer may arrive as one chunk or a bunck of
+small chunks through this function being called multiple times.
+
+The .write_complete function is called after all the image has been written
+to put the FPGA into operating mode.
+
+The .state function will read your hardware and return a code of type
+"enum fpga_mgr_states". It doesn't result in a change in hardware state.
--
1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: <atull@opensource.altera.com>
To: <gregkh@linuxfoundation.org>, <jgunthorpe@obsidianresearch.com>,
<hpa@zytor.com>, <monstr@monstr.eu>, <michal.simek@xilinx.com>,
<rdunlap@infradead.org>
Cc: <linux-kernel@vger.kernel.org>, <devicetree@vger.kernel.org>,
<pantelis.antoniou@konsulko.com>, <robh+dt@kernel.org>,
<grant.likely@linaro.org>, <iws@ovro.caltech.edu>,
<linux-doc@vger.kernel.org>, <pavel@denx.de>,
<broonie@kernel.org>, <philip@balister.org>, <rubini@gnudd.com>,
<s.trumtrar@pengutronix.de>, <jason@lakedaemon.net>,
<kyle.teske@ni.com>, <nico@linaro.org>, <balbi@ti.com>,
<m.chehab@samsung.com>, <davidb@codeaurora.org>,
<rob@landley.net>, <davem@davemloft.net>, <cesarb@cesarb.net>,
<sameo@linux.intel.com>, <akpm@linux-foundation.org>,
<linus.walleij@linaro.org>, <pawel.moll@arm.com>,
<mark.rutland@arm.com>, <ijc+devicetree@hellion.org.uk>,
<galak@codeaurora.org>, <devel@driverdev.osuosl.org>,
Petr Cvek <petr.cvek@tul.cz>, <delicious.quinoa@gmail.com>,
<dinguyen@opensource.altera.com>,
<yvanderv@opensource.altera.com>,
Alan Tull <atull@opensource.altera.com>
Subject: [PATCH v9 1/7] staging: usage documentation for FPGA manager core
Date: Fri, 17 Jul 2015 10:51:11 -0500 [thread overview]
Message-ID: <1437148277-5405-2-git-send-email-atull@opensource.altera.com> (raw)
In-Reply-To: <1437148277-5405-1-git-send-email-atull@opensource.altera.com>
From: Alan Tull <atull@opensource.altera.com>
Add a document on the new FPGA manager core.
Signed-off-by: Alan Tull <atull@opensource.altera.com>
---
drivers/staging/fpga/Documentation/fpga-mgr.txt | 117 +++++++++++++++++++++++
1 file changed, 117 insertions(+)
create mode 100644 drivers/staging/fpga/Documentation/fpga-mgr.txt
diff --git a/drivers/staging/fpga/Documentation/fpga-mgr.txt b/drivers/staging/fpga/Documentation/fpga-mgr.txt
new file mode 100644
index 0000000..b5b6ed4
--- /dev/null
+++ b/drivers/staging/fpga/Documentation/fpga-mgr.txt
@@ -0,0 +1,117 @@
+ FPGA Manager Core
+
+ Alan Tull 2015
+
+ Overview
+ --------
+The FPGA manager core exports a set of functions for programming an image to a
+FPGA. All manufacturor specifics are hidden away in a low level driver. The
+API is manufacturor agnostic. Of course the FPGA image data itself is very
+manufacturor specific but for our purposes it's just data in a buffer or file
+or something. The FPGA manager core won't parse it or know anything about it.
+
+
+ Files
+ -----
+drivers/staging/fpga/fpga-mgr.c
+include/linux/fpga/fpga-mgr.h
+
+
+ The API Functions
+ ----------------
+The API that is exported is currently 6 functions:
+
+ int fpga_mgr_buf_load(struct fpga_manager *mgr,
+ u32 flags,
+ const char *buf,
+ size_t count);
+
+An FPGA image exists as a buffer in memory. Load it into the FPGA. The FPGA
+ends up in operating mode or return a negative error code.
+
+ int fpga_mgr_firmware_load(struct fpga_manager *mgr,
+ u32 flags,
+ const char *image_name);
+
+An FPGA image exists as a file that is on the firmware search path (see the
+firmware class documentation). Load as above.
+
+ struct fpga_manager *of_fpga_mgr_get(struct device_node *node);
+
+Given a DT node, get a reference to a fpga manager.
+
+ void fpga_mgr_put(struct fpga_manager *mgr);
+
+Release the reference to the fpga manager.
+
+ int fpga_mgr_register(struct device *dev,
+ const char *name,
+ const struct fpga_manager_ops *mops,
+ void *priv);
+ void fpga_mgr_unregister(struct device *dev);
+
+Register/unregister the lower level device specific driver.
+
+
+ How To Write an Image Buffer to a supported FPGA
+ ------------------------------------------------
+/* device node that specifies the fpga manager to use */
+struct device_node *mgr_node;
+
+/* FPGA image is in this buffer. count is size of buf. */
+char *buf;
+int count;
+int ret;
+
+struct fpga_manager *mgr = of_fpga_mgr_get(mgr_node);
+ret = fpga_mgr_buf_load(mgr, flags, buf, count);
+fpga_mgr_put(mgr);
+
+
+ How To Write an Image File to a supported FPGA
+ ------------------------------------------------
+/* device node that specifies the fpga manager to use */
+struct device_node *mgr_node;
+
+/* FPGA image is in this buffer. count is size of buf. */
+const char *path = "fpga-image-9.rbf"
+int ret;
+
+struct fpga_manager *mgr = of_fpga_mgr_get(mgr_node);
+ret = fpga_mgr_firmware_load(mgr, flags, path);
+fpga_mgr_put(mgr);
+
+
+ How To Support a new FPGA device
+ --------------------------------
+To add another fpga manager, look at the bottom part of socfpga.c for an
+example, starting with the declaration of socfpga_fpga_ops.
+
+static const struct fpga_manager_ops socfpga_fpga_ops = {
+ .write_init = socfpga_fpga_ops_configure_init,
+ .write = socfpga_fpga_ops_configure_write,
+ .write_complete = socfpga_fpga_ops_configure_complete,
+ .state = socfpga_fpga_ops_state,
+};
+
+You will want to create a platform driver that has a set of ops like that
+and then register it with fpga_mgr_register in your probe function. Your
+ops will implement whatever device specific register writes needed and
+will return negative error codes if things don't go well.
+
+The programming seqence is:
+ 1. .write_init
+ 2. .write (may be called once or multiple times)
+ 3. .write_complete
+
+The .write_init function will prepare the FPGA to receive the image data.
+
+The .write function receives an image buffer or a chunk of the image and
+writes it the FPGA. The buffer may arrive as one chunk or a bunck of
+small chunks through this function being called multiple times.
+
+The .write_complete function is called after all the image has been written
+to put the FPGA into operating mode.
+
+The .state function will read your hardware and return a code of type
+"enum fpga_mgr_states". It doesn't result in a change in hardware state.
--
1.7.9.5
next prev parent reply other threads:[~2015-07-17 15:51 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-17 15:51 [PATCH v9 0/7] FPGA Manager Framework and Simple FPGA Bus atull
2015-07-17 15:51 ` atull
2015-07-17 15:51 ` atull [this message]
2015-07-17 15:51 ` [PATCH v9 1/7] staging: usage documentation for FPGA manager core atull
2015-07-23 6:38 ` Pavel Machek
2015-07-23 6:38 ` Pavel Machek
2015-07-17 15:51 ` [PATCH v9 2/7] staging: usage documentation for simple fpga bus atull
2015-07-17 15:51 ` atull
2015-07-23 6:43 ` Pavel Machek
2015-07-23 6:43 ` Pavel Machek
2015-07-17 15:51 ` [PATCH v9 3/7] staging: add bindings document " atull
2015-07-17 15:51 ` atull
2015-07-17 19:49 ` Steffen Trumtrar
2015-07-17 19:49 ` Steffen Trumtrar
2015-07-17 21:21 ` Jason Gunthorpe
2015-07-17 21:21 ` Jason Gunthorpe
2015-07-17 21:22 ` atull
2015-07-17 21:22 ` atull
2015-07-23 7:31 ` Steffen Trumtrar
2015-07-23 7:31 ` Steffen Trumtrar
2015-07-23 6:46 ` Pavel Machek
2015-07-23 6:46 ` Pavel Machek
2015-07-17 15:51 ` [PATCH v9 4/7] staging: fpga manager: add sysfs interface document atull
2015-07-17 15:51 ` atull
2015-07-24 8:18 ` Pavel Machek
2015-07-24 8:18 ` Pavel Machek
2015-07-24 12:39 ` atull
2015-07-24 12:39 ` atull
2015-07-24 12:43 ` Pavel Machek
2015-07-24 12:43 ` Pavel Machek
2015-07-17 15:51 ` [PATCH v9 5/7] staging: fpga manager core atull
2015-07-17 15:51 ` atull
2015-07-17 17:27 ` Randy Dunlap
2015-07-17 17:27 ` Randy Dunlap
2015-07-17 18:25 ` atull
2015-07-17 18:25 ` atull
2015-07-22 21:47 ` Moritz Fischer
2015-07-22 21:47 ` Moritz Fischer
2015-07-23 16:28 ` atull
2015-07-23 16:28 ` atull
2015-07-17 15:51 ` [PATCH v9 6/7] staging: add simple-fpga-bus atull
2015-07-17 15:51 ` atull
2015-07-23 21:55 ` Moritz Fischer
2015-07-23 21:55 ` Moritz Fischer
2015-07-23 22:15 ` Jason Gunthorpe
2015-07-23 22:15 ` Jason Gunthorpe
2015-07-24 3:42 ` atull
2015-07-24 3:42 ` atull
2015-07-17 15:51 ` [PATCH v9 7/7] staging: fpga manager: add driver for socfpga fpga manager atull
2015-07-17 15:51 ` atull
2015-07-17 21:06 ` Moritz Fischer
2015-07-17 21:06 ` Moritz Fischer
2015-07-17 21:42 ` atull
2015-07-17 21:42 ` atull
2015-07-17 17:25 ` [PATCH v9 0/7] FPGA Manager Framework and Simple FPGA Bus Jason Gunthorpe
2015-07-17 17:25 ` Jason Gunthorpe
2015-07-17 18:09 ` atull
2015-07-17 18:09 ` atull
2015-07-22 20:32 ` atull
2015-07-22 20:32 ` atull
2015-07-22 21:11 ` Jason Gunthorpe
2015-07-22 21:39 ` atull
2015-07-22 21:39 ` atull
2015-07-23 4:12 ` Greg KH
2015-07-23 4:12 ` Greg KH
2015-07-23 16:37 ` atull
2015-07-23 16:37 ` atull
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1437148277-5405-2-git-send-email-atull@opensource.altera.com \
--to=atull@opensource.altera.com \
--cc=akpm@linux-foundation.org \
--cc=balbi@ti.com \
--cc=broonie@kernel.org \
--cc=cesarb@cesarb.net \
--cc=davem@davemloft.net \
--cc=davidb@codeaurora.org \
--cc=delicious.quinoa@gmail.com \
--cc=devel@driverdev.osuosl.org \
--cc=devicetree@vger.kernel.org \
--cc=dinguyen@opensource.altera.com \
--cc=galak@codeaurora.org \
--cc=grant.likely@linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=hpa@zytor.com \
--cc=ijc+devicetree@hellion.org.uk \
--cc=iws@ovro.caltech.edu \
--cc=jason@lakedaemon.net \
--cc=jgunthorpe@obsidianresearch.com \
--cc=kyle.teske@ni.com \
--cc=linus.walleij@linaro.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=m.chehab@samsung.com \
--cc=mark.rutland@arm.com \
--cc=michal.simek@xilinx.com \
--cc=monstr@monstr.eu \
--cc=nico@linaro.org \
--cc=pantelis.antoniou@konsulko.com \
--cc=pavel@denx.de \
--cc=pawel.moll@arm.com \
--cc=petr.cvek@tul.cz \
--cc=philip@balister.org \
--cc=rdunlap@infradead.org \
--cc=rob@landley.net \
--cc=robh+dt@kernel.org \
--cc=rubini@gnudd.com \
--cc=s.trumtrar@pengutronix.de \
--cc=sameo@linux.intel.com \
--cc=yvanderv@opensource.altera.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.