Intel logo

Intel OPAE FPGA Linux Device Driver Architecture

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

OPAE Intel FPGA Linux Device Driver Architecture

Dalaivala wa OPAE Intel FPGA amapereka njira zolumikizirana ndi ogwiritsa ntchito kuti akhazikitse, kuwerengera, kutsegulira, ndi kupeza ma accelerator a FPGA pamapulatifomu okhala ndi mayankho a Intel FPGA ndikuwongolera magwiridwe antchito adongosolo monga kukonzanso kwa FPGA, kasamalidwe ka mphamvu, ndi mawonekedwe.

Hardware Architecture

Kuchokera ku mfundo ya OS view, zida za FPGA zimawoneka ngati chipangizo chokhazikika cha PCIe. Chikumbutso cha chipangizo cha FPGA chimakonzedwa pogwiritsa ntchito dongosolo la data lomwe lidafotokozedweratu (Mndandanda wazinthu za Chipangizo). Zomwe zimathandizidwa ndi chipangizo cha FPGA zimawululidwa kudzera muzinthu izi, monga zikuwonetsedwa pansipa pachithunzi chotsatira:

FPGA PCIe Chipangizo

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

Dalaivala amathandizira PCIe SR-IOV kuti apange Virtual Functions (VFs) yomwe ingagwiritsidwe ntchito kupatsa ma accelerators pamakina enieni.

Malingaliro a kampani Intel Corporation Maumwini onse ndi otetezedwa. Intel, logo ya Intel, ndi zizindikiro zina za Intel ndi zizindikiro za Intel Corporation kapena mabungwe ake. Intel imalola kuti FPGA yake ndi zinthu zopangira semiconductor ziziwoneka bwino malinga ndi chitsimikizo cha Intel koma ili ndi ufulu wosintha zinthu ndi ntchito zilizonse nthawi iliyonse popanda kuzindikira. Intel sakhala ndi udindo kapena udindo chifukwa chakugwiritsa ntchito kapena kugwiritsa ntchito zidziwitso zilizonse, malonda, kapena ntchito zomwe zafotokozedwa pano kupatula monga momwe Intel adavomerezera momveka bwino. Makasitomala a Intel amalangizidwa kuti apeze mtundu waposachedwa kwambiri wamakina a chipangizocho asanadalire zidziwitso zilizonse zosindikizidwa komanso asanayike maoda azinthu kapena ntchito.

Mayina ena ndi mtundu zitha kunenedwa kuti ndi za ena.

Virtualized FPGA PCIe Chipangizo

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

FPGA Management Engine (FME)
FPGA Management Injini imachita mphamvu ndi kasamalidwe kamafuta, malipoti olakwika, kukonzanso, kupereka malipoti a magwiridwe antchito, ndi ntchito zina zamapangidwe. FPGA iliyonse ili ndi FME imodzi, yomwe nthawi zonse imapezeka kudzera mu Physical Function (PF). Mapulogalamu ogwiritsira ntchito malo amatha kupeza mwayi wopezeka ku FME pogwiritsa ntchito open(), ndikumasula pogwiritsa ntchito close() ngati wogwiritsa ntchito mwayi (muzu).

Port
Doko limayimira mawonekedwe pakati pa nsalu ya FPGA yokhazikika ("FPGA Interface Manager (FIM)") ndi dera lomwe lingasinthidwenso pang'ono lomwe lili ndi Accelerator Function (AF). Port imayendetsa kulumikizana kuchokera ku mapulogalamu kupita ku accelerator ndikuwonetsa zinthu monga kukonzanso ndi kukonza. Chipangizo cha PCIe chikhoza kukhala ndi Madoko angapo, ndipo Doko lililonse limatha kuwonetsedwa kudzera mu VF polipereka pogwiritsa ntchito FPGA_FME_PORT_ASSIGN ioctl pa chipangizo cha FME.

Gawo la Accelerator Function (AF).

  • Chigawo cha Accelerator Function (AF) chimalumikizidwa ku Port ndikuwulula chigawo cha 256K MMIO kuti chigwiritsidwe ntchito polembetsa zowongolera zapadera.
  • Mapulogalamu ogwiritsira ntchito malo amatha kupeza mwayi wopezeka ku AFU yolumikizidwa ku Port pogwiritsa ntchito open() pa chipangizo cha Port, ndikuchimasula pogwiritsa ntchito close().
  • Mapulogalamu ogwiritsira ntchito malo amathanso mmap() accelerator MMIO zigawo.

Kukonzanso pang'ono
Monga tafotokozera pamwambapa, ma accelerator amatha kusinthidwanso mwa kukonzanso pang'ono kwa Accelerator Function (AF) file. Ntchito ya Accelerator (AF) iyenera kuti idapangidwira FIM yeniyeni komanso dera lolunjika (Port) la FPGA; mwinamwake, ntchito yokonzanso idzalephera ndipo mwinamwake imayambitsa kusakhazikika kwadongosolo. Kugwirizana uku kumatha kuwonedwa poyerekezera ID ya mawonekedwe yomwe ili pamutu wa AF motsutsana ndi ID yowonetsedwa ndi FME kudzera mu sysfs. Chekechi nthawi zambiri chimapangidwa ndi malo ogwiritsa ntchito musanayitane kukonzanso IOCTL.

