intel-lógó

Intel OPAE FPGA Ailtireacht Tiománaí Gléas Linux

intel-OPAE-FPGA-Linux-Device-Driver-Ailtireacht-táirge

Ailtireacht Tiománaí Gléas OPAE Intel FPGA Linux

Soláthraíonn tiománaí OPAE Intel FPGA comhéadain d'fheidhmchláir spáis úsáideora chun luasairí FPGA a chumrú, a áireamh, a oscailt agus a rochtain ar ardáin atá feistithe le réitigh Intel FPGA agus cuireann sé ar chumas feidhmeanna bainistíochta ar leibhéal an chórais mar athchumrú FPGA, bainistíocht cumhachta, agus fíorúlú.

Ailtireacht Crua-earraí

Ó thaobh an OS de view, is cosúil go bhfuil crua-earraí FPGA mar fheiste PCIe rialta. Eagraítear cuimhne feiste FPGA ag baint úsáide as struchtúr sonraí réamhshainithe (Liosta Gné Gléas). Nochtar gnéithe a dtacaíonn feiste FPGA leo trí na struchtúir sonraí seo, mar a léirítear thíos san fhigiúr seo a leanas:

Gléas FPGA PCIe

intel-OPAE-FPGA-Linux-Device-Driver-Ailtireacht-fig- (1)

Tacaíonn an tiománaí le PCIe SR-IOV chun Feidhmeanna Fíorúla (VFanna) a chruthú ar féidir iad a úsáid chun luasairí aonair a shannadh do mheaisíní fíorúla.

Intel Corporation. Gach ceart ar cosaint. Is trádmharcanna de chuid Intel Corporation nó a fhochuideachtaí iad Intel, lógó Intel, agus marcanna Intel eile. Barántaíonn Intel feidhmíocht a tháirgí FPGA agus leathsheoltóra de réir sonraíochtaí reatha de réir bharántas caighdeánach Intel ach coimeádann sé an ceart chun athruithe a dhéanamh ar aon táirgí agus seirbhísí ag am ar bith gan fógra. Ní ghlacann Intel aon fhreagracht nó dliteanas a eascraíonn as cur i bhfeidhm nó úsáid aon fhaisnéise, táirge nó seirbhíse a thuairiscítear anseo ach amháin mar a aontaítear go sainráite i scríbhinn ag Intel. Moltar do chustaiméirí Intel an leagan is déanaí de shonraíochtaí feiste a fháil sula dtéann siad ag brath ar aon fhaisnéis foilsithe agus sula ndéanann siad orduithe le haghaidh táirgí nó seirbhísí.

Féadfar ainmneacha agus brandaí eile a éileamh mar mhaoin daoine eile.

Gléas PCIe FPGA fíorúlaithe

intel-OPAE-FPGA-Linux-Device-Driver-Ailtireacht-fig- (2)

Inneall Bainistíochta FPGA (FME)
Déanann Inneall Bainistíochta FPGA bainistíocht cumhachta agus teirmeach, tuairisciú earráide, athchumrú, tuairisciú feidhmíochta, agus feidhmeanna bonneagair eile. Tá FME amháin ag gach FPGA, a bhfuil rochtain air i gcónaí tríd an bhFeidhm Fhisiciúil (PF). Is féidir le feidhmchláir spáis úsáideora rochtain eisiach a fháil ar an FME trí úsáid a bhaint as Open(), agus é a scaoileadh trí úsáid a bhaint as close() mar úsáideoir pribhléideach (fréamh).

Port
Is ionann Calafort agus an comhéadan idir fabraic statach FPGA (“Bainisteoir Comhéadain FPGA (FIM)”) agus réigiún atá in-athchumraithe go páirteach ina bhfuil Feidhm Luasaire (AF). Rialaíonn an Port an chumarsáid ó bhogearraí go dtí an luasaire agus nochtar gnéithe mar athshocrú agus dífhabhtú. D’fhéadfadh go mbeadh roinnt Calafoirt ag feiste PCIe, agus is féidir gach Calafort a nochtadh trí VF trína shannadh ag baint úsáide as an FPGA_FME_PORT_ASSIGN ioctl ar an ngléas FME.

Aonad Feidhme Luasaire (AF).

  • Tá Aonad Feidhme Luasaire (AF) ceangailte de Chalafort agus nochtar ann réigiún MMIO 256K le húsáid do chláir rialaithe luasaire-shonracha.
  • Is féidir le feidhmchláir spáis úsáideora rochtain eisiach a fháil ar AFU atá ceangailte le Calafort trí úsáid a bhaint as Open() ar an ngléas Calafoirt, agus é a scaoileadh ag baint úsáide as close().
  • Is féidir le feidhmchláir spáis úsáideora mmap() a dhéanamh ar réigiúin luasaire MMIO freisin.

