intel-logo

intel OPAE FPGA Linux Device Driver Architecture

intel-OPAE-FPGA-Linux-Device-Driver-Achitecture-product

OPAE Intel FPGA Linux Device Driver Architecture

Chofè OPAE Intel FPGA a bay koòdone pou aplikasyon espas itilizatè yo pou konfigirasyon, enumere, louvri, ak aksè akseleratè FPGA sou platfòm ki ekipe ak solisyon Intel FPGA epi pèmèt fonksyon jesyon nan nivo sistèm tankou rekonfigurasyon FPGA, jesyon pouvwa, ak Virtualization.

Materyèl Achitekti

Soti nan pwen OS la nan view, pyès ki nan konpitè FPGA parèt kòm yon aparèy PCIe regilye. Memwa aparèy FPGA la òganize lè l sèvi avèk yon estrikti done predefini (Lis Karakteristik Aparèy). Karakteristik yo sipòte pa aparèy FPGA yo ekspoze atravè estrikti done sa yo, jan yo montre anba a nan figi sa a:

Aparèy FPGA PCIe

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

Chofè a sipòte PCIe SR-IOV pou kreye Fonksyon Virtuel (VF) ki ka itilize pou bay akseleratè endividyèl yo nan machin vityèl.

Intel Corporation. Tout dwa rezève. Intel, logo Intel ak lòt mak Intel yo se mak komèsyal Intel Corporation oswa filiales li yo. Intel garanti pèfòmans pwodwi FPGA ak semi-conducteurs li yo selon espesifikasyon aktyèl yo an akò ak garanti estanda Intel a, men li rezève dwa pou fè chanjman nan nenpòt pwodwi ak sèvis nenpòt ki lè san avètisman. Intel pa asime okenn responsablite oswa responsablite ki soti nan aplikasyon an oswa itilizasyon nenpòt enfòmasyon, pwodwi oswa sèvis ki dekri la a eksepte si Intel te dakò ekspreseman alekri. Yo konseye kliyan Intel yo pou yo jwenn dènye vèsyon espesifikasyon aparèy yo anvan yo konte sou nenpòt enfòmasyon ki pibliye epi anvan yo pase lòd pou pwodwi oswa sèvis yo.

Lòt non ak mak yo ka reklame kòm pwopriyete lòt moun.

Virtualized FPGA PCIe Aparèy

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

Motè Jesyon FPGA (FME)
Motè Jesyon FPGA a fè jesyon pouvwa ak tèmik, rapò erè, rekonfigurasyon, rapò pèfòmans, ak lòt fonksyon enfrastrikti. Chak FPGA gen yon sèl FME, ki toujou jwenn aksè nan Fonksyon Fizik (PF). Aplikasyon espas itilizatè yo ka jwenn aksè eksklizif nan FME lè l sèvi avèk open(), epi lage li lè l sèvi avèk fèmen () kòm yon itilizatè privilejye (rasin).

Port
Yon pò reprezante koòdone ant twal FPGA estatik ("FPGA Interface Manager (FIM)") ak yon rejyon ki pasyèlman reconfigurable ki gen yon Fonksyon akseleratè (AF). Port la kontwole kominikasyon ki soti nan lojisyèl ak akseleratè a epi li ekspoze karakteristik tankou reset ak debogaj. Yon aparèy PCIe ka gen plizyè pò, epi chak pò ka ekspoze atravè yon VF lè w bay li lè l sèvi avèk FPGA_FME_PORT_ASSIGN ioctl sou aparèy FME a.

Inite Fonksyon akseleratè (AF).

  • Yon Inite Fonksyon Akseleratè (AF) tache ak yon pò epi li ekspoze yon rejyon MMIO 256K pou itilize pou rejis kontwòl espesifik akseleratè yo.
  • Aplikasyon espas itilizatè yo ka jwenn aksè eksklizif nan yon AFU ki tache ak yon pò lè yo itilize open() sou aparèy Port la, epi lage li lè l sèvi avèk fèmen ().
  • Aplikasyon espas itilizatè yo kapab tou mmap() akseleratè rejyon MMIO yo.

Rekonfigurasyon pasyèl
Kòm mansyone pi wo a, akseleratè yo ka rekonfigire atravè rekonfigirasyon pasyèl nan yon Fonksyon akseleratè (AF) file. Fonksyon akseleratè a (AF) dwe te pwodwi pou FIM egzak la ak rejyon estatik vize (Port) nan FPGA a; otreman, operasyon rekonfigirasyon an ap echwe epi pètèt lakòz enstabilite sistèm lan. Ou ka tcheke konpatibilite sa a lè w konpare ID koòdone ki te note nan header AF a ak ID koòdone ki ekspoze pa FME a atravè sysfs. Tcheke sa a anjeneral fè pa espas itilizatè yo anvan yo rele IOCTL rekonfigurasyon an.

