Intel OPAE FPGA Linux Device Driver Architecture
OPAE Intel FPGA Linux Device Driver Architecture
Ny mpamily OPAE Intel FPGA dia manome interface tsara ho an'ny rindranasan'ny habaka mpampiasa mba handrindrana, hanisa, hanokafana ary hidirana amin'ny accelerators FPGA amin'ny sehatra misy vahaolana Intel FPGA ary manome fahafahana ny asa fitantanana amin'ny sehatra toy ny fanavaozana ny FPGA, ny fitantanana herinaratra ary ny virtoaly.
Hardware Architecture
Avy amin'ny dikan'ny OS view, ny fitaovana FPGA dia miseho ho fitaovana PCIe mahazatra. Ny fitadidiana fitaovana FPGA dia voalamina amin'ny alàlan'ny firafitry ny angon-drakitra efa voafaritra mialoha (Lisitry ny fitaovana). Ireo endri-javatra tohanan'ny fitaovana FPGA dia miseho amin'ny alalan'ireto rafitra angon-drakitra ireto, araka ny aseho eto ambany amin'ity sary manaraka ity:
FPGA PCIe Device
Ny mpamily dia manohana ny PCIe SR-IOV mba hamoronana Virtual Functions (VFs) izay azo ampiasaina hanendrena ny accelerators tsirairay amin'ny milina virtoaly.
Intel Corporation. Zo rehetra voatokana. Ny Intel, ny logo Intel, ary ny marika Intel hafa dia marika famantarana ny Intel Corporation na ny sampany. Ny Intel dia manome antoka ny fanatanterahana ny vokatra FPGA sy ny semiconductor amin'ny fepetra ankehitriny mifanaraka amin'ny fiantohana manara-penitra an'ny Intel saingy manana zo hanova ny vokatra sy serivisy amin'ny fotoana rehetra tsy misy filazana. Tsy mandray andraikitra na andraikitra avy amin'ny fampiharana na fampiasana fampahalalana, vokatra na serivisy voalaza eto ny Intel afa-tsy izay neken'ny Intel an-tsoratra. Manoro hevitra ny mpanjifa Intel mba hahazo ny kinova farany momba ny fanondroana fitaovana alohan'ny hianteherana amin'ny fampahalalana navoaka sy alohan'ny hametrahana baiko ho an'ny vokatra na serivisy.
Ny anarana sy ny marika hafa dia azo lazaina ho fananan'ny hafa.
Fitaovana FPGA PCIe virtoaly
FPGA Management Engine (FME)
Ny motera Fitantanana FPGA dia manatanteraka ny fitantanana ny herinaratra sy ny hafanana, ny tatitra momba ny fahadisoana, ny fanavaozana, ny tatitra momba ny zava-bita ary ny asa fotodrafitrasa hafa. Ny FPGA tsirairay dia manana FME iray, izay idirana hatrany amin'ny alàlan'ny Fisiana ara-batana (PF). Ny rindranasa mpampiasa-space dia afaka mahazo fidirana manokana amin'ny FME amin'ny alàlan'ny open(), ary mamoaka azy amin'ny alàlan'ny close() ho mpampiasa manana tombontsoa (root).
Port
Ny seranana dia maneho ny fifandraisana misy eo amin'ny lamba FPGA static (ny “FPGA Interface Manager (FIM)”) sy ny faritra azo amboarina amin'ny ampahany misy ny Accelerator Function (AF). Ny Port dia mifehy ny fifandraisana avy amin'ny rindrambaiko mankany amin'ny accelerator ary mampiseho ireo endri-javatra toy ny famerenana sy ny debug. Ny fitaovana PCIe dia mety manana seranana maromaro, ary ny seranan-tsambo tsirairay dia azo aseho amin'ny alalan'ny VF amin'ny alàlan'ny fanendrena azy amin'ny fampiasana ny FPGA_FME_PORT_ASSIGN ioctl amin'ny fitaovana FME.
Fiarahan'ny Accelerator (AF).
- Ny singa Accelerator Function (AF) dia mifatotra amin'ny seranana ary mampiseho faritra 256K MMIO ampiasaina amin'ny rejisitra fanaraha-maso manokana amin'ny accelerator.
- Afaka mahazo fidirana manokana amin'ny AFU mipetaka amin'ny seranana ny rindranasan'ny habaka mpampiasa amin'ny alàlan'ny fampiasana open() amin'ny fitaovana Port, ary mamoaka izany amin'ny alalan'ny close().
- Ny fampiharana habaka mpampiasa dia afaka koa mmap() accelerator faritra MMIO.
Reconfiguration ampahany
Araka ny voalaza etsy ambony, ny accelerators dia azo amboarina amin'ny alàlan'ny fanavaozana ampahany amin'ny Accelerator Function (AF) file. Tsy maintsy noforonina ho an'ny FIM marina sy faritra static (Port) an'ny FPGA ny Accelerator Function (AF); raha tsy izany dia tsy hahomby ny asa fanamboarana ary mety hiteraka tsy fandriam-pahalemana ny rafitra. Ity fifanarahana ity dia azo jerena amin'ny fampitahana ny ID interface voamarika ao amin'ny lohatenin'ny AF amin'ny ID interface izay asehon'ny FME amin'ny alàlan'ny sysfs. Ity fisavana ity dia matetika ataon'ny habaka mpampiasa alohan'ny hiantsoana ny fanavaozana IOCTL.
Fanamarihana:
Amin'izao fotoana izao, izay programa rindrambaiko miditra amin'ny FPGA, anisan'izany ireo mandeha amin'ny mpampiantrano virtoaly, dia tsy maintsy mikatona alohan'ny hanandrana fanavaozana ampahany. Ny dingana dia ho:
- Esory ny mpamily amin'ny vahiny
- Esory ny VF amin'ny vahiny
- Atsaharo ny SR-IOV
- Manaova fanamboarana ampahany
- Alefaso ny SR-IOV
- Ampidiro amin'ny vahiny ny VF
- Ampidiro ao amin'ny vahiny ny mpamily
FPGA Virtualization
Mba ahafahana miditra amin'ny accelerator avy amin'ny rindranasa mandeha amin'ny VM, ny seranan-tsambon'ny AFU tsirairay dia mila apetraka amin'ny VF amin'ny fampiasana ireto dingana manaraka ireto:
- Ny PF dia manana ny seranana AFU rehetra amin'ny alàlan'ny default. Izay seranan-tsambo mila afindra amin'ny VF dia tsy maintsy avoaka amin'ny PF aloha amin'ny alalan'ny FPGA_FME_PORT_RELEASE ioctl amin'ny fitaovana FME.
- Raha vao mivoaka ny port N avy amin'ny PF, dia azo ampiasaina ny baiko etsy ambany mba ahafahan'ny SRIOV sy VFs. Ny VF tsirairay dia tsy manana afa-tsy seranana iray misy AFU. echo N > PCI_DEVICE_PATH/sriov_numvfs
- Mandehana amin'ny VF mankany VM.
- Ny AFU eo ambanin'ny VF dia azo idirana amin'ny fampiharana ao amin'ny VM (mampiasa mpamily iray ao anatin'ny VF).
Fanamarihana:
Ny FME dia tsy azo tendrena amin'ny VF, noho izany ny PR sy ny asa fitantanana hafa dia tsy misy afa-tsy amin'ny PF.
Fandaminana mpamily
PCIe Module Device Driver
Fandaminana mpamily
Ny fitaovana FPGA dia miseho ho fitaovana PCIe mahazatra; noho izany, ny mpamily fitaovana FPGA PCIe (intel-FPGA-PCI.ko) dia alefa aloha foana rehefa hita ny FPGA PCIe PF na VF. Ity mpamily ity dia mitana anjara toerana ara-drafitra amin'ny rafitry ny mpamily. izany:
- Mamorona fitaovana fitahirizana FPGA ho toy ny ray aman-drenin'ireo fitaovana manasongadina.
- Mandeha amin'ny lisitry ny endri-javatra amin'ny fitaovana, izay ampiharina amin'ny fitadidiana BAR fitaovana PCIe, mba hahitana ireo fitaovana manasongadina sy ny sub-endriny ary mamorona fitaovana amin'ny sehatra ho azy ireo eo ambanin'ny fitaovana fitahirizana.
- Manohana ny SR-IOV.
- Mampiditra ny fotodrafitrasa fitaovan-tsarimihetsika, izay manaisotra ny asa ho an'ny zana-tsarimihetsika ary mampiseho ny fiasa mahazatra amin'ny mpamily fitaovana.
PCIe Module Device Driver Functions
- Ahitana fikarohana PCIe, fanisana fitaovana ary fahitana endri-javatra.
- Mamorona lahatahiry sysfs ho an'ny fitaovan'ny ray aman-dreny, FPGA Management Engine (FME), ary Port.
- Mamorona ohatry ny mpamily amin'ny sehatra, ka mahatonga ny kernel Linux hampiditra ny mpamily modely amin'ny sehatra tsirairay.
FME Platform Module Device Driver
- Fitantanana herinaratra sy hafanana, tatitra lesoka, tatitra momba ny zava-bita ary asa fotodrafitrasa hafa. Azonao atao ny miditra amin'ireo fiasa ireo amin'ny alàlan'ny interface sysfs asehon'ny mpamily FME.
- Reconfiguration ampahany. Ny mpamily FME dia manoratra Mpitantana FPGA mandritra ny fanombohana sub-feature PR; raha vao mahazo FPGA_FME_PORT_PR ioctl avy aminao izy dia miantso ny fonction interface mahazatra avy amin'ny FPGA Manager hamita ny fanamboarana ampahany amin'ny bitstream mankany amin'ny Port nomena.
- Fitantanana seranan-tsambo ho an'ny virtoaly. Ny mpamily FME dia mampiditra ioctls roa, FPGA_FME_PORT_RELEASE, izay mamoaka ny Port nomena avy amin'ny PF; ary FPGA_FME_PORT_ASSIGN, izay mamerina ny Port ho PF. Raha vao mivoaka avy ao amin'ny PF ny Port, dia azo apetraka amin'ny VF amin'ny alàlan'ny interface SR-IOV nomen'ny mpamily PCIe. Raha mila fanazavana fanampiny dia jereo ny “FGA Virtualization”.
FME Platform Module Device Driver Functions
- Mamorona ny node fitaovana toetran'ny FME.
- Mamorona ny FME sysfs files ary mampihatra ny FME sysfs file accessors.
- Mampihatra ny sub-driver FME manokana.
- Ireo sub-driver FME manokana:
- Lohatenin'ny FME
- Fitantanana mafana
- Fitantanana herinaratra
- Global Error
- Reconfiguration ampahany
- Global Performance
Port Platform Module Device Driver
Mitovitovy amin'ny mpamily FME, ny mpamily FPGA Port (sy AFU) (intel-fpga-afu. ko) dia voazaha toetra rehefa noforonina ny fitaovana Port platform. Ny tena asa an'ity môdely ity dia ny manome interface tsara ho an'ny rindranasan'ny habaka mpampiasa mba hidirana amin'ny accelerators tsirairay, ao anatin'izany ny fanaraha-maso famerenana fototra amin'ny Port, fanondranana faritra AFU MMIO, serivisy fametahana sariitatra DMA, fampahafantarana UMsg(1), ary fiasa debug lavitra ( jereo etsy ambony).
UMsg dia tohanana amin'ny alàlan'ny Acceleration Stack ho an'ny Intel Xeon® Processor miaraka amin'ny FPGA Integrated.
Port Platform Module Device Driver Functions
- Mamorona ny node fitaovana Port character.
- Mamorona ny Port sysfs files ary mampihatra ny Port sysfs file accessors.
- Mampihatra ny sub-drivers amin'ny Port private feature.
- Port private feature sub-drivers:
- Port Header
- AFU
- Error Port
- UMsg(2)
- Signal Tap
Fanisana fitaovana FPGA
Ity fizarana ity dia mampiditra ny fomba fanisan'ny fampiharana ny fitaovana FPGA avy amin'ny ambaratonga sysfs eo ambanin'ny /sys/class/fpga. Ao amin'ny exampeo ambany, fitaovana Intel FPGA roa no napetraka ao amin'ny mpampiantrano. Ny fitaovana FPGA tsirairay dia manana FME iray sy seranan-tsambo roa (AFU). Ho an'ny fitaovana FPGA tsirairay dia misy lahatahiry fitaovana noforonina eo ambanin'ny /sys/class/fpga:
/sys/class/fpga/intel-fpga-dev.0
/sys/class/fpga/intel-fpga-dev.1
Ny node tsirairay dia manana FME iray sy seranan-tsambo roa (AFU) ho fitaovana ankizy:
/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
Amin'ny ankapobeny, ny FME/Port sysfs interfaces dia nomena anarana toy izao:
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-fme.j/
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-port.k/
miaraka amin'ny fanisàko ny laharan'ny fitaovan'ny kaontenera rehetra, j fanisana isa ny FME sy ny k misesy ny Seranana rehetra.
Ny node fitaovana ampiasaina amin'ny ioctl() sy mmap() dia azo lazaina amin'ny alalan'ny:
/dev/intel-fpga-fme.j
/dev/intel-fpga-port.k
Fanisana mpamily PCIe
Ity fizarana ity dia manome mihoatraview ny fikorianan'ny kaody ho an'ny fanisana fitaovana ataon'ny intel-fpga-pci.ko. Asongadina ireo rafitra sy fiasa fototra. Ity fizarana ity no tsara arahina rehefa viewamin'ny kaody loharano miaraka aminy (pcie.c).
Rafitra angona fanisana
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 * anarana;
dev_t devt;
};
struct fpga_chardev_info fpga_chrdevs[] = {
{ .name = FPGA_FEATURE_DEV_FME },
{ .name = FPGA_FEATURE_DEV_PORT },
};
kilasy struct static * fpga_class;
static struct 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 = {
.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;
fitaovana struct *fme_dev;
struct mutex hidin-trano;
struct list_head port_dev_list;
int released_port_num;
struct list_head faritra;
};
struct build_feature_devs_info {
struct pci_dev *pdev;
void __iomem *ioaddr;
void __iomem *ioend;
int current_bar;
void __iomem *pfme_hdr;
fitaovana struct * parent_dev;
struct platform_device *feature_dev;
};
Fikoriana fanisana
- ccidrv_init()
- Atombohy ny fpga_ids mampiasa idr_init().
- Atombohy ny fpga_chrdevs[i].devt mampiasa alloc_chrdev_region().
- Atombohy ny fpga_class mampiasa class_create().
- pci_register_driver(&cci_pci_driver);
- cci_pci_probe()
- Alefaso ny fitaovana PCI, mangataha fidirana amin'ny faritra misy azy, apetraho ny maodely master PCI, ary amboary ny DMA.
- cci_pci_create_feature_devs() build_info_alloc_and_init()
- Manomeza struct build_feature_devs_info, atombohy izany.
.parent_dev dia napetraka amin'ny lahatahiry sysfs ray aman-dreny (intel-fpga-dev.id) misy ny lahatahiry FME sy Port sysfs.
- Manomeza struct build_feature_devs_info, atombohy izany.
- parse_feature_list()
- Mandehana amin'ny lisitry ny endri-javatra fitaovana BAR0 hahitana ny FME, ny seranan-tsambo ary ny endri-javatra manokana.
- parse_feature() parse_feature_afus() parse_feature_fme()
- Rehefa sendra ny FME:
- build_info_create_dev()
- Manomeza fitaovana sehatra ho an'ny FME, mitahiry ao amin'ny build_feature_devs_info.feature_dev.
- feature_dev.id dia natomboka tamin'ny vokatry ny idr_alloc(fpga_ids[FME_ID],
- feature_dev.parent dia napetraka amin'ny build_feature_devs_info.parent_dev.
- Mametraha karazana loharanon-drafitra ao amin'ny feature_dev.resource.
- Manomeza struct feature_platform_data, atombohy izany, ary tehirizo tondro ao amin'ny feature_dev.dev.platform_data
- create_feature_instance() build_info_add_sub_feature()
- Atombohy ny feature_dev.resource[FME_FEATURE_ID_HEADER].
- feature_platform_data_add()
- Atombohy ny feature_platform_data.features[FME_FEATURE_ID_HEADER], afa-tsy .fops.
- parse_feature() parse_feature_afus() parse_feature_port()
- Rehefa sendra misy Port:
- build_info_create_dev()
- Mametraha fitaovana amin'ny sehatra ho an'ny Port, mitahiry ao amin'ny build_feature_devs_info.feature_dev.
- feature_dev.id dia natomboka tamin'ny vokatry ny idr_alloc(fpga_ids[PORT_ID],
- feature_dev.parent dia napetraka amin'ny build_feature_devs_info.parent_dev.
- Mametraha karazana loharanon-drafitra ao amin'ny feature_dev.resource.
- Manomeza struct feature_platform_data, atombohy izany, ary tehirizo tondro ao amin'ny feature_dev.dev.platform_data
- build_info_commit_dev()
- Ampio ny struct feature_platform_data.node ho an'ny Port amin'ny lisitry ny Ports ao amin'ny struct cci_drvdata.port_dev_list
- create_feature_instance() build_info_add_sub_feature()
- Atombohy ny feature_dev.resource[PORT_FEATURE_ID_HEADER].
- feature_platform_data_add()
- Atombohy ny feature_platform_data.features[PORT_FEATURE_ID_HEADER], afa-tsy .fops.
- parse_feature() parse_feature_afus() parse_feature_port_uafu()
- Rehefa sendra ny AFU:
- create_feature_instance() build_info_add_sub_feature()
- Atombohy ny feature_dev.resource[PORT_FEATURE_ID_UAFU].
- feature_platform_data_add()
- Atombohy ny feature_platform_data.features[PORT_FEATURE_ID_UAFU], afa-tsy .fops.
- parse_feature() parse_feature_private() parse_feature_fme_private()
- Rehefa sendra ny endri-javatra manokana FME:
- create_feature_instance() build_info_add_sub_feature()
- Atombohy ny feature_dev.resource[id].
- feature_platform_data_add()
- Atombohy ny feature_platform_data.features[id], afa-tsy ny .fops.
- parse_feature() parse_feature_private() parse_feature_port_private()
- Rehefa sendra misy endri-javatra manokana Port: * create_feature_instance() build_info_add_sub_feature() * Initialize feature_dev.resource[id]. * feature_platform_data_add() Atombohy ny feature_platform_data.features[id], afa-tsy .fops.
- parse_ports_from_fme()
- Raha toa ka tafiditra ao amin'ny Physical Function (PF) ny mpamily, dia:
- Alefaso ny fikorianan'ny parse_feature_list() isaky ny seranana voalaza ao amin'ny lohatenin'ny FME.
- Ampiasao ny BAR voalaza ao amin'ny fidirana Port tsirairay ao amin'ny lohateny.
FME Platform Device Initialization
Ity fizarana ity dia manome mihoatraview ny fikorianan'ny kaody ho an'ny fanombohana fitaovana FME nataon'i intel-fpga-fme.ko. Ny rafitra sy ny fiasa fototra dia asongadina. Ity fizarana ity no tsara arahina rehefa viewamin'ny kaody loharano miaraka aminy (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);
lava (* ioctl)(struct platform_device * pdev, endri-javatra struct * endri-javatra,
tsy misy sonia int cmd, arg tsy misy sonia);
int (* fitsapana)(struct platform_device *pdev, struct feature *feature);
};
endri-javatra struct {
const char * anarana;
int resource_index;
void __iomem *ioaddr;
struct feature_ops *ops;
};
struct feature_platform_data {
struct list_head node;
struct mutex hidin-trano;
dev_status lava tsy misy sonia;
struct cdev cdev;
struct platform_device * dev;
unsigned int disable_count;
void * tsy miankina;
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 *)); struct
endri-javatra [0];
};
struct perf_object {
int id;
const struct attribute_group **attr_groups;
fitaovana struct *fme_dev;
struct list_head node;
struct list_head ankizy;
struct kobject kobj;
};
struct fpga_fme {
u8 port_id;
u64 pr_err;
fitaovana struct * dev_err;
struct perf_object *perf_dev;
struct feature_platform_data *pdata;
};
FME Platform Device Fikoriana fanombohana
FME Initialization Flow
- fme_probe() fme_dev_init()
- Atombohy ny struct fpga_fme ary tehirizo ao amin'ny saha feature_platform_data.private.
- fme_probe() fpga_dev_feature_init() feature_instance_init()
- Tehirizo struct feature_ops ao amin'ny feature_platform_data.features ho an'ny endri-javatra misy mponina tsirairay.
- Antsoy ny asa fitsapana, raha misy, avy amin'ny struct.
- Antsoy ny asa init avy amin'ny struct.
- fme_probe() fpga_register_dev_ops()
- Mamorona ny node fitaovana toetran'ny FME, misoratra anarana struct file_operations.
Fanombohana fitaovana amin'ny Port Platform
Ity fizarana ity dia manome mihoatraview ny fikorianan'ny kaody ho an'ny fanombohana ny fitaovana seranan-tsambo nataon'i intel-fpga-afu.ko. Asongadina ireo rafitra sy fiasa fototra. Ity fizarana ity no tsara arahina rehefa viewmiaraka amin'ny code source (afu.c).
Firafitry ny angona fitaovana amin'ny seranan-tsambo
struct feature_ops {
int (* init)(struct platform_device *pdev, struct feature *feature);
int (*uinit)(struct platform_device *pdev, struct feature *feature);
lava (* ioctl)(struct platform_device * pdev, endri-javatra struct * endri-javatra,
tsy misy sonia int cmd, arg tsy misy sonia);
int (* fitsapana)(struct platform_device *pdev, struct feature *feature);
};
endri-javatra struct {
const char * anarana;
int resource_index;
void __iomem *ioaddr;
struct feature_ops *ops;
};
struct feature_platform_data {
struct list_head node;
struct mutex hidin-trano;
dev_status lava tsy misy sonia;
struct cdev cdev;
struct platform_device * dev;
unsigned int disable_count;
void * tsy miankina;
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 *));
endri-javatra struct [0];
};
struct fpga_afu_region {
fanondroana u32;
saina u32;
u64 habe;
u64 offset;
u64 fy;
struct list_head node;
};
struct fpga_afu_dma_region {
u64 user_addr;
u64 ny halavany;
u64 iova;
pejy struct **pejy;
struct rb_node node;
bool in_use;
};
struct fpga_afu {
u64 faritra_cur_offset;
int num_regions;
u8 num_umsgs;
struct list_head faritra;
struct rb_root dma_regions;
struct feature_platform_data *pdata;
};
Fikoriana fanombohana fitaovana amin'ny seranan-tsambo
Port Initialization Fikoriana
- afu_probe() afu_dev_init()
- Atombohy ny struct fpga_afu ary tehirizo ao amin'ny saha feature_platform_data.private.
- afu_probe() fpga_dev_feature_init() feature_instance_init()
- Tehirizo struct feature_ops ao amin'ny feature_platform_data.features ho an'ny endri-javatra misy mponina tsirairay.
- Antsoy ny asa fitsapana, raha misy, avy amin'ny struct.
- Antsoy ny asa init avy amin'ny struct.
- afu_probe() fpga_register_dev_ops()
- Mamorona ny node fitaovana Port character, misoratra anarana struct file_operations.
FME IOCTLs
IOCTLs antsoina hoe misokatra file mpamoritra ho an'ny /dev/intel-fpga-fme.j FPGA_GET_API_VERSION—avereno ho integer ny kinova ankehitriny, manomboka amin'ny 0.
FPGA_CHECK_EXTENSION—tsy tohana amin'izao fotoana izao.
FPGA_FME_PORT_RELEASE—arg dia tondro ho an'ny:
struct fpga_fme_port_release {
__u32 argsz; // in: sizeof(struct fpga_fme_port_release)
__u32 saina; // in: tokony ho 0
__u32 port_id; // in: port ID (avy amin'ny 0) havoaka.
};
FPGA_FME_PORT_ASSIGN—arg dia tondro mankany amin'ny:
struct fpga_fme_port_assign {
__u32 argsz; // in: sizeof(struct fpga_fme_port_assign)
__u32 saina; // in: tokony ho 0
__u32 port_id; // amin'ny: port ID (avy amin'ny 0) hanendry. (tsy maintsy nisy
navoakan'ny FPGA_FME_PORT_RELEASE teo aloha)
};
FPGA_FME_PORT_PR—arg dia tondro ho an'ny:
struct fpga_fme_port_pr {
__u32 argsz; // in: sizeof(struct fpga_fme_port_pr)
__u32 saina; // in: tokony ho 0
__u32 port_id; // in: port ID (avy amin'ny 0)
__u32 buffer_size; // in: haben'ny buffer bitstream amin'ny bytes. Tokony ho 4-byte
mirindra.
__u64 buffer_address; // in: adiresin'ny fizotry ny buffer bitstream
__u64 sata; // mivoaka: sata diso (bitmask)
};
Port IOCTLs
IOCTLs antsoina hoe misokatra file mpamoritra ho an'ny /dev/intel-fpga-port.k FPGA_GET_API_VERSION—avereno ho integer ny kinova ankehitriny, manomboka amin'ny 0. FPGA_CHECK_EXTENSION—tsy tohana amin'izao fotoana izao.
FPGA_PORT_GET_INFO—arg dia tondro ho:
struct fpga_port_info {
__u32 argsz; // in: sizeof(struct fpga_port_info)
__u32 saina; // mivoaka: miverina 0
__u32 num_faritra; // mivoaka: isan'ny faritra MMIO, 2 (1 ho an'ny AFU ary 1 ho an'ny
STP)
__u32 num_umsgs; // mivoaka: isan'ny UMsg tohanan'ny fitaovana
};
FPGA_PORT_GET_REGION_INFO—arg dia tondro ho:
struct fpga_port_region_info {
__u32 argsz; // in: sizeof(struct fpga_port_region_info)
__u32 saina; // mivoaka: (bitmask) { FPGA_REGION_READ, FPGA_REGION_WRITE,
FPGA_REGION_MMAP }
__u32 fanondro; // amin'ny: FPGA_PORT_INDEX_UAFU na FPGA_PORT_INDEX_STP
__u32 padding; // in: tokony ho 0
__u64 habe; // mivoaka: haben'ny faritra MMIO amin'ny bytes
__u64 offset; // mivoaka: offset ny faritra MMIO hatramin'ny fanombohan'ny fitaovana fd
};
FPGA_PORT_DMA_MAP—arg dia tondro mankany amin'ny:
struct fpga_port_dma_map {
__u32 argsz; // in: sizeof(struct fpga_port_dma_map)
__u32 saina; // in: tsy maintsy 0 __u64 user_addr; // in: process virtoaly
adiresy. Tsy maintsy mifanaraka amin'ny pejy.
__u64 halavany; // in: halavan'ny sarintany amin'ny bytes. Tsy maintsy pejy maromaro
habe.
__u64 iova; // mivoaka: adiresy virtoaly IO };
FPGA_PORT_DMA_UNMAP—arg dia tondro mankany amin'ny:
struct fpga_port_dma_unmap {
__u32 argsz; // in: sizeof(struct fpga_port_dma_unmap)
__u32 saina; // in: tokony ho 0
__u64 iova; // in: adiresy virtoaly IO naverin'ny teo aloha
FPGA_PORT_DMA_MAP };
- FPGA_PORT_RESET—tsy maintsy NULL ny arg.
- FPGA_PORT_UMSG_ENABLE—tsy maintsy NULL ny arg.
- FPGA_PORT_UMSG_DISABLE—tsy maintsy NULL ny args.
FPGA_PORT_UMSG_SET_MODE—arg dia tondro mankany amin'ny:
struct fpga_port_umsg_cfg {
__u32 argsz; // in: sizeof(struct fpga_port_umsg_cfg)
__u32 saina; // in: tokony ho 0
__u32 hint_bitmap; // amin'ny: UMsg mode bitmap. Midika hoe iza ny UMsg
afaka.
};
FPGA_PORT_UMSG_SET_BASE_ADDR—
- Tsy maintsy vonoina ny UMsg alohan'ny hamoahana ity ioctl ity.
- Ny saha iova dia tokony ho an'ny buffer ampy ho an'ny UMsg rehetra (num_umsgs * PAGE_SIZE).
- Ny buffer dia voamariky ny "ampiasaina" amin'ny fitantanana ny buffer an'ny mpamily.
- Raha NULL iova, ny faritra teo aloha dia tsy voamarika ho "ampiasaina".
- arg dia manondro a:
struct fpga_port_umsg_base_addr {- u32 argsz; // in: sizeof(struct fpga_port_umsg_base_addr)
- saina u32; // in: tokony ho 0
- u64 iova; // in: adiresy virtoaly IO avy amin'ny FPGA_PORT_DMA_MAP. };
Fanamarihana:
- Mba hanesorana ny lesoka amin'ny seranana dia tsy maintsy manoratra ny bitmask marina amin'ny lesoka ankehitriny ianao, ohatraample, fahadisoana saka > mazava
- UMsg dia tohanana amin'ny alàlan'ny Acceleration Stack ho an'ny Intel Xeon Processor miaraka amin'ny FPGA Integrated.
sysfs Files
FME Header sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/
sysfs file | saha mmio | karazana | fidirana |
ports_num | fme_header.capability.num_ports | decimal int | Mamaky fotsiny |
cache_size | fme_header.capability.cache_size | decimal int | Mamaky fotsiny |
Malagasy Bible | fme_header.capability.fabric_verid | decimal int | Mamaky fotsiny |
socket_id | fme_header.capability.socket_id | decimal int | Mamaky fotsiny |
bitstream_id | fme_header.bitstream_id | hex uint64_t | Mamaky fotsiny |
bitstream_metadata | fme_header.bitstream_md | hex uint64_t | Mamaky fotsiny |
FME Thermal Management sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/
sysfs file | saha mmio | karazana | fidirana |
tokonana1 | thermal.threshold.tmp_thshold1 | decimal int | Mpampiasa: Mamaky fotsiny Root: Mamaky-manoratra |
tokonana2 | thermal.threshold.tmp_thshold2 | decimal int | Mpampiasa: Mamaky fotsiny Root: Mamaky-manoratra |
tokona_dia | thermal.threshold.therm_trip_thshold | decimal int | Mamaky fotsiny |
tokonana1_reached | thermal.threshold.thshold1_status | decimal int | Mamaky fotsiny |
tokonana2_reached | thermal.threshold.thshold2_status | decimal int | Mamaky fotsiny |
tokonana1_politika | mafana. threshold.thshold_policy | decimal int | Mpampiasa: Mamaky fotsiny Root: Mamaky-manoratra |
hafanana | thermal.rdsensor_fm1.fpga_temp | decimal int | Mamaky fotsiny |
FME Power Management sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/power_mgmt/
sysfs file | saha mmio | karazana | fidirana |
lany ritra | power.status.pwr_consumed | hex uint64_t | Mamaky fotsiny |
tokonana1 | hery.tokonana.tokonana1 | hex uint64_t | Mpampiasa: Mamaky fotsiny Root: Mamaky-manoratra |
tokonana2 | hery.tokonana.tokonana2 | hex uint64_t | Mpampiasa: Mamaky fotsiny Root: Mamaky-manoratra |
tokonam-baravarana1_status | power.threshold.threshold1_status | decimal tsy misy sonia | Mamaky fotsiny |
tokonam-baravarana2_status | power.threshold.threshold2_status | decimal tsy misy sonia | Mamaky fotsiny |
rtl | power.status.fpga_latency_report | decimal tsy misy sonia | Mamaky fotsiny |
FME Global Error sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/errors/
sysfs file | saha mmio | karazana | fidirana |
pcie0_errors | gerror.pcie0_err | hex uint64_t | Mamaky-manoratra |
pcie1_errors | gerror.pcie1_err | hex uint64_t | Mamaky-manoratra |
tsindrona_error | gerror.ras_error_inj | hex uint64_t | Mamaky-manoratra |
intel-fpga-dev.i/intel-fpga-fme.j/errors/fme-errors/
sysfs file | saha mmio | karazana | fidirana |
fahadisoana | gerror.fme_err | hex uint64_t | Mamaky fotsiny |
first_error | gerror.fme_first_err.err_reg_status | hex uint64_t | Mamaky fotsiny |
next_error | gerror.fme_next_err.err_reg_status | hex uint64_t | Mamaky fotsiny |
mazava | Manadio lesoka, first_error, next_error | isan-karazany uint64_t | Soraty fotsiny |
Fanamarihana:
Mba hanesorana ny lesoka FME dia tsy maintsy manoratra ny bitmask marina amin'ny lesoka ankehitriny ianao, ohatraample fahadisoana saka > mazava.
FME partial Reconfiguration sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/pr/
sysfs file | saha mmio | karazana | fidirana |
interface_id | pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l | hex 16-byte | Mamaky fotsiny |
FME Global Performance sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/dperf/clock
sysfs file | saha mmio | karazana | fidirana |
famantaranandro | gperf.clk.afu_interf_clock | hex uint64_t | Mamaky fotsiny |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (Tsy mety amin'ny Acceleration Stack ho an'ny Intel Xeon CPU misy FPGA)
sysfs file | saha mmio | karazana | fidirana |
mandry | gperf.ch_ctl.freeze | decimal int | Mamaky-manoratra |
mamaky_hit | gperf.CACHE_RD_HIT | hex uint64_t | Mamaky fotsiny |
read_miss | gperf.CACHE_RD_MISS | hex uint64_t | Mamaky fotsiny |
write_hit | gperf.CACHE_WR_HIT | hex uint64_t | Mamaky fotsiny |
write_miss | gperf.CACHE_WR_MISS | hex uint64_t | Mamaky fotsiny |
hold_request | gperf.CACHE_HOLD_REQ | hex uint64_t | Mamaky fotsiny |
tx_req_stall | gperf.CACHE_TX_REQ_STALL | hex uint64_t | Mamaky fotsiny |
sysfs file | saha mmio | karazana | fidirana |
rx_req_stall | gperf.CACHE_RX_REQ_STALL | hex uint64_t | Mamaky fotsiny |
data_write_port_contention | gperf.CACHE_DATA_WR_PORT_CONTEN | hex uint64_t | Mamaky fotsiny |
tag_write_port_contention | gperf.CACHE_TAG_WR_PORT_CONTEN | hex uint64_t | Mamaky fotsiny |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (Tsy mety amin'ny Acceleration Stack ho an'ny Intel Xeon CPU misy FPGA)
sysfs file | saha mmio | karazana | fidirana |
mandry | gperf.vtd_ctl.freeze | decimal int | Mpampiasa: Mamaky fotsiny Root: Mamaky-manoratra |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (Tsy mety amin'ny Acceleration Stack ho an'ny Intel Xeon CPU misy FPGA)
sysfs file | saha mmio | karazana | fidirana |
mamaky_transaction | gperf.VTD_AFU0_MEM_RD_TRANS | hex uint64_t | Mamaky fotsiny |
write_transaction | gperf.VTD_AFU0_MEM_WR_TRANS | hex uint64_t | Mamaky fotsiny |
tlb_read_hit | gperf.VTD_AFU0_TLB_RD_HIT | hex uint64_t | Mamaky fotsiny |
tlb_write_hit | gperf.VTD_AFU0_TLB_WR_HIT | hex uint64_t | Mamaky fotsiny |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/fabric/
sysfs file | saha mmio | karazana | fidirana |
Tadiavo | gpperf.fab_ctl.(azo atao) | decimal int | Mpampiasa: Mamaky fotsiny Root: Mamaky-manoratra |
mandry | gpperf.fab_ctl.freeze | decimal int | Mpampiasa: Mamaky fotsiny Root: Mamaky-manoratra |
pcie0_read | gperf.FAB_PCIE0_RD | hex uint64_t | Mamaky fotsiny |
pcie0_write | gperf.FAB_PCIE0_WR | hex uint64_t | Mamaky fotsiny |
pcie1_read | gperf.FAB_PCIE1_RD | hex uint64_t | Mamaky fotsiny |
pcie1_write | gperf.FAB_PCIE1_WR | hex uint64_t | Mamaky fotsiny |
upi_read | gperf.FAB_UPI_RD | hex uint64_t | Mamaky fotsiny |
upi_write | gperf.FAB_UPI_WR | hex uint64_t | Mamaky fotsiny |
intel-fpga-ev.i/intel-fpga/fme.j/dperf/fabric/portk/
sysfs file | saha mmio | karazana | fidirana |
pcie0_read | gperf.FAB_PCIE0_RD | hex uint64_t | Mamaky fotsiny |
pcie0_write | gperf.FAB_PCIE0_WR | hex uint64_t | Mamaky fotsiny |
pcie1_read | gperf.FAB_PCIE1_RD | hex uint64_t | Mamaky fotsiny |
pcie1_write | gperf.FAB_PCIE1_WR | hex uint64_t | Mamaky fotsiny |
upi_read | gperf.FAB_UPI_RD | hex uint64_t | Mamaky fotsiny |
upi_write | gperf.FAB_UPI_WR | hex uint64_t | Mamaky fotsiny |
Port Header sysfs files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | saha mmio | karazana | fidirana |
id | port_header.capability.port_number | decimal int | Mamaky fotsiny |
ltr | port_header.control.latency_tolerance | decimal int | Mamaky fotsiny |
Port AFU Header sysfs files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | saha mmio | karazana | fidirana |
afu_id | afu_header.guid | hex 16-byte | Mamaky fotsiny |
Port Error sysfs files
intel-fpga-dev.i/intel-fpga-port.k/errors/
sysfs file | saha mmio | karazana | fidirana |
fahadisoana | perror.port_error | hex uint64_t | Mamaky fotsiny |
first_error | perror.port_first_error | hex uint64_t | Mamaky fotsiny |
first_malformed_req | perror.malreq | hex 16-byte | Mamaky fotsiny |
mazava | fahadisoam-panantenana.(diso rehetra) | isan-karazany uint64_t | Soraty fotsiny |
Fanamarihana:
Mba hanesorana ny lesoka Port dia tsy maintsy manoratra ny bitmask marina amin'ny lesoka ankehitriny ianao, ohatraample fahadisoana saka > mazava.
Tantara fanavaozana
Document Version | FIOVANA |
2017.10.02 | Famoahana voalohany. |
OPAE Intel FPGA Linux Device Driver Architecture Guide
Documents / Loharano
![]() |
Intel OPAE FPGA Linux Device Driver Architecture [pdf] Torolàlana ho an'ny mpampiasa OPAE FPGA Linux Device Driver Architecture, OPAE FPGA, Linux Device Driver Architecture, Driver Architecture, Architecture |