Athchumrú Páirteach
Mar a luadh thuas, is féidir luasairí a athchumrú trí Fheidhm Luasaire (AF) a athchumrú i bpáirt file. Ní mór an Fheidhm Luasaire (AF) a bheith ginte don FIM beacht agus don réigiún statach (Calafort) spriocdhírithe den FPGA; ar shlí eile, teipfidh an oibríocht athchumraithe agus b'fhéidir go mbeidh sé ina chúis le héagobhsaíocht an chórais. Is féidir an chomhoiriúnacht seo a sheiceáil tríd an ID comhéadain atá tugtha faoi deara sa cheanntásc AF a chur i gcomparáid le haitheantas an chomhéadain a nocht an FME trí sysfs. De ghnáth déanann spás úsáideora an tseiceáil seo roimh ghlaoch ar an IOCTL athchumraithe.

Nóta:
Faoi láthair, ní mór aon chlár bogearraí a fhaigheann rochtain ar an FPGA, lena n-áirítear iad siúd a ritheann in óstríomhaire fíorúlaithe, a dhúnadh sula ndéantar iarracht ar athchumrú páirteach. Bheadh ​​na céimeanna:

  1. Díluchtaigh an tiománaí ón aíonna
  2. Bain an VF as an aoi
  3. Díchumasaigh SR-IOV
  4. Déan athchumrú páirteach
  5. Cumasaigh SR-IOV
  6. Plug an VF leis an aoi
  7. Íoslódáil an tiománaí ar an aoi

Fíorúlú FPGA
Chun rochtain a fháil ar luasaire ó fheidhmchláir a ritheann i VM, ní mór an calafort AFU faoi seach a shannadh do VF trí úsáid a bhaint as na céimeanna seo a leanas:

  1. Is leis an PF gach calafort AFU de réir réamhshocraithe. Ní mór aon phort ar gá é a athshannadh go VF a scaoileadh ón PF ar dtús tríd an ioctl FPGA_FME_PORT_RELEASE ar an ngléas FME.
  2. Nuair a scaoiltear calafoirt N ón PF, is féidir an t-ordú thíos a úsáid chun SRIOV agus VFs a chumasú. Níl ach calafort amháin ag gach VF le AFU. macalla N > PCI_DEVICE_PATH/sriov_numvfs
  3. Téigh tríd na VFanna chuig VManna.
  4. Tá an AFU faoi VF inrochtana ó fheidhmchláir i VM (ag baint úsáide as an tiománaí céanna taobh istigh den VF).

Nóta:
Ní féidir FME a shannadh do VF, mar sin níl PR agus feidhmeanna bainistíochta eile ar fáil ach tríd an PF.

Eagraíocht tiománaí

Tiománaí PCIe Modúl Gléas

Eagraíocht tiománaí

intel-OPAE-FPGA-Linux-Device-Driver-Ailtireacht-fig- (3)

Tá na feistí FPGA le feiceáil mar fheistí PCIe rialta; mar sin, déantar an tiománaí gléas FPGA PCIe (intel-FPGA-PCI.ko) a luchtú ar dtús i gcónaí nuair a aimsítear FPGA PCIe PF nó VF. Tá ról bonneagair ag an tiománaí seo in ailtireacht na dtiománaithe. sé:

  • Cruthaíonn gléas coimeádán FPGA mar thuismitheoir na bhfeistí gné.
  • Siúil tríd an Liosta Gné Gléas, a chuirtear i bhfeidhm i gcuimhne PCIe BAR gléas, chun feistí gné agus a gcuid fo-gnéithe a fháil amach agus feistí ardáin a chruthú dóibh faoin bhfeiste coimeádán.
  • Tacaíonn SR-IOV.
  • Tugann sé isteach an bonneagar gné-ghléas, a achoimríonn oibríochtaí le haghaidh fo-ghnéithe agus a nochtar feidhmeanna comónta do thiománaithe gléasanna gné.

Feidhmeanna Tiománaí Gléas Modúl PCIe

  • Tá fionnachtain PCIe, áireamh gléas, agus fionnachtain gné ann.
  • Cruthaíonn sé eolairí sysfs don mháthairghléas, Inneall Bainistíochta FPGA (FME), agus Port.
  • Cruthaíonn na cásanna tiománaí ardáin, rud a fhágann gur féidir leis an eithne Linux a gcuid tiománaithe modúl ardáin faoi seach a luchtú.

Tiománaí Gléas Modúl Ardán FME

  • Bainistíocht cumhachta agus teirmeach, tuairisciú earráide, tuairisciú feidhmíochta, agus feidhmeanna bonneagair eile. Is féidir leat na feidhmeanna seo a rochtain trí chomhéadain sysfs a nochtar an tiománaí FME.
  • Athchumrú Páirteach. Cláraíonn an tiománaí FME Bainisteoir FPGA le linn thúsú fo-ghné PR; a luaithe a fhaigheann sé FPGA_FME_PORT_PR ioctl uait, agairt sé an fheidhm chomhéadain choitianta ó Bhainisteoir FPGA chun athchumrú páirteach an tsrutha giotáin go dtí an Port tugtha a chríochnú.
  • Bainistíocht calafoirt le haghaidh fíorúlaithe. Tugann an tiománaí FME dhá ioctl isteach, FPGA_FME_PORT_RELEASE, a scaoileann an Port tugtha ó PF; agus FPGA_FME_PORT_ASSIGN, a sannann an Calafort ar ais go PF. Nuair a scaoiltear an Calafort ón PF, is féidir é a shannadh don VF trí na comhéadain SR-IOV a sholáthraíonn an tiománaí PCIe. Le haghaidh tuilleadh faisnéise, féach ar “Fíorúlú FPGA”.