Zindikirani:
Pakadali pano, pulogalamu iliyonse yofikira ku FPGA, kuphatikiza yomwe ikugwira ntchito mokhazikika, iyenera kutsekedwa musanayese kukonzanso pang'ono. Masitepewo angakhale:

  1. Tsitsani driver kwa mlendo
  2. Chotsani VF kwa mlendo
  3. Letsani SR-IOV
  4. Pangani kukonzanso pang'ono
  5. Yambitsani SR-IOV
  6. Lumikizani VF kwa mlendo
  7. Kwezani driver mu mlendo

FPGA Virtualization
Kuti athe kupeza ma accelerator kuchokera ku mapulogalamu omwe akuyendetsa mu VM, doko la AFU liyenera kuperekedwa ku VF pogwiritsa ntchito njira zotsatirazi:

  1. PF ili ndi madoko onse a AFU mwachisawawa. Doko lililonse lomwe likufunika kuperekedwanso kwa VF liyenera kumasulidwa kaye ku PF kudzera pa FPGA_FME_PORT_RELEASE ioctl pa chipangizo cha FME.
  2. Madoko a N akamasulidwa ku PF, lamulo ili pansipa lingagwiritsidwe ntchito kuti SRIOV ndi VF zitheke. VF iliyonse ili ndi doko limodzi lokha ndi AFU. echo N> PCI_DEVICE_PATH/sriov_nuMVfs
  3. Dulani ma VF kupita ku ma VM.
  4. AFU pansi pa VF imapezeka kuchokera ku mapulogalamu a VM (pogwiritsa ntchito dalaivala yemweyo mkati mwa VF).

Zindikirani:
FME siyingaperekedwe ku VF, motero PR ndi ntchito zina zoyang'anira zimapezeka kudzera mu PF.

Oyendetsa Gulu

PCIe Module Device Driver

Oyendetsa Gulu

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

Zida za FPGA zimawoneka ngati zida za PCIe wamba; motero, woyendetsa chipangizo cha FPGA PCIe (intel-FPGA-PCI.ko) nthawi zonse amayikidwa koyamba kamodzi FPGA PCIe PF kapena VF yapezeka. Dalaivala uyu amasewera gawo lazomangamanga pamayendedwe oyendetsa. Iwo:

  • Amapanga chida cha FPGA ngati chothandizira zida zomwe zimagwiritsidwa ntchito.
  • Amayenda pa Mndandanda wa Zida Zachipangizo, zomwe zimayikidwa mu kukumbukira kwa PCIe chipangizo BAR, kuti mupeze zida zomwe zili ndi mawonekedwe awo ang'onoang'ono ndikuwapangira zida zamapulatifomu pansi pa chida.
  • Imathandizira SR-IOV.
  • Imawulula zida zogwirira ntchito, zomwe zimawonetsa magwiridwe antchito azinthu zing'onozing'ono ndikuwonetsa magwiridwe antchito omwe amakhala ndi madalaivala a zida.

PCIe Module Device Driver Ntchito

  • Zili ndi kupezeka kwa PCIe, kuwerengetsa kwa zida, komanso kupezeka kwazinthu.
  • Amapanga maulalo a sysfs a chipangizo cha makolo, FPGA Management Engine (FME), ndi Port.
  • Amapanga zochitika zoyendetsa nsanja, zomwe zimapangitsa Linux kernel kukweza madalaivala awo a pulatifomu.

FME Platform Module Device Driver

  • Kuwongolera mphamvu ndi kutentha, malipoti olakwika, malipoti a magwiridwe antchito, ndi ntchito zina zamakonzedwe. Mutha kugwiritsa ntchito izi kudzera pa sysfs interfaces zowululidwa ndi dalaivala wa FME.
  • Kukonzanso pang'ono. Dalaivala wa FME amalembetsa Woyang'anira FPGA panthawi yoyambitsa gawo la PR; ikalandira FPGA_FME_PORT_PR ioctl kuchokera kwa inu, imapempha mawonekedwe wamba kuchokera ku FPGA Manager kuti amalize kukonzanso pang'ono kwa bitstream ku Port yomwe yaperekedwa.
  • Kuwongolera doko kwa virtualization. Dalaivala wa FME akuyambitsa ma ioctls awiri, FPGA_FME_PORT_RELEASE, omwe amatulutsa Port yoperekedwa kuchokera ku PF; ndi FPGA_FME_PORT_ASSIGN, yomwe imapatsa Port kubwerera ku PF. Doko likatulutsidwa kuchokera ku PF, litha kuperekedwa ku VF kudzera munjira za SR-IOV zoperekedwa ndi woyendetsa PCIe. Kuti mumve zambiri, onani "FPGA Virtualization".

