Message ID | 1498441938-14046-13-git-send-email-hao.wu@intel.com (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
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
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
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 --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 = {