linux-api.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Wu Hao <hao.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: Moritz Fischer <mdf-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: atull-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	linux-fpga-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	luwei.kang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org,
	yi.z.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org,
	Tim Whisonant
	<tim.whisonant-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	Enno Luebbers
	<enno.luebbers-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	Shiva Rao <shiva.rao-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	Christopher Rauer
	<christopher.rauer-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	Xiao Guangrong
	<guangrong.xiao-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
Subject: Re: [PATCH v2 15/22] fpga: intel: add fpga manager platform driver for FME
Date: Wed, 27 Sep 2017 09:18:53 +0800	[thread overview]
Message-ID: <20170927011853.GA8185@hao-dev> (raw)
In-Reply-To: <20170925212457.GB14795-KFgJe6S/L2nknyRNNOXSQ2IaLvZF3x2V0E9HWUfgJXw@public.gmane.org>

On Mon, Sep 25, 2017 at 02:24:57PM -0700, Moritz Fischer wrote:
> Hi Hao,

Hi Moritz

Thanks for your review. :)

> 
> On Mon, Jun 26, 2017 at 09:52:11AM +0800, Wu Hao wrote:
> > This patch adds fpga manager driver for Intel FPGA Management
> > Engine(FME). It implements fpga_manager_ops for FPGA Partial
> > Reconfiguration function.
> > 
> > Signed-off-by: Tim Whisonant <tim.whisonant-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> > Signed-off-by: Enno Luebbers <enno.luebbers-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> > Signed-off-by: Shiva Rao <shiva.rao-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> > Signed-off-by: Christopher Rauer <christopher.rauer-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> > Signed-off-by: Kang Luwei <luwei.kang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> > Signed-off-by: Xiao Guangrong <guangrong.xiao-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
> > Signed-off-by: Wu Hao <hao.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> > ---
> >  .../ABI/testing/sysfs-platform-intel-fpga-fme-mgr  |   8 +
> >  drivers/fpga/Kconfig                               |   7 +
> >  drivers/fpga/Makefile                              |   1 +
> >  drivers/fpga/intel-feature-dev.h                   |  75 +++++
> >  drivers/fpga/intel-fpga-fme-mgr.c                  | 307 +++++++++++++++++++++
> >  5 files changed, 398 insertions(+)
> >  create mode 100644 Documentation/ABI/testing/sysfs-platform-intel-fpga-fme-mgr
> >  create mode 100644 drivers/fpga/intel-fpga-fme-mgr.c
> > 
> > diff --git a/Documentation/ABI/testing/sysfs-platform-intel-fpga-fme-mgr b/Documentation/ABI/testing/sysfs-platform-intel-fpga-fme-mgr
> > new file mode 100644
> > index 0000000..40771fb
> > --- /dev/null
> > +++ b/Documentation/ABI/testing/sysfs-platform-intel-fpga-fme-mgr
> > @@ -0,0 +1,8 @@
> > +What:		/sys/bus/platform/devices/intel-fpga-fme-mgr.0/interface_id
> > +Date:		June 2017
> > +KernelVersion:  4.12
> > +Contact:	Wu Hao <hao.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> > +Description:	Read-only. It returns interface id of partial reconfiguration
> > +		hardware. Userspace could use this information to check if
> > +		current hardware is compatible with given image before FPGA
> > +		programming.
> > diff --git a/drivers/fpga/Kconfig b/drivers/fpga/Kconfig
> > index b91458f..6f2f623 100644
> > --- a/drivers/fpga/Kconfig
> > +++ b/drivers/fpga/Kconfig
> > @@ -151,6 +151,13 @@ config INTEL_FPGA_FME
> >  	  all FPGA platform level management features. There shall be 1
> >  	  FME per Intel FPGA.
> >  
> > +config INTEL_FPGA_FME_MGR
> > +	tristate "Intel FPGA FME Manager Driver"
> > +	depends on INTEL_FPGA_FME
> > +	help
> > +	  Say Y to enable FPGA Manager driver for Intel FPGA Management
> > +	  Engine.
> > +
> >  endif
> >  
> >  endif # FPGA
> > diff --git a/drivers/fpga/Makefile b/drivers/fpga/Makefile
> > index acda5ca..d1d588b 100644
> > --- a/drivers/fpga/Makefile
> > +++ b/drivers/fpga/Makefile
> > @@ -31,6 +31,7 @@ obj-$(CONFIG_OF_FPGA_REGION)		+= of-fpga-region.o
> >  # Intel FPGA Support
> >  obj-$(CONFIG_INTEL_FPGA_PCI)		+= intel-fpga-pci.o
> >  obj-$(CONFIG_INTEL_FPGA_FME)		+= intel-fpga-fme.o
> > +obj-$(CONFIG_INTEL_FPGA_FME_MGR)	+= intel-fpga-fme-mgr.o
> >  
> >  intel-fpga-pci-objs := intel-pcie.o intel-feature-dev.o
> >  intel-fpga-fme-objs := intel-fme-main.o intel-fme-pr.o
> > diff --git a/drivers/fpga/intel-feature-dev.h b/drivers/fpga/intel-feature-dev.h
> > index 3f97b75..f33923b 100644
> > --- a/drivers/fpga/intel-feature-dev.h
> > +++ b/drivers/fpga/intel-feature-dev.h
> > @@ -164,8 +164,83 @@ struct feature_fme_err {
> >  };
> >  
> >  /* FME Partial Reconfiguration Sub Feature Register Set */
> > +/* FME PR Control Register */
> > +struct feature_fme_pr_ctl {
> > +	union {
> > +		u64 csr;
> > +		struct {
> > +			u64 pr_reset:1;		/* Reset PR Engine */
> > +			u64 rsvdz1:3;
> > +			u64 pr_reset_ack:1;	/* Reset PR Engine Ack */
> > +			u64 rsvdz2:3;
> > +			u64 pr_regionid:2;	/* PR Region ID */
> > +			u64 rsvdz3:2;
> > +			u64 pr_start_req:1;	/* PR Start Request */
> > +			u64 pr_push_complete:1;	/* PR Data push complete */
> > +			u64 pr_kind:1;		/* Load Customer or Intel GBS */
> > +			u64 rsvdz4:17;
> > +			u64 config_data:32;
> > +		};
> > +	};
> > +};
> > +
> > +/* FME PR Status Register */
> > +struct feature_fme_pr_status {
> > +	union {
> > +		u64 csr;
> > +		struct {
> > +			u64 pr_credit:9;	/* Number of PR Credits */
> > +			u64 rsvdz1:7;
> > +			u64 pr_status:1;	/* PR Operation status */
> > +			u64 rsvdz2:3;
> > +			u64 pr_ctrlr_status:3;	/* Controller status */
> > +			u64 rsvdz3:1;
> > +			u64 pr_host_status:4;	/* PR Host status */
> > +			u64 rsvdz4:36;
> > +		};
> > +	};
> > +};
> > +
> > +/* FME PR Data Register */
> > +struct feature_fme_pr_data {
> > +	union {
> > +		u64 csr;
> > +		struct {
> > +			/* PR data from the raw-binary file */
> > +			u64 pr_data_raw:32;
> > +			u64 rsvd:32;
> > +		};
> > +	};
> > +};
> > +
> > +/* FME PR Error Register */
> > +struct feature_fme_pr_error {
> > +	union {
> > +		u64 csr;
> > +		struct {
> > +			u64 operation_err:1;	/* Previous PR error detected */
> > +			u64 crc_err:1;		/* CRC error detected */
> > +			u64 incompatiable_bs:1; /* Incompatiable Bitstream */
> > +			u64 protocol_err:1;	/* Data push protocol error */
> > +			u64 fifo_overflow:1;	/* Data fifo overflow */
> > +			u64 rsvdz1:1;
> > +			u64 secure_load_err:1;	/* Secure PR load error */
> > +			u64 rsvdz2:57;
> > +		};
> > +	};
> > +};
> 
> From what I've seen [1], [2] people weren't too happy with using bitfields,
> any reason we can't use explicit masking and shifts? I don't know if
> this is still an issue.