FME Platform Module Device Driver Ntchito

  • Amapanga node ya chipangizo cha FME.
  • Amapanga ma FME sysfs files ndikugwiritsa ntchito ma FME sysfs file zowonjezera.
  • Imakhazikitsa madalaivala achinsinsi a FME.
  • Madalaivala achinsinsi a FME:
    • Chithunzi cha FME
    • Thermal Management
    • Kuwongolera Mphamvu
    • Zolakwika Padziko Lonse
    • Kukonzanso pang'ono
    • Global Performance

Port Platform Module Device Driver
Mofanana ndi dalaivala wa FME, dalaivala wa FPGA Port (ndi AFU) (intel-fpga-afu. ko) amafufuzidwa kamodzi chipangizo cha nsanja ya Port chipangidwa. Ntchito yayikulu ya gawoli ndikupereka mawonekedwe ogwiritsira ntchito malo ogwiritsira ntchito kuti azitha kugwiritsa ntchito ma accelerators, kuphatikiza kuwongolera koyambira pa Port, kutumiza kunja kwa dera la AFU MMIO, ntchito ya mapu a DMA buffer, zidziwitso za UMsg (1), ndi ntchito zakutali ( onani pamwambapa).

UMsg imathandizidwa kudzera mu Acceleration Stack ya Intel Xeon® processor yokhala ndi Integrated FPGA.

Ntchito Zoyendetsa Chipangizo cha Port Platform Module

  • Amapanga node ya chipangizo cha Port character.
  • Amapanga ma Port sysfs files ndikugwiritsa ntchito ma Port sysfs file zowonjezera.
  • Imakhazikitsa madalaivala achinsinsi a Port.
  • Madoko achinsinsi amayendetsa madalaivala:
    • Port Header
    • AFU
    • Zolakwika padoko
    • Msg (2)
    • Signal Tap

Kugwiritsa ntchito FPGA Chipangizo Kuwerengera
Gawoli likuwonetsa momwe mapulogalamu amawerengera chida cha FPGA kuchokera muulamuliro wa sysfs pansi pa /sys/class/fpga. Mu exampm'munsimu, zida ziwiri za Intel FPGA zimayikidwa mu host host. Chida chilichonse cha FPGA chili ndi FME imodzi ndi Madoko awiri (AFUs). Pa chipangizo chilichonse cha FPGA, chikwatu cha chipangizo chimapangidwa pansi pa /sys/class/fpga:

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

Node iliyonse ili ndi FME imodzi ndi Madoko awiri (AFUs) ngati zida za ana:
/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

Nthawi zambiri, mawonekedwe a FME/Port sysfs amatchulidwa motere:
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-fme.j/
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-port.k/

ndikuwerengera motsatizana zida zonse zotengera, j motsatizana ma manambala a FME ndi k kuwerengera madoko onse motsatizana.

Ma node a chipangizo omwe amagwiritsidwa ntchito pa ioctl() ndi mmap() atha kufotokozedwa kudzera mu:
/dev/intel-fpga-fme.j
/dev/intel-fpga-port.k

Kuwerengera kwa PCIe Driver
Gawoli likuperekaview za kayendedwe ka kachidindo kachipangizo kochitidwa ndi intel-fpga-pci.ko. Mapangidwe akuluakulu a deta ndi ntchito zimawonetsedwa. Gawoli limatsatiridwa bwino liti viewlowetsani code yotsatsira (pcie.c).

Mapangidwe a Data Yowerengera

enum fpga_id_type {
PARENT_ID,
FME_ID,
PORT_ID,
FPGA_ID_MAX
};
static struct idr fpga_ids[FPGA_ID_MAX];
kupanga fpga_chardev_info {
const char *name;
dev_t devt;
};
struct fpga_chardev_info fpga_chrdevs[] = {
{ .name = FPGA_FEATURE_DEV_FME },
{ .name = FPGA_FEATURE_DEV_PORT},
};
static struct class * 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;
struct chipangizo * fme_dev;
struct mutex loko;
struct list_head port_dev_list;
int released_port_num;
struct list_head zigawo;
};
struct build_feature_devs_info {
struct pci_dev *pdev;
opanda __iomem *ioaddr;
opanda __iomem *ioend;
int current_bar;
opanda __iomem *pfme_hdr;
struct chipangizo *parent_dev;
struct platform_device * feature_dev;
};

