diff mbox

[v2,12/22] fpga: intel: fme: add header sub feature support

Message ID 1498441938-14046-13-git-send-email-hao.wu@intel.com (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Wu, Hao June 26, 2017, 1:52 a.m. UTC
From: Kang Luwei <luwei.kang@intel.com>

The header register set is always present for FPGA Management Engine (FME),
this patch implements init and uinit function for header sub feature and
introduce several read-only sysfs interfaces for the capability and status.

Sysfs interfaces:
* /sys/class/fpga/<fpga.x>/<intel-fpga-fme.x>/ports_num
  Read-only. Number of ports implemented

* /sys/class/fpga/<fpga.x>/<intel-fpga-fme.x>/bitstream_id
  Read-only. Blue Bitstream identifier number

* /sys/class/fpga/<fpga.x>/<intel-fpga-fme.x>/bitstream_metadata
  Read-only. Blue Bitstream meta data

Signed-off-by: Tim Whisonant <tim.whisonant@intel.com>
Signed-off-by: Enno Luebbers <enno.luebbers@intel.com>
Signed-off-by: Shiva Rao <shiva.rao@intel.com>
Signed-off-by: Christopher Rauer <christopher.rauer@intel.com>
Signed-off-by: Kang Luwei <luwei.kang@intel.com>
Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
Signed-off-by: Wu Hao <hao.wu@intel.com>
---
v2: add sysfs documentation
---
 .../ABI/testing/sysfs-platform-intel-fpga-fme      | 19 ++++++++
 drivers/fpga/intel-feature-dev.h                   |  3 ++
 drivers/fpga/intel-fme-main.c                      | 55 ++++++++++++++++++++++
 3 files changed, 77 insertions(+)
 create mode 100644 Documentation/ABI/testing/sysfs-platform-intel-fpga-fme

Comments

Alan Tull July 17, 2017, 6:53 p.m. UTC | #1
On Sun, Jun 25, 2017 at 8:52 PM, Wu Hao <hao.wu@intel.com> wrote:

Hi Hao,

I'm making my way through this (very large) patchset.  Some minor
comments below.

> From: Kang Luwei <luwei.kang@intel.com>
>
> The header register set is always present for FPGA Management Engine (FME),
> this patch implements init and uinit function for header sub feature and
> introduce several read-only sysfs interfaces for the capability and status.
>
> Sysfs interfaces:
> * /sys/class/fpga/<fpga.x>/<intel-fpga-fme.x>/ports_num
>   Read-only. Number of ports implemented
>
> * /sys/class/fpga/<fpga.x>/<intel-fpga-fme.x>/bitstream_id
>   Read-only. Blue Bitstream identifier number

Blue and Green bitstreams are an Intel implementation terminology.  I
see that you've defined them in drivers/fpga, but it will be helpful
to add in "static region" and "partial reconfiguration region" added
in any API documentation files that use the green/blue terminology to
keep it accessible.

>
> * /sys/class/fpga/<fpga.x>/<intel-fpga-fme.x>/bitstream_metadata
>   Read-only. Blue Bitstream meta data
>
> Signed-off-by: Tim Whisonant <tim.whisonant@intel.com>
> Signed-off-by: Enno Luebbers <enno.luebbers@intel.com>
> Signed-off-by: Shiva Rao <shiva.rao@intel.com>
> Signed-off-by: Christopher Rauer <christopher.rauer@intel.com>
> Signed-off-by: Kang Luwei <luwei.kang@intel.com>
> Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
> Signed-off-by: Wu Hao <hao.wu@intel.com>
> ---
> v2: add sysfs documentation
> ---
>  .../ABI/testing/sysfs-platform-intel-fpga-fme      | 19 ++++++++
>  drivers/fpga/intel-feature-dev.h                   |  3 ++
>  drivers/fpga/intel-fme-main.c                      | 55 ++++++++++++++++++++++
>  3 files changed, 77 insertions(+)
>  create mode 100644 Documentation/ABI/testing/sysfs-platform-intel-fpga-fme
>
> diff --git a/Documentation/ABI/testing/sysfs-platform-intel-fpga-fme b/Documentation/ABI/testing/sysfs-platform-intel-fpga-fme
> new file mode 100644
> index 0000000..783cfa9
> --- /dev/null
> +++ b/Documentation/ABI/testing/sysfs-platform-intel-fpga-fme
> @@ -0,0 +1,19 @@
> +What:          /sys/bus/platform/devices/intel-fpga-fme.0/ports_num
> +Date:          June 2017
> +KernelVersion:  4.12
> +Contact:       Wu Hao <hao.wu@intel.com>
> +Description:   Read-only. One Intel FPGA device may have more than 1
> +               port/Accelerator Function Unit (AFU). It returns the
> +               number of ports on the FPGA device when read it.
> +
> +What:          /sys/bus/platform/devices/intel-fpga-fme.0/bitstream_id
> +Date:          June 2017
> +KernelVersion:  4.12
> +Contact:       Wu Hao <hao.wu@intel.com>
> +Description:   Read-only. It returns Blue Bitstream identifier number.

Here

> +
> +What:          /sys/bus/platform/devices/intel-fpga-fme.0/bitstream_meta
> +Date:          June 2017
> +KernelVersion:  4.12
> +Contact:       Wu Hao <hao.wu@intel.com>
> +Description:   Read-only. It returns Blue Bitstream meta data.

And here

> diff --git a/drivers/fpga/intel-feature-dev.h b/drivers/fpga/intel-feature-dev.h
> index 635b857..3f97b75 100644
> --- a/drivers/fpga/intel-feature-dev.h
> +++ b/drivers/fpga/intel-feature-dev.h
> @@ -138,6 +138,9 @@ struct feature_fme_header {
>         u64 rsvd[2];
>         struct feature_fme_capability capability;
>         struct feature_fme_port port[MAX_FPGA_PORT_NUM];
> +       u64 rsvd1;
> +       u64 bitstream_id;
> +       u64 bitstream_md;
>  };
>
>  /* FME Thermal Sub Feature Register Set */
> diff --git a/drivers/fpga/intel-fme-main.c b/drivers/fpga/intel-fme-main.c
> index c16cf81..dfbb17c 100644
> --- a/drivers/fpga/intel-fme-main.c
> +++ b/drivers/fpga/intel-fme-main.c
> @@ -21,15 +21,70 @@
>
>  #include "intel-feature-dev.h"
>
> +static ssize_t ports_num_show(struct device *dev,
> +                             struct device_attribute *attr, char *buf)
> +{
> +       struct feature_fme_header *fme_hdr
> +               = get_feature_ioaddr_by_index(dev, FME_FEATURE_ID_HEADER);
> +       struct feature_fme_capability fme_capability;
> +
> +       fme_capability.csr = readq(&fme_hdr->capability);
> +
> +       return scnprintf(buf, PAGE_SIZE, "%d\n", fme_capability.num_ports);
> +}
> +static DEVICE_ATTR_RO(ports_num);
> +
> +static ssize_t bitstream_id_show(struct device *dev,
> +                                struct device_attribute *attr, char *buf)
> +{
> +       struct feature_fme_header *fme_hdr
> +               = get_feature_ioaddr_by_index(dev, FME_FEATURE_ID_HEADER);
> +       u64 bitstream_id = readq(&fme_hdr->bitstream_id);
> +
> +       return scnprintf(buf, PAGE_SIZE, "0x%llx\n",
> +                               (unsigned long long)bitstream_id);
> +}
> +static DEVICE_ATTR_RO(bitstream_id);
> +
> +static ssize_t bitstream_metadata_show(struct device *dev,
> +                                      struct device_attribute *attr, char *buf)
> +{
> +       struct feature_fme_header *fme_hdr
> +               = get_feature_ioaddr_by_index(dev, FME_FEATURE_ID_HEADER);
> +       u64 bitstream_md = readq(&fme_hdr->bitstream_md);
> +
> +       return scnprintf(buf, PAGE_SIZE, "0x%llx\n",
> +                               (unsigned long long)bitstream_md);
> +}
> +static DEVICE_ATTR_RO(bitstream_metadata);
> +
> +static const struct attribute *fme_hdr_attrs[] = {
> +       &dev_attr_ports_num.attr,
> +       &dev_attr_bitstream_id.attr,
> +       &dev_attr_bitstream_metadata.attr,
> +       NULL,
> +};
> +
>  static int fme_hdr_init(struct platform_device *pdev, struct feature *feature)
>  {
> +       struct feature_fme_header *fme_hdr = feature->ioaddr;
> +       int ret;
> +
>         dev_dbg(&pdev->dev, "FME HDR Init.\n");
> +       dev_dbg(&pdev->dev, "FME cap %llx.\n",
> +                               (unsigned long long)fme_hdr->capability.csr);
> +
> +       ret = sysfs_create_files(&pdev->dev.kobj, fme_hdr_attrs);
> +       if (ret)
> +               return ret;
> +
>         return 0;
>  }
>
>  static void fme_hdr_uinit(struct platform_device *pdev, struct feature *feature)
>  {
>         dev_dbg(&pdev->dev, "FME HDR UInit.\n");
> +       sysfs_remove_files(&pdev->dev.kobj, fme_hdr_attrs);
>  }
>
>  struct feature_ops fme_hdr_ops = {
> --
> 1.8.3.1
>
--
To unsubscribe from this list: send the line "unsubscribe linux-fpga" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Wu, Hao July 18, 2017, 1:17 a.m. UTC | #2
PiBPbiBTdW4sIEp1biAyNSwgMjAxNyBhdCA4OjUyIFBNLCBXdSBIYW8gPGhhby53dUBpbnRlbC5j
b20+IHdyb3RlOg0KPiANCj4gSGkgSGFvLA0KPiANCj4gSSdtIG1ha2luZyBteSB3YXkgdGhyb3Vn
aCB0aGlzICh2ZXJ5IGxhcmdlKSBwYXRjaHNldC4gIFNvbWUgbWlub3INCj4gY29tbWVudHMgYmVs
b3cuDQo+IA0KDQpIaSBBbGFuDQoNClRoYW5rcyBmb3IgeW91ciByZXZpZXcuIDogKQ0KDQo+ID4g
RnJvbTogS2FuZyBMdXdlaSA8bHV3ZWkua2FuZ0BpbnRlbC5jb20+DQo+ID4NCj4gPiBUaGUgaGVh
ZGVyIHJlZ2lzdGVyIHNldCBpcyBhbHdheXMgcHJlc2VudCBmb3IgRlBHQSBNYW5hZ2VtZW50IEVu
Z2luZSAoRk1FKSwNCj4gPiB0aGlzIHBhdGNoIGltcGxlbWVudHMgaW5pdCBhbmQgdWluaXQgZnVu
Y3Rpb24gZm9yIGhlYWRlciBzdWIgZmVhdHVyZSBhbmQNCj4gPiBpbnRyb2R1Y2Ugc2V2ZXJhbCBy
ZWFkLW9ubHkgc3lzZnMgaW50ZXJmYWNlcyBmb3IgdGhlIGNhcGFiaWxpdHkgYW5kIHN0YXR1cy4N
Cj4gPg0KPiA+IFN5c2ZzIGludGVyZmFjZXM6DQo+ID4gKiAvc3lzL2NsYXNzL2ZwZ2EvPGZwZ2Eu
eD4vPGludGVsLWZwZ2EtZm1lLng+L3BvcnRzX251bQ0KPiA+ICAgUmVhZC1vbmx5LiBOdW1iZXIg
b2YgcG9ydHMgaW1wbGVtZW50ZWQNCj4gPg0KPiA+ICogL3N5cy9jbGFzcy9mcGdhLzxmcGdhLng+
LzxpbnRlbC1mcGdhLWZtZS54Pi9iaXRzdHJlYW1faWQNCj4gPiAgIFJlYWQtb25seS4gQmx1ZSBC
aXRzdHJlYW0gaWRlbnRpZmllciBudW1iZXINCj4gDQo+IEJsdWUgYW5kIEdyZWVuIGJpdHN0cmVh
bXMgYXJlIGFuIEludGVsIGltcGxlbWVudGF0aW9uIHRlcm1pbm9sb2d5LiAgSQ0KPiBzZWUgdGhh
dCB5b3UndmUgZGVmaW5lZCB0aGVtIGluIGRyaXZlcnMvZnBnYSwgYnV0IGl0IHdpbGwgYmUgaGVs
cGZ1bA0KPiB0byBhZGQgaW4gInN0YXRpYyByZWdpb24iIGFuZCAicGFydGlhbCByZWNvbmZpZ3Vy
YXRpb24gcmVnaW9uIiBhZGRlZA0KPiBpbiBhbnkgQVBJIGRvY3VtZW50YXRpb24gZmlsZXMgdGhh
dCB1c2UgdGhlIGdyZWVuL2JsdWUgdGVybWlub2xvZ3kgdG8NCj4ga2VlcCBpdCBhY2Nlc3NpYmxl
LgkNCj4gDQoNClN1cmUsIHRoYW5rcyBmb3IgeW91ciBzdWdnZXN0aW9uLCB3aWxsIHVwZGF0ZSBp
dCBsaWtlIHRoaXMuDQoNCiogL3N5cy9jbGFzcy9mcGdhLzxmcGdhLng+LzxpbnRlbC1mcGdhLWZt
ZS54Pi9iaXRzdHJlYW1faWQNCiAgUmVhZC1vbmx5LiBCbHVlIEJpdHN0cmVhbSAoc3RhdGljIEZQ
R0EgcmVnaW9uKSBpZGVudGlmaWVyIG51bWJlcg0KDQoqIC9zeXMvY2xhc3MvZnBnYS88ZnBnYS54
Pi88aW50ZWwtZnBnYS1mbWUueD4vYml0c3RyZWFtX21ldGFkYXRhDQogIFJlYWQtb25seS4gQmx1
ZSBCaXRzdHJlYW0gKHN0YXRpYyBGUEdBIHJlZ2lvbikgbWV0YSBkYXRhDQoNCj4gPg0KPiA+IFNp
Z25lZC1vZmYtYnk6IFRpbSBXaGlzb25hbnQgPHRpbS53aGlzb25hbnRAaW50ZWwuY29tPg0KPiA+
IFNpZ25lZC1vZmYtYnk6IEVubm8gTHVlYmJlcnMgPGVubm8ubHVlYmJlcnNAaW50ZWwuY29tPg0K
PiA+IFNpZ25lZC1vZmYtYnk6IFNoaXZhIFJhbyA8c2hpdmEucmFvQGludGVsLmNvbT4NCj4gPiBT
aWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBSYXVlciA8Y2hyaXN0b3BoZXIucmF1ZXJAaW50ZWwu
Y29tPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEthbmcgTHV3ZWkgPGx1d2VpLmthbmdAaW50ZWwuY29t
Pg0KPiA+IFNpZ25lZC1vZmYtYnk6IFhpYW8gR3Vhbmdyb25nIDxndWFuZ3JvbmcueGlhb0BsaW51
eC5pbnRlbC5jb20+DQo+ID4gU2lnbmVkLW9mZi1ieTogV3UgSGFvIDxoYW8ud3VAaW50ZWwuY29t
Pg0KPiA+IC0tLQ0KPiA+IHYyOiBhZGQgc3lzZnMgZG9jdW1lbnRhdGlvbg0KPiA+IC0tLQ0KPiA+
ICAuLi4vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0taW50ZWwtZnBnYS1mbWUgICAgICB8IDE5
ICsrKysrKysrDQo+ID4gIGRyaXZlcnMvZnBnYS9pbnRlbC1mZWF0dXJlLWRldi5oICAgICAgICAg
ICAgICAgICAgIHwgIDMgKysNCj4gPiAgZHJpdmVycy9mcGdhL2ludGVsLWZtZS1tYWluLmMgICAg
ICAgICAgICAgICAgICAgICAgfCA1NSArKysrKysrKysrKysrKysrKysrKysrDQo+ID4gIDMgZmls
ZXMgY2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9j
dW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1pbnRlbC1mcGdhLQ0KPiBmbWUN
Cj4gPg0KPiA+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBs
YXRmb3JtLWludGVsLWZwZ2EtZm1lDQo+IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNm
cy1wbGF0Zm9ybS1pbnRlbC1mcGdhLWZtZQ0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4g
aW5kZXggMDAwMDAwMC4uNzgzY2ZhOQ0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9Eb2N1
bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWludGVsLWZwZ2EtZm1lDQo+ID4g
QEAgLTAsMCArMSwxOSBAQA0KPiA+ICtXaGF0OiAgICAgICAgICAvc3lzL2J1cy9wbGF0Zm9ybS9k
ZXZpY2VzL2ludGVsLWZwZ2EtZm1lLjAvcG9ydHNfbnVtDQo+ID4gK0RhdGU6ICAgICAgICAgIEp1
bmUgMjAxNw0KPiA+ICtLZXJuZWxWZXJzaW9uOiAgNC4xMg0KPiA+ICtDb250YWN0OiAgICAgICBX
dSBIYW8gPGhhby53dUBpbnRlbC5jb20+DQo+ID4gK0Rlc2NyaXB0aW9uOiAgIFJlYWQtb25seS4g
T25lIEludGVsIEZQR0EgZGV2aWNlIG1heSBoYXZlIG1vcmUgdGhhbiAxDQo+ID4gKyAgICAgICAg
ICAgICAgIHBvcnQvQWNjZWxlcmF0b3IgRnVuY3Rpb24gVW5pdCAoQUZVKS4gSXQgcmV0dXJucyB0
aGUNCj4gPiArICAgICAgICAgICAgICAgbnVtYmVyIG9mIHBvcnRzIG9uIHRoZSBGUEdBIGRldmlj
ZSB3aGVuIHJlYWQgaXQuDQo+ID4gKw0KPiA+ICtXaGF0OiAgICAgICAgICAvc3lzL2J1cy9wbGF0
Zm9ybS9kZXZpY2VzL2ludGVsLWZwZ2EtZm1lLjAvYml0c3RyZWFtX2lkDQo+ID4gK0RhdGU6ICAg
ICAgICAgIEp1bmUgMjAxNw0KPiA+ICtLZXJuZWxWZXJzaW9uOiAgNC4xMg0KPiA+ICtDb250YWN0
OiAgICAgICBXdSBIYW8gPGhhby53dUBpbnRlbC5jb20+DQo+ID4gK0Rlc2NyaXB0aW9uOiAgIFJl
YWQtb25seS4gSXQgcmV0dXJucyBCbHVlIEJpdHN0cmVhbSBpZGVudGlmaWVyIG51bWJlci4NCj4g
DQo+IEhlcmUNCg0KV2lsbCB1cGRhdGUgdGhpcyBwYXRjaCBhcyBiZWxvdy4NCg0KK0Rlc2NyaXB0
aW9uOiAgIFJlYWQtb25seS4gSXQgcmV0dXJucyBCbHVlIEJpdHN0cmVhbSAoc3RhdGljIEZQR0Eg
cmVnaW9uKQ0KKyAgICAgICAgICAgICAgIGlkZW50aWZpZXIgbnVtYmVyLg0KDQo+IA0KPiA+ICsN
Cj4gPiArV2hhdDogICAgICAgICAgL3N5cy9idXMvcGxhdGZvcm0vZGV2aWNlcy9pbnRlbC1mcGdh
LWZtZS4wL2JpdHN0cmVhbV9tZXRhDQo+ID4gK0RhdGU6ICAgICAgICAgIEp1bmUgMjAxNw0KPiA+
ICtLZXJuZWxWZXJzaW9uOiAgNC4xMg0KPiA+ICtDb250YWN0OiAgICAgICBXdSBIYW8gPGhhby53
dUBpbnRlbC5jb20+DQo+ID4gK0Rlc2NyaXB0aW9uOiAgIFJlYWQtb25seS4gSXQgcmV0dXJucyBC
bHVlIEJpdHN0cmVhbSBtZXRhIGRhdGEuDQo+IA0KPiBBbmQgaGVyZQ0KDQpXaWxsIHVwZGF0ZSB0
aGlzIHBhdGNoIGFzIGJlbG93Lg0KDQorRGVzY3JpcHRpb246ICAgUmVhZC1vbmx5LiBJdCByZXR1
cm5zIEJsdWUgQml0c3RyZWFtIChzdGF0aWMgRlBHQSByZWdpb24pDQorICAgICAgICAgICAgICAg
bWV0YSBkYXRhLg0KDQpUaGFua3MNCkhhbw0K
--
To unsubscribe from this list: send the line "unsubscribe linux-fpga" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Alan Tull July 18, 2017, 2:33 p.m. UTC | #3
On Mon, Jul 17, 2017 at 8:17 PM, Wu, Hao <hao.wu@intel.com> wrote:
>> On Sun, Jun 25, 2017 at 8:52 PM, Wu Hao <hao.wu@intel.com> wrote:
>>
>> Hi Hao,
>>
>> I'm making my way through this (very large) patchset.  Some minor
>> comments below.
>>
>
> Hi Alan
>
> Thanks for your review. : )

Hi Hao,

Thanks, this looks good and will be helpful for folks who are new to this.

Alan

>
>> > From: Kang Luwei <luwei.kang@intel.com>
>> >
>> > The header register set is always present for FPGA Management Engine (FME),
>> > this patch implements init and uinit function for header sub feature and
>> > introduce several read-only sysfs interfaces for the capability and status.
>> >
>> > Sysfs interfaces:
>> > * /sys/class/fpga/<fpga.x>/<intel-fpga-fme.x>/ports_num
>> >   Read-only. Number of ports implemented
>> >
>> > * /sys/class/fpga/<fpga.x>/<intel-fpga-fme.x>/bitstream_id
>> >   Read-only. Blue Bitstream identifier number
>>
>> Blue and Green bitstreams are an Intel implementation terminology.  I
>> see that you've defined them in drivers/fpga, but it will be helpful
>> to add in "static region" and "partial reconfiguration region" added
>> in any API documentation files that use the green/blue terminology to
>> keep it accessible.
>>
>
> Sure, thanks for your suggestion, will update it like this.
>
> * /sys/class/fpga/<fpga.x>/<intel-fpga-fme.x>/bitstream_id
>   Read-only. Blue Bitstream (static FPGA region) identifier number
>
> * /sys/class/fpga/<fpga.x>/<intel-fpga-fme.x>/bitstream_metadata
>   Read-only. Blue Bitstream (static FPGA region) meta data
>
>> >
>> > Signed-off-by: Tim Whisonant <tim.whisonant@intel.com>
>> > Signed-off-by: Enno Luebbers <enno.luebbers@intel.com>
>> > Signed-off-by: Shiva Rao <shiva.rao@intel.com>
>> > Signed-off-by: Christopher Rauer <christopher.rauer@intel.com>
>> > Signed-off-by: Kang Luwei <luwei.kang@intel.com>
>> > Signed-off-by: Xiao Guangrong <guangrong.xiao@linux.intel.com>
>> > Signed-off-by: Wu Hao <hao.wu@intel.com>
>> > ---
>> > v2: add sysfs documentation
>> > ---
>> >  .../ABI/testing/sysfs-platform-intel-fpga-fme      | 19 ++++++++
>> >  drivers/fpga/intel-feature-dev.h                   |  3 ++
>> >  drivers/fpga/intel-fme-main.c                      | 55 ++++++++++++++++++++++
>> >  3 files changed, 77 insertions(+)
>> >  create mode 100644 Documentation/ABI/testing/sysfs-platform-intel-fpga-
>> fme
>> >
>> > diff --git a/Documentation/ABI/testing/sysfs-platform-intel-fpga-fme
>> b/Documentation/ABI/testing/sysfs-platform-intel-fpga-fme
>> > new file mode 100644
>> > index 0000000..783cfa9
>> > --- /dev/null
>> > +++ b/Documentation/ABI/testing/sysfs-platform-intel-fpga-fme
>> > @@ -0,0 +1,19 @@
>> > +What:          /sys/bus/platform/devices/intel-fpga-fme.0/ports_num
>> > +Date:          June 2017
>> > +KernelVersion:  4.12
>> > +Contact:       Wu Hao <hao.wu@intel.com>
>> > +Description:   Read-only. One Intel FPGA device may have more than 1
>> > +               port/Accelerator Function Unit (AFU). It returns the
>> > +               number of ports on the FPGA device when read it.
>> > +
>> > +What:          /sys/bus/platform/devices/intel-fpga-fme.0/bitstream_id
>> > +Date:          June 2017
>> > +KernelVersion:  4.12
>> > +Contact:       Wu Hao <hao.wu@intel.com>
>> > +Description:   Read-only. It returns Blue Bitstream identifier number.
>>
>> Here
>
> Will update this patch as below.
>
> +Description:   Read-only. It returns Blue Bitstream (static FPGA region)
> +               identifier number.
>
>>
>> > +
>> > +What:          /sys/bus/platform/devices/intel-fpga-fme.0/bitstream_meta
>> > +Date:          June 2017
>> > +KernelVersion:  4.12
>> > +Contact:       Wu Hao <hao.wu@intel.com>
>> > +Description:   Read-only. It returns Blue Bitstream meta data.
>>
>> And here
>
> Will update this patch as below.
>
> +Description:   Read-only. It returns Blue Bitstream (static FPGA region)
> +               meta data.
>
> Thanks
> Hao
--
To unsubscribe from this list: send the line "unsubscribe linux-fpga" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/Documentation/ABI/testing/sysfs-platform-intel-fpga-fme b/Documentation/ABI/testing/sysfs-platform-intel-fpga-fme
new file mode 100644
index 0000000..783cfa9
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-platform-intel-fpga-fme
@@ -0,0 +1,19 @@ 
+What:		/sys/bus/platform/devices/intel-fpga-fme.0/ports_num
+Date:		June 2017
+KernelVersion:  4.12
+Contact:	Wu Hao <hao.wu@intel.com>
+Description:	Read-only. One Intel FPGA device may have more than 1
+		port/Accelerator Function Unit (AFU). It returns the
+		number of ports on the FPGA device when read it.
+
+What:		/sys/bus/platform/devices/intel-fpga-fme.0/bitstream_id
+Date:		June 2017
+KernelVersion:  4.12
+Contact:	Wu Hao <hao.wu@intel.com>
+Description:	Read-only. It returns Blue Bitstream identifier number.
+
+What:		/sys/bus/platform/devices/intel-fpga-fme.0/bitstream_meta
+Date:		June 2017
+KernelVersion:  4.12
+Contact:	Wu Hao <hao.wu@intel.com>
+Description:	Read-only. It returns Blue Bitstream meta data.
diff --git a/drivers/fpga/intel-feature-dev.h b/drivers/fpga/intel-feature-dev.h
index 635b857..3f97b75 100644
--- a/drivers/fpga/intel-feature-dev.h
+++ b/drivers/fpga/intel-feature-dev.h
@@ -138,6 +138,9 @@  struct feature_fme_header {
 	u64 rsvd[2];
 	struct feature_fme_capability capability;
 	struct feature_fme_port port[MAX_FPGA_PORT_NUM];
+	u64 rsvd1;
+	u64 bitstream_id;
+	u64 bitstream_md;
 };
 
 /* FME Thermal Sub Feature Register Set */
diff --git a/drivers/fpga/intel-fme-main.c b/drivers/fpga/intel-fme-main.c
index c16cf81..dfbb17c 100644
--- a/drivers/fpga/intel-fme-main.c
+++ b/drivers/fpga/intel-fme-main.c
@@ -21,15 +21,70 @@ 
 
 #include "intel-feature-dev.h"
 
+static ssize_t ports_num_show(struct device *dev,
+			      struct device_attribute *attr, char *buf)
+{
+	struct feature_fme_header *fme_hdr
+		= get_feature_ioaddr_by_index(dev, FME_FEATURE_ID_HEADER);
+	struct feature_fme_capability fme_capability;
+
+	fme_capability.csr = readq(&fme_hdr->capability);
+
+	return scnprintf(buf, PAGE_SIZE, "%d\n", fme_capability.num_ports);
+}
+static DEVICE_ATTR_RO(ports_num);
+
+static ssize_t bitstream_id_show(struct device *dev,
+				 struct device_attribute *attr, char *buf)
+{
+	struct feature_fme_header *fme_hdr
+		= get_feature_ioaddr_by_index(dev, FME_FEATURE_ID_HEADER);
+	u64 bitstream_id = readq(&fme_hdr->bitstream_id);
+
+	return scnprintf(buf, PAGE_SIZE, "0x%llx\n",
+				(unsigned long long)bitstream_id);
+}
+static DEVICE_ATTR_RO(bitstream_id);
+
+static ssize_t bitstream_metadata_show(struct device *dev,
+				       struct device_attribute *attr, char *buf)
+{
+	struct feature_fme_header *fme_hdr
+		= get_feature_ioaddr_by_index(dev, FME_FEATURE_ID_HEADER);
+	u64 bitstream_md = readq(&fme_hdr->bitstream_md);
+
+	return scnprintf(buf, PAGE_SIZE, "0x%llx\n",
+				(unsigned long long)bitstream_md);
+}
+static DEVICE_ATTR_RO(bitstream_metadata);
+
+static const struct attribute *fme_hdr_attrs[] = {
+	&dev_attr_ports_num.attr,
+	&dev_attr_bitstream_id.attr,
+	&dev_attr_bitstream_metadata.attr,
+	NULL,
+};
+
 static int fme_hdr_init(struct platform_device *pdev, struct feature *feature)
 {
+	struct feature_fme_header *fme_hdr = feature->ioaddr;
+	int ret;
+
 	dev_dbg(&pdev->dev, "FME HDR Init.\n");
+	dev_dbg(&pdev->dev, "FME cap %llx.\n",
+				(unsigned long long)fme_hdr->capability.csr);
+
+	ret = sysfs_create_files(&pdev->dev.kobj, fme_hdr_attrs);
+	if (ret)
+		return ret;
+
 	return 0;
 }
 
 static void fme_hdr_uinit(struct platform_device *pdev, struct feature *feature)
 {
 	dev_dbg(&pdev->dev, "FME HDR UInit.\n");
+	sysfs_remove_files(&pdev->dev.kobj, fme_hdr_attrs);
 }
 
 struct feature_ops fme_hdr_ops = {