Nòt:
Kounye a, nenpòt pwogram lojisyèl ki gen aksè a FPGA, ki gen ladan sa yo ki kouri nan yon lame virtualize, dwe fèmen anvan yo eseye yon rekonfigirasyon pasyèl. Etap yo ta dwe:

  1. Dechaje chofè a nan men envite a
  2. Deploge VF a nan envite a
  3. Enfim SR-IOV
  4. Fè yon pati nan rekonfigirasyon
  5. Pèmèt SR-IOV
  6. Ploge VF a pou envite a
  7. Chaje chofè a nan envite a

FPGA Virtualization
Pou pèmèt aksè nan yon akseleratè soti nan aplikasyon ki kouri nan yon VM, pò respektif AFU a bezwen yo dwe asiyen nan yon VF lè l sèvi avèk etap sa yo:

  1. PF a posede tout pò AFU pa default. Nenpòt pò ki bezwen reyaji nan yon VF dwe premye lage nan PF a atravè FPGA_FME_PORT_RELEASE ioctl sou aparèy FME a.
  2. Yon fwa N pò yo lage nan PF a, yo ka itilize kòmandman ki anba a pou pèmèt SRIOV ak VF yo. Chak VF posede yon sèl pò ak AFU. eko N > PCI_DEVICE_PATH/sriov_numvfs
  3. Pase nan VF yo nan VM.
  4. AFU anba VF aksesib nan aplikasyon nan VM (itilize menm chofè a andedan VF la).

Nòt:
Yon FME pa ka asiyen nan yon VF, kidonk PR ak lòt fonksyon jesyon yo disponib sèlman atravè PF la.

Òganizasyon chofè

Pilote aparèy modil PCIe

Òganizasyon chofè

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

Aparèy FPGA yo parèt kòm aparèy PCIe regilye; konsa, chofè aparèy FPGA PCIe (intel-FPGA-PCI.ko) toujou chaje premye fwa yo detekte yon FPGA PCIe PF oswa VF. Chofè sa a jwe yon wòl enfrastrikti nan achitekti chofè a. Li:

  • Kreye yon aparèy veso FPGA kòm yon paran nan aparèy karakteristik yo.
  • Pase nan Lis Karakteristik Aparèy la, ki aplike nan memwa BAR aparèy PCIe, pou dekouvri aparèy karakteristik ak sub-karakteristik yo epi kreye aparèy platfòm pou yo anba aparèy veso a.
  • Sipòte SR-IOV.
  • Entwodwi enfrastrikti aparèy karakteristik, ki abstrè operasyon pou sub-karakteristik epi ekspoze fonksyon komen nan chofè aparèy karakteristik.

Fonksyon chofè aparèy modil PCIe

  • Gen dekouvèt PCIe, enimerasyon aparèy, ak dekouvèt karakteristik.
  • Kreye anyè sysfs pou aparèy paran an, FPGA Management Engine (FME), ak Port.
  • Kreye ka chofè platfòm yo, sa ki lakòz nwayo Linux chaje chofè modil platfòm respektif yo.

FME Platfòm Modil Aparèy Chofè

  • Jesyon pouvwa ak tèmik, rapò erè, rapò pèfòmans, ak lòt fonksyon enfrastrikti. Ou ka jwenn aksè nan fonksyon sa yo atravè koòdone sysfs ekspoze pa chofè a FME.
  • Rekonfigurasyon pasyèl. Chofè FME a anrejistre yon Manadjè FPGA pandan inisyalizasyon PR sub-karakteristik; yon fwa li resevwa yon FPGA_FME_PORT_PR ioctl nan men ou, li envoke fonksyon koòdone komen nan men FPGA Manadjè pou konplete rekonfigirasyon an pasyèl nan bitstream la bay pò a.
  • Jesyon pò pou Virtualization. Chofè FME a prezante de ioctls, FPGA_FME_PORT_RELEASE, ki degaje pò yo bay PF la; ak FPGA_FME_PORT_ASSIGN, ki bay pò a tounen nan PF. Yon fwa yo Port la lage nan PF a, li ka asiyen nan VF a atravè koòdone SR-IOV chofè PCIe a bay. Pou plis enfòmasyon, al gade nan "FPGA Virtualization".