Mayendedwe Owerengera

  • ccidrv_init()
    • Yambitsani fpga_ids pogwiritsa ntchito idr_init().
    • Yambitsani fpga_chrdevs[i].devt pogwiritsa ntchito alloc_chrdev_region().
    • Yambitsani fpga_class pogwiritsa ntchito class_create ().
    • pci_register_driver(&cci_pci_driver);
  • cci_pci_probe()
    • Yambitsani chipangizo cha PCI, pemphani mwayi wopita kumadera ake, ikani PCI master mode, ndikukonzekera DMA.
  • cci_pci_create_feature_devs() build_info_alloc_and_init()
    • Perekani struct build_feature_devs_info, yambitsani.
      .parent_dev yakhazikitsidwa ku chikwatu cha makolo cha sysfs (intel-fpga-dev.id) chomwe chili ndi maulalo a FME ndi Port sysfs.
  • phatikiza_mbali_mndandanda()
    • Yendani Mndandanda wa Zida za BAR0 kuti mupeze FME, Port, ndi mawonekedwe awo achinsinsi.
  • parse_feature() parse_feature_afus() parse_feature_fme()
    • Mukakumana ndi FME:
  • build_info_create_dev()
    • Perekani chipangizo cha nsanja cha FME, kusunga mu build_feature_devs_info.feature_dev.
    • feature_dev.id imayambitsidwa chifukwa cha idr_alloc(fpga_ids[FME_ID],
    • feature_dev.parent yakhazikitsidwa ku build_feature_devs_info.parent_dev.
    • Perekani mndandanda wazinthu zothandizira mu feature_dev.resource.
  • Perekani struct feature_platform_data, iyambitseni, ndi kusunga cholozera mu feature_dev.dev.platform_data
    • create_feature_instance() build_info_add_sub_feature()
    • Yambitsani feature_dev.resource[FME_FEATURE_ID_HEADER].
    • feature_platform_data_add()
    • Yambitsani feature_platform_data.features[FME_FEATURE_ID_HEADER], chirichonse kupatula .fops.
  • parse_feature() parse_feature_afus() parse_feature_port()
    • Pamene Port ikukumana:
  • build_info_create_dev()
    • Perekani chipangizo cha nsanja kwa Port, kusunga mu build_feature_devs_info.feature_dev.
    • feature_dev.id imayambitsidwa chifukwa cha idr_alloc(fpga_ids[PORT_ID],
    • feature_dev.parent yakhazikitsidwa ku build_feature_devs_info.parent_dev.
    • Perekani mndandanda wa struct zothandizira mu feature_dev.resource.
    • Perekani struct feature_platform_data, iyambitseni, ndi kusunga cholozera mu feature_dev.dev.platform_data
  • build_info_commit_dev()
    • Onjezani struct feature_platform_data.node ya Port pamndandanda wa Ports mu struct cci_drvdata.port_dev_list
  • create_feature_instance() build_info_add_sub_feature()
    • Yambitsani feature_dev.resource[PORT_FEATURE_ID_HEADER].
  • feature_platform_data_add()
    • Yambitsani feature_platform_data.features[PORT_FEATURE_ID_HEADER], chirichonse kupatula .fops.
  • parse_feature() parse_feature_afus() parse_feature_port_uafu()
    • Pamene AFU ikukumana:
  • create_feature_instance() build_info_add_sub_feature()
    • Yambitsani feature_dev.resource[PORT_FEATURE_ID_UAFU].
  • feature_platform_data_add()
    • Yambitsani feature_platform_data.features[PORT_FEATURE_ID_UAFU], chirichonse kupatula .fops.
  • parse_feature() parse_feature_private() parse_feature_fme_private()
    • Mukakumana ndi zachinsinsi za FME:
  • create_feature_instance() build_info_add_sub_feature()
    • Yambitsani feature_dev.resource[id].
  • feature_platform_data_add()
    • Yambitsani feature_platform_data.features[id], chirichonse kupatula .fops.
  • parse_feature() parse_feature_private() parse_feature_port_private()
  • Mukakumana ndi zachinsinsi za Port: * create_feature_instance() build_info_add_sub_feature() * Yambitsani feature_dev.resource[id]. * feature_platform_data_add() Yambitsani feature_platform_data.features[id], chirichonse kupatula .fops.
  • parse_ports_from_fme()
    • Ngati dalaivala atadzazidwa pa Physical Function (PF), ndiye:
  • Thamangani parse_feature_list() kuyenda pa doko lililonse lofotokozedwa pamutu wa FME.
  • Gwiritsani ntchito BAR yomwe yatchulidwa pachilichonse cha Port pamutu.

Kuyambitsa Chipangizo cha FME Platform
Gawoli likuperekaview za kayendedwe ka kachidindo kachipangizo ka FME kochitidwa ndi intel-fpga-fme.ko. Zomangamanga zazikulu za data ndi ntchito zimakwezedwa. Gawoli limatsatiridwa bwino liti viewlowetsani nambala yotsatsira (fme-main.c).

FME Platform Device Data Structures

struct feature_ops {
int (* init) (struct platform_device * pdev, struct feature * feature);
int (* unit) (struct platform_device * pdev, struct feature * feature);
yaitali (* ioctl)(struct platform_device *pdev, struct feature * feature,
osasainidwa int cmd, osasainidwa arg wautali);
int (* test) (struct platform_device * pdev, struct feature * feature);
};
mawonekedwe {
const char *name;
int resource_index;
opanda __iomem *ioaddr;
struct feature_ops *ops;
};
struct feature_platform_data {
struct list_mutu mfundo;
struct mutex loko;
osasayina dev_status yayitali;
kupanga cdev cdev;
struct platform_device *dev;
osasainidwa disable_count;
zopanda kanthu *zachinsinsi;
inu 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 *)); kapangidwe
mawonekedwe[0];
};
struct perf_object {
chidziwitso;
const struct attribute_group **attr_groups;
struct chipangizo * fme_dev;
struct list_mutu mfundo;
struct list_head ana;
kupanga kobj kobj;
};
pangani fpga_fme {
u8 port_id;
u64 pr_err;
struct chipangizo *dev_err;
struct perf_object * perf_dev;
struct feature_platform_data *pdata;
};