Feidhmeanna Tiománaí Gléas Modúl Ardán FME

  • Cruthaíonn nód gléis charachtair FME.
  • Cruthaíonn sé na córais FME files agus cuireann sé córais FME i bhfeidhm file accessors.
  • Cuireann sé na fo-thiománaithe gné phríobháideacha FME i bhfeidhm.
  • Fo-thiománaithe gné phríobháideach FME:
    • Ceanntásc FME
    • Bainistíocht Teirmeach
    • Bainistíocht Cumhachta
    • Earráid Dhomhanda
    • Athchumrú Páirteach
    • Feidhmíocht Dhomhanda

Tiománaí Gléas Modúl Ardán Port
Cosúil leis an tiománaí FME, scrúdaítear an tiománaí FPGA Port (agus AFU) (intel-fpga-afu. ko) a luaithe a chruthaítear an gléas ardán Port. Is í príomhfheidhm an mhodúil seo comhéadan a sholáthar d’fheidhmchláir spáis úsáideora chun rochtain a fháil ar na luasairí aonair, lena n-áirítear bunrialtán athshocraithe ar Chalafort, easpórtáil réigiúin AFU MMIO, seirbhís mapála maoláin DMA, fógra UMsg(1), agus feidhmeanna cianda dífhabhtaithe ( Féach thuas).

Ní thacaítear le UMsg ach trí Luasghéarú Stack do Phróiseálaí Intel Xeon® le FPGA Comhtháite.

Feidhmeanna Tiománaí Gléas Modúl Ardán Port

  • Cruthaíonn nód gléis charachtair an Phoirt.
  • Cruthaíonn an córas Port files agus cuireann sé i bhfeidhm an sysfs Port file accessors.
  • Cuireann sé fo-thiománaithe gné phríobháideach an Chalafoirt i bhfeidhm.
  • Fo-thiománaithe gné phríobháideach port:
    • Ceanntásc an Phoirt
    • AFU
    • Earráid Phoirt
    • UMsg(2)
    • Beartaíonn Comhartha

Áireamh Gléas FPGA Feidhmchlár
Tugtar isteach sa chuid seo conas a áiríonn feidhmchláir an gléas FPGA ón ordlathas córais faoi /sys/class/fpga. Sa seanample thíos, tá dhá fheiste Intel FPGA suiteáilte san ósta. Tá FME amháin agus dhá Chalafort (AFUanna) ag gach feiste FPGA. I gcás gach feiste FPGA, cruthaítear eolaire gléasanna faoi / sys/class/fpga:

/sys/class/fpga/intel-fpga-dev.0
/sys/class/fpga/intel-fpga-dev.1

Tá FME amháin agus dhá Chalafort (AFUanna) ag gach nód mar fheistí leanaí:
/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

Go ginearálta, ainmnítear na comhéadain FME/Port sysfs mar seo a leanas:
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-fme.j/
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-port.k/

agus mé ag uimhriú na ngléasanna coimeádáin go léir as a chéile, j ag uimhriú na FMEanna i ndiaidh a chéile agus k ag uimhriú na gCalafort go léir i ndiaidh a chéile.

Is féidir tagairt a dhéanamh do na nóid ghléis a úsáidtear le haghaidh ioctl() agus mmap() trí:
/dev/intel-fpga-fme.j
/dev/intel-fpga-port.k

PCIe Áireamh Tiománaithe
Tugann an chuid seo sárúview den sreabhadh cód le haghaidh áireamh gléas arna dhéanamh ag intel-fpga-pci.ko. Aibhsítear na príomhstruchtúir agus feidhmeanna sonraí. Is fearr an chuid seo a leanúint nuair viewan cód foinse a théann leis (pcie.c).

Struchtúir Sonraí Áirimh

enum fpga_id_cineál {
PARENT_ID,
FME_ID,
PORT_ID,
FPGA_ID_MAX
};
struchtúr statach idr fpga_ids[FPGA_ID_MAX];
struchtúr fpga_chardev_info {
const char *ainm;
dev_t devt;
};
struchtúr fpga_chardev_info fpga_chrdevs[] = {
{ .name = FPGA_FEATURE_DEV_FME },
{ .name = FPGA_FEATURE_DEV_PORT },
};
rang struchtúr statach * fpga_class;
struchtúr statach 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,}
};
struchtúr statach 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
};
struchtúr cci_drvdata {
int device_id;
gléas struchtúr *fme_dev;
struct mutex glas;
struct list_head port_dev_list;
int released_port_num;
struct list_head réigiúin;
};
struct build_feature_devs_info {
struchtúr pci_dev *pdev;
neamhní __iomem *ioaddr;
neamhní __iomem *ioend;
in reatha_bar;
neamhní __iomem *pfme_hdr;
gléas struchtúr * parent_dev;
struct platform_device *feature_dev;
};

