Intel Pensaernïaeth Gyrrwr Dyfais Linux OPAE FPGA
Pensaernïaeth Gyrrwr Dyfais Linux OPAE Intel FPGA
Mae gyrrwr OPAE Intel FPGA yn darparu rhyngwynebau ar gyfer cymwysiadau gofod defnyddiwr i ffurfweddu, rhifo, agor, a chael mynediad at gyflymwyr FPGA ar lwyfannau sydd â datrysiadau Intel FPGA ac yn galluogi swyddogaethau rheoli lefel system fel ad-drefnu FPGA, rheoli pŵer, a rhithwiroli.
Pensaernïaeth Caledwedd
O bwynt yr OS o view, mae caledwedd FPGA yn ymddangos fel dyfais PCIe rheolaidd. Trefnir cof dyfais FPGA gan ddefnyddio strwythur data wedi'i ddiffinio ymlaen llaw (Rhestr Nodweddion Dyfais). Mae nodweddion a gefnogir gan ddyfais FPGA yn cael eu hamlygu trwy'r strwythurau data hyn, fel y dangosir isod yn y ffigur canlynol:
Dyfais PCIe FPGA
Mae'r gyrrwr yn cefnogi PCIe SR-IOV i greu Swyddogaethau Rhithwir (VFs) y gellir eu defnyddio i aseinio cyflymyddion unigol i beiriannau rhithwir.
Intel Gorfforaeth. Cedwir pob hawl. Mae Intel, logo Intel, a nodau Intel eraill yn nodau masnach Intel Corporation neu ei is-gwmnïau. Mae Intel yn gwarantu perfformiad ei gynhyrchion FPGA a lled-ddargludyddion i fanylebau cyfredol yn unol â gwarant safonol Intel ond mae'n cadw'r hawl i wneud newidiadau i unrhyw gynhyrchion a gwasanaethau ar unrhyw adeg heb rybudd. Nid yw Intel yn cymryd unrhyw gyfrifoldeb nac atebolrwydd sy'n deillio o gymhwyso neu ddefnyddio unrhyw wybodaeth, cynnyrch neu wasanaeth a ddisgrifir yma ac eithrio fel y cytunwyd yn benodol yn ysgrifenedig gan Intel. Cynghorir cwsmeriaid Intel i gael y fersiwn ddiweddaraf o fanylebau dyfeisiau cyn dibynnu ar unrhyw wybodaeth gyhoeddedig a chyn archebu cynhyrchion neu wasanaethau.
Gellir hawlio enwau a brandiau eraill fel eiddo eraill.
Dyfais PCIe FPGA rhithwir
Peiriant Rheoli FPGA (FME)
Mae Peiriant Rheoli FPGA yn cyflawni rheolaeth pŵer a thermol, adrodd ar gamgymeriadau, ailgyflunio, adrodd ar berfformiad, a swyddogaethau seilwaith eraill. Mae gan bob FPGA un FME, y gellir ei gyrchu bob amser trwy'r Swyddogaeth Gorfforol (PF). Gall cymwysiadau gofod defnyddiwr gael mynediad unigryw i'r FME gan ddefnyddio Open(), a'i ryddhau gan ddefnyddio Close() fel defnyddiwr breintiedig (gwraidd).
Porthladd
Mae Porthladd yn cynrychioli'r rhyngwyneb rhwng y ffabrig FPGA statig (y “Rheolwr Rhyngwyneb FPGA (FIM)”) a rhanbarth y gellir ei ailgyflunio'n rhannol sy'n cynnwys Swyddogaeth Cyflymydd (AF). Mae'r Porthladd yn rheoli'r cyfathrebu o feddalwedd i'r cyflymydd ac yn datgelu nodweddion fel ailosod a dadfygio. Efallai y bydd gan ddyfais PCIe sawl Porthladd, a gall pob Porthladd gael ei amlygu trwy VF trwy ei aseinio gan ddefnyddio'r FPGA_FME_PORT_ASSIGN ioctl ar y ddyfais FME.
Uned Swyddogaeth Cyflymydd (FfG).
- Mae Uned Swyddogaeth Cyflymydd (AF) ynghlwm wrth Borthladd ac yn datgelu rhanbarth MMIO 256K i'w ddefnyddio ar gyfer cofrestrau rheoli cyflymydd-benodol.
- Gall cymwysiadau gofod defnyddiwr gael mynediad unigryw i AFU sydd ynghlwm wrth Borthladd trwy ddefnyddio Open() ar y ddyfais Port, a'i ryddhau gan ddefnyddio close().
- Gall cymwysiadau gofod defnyddiwr hefyd mmap() cyflymydd rhanbarthau MMIO.
Ailgyflunio Rhannol
Fel y soniwyd uchod, gellir ad-drefnu cyflymyddion trwy ail-gyflunio swyddogaeth Cyflymydd (FfG) yn rhannol. file. Mae'n rhaid bod y Swyddogaeth Cyflymydd (FfG) wedi'i chynhyrchu ar gyfer union FIM a rhanbarth sefydlog wedi'i dargedu (Porthladd) y FPGA; fel arall, bydd y gweithrediad ailgyflunio yn methu ac o bosibl yn achosi ansefydlogrwydd system. Gellir gwirio'r cydweddoldeb hwn trwy gymharu'r ID rhyngwyneb a nodir ym mhennyn y FfG â'r ID rhyngwyneb a ddatgelwyd gan yr FME trwy sysfs. Mae'r gwiriad hwn fel arfer yn cael ei wneud gan ofod defnyddiwr cyn galw'r ailgyfluniad IOCTL.
Nodyn:
Ar hyn o bryd, rhaid cau unrhyw raglen feddalwedd sy'n cyrchu'r FPGA, gan gynnwys y rhai sy'n rhedeg mewn gwesteiwr rhithwir, cyn ceisio ailgyflunio rhannol. Y camau fyddai:
- Dadlwythwch y gyrrwr o'r gwestai
- Tynnwch y plwg o'r VF o'r gwestai
- Analluogi SR-IOV
- Perfformio ad-drefnu rhannol
- Galluogi SR-IOV
- Plygiwch y VF i'r gwestai
- Llwythwch y gyrrwr yn y gwestai
Rhithwiroli FPGA
Er mwyn galluogi cyrchu cyflymydd o gymwysiadau sy'n rhedeg mewn VM, mae angen neilltuo porthladd yr AFU priodol i VF gan ddefnyddio'r camau canlynol:
- Mae'r PF yn berchen ar holl borthladdoedd AFU yn ddiofyn. Rhaid i unrhyw borth y mae angen ei ailbennu i VF gael ei ryddhau yn gyntaf o'r PF trwy'r ioctl FPGA_FME_PORT_RELEASE ar y ddyfais FME.
- Unwaith y bydd porthladdoedd N yn cael eu rhyddhau o'r PF, gellir defnyddio'r gorchymyn isod i alluogi SRIOV a VFs. Mae pob VF yn berchen ar un porthladd yn unig gydag AFU. adlais N > PCI_DEVICE_PATH/sriov_numvfs
- Ewch drwy'r VFs i VMs.
- Mae'r AFU o dan VF ar gael o gymwysiadau yn VM (gan ddefnyddio'r un gyrrwr y tu mewn i'r VF).
Nodyn:
Ni ellir neilltuo FME i VF, felly dim ond drwy'r PF y mae swyddogaethau cysylltiadau cyhoeddus a rheoli eraill ar gael.
Sefydliad Gyrwyr
Gyrrwr Dyfais Modiwl PCIe
Sefydliad Gyrwyr
Mae'r dyfeisiau FPGA yn ymddangos fel dyfeisiau PCIe rheolaidd; felly, mae gyrrwr dyfais FPGA PCIe (intel-FPGA-PCI.ko) bob amser yn cael ei lwytho'n gyntaf unwaith y canfyddir FPGA PCIe PF neu VF. Mae'r gyrrwr hwn yn chwarae rhan seilwaith ym mhensaernïaeth y gyrrwr. Mae'n:
- Yn creu dyfais cynhwysydd FPGA fel rhiant y dyfeisiau nodwedd.
- Yn cerdded trwy'r Rhestr Nodweddion Dyfais, sy'n cael ei weithredu mewn cof BAR dyfais PCIe, i ddarganfod dyfeisiau nodwedd a'u his-nodweddion a chreu dyfeisiau platfform ar eu cyfer o dan y ddyfais cynhwysydd.
- Yn cefnogi SR-IOV.
- Yn cyflwyno'r seilwaith dyfais nodwedd, sy'n crynhoi gweithrediadau ar gyfer is-nodweddion ac yn datgelu swyddogaethau cyffredin i yrwyr dyfais nodwedd.
Swyddogaethau Gyrrwr Dyfais Modiwl PCIe
- Yn cynnwys darganfyddiad PCIe, cyfrif dyfais, a darganfod nodwedd.
- Yn creu cyfeiriaduron sysfs ar gyfer y ddyfais rhiant, FPGA Management Engine (FME), a Port.
- Yn creu'r achosion gyrrwr platfform, gan achosi i'r cnewyllyn Linux lwytho eu gyrwyr modiwl platfform priodol.
Gyrrwr Dyfais Modiwl Llwyfan FME
- Rheoli pŵer a thermol, adrodd ar gamgymeriadau, adrodd ar berfformiad, a swyddogaethau seilwaith eraill. Gallwch gael mynediad at y swyddogaethau hyn trwy ryngwynebau sysfs a ddatgelir gan y gyrrwr FME.
- Ailgyflunio Rhannol. Mae'r gyrrwr FME yn cofrestru Rheolwr FPGA yn ystod cychwyniad is-nodwedd PR; unwaith y bydd yn derbyn ioctl FPGA_FME_PORT_PR gennych chi, mae'n galw ar y swyddogaeth rhyngwyneb cyffredin gan Reolwr FPGA i gwblhau'r ad-drefnu rhannol o'r llif did i'r Porth a roddir.
- Rheoli porthladdoedd ar gyfer rhithwiroli. Mae'r gyrrwr FME yn cyflwyno dau ioctls, FPGA_FME_PORT_RELEASE, sy'n rhyddhau'r Porth a roddir o PF; a FPGA_FME_PORT_ASSIGN, sy'n aseinio'r Porth yn ôl i PF. Unwaith y bydd y Porthladd yn cael ei ryddhau o'r PF, gellir ei neilltuo i'r VF trwy'r rhyngwynebau SR-IOV a ddarperir gan y gyrrwr PCIe. Am ragor o wybodaeth, cyfeiriwch at “FPGA Virtualization”.
Swyddogaethau Gyrrwr Dyfais Modiwl Llwyfan FME
- Yn creu nod dyfais nodau FME.
- Yn creu'r sysfs FME files ac yn gweithredu'r sysfs FME file mynediadwyr.
- Yn gweithredu'r is-yrwyr nodwedd breifat FME.
- Is-yrwyr nodwedd breifat FME:
- Pennawd FME
- Rheolaeth Thermol
- Rheoli Pŵer
- Gwall Byd-eang
- Ailgyflunio Rhannol
- Perfformiad Byd-eang
Gyrrwr Dyfais Modiwl Llwyfan Porthladd
Yn debyg i'r gyrrwr FME, caiff gyrrwr FPGA Port (ac AFU) (intel-fpga-afu. ko) ei archwilio unwaith y bydd dyfais platfform Port yn cael ei chreu. Prif swyddogaeth y modiwl hwn yw darparu rhyngwyneb ar gyfer cymwysiadau gofod defnyddiwr i gael mynediad at y cyflymyddion unigol, gan gynnwys rheolaeth ailosod sylfaenol ar Port, allforio rhanbarth AFU MMIO, gwasanaeth mapio byffer DMA, hysbysiad UMsg(1), a swyddogaethau dadfygio o bell ( gweler uchod).
Dim ond trwy Acceleration Stack ar gyfer Prosesydd Intel Xeon® gyda FPGA Integredig y cefnogir UMsg.
Swyddogaethau Gyrrwr Dyfais Modiwl Llwyfan Porthladd
- Yn creu nod dyfais cymeriad Port.
- Yn creu'r sysfs Port files ac yn gweithredu'r sysfs Port file mynediadwyr.
- Yn gweithredu is-yrwyr nodwedd breifat Port.
- Porthladd is-yrwyr nodwedd breifat:
- Pennawd Porthladd
- AFU
- Gwall Porth
- UMsg(2)
- Tap Signal
Cais Rhif Dyfais FPGA
Mae'r adran hon yn cyflwyno sut mae cymwysiadau'n rhifo'r ddyfais FPGA o'r hierarchaeth sysfs o dan /sys/class/fpga. Yn y cynampIsod, mae dau ddyfais Intel FPGA wedi'u gosod yn y gwesteiwr. Mae gan bob dyfais FPGA un FME a dau Borthladd (AFU). Ar gyfer pob dyfais FPGA, crëir cyfeiriadur dyfais o dan / sys/class/fpga:
/sys/class/fpga/intel-fpga-dev.0
/sys/class/fpga/intel-fpga-dev.1
Mae gan bob nod un FME a dau Borthladd (AFUs) fel dyfeisiau plant:
/sys/class/fpga/intel-fpga-dev.0/intel-fpga-fme.0
/sys/class/fpga/intel-fpga-dev.0/intel-fpga-port.0
/sys/class/fpga/intel-fpga-dev.0/intel-fpga-port.1
/sys/class/fpga/intel-fpga-dev.1/intel-fpga-fme.1
/sys/class/fpga/intel-fpga-dev.1/intel-fpga-port.2
/sys/class/fpga/intel-fpga-dev.1/intel-fpga-port.3
Yn gyffredinol, enwir y rhyngwynebau FME/Port sysfs fel a ganlyn:
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-fme.j/
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-port.k/
ac yr wyf yn rhifo'r holl ddyfeisiau cynwysyddion yn olynol, j yn rhifo'r FME's yn olynol ac k yn rhifo'r holl Borthladdoedd yn olynol.
Gellir cyfeirio at y nodau dyfais a ddefnyddir ar gyfer ioctl () a mmap () trwy:
/dev/intel-fpga-fme.j
/dev/intel-fpga-port.k
Rhif Gyrwyr PCIe
Mae'r adran hon yn rhoi gormodview o'r llif cod ar gyfer cyfrifo dyfeisiau a berfformir gan intel-fpga-pci.ko. Amlygir y prif strwythurau data a swyddogaethau. Mae'n well dilyn yr adran hon pryd viewing y cod ffynhonnell sy'n cyd-fynd (pcie.c).
Strwythurau Data Rhif
enum fpga_id_type {
PARENT_ID,
FME_ID,
PORT_ID,
FPGA_ID_MAX
};
strwythur statig idr fpga_ids[FPGA_ID_MAX];
strwythur fpga_chardev_info {
torgoch const *enw;
dev_t devt;
};
strwythur fpga_chardev_info fpga_chrdevs[] = {
{ .name = FPGA_FEATURE_DEV_FME } ,
{ .name = FPGA_FEATURE_DEV_PORT } ,
};
dosbarth strwythur statig *fpga_class;
strwythur statig pci_device_id cci_pcie_id_tbl[] = {
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_RCiEP0_MCP),},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_VF_MCP),},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_RCiEP0_SKX_P),},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_VF_SKX_P),},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_RCiEP0_DCP),},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_VF_DCP),},
{0,}
};
strwythur statig pci_driver cci_pci_driver = {
.name = DRV_NAME ,
.id_table = cci_pcie_id_tbl,
.probe = cci_pci_probe,
.remove = cci_pci_remove,
.sriov_configure = cci_pci_sriov_configure
};
strwythur cci_drvdata {
int device_id;
dyfais strwythur *fme_dev;
struct clo mutex;
struct list_head port_dev_list;
int released_port_num;
strwythuro rhanbarthau list_head;
};
strwythuro build_feature_devs_info {
strwythur pci_dev *pdev;
gwag __iomem *ioaddr;
gwag __iomem *ioend;
int current_bar;
gwag __iomem *pfme_hdr;
dyfais strwythur *parent_dev;
strwythuro platform_device *feature_dev;
};
Llif Rhif
- ccidrv_init()
- Cychwyn fpga_ids gan ddefnyddio idr_init().
- Cychwyn fpga_chrdevs[i].devt gan ddefnyddio alloc_chrdev_region().
- Cychwyn fpga_class gan ddefnyddio class_create().
- pci_register_driver(&cci_pci_driver);
- cci_pci_probe()
- Galluogi'r ddyfais PCI, gofyn am fynediad i'w ranbarthau, gosod prif fodd PCI, a ffurfweddu DMA.
- cci_pci_create_feature_devs() build_info_alloc_and_init()
- Dyrannu struct build_feature_devs_info, ei gychwyn.
Mae .parent_dev wedi'i osod i gyfeiriadur sysfs rhiant (intel-fpga-dev.id) sy'n cynnwys y cyfeiriaduron FME a Port sysfs.
- Dyrannu struct build_feature_devs_info, ei gychwyn.
- dosrannu_nodwedd_rhestr()
- Cerddwch ar Restr Nodweddion Dyfeisiau BAR0 i ddarganfod y FME, y Porthladd, a'u nodweddion preifat.
- dosrannu_feature() dosrannu_feature_afus() parse_feature_fme()
- Pan deuir ar draws FME:
- adeiladu_info_creu_dev()
- Neilltuo dyfais platfform ar gyfer y FME, gan storio build_feature_devs_info.feature_dev.
- nodwedd_dev.id wedi'i gychwyn i ganlyniad idr_alloc(fpga_ids[FME_ID],
- Mae feature_dev.parent wedi'i osod i build_feature_devs_info.parent_dev.
- Neilltuo amrywiaeth o adnoddau strwythur yn feature_dev.resource.
- Dyrannu nodwedd_platform_data struct, ei gychwyn, a storio pwyntydd yn nodwedd_dev.dev.platform_data
- create_feature_instance() build_info_add_sub_feature()
- Cychwyn nodwedd_dev.resource[FME_FEATURE_ID_HEADER].
- nodwedd_platform_data_ychwanegu()
- Cychwyn nodwedd_platform_data.features[FME_FEATURE_ID_HEADER], popeth ond .fops.
- parse_feature() parse_feature_afus() parse_feature_port()
- Pan deuir ar draws Porthladd:
- adeiladu_info_creu_dev()
- Neilltuo dyfais llwyfan ar gyfer y Porth, storio yn build_feature_devs_info.feature_dev.
- nodwedd_dev.id wedi'i gychwyn i ganlyniad idr_alloc(fpga_ids[PORT_ID],
- Mae feature_dev.parent wedi'i osod i build_feature_devs_info.parent_dev.
- Neilltuo amrywiaeth o adnoddau strwythur yn feature_dev.resource.
- Dyrannu nodwedd_platform_data struct, ei gychwyn, a storio pwyntydd yn nodwedd_dev.dev.platform_data
- adeiladu_info_commit_dev()
- Ychwanegwch y nodwedd struct_platform_data.node ar gyfer y Porth i'r rhestr o Borthladdoedd yn struct cci_drvdata.port_dev_list
- create_feature_instance() build_info_add_sub_feature()
- Cychwyn nodwedd_dev.resource[PORT_FEATURE_ID_HEADER].
- nodwedd_platform_data_ychwanegu()
- Cychwyn nodwedd_platform_data.features[PORT_FEATURE_ID_HEADER], popeth ond .fops.
- dosrannu_feature() dosrannu_feature_afus() parse_feature_port_uafu()
- Pan deuir ar draws AFU:
- create_feature_instance() build_info_add_sub_feature()
- Cychwyn nodwedd_dev.resource[PORT_FEATURE_ID_UAFU].
- nodwedd_platform_data_ychwanegu()
- Cychwyn nodwedd_platform_data.features[PORT_FEATURE_ID_UAFU], popeth ond .fops.
- dosrannu_feature() dosrannu_feature_private() parse_feature_fme_private()
- Pan deuir ar draws nodwedd breifat FME:
- create_feature_instance() build_info_add_sub_feature()
- Cychwyn nodwedd_dev.resource[id].
- nodwedd_platform_data_ychwanegu()
- Cychwyn nodwedd_platform_data.features[id], popeth ond .fops.
- parse_feature() dosrannu_feature_private() parse_feature_port_private()
- Pan deuir ar draws nodwedd breifat Port: * create_feature_instance() build_info_add_sub_feature() * Cychwyn nodwedd_dev.resource[id]. * feature_platform_data_add() Cychwyn nodwedd_platform_data.features[id], popeth ond .fops.
- dosrannu_porthoedd_o_fme()
- Os yw'r gyrrwr wedi'i lwytho ar y Swyddogaeth Gorfforol (PF), yna:
- Rhedeg y llif parse_feature_list() ar bob porth a ddisgrifir yn y pennyn FME.
- Defnyddiwch y BAR a grybwyllir ym mhob cofnod Porthladd yn y pennyn.
Cychwyn Dyfais Llwyfan FME
Mae'r adran hon yn rhoi gormodview o'r llif cod ar gyfer cychwyn dyfais FME a gyflawnir gan intel-fpga-fme.ko. Mae'r prif strwythurau data a swyddogaethau wedi'u hamlygu. Mae'n well dilyn yr adran hon pryd viewy cod ffynhonnell sy'n cyd-fynd (fme-main.c).
Strwythurau Data Dyfais Llwyfan FME
strwythuro nodwedd_ops {
int (*init)(struct platform_device *pdev, struct nodwedd * nodwedd);
int (* uinit)(struct platform_device *pdev, struct nodwedd * nodwedd);
hir (* ioctl) (struct platform_device *pdev, nodwedd strwythur * nodwedd,
int cmd heb ei arwyddo, arg hir heb ei arwyddo);
int (*prawf)(struct platform_device *pdev, nodwedd strwythur * nodwedd);
};
nodwedd strwythur {
torgoch const *enw;
int resource_index;
gwag __iomem *ioaddr;
strwythuro feature_ops *ops;
};
strwythuro nodwedd_platform_data {
struct nod list_head;
struct clo mutex;
dev_status hir heb ei lofnodi;
struct cdev cdev;
struct platform_device *dev;
int disable_count heb ei lofnodi;
gwag *preifat;
int num;
int (*config_port)(struct platform_device *, u32, bool);
strwythuro platform_device *(* fpga_for_each_port)(struct platform_device *,
gwagle *, int (*match)(struct platform_device *, gwag *)); strwythur
nodweddion nodwedd[0];
};
strwythuro perf_object {
id id;
const struct attribute_group **attr_groups;
dyfais strwythur *fme_dev;
struct nod list_head;
struct list_head plant;
struct kobject kobj;
};
strwythur fpga_fme {
u8 porth_id;
u64 pr_err;
dyfais strwythur *dev_err;
strwythuro perf_object *perf_dev;
strwythuro nodwedd_platform_data *pdata;
};
Llif Cychwyn Dyfais Llwyfan FME
Llif Cychwynnol FME
- fme_probe() fme_dev_init()
- Cychwynnwch strwythur fpga_fme a'i storio yn y maes feature_platform_data.private.
- fme_probe() fpga_dev_feature_init() feature_instance_init()
- Cadwch nodwedd_ops struct yn y feature_platform_data.features ar gyfer pob nodwedd boblog.
- Ffoniwch y swyddogaeth prawf, os o gwbl, o'r strwythur.
- Ffoniwch y swyddogaeth init o'r strwythur.
- fme_probe() fpga_register_dev_ops()
- Creu nod dyfais nodau FME, gan gofrestru strwythur file_gweithrediadau.
Cychwyn Dyfais Llwyfan Porthladd
Mae'r adran hon yn rhoi gormodview o'r llif cod ar gyfer cychwyn dyfais porthladd a berfformir gan intel-fpga-afu.ko. Amlygir y prif strwythurau data a swyddogaethau. Mae'n well dilyn yr adran hon pryd viewing y cod ffynhonnell sy'n cyd-fynd (afu.c).
Strwythurau Data Dyfais Llwyfan Porthladd
strwythuro nodwedd_ops {
int (*init)(struct platform_device *pdev, struct nodwedd * nodwedd);
int (* uinit)(struct platform_device *pdev, struct nodwedd * nodwedd);
hir (* ioctl) (struct platform_device *pdev, nodwedd strwythur * nodwedd,
int cmd heb ei arwyddo, arg hir heb ei arwyddo);
int (*prawf)(struct platform_device *pdev, nodwedd strwythur * nodwedd);
};
nodwedd strwythur {
torgoch const *enw;
int resource_index;
gwag __iomem *ioaddr;
strwythuro feature_ops *ops;
};
strwythuro nodwedd_platform_data {
struct nod list_head;
struct clo mutex;
dev_status hir heb ei lofnodi;
struct cdev cdev;
struct platform_device *dev;
int disable_count heb ei lofnodi;
gwag *preifat;
int num;
int (*config_port)(struct platform_device *, u32, bool);
strwythuro platform_device *(* fpga_for_each_port)(struct platform_device *,
gwagle *, int (*match)(struct platform_device *, gwag *));
strwythuro nodweddion nodwedd[0];
};
strwythur fpga_afu_region {
mynegai u32;
u32 baneri;
maint u64;
gwrthbwyso u64;
u64 phys;
struct nod list_head;
};
strwythur fpga_afu_dma_region {
u64 defnyddiwr_addr;
u64 hyd;
u64 iova;
strwythuro tudalen **tudalennau;
strwythur rb_node nod;
bool in_use;
};
strwythur fpga_afu {
u64 region_cur_offset;
int num_regions;
u8 num_umsgs;
strwythuro rhanbarthau list_head;
strwythuro rb_root dma_regions;
strwythuro nodwedd_platform_data *pdata;
};
Llif Cychwyn Dyfais Llwyfan Porthladd
Llif Cychwyn Porthladd
- afu_probe() afu_dev_init()
- Cychwynnwch strwythur fpga_afu a'i storio yn y maes feature_platform_data.private.
- afu_probe() fpga_dev_feature_init() feature_instance_init()
- Cadwch nodwedd_ops struct yn y feature_platform_data.features ar gyfer pob nodwedd boblog.
- Ffoniwch y swyddogaeth prawf, os o gwbl, o'r strwythur.
- Ffoniwch y swyddogaeth init o'r strwythur.
- afu_probe() fpga_register_dev_ops()
- Creu nod dyfais cymeriad Port, gan gofrestru strwythur file_gweithrediadau.
IOCTLs FME
IOCTLs sy'n cael eu galw ar agor file disgrifydd ar gyfer /dev/intel-fpga-fme.j FPGA_GET_API_VERSION—dychwelwch y fersiwn gyfredol fel cyfanrif, gan ddechrau o 0.
FPGA_CHECK_EXTENSION - heb ei gefnogi ar hyn o bryd.
FPGA_FME_PORT_RELEASE—mae arg yn bwyntydd i:
strwythuro fpga_fme_port_release {
__u32 argsz; // yn: sizeof (strwythur fpga_fme_port_release)
__u32 baneri; // mewn : rhaid fod 0
__u32 porthladd_id; // yn: ID porthladd (o 0) i ryddhau.
};
FPGA_FME_PORT_ASSIGN — mae arg yn bwyntydd i:
strwythuro fpga_fme_port_assign {
__u32 argsz; // yn: sizeof (strwythur fpga_fme_port_assign)
__u32 baneri; // mewn : rhaid fod 0
__u32 porthladd_id; // yn: ID porthladd (o 0) i neilltuo. (rhaid bod
a ryddhawyd yn flaenorol gan FPGA_FME_PORT_RELEASE)
};
FPGA_FME_PORT_PR — mae arg yn bwyntydd i:
strwythur fpga_fme_port_pr {
__u32 argsz; // yn: sizeof (strwythur fpga_fme_port_pr)
__u32 baneri; // mewn : rhaid fod 0
__u32 porthladd_id; // yn: ID porthladd (o 0)
__u32 byffer_size; // in: maint byffer bitstream mewn bytes. Rhaid bod yn 4-beit
alinio.
__u64 cyfeiriad byffer; // yn: cyfeiriad proses y byffer bitstream
statws __u64; // allan: statws gwall (bitmask)
};
Porthladd IOCTLs
IOCTLs sy'n cael eu galw ar agor file disgrifydd ar gyfer /dev/intel-fpga-port.k FPGA_GET_API_VERSION—dychwelwch y fersiwn gyfredol fel cyfanrif, gan ddechrau o 0. FPGA_CHECK_EXTENSION - heb ei gynnal ar hyn o bryd.
FPGA_PORT_GET_INFO — mae arg yn bwyntydd i:
strwythur fpga_port_info {
__u32 argsz; // yn: sizeof (strwythur fpga_port_info)
__u32 baneri; // allan: yn dychwelyd 0
__u32 num_rhanbarthau; // allan: nifer y rhanbarthau MMIO, 2 (1 ar gyfer AFU ac 1 ar gyfer
STP)
__u32 num_umsgs; // allan: nifer y UMsg's a gefnogir gan y caledwedd
};
FPGA_PORT_GET_REGION_INFO — mae arg yn bwyntydd i:
strwythuro fpga_port_region_info {
__u32 argsz; // yn: sizeof (strwythur fpga_port_region_info)
__u32 baneri; // allan: (masg did) { FPGA_REGION_READ, FPGA_REGION_WRITE,
FPGA_REGION_MMAP }
mynegai __u32; // yn: FPGA_PORT_INDEX_UAFU neu FPGA_PORT_INDEX_STP
padin __u32; // mewn : rhaid fod 0
maint __u64; // allan: maint y rhanbarth MMIO mewn bytes
__u64 gwrthbwys; // allan: gwrthbwyso rhanbarth MMIO o ddechrau'r ddyfais fd
};
FPGA_PORT_DMA_MAP — mae arg yn bwyntydd i:
strwythur fpga_port_dma_map {
__u32 argsz; // yn: sizeof (strwythur fpga_port_dma_map)
__u32 baneri; // mewn: rhaid bod yn 0 __u64 user_addr; // in: proses rhithwir
cyfeiriad. Rhaid alinio tudalen.
__u64 hyd; // in: hyd y mapio mewn bytes. Rhaid bod yn lluosrif o dudalen
maint.
__u64 iova; // allan: IO cyfeiriad rhithwir };
FPGA_PORT_DMA_UNMAP — mae arg yn bwyntydd i:
strwythur fpga_port_dma_unmap {
__u32 argsz; // yn: sizeof (strwythur fpga_port_dma_unmap)
__u32 baneri; // mewn : rhaid fod 0
__u64 iova; // in: IO cyfeiriad rhithwir wedi'i ddychwelyd gan un blaenorol
FPGA_PORT_DMA_MAP } ;
- FPGA_PORT_RESET—Rhaid i arg fod yn NULL.
- FPGA_PORT_UMSG_ENABLE—rhaid bod yn NULL.
- FPGA_PORT_UMSG_DISABLE — rhaid i argiau fod yn NULL.
FPGA_PORT_UMSG_SET_MODE — mae arg yn bwyntydd i:
strwythur fpga_port_umsg_cfg {
__u32 argsz; // yn: sizeof (strwythur fpga_port_umsg_cfg)
__u32 baneri; // mewn : rhaid fod 0
__u32 awgrym_bitmap; // in: UMsg hint mode bitmap. Yn dynodi pa rai yw UMsg
galluogi.
};
FPGA_PORT_UMSG_SET_BASE_ADDR —
- Rhaid analluogi UMsg cyn cyhoeddi'r ioctl hwn.
- Rhaid i'r cae iova fod ar gyfer byffer sy'n ddigon mawr i holl UMsg (num_umsgs *PAGE_SIZE).
- Mae'r byffer wedi'i farcio fel un “yn cael ei ddefnyddio” gan reolwyr byffer y gyrrwr.
- Os yw iova yn NULL, mae unrhyw ranbarth blaenorol heb ei farcio fel un “mewn defnydd”.
- Mae arg yn bwyntydd i:
strwythur fpga_port_umsg_base_addr {- u32 argsz; // yn: sizeof (strwythur fpga_port_umsg_base_addr)
- u32 baneri; // mewn : rhaid fod 0
- u64 iova; // yn: cyfeiriad rhithwir IO o FPGA_PORT_DMA_MAP. };
Nodyn:
- I glirio'r gwallau porthladd, mae'n rhaid i chi ysgrifennu'r union fasg did o'r gwallau cyfredol, ar gyfer example, gwallau cath > clir
- Dim ond trwy Acceleration Stack ar gyfer Prosesydd Intel Xeon gyda FPGA Integredig y cefnogir UMsg.
sysfs Files
sysfs Pennawd FME files
intel-fpga-dev.i/intel-fpga-fme.j/
sysfs file | maes mmio | math | mynediad |
porthladd_num | fme_header.capability.num_ports | int degol | Darllen-yn-unig |
maint_celc | fme_header.capability.cache_size | int degol | Darllen-yn-unig |
fersiwn | fme_header.capability.fabric_verid | int degol | Darllen-yn-unig |
soced_id | fme_header.capability.socket_id | int degol | Darllen-yn-unig |
bitstream_id | fme_header.bitstream_id | hecs uint64_t | Darllen-yn-unig |
bitstream_metadata | fme_header.bitstream_md | hecs uint64_t | Darllen-yn-unig |
sysfs Rheolaeth Thermol FME files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/
sysfs file | maes mmio | math | mynediad |
trothwy1 | thermol.trothwy.tmp_thshold1 | int degol | Defnyddiwr: Darllen-yn-unig Gwraidd: Darllen-ysgrifennu |
trothwy2 | thermol.trothwy.tmp_thshold2 | int degol | Defnyddiwr: Darllen-yn-unig Gwraidd: Darllen-ysgrifennu |
trothwy_trip | thermal.threshold.therm_trip_thshold | int degol | Darllen-yn-unig |
trothwy1_cyrraedd | thermol.trothwy.thshold1_status | int degol | Darllen-yn-unig |
trothwy2_cyrraedd | thermol.trothwy.thshold2_status | int degol | Darllen-yn-unig |
trothwy1_polisi | thermol. trothwy.thshold_policy | int degol | Defnyddiwr: Darllen-yn-unig Gwraidd: Darllen-ysgrifennu |
tymheredd | thermal.rdsensor_fm1.fpga_temp | int degol | Darllen-yn-unig |
sysfs Rheoli Pŵer FME files
intel-fpga-dev.i/intel-fpga-fme.j/power_mgmt/
sysfs file | maes mmio | math | mynediad |
bwyta | pwer.status.pwr_consumed | hecs uint64_t | Darllen-yn-unig |
trothwy1 | grym.trothwy.trothwy1 | hecs uint64_t | Defnyddiwr: Darllen-yn-unig Gwraidd: Darllen-ysgrifennu |
trothwy2 | grym.trothwy.trothwy2 | hecs uint64_t | Defnyddiwr: Darllen-yn-unig Gwraidd: Darllen-ysgrifennu |
trothwy1_statws | pwer.trothwy.trothwy1_statws | degol heb ei lofnodi | Darllen-yn-unig |
trothwy2_statws | pwer.trothwy.trothwy2_statws | degol heb ei lofnodi | Darllen-yn-unig |
rtl | power.status.fpga_latency_report | degol heb ei lofnodi | Darllen-yn-unig |
sysfs Gwall Byd-eang FME files
intel-fpga-dev.i/intel-fpga-fme.j/errors/
sysfs file | maes mmio | math | mynediad |
pcie0_gwallau | gerror.pcie0_err | hecs uint64_t | Darllen-ysgrifennu |
pcie1_gwallau | gerror.pcie1_err | hecs uint64_t | Darllen-ysgrifennu |
chwistrell_gwall | gerror.ras_error_inj | hecs uint64_t | Darllen-ysgrifennu |
intel-fpga-dev.i/intel-fpga-fme.j/errors/fme-errors/
sysfs file | maes mmio | math | mynediad |
gwallau | gerror.fme_err | hecs uint64_t | Darllen-yn-unig |
gwall_cyntaf | gerror.fme_first_err.err_reg_status | hecs uint64_t | Darllen-yn-unig |
gwall_nesaf | gerror.fme_next_err.err_reg_status | hecs uint64_t | Darllen-yn-unig |
clir | Yn clirio gwallau, first_error, next_error | amrywiol uint64_t | Ysgrifennu yn unig |
Nodyn:
I glirio'r gwallau FME, rhaid i chi ysgrifennu'r union fasg did o'r gwallau cyfredol, ar gyfer example cat gwallau > clir.
sysfs Ailgyflunio Rhannol FME files
intel-fpga-dev.i/intel-fpga-fme.j/pr/
sysfs file | maes mmio | math | mynediad |
rhyngwyneb_id | pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l | hecs 16-beit | Darllen-yn-unig |
sysfs Perfformiad Byd-eang FME files
intel-fpga-dev.i/intel-fpga-fme.j/dperf/clock
sysfs file | maes mmio | math | mynediad |
cloc | gperf.clk.afu_interf_clock | hecs uint64_t | Darllen-yn-unig |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (Ddim yn ddilys ar gyfer Acceleration Stack ar gyfer CPU Intel Xeon gyda FPGAs)
sysfs file | maes mmio | math | mynediad |
rhewi | gperf.ch_ctl.rhewi | int degol | Darllen-ysgrifennu |
darllen_taro | gperf.CACHE_RD_HIT | hecs uint64_t | Darllen-yn-unig |
darllen_colli | gperf.CACHE_RD_MISS | hecs uint64_t | Darllen-yn-unig |
ysgrifennu_taro | gperf.CACHE_WR_HIT | hecs uint64_t | Darllen-yn-unig |
ysgrifennu_colli | gperf.CACHE_WR_MISS | hecs uint64_t | Darllen-yn-unig |
dal_cais | gperf.CACHE_HOLD_REQ | hecs uint64_t | Darllen-yn-unig |
tx_req_stall | gperf.CACHE_TX_REQ_STALL | hecs uint64_t | Darllen-yn-unig |
sysfs file | maes mmio | math | mynediad |
rx_req_stall | gperf.CACHE_RX_REQ_STALL | hecs uint64_t | Darllen-yn-unig |
data_write_port_contention | gperf.CACHE_DATA_WR_PORT_CONTEN | hecs uint64_t | Darllen-yn-unig |
tag_ysgrifennu_port_cynnwys | gperf.CACHE_TAG_WR_PORT_CONTEN | hecs uint64_t | Darllen-yn-unig |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (Ddim yn ddilys ar gyfer Cyflymiad Stack ar gyfer CPU Intel Xeon gyda FPGAs)
sysfs file | maes mmio | math | mynediad |
rhewi | gperf.vtd_ctl.freeze | int degol | Defnyddiwr: Darllen-yn-unig Gwraidd: Darllen-ysgrifennu |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (Ddim yn ddilys ar gyfer Cyflymiad Stack ar gyfer CPU Intel Xeon gyda FPGAs)
sysfs file | maes mmio | math | mynediad |
darllen_trafodiad | gperf.VTD_AFU0_MEM_RD_TRANS | hecs uint64_t | Darllen-yn-unig |
ysgrifennu_trafodiad | gperf.VTD_AFU0_MEM_WR_TRANS | hecs uint64_t | Darllen-yn-unig |
tlb_read_hit | gperf.VTD_AFU0_TLB_RD_HIT | hecs uint64_t | Darllen-yn-unig |
tlb_write_taro | gperf.VTD_AFU0_TLB_WR_HIT | hecs uint64_t | Darllen-yn-unig |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/fabric/
sysfs file | maes mmio | math | mynediad |
galluogi | gperf.fab_ctl.(galluogi) | int degol | Defnyddiwr: Darllen-yn-unig Gwraidd: Darllen-ysgrifennu |
rhewi | gperf.fab_ctl.freeze | int degol | Defnyddiwr: Darllen-yn-unig Gwraidd: Darllen-ysgrifennu |
pcie0_darllen | gperf.FAB_PCIE0_RD | hecs uint64_t | Darllen-yn-unig |
pcie0_ysgrifennu | gperf.FAB_PCIE0_WR | hecs uint64_t | Darllen-yn-unig |
pcie1_darllen | gperf.FAB_PCIE1_RD | hecs uint64_t | Darllen-yn-unig |
pcie1_ysgrifennu | gperf.FAB_PCIE1_WR | hecs uint64_t | Darllen-yn-unig |
upi_darllen | gperf.FAB_UPI_RD | hecs uint64_t | Darllen-yn-unig |
upi_ysgrifennu | gperf.FAB_UPI_WR | hecs uint64_t | Darllen-yn-unig |
intel-fpga-ev.i/intel-fpga/fme.j/dperf/fabric/portk/
sysfs file | maes mmio | math | mynediad |
pcie0_darllen | gperf.FAB_PCIE0_RD | hecs uint64_t | Darllen-yn-unig |
pcie0_ysgrifennu | gperf.FAB_PCIE0_WR | hecs uint64_t | Darllen-yn-unig |
pcie1_darllen | gperf.FAB_PCIE1_RD | hecs uint64_t | Darllen-yn-unig |
pcie1_ysgrifennu | gperf.FAB_PCIE1_WR | hecs uint64_t | Darllen-yn-unig |
upi_darllen | gperf.FAB_UPI_RD | hecs uint64_t | Darllen-yn-unig |
upi_ysgrifennu | gperf.FAB_UPI_WR | hecs uint64_t | Darllen-yn-unig |
sysfs Pennawd Porth files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | maes mmio | math | mynediad |
id | port_header.capability.port_number | int degol | Darllen-yn-unig |
ltr | port_header.control.latency_goddefgarwch | int degol | Darllen-yn-unig |
sysfs Pennawd Port AFU files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | maes mmio | math | mynediad |
afu_id | afu_header.guid | hecs 16-beit | Darllen-yn-unig |
sysfs Gwall Porth files
intel-fpga-dev.i/intel-fpga-port.k/errors/
sysfs file | maes mmio | math | mynediad |
gwallau | gwall.port_error | hecs uint64_t | Darllen-yn-unig |
gwall_cyntaf | perror.port_first_error | hecs uint64_t | Darllen-yn-unig |
cyntaf_camffurf_req | perer.malreq | hecs 16-beit | Darllen-yn-unig |
clir | gwall. (pob gwall) | amrywiol uint64_t | Ysgrifennu yn unig |
Nodyn:
I glirio'r gwallau Port, rhaid i chi ysgrifennu'r mysg didau union y gwallau presennol, ar gyfer example cat gwallau > clir.
Hanes Adolygu
Fersiwn y Ddogfen | Newidiadau |
2017.10.02 | Rhyddhad Cychwynnol. |
Canllaw Pensaernïaeth Gyrwyr Dyfais OPAE Intel FPGA Linux
Dogfennau / Adnoddau
![]() |
Intel Pensaernïaeth Gyrrwr Dyfais Linux OPAE FPGA [pdfCanllaw Defnyddiwr Pensaernïaeth Gyrrwr Dyfais Linux OPAE FPGA, OPAE FPGA, Pensaernïaeth Gyrrwr Dyfais Linux, Pensaernïaeth Gyrwyr, Pensaernïaeth |