FME Platfòm Modil Aparèy Chofè Fonksyon

  • Kreye ne aparèy karaktè FME.
  • Kreye sysfs FME yo files ak aplike sysfs FME yo file akseswar.
  • Aplike sous-chofè karakteristik prive FME yo.
  • Sous-chofè karakteristik prive FME:
    • FME Header
    • Jesyon tèmik
    • Jesyon pouvwa
    • Global Erè
    • Rekonfigurasyon pasyèl
    • Pèfòmans Global

Port Platform Modil aparèy chofè
Menm jan ak chofè a FME, chofè a FPGA Port (ak AFU) (intel-fpga-afu. ko) se sonde yon fwa aparèy platfòm Port la kreye. Fonksyon prensipal modil sa a se bay yon koòdone pou aplikasyon espas itilizatè pou jwenn aksè nan akseleratè endividyèl yo, ki gen ladan kontwòl debaz reset sou Port, ekspòtasyon rejyon AFU MMIO, sèvis kat kat tanpon DMA, notifikasyon UMsg(1), ak fonksyon debug aleka ( gade pi wo a).

UMsg sipòte sèlman atravè Acceleration Stack pou Intel Xeon® Processor ak FPGA entegre.

Pò Platfòm Modil Aparèy Chofè Fonksyon

  • Kreye ne aparèy karaktè Port.
  • Kreye Port sysfs files ak aplike Port sysfs yo file akseswar.
  • Aplike sous-chofè karakteristik prive Port yo.
  • Sou-chofè karakteristik pò prive yo:
    • Port Header
    • AFU
    • Erè pò
    • UMsg(2)
    • Tap siyal

Aplikasyon FPGA Device Enumération
Seksyon sa a prezante kijan aplikasyon yo enumere aparèy FPGA ki soti nan yerachi sysfs anba /sys/class/fpga. Nan ansyen anamppi ba a, de aparèy Intel FPGA yo enstale nan lame a. Chak aparèy FPGA gen yon FME ak de pò (AFU). Pou chak aparèy FPGA, yo kreye yon anyè aparèy anba /sys/class/fpga:

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

Chak ne gen yon FME ak de pò (AFU) kòm aparèy timoun:
/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

An jeneral, koòdone sysfs FME/Port yo rele jan sa a:
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-fme.j/
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-port.k/

ak mwen youn apre lòt nimewote tout aparèy veso yo, j youn apre lòt nimewote FME yo ak k youn apre lòt nimewote tout pò yo.

Nœuds aparèy yo itilize pou ioctl () ak mmap () ka referans atravè:
/dev/intel-fpga-fme.j
/dev/intel-fpga-port.k

Enimerasyon chofè PCIe
Seksyon sa a bay yon souview nan koule nan kòd pou enimerasyon aparèy fèt pa intel-fpga-pci.ko. Estrikti done prensipal yo ak fonksyon yo make. Seksyon sa a pi byen swiv lè viewing kòd sous akonpayman an (pcie.c).

Estrikti Done Enimerasyon

enum fpga_id_type {
PARENT_ID,
FME_ID,
PORT_ID,
FPGA_ID_MAX
};
struct idr estatik fpga_ids[FPGA_ID_MAX];
struct fpga_chardev_info {
const char *non;
dev_t devt;
};
struct fpga_chardev_info fpga_chrdevs[] = {
{ .name = FPGA_FEATURE_DEV_FME },
{ .name = FPGA_FEATURE_DEV_PORT },
};
klas struct estatik *fpga_class;
estrikti estatik 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,}
};
estrikti estatik 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 device_id;
struct aparèy *fme_dev;
struct mutex fèmen;
struct list_head port_dev_list;
int released_port_num;
struct list_head rejyon yo;
};
struct build_feature_devs_info {
struct pci_dev *pdev;
void __iomem *ioaddr;
void __iomem *ioend;
int current_bar;
anile __iomem *pfme_hdr;
struct aparèy *parent_dev;
struct platform_device *feature_dev;
};