I think both should work fine in our case, and compiler should give same
result on both. We choose bitfields as it seems to be more readable, and
could save some code. Do you think if we can keep it? :)

> 
> > +
> >  struct feature_fme_pr {
> >  	struct feature_header header;
> > +	struct feature_fme_pr_ctl control;
> > +	struct feature_fme_pr_status status;
> > +	struct feature_fme_pr_data data;
> > +	struct feature_fme_pr_error error;
> > +
> > +	u64 rsvd[16];
> > +
> > +	u64 intfc_id_l;		/* PR interface Id Low */
> > +	u64 intfc_id_h;		/* PR interface Id High */
> >  };
> >  
> >  /* PORT Header Register Set */
> > diff --git a/drivers/fpga/intel-fpga-fme-mgr.c b/drivers/fpga/intel-fpga-fme-mgr.c
> > new file mode 100644
> > index 0000000..5f93dfb
> > --- /dev/null
> > +++ b/drivers/fpga/intel-fpga-fme-mgr.c
> > @@ -0,0 +1,307 @@
> > +/*
> > + * FPGA Manager Driver for Intel FPGA Management Engine (FME)
> > + *
> > + * Copyright (C) 2017 Intel Corporation, Inc.
> > + *
> > + * Authors:
> > + *   Kang Luwei <luwei.kang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> > + *   Xiao Guangrong <guangrong.xiao-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
> > + *   Wu Hao <hao.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> > + *   Joseph Grecco <joe.grecco-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> > + *   Enno Luebbers <enno.luebbers-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> > + *   Tim Whisonant <tim.whisonant-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> > + *   Ananda Ravuri <ananda.ravuri-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> > + *   Christopher Rauer <christopher.rauer-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> > + *   Henry Mitchel <henry.mitchel-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
> > + *
> > + * This work is licensed under the terms of the GNU GPL version 2. See
> > + * the COPYING file in the top-level directory.
> > + */
> > +
> > +#include <linux/module.h>
> > +#include <linux/iopoll.h>
> > +#include <linux/fpga/fpga-mgr.h>
> > +
> > +#include "intel-feature-dev.h"
> > +#include "intel-fme.h"
> > +
> > +#define PR_WAIT_TIMEOUT   8000000
> > +#define PR_HOST_STATUS_IDLE	0
> > +
> > +struct fme_mgr_priv {
> > +	void __iomem *ioaddr;
> > +};
> > +
> > +static ssize_t interface_id_show(struct device *dev,
> > +				 struct device_attribute *attr, char *buf)
> > +{
> > +	struct fpga_manager *mgr = dev_get_drvdata(dev);
> > +	struct fme_mgr_priv *priv = mgr->priv;
> > +	struct feature_fme_pr *fme_pr;
> > +	u64 intfc_id_l, intfc_id_h;
> > +
> > +	fme_pr = priv->ioaddr;
> > +
> > +	intfc_id_l = readq(&fme_pr->intfc_id_l);
> > +	intfc_id_h = readq(&fme_pr->intfc_id_h);
> > +
> > +	return scnprintf(buf, PAGE_SIZE, "%016llx%016llx\n",
> > +			(unsigned long long)intfc_id_h,
> > +			(unsigned long long)intfc_id_l);
> > +}
> > +static DEVICE_ATTR_RO(interface_id);
> > +
> > +static const struct attribute *fme_mgr_attrs[] = {
> > +	&dev_attr_interface_id.attr,
> > +	NULL,
> > +};
> > +
> > +static void fme_mgr_pr_update_status(struct fpga_manager *mgr,
> > +				     struct feature_fme_pr_error err)
> > +{
> > +	mgr->status = 0;
> > +
> > +	if (err.operation_err)
> > +		mgr->status |= FPGA_MGR_STATUS_OPERATION_ERR;
> 
> Can we just have a (err & FEATURE_FME_PR_ERROR) here instead ?
> > +	if (err.crc_err)
> > +		mgr->status |= FPGA_MGR_STATUS_CRC_ERR;
> 
> Can we just have a (err & FEATURE_FME_CRC_ERROR) here instead ?

As above, do you think if we can keep the origin code here?
Use "if (err.crc_err)" not "if (err & FEATURE_FME_CRC_ERROR)",
it makes the code shorter in most cases. :)