Sreabhadh Áirimh

  • ccidrv_init()
    • Tosaigh fpga_ids ag baint úsáide as idr_init().
    • Tosaigh fpga_chrdevs[i].devt ag baint úsáide as alloc_chrdev_region().
    • Tosaigh fpga_class ag baint úsáide as class_create().
    • pci_register_driver(&cci_pci_driver);
  • cci_pci_probe()
    • Cumasaigh an gléas PCI, iarr rochtain ar a réigiúin, socraigh máistir mód PCI, agus cumraigh DMA.
  • cci_pci_create_feature_devs() build_info_alloc_and_init()
    • Leithdháil struct build_feature_devs_info, tosaigh é.
      Tá .parent_dev socraithe chuig eolaire sysfs tuismitheora (intel-fpga-dev.id) ina bhfuil na heolairí FME agus Port sysfs.
  • parsáil_gné_liosta()
    • Siúil Liosta Gné Ghléas BAR0 chun an FME, an Calafort agus a ghnéithe príobháideacha a fháil amach.
  • parse_feature() parsáil_feature_afus() parse_feature_fme()
    • Nuair a aimsítear FME:
  • build_info_create_dev()
    • Leithdháil gléas ardáin don FME, á stóráil in build_feature_devs_info.feature_dev.
    • tá feature_dev.id tosaithe go dtí an toradh ar idr_alloc(fpga_ids[FME_ID],
    • tá feature_dev.parent socraithe chun build_feature_devs_info.parent_dev.
    • Leithdháil raon acmhainní struchtúir in feature_dev.resource.
  • Leithdháil struct feature_platform_data, tosaigh é, agus stóráil pointeoir i feature_dev.dev.platform_data
    • create_feature_instance() build_info_add_sub_feature()
    • Tosaigh gné_dev.resource[FME_FEATURE_ID_HEADER].
    • feature_platform_data_add()
    • Tosaigh feature_platform_data.features[FME_FEATURE_ID_HEADER], gach rud ach .fops.
  • parse_feature() parsáil_feature_afus() parse_feature_port()
    • Nuair a bhuailtear le Port:
  • build_info_create_dev()
    • Leithdháil gléas ardáin don Chalafort, á stóráil i build_feature_devs_info.feature_dev.
    • tá feature_dev.id tosaithe go dtí an toradh ar idr_alloc(fpga_ids[PORT_ID],
    • tá feature_dev.parent socraithe chun build_feature_devs_info.parent_dev.
    • Leithdháil raon d'acmhainní struchtúir in feature_dev.resource.
    • Leithdháil struct feature_platform_data, tosaigh é, agus stóráil pointeoir i feature_dev.dev.platform_data
  • build_info_commit_dev()
    • Cuir an struct feature_platform_data.node don Chalafort le liosta na gCalafort sa struct cci_drvdata.port_dev_list
  • create_feature_instance() build_info_add_sub_feature()
    • Tosaigh gné_dev.resource[PORT_FEATURE_ID_HEADER].
  • feature_platform_data_add()
    • Tosaigh feature_platform_data.features[PORT_FEATURE_ID_HEADER], gach rud ach .fops.
  • parsáil_gné() parsáil_feature_afus() parse_feature_port_uafu()
    • Nuair a aimsítear AFU:
  • create_feature_instance() build_info_add_sub_feature()
    • Tosaigh gné_dev.resource[PORT_FEATURE_ID_UAFU].
  • feature_platform_data_add()
    • Tosaigh feature_platform_data.features[PORT_FEATURE_ID_UAFU], gach rud ach .fops.
  • parsáil_gné() pharsáil_feature_private() parse_feature_fme_private()
    • Nuair a aimsítear gné phríobháideach FME:
  • create_feature_instance() build_info_add_sub_feature()
    • Tosaigh feature_dev.resource[id].
  • feature_platform_data_add()
    • Tosaigh feature_platform_data.features[id], gach rud ach .fops.
  • parse_feature() parsáil_feature_private() parse_feature_port_private()
  • Nuair a aimsítear gné phríobháideach Port: * create_feature_instance() build_info_add_sub_feature() * Tosaigh feature_dev.resource[id]. * feature_platform_data_add() Tosaigh feature_platform_data.features[id], gach rud ach .fops.
  • parsáil_ports_ó_fme()
    • Má tá an tiománaí luchtaithe ar an bhFeidhm Fhisiciúil (PF), ansin:
  • Rith an sreabhadh parse_feature_list() ar gach port a thuairiscítear sa cheanntásc FME.
  • Bain úsáid as an BAR atá luaite i ngach iontráil Port sa cheanntásc.

Tionscnamh Gléas Ardáin FME
Tugann an chuid seo sárúview den sreabhadh cód le haghaidh tosaigh gléas FME arna dhéanamh ag intel-fpga-fme.ko. Aibhsítear na príomhstruchtúir agus feidhmeanna sonraí. Is fearr an chuid seo a leanúint nuair viewan cód foinse a théann leis (fme-main.c).

Struchtúir Sonraí Gléas Ardáin FME

struct feature_ops {
int (*init)(struct platform_device *pdev, struct gné * gné);
int (*uinit)(struct platform_device *pdev, struct gné * gné);
fada (* ioctl)(struct platform_device *pdev, struct gné * gné,
int cmd gan síniú, arg fhada gan síniú);
int (*test)(struct platform_device *pdev, struct gné * gné);
};
gné struchtúr {
const char *ainm;
int resource_index;
neamhní __iomem *ioaddr;
struct feature_ops * ops;
};
struct gné_platform_sonraí {
nód list_head struchtúr;
struct mutex glas;
dev_status fada gan síniú;
struchtúr cdev cdev;
struct platform_device *dev;
slánuimhir disable_count gan síniú;
ar neamhní *príobháideach;
slánuimhir;
int (*config_port)(struct platform_device *, u32, bool);
struct platform_device *(* fpga_for_each_port)(struct platform_device *,
neamhní *, int (*match)(struct platform_device *, neamhní *)); struchtúr
gnéithe gné[0];
};
struct perf_object {
int id;
const struct attribute_group **attr_groups;
gléas struchtúr *fme_dev;
nód list_head struchtúr;
struct list_head leanaí;
struct kobject kobj;
};
struchtúr fpga_fme {
u8 port_id;
u64 pr_err;
gléas struchtúr *dev_err;
struct perf_object *perf_dev;
struct feature_platform_data *pdata;
};

Sreabhadh Tosaigh Feiste Ardán FME

Sreabhadh Túsaithe FMEintel-OPAE-FPGA-Linux-Device-Driver-Ailtireacht-fig- (4)

  • fme_probe() fme_dev_init()
    • Tosaigh struct fpga_fme agus é a stóráil sa réimse feature_platform_data.private.
  • fme_probe() fpga_dev_feature_init() feature_instance_init()
    • Sábháil feature_ops struct isteach sa feature_platform_data.features do gach gné daonra.
    • Glaoigh ar an bhfeidhm tástála, más ann di, ón struct.
    • Glaoigh ar an bhfeidhm init ón struct.
  • fme_probe() fpga_register_dev_ops()
    • Cruthaigh nód an ghléis charachtair FME, ag clárú struct file_oibríochtaí.

Tionscnamh Gléas Ardán Port
Tugann an chuid seo sárúview den sreabhadh cód le haghaidh tosaithe gléas calafoirt arna dhéanamh ag intel-fpga-afu.ko. Aibhsítear na príomhstruchtúir agus feidhmeanna sonraí. Is fearr an chuid seo a leanúint nuair viewan cód foinse a théann leis (afu.c).

Struchtúir Sonraí Gléas Ardán Port

struct feature_ops {
int (*init)(struct platform_device *pdev, struct gné * gné);
int (*uinit)(struct platform_device *pdev, struct gné * gné);
fada (* ioctl)(struct platform_device *pdev, struct gné * gné,
int cmd gan síniú, arg fhada gan síniú);
int (*test)(struct platform_device *pdev, struct gné * gné);
};
gné struchtúr {
const char *ainm;
int resource_index;
neamhní __iomem *ioaddr;
struct feature_ops * ops;
};
struct gné_platform_sonraí {
nód list_head struchtúr;
struct mutex glas;
dev_status fada gan síniú;
struchtúr cdev cdev;
struct platform_device *dev;
slánuimhir disable_count gan síniú;
ar neamhní *príobháideach;
slánuimhir;
int (*config_port)(struct platform_device *, u32, bool);
struct platform_device *(* fpga_for_each_port)(struct platform_device *,
ar neamhní *, int (*match)(struct platform_device *, ar neamhní *));
struct gnéithe gné[0];
};
struchtúr fpga_afu_region {
innéacs u32;
bratacha u32;
méid u64;
fritháireamh u64;
u64 fisic;
nód list_head struchtúr;
};
struchtúr fpga_afu_dma_region {
u64 úsáideoir_addr;
fad u64;
u64 iova;
struct leathanach **leathanaigh;
nód struct rb_node;
bool in_use;
};
struchtúr fpga_afu {
u64 region_cur_offset;
int num_regions;
u8 num_umsgs;
struct list_head réigiúin;
struct rb_root dma_regions;
struct feature_platform_data *pdata;
};

Sreabhadh Túsaithe Gléas Ardán Port

Sreabhadh Túsaithe Calafoirtintel-OPAE-FPGA-Linux-Device-Driver-Ailtireacht-fig- (5)

  • afu_probe() afu_dev_init()
    • Tosaigh struct fpga_afu agus é a stóráil sa réimse feature_platform_data.private.
  • afu_probe() fpga_dev_feature_init() feature_instance_init()
    • Sábháil feature_ops struct isteach sa feature_platform_data.features do gach gné daonra.
    • Glaoigh ar an bhfeidhm tástála, más ann di, ón struct.
    • Glaoigh ar an bhfeidhm init ón struct.
  • afu_probe() fpga_register_dev_ops()
    • Cruthaigh nód an ghléis carachtar Port, ag clárú struct file_oibríochtaí.

IOCTLanna FME
IOCTLs a dtugtar ar oscailt file tuairisceoir le haghaidh /dev/intel-fpga-fme.j FPGA_GET_API_VERSION—cuir ar ais an leagan reatha mar shlánuimhir, ag tosú ó 0.

FPGA_CHECK_EXTENSION—ní thacaítear leis faoi láthair.

FPGA_FME_PORT_RELEASE — is pointeoir é arg do:

struchtúr fpga_fme_port_release {
__u32 argsz; // in: sizeof(struct fpga_fme_port_release)
bratacha __u32; //in: caithfidh 0
__u32 port_id; // in: ID port (ó 0) le scaoileadh.
};

FPGA_FME_PORT_ASSIGN — is pointeoir é arg do:

struct fpga_fme_port_assign {
__u32 argsz; // in: sizeof(struct fpga_fme_port_assign)
bratacha __u32; //in: caithfidh 0
__u32 port_id; // in: ID port (ó 0) a shannadh. (caithfidh go raibh
eisithe roimhe seo ag FPGA_FME_PORT_RELEASE)
};

FPGA_FME_PORT_PR — is pointeoir é arg do:

struchtúr fpga_fme_port_pr {
__u32 argsz; // in: sizeof(struct fpga_fme_port_pr)
bratacha __u32; //in: caithfidh 0
__u32 port_id; // in: ID port (ó 0)
__u32 maolán_size; // in: méid maolán srutha giotaí i mbearta. Ní mór a bheith 4-beart
ailínithe.
__u64 bufair_seoladh; // in: seoladh próisis an mhaoláin giotáin
stádas __u64; // amach: stádas earráide (bitmask)
};

IOCTLanna calafoirt
IOCTLs a dtugtar ar oscailt file tuairisceoir le haghaidh /dev/intel-fpga-port.k FPGA_GET_API_VERSION—cuir ar ais an leagan reatha mar shlánuimhir, ag tosú ó 0. FPGA_CHECK_EXTENSION - ní thacaítear leis faoi láthair.

FPGA_PORT_GET_INFO — is pointeoir é arg do:

struchtúr fpga_port_info {
__u32 argsz; // in: sizeof (struct fpga_port_info)
bratacha __u32; // amach: filleann 0
__u32 num_réigiúin; // amach: líon na réigiún MMIO, 2 (1 le haghaidh AFU agus 1 le haghaidh
STP)
__u32 num_umsgs; // amach: líon na n-UMsg a fhaigheann tacaíocht ó na crua-earraí
};