Koule Enimerasyon

  • ccidrv_init()
    • Inisyalize fpga_ids lè l sèvi avèk idr_init().
    • Inisyalize fpga_chrdevs[i].devt lè l sèvi avèk alloc_chrdev_region().
    • Inisyalize fpga_class lè l sèvi avèk class_create().
    • pci_register_driver(&cci_pci_driver);
  • cci_pci_probe()
    • Pèmèt aparèy PCI a, mande aksè nan rejyon li yo, mete mòd PCI mèt, ak konfigirasyon DMA.
  • cci_pci_create_feature_devs() build_info_alloc_and_init()
    • Atribye yon struct build_feature_devs_info, inisyalize li.
      .parent_dev mete nan yon anyè sysfs paran (intel-fpga-dev.id) ki genyen anyè FME ak Port sysfs.
  • parse_feature_list()
    • Mache Lis Karakteristik Aparèy BAR0 la pou dekouvri FME, Port la ak karakteristik prive yo.
  • parse_feature () parse_feature_afus () parse_feature_fme ()
    • Lè yo rankontre yon FME:
  • build_info_create_dev()
    • Atribye yon aparèy platfòm pou FME a, ki estoke nan build_feature_devs_info.feature_dev.
    • feature_dev.id inisyalize nan rezilta idr_alloc(fpga_ids[FME_ID],
    • feature_dev.parent mete sou build_feature_devs_info.parent_dev.
    • Atribye yon seri resous struct nan feature_dev.resource.
  • Atribye yon struct feature_platform_data, inisyalize li, epi estoke yon konsèy nan feature_dev.dev.platform_data
    • create_feature_instance() build_info_add_sub_feature()
    • Inisyalize feature_dev.resource[FME_FEATURE_ID_HEADER].
    • feature_platform_data_add ()
    • Inisyalize feature_platform_data.features[FME_FEATURE_ID_HEADER], tout bagay men .fops.
  • parse_feature () parse_feature_afus () parse_feature_port ()
    • Lè yo rankontre yon pò:
  • build_info_create_dev()
    • Atribye yon aparèy platfòm pou Port la, ki estoke nan build_feature_devs_info.feature_dev.
    • feature_dev.id inisyalize nan rezilta idr_alloc(fpga_ids[PORT_ID],
    • feature_dev.parent mete sou build_feature_devs_info.parent_dev.
    • Atribye yon etalaj de resous struct nan feature_dev.resource.
    • Atribye yon struct feature_platform_data, inisyalize li, epi estoke yon konsèy nan feature_dev.dev.platform_data
  • build_info_commit_dev()
    • Ajoute struct feature_platform_data.node pou Port la nan lis Ports nan struct cci_drvdata.port_dev_list
  • create_feature_instance() build_info_add_sub_feature()
    • Inisyalize feature_dev.resource[PORT_FEATURE_ID_HEADER].
  • feature_platform_data_add ()
    • Inisyalize feature_platform_data.features[PORT_FEATURE_ID_HEADER], tout bagay men .fops.
  • parse_feature () parse_feature_afus () parse_feature_port_uafu ()
    • Lè yo rankontre yon AFU:
  • create_feature_instance() build_info_add_sub_feature()
    • Inisyalize feature_dev.resource[PORT_FEATURE_ID_UAFU].
  • feature_platform_data_add ()
    • Inisyalize feature_platform_data.features[PORT_FEATURE_ID_UAFU], tout bagay men .fops.
  • parse_feature () parse_feature_private () parse_feature_fme_private ()
    • Lè yo rankontre yon karakteristik prive FME:
  • create_feature_instance() build_info_add_sub_feature()
    • Inisyalize feature_dev.resource[id].
  • feature_platform_data_add ()
    • Inisyalize feature_platform_data.features[id], tout bagay men .fops.
  • parse_feature () parse_feature_private () parse_feature_port_private ()
  • Lè yo rankontre yon karakteristik prive Port: * create_feature_instance() build_info_add_sub_feature() * Inisyalize feature_dev.resource[id]. * feature_platform_data_add() Inisyalize feature_platform_data.features[id], tout bagay men .fops.
  • parse_ports_from_fme()
    • Si chofè a chaje sou Fonksyon Fizik (PF), lè sa a:
  • Kouri parse_feature_list() koule sou chak pò ki dekri nan header FME.
  • Sèvi ak BAR ki mansyone nan chak antre pò nan header la.

Inisyalizasyon aparèy platfòm FME
Seksyon sa a bay yon souview nan koule nan kòd pou inisyalizasyon aparèy FME fèt pa intel-fpga-fme.ko. Estrikti done prensipal yo ak fonksyon yo make. Seksyon sa a pi byen swiv lè viewing kòd sous akonpayman an (fme-main.c).

Estrikti done aparèy platfòm FME

struct feature_ops {
int (*init)(struct platform_device *pdev, struct feature *karakteristik);
int (*uinit)(struct platform_device *pdev, struct feature *karakteristik);
long (*ioctl)(struct platform_device *pdev, struct feature *karakteristik,
unsigned int cmd, unsigned long arg);
int (*tès) (struct platform_device *pdev, struct feature *karakteristik);
};
karakteristik struct {
const char *non;
int resous_endèks;
void __iomem *ioaddr;
struct feature_ops *ops;
};
struct feature_platform_data {
struct list_head ne;
struct mutex fèmen;
unsigned long dev_status;
struct cdev cdev;
struct platform_device *dev;
unsigned int disable_count;
anile *prive;
int num;
int (*config_port)(struct platform_device *, u32, bool);
struct platform_device *(*fpga_for_each_port)(struct platform_device *,
void *, int (*matche) (struct platform_device *, void *)); struct
karakteristik karakteristik[0];
};
struct perf_object {
int id;
const struct attribute_group **attr_groups;
struct aparèy *fme_dev;
struct list_head ne;
struct list_head timoun yo;
struct kobject kobj;
};
struct fpga_fme {
u8 port_id;
u64 pr_err;
struct aparèy *dev_err;
struct perf_object *perf_dev;
struct feature_platform_data *pdata;
};

FME Platfòm Aparèy Inisyalizasyon koule

FME Inisyalizasyon Kouleintel-OPAE-FPGA-Linux-Device-Driver-Architecture-fig- (4)

  • fme_probe () fme_dev_init ()
    • Inisyalize yon struct fpga_fme epi estoke li nan jaden feature_platform_data.private.
  • fme_probe() fpga_dev_feature_init() feature_instance_init()
    • Sove yon struct feature_ops nan feature_platform_data.features pou chak karakteristik peple.
    • Rele fonksyon tès la, si genyen, nan struct la.
    • Rele fonksyon init la nan struct la.
  • fme_probe() fpga_register_dev_ops()
    • Kreye ne aparèy karaktè FME, enskri yon estrikti file_operasyon.

Port Platform Aparèy Inisyalizasyon
Seksyon sa a bay yon souview nan koule nan kòd pou inisyalizasyon aparèy pò fèt pa intel-fpga-afu.ko. Estrikti done prensipal yo ak fonksyon yo make. Seksyon sa a pi byen swiv lè viewing kòd sous akonpayman an (afu.c).

Port Platform Aparèy Done Estrikti

struct feature_ops {
int (*init)(struct platform_device *pdev, struct feature *karakteristik);
int (*uinit)(struct platform_device *pdev, struct feature *karakteristik);
long (*ioctl)(struct platform_device *pdev, struct feature *karakteristik,
unsigned int cmd, unsigned long arg);
int (*tès) (struct platform_device *pdev, struct feature *karakteristik);
};
karakteristik struct {
const char *non;
int resous_endèks;
void __iomem *ioaddr;
struct feature_ops *ops;
};
struct feature_platform_data {
struct list_head ne;
struct mutex fèmen;
unsigned long dev_status;
struct cdev cdev;
struct platform_device *dev;
unsigned int disable_count;
anile *prive;
int num;
int (*config_port)(struct platform_device *, u32, bool);
struct platform_device *(*fpga_for_each_port)(struct platform_device *,
void *, int (*matche) (struct platform_device *, void *));
karakteristik karakteristik struct[0];
};
struct fpga_afu_region {
endèks u32;
u32 drapo;
u64 gwosè;
u64 konpanse;
u64 phys;
struct list_head ne;
};
struct fpga_afu_dma_region {
u64 user_addr;
u64 longè;
u64 iova;
struct page **paj;
struct rb_node ne;
bool in_use;
};
struct fpga_afu {
u64 region_cur_offset;
int num_regions;
u8 num_umsgs;
struct list_head rejyon yo;
struct rb_root dma_regions;
struct feature_platform_data *pdata;
};

Port Platform Aparèy Inisyalizasyon koule

Koule Inisyalizasyon Portintel-OPAE-FPGA-Linux-Device-Driver-Architecture-fig- (5)

  • afu_probe() afu_dev_init()
    • Inisyalize yon struct fpga_afu epi estoke li nan jaden feature_platform_data.private.
  • afu_probe() fpga_dev_feature_init() feature_instance_init()
    • Sove yon struct feature_ops nan feature_platform_data.features pou chak karakteristik peple.
    • Rele fonksyon tès la, si genyen, nan struct la.
    • Rele fonksyon init la nan struct la.
  • afu_probe() fpga_register_dev_ops()
    • Kreye ne aparèy karaktè Port, enskri yon estrikti file_operasyon.

FME IOCTLs
IOCTL yo ki rele sou yon louvri file descriptor for /dev/intel-fpga-fme.j FPGA_GET_API_VERSION—retounen vèsyon aktyèl la kòm yon nonb antye, kòmanse soti nan 0.

FPGA_CHECK_EXTENSION—pa sipòte kounye a.

FPGA_FME_PORT_RELEASE—arg se yon konsèy sou yon:

struct fpga_fme_port_release {
__u32 argsz; // nan: sizeof(struct fpga_fme_port_release)
__u32 drapo; // nan: dwe 0
__u32 pò_id; // nan: pò ID (de 0) pou lage.
};

FPGA_FME_PORT_ASSIGN—arg se yon konsèy sou yon:

struct fpga_fme_port_assign {
__u32 argsz; // nan: sizeof(struct fpga_fme_port_assign)
__u32 drapo; // nan: dwe 0
__u32 pò_id; // nan: pò ID (ki soti nan 0) bay. (te dwe te
deja pibliye pa FPGA_FME_PORT_RELEASE)
};

FPGA_FME_PORT_PR—arg se yon konsèy sou yon:

struct fpga_fme_port_pr {
__u32 argsz; // nan: sizeof(struct fpga_fme_port_pr)
__u32 drapo; // nan: dwe 0
__u32 pò_id; // nan: pò ID (ki soti nan 0)
__u32 tanpon_size; // nan: gwosè tanpon bitstream an byte. Dwe gen 4-byte
aliyen.
__u64 buffer_address; // nan: adrès pwosesis nan tanpon bitstream
__u64 estati; // soti: estati erè (bitmask)
};

Port IOCTLs
IOCTL yo ki rele sou yon louvri file descriptor for /dev/intel-fpga-port.k FPGA_GET_API_VERSION—retounen vèsyon aktyèl la kòm yon nonb antye, kòmanse soti nan 0. FPGA_CHECK_EXTENSION—pa sipòte kounye a.

FPGA_PORT_GET_INFO—arg se yon konsèy sou yon:

struct fpga_port_info {
__u32 argsz; // nan: sizeof(struct fpga_port_info)
__u32 drapo; // soti: retounen 0
__u32 num_regions; // soti: kantite rejyon MMIO, 2 (1 pou AFU ak 1 pou
STP)
__u32 num_umsgs; // soti: kantite UMsg yo sipòte pa pyès ki nan konpitè
};

