From: stillcompiling@gmail.com (Joshua Clayton)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH fpga 9/9] fpga: Remove support for non-sg drivers
Date: Thu, 10 Nov 2016 07:22:33 -0800 [thread overview]
Message-ID: <bad801c5-fe3a-665b-de67-bf69c42fb2b4@gmail.com> (raw)
In-Reply-To: <1478732303-13718-10-git-send-email-jgunthorpe@obsidianresearch.com>
Hi Jason,
On 11/09/2016 02:58 PM, Jason Gunthorpe wrote:
> All drivers now use the sg interface so there is no reason to keep
> the contiguous interface any more.
>
> Now that all drivers support this interface we can also export it.
>
> Signed-off-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
> ---
> drivers/fpga/fpga-mgr.c | 62 +++++++------------------------------------
> include/linux/fpga/fpga-mgr.h | 7 ++---
> 2 files changed, 11 insertions(+), 58 deletions(-)
>
> diff --git a/drivers/fpga/fpga-mgr.c b/drivers/fpga/fpga-mgr.c
> index c2491ffeabd3..4ba22925d9d5 100644
> --- a/drivers/fpga/fpga-mgr.c
> +++ b/drivers/fpga/fpga-mgr.c
> @@ -47,8 +47,8 @@ static struct class *fpga_mgr_class;
> *
> * Return: 0 on success, negative error code otherwise.
> */
> -static int fpga_mgr_buf_load_sg(struct fpga_manager *mgr, u32 flags,
> - struct sg_table *sgt)
> +int fpga_mgr_buf_load_sg(struct fpga_manager *mgr, u32 flags,
> + struct sg_table *sgt)
> {
> struct device *dev = &mgr->dev;
> int ret;
> @@ -92,52 +92,7 @@ static int fpga_mgr_buf_load_sg(struct fpga_manager *mgr, u32 flags,
>
> return 0;
> }
> -
> -static int fpga_mgr_buf_load_mapped(struct fpga_manager *mgr, u32 flags,
> - const char *buf, size_t count)
> -{
> - struct device *dev = &mgr->dev;
> - int ret;
> -
> - /*
> - * Call the low level driver's write_init function. This will do the
> - * device-specific things to get the FPGA into the state where it is
> - * ready to receive an FPGA image.
> - */
> - mgr->state = FPGA_MGR_STATE_WRITE_INIT;
> - ret = mgr->mops->write_init(mgr, flags, buf, count);
> - if (ret) {
> - dev_err(dev, "Error preparing FPGA for writing\n");
> - mgr->state = FPGA_MGR_STATE_WRITE_INIT_ERR;
> - return ret;
> - }
> -
> - /*
> - * Write the FPGA image to the FPGA.
> - */
> - mgr->state = FPGA_MGR_STATE_WRITE;
> - ret = mgr->mops->write(mgr, buf, count);
> - if (ret) {
> - dev_err(dev, "Error while writing image data to FPGA\n");
> - mgr->state = FPGA_MGR_STATE_WRITE_ERR;
> - return ret;
> - }
> -
> - /*
> - * After all the FPGA image has been written, do the device specific
> - * steps to finish and set the FPGA into operating mode.
> - */
> - mgr->state = FPGA_MGR_STATE_WRITE_COMPLETE;
> - ret = mgr->mops->write_complete(mgr, flags);
> - if (ret) {
> - dev_err(dev, "Error after writing image data to FPGA\n");
> - mgr->state = FPGA_MGR_STATE_WRITE_COMPLETE_ERR;
> - return ret;
> - }
> - mgr->state = FPGA_MGR_STATE_OPERATING;
> -
> - return 0;
> -}
> +EXPORT_SYMBOL_GPL(fpga_mgr_buf_load_sg);
>
> /**
> * fpga_mgr_buf_load - load fpga from image in buffer
> @@ -163,9 +118,6 @@ int fpga_mgr_buf_load(struct fpga_manager *mgr, u32 flags, const char *buf,
> int index;
> int rc;
>
> - if (!mgr->mops->write_init_sg || !mgr->mops->write_sg)
> - return fpga_mgr_buf_load_mapped(mgr, flags, buf, count);
> -
> /*
> * Convert the linear kernel pointer into a sg_table of pages for use
> * by the driver.
> @@ -226,6 +178,11 @@ int fpga_mgr_firmware_load(struct fpga_manager *mgr, u32 flags,
>
> mgr->state = FPGA_MGR_STATE_FIRMWARE_REQ;
>
> + /*
> + * FIXME: We do not need a vmap, just a page list, but
> + * request_firmware has no way to give us that, so this needlessly
> + * consumes vmalloc space.
> + */
> ret = request_firmware(&fw, image_name, dev);
> if (ret) {
> mgr->state = FPGA_MGR_STATE_FIRMWARE_REQ_ERR;
> @@ -369,8 +326,7 @@ int fpga_mgr_register(struct device *dev, const char *name,
> int id, ret;
>
> if (!mops || !mops->write_complete || !mops->state ||
> - ((!mops->write_init || !mops->write) &&
> - (!mops->write_init_sg || !mops->write_sg))) {
> + !mops->write_init_sg || !mops->write_sg) {
> dev_err(dev, "Attempt to register without fpga_manager_ops\n");
> return -EINVAL;
> }
> diff --git a/include/linux/fpga/fpga-mgr.h b/include/linux/fpga/fpga-mgr.h
> index 371b30ea60eb..5c698c8fe71b 100644
> --- a/include/linux/fpga/fpga-mgr.h
> +++ b/include/linux/fpga/fpga-mgr.h
> @@ -72,8 +72,6 @@ enum fpga_mgr_states {
> /**
> * struct fpga_manager_ops - ops for low level fpga manager drivers
> * @state: returns an enum value of the FPGA's state
> - * @write_init: prepare the FPGA to receive confuration data (linear memory)
> - * @write: write count bytes of configuration data to the FPGA
> * @write_init_sg: prepare the FPGA to receive confuration data (scatter list
> * table)
> * @write_sg: write count bytes of configuration data to the FPGA
> @@ -86,9 +84,6 @@ enum fpga_mgr_states {
> */
> struct fpga_manager_ops {
> enum fpga_mgr_states (*state)(struct fpga_manager *mgr);
> - int (*write_init)(struct fpga_manager *mgr, u32 flags,
> - const char *buf, size_t count);
> - int (*write)(struct fpga_manager *mgr, const char *buf, size_t count);
> int (*write_init_sg)(struct fpga_manager *mgr, u32 flags,
> struct sg_table *sgt);
> int (*write_sg)(struct fpga_manager *mgr, struct sg_table *sgt);
> @@ -118,6 +113,8 @@ struct fpga_manager {
>
> int fpga_mgr_buf_load(struct fpga_manager *mgr, u32 flags,
> const char *buf, size_t count);
> +int fpga_mgr_buf_load_sg(struct fpga_manager *mgr, u32 flags,
> + struct sg_table *sgt);
>
> int fpga_mgr_firmware_load(struct fpga_manager *mgr, u32 flags,
> const char *image_name);
I don't have any feeling either way about switching to scatter-gather.
(Not zynq or socfpga user)
But I do object to renaming the API.
write_init() and write() do not imply a particular implementation, nor even that
the buffer is coherent.
I am working to merge an fpga manager which uses SPI to load the bitstream
(see https://www.spinics.net/lists/arm-kernel/msg539328.html)
Any dma in use there would come from the spi driver. write_init_sg, and write_sg
don't make any sense in my case.
Would it not make sense to keep the top level API the same?
Thanks, Joshua.
next prev parent reply other threads:[~2016-11-10 15:22 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-09 22:58 [PATCH fpga 0/9] Zynq FPGA Manager Improvements Jason Gunthorpe
2016-11-09 22:58 ` [PATCH fpga 1/9] fpga zynq: Add missing \n to messages Jason Gunthorpe
2016-11-15 11:05 ` Matthias Brugger
2016-11-15 18:08 ` Jason Gunthorpe
2016-11-16 18:39 ` Moritz Fischer
2016-11-16 20:17 ` Jason Gunthorpe
2016-11-16 22:28 ` atull
2016-11-16 22:43 ` Moritz Fischer
2016-11-16 23:55 ` Jason Gunthorpe
2016-11-17 11:32 ` Matthias Brugger
2016-11-09 22:58 ` [PATCH fpga 2/9] fpga zynq: Check the bitstream for validity Jason Gunthorpe
2016-11-10 0:04 ` Joshua Clayton
2016-11-10 4:58 ` Jason Gunthorpe
2016-11-09 22:58 ` [PATCH fpga 3/9] fpga zynq: Fix incorrect ISR state on bootup Jason Gunthorpe
2016-11-11 0:44 ` Moritz Fischer
2016-11-11 0:53 ` Jason Gunthorpe
2016-11-09 22:58 ` [PATCH fpga 4/9] fpga zynq: Check for errors after completing DMA Jason Gunthorpe
2016-11-17 6:10 ` Moritz Fischer
2016-11-17 18:28 ` Jason Gunthorpe
2016-11-09 22:58 ` [PATCH fpga 5/9] fpga zynq: Remove priv->dev Jason Gunthorpe
2016-11-14 15:13 ` atull
2016-11-14 17:20 ` Moritz Fischer
2016-11-14 23:04 ` Jason Gunthorpe
2016-11-17 18:00 ` Moritz Fischer
2016-11-09 22:58 ` [PATCH fpga 6/9] fpga: Add scatterlist based write ops to the driver ops Jason Gunthorpe
2016-11-09 22:58 ` [PATCH fpga 7/9] fpga zynq: Use the scatterlist interface Jason Gunthorpe
2016-11-09 22:58 ` [PATCH fpga 8/9] fpga socfpga: " Jason Gunthorpe
2016-11-13 23:19 ` atull
2016-11-14 0:18 ` Jason Gunthorpe
2016-11-14 4:02 ` atull
2016-11-15 4:35 ` Jason Gunthorpe
2016-11-15 15:47 ` atull
2016-11-16 5:20 ` Jason Gunthorpe
2016-11-16 15:45 ` atull
2016-11-16 20:23 ` Jason Gunthorpe
2016-11-17 19:54 ` atull
2016-11-17 20:35 ` atull
2016-11-09 22:58 ` [PATCH fpga 9/9] fpga: Remove support for non-sg drivers Jason Gunthorpe
2016-11-10 15:22 ` Joshua Clayton [this message]
2016-11-10 16:33 ` Jason Gunthorpe
2016-11-10 22:07 ` Joshua Clayton
2016-11-13 20:44 ` atull
2016-11-13 22:13 ` Jason Gunthorpe
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=bad801c5-fe3a-665b-de67-bf69c42fb2b4@gmail.com \
--to=stillcompiling@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).