Thanks
Hao

> > +	if (err.incompatiable_bs)
> > +		mgr->status |= FPGA_MGR_STATUS_INCOMPATIBLE_BS_ERR;
> > +	if (err.protocol_err)
> > +		mgr->status |= FPGA_MGR_STATUS_IP_PROTOCOL_ERR;
> > +	if (err.fifo_overflow)
> > +		mgr->status |= FPGA_MGR_STATUS_FIFO_OVERFLOW_ERR;
> > +	if (err.secure_load_err)
> > +		mgr->status |= FPGA_MGR_STATUS_SECURE_LOAD_ERR;
> > +}
> > +
> > +static u64 fme_mgr_pr_err_handle(struct feature_fme_pr *fme_pr)
> > +{
> > +	struct feature_fme_pr_status fme_pr_status;
> > +	struct feature_fme_pr_error fme_pr_error;
> > +
> > +	fme_pr_status.csr = readq(&fme_pr->status);
> > +	if (!fme_pr_status.pr_status)
> > +		return 0;
> > +
> > +	fme_pr_error.csr = readq(&fme_pr->error);
> > +	writeq(fme_pr_error.csr, &fme_pr->error);
> > +
> > +	return fme_pr_error.csr;
> > +}
> > +
> > +static int fme_mgr_write_init(struct fpga_manager *mgr,
> > +			      struct fpga_image_info *info,
> > +			      const char *buf, size_t count)
> > +{
> > +	struct device *dev = &mgr->dev;
> > +	struct fme_mgr_priv *priv = mgr->priv;
> > +	struct feature_fme_pr *fme_pr = priv->ioaddr;
> > +	struct feature_fme_pr_ctl fme_pr_ctl;
> > +	struct feature_fme_pr_status fme_pr_status;
> > +	struct feature_fme_pr_error fme_pr_err;
> > +
> > +	if (!(info->flags & FPGA_MGR_PARTIAL_RECONFIG)) {
> > +		dev_err(dev, "only support partial reconfiguration.\n");
> > +		return -EINVAL;
> > +	}
> > +
> > +	dev_dbg(dev, "resetting PR before initiated PR\n");
> > +
> > +	fme_pr_ctl.csr = readq(&fme_pr->control);
> > +	fme_pr_ctl.pr_reset = 1;
> > +	writeq(fme_pr_ctl.csr, &fme_pr->control);
> > +
> > +	if (readq_poll_timeout(&fme_pr->control, fme_pr_ctl.csr,
> > +			       (fme_pr_ctl.pr_reset_ack == 1),
> > +			       1, PR_WAIT_TIMEOUT)) {
> > +		dev_err(dev, "maximum PR timeout\n");
> > +		return -ETIMEDOUT;
> > +	}
> > +
> > +	fme_pr_ctl.csr = readq(&fme_pr->control);
> > +	fme_pr_ctl.pr_reset = 0;
> > +	writeq(fme_pr_ctl.csr, &fme_pr->control);
> > +
> > +	dev_dbg(dev,
> > +		"waiting for PR resource in HW to be initialized and ready\n");
> > +
> > +	fme_pr_status.pr_host_status = PR_HOST_STATUS_IDLE;
> > +
> > +	if (readq_poll_timeout(&fme_pr->status, fme_pr_status.csr,
> > +			(fme_pr_status.pr_host_status == PR_HOST_STATUS_IDLE),
> > +			1, PR_WAIT_TIMEOUT)) {
> > +		dev_err(dev, "maximum PR timeout\n");
> > +		return -ETIMEDOUT;
> > +	}
> > +
> > +	dev_dbg(dev, "check and clear previous PR error\n");
> > +	fme_pr_err.csr = fme_mgr_pr_err_handle(fme_pr);
> > +	if (fme_pr_err.csr)
> > +		dev_dbg(dev, "previous PR error detected %llx\n",
> > +			     (unsigned long long)fme_pr_err.csr);
> > +
> > +	/* Clear all PR errors */
> > +	fme_pr_err.csr = 0;
> > +	fme_mgr_pr_update_status(mgr, fmCRCe_pr_err);
> > +
> > +	dev_dbg(dev, "set PR port ID\n");
> > +
> > +	fme_pr_ctl.csr = readq(&fme_pr->control);
> > +	fme_pr_ctl.pr_regionid = info->region_id;
> > +	writeq(fme_pr_ctl.csr, &fme_pr->control);
> > +
> > +	return 0;
> > +}
> > +
> > +static int fme_mgr_write(struct fpga_manager *mgr,
> > +			 const char *buf, size_t count)
> > +{
> > +	struct device *dev = &mgr->dev;
> > +	struct fme_mgr_priv *priv = mgr->priv;
> > +	struct feature_fme_pr *fme_pr = priv->ioaddr;
> > +	struct feature_fme_pr_ctl fme_pr_ctl;
> > +	struct feature_fme_pr_status fme_pr_status;
> > +	struct feature_fme_pr_data fme_pr_data;
> > +	int delay, pr_credit, i = 0;
> > +
> > +	dev_dbg(dev, "start request\n");
> > +
> > +	fme_pr_ctl.csr = readq(&fme_pr->control);
> > +	fme_pr_ctl.pr_start_req = 1;
> > +	writeq(fme_pr_ctl.csr, &fme_pr->control);
> > +
> > +	dev_dbg(dev, "pushing data from bitstream to HW\n");
> > +
> > +	fme_pr_status.csr = readq(&fme_pr->status);
> > +	pr_credit = fme_pr_status.pr_credit;
> > +
> > +	while (count > 0) {
> > +		delay = 0;
> > +		while (pr_credit <= 1) {
> > +			if (delay++ > PR_WAIT_TIMEOUT) {
> > +				dev_err(dev, "maximum try\n");
> > +				return -ETIMEDOUT;
> > +			}
> > +			udelay(1);
> > +
> > +			fme_pr_status.csr = readq(&fme_pr->status);
> > +			pr_credit = fme_pr_status.pr_credit;
> > +		};
> > +
> > +		if (count >= 4) {
> > +			fme_pr_data.rsvd = 0;
> > +			fme_pr_data.pr_data_raw = *(((u32 *)buf) + i);
> > +			writeq(fme_pr_data.csr, &fme_pr->data);
> > +			count -= 4;
> > +			pr_credit--;
> > +			i++;
> > +		} else {
> > +			WARN_ON(1);
> > +			return -EINVAL;
> > +		}
> > +	}
> > +
> > +	return 0;
> > +}
> > +
> > +static int fme_mgr_write_complete(struct fpga_manager *mgr,
> > +				  struct fpga_image_info *info)
> > +{
> > +	struct device *dev = &mgr->dev;
> > +	struct fme_mgr_priv *priv = mgr->priv;
> > +	struct feature_fme_pr *fme_pr = priv->ioaddr;
> > +	struct feature_fme_pr_ctl fme_pr_ctl;
> > +	struct feature_fme_pr_error fme_pr_err;
> > +
> > +	fme_pr_ctl.csr = readq(&fme_pr->control);
> > +	fme_pr_ctl.pr_push_complete = 1;
> > +	writeq(fme_pr_ctl.csr, &fme_pr->control);
> > +
> > +	dev_dbg(dev, "green bitstream push complete\n");
> > +	dev_dbg(dev, "waiting for HW to release PR resource\n");
> > +
> > +	fme_pr_ctl.pr_start_req = 0;
> > +
> > +	if (readq_poll_timeout(&fme_pr->control, fme_pr_ctl.csr,
> > +			       (fme_pr_ctl.pr_start_req == 0),
> > +			       1, PR_WAIT_TIMEOUT)) {
> > +		dev_err(dev, "maximum try.\n");
> > +		return -ETIMEDOUT;
> > +	}
> > +
> > +	dev_dbg(dev, "PR operation complete, checking status\n");
> > +	fme_pr_err.csr = fme_mgr_pr_err_handle(fme_pr);
> > +	if (fme_pr_err.csr) {
> > +		fme_mgr_pr_update_status(mgr, fme_pr_err);
> > +		return -EIO;
> > +	}
> > +
> > +	dev_dbg(dev, "PR done successfully\n");
> > +	return 0;
> > +}
> > +
> > +static enum fpga_mgr_states fme_mgr_state(struct fpga_manager *mgr)
> > +{
> > +	return FPGA_MGR_STATE_UNKNOWN;
> > +}
> > +
> > +static const struct fpga_manager_ops fme_mgr_ops = {
> > +	.write_init = fme_mgr_write_init,
> > +	.write = fme_mgr_write,
> > +	.write_complete = fme_mgr_write_complete,
> > +	.state = fme_mgr_state,
> > +};
> > +
> > +static int fme_mgr_probe(struct platform_device *pdev)
> > +{
> > +	struct device *dev = &pdev->dev;
> > +	struct fme_mgr_priv *priv;
> > +	struct resource *res;
> > +	int ret;
> > +
> > +	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
> > +	if (!priv)
> > +		return -ENOMEM;
> > +
> > +	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> > +	priv->ioaddr = devm_ioremap(dev, res->start, resource_size(res));
> > +	if (IS_ERR(priv->ioaddr))
> > +		return PTR_ERR(priv->ioaddr);
> > +
> > +	ret = sysfs_create_files(&pdev->dev.kobj, fme_mgr_attrs);
> > +	if (ret)
> > +		return ret;
> > +
> > +	ret = fpga_mgr_register(dev, "Intel FPGA Manager", &fme_mgr_ops, priv);
> > +	if (ret) {
> > +		dev_err(dev, "unable to register FPGA manager\n");
> > +		sysfs_remove_files(&pdev->dev.kobj, fme_mgr_attrs);
> > +		return ret;
> > +	}
> > +
> > +	return 0;
> > +}
> > +
> > +static int fme_mgr_remove(struct platform_device *pdev)
> > +{
> > +	fpga_mgr_unregister(&pdev->dev);
> > +	sysfs_remove_files(&pdev->dev.kobj, fme_mgr_attrs);
> > +
> > +	return 0;
> > +}
> > +
> > +static struct platform_driver fme_mgr_driver = {
> > +	.driver	= {
> > +		.name    = INTEL_FPGA_FME_MGR,
> > +	},
> > +	.probe   = fme_mgr_probe,
> > +	.remove  = fme_mgr_remove,
> > +};
> > +
> > +module_platform_driver(fme_mgr_driver);
> > +
> > +MODULE_DESCRIPTION("FPGA Manager for Intel FPGA Management Engine");
> > +MODULE_AUTHOR("Intel Corporation");
> > +MODULE_LICENSE("GPL v2");
> > +MODULE_ALIAS("platform:intel-fpga-fme-mgr");
> > -- 
> > 1.8.3.1
> > 
> 
> [1] http://yarchive.net/comp/linux/bitfields.html
> [2] https://lwn.net/Articles/478657/
> 
> Thanks,
> Moritz

  parent reply	other threads:[~2017-09-27  1:18 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-26  1:51 [PATCH v2 00/22] Intel FPGA Device Drivers Wu Hao
     [not found] ` <1498441938-14046-1-git-send-email-hao.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-06-26  1:51   ` [PATCH v2 01/22] docs: fpga: add a document for Intel FPGA driver overview Wu Hao
2017-07-12 14:51     ` Alan Tull
     [not found]       ` <CANk1AXTDVVRG05H9kwZujFYGGS=AjQ2cdfrBm=bRNz9S7p6R6w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-13  4:25         ` Wu Hao
2017-07-14 23:59           ` Luebbers, Enno
2017-07-17 20:14             ` Alan Tull
     [not found]               ` <CANk1AXTLhbczboA=wCYGUhnJyyYfvmUqUpk490sk34eh-MU5Ew-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-18  5:22                 ` Greg KH
     [not found]                   ` <20170718052228.GA10631-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2017-07-18 14:32                     ` Alan Tull
2017-06-26  1:51   ` [PATCH v2 02/22] fpga: add FPGA device framework Wu Hao
2017-07-27 16:35     ` Alan Tull
     [not found]       ` <CANk1AXRoxz7nOY--UYfBtg-3kGFy0gqCz0cbF9mOvzU2+EdzpA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-27 19:10         ` Rob Herring
     [not found]           ` <CAL_JsqJfGJwDcXtpBs73TsSKTCwfAPywgyTPwzy1GQotJ7DTzw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-31 21:40             ` Alan Tull
     [not found]               ` <CANk1AXTsBQgX+0hYZA6mMhESApB-MkG9CETWExSPOpf7MXeKFw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-08-01  8:43                 ` Wu Hao
2017-08-01 21:04                   ` Alan Tull
2017-08-02 14:07                     ` Wu Hao
2017-08-02 21:01                       ` Alan Tull
2017-08-07 15:13             ` Alan Tull
2017-07-27 16:44     ` Alan Tull
     [not found]       ` <CANk1AXR-nSB-6TKpVyskbvfj_F2=jbSv48hpp+UXtKxkTseLqw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-28  7:55         ` Wu Hao
2017-06-26  1:51   ` [PATCH v2 03/22] fpga: bridge: remove OF dependency for fpga-bridge Wu Hao
2017-08-02 21:21     ` Alan Tull
2017-09-25 16:34       ` Moritz Fischer
     [not found]     ` <1498441938-14046-4-git-send-email-hao.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-09-21 19:11       ` Moritz Fischer
2017-09-21 19:50         ` Alan Tull
     [not found]           ` <CANk1AXRbXybjwq-ha=G6Z7nXwd8fNjPWP5awTz6=23KVXbd=kQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-09-22  2:15             ` Wu Hao
2017-09-23  1:53               ` Alan Tull
2017-06-26  1:52   ` [PATCH v2 04/22] fpga: mgr: add region_id to fpga_image_info Wu Hao
     [not found]     ` <1498441938-14046-5-git-send-email-hao.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-07-26 18:33       ` Alan Tull
2017-07-27  5:14         ` Wu Hao
2017-06-26  1:52   ` [PATCH v2 09/22] fpga: intel: pcie: adds fpga_for_each_port callback for fme device Wu Hao
2017-08-17 21:31     ` Alan Tull
     [not found]       ` <CANk1AXRQfGViXn+vEErmN6N8LtOsX7Arh-VPPbDjKiEyGGvV-A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-08-18  7:03         ` Wu Hao
2017-06-26  1:52   ` [PATCH v2 10/22] fpga: intel: add feature device infrastructure Wu Hao
2017-06-26  1:52   ` [PATCH v2 12/22] fpga: intel: fme: add header sub feature support Wu Hao
2017-07-17 18:53     ` Alan Tull
2017-07-18  1:17       ` Wu, Hao
     [not found]         ` <BE8371DA886269458E0220A16DC1F8277E058300-0J0gbvR4kTg/UvCtAeCM4rfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2017-07-18 14:33           ` Alan Tull
2017-06-26  1:52   ` [PATCH v2 14/22] fpga: intel: fme: add partial reconfiguration " Wu Hao
2017-06-26  1:52   ` [PATCH v2 16/22] fpga: intel: add fpga bridge platform driver for FME Wu Hao
     [not found]     ` <1498441938-14046-17-git-send-email-hao.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-08-17 19:34       ` Alan Tull
2017-08-17 19:55     ` Moritz Fischer
2017-08-18  3:06       ` Wu Hao
2017-06-26  1:52   ` [PATCH v2 18/22] fpga: intel: add FPGA Accelerated Function Unit driver basic framework Wu Hao
     [not found]     ` <1498441938-14046-19-git-send-email-hao.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-08-17 19:00       ` Alan Tull
     [not found]         ` <CANk1AXSN76qZD+h8iBeYGPEGwquvGms9VC2tXG7rf16NeNUoiw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-08-18  6:40           ` Wu Hao
2017-08-17 19:09     ` Moritz Fischer
     [not found]       ` <CAAtXAHca6R7rKOmFHD0eic1dv-NxfG3fBS+yRVFNYoX_M0eVbw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-08-18  6:42         ` Wu Hao
2017-06-26  1:52   ` [PATCH v2 19/22] fpga: intel: afu: add header sub feature support Wu Hao
2017-08-14 21:37     ` Alan Tull
     [not found]       ` <CANk1AXSb==KikMjw4PJ4Yx97vT5JxDkHR5k2Cb0cdrQFUOZqQw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-08-16  5:11         ` Wu, Hao
2017-08-17 21:41           ` Alan Tull
2017-06-26  1:52   ` [PATCH v2 20/22] fpga: intel: afu add FPGA_GET_API_VERSION/CHECK_EXTENSION ioctls support Wu Hao
2017-08-17 19:07     ` Alan Tull
2017-08-17 19:12     ` Moritz Fischer
     [not found]       ` <CAAtXAHdyCNBRHdk-9L+AOT7g7BEsxBN-EkdhxO2-aSqdDovTHg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-08-18  3:20         ` Wu Hao
2017-06-26  1:52   ` [PATCH v2 21/22] fpga: intel: afu: add user afu sub feature support Wu Hao
2017-06-26  1:52   ` [PATCH v2 22/22] fpga: intel: afu: add FPGA_PORT_DMA_MAP/UNMAP ioctls support Wu Hao
2017-07-31 21:41     ` Alan Tull
     [not found]       ` <CANk1AXQ0kKnDOWo_BLA_r3P_rsmiZ1LQCVWqXtmXYmkUnzDtog-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-08-01  7:21         ` Wu Hao
2017-08-01 18:15     ` Moritz Fischer
     [not found]       ` <CAAtXAHfB906JNRzwzrx9kB4kMwcTz-201QQSr=486j8hrH7WMA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-08-02  7:30         ` Wu Hao
2017-07-28 13:28   ` [PATCH v2 00/22] Intel FPGA Device Drivers Alan Tull
2017-06-26  1:52 ` [PATCH v2 05/22] fpga: mgr: add status for fpga-mgr Wu Hao
     [not found]   ` <1498441938-14046-6-git-send-email-hao.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-07-12 15:22     ` Alan Tull
     [not found]       ` <CANk1AXQ4-BWzhRjR+BTmnSae+4FeBamZyYbH1MMZWaAqeW_CEA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-13  3:11         ` Wu Hao
2017-06-26  1:52 ` [PATCH v2 06/22] fpga: intel: add FPGA PCIe device driver Wu Hao
2017-08-07 20:43   ` Alan Tull
     [not found]     ` <CANk1AXQ__fFCfv335ySGMxG=8UXReEk8V1=a-3pCw5S-v=sSRQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-08-14 12:33       ` Wu, Hao
2017-06-26  1:52 ` [PATCH v2 07/22] fpga: intel: pcie: parse feature list and create platform device for features Wu Hao
2017-06-26 18:42   ` Moritz Fischer
2017-06-27  3:17     ` Wu Hao
     [not found]     ` <20170626184205.GA13190-R0KNJUYl863z/wjs7L+eiWPmTBeX6bocVpNB7YpNyf8@public.gmane.org>
2017-06-27 15:34       ` Alan Tull
     [not found]   ` <1498441938-14046-8-git-send-email-hao.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-07-13 17:52     ` Alan Tull
     [not found]       ` <CANk1AXS-VftzKmmK4P3Anas+DQZ0ZPQ=7yVQt=QrNULPY7PaDA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-14  9:22         ` Wu Hao
2017-07-17 19:15   ` Alan Tull
2017-07-18  2:29     ` Wu, Hao
2017-09-20 21:24   ` Alan Tull
2017-09-21 19:58     ` Alan Tull
     [not found]       ` <CANk1AXTvHm-y0vUmCTPX47T9G1TJsatfwoC-bx-tPFRoJA9+AA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-09-22  7:33         ` Wu Hao
2017-09-22  7:28     ` Wu Hao
2017-09-27 20:27       ` Alan Tull
     [not found]         ` <CANk1AXQe2mrpqq-7uc8QvPPBYaMvQjBhbjLaee1XQ6L+kiCKTQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-09-28  9:32           ` Wu Hao
2017-06-26  1:52 ` [PATCH v2 08/22] fpga: intel: pcie: add chardev support for feature devices Wu Hao
2017-06-26  1:52 ` [PATCH v2 11/22] fpga: intel: add FPGA Management Engine driver basic framework Wu Hao
2017-06-26  1:52 ` [PATCH v2 13/22] fpga: intel: fme: add FPGA_GET_API_VERSION/CHECK_EXTENSION ioctls support Wu Hao
2017-08-17 19:11   ` Alan Tull
2017-06-26  1:52 ` [PATCH v2 15/22] fpga: intel: add fpga manager platform driver for FME Wu Hao
2017-09-25 21:24   ` Moritz Fischer
     [not found]     ` <20170925212457.GB14795-KFgJe6S/L2nknyRNNOXSQ2IaLvZF3x2V0E9HWUfgJXw@public.gmane.org>
2017-09-27  1:18       ` Wu Hao [this message]
2017-09-27 18:54         ` Alan Tull
     [not found]           ` <CANk1AXTQLiR7ayLzsgU9TOePY2Zc01P-mMOy7n509S7+bcS-5A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-09-28  8:25             ` Wu Hao
2017-06-26  1:52 ` [PATCH v2 17/22] fpga: intel: add fpga region " Wu Hao
     [not found]   ` <1498441938-14046-18-git-send-email-hao.wu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-07-12 16:09     ` Alan Tull
     [not found]       ` <CANk1AXRioZsobi9k_VVcRypV+LrviPLjRejb_Og9VwKhCRth5g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-07-13  2:31         ` Wu Hao

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=20170927011853.GA8185@hao-dev \
    --to=hao.wu-ral2jqcrhueavxtiumwx3w@public.gmane.org \
    --cc=atull-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=christopher.rauer-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=enno.luebbers-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=guangrong.xiao-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
    --cc=linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-fpga-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=luwei.kang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=mdf-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=shiva.rao-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=tim.whisonant-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=yi.z.zhang-ral2JQCrhuEAvxtiuMwx3w@public.gmane.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).