intel OPAE FPGA Linux Device Driver Architecture
OPAE Intel FPGA Linux Device Driver Architecture
Ang OPAE Intel FPGA driver naghatag og mga interface alang sa user-space applications aron ma-configure, enumerate, open, ug access ang FPGA accelerators sa mga platform nga adunay Intel FPGA solutions ug makapahimo sa mga function sa pagdumala sa lebel sa sistema sama sa FPGA reconfiguration, power management, ug virtualization.
Arkitektura sa Hardware
Gikan sa punto sa OS sa view, ang FPGA hardware makita isip usa ka regular nga PCIe device. Ang memorya sa FPGA device giorganisar gamit ang usa ka predefined data structure (Device Feature List). Ang mga feature nga gisuportahan sa FPGA device nabutyag pinaagi niining mga istruktura sa datos, sama sa gihulagway sa ubos sa mosunod nga numero:
FPGA PCIe Device
Gisuportahan sa drayber ang PCIe SR-IOV aron makahimo og Virtual Functions (VFs) nga magamit sa pag-assign sa indibidwal nga mga accelerator sa mga virtual machine.
Intel Corporation. Tanang katungod gigahin. Ang Intel, ang logo sa Intel, ug uban pang mga marka sa Intel mao ang mga marka sa pamatigayon sa Intel Corporation o mga subsidiary niini. Gigarantiya sa Intel ang paghimo sa iyang mga produkto nga FPGA ug semiconductor sa kasamtangang mga espesipikasyon subay sa standard warranty sa Intel apan adunay katungod sa paghimog mga pagbag-o sa bisan unsang produkto ug serbisyo bisan unsang orasa nga wala’y pahibalo. Ang Intel walay responsibilidad o tulubagon nga naggikan sa aplikasyon o paggamit sa bisan unsang impormasyon, produkto, o serbisyo nga gihulagway dinhi gawas sa dayag nga giuyonan sa pagsulat sa Intel. Gitambagan ang mga kostumer sa Intel nga makuha ang pinakabag-o nga bersyon sa mga detalye sa aparato sa dili pa magsalig sa bisan unsang gipatik nga kasayuran ug sa dili pa magbutang mga order alang sa mga produkto o serbisyo.
Ang ubang mga ngalan ug mga tatak mahimong maangkon ingon nga kabtangan sa uban.
Virtualized FPGA PCIe Device
FPGA Management Engine (FME)
Ang FPGA Management Engine naghimo sa gahum ug thermal management, pagreport sa sayup, pag-configure pag-usab, pagreport sa pasundayag, ug uban pang mga gimbuhaton sa imprastraktura. Ang matag FPGA adunay usa ka FME, nga kanunay ma-access pinaagi sa Physical Function (PF). Ang mga aplikasyon sa user-space mahimong makakuha og eksklusibong pag-access sa FME gamit ang open(), ug buhian kini gamit ang close() isip usa ka privileged user (root).
Dunggoanan
Ang usa ka Port nagrepresentar sa interface tali sa static nga FPGA nga panapton (ang "FPGA Interface Manager (FIM)") ug usa ka partially reconfigurable nga rehiyon nga adunay usa ka Accelerator Function (AF). Gikontrol sa Port ang komunikasyon gikan sa software hangtod sa accelerator ug gibutyag ang mga bahin sama sa pag-reset ug pag-debug. Ang PCIe device mahimong adunay daghang mga Port, ug ang matag Port mahimong ma-expose pinaagi sa VF pinaagi sa pag-assign niini gamit ang FPGA_FME_PORT_ASSIGN ioctl sa FME device.
Accelerator Function (AF) Unit
- Usa ka Accelerator Function (AF) Unit ang gilakip sa usa ka Port ug nagbutyag sa usa ka 256K MMIO nga rehiyon nga gamiton para sa accelerator-specific control registers.
- Ang mga aplikasyon sa user-space mahimong makakuha og eksklusibong pag-access sa usa ka AFU nga gilakip sa usa ka Port pinaagi sa paggamit sa open() sa Port device, ug buhian kini gamit ang close().
- Ang mga aplikasyon sa user-space mahimo usab nga mmap() accelerator MMIO nga mga rehiyon.
Partial Reconfiguration
Sama sa gihisgutan sa ibabaw, ang mga accelerator mahimong ma-reconfigure pinaagi sa partial reconfiguration sa usa ka Accelerator Function (AF) file. Ang Accelerator Function (AF) kinahanglan nga namugna alang sa eksaktong FIM ug gipunting nga static nga rehiyon (Port) sa FPGA; kung dili, ang operasyon sa pag-reconfigure mapakyas ug posible nga hinungdan sa pagkawalay kalig-on sa sistema. Kini nga compatibility mahimong masusi pinaagi sa pagtandi sa interface ID nga natala sa AF header batok sa interface ID nga gibutyag sa FME pinaagi sa sysfs. Kini nga pagsusi kasagarang gihimo sa user space sa dili pa tawgon ang reconfiguration nga IOCTL.
Mubo nga sulat:
Sa pagkakaron, ang bisan unsang software program nga nag-access sa FPGA, lakip na kadtong nagdagan sa usa ka virtualized host, kinahanglang sirado sa dili pa mosulay sa partial reconfiguration. Ang mga lakang mahimong:
- Idiskarga ang drayber gikan sa bisita
- I-unplug ang VF gikan sa bisita
- I-disable ang SR-IOV
- Paghimo partial reconfiguration
- I-enable ang SR-IOV
- I-plug ang VF sa bisita
- Ikarga ang drayber sa bisita
FPGA Virtualization
Aron ma-access ang usa ka accelerator gikan sa mga aplikasyon nga nagdagan sa usa ka VM, ang tagsa-tagsa nga pantalan sa AFU kinahanglan nga i-assign sa usa ka VF gamit ang mosunod nga mga lakang:
- Ang PF nanag-iya sa tanang AFU ports sa default. Ang bisan unsang pantalan nga kinahanglang i-reassign sa usa ka VF kinahanglan una nga ipagawas gikan sa PF pinaagi sa FPGA_FME_PORT_RELEASE ioctl sa FME device.
- Sa higayon nga ang N nga mga pantalan mapagawas gikan sa PF, ang sugo sa ubos mahimong gamiton aron makahimo sa SRIOV ug VFs. Ang matag VF nanag-iya lamang og usa ka pantalan nga adunay AFU. echo N > PCI_DEVICE_PATH/sriov_numvfs
- Ipasa ang mga VF ngadto sa mga VM.
- Ang AFU sa ilawom sa VF ma-access gikan sa mga aplikasyon sa VM (gamit ang parehas nga drayber sa sulod sa VF).
Mubo nga sulat:
Ang usa ka FME dili ma-assign sa usa ka VF, busa ang PR ug uban pang mga gimbuhaton sa pagdumala magamit lamang pinaagi sa PF.
Organisasyon sa Pagmaneho
Driver sa Device sa PCIe Module
Organisasyon sa Pagmaneho
Ang FPGA device makita isip regular nga PCIe device; sa ingon, ang FPGA PCIe device driver (intel-FPGA-PCI.ko) kanunay nga loaded una sa higayon nga ang usa ka FPGA PCIe PF o VF mamatikdan. Kini nga drayber adunay papel sa imprastruktura sa arkitektura sa drayber. Kini:
- Naghimo ug FPGA container device isip ginikanan sa feature device.
- Naglakaw pinaagi sa Device Feature List, nga gipatuman sa PCIe device BAR memory, aron sa pagdiskobre sa feature device ug sa ilang mga sub-feature ug paghimo sa mga device nga plataporma alang kanila ubos sa container device.
- Nagsuporta sa SR-IOV.
- Gipaila ang imprastraktura sa feature device, nga nag-abstract sa mga operasyon para sa mga sub-feature ug nagbutyag sa kasagarang mga function sa feature nga mga driver sa device.
PCIe Module Device Driver Functions
- Naglangkob sa pagdiskobre sa PCIe, pag-ihap sa aparato, ug pagdiskobre sa bahin.
- Naghimo ug mga direktoryo sa sysfs para sa parent device, FPGA Management Engine (FME), ug Port.
- Naghimo sa mga pananglitan sa drayber sa plataporma, nga nagpahinabo sa Linux kernel sa pagkarga sa ilang tagsa-tagsa ka mga drayber sa module sa plataporma.
FME Platform Module Device Driver
- Pagdumala sa gahum ug thermal, pagreport sa sayup, pagreport sa pasundayag, ug uban pang mga gimbuhaton sa imprastraktura. Mahimo nimong ma-access kini nga mga gimbuhaton pinaagi sa mga interface sa sysfs nga gibutyag sa drayber sa FME.
- Partial Reconfiguration. Ang drayber sa FME nagparehistro ug FPGA Manager atol sa PR sub-feature initialization; sa higayon nga kini makadawat ug FPGA_FME_PORT_PR ioctl gikan kanimo, kini nag-awhag sa komon nga interface function gikan sa FPGA Manager aron makompleto ang partial reconfiguration sa bitstream ngadto sa gihatag nga Port.
- Pagdumala sa pantalan alang sa virtualization. Ang drayber sa FME nagpaila sa duha ka ioctls, FPGA_FME_PORT_RELEASE, nga nagpagawas sa gihatag nga Port gikan sa PF; ug FPGA_FME_PORT_ASSIGN, nga nag-assign sa Port balik sa PF. Sa higayon nga mapagawas na ang Port gikan sa PF, mahimo kining i-assign sa VF pinaagi sa mga interface sa SR-IOV nga gihatag sa driver sa PCIe. Para sa dugang nga impormasyon, tan-awa ang “FPGA Virtualization”.
FME Platform Module Device Driver Functions
- Naghimo sa FME character device node.
- Naghimo sa FME sysfs files ug nagpatuman sa FME sysfs file accessors.
- Nag-implementar sa FME private feature sub-drivers.
- Mga sub-driver nga pribado nga bahin sa FME:
- Ulohan sa FME
- Pagdumala sa Thermal
- Pagdumala sa Gahum
- Kasaypanan sa tibuok kalibutan
- Partial Reconfiguration
- Kinatibuk-ang Pagpasundayag
Driver sa Device sa Port Platform Module
Sama sa drayber sa FME, ang drayber sa FPGA Port (ug AFU) (intel-fpga-afu. ko) gisusi sa higayon nga mabuhat ang aparato sa Port platform. Ang nag-unang function niini nga module mao ang paghatag og interface alang sa user-space nga mga aplikasyon aron ma-access ang indibidwal nga mga accelerators, lakip na ang batakang reset control sa Port, AFU MMIO region export, DMA buffer mapping service, UMsg(1) notification, ug remote debug functions ( tan-awa sa ibabaw).
Ang UMsg gisuportahan lamang pinaagi sa Acceleration Stack para sa Intel Xeon® Processor nga adunay Integrated FPGA.
Port Platform Module Device Driver Functions
- Naghimo sa Port character device node.
- Naghimo sa Port sysfs files ug nagpatuman sa Port sysfs file accessors.
- Nagpatuman sa Port private feature sub-drivers.
- Mga sub-driver sa pribadong bahin sa pantalan:
- Ulohan sa Port
- AFU
- Sayop sa Port
- UMsg(2)
- Pag-tap sa Signal
Aplikasyon sa FPGA Device Enumeration
Kini nga seksyon nagpaila kung giunsa pag-ihap sa mga aplikasyon ang aparato sa FPGA gikan sa hierarchy sa sysfs ubos sa /sys/class/fpga. Sa exampsa ubos, duha ka Intel FPGA device ang gi-install sa host. Ang matag FPGA device adunay usa ka FME ug duha ka Ports (AFUs). Para sa matag FPGA device, usa ka device directory ang gihimo ubos sa /sys/class/fpga:
/sys/class/fpga/intel-fpga-dev.0
/sys/class/fpga/intel-fpga-dev.1
Ang matag node adunay usa ka FME ug duha ka Ports (AFUs) isip mga device sa bata:
/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
Sa kinatibuk-an, ang mga interface sa FME/Port sysfs ginganlan sa mosunod:
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-fme.j/
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-port.k/
uban sa akong sunod-sunod nga pag-numero sa tanan nga sudlanan nga mga himan, j nga sunod-sunod nga pag-numero sa FME ug k sunod-sunod nga pag-numero sa tanan nga mga Port.
Ang mga node sa device nga gigamit para sa ioctl() ug mmap() mahimong ma-reference pinaagi sa:
/dev/intel-fpga-fme.j
/dev/intel-fpga-port.k
Enumeration sa PCIe Driver
Kini nga seksyon naghatag usa ka labawview sa dagan sa code alang sa enumeration sa device nga gihimo sa intel-fpga-pci.ko. Ang mga nag-unang istruktura sa datos ug mga gimbuhaton gipasiugda. Kini nga seksyon labing maayo nga sundon kung kanus-a viewsa kauban nga source code (pcie.c).
Mga Istruktura sa Data sa Enumeration
enum fpga_id_type {
PARENT_ID,
FME_ID,
PORT_ID,
FPGA_ID_MAX
};
static struct idr fpga_ids[FPGA_ID_MAX];
struct fpga_chardev_info {
const char *ngalan;
dev_t devt;
};
struct fpga_chardev_info fpga_chrdevs[] = {
{ .ngalan = FPGA_FEATURE_DEV_FME },
{ .ngalan = FPGA_FEATURE_DEV_PORT },
};
static nga struct class *fpga_class;
static nga istruktura 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,}
};
static struct pci_driver cci_pci_driver = {
.ngalan = 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 device *fme_dev;
struct mutex lock;
struct list_head port_dev_list;
int gipagawas_port_num;
struct list_head nga mga rehiyon;
};
struct build_feature_devs_info {
struct pci_dev *pdev;
walay __iomem *ioaddr;
walay __iomem *ioend;
int kasamtangan_bar;
walay __iomem *pfme_hdr;
struct device * parent_dev;
struct platform_device *feature_dev;
};
Daloy sa Pag-ihap
- ccidrv_init()
- Pagsugod sa fpga_ids gamit ang idr_init().
- Pagsugod sa fpga_chrdevs[i].devt gamit ang alloc_chrdev_region().
- Pagsugod sa fpga_class gamit ang class_create().
- pci_register_driver(&cci_pci_driver);
- cci_pci_probe()
- I-enable ang PCI device, pangayo og access sa mga rehiyon niini, i-set ang PCI master mode, ug i-configure ang DMA.
- cci_pci_create_feature_devs() build_info_alloc_and_init()
- Paggahin og usa ka struct build_feature_devs_info, pagsugod niini.
.parent_dev gibutang sa usa ka ginikanan sysfs direktoryo (intel-fpga-dev.id) nga naglangkob sa FME ug Port sysfs direktoryo.
- Paggahin og usa ka struct build_feature_devs_info, pagsugod niini.
- parse_feature_list()
- Lakaw ang BAR0 Device Feature List aron madiskubre ang FME, ang Port, ug ang ilang mga pribadong feature.
- parse_feature() parse_feature_afus() parse_feature_fme()
- Sa diha nga ang usa ka FME masugatan:
- build_info_create_dev()
- Paggahin ug plataporma device para sa FME, pagtago sa build_feature_devs_info.feature_dev.
- Ang feature_dev.id gisugdan sa resulta sa idr_alloc(fpga_ids[FME_ID],
- feature_dev.parent gitakda sa build_feature_devs_info.parent_dev.
- Paggahin ug usa ka han-ay sa struct resources sa feature_dev.resource.
- Paggahin og usa ka struct feature_platform_data, pagsugod niini, ug pagtipig og pointer sa feature_dev.dev.platform_data
- create_feature_instance() build_info_add_sub_feature()
- Pagsugod ug feature_dev.resource[FME_FEATURE_ID_HEADER].
- feature_platform_data_add()
- Pagsugod ug feature_platform_data.features[FME_FEATURE_ID_HEADER], tanan gawas sa .fops.
- parse_feature() parse_feature_afus() parse_feature_port()
- Sa diha nga ang usa ka Port masugatan:
- build_info_create_dev()
- Paggahin og usa ka plataporma nga device alang sa Port, pagtago sa build_feature_devs_info.feature_dev.
- Ang feature_dev.id gisugdan sa resulta sa idr_alloc(fpga_ids[PORT_ID],
- feature_dev.parent gitakda sa build_feature_devs_info.parent_dev.
- Paggahin ug laray sa struct resource sa feature_dev.resource.
- Paggahin og usa ka struct feature_platform_data, pagsugod niini, ug pagtipig og pointer sa feature_dev.dev.platform_data
- build_info_commit_dev()
- Idugang ang struct feature_platform_data.node para sa Port sa listahan sa mga Port sa struct cci_drvdata.port_dev_list
- create_feature_instance() build_info_add_sub_feature()
- Pagsugod ug feature_dev.resource[PORT_FEATURE_ID_HEADER].
- feature_platform_data_add()
- Pagsugod ug feature_platform_data.features[PORT_FEATURE_ID_HEADER], tanan gawas sa .fops.
- parse_feature() parse_feature_afus() parse_feature_port_uafu()
- Sa diha nga ang usa ka AFU masugatan:
- create_feature_instance() build_info_add_sub_feature()
- Pagsugod ug feature_dev.resource[PORT_FEATURE_ID_UAFU].
- feature_platform_data_add()
- Pagsugod ug feature_platform_data.features[PORT_FEATURE_ID_UAFU], tanan gawas sa .fops.
- parse_feature() parse_feature_private() parse_feature_fme_private()
- Kung ang usa ka pribadong bahin sa FME masugatan:
- create_feature_instance() build_info_add_sub_feature()
- Pagsugod feature_dev.resource[id].
- feature_platform_data_add()
- Pagsugod feature_platform_data.features[id], tanan gawas sa .fops.
- parse_feature() parse_feature_private() parse_feature_port_private()
- Sa diha nga ang usa ka Port pribadong bahin masugatan: * create_feature_instance() build_info_add_sub_feature() * Initialize feature_dev.resource[id]. * feature_platform_data_add() Initialize feature_platform_data.features[id], tanan gawas sa .fops.
- parse_ports_from_fme()
- Kung ang drayber gikarga sa Physical Function (PF), unya:
- Pagdalagan ang parse_feature_list() nga dagan sa matag port nga gihulagway sa FME header.
- Gamita ang BAR nga gihisgotan sa matag Port entry sa header.
Pagsugod sa FME Platform Device
Kini nga seksyon naghatag usa ka labawview sa code flow alang sa FME device initialization nga gihimo sa intel-fpga-fme.ko. Ang mga nag-unang istruktura sa datos ug mga gimbuhaton gipasiugda. Kini nga seksyon labing maayo nga sundon kung kanus-a viewsa kauban nga source code (fme-main.c).
FME Platform Device Data Structures
struct feature_ops {
int (* init)(struct platform_device *pdev, struct feature *feature);
int (*uinit)(struct platform_device *pdev, struct feature *feature);
taas (*ioctl)(struct platform_device *pdev, struct feature *feature,
unsigned int cmd, unsigned long arg);
int (* pagsulay)(struct platform_device *pdev, struct feature *feature);
};
struct feature {
const char *ngalan;
int resource_index;
walay __iomem *ioaddr;
struct feature_ops *ops;
};
struct feature_platform_data {
struct list_head node;
struct mutex lock;
unsigned taas nga dev_status;
struct cdev cdev;
struct platform_device * dev;
unsigned int disable_count;
walay sulod *pribado;
int num;
int (* config_port)(struct platform_device *, u32, bool);
struct platform_device *(*fpga_for_each_port)(struct platform_device *,
void *, int (* match)(struct platform_device *, void *)); estruktura
feature nga mga feature[0];
};
struct perf_object {
int id;
const struct attribute_group **attr_groups;
struct device *fme_dev;
struct list_head node;
struct list_head mga bata;
struct kobject kobj;
};
struct fpga_fme {
u8 port_id;
u64 pr_err;
struct device * dev_err;
struct perf_object *perf_dev;
struct feature_platform_data *pdata;
};
FME Platform Device Initialization Daloy
FME Initialization Daloy
- fme_probe() fme_dev_init()
- Pagsugod ug struct fpga_fme ug tipigi kini sa feature_platform_data.private field.
- fme_probe() fpga_dev_feature_init() feature_instance_init()
- Tipigi ang usa ka struct feature_ops ngadto sa feature_platform_data.features para sa matag populated feature.
- Tawga ang function sa pagsulay, kung adunay, gikan sa istruktura.
- Tawga ang init function gikan sa struct.
- fme_probe() fpga_register_dev_ops()
- Paghimo sa FME character device node, pagrehistro sa usa ka struct file_operasyon.
Inisyal nga Device sa Port Platform
Kini nga seksyon naghatag usa ka labawview sa dagan sa code alang sa inisyalisasyon sa port device nga gihimo sa intel-fpga-afu.ko. Ang mga nag-unang istruktura sa datos ug mga gimbuhaton gipasiugda. Kini nga seksyon labing maayo nga sundon kung kanus-a viewsa kauban nga source code (afu.c).
Port Platform Device Data Structures
struct feature_ops {
int (* init)(struct platform_device *pdev, struct feature *feature);
int (*uinit)(struct platform_device *pdev, struct feature *feature);
taas (*ioctl)(struct platform_device *pdev, struct feature *feature,
unsigned int cmd, unsigned long arg);
int (* pagsulay)(struct platform_device *pdev, struct feature *feature);
};
struct feature {
const char *ngalan;
int resource_index;
walay __iomem *ioaddr;
struct feature_ops *ops;
};
struct feature_platform_data {
struct list_head node;
struct mutex lock;
unsigned taas nga dev_status;
struct cdev cdev;
struct platform_device * dev;
unsigned int disable_count;
walay sulod *pribado;
int num;
int (* config_port)(struct platform_device *, u32, bool);
struct platform_device *(*fpga_for_each_port)(struct platform_device *,
void *, int (* match)(struct platform_device *, void *));
mga bahin sa istruktura [0];
};
struct fpga_afu_region {
u32 nga indeks;
u32 nga mga bandera;
u64 gidak-on;
u64 offset;
u64 lawas;
struct list_head node;
};
struct fpga_afu_dma_region {
u64 user_addr;
u64 gitas-on;
u64 iova;
struct page **panid;
struct rb_node node;
bool in_use;
};
struct fpga_afu {
u64 region_cur_offset;
int num_regions;
u8 num_umsgs;
struct list_head nga mga rehiyon;
struct rb_root dma_regions;
struct feature_platform_data *pdata;
};
Daloy sa Pagsugod sa Port Platform Device
Daloy sa Pagsugod sa Port
- afu_probe() afu_dev_init()
- Pagsugod ug struct fpga_afu ug tipigi kini sa feature_platform_data.private field.
- afu_probe() fpga_dev_feature_init() feature_instance_init()
- Tipigi ang usa ka struct feature_ops ngadto sa feature_platform_data.features para sa matag populated feature.
- Tawga ang function sa pagsulay, kung adunay, gikan sa istruktura.
- Tawga ang init function gikan sa struct.
- afu_probe() fpga_register_dev_ops()
- Paghimo sa Port character device node, pagrehistro sa usa ka struct file_operasyon.
FME IOCTLs
IOCTLs nga gitawag sa usa ka bukas file descriptor para sa /dev/intel-fpga-fme.j FPGA_GET_API_VERSION—ibalik ang kasamtangan nga bersyon isip integer, sugod sa 0.
FPGA_CHECK_EXTENSION—wala gisuportahan karon.
FPGA_FME_PORT_RELEASE—arg kay usa ka pointer sa usa ka:
struct fpga_fme_port_release {
__u32 argsz; // sa: sizeof(struct fpga_fme_port_release)
__u32 mga bandera; // sa: kinahanglan nga 0
__u32 port_id; // sa: port ID (gikan sa 0) aron buhian.
};
FPGA_FME_PORT_ASSIGN—arg kay usa ka pointer sa usa ka:
struct fpga_fme_port_assign {
__u32 argsz; // sa: sizeof(struct fpga_fme_port_assign)
__u32 mga bandera; // sa: kinahanglan nga 0
__u32 port_id; // sa: port ID (gikan sa 0) aron i-assign. (kinahanglan nga
nga gipagawas kaniadto sa FPGA_FME_PORT_RELEASE)
};
Ang FPGA_FME_PORT_PR—arg usa ka pointer sa usa ka:
struct fpga_fme_port_pr {
__u32 argsz; // sa: sizeof(struct fpga_fme_port_pr)
__u32 mga bandera; // sa: kinahanglan nga 0
__u32 port_id; // sa: port ID (gikan sa 0)
__u32 buffer_size; // sa: gidak-on sa bitstream buffer sa bytes. Kinahanglan nga 4-byte
nahiangay.
__u64 buffer_address; // sa: proseso nga adres sa bitstream buffer
__u64 nga kahimtang; // out: kahimtang sa sayup (bitmask)
};
Port IOCTLs
IOCTLs nga gitawag sa usa ka bukas file descriptor para sa /dev/intel-fpga-port.k FPGA_GET_API_VERSION—ibalik ang kasamtangan nga bersyon isip integer, sugod sa 0. FPGA_CHECK_EXTENSION—wala gisuportahan karon.
Ang FPGA_PORT_GET_INFO—ang arg usa ka pointer sa usa ka:
struct fpga_port_info {
__u32 argsz; // sa: sizeof(struct fpga_port_info)
__u32 mga bandera; // gawas: mibalik 0
__u32 num_rehiyon; // gawas: gidaghanon sa mga rehiyon sa MMIO, 2 (1 alang sa AFU ug 1 alang sa
STP)
__u32 num_umsgs; // out: gidaghanon sa UMsg's gisuportahan sa hardware
};
Ang FPGA_PORT_GET_REGION_INFO—ang arg usa ka pointer sa usa ka:
struct fpga_port_region_info {
__u32 argsz; // sa: sizeof(struct fpga_port_region_info)
__u32 mga bandera; // gawas: (bitmask) { FPGA_REGION_READ, FPGA_REGION_WRITE,
FPGA_REGION_MMAP }
__u32 indeks; // sa: FPGA_PORT_INDEX_UAFU o FPGA_PORT_INDEX_STP
__u32 padding; // sa: kinahanglan nga 0
__u64 gidak-on; // out: gidak-on sa MMIO nga rehiyon sa bytes
__u64 offset; // out: offset sa MMIO nga rehiyon gikan sa pagsugod sa device fd
};
FPGA_PORT_DMA_MAP—arg kay usa ka pointer sa usa ka:
struct fpga_port_dma_map {
__u32 argsz; // sa: sizeof(struct fpga_port_dma_map)
__u32 mga bandera; // sa: kinahanglan nga 0 __u64 user_addr; // sa: proseso virtual
adres. Kinahanglan nga i-align sa panid.
__u64 gitas-on; // sa: gitas-on sa pagmapa sa bytes. Kinahanglan nga daghang panid
gidak-on.
__u64 iova; // gawas: IO virtual nga adres };
FPGA_PORT_DMA_UNMAP—arg kay usa ka pointer sa usa ka:
struct fpga_port_dma_unmap {
__u32 argsz; // sa: sizeof(struct fpga_port_dma_unmap)
__u32 mga bandera; // sa: kinahanglan nga 0
__u64 iova; // sa: IO virtual nga adres nga gibalik sa nauna
FPGA_PORT_DMA_MAP };
- FPGA_PORT_RESET—ang arg kinahanglang NULL.
- FPGA_PORT_UMSG_ENABLE—ang arg kinahanglang NULL.
- FPGA_PORT_UMSG_DISABLE—ang mga argumento kinahanglang NULL.
FPGA_PORT_UMSG_SET_MODE—arg kay pointer sa usa ka:
struct fpga_port_umsg_cfg {
__u32 argsz; // sa: sizeof(struct fpga_port_umsg_cfg)
__u32 mga bandera; // sa: kinahanglan nga 0
__u32 hint_bitmap; // sa: UMsg hint mode bitmap. Nagpasabot kung kinsa ang mga UMsg
gipaandar.
};
FPGA_PORT_UMSG_SET_BASE_ADDR—
- Ang UMsg kinahanglan nga ma-disable sa dili pa i-isyu kini nga ioctl.
- Ang field sa iova kinahanglan nga para sa buffer nga igo-igo para sa tanang UMsg's (num_umsgs * PAGE_SIZE).
- Ang buffer gimarkahan nga "gigamit" sa pagdumala sa buffer sa drayber.
- Kung ang iova NULL, ang bisan unsang miaging rehiyon wala’y marka nga "gigamit".
- Ang arg usa ka pointer sa usa ka:
struct fpga_port_umsg_base_addr {- u32 argsz; // sa: sizeof(struct fpga_port_umsg_base_addr)
- u32 nga mga bandera; // sa: kinahanglan nga 0
- u64 iova; // sa: IO virtual nga adres gikan sa FPGA_PORT_DMA_MAP. };
Mubo nga sulat:
- Aron malimpyohan ang mga sayup sa pantalan, kinahanglan nimo nga isulat ang eksaktong bitmask sa karon nga mga sayup, alang sa example, iring mga sayop > klaro
- Ang UMsg gisuportahan lamang pinaagi sa Acceleration Stack para sa Intel Xeon Processor nga adunay Integrated FPGA.
sysfs Files
FME Header sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/
sysfs file | natad sa mmio | tipo | access |
ports_num | fme_header.capability.num_ports | decimal int | Basaha-lamang |
cache_size | fme_header.capability.cache_size | decimal int | Basaha-lamang |
bersyon | fme_header.capability.fabric_verid | decimal int | Basaha-lamang |
socket_id | fme_header.capability.socket_id | decimal int | Basaha-lamang |
bitstream_id | fme_header.bitstream_id | hex uint64_t | Basaha-lamang |
bitstream_metadata | fme_header.bitstream_md | hex uint64_t | Basaha-lamang |
FME Thermal Management sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/
sysfs file | natad sa mmio | tipo | access |
sukdanan1 | thermal.threshold.tmp_thshold1 | decimal int | User: Read-only Root: Read-write |
sukdanan2 | thermal.threshold.tmp_thshold2 | decimal int | User: Read-only Root: Read-write |
threshold_trip | thermal.threshold.therm_trip_thshold | decimal int | Basaha-lamang |
threshold1_reached | thermal.threshold.thshold1_status | decimal int | Basaha-lamang |
threshold2_reached | thermal.threshold.thshold2_status | decimal int | Basaha-lamang |
threshold1_policy | sa kainit. threshold.thshold_policy | decimal int | User: Read-only Root: Read-write |
temperatura | thermal.rdsensor_fm1.fpga_temp | decimal int | Basaha-lamang |
FME Power Management sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/power_mgmt/
sysfs file | natad sa mmio | tipo | access |
konsumo | power.status.pwr_consumed | hex uint64_t | Basaha-lamang |
sukdanan1 | gahum.sukaranan.sukaranan1 | hex uint64_t | User: Read-only Root: Read-write |
sukdanan2 | gahum.sukaranan.sukaranan2 | hex uint64_t | User: Read-only Root: Read-write |
threshold1_status | power.threshold.threshold1_status | desimal nga wala gipirmahan | Basaha-lamang |
threshold2_status | power.threshold.threshold2_status | desimal nga wala gipirmahan | Basaha-lamang |
rtl | power.status.fpga_latency_report | desimal nga wala gipirmahan | Basaha-lamang |
FME Global Error sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/errors/
sysfs file | natad sa mmio | tipo | access |
pcie0_errors | gerror.pcie0_err | hex uint64_t | Pagbasa-pagsulat |
pcie1_errors | gerror.pcie1_err | hex uint64_t | Pagbasa-pagsulat |
inject_error | gerror.ras_error_inj | hex uint64_t | Pagbasa-pagsulat |
intel-fpga-dev.i/intel-fpga-fme.j/errors/fme-errors/
sysfs file | natad sa mmio | tipo | access |
mga sayop | gerror.fme_err | hex uint64_t | Basaha-lamang |
first_error | gerror.fme_first_err.err_reg_status | hex uint64_t | Basaha-lamang |
sunod_sayup | gerror.fme_next_err.err_reg_status | hex uint64_t | Basaha-lamang |
klaro | Pagtangtang sa mga sayup, first_error, next_error | lainlain nga uint64_t | Pagsulat-lamang |
Mubo nga sulat:
Aron malimpyohan ang mga sayup sa FME, kinahanglan nimo nga isulat ang eksaktong bitmask sa karon nga mga sayup, alang sa example cat errors > klaro.
FME Partial Reconfiguration sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/pr/
sysfs file | natad sa mmio | tipo | access |
interface_id | pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l | hex 16-byte | Basaha-lamang |
FME Global Performance sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/dperf/clock
sysfs file | natad sa mmio | tipo | access |
orasan | gperf.clk.afu_interf_clock | hex uint64_t | Basaha-lamang |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (Dili balido alang sa Acceleration Stack para sa Intel Xeon CPU nga adunay mga FPGA)
sysfs file | natad sa mmio | tipo | access |
freeze | gperf.ch_ctl.freeze | decimal int | Pagbasa-pagsulat |
read_hit | gperf.CACHE_RD_HIT | hex uint64_t | Basaha-lamang |
basaha_miss | gperf.CACHE_RD_MISS | hex uint64_t | Basaha-lamang |
write_hit | gperf.CACHE_WR_HIT | hex uint64_t | Basaha-lamang |
write_miss | gperf.CACHE_WR_MISS | hex uint64_t | Basaha-lamang |
hold_hangyo | gperf.CACHE_HOLD_REQ | hex uint64_t | Basaha-lamang |
tx_req_stall | gperf.CACHE_TX_REQ_STALL | hex uint64_t | Basaha-lamang |
sysfs file | natad sa mmio | tipo | access |
rx_req_stall | gperf.CACHE_RX_REQ_STALL | hex uint64_t | Basaha-lamang |
data_write_port_contention | gperf.CACHE_DATA_WR_PORT_CONTEN | hex uint64_t | Basaha-lamang |
tag_write_port_contention | gperf.CACHE_TAG_WR_PORT_CONTEN | hex uint64_t | Basaha-lamang |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (Dili balido alang sa Acceleration Stack alang sa Intel Xeon CPU nga adunay mga FPGA)
sysfs file | natad sa mmio | tipo | access |
freeze | gperf.vtd_ctl.freeze | decimal int | User: Read-only Root: Read-write |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (Dili balido alang sa Acceleration Stack alang sa Intel Xeon CPU nga adunay mga FPGA)
sysfs file | natad sa mmio | tipo | access |
read_transaction | gperf.VTD_AFU0_MEM_RD_TRANS | hex uint64_t | Basaha-lamang |
pagsulat_transaksyon | gperf.VTD_AFU0_MEM_WR_TRANS | hex uint64_t | Basaha-lamang |
tlb_read_hit | gperf.VTD_AFU0_TLB_RD_HIT | hex uint64_t | Basaha-lamang |
tlb_write_hit | gperf.VTD_AFU0_TLB_WR_HIT | hex uint64_t | Basaha-lamang |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/fabric/
sysfs file | natad sa mmio | tipo | access |
makahimo | gperf.fab_ctl.(gipaandar) | decimal int | User: Read-only Root: Read-write |
freeze | gperf.fab_ctl.freeze | decimal int | User: Read-only Root: Read-write |
pcie0_basaha | gperf.FAB_PCIE0_RD | hex uint64_t | Basaha-lamang |
pcie0_write | gperf.FAB_PCIE0_WR | hex uint64_t | Basaha-lamang |
pcie1_basaha | gperf.FAB_PCIE1_RD | hex uint64_t | Basaha-lamang |
pcie1_write | gperf.FAB_PCIE1_WR | hex uint64_t | Basaha-lamang |
upi_basaha | gperf.FAB_UPI_RD | hex uint64_t | Basaha-lamang |
upi_write | gperf.FAB_UPI_WR | hex uint64_t | Basaha-lamang |
intel-fpga-ev.i/intel-fpga/fme.j/dperf/fabric/portk/
sysfs file | natad sa mmio | tipo | access |
pcie0_basaha | gperf.FAB_PCIE0_RD | hex uint64_t | Basaha-lamang |
pcie0_write | gperf.FAB_PCIE0_WR | hex uint64_t | Basaha-lamang |
pcie1_basaha | gperf.FAB_PCIE1_RD | hex uint64_t | Basaha-lamang |
pcie1_write | gperf.FAB_PCIE1_WR | hex uint64_t | Basaha-lamang |
upi_basaha | gperf.FAB_UPI_RD | hex uint64_t | Basaha-lamang |
upi_write | gperf.FAB_UPI_WR | hex uint64_t | Basaha-lamang |
Port Header sysfs files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | natad sa mmio | tipo | access |
id | port_header.capability.port_number | decimal int | Basaha-lamang |
Ang ltr | port_header.control.latency_tolerance | decimal int | Basaha-lamang |
Port AFU Header sysfs files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | natad sa mmio | tipo | access |
afu_id | afu_header.guid | hex 16-byte | Basaha-lamang |
Port Error sysfs files
intel-fpga-dev.i/intel-fpga-port.k/errors/
sysfs file | natad sa mmio | tipo | access |
mga sayop | perror.port_error | hex uint64_t | Basaha-lamang |
first_error | perror.port_first_error | hex uint64_t | Basaha-lamang |
first_malformed_req | perror.malreq | hex 16-byte | Basaha-lamang |
klaro | kasaypanan.(tanan nga sayop) | lainlain nga uint64_t | Pagsulat-lamang |
Mubo nga sulat:
Aron malimpyohan ang mga sayup sa Port, kinahanglan nimo nga isulat ang eksaktong bitmask sa karon nga mga sayup, alang sa example cat errors > klaro.
Kasaysayan sa Pagbag-o
Bersyon sa Dokumento | Mga kausaban |
2017.10.02 | Inisyal nga Pagpagawas. |
OPAE Intel FPGA Linux Device Driver Architecture Guide
Mga Dokumento / Mga Kapanguhaan
![]() |
intel OPAE FPGA Linux Device Driver Architecture [pdf] Giya sa Gumagamit OPAE FPGA Linux Device Driver Architecture, OPAE FPGA, Linux Device Driver Architecture, Driver Architecture, Architecture |