FPGA_PORT_GET_REGION_INFO — is pointeoir é arg do:

struct fpga_port_region_info {
__u32 argsz; // in: sizeof(struct fpga_port_region_info)
bratacha __u32; // amach: (masc giotán) { FPGA_REGION_READ, FPGA_REGION_WRITE,
FPGA_REGION_MMAP }
innéacs __u32; // in: FPGA_PORT_INDEX_UAFU nó FPGA_PORT_INDEX_STP
stuáil __u32; //in: caithfidh 0
méid __u64; // amach: méid an réigiúin MMIO i mbearta
fritháireamh __u64; // amach: fritháireamh an réigiúin MMIO ó thús an ghléis fd
};

FPGA_PORT_DMA_MAP — is pointeoir é arg do:
struchtúr fpga_port_dma_map {
__u32 argsz; // in: sizeof(struct fpga_port_dma_map)
bratacha __u32; // in: ní mór a bheith 0 __u64 user_addr; // in: próiseas fíorúil
seoladh. Ní mór leathanach a ailíniú.
fad __u64; // in: fad na mapála i mbearta. Ní mór gur iolra leathanach é
méid.
__u64 iova; // amach: seoladh fíorúil IO };

FPGA_PORT_DMA_UNMAP — is pointeoir é arg do:
struchtúr fpga_port_dma_unmap {
__u32 argsz; // in: sizeof(struct fpga_port_dma_unmap)
bratacha __u32; //in: caithfidh 0
__u64 iova; // in: Seoladh fíorúil IO curtha ar ais ag seoladh roimhe seo
FPGA_PORT_DMA_MAP };

  • FPGA_PORT_RESET—ní mór arg a bheith NULL.
  • FPGA_PORT_UMSG_ENABLE — arg ní mór é a bheith NULL.
  • FPGA_PORT_UMSG_DISABLE—ní mór arganna a bheith NULL.

FPGA_PORT_UMSG_SET_MODE — is pointeoir é arg do:

struchtúr fpga_port_umsg_cfg {
__u32 argsz; // in: sizeof(struct fpga_port_umsg_cfg)
bratacha __u32; //in: caithfidh 0
__u32 leid_bitmap; // in: UMsg léarscáil ghiotán mód leid. Léiríonn cé acu UMsg
cumasaithe.
};

FPGA_PORT_UMSG_SET_BASE_ADDR —

  • Ní mór UMsg a bheith díchumasaithe roimh an ioctl seo a eisiúint.
  • Caithfidh réimse an iova a bheith do mhaolán mór go leor do gach UMsg (num_umsgs * PAGE_SIZE).
    • Tá an maolán marcáilte mar “in úsáid” ag lucht bainistíochta maoláin an tiománaí.
    • Má tá an iova ar NULL, tá aon réigiún roimhe seo neamhmharcáilte mar “in úsáid”.
  • Is pointeoir é arg do:
    struchtúr fpga_port_umsg_base_addr {
    • u32 argsz; // in: sizeof(struct fpga_port_umsg_base_addr)
    • bratacha u32; //in: caithfidh 0
    • u64 iova; // in: Seoladh fíorúil IO ó FPGA_PORT_DMA_MAP. };

Nóta:

  • Chun na hearráidí calafoirt a ghlanadh, caithfidh tú giotán cruinn na n-earráidí reatha a scríobh, le haghaidh example, earráidí cat > soiléir
  • Ní thacaítear le UMsg ach trí Luasghéarú Stack do Phróiseálaí Intel Xeon le FPGA Comhtháite.

sysfs Files

Sysfs ceanntásc FME files
intel-fpga-dev.i/intel-fpga-fme.j/

sysfs file réimse mmio cineál rochtain
poirt_num fme_header.capability.num_ports slánuimhir deachúlach Inléite amháin
méid_taisce fme_header.capability.cache_size slánuimhir deachúlach Inléite amháin
leagan fme_header.capability.fabric_verid slánuimhir deachúlach Inléite amháin
soicéad_id fme_header.capability.socket_id slánuimhir deachúlach Inléite amháin
sruth_giotán_id fme_header.bitstream_id heics uint64_t Inléite amháin
bitstream_meiteashonraí fme_header.bitstream_md heics uint64_t Inléite amháin

Córas Bainistíochta Teirmeach FME files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/

sysfs file réimse mmio cineál rochtain
tairseach1 teirmeach.thairseach.tmp_thshold1 slánuimhir deachúlach Úsáideoir: Inléite amháin Fréamh: Léigh-scríobh
tairseach2 teirmeach.thairseach.tmp_thshold2 slánuimhir deachúlach Úsáideoir: Inléite amháin Fréamh: Léigh-scríobh
tairseach_turas teirmeach.thairseach.therm_trip_thshold slánuimhir deachúlach Inléite amháin
tairseach1_sroichte teirmeach.thairseach.thshold1_stádas slánuimhir deachúlach Inléite amháin
tairseach2_sroichte teirmeach.thairseach.thshold2_stádas slánuimhir deachúlach Inléite amháin
tairseach1_polasaí teirmeach. tairseach.thshold_polasaí slánuimhir deachúlach Úsáideoir: Inléite amháin Fréamh: Léigh-scríobh
teocht teirmeach.rdsensor_fm1.fpga_temp slánuimhir deachúlach Inléite amháin

Córas Bainistíochta Cumhachta FME files
intel-fpga-dev.i/intel-fpga-fme.j/power_mgmt/

sysfs file réimse mmio cineál rochtain
itear cumhacht.status.pwr_chaite heics uint64_t Inléite amháin
tairseach1 chumhachta.tairseach.1 heics uint64_t Úsáideoir: Inléite amháin Fréamh: Léigh-scríobh
tairseach2 chumhachta.tairseach.2 heics uint64_t Úsáideoir: Inléite amháin Fréamh: Léigh-scríobh
tairseach1_stádas cumhacht.tairseach.thairseach1_stádas deachúlach gan síniú Inléite amháin
tairseach2_stádas cumhacht.tairseach.thairseach2_stádas deachúlach gan síniú Inléite amháin
rtl power.status.fpga_latency_report deachúlach gan síniú Inléite amháin

Sysfs Earráid Dhomhanda FME files
intel-fpga-dev.i/intel-fpga-fme.j/errors/

sysfs file réimse mmio cineál rochtain
pcie0_earráidí earráid.pcie0_err heics uint64_t Léigh-scríobh
pcie1_earráidí earráid.pcie1_err heics uint64_t Léigh-scríobh
instealladh_earráid gerror.ras_error_inj heics uint64_t Léigh-scríobh

intel-fpga-dev.i/intel-fpga-fme.j/errors/fme-errors/

sysfs file réimse mmio cineál rochtain
earráidí gerror.fme_err heics uint64_t Inléite amháin
chéad_earráid gerror.fme_first_err.err_reg_status heics uint64_t Inléite amháin
seo chugainn_earráid gerror.fme_next_err.err_reg_status heics uint64_t Inléite amháin
soiléir Glantar earráidí, first_error, next_error éagsúla uint64_t Scríobh-amháin

Nóta:
Chun na hearráidí FME a ghlanadh, ní mór duit giotán cruinn na n-earráidí reatha a scríobh, i gcás example cat errors > soiléir.

córais Athchumraithe Páirteach FME files
intel-fpga-dev.i/intel-fpga-fme.j/pr/

sysfs file réimse mmio cineál rochtain
comhéadan_id pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l heicsidheachúlach 16-beart Inléite amháin

Córas Feidhmíochta Domhanda FME files
intel-fpga-dev.i/intel-fpga-fme.j/dperf/clock

sysfs file réimse mmio cineál rochtain
clog gperf.clk.afu_interf_clock heics uint64_t Inléite amháin

intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (Níl sé bailí le haghaidh Stack Luasghéaraithe do CPU Intel Xeon le FPGAanna)

sysfs file réimse mmio cineál rochtain
reo gperf.ch_ctl.reoite slánuimhir deachúlach Léigh-scríobh
léamh_buail gperf.CACHE_RD_HIT heics uint64_t Inléite amháin
léigh_ chailleann gperf.CACHE_RD_MISS heics uint64_t Inléite amháin
scríobh_buail gperf.CACHE_WR_HIT heics uint64_t Inléite amháin
scríobh_ chailleann gperf.CACHE_WR_MISS heics uint64_t Inléite amháin
coinnigh_iarratas gperf.CACHE_HOLD_REQ heics uint64_t Inléite amháin
tx_req_stall gperf.CACHE_TX_REQ_STALL heics uint64_t Inléite amháin
sysfs file réimse mmio cineál rochtain
rx_req_stall gperf.CACHE_RX_REQ_STALL heics uint64_t Inléite amháin
data_write_port_contention gperf.CACHE_DATA_WR_PORT_CONTEN heics uint64_t Inléite amháin
tag_write_port_contention gperf.CACHE_TAG_WR_PORT_CONTEN heics uint64_t Inléite amháin

intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (Ní bailí le haghaidh Stack Luasghéaraithe do CPU Intel Xeon le FPGAanna)

sysfs file réimse mmio cineál rochtain
reo gperf.vtd_ctl.reoite slánuimhir deachúlach Úsáideoir: Inléite amháin Fréamh: Léigh-scríobh

intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (Níl sé bailí le haghaidh Stack Luasghéaraithe do CPU Intel Xeon le FPGAanna)

sysfs file réimse mmio cineál rochtain
léite_idirbheart gperf.VTD_AFU0_MEM_RD_TRANS heics uint64_t Inléite amháin
scríobh_idirbheart gperf.VTD_AFU0_MEM_WR_TRANS heics uint64_t Inléite amháin
tlb_read_buail gperf.VTD_AFU0_TLB_RD_HIT heics uint64_t Inléite amháin
tlb_write_buail gperf.VTD_AFU0_TLB_WR_HIT heics uint64_t Inléite amháin

intel-fpga-dev.i/intel-fpga-fme.j/dperf/fabric/

sysfs file réimse mmio cineál rochtain
chumasú gperf.fab_ctl.(cumasaithe) slánuimhir deachúlach Úsáideoir: Inléite amháin Fréamh: Léigh-scríobh
reo gperf.fab_ctl.reoite slánuimhir deachúlach Úsáideoir: Inléite amháin Fréamh: Léigh-scríobh
pcie0_léamh gperf.FAB_PCIE0_RD heics uint64_t Inléite amháin
pcie0_scríobh gperf.FAB_PCIE0_WR heics uint64_t Inléite amháin
pcie1_léamh gperf.FAB_PCIE1_RD heics uint64_t Inléite amháin
pcie1_scríobh gperf.FAB_PCIE1_WR heics uint64_t Inléite amháin
upi_léamh gperf.FAB_UPI_RD heics uint64_t Inléite amháin
upi_scríobh gperf.FAB_UPI_WR heics uint64_t Inléite amháin

intel-fpga-ev.i/intel-fpga/fme.j/dperf/fabric/portk/

sysfs file réimse mmio cineál rochtain
pcie0_léamh gperf.FAB_PCIE0_RD heics uint64_t Inléite amháin
pcie0_scríobh gperf.FAB_PCIE0_WR heics uint64_t Inléite amháin
pcie1_léamh gperf.FAB_PCIE1_RD heics uint64_t Inléite amháin
pcie1_scríobh gperf.FAB_PCIE1_WR heics uint64_t Inléite amháin
upi_léamh gperf.FAB_UPI_RD heics uint64_t Inléite amháin
upi_scríobh gperf.FAB_UPI_WR heics uint64_t Inléite amháin

Sysfs ceanntásc calafoirt files
intel-fpga-dev.i/intel-fpga-port.k/

sysfs file réimse mmio cineál rochtain
id port_header.capability.port_number slánuimhir deachúlach Inléite amháin
ltr port_header.control.latency_fhulaingt slánuimhir deachúlach Inléite amháin

Sysfs Ceanntásca Port AFU files
intel-fpga-dev.i/intel-fpga-port.k/

sysfs file réimse mmio cineál rochtain
afu_id afu_header.guid heicsidheachúlach 16-beart Inléite amháin

Earráid Phoirt sysfs files
intel-fpga-dev.i/intel-fpga-port.k/errors/

sysfs file réimse mmio cineál rochtain
earráidí earráid.port_error heics uint64_t Inléite amháin
chéad_earráid earráid.port_first_error heics uint64_t Inléite amháin
céad_mífhoirmithe_req truaill.malreq heicsidheachúlach 16-beart Inléite amháin
soiléir earráid. (gach earráid) éagsúla uint64_t Scríobh-amháin

Nóta:
Chun na hearráidí Port a ghlanadh, ní mór duit giotán cruinn na n-earráidí reatha a scríobh, le haghaidh example cat errors > soiléir.

Stair Athbhreithnithe

Leagan Doiciméid Athruithe
2017.10.02 Eisiúint Tosaigh.

Treoir Ailtireachta Tiománaithe Gléas OPAE Intel FPGA Linux

Doiciméid / Acmhainní

Intel OPAE FPGA Ailtireacht Tiománaí Gléas Linux [pdfTreoir Úsáideora
Ailtireacht Tiománaí Gléas OPAE FPGA Linux, OPAE FPGA, Ailtireacht Tiománaithe Gléas Linux, Ailtireacht Tiománaithe, Ailtireacht

Tagairtí

Fág trácht

Ní fhoilseofar do sheoladh ríomhphoist. Tá réimsí riachtanacha marcáilte *