intel OPAE FPGA Linux Device Driver Architecture
OPAE Intel FPGA Linux Device Driver Architecture
OPAE Intel FPGA -ohjain tarjoaa käyttöliittymät käyttäjäavaruussovelluksille FPGA-kiihdyttimien määrittämiseen, luetteloimiseen, avaamiseen ja käyttämiseen Intel FPGA -ratkaisuilla varustetuilla alustoilla ja mahdollistaa järjestelmätason hallintatoiminnot, kuten FPGA-uudelleenmäärityksen, virranhallinnan ja virtualisoinnin.
Laitteistoarkkitehtuuri
Käyttöjärjestelmän näkökulmasta viewFPGA-laitteisto näkyy tavallisena PCIe-laitteena. FPGA-laitteen muisti on järjestetty käyttämällä ennalta määritettyä tietorakennetta (Device Feature List). FPGA-laitteen tukemat ominaisuudet näkyvät näiden tietorakenteiden kautta, kuten alla olevassa kuvassa näkyy:
FPGA PCIe laite
Ohjain tukee PCIe SR-IOV:ta virtuaalisten funktioiden (VF) luomiseen, joita voidaan käyttää yksittäisten kiihdyttimien määrittämiseen virtuaalikoneen.
Intel Corporation. Kaikki oikeudet pidätetään. Intel, Intel-logo ja muut Intel-merkit ovat Intel Corporationin tai sen tytäryhtiöiden tavaramerkkejä. Intel takaa FPGA- ja puolijohdetuotteidensa suorituskyvyn nykyisten vaatimusten mukaisesti Intelin vakiotakuun mukaisesti, mutta pidättää oikeuden tehdä muutoksia tuotteisiin ja palveluihin milloin tahansa ilman erillistä ilmoitusta. Intel ei ota minkään tässä kuvatun tiedon, tuotteen tai palvelun soveltamisesta tai käytöstä johtuvaa vastuuta tai vastuuta, ellei Intel ole nimenomaisesti kirjallisesti suostunut siihen. Intelin asiakkaita kehotetaan hankkimaan uusin versio laitteen teknisistä tiedoista ennen kuin he luottavat julkaistuihin tietoihin ja ennen kuin he tilaavat tuotteita tai palveluita.
Muita nimiä ja merkkejä voidaan väittää muiden omaisuudeksi.
Virtualisoitu FPGA PCIe -laite
FPGA Management Engine (FME)
FPGA Management Engine suorittaa tehon ja lämmön hallinnan, virheraportoinnin, uudelleenkonfiguroinnin, suorituskyvyn raportoinnin ja muita infrastruktuuritoimintoja. Jokaisessa FPGA:ssa on yksi FME, johon päästään aina fyysisen toiminnon (PF) kautta. Käyttäjätilasovellukset voivat hankkia yksinoikeudella pääsyn FME:hen käyttämällä open()-toimintoa ja vapauttaa sen käyttämällä close()-toimintoa etuoikeutettuna käyttäjänä (root).
Portti
Portti edustaa liitäntää staattisen FPGA-kudoksen ("FPGA Interface Manager (FIM)") ja kiihdytintoiminnon (AF) sisältävän osittain uudelleen konfiguroitavan alueen välillä. Portti ohjaa tietoliikennettä ohjelmistosta kiihdytin ja paljastaa ominaisuuksia, kuten nollauksen ja virheenkorjauksen. PCIe-laitteella voi olla useita portteja, ja jokainen portti voidaan paljastaa VF:n kautta määrittämällä se käyttämällä FME-laitteen FPGA_FME_PORT_ASSIGN ioctl:ää.
Kiihdytystoiminto (AF) -yksikkö
- Kiihdytintoimintoyksikkö (AF) on liitetty porttiin ja se paljastaa 256K MMIO-alueen, jota käytetään kiihdytinkohtaisissa ohjausrekistereissä.
- Käyttäjätilasovellukset voivat hankkia yksinoikeudella pääsyn porttiin liitetylle AFU:lle käyttämällä porttilaitteen open()-komentoa ja vapauttaa sen käyttämällä close().
- Käyttäjätilasovellukset voivat myös mmap()-kiihdytin MMIO-alueita.
Osittainen uudelleenkonfigurointi
Kuten edellä mainittiin, kiihdytin voidaan konfiguroida uudelleen määrittämällä kiihdytintoiminto (AF) osittain uudelleen. file. Kiihdytystoiminnon (AF) on oltava luotu FPGA:n tarkalle FIM-alueelle ja kohdennetulle staattiselle alueelle (Portille); muuten uudelleenkonfigurointi epäonnistuu ja saattaa aiheuttaa järjestelmän epävakautta. Tämä yhteensopivuus voidaan tarkistaa vertaamalla AF-otsikossa mainittua liitäntätunnusta FME:n sysfs:n kautta paljastamaan liitäntätunnukseen. Tämän tarkistuksen tekee yleensä käyttäjäavaruus ennen uudelleenmäärityksen IOCTL:n kutsumista.
Huomautus:
Tällä hetkellä kaikki FPGA:ta käyttävät ohjelmistot, mukaan lukien virtualisoidussa isännässä toimivat, on suljettava ennen osittaisen uudelleenmäärityksen yrittämistä. Vaiheet olisivat:
- Pura kuljettaja vieraasta
- Irrota VF vieraslaitteesta
- Poista SR-IOV käytöstä
- Suorita osittainen uudelleenkonfigurointi
- Ota SR-IOV käyttöön
- Liitä VF vieraaseen
- Lataa kuljettaja vieraaseen
FPGA virtualisointi
Jotta kiihdytin voidaan käyttää virtuaalikoneessa toimivista sovelluksista, vastaava AFU:n portti on määritettävä VF:lle seuraavien vaiheiden avulla:
- PF omistaa oletuksena kaikki AFU-portit. Kaikki portit, jotka on määritettävä uudelleen VF:lle, on ensin vapautettava PF:stä FME-laitteen FPGA_FME_PORT_RELEASE ioctl:n kautta.
- Kun N porttia vapautetaan PF:stä, alla olevaa komentoa voidaan käyttää SRIOV:n ja VF:n käyttöönottoon. Jokaisella VF:llä on vain yksi AFU-portti. echo N > PCI_DEVICE_PATH/sriov_numvfs
- Ohjaa VF:ien kautta virtuaalikoneille.
- VF:n alainen AFU on käytettävissä VM:n sovelluksista (käyttämällä samaa ohjainta VF:n sisällä).
Huomautus:
FME:tä ei voi määrittää VF:lle, joten PR ja muut hallintatoiminnot ovat käytettävissä vain PF:n kautta.
Kuljettajaorganisaatio
PCIe-moduulin laiteohjain
Kuljettajaorganisaatio
FPGA-laitteet näkyvät tavallisina PCIe-laitteina; näin ollen FPGA PCIe -laiteohjain (intel-FPGA-PCI.ko) ladataan aina ensin, kun FPGA PCIe PF tai VF havaitaan. Tällä ohjaimella on infrastruktuurin rooli ohjainarkkitehtuurissa. Se:
- Luo FPGA-säilölaitteen ominaisuuslaitteiden yläpääksi.
- Kävelee PCIe-laitteen BAR-muistiin toteutetun Device Feature List -luettelon läpi löytääkseen ominaisuuslaitteet ja niiden aliominaisuudet ja luodakseen niille alustalaitteita konttilaitteen alle.
- Tukee SR-IOV:ta.
- Esittelee ominaisuuslaiteinfrastruktuurin, joka tiivistää aliominaisuuksien toiminnot ja paljastaa yleiset toiminnot ominaisuuslaiteajureille.
PCIe-moduulin laiteohjaintoiminnot
- Sisältää PCIe-etsinnän, laiteluettelon ja ominaisuushaun.
- Luo sysfs-hakemistoja päälaitteelle, FPGA Management Enginelle (FME) ja portille.
- Luo alustaohjaininstanssit, jolloin Linux-ydin lataa vastaavat alustamoduulin ohjaimet.
FME Platform Module -laiteohjain
- Tehon ja lämmön hallinta, virheraportointi, suorituskykyraportointi ja muut infrastruktuuritoiminnot. Voit käyttää näitä toimintoja FME-ohjaimen paljastamien sysf-liitäntöjen kautta.
- Osittainen uudelleenkonfigurointi. FME-ajuri rekisteröi FPGA Managerin PR-aliominaisuuksien alustuksen aikana; Kun se vastaanottaa sinulta FPGA_FME_PORT_PR ioctl:n, se kutsuu yhteisen rajapintatoiminnon FPGA Managerilta suorittaakseen bittivirran osittaisen uudelleenmäärityksen tiettyyn porttiin.
- Porttien hallinta virtualisointia varten. FME-ajuri sisältää kaksi ioctl:ää, FPGA_FME_PORT_RELEASE, jotka vapauttavat annetun portin PF:stä; ja FPGA_FME_PORT_ASSIGN, joka määrittää portin takaisin PF:lle. Kun portti on vapautettu PF:stä, se voidaan määrittää VF:lle PCIe-ohjaimen tarjoamien SR-IOV-liitäntöjen kautta. Lisätietoja on kohdassa "FPGA-virtualisointi".
FME-alustamoduulin laiteohjaintoiminnot
- Luo FME-merkin laitesolmun.
- Luo FME sysfs files ja toteuttaa FME sysfs file lisävarusteita.
- Toteuttaa FME:n yksityisen ominaisuuden aliohjaimet.
- FME:n yksityisen ominaisuuden aliohjaimet:
- FME-otsikko
- Lämmönhallinta
- Virranhallinta
- Maailmanlaajuinen virhe
- Osittainen uudelleenkonfigurointi
- Globaali suorituskyky
Port Platform Module Device Driver
FME-ajurin tapaan FPGA-portin (ja AFU) -ohjain (intel-fpga-afu.ko) tutkitaan, kun porttialustan laite on luotu. Tämän moduulin päätehtävä on tarjota käyttöliittymä käyttäjäavaruussovelluksille yksittäisten kiihdyttimien käyttöön, mukaan lukien portin perusasetusten palautusohjaus, AFU MMIO -alueen vienti, DMA-puskurin kartoituspalvelu, UMsg(1)-ilmoitus ja etävirheenkorjaustoiminnot ( katso yllä).
UMsg:tä tukee vain Acceleration Stack for Intel Xeon® -prosessori, jossa on integroitu FPGA.
Porttialustan moduulin laiteohjaimen toiminnot
- Luo porttimerkkilaitesolmun.
- Luo portin sysfs files ja toteuttaa Port sysfs file lisävarusteita.
- Toteuttaa Portin yksityisen ominaisuuden aliohjaimet.
- Portti yksityisen ominaisuuden aliohjaimet:
- Portin otsikko
- AFU
- Porttivirhe
- UMsg(2)
- Signaali Napauta
Sovellus FPGA Device Enumeration
Tämä osio esittelee, kuinka sovellukset luettelevat FPGA-laitteen sysfs-hierarkiassa hakemistossa /sys/class/fpga. ExampAlla on kaksi Intel FPGA -laitetta asennettuna isäntään. Jokaisessa FPGA-laitteessa on yksi FME ja kaksi porttia (AFU). Jokaiselle FPGA-laitteelle luodaan laitehakemisto /sys/class/fpga:
/sys/class/fpga/intel-fpga-dev.0
/sys/class/fpga/intel-fpga-dev.1
Jokaisella solmulla on yksi FME ja kaksi porttia (AFU) lapsilaitteina:
/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
Yleensä FME/Port sysfs -liitännät on nimetty seuraavasti:
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-fme.j/
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-port.k/
I numeroimalla peräkkäin kaikki konttilaitteet, j peräkkäin numeroimalla FME:t ja k peräkkäin numeroimalla kaikki portit.
Ioctl()- ja mmap():ille käytettyihin laitesolmuihin voidaan viitata komennolla:
/dev/intel-fpga-fme.j
/dev/intel-fpga-port.k
PCIe-ajurien luettelo
Tämä osio antaa yhteenvedonview intel-fpga-pci.ko:n suorittaman laiteluettelon koodivuosta. Tärkeimmät tietorakenteet ja -toiminnot on korostettu. Tätä osiota on parasta seurata, kun viewmukana tulevan lähdekoodin (pcie.c).
Luettelotietorakenteet
enum fpga_id_type {
PARENT_ID,
FME_ID,
PORT_ID,
FPGA_ID_MAX
};
staattinen rakenne idr fpga_ids[FPGA_ID_MAX];
struct fpga_chardev_info {
const char *nimi;
dev_t devt;
};
struct fpga_chardev_info fpga_chrdevs[] = {
{ .name = FPGA_FEATURE_DEV_FME },
{ .name = FPGA_FEATURE_DEV_PORT },
};
staattinen rakenneluokka *fpga_class;
staattinen rakenne 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,}
};
staattinen rakenne 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
};
struct cci_drvdata {
int laite_tunnus;
struct laite *fme_dev;
rakenne mutex lukita;
struct list_head port_dev_list;
int julkaistu_portin_numero;
struct lista_pääalueet;
};
struct build_feature_devs_info {
struct pci_dev *pdev;
void __iomem *ioaddr;
void __iomem *ioend;
int nykyinen_palkki;
void __iomem *pfme_hdr;
struct laite *parent_dev;
struct alusta_laite *ominaisuus_dev;
};
Luettelovirta
- ccidrv_init()
- Alusta fpga_ids komennolla idr_init().
- Alusta fpga_chrdevs[i].devt komennolla alloc_chrdev_region().
- Alusta fpga_class komennolla class_create().
- pci_register_driver(&cci_pci_driver);
- cci_pci_probe()
- Ota PCI-laite käyttöön, pyydä pääsyä sen alueille, aseta PCI-isäntätila ja määritä DMA.
- cci_pci_create_feature_devs() build_info_alloc_and_init()
- Varaa rakenne build_feature_devs_info, alusta se.
.parent_dev asetetaan ylätason sysfs-hakemistoon (intel-fpga-dev.id), joka sisältää FME- ja Port sysfs -hakemistot.
- Varaa rakenne build_feature_devs_info, alusta se.
- parse_feature_list()
- Kävele BAR0 Device Feature List löytääksesi FME:n, portin ja niiden yksityiset ominaisuudet.
- parse_feature() parse_feature_afus() parse_feature_fme()
- Kun FME kohdataan:
- build_info_create_dev()
- Varaa FME:lle alustalaite, joka tallennetaan osoitteeseen build_feature_devs_info.feature_dev.
- feature_dev.id alustetaan idr_alloc(fpga_ids[FME_ID],
- feature_dev.parent -asetuksena on build_feature_devs_info.parent_dev.
- Varaa joukko struct-resursseja tiedostossa feature_dev.resource.
- Varaa struct feature_platform_data, alusta se ja tallenna osoitin hakemistoon feature_dev.dev.platform_data
- create_feature_instance() build_info_add_sub_feature()
- Alusta feature_dev.resource[FME_FEATURE_ID_HEADER].
- feature_platform_data_add()
- Alusta feature_platform_data.features[FME_FEATURE_ID_HEADER], kaikki paitsi .fops.
- parse_feature() parse_feature_afus() parse_feature_port()
- Kun portti havaitaan:
- build_info_create_dev()
- Varaa portille alustalaite, joka tallennetaan osoitteeseen build_feature_devs_info.feature_dev.
- feature_dev.id alustetaan idr_alloc(fpga_ids[PORT_ID],
- feature_dev.parent -asetuksena on build_feature_devs_info.parent_dev.
- Varaa joukko struct-resursseja tiedostossa feature_dev.resource.
- Varaa struct feature_platform_data, alusta se ja tallenna osoitin hakemistoon feature_dev.dev.platform_data
- build_info_commit_dev()
- Lisää portin struct feature_platform_data.node porttiluetteloon struct cci_drvdata.port_dev_list
- create_feature_instance() build_info_add_sub_feature()
- Alusta feature_dev.resource[PORT_FEATURE_ID_HEADER].
- feature_platform_data_add()
- Alusta feature_platform_data.features[PORT_FEATURE_ID_HEADER], kaikki paitsi .fops.
- parse_feature() parse_feature_afus() parse_feature_port_uafu()
- Kun AFU kohdataan:
- create_feature_instance() build_info_add_sub_feature()
- Alusta feature_dev.resource[PORT_FEATURE_ID_UAFU].
- feature_platform_data_add()
- Alusta feature_platform_data.features[PORT_FEATURE_ID_UAFU], kaikki paitsi .fops.
- parse_feature() parse_feature_private() parse_feature_fme_private()
- Kun FME:n yksityinen ominaisuus havaitaan:
- create_feature_instance() build_info_add_sub_feature()
- Alusta feature_dev.resource[id].
- feature_platform_data_add()
- Alusta feature_platform_data.features[id], kaikki paitsi .fops.
- parse_feature() parse_feature_private() parse_feature_port_private()
- Kun portin yksityinen ominaisuus havaitaan: * create_feature_instance() build_info_add_sub_feature() * Initialize feature_dev.resource[id]. * feature_platform_data_add() Alusta feature_platform_data.features[id], kaikki paitsi .fops.
- parse_ports_from_fme()
- Jos ohjain on ladattu fyysiseen toimintoon (PF), niin:
- Suorita parse_feature_list()-kulku jokaisessa FME-otsikossa kuvatussa portissa.
- Käytä otsikon jokaisessa porttimerkinnässä mainittua palkkia.
FME-alustan laitteen alustus
Tämä osio antaa yhteenvedonview intel-fpga-fme.ko:n suorittaman FME-laitteen alustuksen koodivuosta. Tärkeimmät tietorakenteet ja -toiminnot on korostettu. Tätä osiota on parasta seurata, kun viewmukana tulevan lähdekoodin (fme-main.c).
FME-alustan laitetietorakenteet
struct feature_ops {
int (*init)(struct platform_device *pdev, struct-ominaisuus *ominaisuus);
int (*uinit)(struct platform_device *pdev, struct-ominaisuus *ominaisuus);
pitkä (*ioctl)(struct platform_device *pdev, struct-ominaisuus *ominaisuus,
unsigned int cmd, unsigned long arg);
int (*testi)(struct platform_device *pdev, struct-ominaisuus *ominaisuus);
};
struct ominaisuus {
const char *nimi;
int resurssihakemisto;
void __iomem *ioaddr;
struct feature_ops *ops;
};
struct feature_platform_data {
struct list_head node;
rakenne mutex lukita;
allekirjoittamaton pitkä dev_status;
struct cdev cdev;
struct alusta_laite *dev;
allekirjoittamaton int disable_count;
mitätön *yksityinen;
int num;
int (*config_port)(rakenne alusta_laite *, u32, bool);
struct platform_device *(*fpga_for_each_port)(struct platform_device *,
void *, int (*match)(struct platform_device *, void *)); struct
ominaisuusominaisuudet[0];
};
struct perf_object {
int id;
const struct attribuuttiryhmä **attr_groups;
struct laite *fme_dev;
struct list_head node;
struct list_head lapset;
struct kobject kobj;
};
struct fpga_fme {
u8 portin_id;
u64 pr_err;
struct laite *dev_err;
struct perf_object *perf_dev;
struct ominaisuus_platform_data *pdata;
};
FME Platform Device Initialization Flow
FME:n alustuskulku
- fme_probe() fme_dev_init()
- Alusta struct fpga_fme ja tallenna se feature_platform_data.private-kenttään.
- fme_probe() fpga_dev_feature_init() feature_instance_init()
- Tallenna struct feature_ops jokaisen täytetyn ominaisuuden kohtaan feature_platform_data.features.
- Kutsu testifunktio, jos sellainen on, structista.
- Kutsu init-funktio structista.
- fme_probe() fpga_register_dev_ops()
- Luo FME-merkkilaitesolmu ja rekisteröi rakenteen file_toiminnot.
Porttialustan laitteen alustus
Tämä osio antaa yhteenvedonview porttilaitteen alustuksen koodikulusta, jonka suorittaa intel-fpga-afu.ko. Tärkeimmät tietorakenteet ja -toiminnot on korostettu. Tätä osiota on parasta seurata, kun viewmukana tulevan lähdekoodin (afu.c).
Porttialustan laitetietorakenteet
struct feature_ops {
int (*init)(struct platform_device *pdev, struct-ominaisuus *ominaisuus);
int (*uinit)(struct platform_device *pdev, struct-ominaisuus *ominaisuus);
pitkä (*ioctl)(struct platform_device *pdev, struct-ominaisuus *ominaisuus,
unsigned int cmd, unsigned long arg);
int (*testi)(struct platform_device *pdev, struct-ominaisuus *ominaisuus);
};
struct ominaisuus {
const char *nimi;
int resurssihakemisto;
void __iomem *ioaddr;
struct feature_ops *ops;
};
struct feature_platform_data {
struct list_head node;
rakenne mutex lukita;
allekirjoittamaton pitkä dev_status;
struct cdev cdev;
struct alusta_laite *dev;
allekirjoittamaton int disable_count;
mitätön *yksityinen;
int num;
int (*config_port)(rakenne alusta_laite *, u32, bool);
struct platform_device *(*fpga_for_each_port)(struct platform_device *,
void *, int (*match)(struct platform_device *, void *));
struct ominaisuuden ominaisuudet[0];
};
struct fpga_afu_region {
u32-indeksi;
u32-liput;
koko u64;
u64 offset;
u64 phys;
struct list_head node;
};
struct fpga_afu_dma_region {
u64 user_addr;
u64 pituus;
u64 iova;
struct sivu **sivut;
struct rb_node solmu;
bool in_use;
};
struct fpga_afu {
u64 region_cur_offset;
int alueiden_määrä;
u8 num_umsgs;
struct lista_pääalueet;
struct rb_root dma_regions;
struct ominaisuus_platform_data *pdata;
};
Porttialustan laitteen alustuskulku
Portin alustusvirta
- afu_probe() afu_dev_init()
- Alusta fpga_afu-rakenne ja tallenna se feature_platform_data.private-kenttään.
- afu_probe() fpga_dev_feature_init() feature_instance_init()
- Tallenna struct feature_ops jokaisen täytetyn ominaisuuden kohtaan feature_platform_data.features.
- Kutsu testifunktio, jos sellainen on, structista.
- Kutsu init-funktio structista.
- afu_probe() fpga_register_dev_ops()
- Luo porttimerkkilaitesolmu ja rekisteröi rakenteen file_toiminnot.
FME IOCTLs
IOCTL:t, joita kutsutaan auki file descriptor for /dev/intel-fpga-fme.j FPGA_GET_API_VERSION—palauta nykyinen versio kokonaislukuna, alkaen 0.
FPGA_CHECK_EXTENSION — ei tällä hetkellä tuettu.
FPGA_FME_PORT_RELEASE — arg on osoitin:
struct fpga_fme_port_release {
__u32 argsz; // in: sizeof(struct fpga_fme_port_release)
__u32-liput; // in: täytyy olla 0
__u32 portin_id; // sisään: portin ID (0:sta) julkaisuun.
};
FPGA_FME_PORT_ASSIGN — arg on osoitin:
struct fpga_fme_port_assign {
__u32 argsz; // in: sizeof(struct fpga_fme_port_assign)
__u32-liput; // in: täytyy olla 0
__u32 portin_id; // in: portin tunnus (0:sta) määritettäväksi. (täytyi olla
aiemmin julkaissut FPGA_FME_PORT_RELEASE)
};
FPGA_FME_PORT_PR — arg on osoitin:
struct fpga_fme_port_pr {
__u32 argsz; // in: sizeof(struct fpga_fme_port_pr)
__u32-liput; // in: täytyy olla 0
__u32 portin_id; // sisään: portin tunnus (0:sta)
__u32 puskurin_koko; // in: bittivirtapuskurin koko tavuina. Täytyy olla 4-tavuinen
kohdistettu.
__u64 puskurin_osoite; // sisään: bittivirtapuskurin prosessiosoite
__u64-tila; // ulos: virhetila (bittimaski)
};
Portti IOCTLs
IOCTL:t, joita kutsutaan auki file descriptor for /dev/intel-fpga-port.k FPGA_GET_API_VERSION—palauta nykyinen versio kokonaislukuna, alkaen 0. FPGA_CHECK_EXTENSION—ei tällä hetkellä tuettu.
FPGA_PORT_GET_INFO — arg on osoitin:
struct fpga_port_info {
__u32 argsz; // in: sizeof(struct fpga_port_info)
__u32-liput; // ulos: palauttaa 0
__u32 num_regions; // ulos: MMIO-alueiden lukumäärä, 2 (1 AFU:lle ja 1
STP)
__u32 num_umsgs; // ulos: laitteiston tukemien UMsg-viestien lukumäärä
};
FPGA_PORT_GET_REGION_INFO — arg on osoitin:
struct fpga_port_region_info {
__u32 argsz; // in: sizeof(struct fpga_port_region_info)
__u32 liput; // ulos: (bittipeite) { FPGA_REGION_READ, FPGA_REGION_WRITE,
FPGA_REGION_MMAP }
__u32-indeksi; // kohteessa: FPGA_PORT_INDEX_UAFU tai FPGA_PORT_INDEX_STP
__u32 täyte; // in: täytyy olla 0
__u64 koko; // ulos: MMIO-alueen koko tavuina
__u64 offset; // ulos: MMIO-alueen siirtymä laitteen alusta fd
};
FPGA_PORT_DMA_MAP — arg on osoitin:
struct fpga_port_dma_map {
__u32 argsz; // in: sizeof(struct fpga_port_dma_map)
__u32-liput; // in: täytyy olla 0 __u64 user_addr; // in: Process virtual
osoite. On oltava tasattu sivulle.
__u64 pituus; // in: kartoituksen pituus tavuina. On oltava monisivuinen
koko.
__u64 iova; // ulos: IO-virtuaaliosoite };
FPGA_PORT_DMA_UNMAP — arg on osoitin:
struct fpga_port_dma_unmap {
__u32 argsz; // in: sizeof(struct fpga_port_dma_unmap)
__u32-liput; // in: täytyy olla 0
__u64 iova; // in: Edellisen palauttama IO-virtuaalinen osoite
FPGA_PORT_DMA_MAP };
- FPGA_PORT_RESET — argin on oltava NULL.
- FPGA_PORT_UMSG_ENABLE — arg:n on oltava NULL.
- FPGA_PORT_UMSG_DISABLE — argin on oltava NULL.
FPGA_PORT_UMSG_SET_MODE — arg on osoitin:
struct fpga_port_umsg_cfg {
__u32 argsz; // in: sizeof(struct fpga_port_umsg_cfg)
__u32-liput; // in: täytyy olla 0
__u32 vihje_bittikartta; // in: UMsg-vihjetilan bittikartta. Ilmaisee mitkä UMsg:t ovat
käytössä.
};
FPGA_PORT_UMSG_SET_BASE_ADDR—
- UMsg on poistettava käytöstä ennen tämän ioctl:n antamista.
- Iova-kentän on oltava riittävän suuri puskurille kaikille UMsg:ille (num_umsgs * PAGE_SIZE).
- Kuljettajan puskurinhallinta merkitsee puskurin "käytössä".
- Jos iova on NULL, kaikki aikaisemmat alueet ovat pois käytöstä "käytössä".
- arg on osoitin:
struct fpga_port_umsg_base_addr {- u32 argsz; // in: sizeof(struct fpga_port_umsg_base_addr)
- u32-liput; // in: täytyy olla 0
- u64 iova; // sisään: IO-virtuaalinen osoite FPGA_PORT_DMA_MAP:sta. };
Huomautus:
- Porttivirheiden poistamiseksi sinun on kirjoitettava nykyisten virheiden tarkka bittimaski, esimample, cat errors > selvä
- UMsg:tä tukee vain Acceleration Stack for Intel Xeon -prosessori, jossa on integroitu FPGA.
sysfs Files
FME Header sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/
sysfs file | mmio kenttä | tyyppi | pääsy |
porttien_numero | fme_header.capability.num_ports | desimaali int | Vain luku |
välimuistin_koko | fme_header.capability.cache_size | desimaali int | Vain luku |
versio | fme_header.capability.fabric_verid | desimaali int | Vain luku |
socket_id | fme_header.capability.socket_id | desimaali int | Vain luku |
bitstream_id | fme_header.bitstream_id | hex uint64_t | Vain luku |
bitstream_metadata | fme_header.bitstream_md | hex uint64_t | Vain luku |
FME Thermal Management sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/
sysfs file | mmio kenttä | tyyppi | pääsy |
kynnys1 | thermo.threshold.tmp_thshold1 | desimaali int | Käyttäjä: Vain luku Root: luku-kirjoitus |
kynnys2 | thermo.threshold.tmp_thshold2 | desimaali int | Käyttäjä: Vain luku Root: luku-kirjoitus |
threshold_trip | thermo.threshold.therm_trip_thshold | desimaali int | Vain luku |
threshold1_reached | thermo.threshold.thshold1_status | desimaali int | Vain luku |
threshold2_reached | thermo.threshold.thshold2_status | desimaali int | Vain luku |
kynnys1_käytäntö | lämpö. threshold.thshold_policy | desimaali int | Käyttäjä: Vain luku Root: luku-kirjoitus |
lämpötila | thermo.rdsensor_fm1.fpga_temp | desimaali int | Vain luku |
FME Power Management sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/power_mgmt/
sysfs file | mmio kenttä | tyyppi | pääsy |
kulutettu | power.status.pwr_consumed | hex uint64_t | Vain luku |
kynnys1 | teho.kynnys.kynnys1 | hex uint64_t | Käyttäjä: Vain luku Root: luku-kirjoitus |
kynnys2 | teho.kynnys.kynnys2 | hex uint64_t | Käyttäjä: Vain luku Root: luku-kirjoitus |
kynnys1_tila | power.threshold.threshold1_status | desimaali allekirjoittamaton | Vain luku |
kynnys2_tila | power.threshold.threshold2_status | desimaali allekirjoittamaton | Vain luku |
rtl | power.status.fpga_latency_report | desimaali allekirjoittamaton | Vain luku |
FME Global Error sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/errors/
sysfs file | mmio kenttä | tyyppi | pääsy |
pcie0_errors | gerror.pcie0_err | hex uint64_t | Lukea kirjoittaa |
pcie1_errors | gerror.pcie1_err | hex uint64_t | Lukea kirjoittaa |
inject_error | gerror.ras_error_inj | hex uint64_t | Lukea kirjoittaa |
intel-fpga-dev.i/intel-fpga-fme.j/errors/fme-errors/
sysfs file | mmio kenttä | tyyppi | pääsy |
virheitä | gerror.fme_err | hex uint64_t | Vain luku |
ensimmäinen_virhe | gerror.fme_first_err.err_reg_status | hex uint64_t | Vain luku |
seuraava_virhe | gerror.fme_next_err.err_reg_status | hex uint64_t | Vain luku |
selkeä | Poistaa virheet, first_error, next_error | erilaisia uint64_t | Vain kirjoitus |
Huomautus:
FME-virheiden poistamiseksi sinun on kirjoitettava nykyisten virheiden tarkka bittimaski, esimample cat errors > selvä.
FME Partial Reconfiguration sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/pr/
sysfs file | mmio kenttä | tyyppi | pääsy |
interface_id | pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l | heksadesimaali 16 tavua | Vain luku |
FME Global Performance sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/dperf/clock
sysfs file | mmio kenttä | tyyppi | pääsy |
kello | gperf.clk.afu_interf_clock | hex uint64_t | Vain luku |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (Ei kelpaa kiihdytyspinoon Intel Xeon -suorittimelle, jossa on FPGA)
sysfs file | mmio kenttä | tyyppi | pääsy |
jäädyttää | gperf.ch_ctl.freeze | desimaali int | Lukea kirjoittaa |
lue_osuma | gperf.CACHE_RD_HIT | hex uint64_t | Vain luku |
read_miss | gperf.CACHE_RD_MISS | hex uint64_t | Vain luku |
write_hit | gperf.CACHE_WR_HIT | hex uint64_t | Vain luku |
write_miss | gperf.CACHE_WR_MISS | hex uint64_t | Vain luku |
hold_request | gperf.CACHE_HOLD_REQ | hex uint64_t | Vain luku |
tx_req_stall | gperf.CACHE_TX_REQ_STALL | hex uint64_t | Vain luku |
sysfs file | mmio kenttä | tyyppi | pääsy |
rx_req_stall | gperf.CACHE_RX_REQ_STALL | hex uint64_t | Vain luku |
data_write_port_contention | gperf.CACHE_DATA_WR_PORT_CONTEN | hex uint64_t | Vain luku |
tag_write_port_contention | gperf.CACHE_TAG_WR_PORT_CONTEN | hex uint64_t | Vain luku |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (Ei kelpaa kiihdytyspinoon Intel Xeon -suorittimelle, jossa on FPGA)
sysfs file | mmio kenttä | tyyppi | pääsy |
jäädyttää | gperf.vtd_ctl.freeze | desimaali int | Käyttäjä: Vain luku Root: luku-kirjoitus |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (Ei kelpaa kiihdytyspinoon Intel Xeon -suorittimelle, jossa on FPGA)
sysfs file | mmio kenttä | tyyppi | pääsy |
read_transaction | gperf.VTD_AFU0_MEM_RD_TRANS | hex uint64_t | Vain luku |
write_transaction | gperf.VTD_AFU0_MEM_WR_TRANS | hex uint64_t | Vain luku |
tlb_read_hit | gperf.VTD_AFU0_TLB_RD_HIT | hex uint64_t | Vain luku |
tlb_write_hit | gperf.VTD_AFU0_TLB_WR_HIT | hex uint64_t | Vain luku |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/fabric/
sysfs file | mmio kenttä | tyyppi | pääsy |
ota käyttöön | gperf.fab_ctl.(käytössä) | desimaali int | Käyttäjä: Vain luku Root: luku-kirjoitus |
jäädyttää | gperf.fab_ctl.freeze | desimaali int | Käyttäjä: Vain luku Root: luku-kirjoitus |
pcie0_read | gperf.FAB_PCIE0_RD | hex uint64_t | Vain luku |
pcie0_write | gperf.FAB_PCIE0_WR | hex uint64_t | Vain luku |
pcie1_read | gperf.FAB_PCIE1_RD | hex uint64_t | Vain luku |
pcie1_write | gperf.FAB_PCIE1_WR | hex uint64_t | Vain luku |
upi_read | gperf.FAB_UPI_RD | hex uint64_t | Vain luku |
upi_write | gperf.FAB_UPI_WR | hex uint64_t | Vain luku |
intel-fpga-ev.i/intel-fpga/fme.j/dperf/fabric/portk/
sysfs file | mmio kenttä | tyyppi | pääsy |
pcie0_read | gperf.FAB_PCIE0_RD | hex uint64_t | Vain luku |
pcie0_write | gperf.FAB_PCIE0_WR | hex uint64_t | Vain luku |
pcie1_read | gperf.FAB_PCIE1_RD | hex uint64_t | Vain luku |
pcie1_write | gperf.FAB_PCIE1_WR | hex uint64_t | Vain luku |
upi_read | gperf.FAB_UPI_RD | hex uint64_t | Vain luku |
upi_write | gperf.FAB_UPI_WR | hex uint64_t | Vain luku |
Portin otsikko sysfs files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | mmio kenttä | tyyppi | pääsy |
id | port_header.capability.port_number | desimaali int | Vain luku |
ltr | port_header.control.latency_tolerance | desimaali int | Vain luku |
Port AFU Header sysfs files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | mmio kenttä | tyyppi | pääsy |
afu_id | afu_header.guid | heksadesimaali 16 tavua | Vain luku |
Porttivirhe sysfs files
intel-fpga-dev.i/intel-fpga-port.k/errors/
sysfs file | mmio kenttä | tyyppi | pääsy |
virheitä | perror.port_error | hex uint64_t | Vain luku |
ensimmäinen_virhe | perror.port_first_error | hex uint64_t | Vain luku |
ensimmäinen_virheellisesti muotoiltu_vaatimus | perror.malreq | heksadesimaali 16 tavua | Vain luku |
selkeä | virhe. (kaikki virheet) | erilaisia uint64_t | Vain kirjoitus |
Huomautus:
Porttivirheiden poistamiseksi sinun on kirjoitettava nykyisten virheiden tarkka bittimaski, esimample cat errors > selvä.
Versiohistoria
Asiakirjan versio | Muutokset |
2017.10.02 | Ensimmäinen julkaisu. |
OPAE Intel FPGA Linux Device Driver Architecture Guide
Asiakirjat / Resurssit
![]() |
intel OPAE FPGA Linux Device Driver Architecture [pdfKäyttöopas OPAE FPGA Linux Device Driver Architecture, OPAE FPGA, Linux Device Driver Architecture, Driver Architecture, Architecture |