FME Platform Chipangizo Kuyambitsa Kuyenda

Kuthamanga Kwambiri kwa FMEintel-OPAE-FPGA-Linux-Device-Driver-Architecture-fig- (4)

  • fme_probe() fme_dev_init()
    • Yambitsani struct fpga_fme ndikuyisunga mugawo la feature_platform_data.private.
  • fme_probe() fpga_dev_feature_init() feature_instance_init()
    • Sungani struct feature_ops mu feature_platform_data.features pa chilichonse chomwe chili ndi anthu.
    • Imbani ntchito yoyeserera, ngati ilipo, kuchokera ku struct.
    • Imbani ntchito ya init kuchokera ku struct.
  • fme_probe() fpga_register_dev_ops()
    • Pangani node ya chipangizo cha FME, kulembetsa mawonekedwe file_ntchito.

Port Platform Chipangizo Kuyambitsa
Gawoli likuperekaview ya kayendedwe ka kachidindo koyambitsa chipangizo cha doko kochitidwa ndi intel-fpga-afu.ko. Mapangidwe akuluakulu a deta ndi ntchito zimawonetsedwa. Gawoli limatsatiridwa bwino liti viewlowetsani code yotsatsira (afu.c).

Port Platform Device Data Structures

struct feature_ops {
int (* init) (struct platform_device * pdev, struct feature * feature);
int (* unit) (struct platform_device * pdev, struct feature * feature);
yaitali (* ioctl)(struct platform_device *pdev, struct feature * feature,
osasainidwa int cmd, osasainidwa arg wautali);
int (* test) (struct platform_device * pdev, struct feature * feature);
};
mawonekedwe {
const char *name;
int resource_index;
opanda __iomem *ioaddr;
struct feature_ops *ops;
};
struct feature_platform_data {
struct list_mutu mfundo;
struct mutex loko;
osasayina dev_status yayitali;
kupanga cdev cdev;
struct platform_device *dev;
osasainidwa disable_count;
zopanda kanthu *zachinsinsi;
inu 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 *));
mawonekedwe apangidwe[0];
};
khazikitsani fpga_afu_region {
u32 index;
u32 mbendera;
u64 kukula;
u64 kusintha;
u64 nsi;
struct list_mutu mfundo;
};
khazikitsani fpga_afu_dma_region {
u64 wosuta_addr;
u64 kutalika;
u64 uwu;
tsamba **masamba;
struct rb_node node;
bool in_use;
};
panga fpga_afu {
u64 dera_cur_offset;
int num_regions;
u8 num_umsgs;
struct list_head zigawo;
struct rb_root dma_regions;
struct feature_platform_data *pdata;
};

Port Platform Chipangizo Kuyambitsa Kuyenda

Port Initialization Flowintel-OPAE-FPGA-Linux-Device-Driver-Architecture-fig- (5)

  • afu_probe() afu_dev_init()
    • Yambitsani struct fpga_afu ndikuyisunga mugawo la feature_platform_data.private.
  • afu_probe() fpga_dev_feature_init() feature_instance_init()
    • Sungani struct feature_ops mu feature_platform_data.features pa chilichonse chomwe chili ndi anthu.
    • Imbani ntchito yoyeserera, ngati ilipo, kuchokera ku struct.
    • Imbani ntchito ya init kuchokera ku struct.
  • afu_probe() fpga_register_dev_ops()
    • Pangani node ya chipangizo cha Port, kulembetsa mawonekedwe file_ntchito.

Zithunzi za FME IOCTL
Ma IOCTL omwe amayitanidwa poyera file descriptor for /dev/intel-fpga-fme.j FPGA_GET_API_VERSION—bwezerani mtundu waposachedwa ngati nambala, kuyambira 0.

FPGA_CHECK_EXTENSION-sikuthandizidwa pano.

FPGA_FME_PORT_RELEASE-arg ndi cholozera ku:

pangani fpga_fme_port_release {
__u32 argsz; // mu: sizeof(kupanga fpga_fme_port_release)
__u32 mbendera; // mu: ayenera kukhala 0
__u32 port_id; // mu: doko ID (kuchokera 0) kumasulidwa.
};

FPGA_FME_PORT_ASSIGN-arg ndi cholozera ku:

pangani fpga_fme_port_assign {
__u32 argsz; // mu: sizeof(struct fpga_fme_port_assign)
__u32 mbendera; // mu: ayenera kukhala 0
__u32 port_id; // mu: doko ID (kuchokera 0) kuti mugawire. (ayenera kukhala
idatulutsidwa m'mbuyomu ndi FPGA_FME_PORT_RELEASE)
};

FPGA_FME_PORT_PR-arg ndi cholozera ku:

pangani fpga_fme_port_pr {
__u32 argsz; // mu: sizeof(struct fpga_fme_port_pr)
__u32 mbendera; // mu: ayenera kukhala 0
__u32 port_id; // mu: doko ID (kuchokera 0)
__u32 buffer_size; // mu: kukula kwa bitstream buffer mu byte. Ayenera kukhala 4-byte
zogwirizana.
__u64 buffer_address; // mu: ndondomeko adilesi ya bitstream buffer
__u64 udindo; // kunja: zolakwika (bitmask)
};

Zithunzi za IOCTL
Ma IOCTL omwe amayitanidwa poyera file descriptor for /dev/intel-fpga-port.k FPGA_GET_API_VERSION—bwezerani mtundu waposachedwa ngati nambala yonse, kuyambira 0. FPGA_CHECK_EXTENSION-yosagwirizana pano.

FPGA_PORT_GET_INFO-arg ndi cholozera ku:

pangani fpga_port_info {
__u32 argsz; // mu: sizeof(struct fpga_port_info)
__u32 mbendera; // kunja: kubwerera 0
__u32 chiwerengero_zigawo; // kunja: chiwerengero cha zigawo za MMIO, 2 (1 ya AFU ndi 1 ya
STP)
__u32 nambala_umsgs; // out: chiwerengero cha UMsg chothandizidwa ndi hardware
};

FPGA_PORT_GET_REGION_INFO—arg ndi cholozera ku:

pangani fpga_port_region_info {
__u32 argsz; // mu: sizeof(struct fpga_port_region_info)
__u32 mbendera; // kunja: (bitmask) {FPGA_REGION_READ, FPGA_REGION_WRITE,
FPGA_REGION_MMAP }
__u32 index; // mu: FPGA_PORT_INDEX_UAFU kapena FPGA_PORT_INDEX_STP
__u32 zokhota; // mu: ayenera kukhala 0
__u64 kukula; // kunja: kukula kwa MMIO dera mu byte
__u64 kuchepetsa; // kunja: kuchotsera kwa dera la MMIO kuyambira pachiyambi cha chipangizo fd
};