FPGA_PORT_GET_REGION_INFO—arg se yon konsèy sou yon:

struct fpga_port_region_info {
__u32 argsz; // nan: sizeof(struct fpga_port_region_info)
__u32 drapo; // soti: (bitmask) { FPGA_REGION_READ, FPGA_REGION_WRITE,
FPGA_REGION_MMAP }
__u32 endèks; // nan: FPGA_PORT_INDEX_UAFU oswa FPGA_PORT_INDEX_STP
__u32 padding; // nan: dwe 0
__u64 gwosè; // soti: gwosè rejyon MMIO an byte
__u64 konpanse; // soti: konpanse nan rejyon MMIO depi nan kòmansman aparèy fd
};

FPGA_PORT_DMA_MAP—arg se yon konsèy sou yon:
struct fpga_port_dma_map {
__u32 argsz; // nan: sizeof(struct fpga_port_dma_map)
__u32 drapo; // nan: dwe 0 __u64 user_addr; // nan: pwosesis vityèl
adrès. Dwe gen paj ki aliyen.
__u64 longè; // nan: longè kat nan byte. Dwe gen yon miltip nan paj
gwosè.
__u64 iova; // soti: IO adrès vityèl };

FPGA_PORT_DMA_UNMAP—arg se yon konsèy sou yon:
struct fpga_port_dma_unmap {
__u32 argsz; // nan: sizeof(struct fpga_port_dma_unmap)
__u32 drapo; // nan: dwe 0
__u64 iova; // nan: IO adrès vityèl retounen pa yon anvan
FPGA_PORT_DMA_MAP };