FPGA_PORT_DMA_MAP—arg ndi cholozera ku:
pangani fpga_port_dma_map {
__u32 argsz; // mu: sizeof(struct fpga_port_dma_map)
__u32 mbendera; // mu: ayenera kukhala 0 __u64 user_addr; // mu: ndondomeko yeniyeni
adilesi. Ayenera kulumikizidwa ndi tsamba.
__u64 kutalika; // mu: kutalika kwa mapu mu mabayiti. Ayenera kukhala angapo masamba
kukula.
__u64 uwu; // kunja: IO adilesi };

FPGA_PORT_DMA_UNMAP—arg ndi cholozera ku:
pangani fpga_port_dma_unmap {
__u32 argsz; // mu: sizeof(struct fpga_port_dma_unmap)
__u32 mbendera; // mu: ayenera kukhala 0
__u64 uwu; // mu: IO adilesi yobwezeredwa ndi yakale
FPGA_PORT_DMA_MAP };

  • FPGA_PORT_RESET—arg ikuyenera kukhala NULL.
  • FPGA_PORT_UMSG_ENABLE—arg ikuyenera kukhala NULL.
  • FPGA_PORT_UMSG_DISABLE—ags akuyenera kukhala NULL.

FPGA_PORT_UMSG_SET_MODE—arg ndi cholozera ku:

sinthani fpga_port_umsg_cfg {
__u32 argsz; // mu: sizeof(struct fpga_port_umsg_cfg)
__u32 mbendera; // mu: ayenera kukhala 0
__u32 hint_bitmap; // mu: UMsg njira yopangira bitmap. Zimatanthawuza kuti ma UMsg ndi ati
tsegulani.
};

FPGA_PORT_UMSG_SET_BASE_ADDR—

  • UMsg iyenera kuyimitsidwa musanapereke ioctl iyi.
  • Gawo la iova likuyenera kukhala la buffer lalikulu mokwanira ma UMsg onse (num_umsgs * PAGE_SIZE).
    • Buffer imalembedwa kuti "ikugwiritsidwa ntchito" ndi kasamalidwe ka buffer ya dalaivala.
    • Ngati iova ndi NULL, dera lililonse lakale silinatchulidwe kuti "likugwiritsidwa ntchito".
  • arg ndi cholozera ku:
    struct fpga_port_umsg_base_addr {
    • u32 argsz; // mu: sizeof(struct fpga_port_umsg_base_addr)
    • u32 mbendera; // mu: ayenera kukhala 0
    • u64 uwu; // mu: IO adilesi yochokera ku FPGA_PORT_DMA_MAP. };

Zindikirani:

  • Kuti muchotse zolakwika zamadoko, muyenera kulemba bitmask yeniyeni ya zolakwika zomwe zilipo, mwachitsanzoample, zolakwika za mphaka> zomveka
  • UMsg imangothandizidwa kudzera mu Acceleration Stack ya Intel Xeon processor yokhala ndi Integrated FPGA.

sysfs Files

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

sysfs file mmio munda mtundu mwayi
madoko_nambala fme_header.capability.num_ports decimal in Kuwerenga kokha
cache_size fme_header.capability.cache_size decimal in Kuwerenga kokha
Baibulo fme_header.capability.fabric_verid decimal in Kuwerenga kokha
socket_id fme_header.capability.socket_id decimal in Kuwerenga kokha
bitstream_id fme_header.bitstream_id hex uint64_t Kuwerenga kokha
bitstream_metadata fme_header.bitstream_md hex uint64_t Kuwerenga kokha

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

sysfs file mmio munda mtundu mwayi
khomo1 thermal.threshold.tmp_thshold1 decimal in Wogwiritsa: Muzu Wowerengera-wokha: Werengani-lembani
khomo2 thermal.threshold.tmp_thshold2 decimal in Wogwiritsa: Muzu Wowerengera-wokha: Werengani-lembani
threshold_trip thermal.threshold.therm_trip_thshold decimal in Kuwerenga kokha
pachimake1_chafika thermal.threshold.thshold1_status decimal in Kuwerenga kokha
pachimake2_chafika thermal.threshold.thshold2_status decimal in Kuwerenga kokha
threshold1_policy kutentha. threshold.thshold_policy decimal in Wogwiritsa: Muzu Wowerengera-wokha: Werengani-lembani
kutentha thermal.rdsensor_fm1.fpga_temp decimal in Kuwerenga kokha

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

sysfs file mmio munda mtundu mwayi
kudyedwa mphamvu.status.pwr_conssumed hex uint64_t Kuwerenga kokha
khomo1 mphamvu.pachiyambi.pachiyambi1 hex uint64_t Wogwiritsa: Muzu Wowerengera-wokha: Werengani-lembani
khomo2 mphamvu.pachiyambi.pachiyambi2 hex uint64_t Wogwiritsa: Muzu Wowerengera-wokha: Werengani-lembani
threshold1_status mphamvu.pachiyambi.pachiyambi1_mkhalidwe decimal osasainidwa Kuwerenga kokha
threshold2_status mphamvu.pachiyambi.pachiyambi2_mkhalidwe decimal osasainidwa Kuwerenga kokha
rtl power.status.fpga_latency_report decimal osasainidwa Kuwerenga kokha

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

sysfs file mmio munda mtundu mwayi
pcie0_zolakwika gerror.pcie0_err hex uint64_t Lemberani
pcie1_zolakwika gerror.pcie1_err hex uint64_t Lemberani
inject_error gerror.ras_error_inj hex uint64_t Lemberani

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

sysfs file mmio munda mtundu mwayi
zolakwika gerror.fme_err hex uint64_t Kuwerenga kokha
choyamba_cholakwika gerror.fme_first_err.err_reg_status hex uint64_t Kuwerenga kokha
chotsatira_cholakwika gerror.fme_next_err.err_reg_status hex uint64_t Kuwerenga kokha
zomveka Imachotsa zolakwika, choyamba_error, next_error zosiyanasiyana uint64_t Lembani-zokha

Zindikirani:
Kuti muchotse zolakwika za FME, muyenera kulemba bitmask yeniyeni ya zolakwika zomwe zilipo, mwachitsanzoample mphaka zolakwika> zomveka.

FME Partial Reconfiguration sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/pr/

sysfs file mmio munda mtundu mwayi
mawonekedwe_id pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l hex 16 pa Kuwerenga kokha

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

sysfs file mmio munda mtundu mwayi
koloko gperf.clk.afu_interf_clock hex uint64_t Kuwerenga kokha

intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (Sizovomerezeka pa Acceleration Stack ya Intel Xeon CPU yokhala ndi FPGAs)

sysfs file mmio munda mtundu mwayi
kuzimitsa gperf.ch_ctl.freeze decimal in Lemberani
werengani_kugunda gperf.CACHE_RD_HIT hex uint64_t Kuwerenga kokha
werengani_kuphonya gperf.CACHE_RD_MISS hex uint64_t Kuwerenga kokha
kulemba_kugunda gperf.CACHE_WR_HIT hex uint64_t Kuwerenga kokha
kulemba_kuphonya gperf.CACHE_WR_MISS hex uint64_t Kuwerenga kokha
hold_request gperf.CACHE_HOLD_REQ hex uint64_t Kuwerenga kokha
tx_req_stall gperf.CACHE_TX_REQ_STALL hex uint64_t Kuwerenga kokha
sysfs file mmio munda mtundu mwayi
rx_req_stall gperf.CACHE_RX_REQ_STALL hex uint64_t Kuwerenga kokha
data_write_port_contention gperf.CACHE_DATA_WR_PORT_CONTEN hex uint64_t Kuwerenga kokha
tag_write_port_contention gperf.CACHE_TAG_WR_PORT_CONTEN hex uint64_t Kuwerenga kokha

intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (Sizovomerezeka pa Acceleration Stack ya Intel Xeon CPU yokhala ndi FPGAs)

sysfs file mmio munda mtundu mwayi
kuzimitsa gperf.vtd_ctl.freeze decimal in Wogwiritsa: Muzu Wowerengera-wokha: Werengani-lembani

intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (Sizovomerezeka pa Acceleration Stack ya Intel Xeon CPU yokhala ndi FPGAs)

sysfs file mmio munda mtundu mwayi
werengani_transaction gperf.VTD_AFU0_MEM_RD_TRANS hex uint64_t Kuwerenga kokha
kulemba_transaction gperf.VTD_AFU0_MEM_WR_TRANS hex uint64_t Kuwerenga kokha
tlb_read_hit gperf.VTD_AFU0_TLB_RD_HIT hex uint64_t Kuwerenga kokha
tlb_write_hit gperf.VTD_AFU0_TLB_WR_HIT hex uint64_t Kuwerenga kokha

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

sysfs file mmio munda mtundu mwayi
athe gperf.fab_ctl.(yothandizidwa) decimal in Wogwiritsa: Muzu Wowerengera-wokha: Werengani-lembani
kuzimitsa gperf.fab_ctl.freeze decimal in Wogwiritsa: Muzu Wowerengera-wokha: Werengani-lembani
pcie0_werengani gperf.FAB_PCIE0_RD hex uint64_t Kuwerenga kokha
pcie0_lembani gperf.FAB_PCIE0_WR hex uint64_t Kuwerenga kokha
pcie1_werengani gperf.FAB_PCIE1_RD hex uint64_t Kuwerenga kokha
pcie1_lembani gperf.FAB_PCIE1_WR hex uint64_t Kuwerenga kokha
upi_werengani gperf.FAB_UPI_RD hex uint64_t Kuwerenga kokha
upi_lemba gperf.FAB_UPI_WR hex uint64_t Kuwerenga kokha

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

sysfs file mmio munda mtundu mwayi
pcie0_werengani gperf.FAB_PCIE0_RD hex uint64_t Kuwerenga kokha
pcie0_lembani gperf.FAB_PCIE0_WR hex uint64_t Kuwerenga kokha
pcie1_werengani gperf.FAB_PCIE1_RD hex uint64_t Kuwerenga kokha
pcie1_lembani gperf.FAB_PCIE1_WR hex uint64_t Kuwerenga kokha
upi_werengani gperf.FAB_UPI_RD hex uint64_t Kuwerenga kokha
upi_lemba gperf.FAB_UPI_WR hex uint64_t Kuwerenga kokha

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

sysfs file mmio munda mtundu mwayi
id port_header.capability.port_number decimal in Kuwerenga kokha
ltr port_header.control.latency_tolerance decimal in Kuwerenga kokha

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

sysfs file mmio munda mtundu mwayi
afu_id afu_header.guid hex 16 pa Kuwerenga kokha

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

sysfs file mmio munda mtundu mwayi
zolakwika perrror.port_error hex uint64_t Kuwerenga kokha
choyamba_cholakwika perrror.port_first_error hex uint64_t Kuwerenga kokha
first_malformed_req perrror.malreq hex 16 pa Kuwerenga kokha
zomveka zolakwika.(zolakwika zonse) zosiyanasiyana uint64_t Lembani-zokha

Zindikirani:
Kuti muchotse zolakwika za Port, muyenera kulemba bitmask yeniyeni ya zolakwika zomwe zilipo, mwachitsanzoample mphaka zolakwika> zomveka.

Mbiri Yobwereza

Document Version Zosintha
2017.10.02 Kutulutsidwa Koyamba.

OPAE Intel FPGA Linux Device Driver Architecture Guide

Zolemba / Zothandizira

Intel OPAE FPGA Linux Device Driver Architecture [pdf] Buku Logwiritsa Ntchito
OPAE FPGA Linux Device Driver Architecture, OPAE FPGA, Linux Device Driver Architecture, Driver Architecture, Architecture

Maumboni

Siyani ndemanga

Imelo yanu sisindikizidwa. Minda yofunikira yalembedwa *