  • FPGA_PORT_RESET—arg dwe NULL.
  • FPGA_PORT_UMSG_ENABLE—arg dwe NULL.
  • FPGA_PORT_UMSG_DISABLE—arg yo dwe NULL.

FPGA_PORT_UMSG_SET_MODE—arg se yon konsèy sou yon:

struct fpga_port_umsg_cfg {
__u32 argsz; // nan: sizeof(struct fpga_port_umsg_cfg)
__u32 drapo; // nan: dwe 0
__u32 hint_bitmap; // nan: bitmap mòd allusion UMsg. Siyifi ki UMsg yo ye
pèmèt.
};

FPGA_PORT_UMSG_SET_BASE_ADDR—

  • UMsg dwe enfim anvan yo bay ioctl sa a.
  • Jaden iova a dwe pou yon tanpon ase laj pou tout UMsg yo (num_umsgs * PAGE_SIZE).
    • Se jesyon tanpon chofè a make kòm “nan itilize”.
    • Si iova se NULL, nenpòt rejyon anvan yo pa make kòm "nan itilize".
  • arg se yon konsèy sou yon:
    struct fpga_port_umsg_base_addr {
    • u32 argsz; // nan: sizeof(struct fpga_port_umsg_base_addr)
    • u32 drapo; // nan: dwe 0
    • u64 iova; // nan: IO adrès vityèl soti nan FPGA_PORT_DMA_MAP. };

Nòt:

  • Pou efase erè pò yo, ou dwe ekri bitmask egzak erè aktyèl yo, pou egzanpample, chat erè > klè
  • UMsg sipòte sèlman atravè Stack akselerasyon pou Intel Xeon Processor ak FPGA entegre.

sysfs Files

FME Header sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/

sysfs file mmio jaden kalite aksè
pò_num fme_header.capability.num_ports desimal int Lekti sèlman
cache_size fme_header.capability.cache_size desimal int Lekti sèlman
vèsyon fme_header.capability.fabric_verid desimal int Lekti sèlman
socket_id fme_header.capability.socket_id desimal int Lekti sèlman
bitstream_id fme_header.bitstream_id hex uint64_t Lekti sèlman
bitstream_metadata fme_header.bitstream_md hex uint64_t Lekti sèlman

FME Thermal Management sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/

sysfs file mmio jaden kalite aksè
papòt 1 thermal.threshold.tmp_thshold1 desimal int Itilizatè: Lekti sèlman Rasin: Li-ekri
papòt 2 thermal.threshold.tmp_thshold2 desimal int Itilizatè: Lekti sèlman Rasin: Li-ekri
threshold_trip thermal.threshold.therm_trip_thshold desimal int Lekti sèlman
papòt1_rive tèmik.threshold.thshold1_status desimal int Lekti sèlman
papòt2_rive tèmik.threshold.thshold2_status desimal int Lekti sèlman
threshold1_policy tèmik. threshold.thshold_policy desimal int Itilizatè: Lekti sèlman Rasin: Li-ekri
tanperati thermal.rdsensor_fm1.fpga_temp desimal int Lekti sèlman

FME Power Management sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/power_mgmt/

sysfs file mmio jaden kalite aksè
konsome power.status.pwr_consumed hex uint64_t Lekti sèlman
papòt 1 pouvwa.papòt.papòt1 hex uint64_t Itilizatè: Lekti sèlman Rasin: Li-ekri
papòt 2 pouvwa.papòt.papòt2 hex uint64_t Itilizatè: Lekti sèlman Rasin: Li-ekri
threshold1_status power.threshold.threshold1_status desimal san siyen Lekti sèlman
threshold2_status power.threshold.threshold2_status desimal san siyen Lekti sèlman
rtl power.status.fpga_latency_report desimal san siyen Lekti sèlman

FME Global Error sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/errors/

sysfs file mmio jaden kalite aksè
pcie0_errors gerror.pcie0_err hex uint64_t Li-ekri
pcie1_errors gerror.pcie1_err hex uint64_t Li-ekri
inject_error gerror.ras_error_inj hex uint64_t Li-ekri

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

sysfs file mmio jaden kalite aksè
erè gerror.fme_err hex uint64_t Lekti sèlman
premye_erè gerror.fme_first_err.err_reg_status hex uint64_t Lekti sèlman
next_error gerror.fme_next_err.err_reg_status hex uint64_t Lekti sèlman
klè Efase erè, first_error, next_error divès kalite uint64_t Ekri sèlman

Nòt:
Pou efase erè FME yo, ou dwe ekri bitmask egzak erè aktyèl yo, pa egzanpample chat erè > klè.

FME Rekonfigurasyon pasyèl sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/pr/

sysfs file mmio jaden kalite aksè
interface_id pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l hex 16-byte Lekti sèlman

FME Global Performance sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/dperf/clock

sysfs file mmio jaden kalite aksè
revèy gperf.clk.afu_interf_clock hex uint64_t Lekti sèlman

intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (Pa valab pou Stack Akselerasyon pou CPU Intel Xeon ak FPGA)

sysfs file mmio jaden kalite aksè
friz gperf.ch_ctl.freeze desimal int Li-ekri
li_frape gperf.CACHE_RD_HIT hex uint64_t Lekti sèlman
read_miss gperf.CACHE_RD_MISS hex uint64_t Lekti sèlman
ekri_frape gperf.CACHE_WR_HIT hex uint64_t Lekti sèlman
ekri_manm gperf.CACHE_WR_MISS hex uint64_t Lekti sèlman
kenbe_demann gperf.CACHE_HOLD_REQ hex uint64_t Lekti sèlman
tx_req_stall gperf.CACHE_TX_REQ_STALL hex uint64_t Lekti sèlman
sysfs file mmio jaden kalite aksè
rx_req_stall gperf.CACHE_RX_REQ_STALL hex uint64_t Lekti sèlman
done_write_port_contention gperf.CACHE_DATA_WR_PORT_CONTEN hex uint64_t Lekti sèlman
tag_write_port_contention gperf.CACHE_TAG_WR_PORT_CONTEN hex uint64_t Lekti sèlman

intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (Pa valab pou Stack Akselerasyon pou CPU Intel Xeon ak FPGA)

sysfs file mmio jaden kalite aksè
friz gperf.vtd_ctl.freeze desimal int Itilizatè: Lekti sèlman Rasin: Li-ekri

intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (Pa valab pou Stack Akselerasyon pou CPU Intel Xeon ak FPGA)

sysfs file mmio jaden kalite aksè
li_tranzaksyon gperf.VTD_AFU0_MEM_RD_TRANS hex uint64_t Lekti sèlman
ekri_tranzaksyon gperf.VTD_AFU0_MEM_WR_TRANS hex uint64_t Lekti sèlman
tlb_read_hit gperf.VTD_AFU0_TLB_RD_HIT hex uint64_t Lekti sèlman
tlb_write_hit gperf.VTD_AFU0_TLB_WR_HIT hex uint64_t Lekti sèlman

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

sysfs file mmio jaden kalite aksè
pèmèt gperf.fab_ctl.(aktive) desimal int Itilizatè: Lekti sèlman Rasin: Li-ekri
friz gperf.fab_ctl.freeze desimal int Itilizatè: Lekti sèlman Rasin: Li-ekri
pcie0_read gperf.FAB_PCIE0_RD hex uint64_t Lekti sèlman
pcie0_write gperf.FAB_PCIE0_WR hex uint64_t Lekti sèlman
pcie1_read gperf.FAB_PCIE1_RD hex uint64_t Lekti sèlman
pcie1_write gperf.FAB_PCIE1_WR hex uint64_t Lekti sèlman
upi_read gperf.FAB_UPI_RD hex uint64_t Lekti sèlman
upi_write gperf.FAB_UPI_WR hex uint64_t Lekti sèlman

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

sysfs file mmio jaden kalite aksè
pcie0_read gperf.FAB_PCIE0_RD hex uint64_t Lekti sèlman
pcie0_write gperf.FAB_PCIE0_WR hex uint64_t Lekti sèlman
pcie1_read gperf.FAB_PCIE1_RD hex uint64_t Lekti sèlman
pcie1_write gperf.FAB_PCIE1_WR hex uint64_t Lekti sèlman
upi_read gperf.FAB_UPI_RD hex uint64_t Lekti sèlman
upi_write gperf.FAB_UPI_WR hex uint64_t Lekti sèlman

Port Header sysfs files
intel-fpga-dev.i/intel-fpga-port.k/

sysfs file mmio jaden kalite aksè
id port_header.capability.port_number desimal int Lekti sèlman
ltr port_header.control.latency_tolerance desimal int Lekti sèlman

Port AFU Header sysfs files
intel-fpga-dev.i/intel-fpga-port.k/

sysfs file mmio jaden kalite aksè
afu_id afu_header.guid hex 16-byte Lekti sèlman

Erè pò sysfs files
intel-fpga-dev.i/intel-fpga-port.k/errors/

sysfs file mmio jaden kalite aksè
erè perror.port_error hex uint64_t Lekti sèlman
premye_erè perror.port_first_error hex uint64_t Lekti sèlman
first_malformed_req pèr.malreq hex 16-byte Lekti sèlman
klè pèr.(tout erè) divès kalite uint64_t Ekri sèlman

Nòt:
Pou efase erè Port yo, ou dwe ekri bitmask egzak erè aktyèl yo, pa egzanpample chat erè > klè.

Istwa revizyon

Vèsyon dokiman an Chanjman
2017.10.02 Premye Liberasyon.

OPAE Intel FPGA Linux Aparèy Driver Achitekti Gid

Dokiman / Resous

intel OPAE FPGA Linux Device Driver Architecture [pdfGid Itilizatè
OPAE FPGA Linux Aparèy Driver Architecture, OPAE FPGA, Linux Device Driver Architecture, Driver Architecture, Achitekti

Referans

Kite yon kòmantè

Adrès imel ou p ap pibliye. Jaden obligatwa yo make *