Архитектураи ронандаи дастгоҳи intel OPAE FPGA Linux
Архитектураи ронандаи дастгоҳи OPAE Intel FPGA Linux
Драйвери OPAE Intel FPGA интерфейсҳоро барои барномаҳои фазои корбар барои конфигуратсия, номбар кардан, кушодан ва дастрасӣ ба суръатбахшҳои FPGA дар платформаҳое, ки бо ҳалли Intel FPGA муҷаҳҳаз шудаанд, таъмин мекунад ва функсияҳои идоракунии сатҳи системаро ба монанди азнавбаркароркунии FPGA, идоракунии нерӯ ва виртуализатсия имкон медиҳад.
Архитектураи сахтафзор
Аз нуқтаи назари OS view, сахтафзори FPGA ҳамчун як дастгоҳи муқаррарии PCIe пайдо мешавад. Хотираи дастгоҳи FPGA бо истифода аз сохтори маълумоти пешакӣ муайяншуда (Рӯйхати хусусиятҳои дастгоҳ) ташкил карда мешавад. Хусусиятҳое, ки аз ҷониби дастгоҳи FPGA дастгирӣ мешаванд, тавассути ин сохторҳои додаҳо, тавре ки дар зер дар расми зерин нишон дода шудаанд, ошкор карда мешаванд:
Дастгоҳи PCIe FPGA
Драйвер PCIe SR-IOV-ро барои эҷоди Функсияҳои виртуалӣ (VFs) дастгирӣ мекунад, ки онҳоро барои таъини суръатдиҳандаҳои инфиродӣ ба мошинҳои виртуалӣ истифода бурдан мумкин аст.
Корпоратсияи Intel. Ҳамаи ҳуқуқ маҳфуз аст. Intel, логотипи Intel ва дигар тамғаҳои Intel тамғаҳои тиҷоратии Intel Corporation ё филиалҳои он мебошанд. Intel иҷрои маҳсулоти FPGA ва нимноқилҳои худро мувофиқи мушаххасоти ҷорӣ мувофиқи кафолати стандартии Intel кафолат медиҳад, аммо ҳуқуқ дорад, ки дар вақти дилхоҳ бидуни огоҳӣ ба ҳама гуна маҳсулот ва хидматҳо тағйирот ворид кунад. Intel ҳеҷ гуна масъулият ё масъулиятеро, ки аз барнома ё истифодаи ҳама гуна маълумот, маҳсулот ё хидмати дар ин ҷо тавсифшуда бармеояд, ба дӯш намегирад, ба истиснои ҳолатҳое, ки Intel дар шакли хаттӣ розӣ шудааст. Ба муштариёни Intel тавсия дода мешавад, ки пеш аз такя ба ҳама гуна маълумоти нашршуда ва пеш аз фармоиш барои маҳсулот ё хидматҳо версияи охирини мушаххасоти дастгоҳро дастрас кунанд.
Дигар номҳо ва брендҳо метавонанд ҳамчун моликияти дигарон даъво карда шаванд.
Дастгоҳи виртуалии FPGA PCIe
Муҳаррики идоракунии FPGA (FME)
Муҳаррики идоракунии FPGA идоракунии нерӯ ва гармӣ, гузоришдиҳии хатогиҳо, аз нав конфигуратсия, гузоришдиҳии иҷроиш ва дигар вазифаҳои инфрасохторро иҷро мекунад. Ҳар як FPGA дорои як FME мебошад, ки ҳамеша тавассути Функсияи физикӣ (PF) дастрас мешавад. Барномаҳои фазои корбар метавонанд дастрасии истисноиро ба FME бо истифода аз open() ба даст оранд ва онро бо истифода аз close() ҳамчун корбари имтиёзнок (реша) озод кунанд.
Порт
Порт интерфейси байни матоъи статикии FPGA ("Менеҷери интерфейси FPGA (FIM)") ва минтақаи қисман аз нав танзимшавандаи дорои функсияи суръатбахш (AF) мебошад. Порт иртиботро аз нармафзор ба суръатбахш назорат мекунад ва хусусиятҳоро ба монанди аз нав танзим кардан ва ислоҳ карданро фош мекунад. Дастгоҳи PCIe метавонад якчанд порт дошта бошад ва ҳар як портро метавон тавассути VF тавассути таъини он бо истифода аз FPGA_FME_PORT_ASSIGN ioctl дар дастгоҳи FME фош кард.
Воҳиди Функсияи суръатбахш (AF).
- Як воҳиди Функсияи суръатбахш (AF) ба порт пайваст карда шудааст ва минтақаи 256K MMIO-ро фош мекунад, ки барои регистрҳои назоратии мушаххаси суръатбахш истифода мешавад.
- Барномаҳои фазои корбар метавонанд бо истифода аз open() дар дастгоҳи Порт дастрасии истисноиро ба AFU-и ба порт пайвастшуда ба даст оранд ва онро бо истифода аз close() озод кунанд.
- Барномаҳои фазои корбар инчунин метавонанд минтақаҳои MMIO суръатбахшро mmap() кунанд.
Бозсозии қисман
Тавре ки дар боло зикр гардид, суръатдиҳандаҳоро тавассути қисман аз нав танзим кардани Функсияи суръатбахш (AF) метавон дубора танзим кард. file. Функсияи суръатбахш (AF) бояд барои FIM дақиқ ва минтақаи статикии мақсаднок (Порт) -и FPGA тавлид шуда бошад; дар акси ҳол, амалиёти реконфигуратсия ноком мешавад ва эҳтимолан боиси ноустувории система мегардад. Ин мутобиқатро тавассути муқоисаи ID интерфейси дар сарлавҳаи AF қайдшуда бо ID интерфейси аз ҷониби FME тавассути sysfs фошшуда санҷидан мумкин аст. Ин санҷиш одатан аз ҷониби фазои корбар пеш аз занг задан ба IOCTL аз нав конфигуратсия анҷом дода мешавад.
Шарҳ:
Дар айни замон, ҳама гуна барномаи нармафзоре, ки ба FPGA дастрасӣ дорад, аз ҷумла барномаҳое, ки дар ҳости маҷозӣ кор мекунанд, бояд пеш аз кӯшиши аз нав конфигуратсияи қисман баста шаванд. Қадамҳо хоҳанд буд:
- Ронандаро аз мехмон холй кун
- VF-ро аз меҳмон ҷудо кунед
- SR-IOV-ро хомӯш кунед
- Аз нав конфигуратсияи қисман иҷро кунед
- SR-IOV-ро фаъол созед
- VF-ро ба меҳмон пайваст кунед
- Ронандаро дар меҳмон бор кунед
Виртуализатсияи FPGA
Барои имкон додани дастрасӣ ба суръатбахш аз замимаҳои дар VM коркунанда, порти мувофиқи AFU бояд ба VF бо истифода аз қадамҳои зерин таъин карда шавад:
- ПФ ба таври нобаёнӣ ҳама бандарҳои AFU дорад. Ҳар як порте, ки бояд ба VF дубора таъин карда шавад, аввал бояд аз PF тавассути FPGA_FME_PORT_RELEASE ioctl дар дастгоҳи FME озод карда шавад.
- Вақте ки N портҳо аз PF озод карда мешаванд, фармони дар поён буда метавонад барои фаъол кардани SRIOV ва VFs истифода шавад. Ҳар як VF танҳо як порти дорои AFU дорад. echo N> PCI_DEVICE_PATH/sriov_numvfs
- Аз VF-ҳо ба VM-ҳо гузаред.
- AFU зери VF аз замимаҳо дар VM дастрас аст (бо истифода аз ҳамон драйвер дар дохили VF).
Шарҳ:
FME-ро ба VF таъин кардан мумкин нест, аз ин рӯ PR ва дигар вазифаҳои идоракунӣ танҳо тавассути PF дастрасанд.
Ташкилоти ронандагон
Ронандаи дастгоҳи модули PCIe
Ташкилоти ронандагон
Дастгоҳҳои FPGA ҳамчун дастгоҳҳои муқаррарии PCIe пайдо мешаванд; ҳамин тавр, ронандаи дастгоҳи FPGA PCIe (intel-FPGA-PCI.ko) ҳамеша аввал бор карда мешавад, вақте ки FPGA PCIe PF ё VF ошкор карда мешавад. Ин ронанда дар меъмории ронанда нақши инфрасохторӣ дорад. Он:
- Як дастгоҳи контейнерии FPGA ҳамчун волидайни дастгоҳҳои хусусият эҷод мекунад.
- Рӯйхати хусусиятҳои дастгоҳ, ки дар хотираи дастгоҳи PCIe BAR амалӣ карда мешавад, барои кашф кардани дастгоҳҳои хусусият ва зерфунксияҳои онҳо ва эҷод кардани дастгоҳҳои платформа барои онҳо дар зери дастгоҳи контейнерӣ мегузарад.
- SR-IOV-ро дастгирӣ мекунад.
- Инфрасохтори дастгоҳи хусусиятро муаррифӣ мекунад, ки амалиётҳоро барои зерфунксияҳо абстракт мекунад ва функсияҳои умумиро ба драйверҳои дастгоҳ нишон медиҳад.
Функсияҳои драйвери дастгоҳи модули PCIe
- Он дорои кашфи PCIe, рӯйхати дастгоҳҳо ва кашфи хусусиятҳо мебошад.
- Барои дастгоҳи волидайн, FPGA Management Engine (FME) ва Порт феҳристҳои sysfs эҷод мекунад.
- Намунаҳои драйвери платформаро эҷод мекунад, ки ядрои Linux-ро барои бор кардани драйверҳои модули платформаи худ водор мекунад.
Ронандаи дастгоҳи модули платформаи FME
- Идоракунии нерӯи барқ ва гармӣ, гузоришдиҳии хатогиҳо, гузоришдиҳии иҷроиш ва дигар вазифаҳои инфрасохтор. Шумо метавонед ба ин функсияҳо тавассути интерфейсҳои sysfs, ки аз ҷониби драйвери FME кушода шудааст, дастрас шавед.
- Бозсозии қисман. Драйвери FME Менеҷери FPGA-ро ҳангоми оғозёбии зерфунксияҳои PR сабт мекунад; вақте ки он FPGA_FME_PORT_PR ioctl-ро аз шумо қабул мекунад, он функсияи интерфейси умумиро аз Manager FPGA барои анҷом додани конфигуратсияи қисман ҷараёни бит ба Порти додашуда даъват мекунад.
- Идоракунии порт барои виртуализатсия. Драйвери FME ду ioctl-ро ҷорӣ мекунад, FPGA_FME_PORT_RELEASE, ки Порти додашударо аз PF мебарорад; ва FPGA_FME_PORT_ASSIGN, ки портро ба PF бармегардонад. Пас аз он ки порт аз PF озод карда мешавад, онро метавон ба VF тавассути интерфейсҳои SR-IOV, ки драйвери PCIe пешниҳод кардааст, таъин кард. Барои маълумоти иловагӣ, ба "Виртуализатсияи FPGA" муроҷиат кунед.
Функсияҳои ронандаи дастгоҳи модули платформаи FME
- Гиреҳи дастгоҳи аломати FME-ро эҷод мекунад.
- Sysfs FME-ро эҷод мекунад files ва sysfs FME-ро амалӣ мекунад file дастраскунандагон.
- Зер-драйверҳои хусусияти хусусии FME-ро амалӣ мекунад.
- Зер-драйверҳои хусусии FME:
- Сарлавҳаи FME
- Идоракунии гармидиҳӣ
- Идоракунии нерӯ
- Хатогии глобалӣ
- Бозсозии қисман
- Фаъолияти глобалӣ
Ронандаи дастгоҳи модули Порт платформаи
Ба монанди драйвери FME, ронандаи FPGA Порт (ва AFU) (intel-fpga-afu. ko) пас аз сохтани дастгоҳи платформаи Порт санҷида мешавад. Вазифаи асосии ин модул таъмин намудани интерфейс барои замимаҳои фазои корбар барои дастрасӣ ба суръатбахшҳои инфиродӣ, аз ҷумла назорати барқароркунии асосӣ дар Порт, содироти минтақаи AFU MMIO, хидмати харитасозии буферии DMA, огоҳиномаи UMsg(1) ва функсияҳои ислоҳи дурдаст мебошад ( ба боло нигаред).
UMsg танҳо тавассути Acceleration Stack барои протсессори Intel Xeon® бо FPGA интегратсионӣ дастгирӣ карда мешавад.
Функсияҳои ронандаи дастгоҳи модули Порт платформа
- Гиреҳи дастгоҳи аломати Портро эҷод мекунад.
- Порт sysfs-ро эҷод мекунад files ва Port sysfs -ро амалӣ мекунад file дастраскунандагон.
- Зер-драйверҳои хусусияти хусусии Портро амалӣ мекунад.
- Зер-драйверҳои хусусии порт:
- Сарлавҳаи порт
- АФУ
- Хатои порт
- UMsg(2)
- Сигнали ламс
Номгӯи дастгоҳи барнома FPGA
Ин бахш нишон медиҳад, ки чӣ гуна барномаҳо дастгоҳи FPGA-ро аз иерархияи sysfs зери /sys/class/fpga номбар мекунанд. Дар собикampДар зер, ду дастгоҳи Intel FPGA дар мизбон насб карда шудаанд. Ҳар як дастгоҳи FPGA дорои як FME ва ду порт (AFUs). Барои ҳар як дастгоҳи FPGA феҳристи дастгоҳ дар зери /sys/class/fpga сохта мешавад:
/sys/class/fpga/intel-fpga-dev.0
/sys/class/fpga/intel-fpga-dev.1
Ҳар як гиреҳ як FME ва ду порт (AFU) ҳамчун дастгоҳҳои кӯдакона дорад:
/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
Умуман, интерфейсҳои FME/Port sysfs чунин ном доранд:
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-fme.j/
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-port.k/
бо I пай дар пай рақамгузорӣ кардани ҳамаи дастгоҳҳои контейнер, j пай дар пай рақамгузории FME ва k пай дар пай ҳамаи портҳоро рақамгузорӣ мекунанд.
Гиреҳҳои дастгоҳе, ки барои ioctl() ва mmap() истифода мешаванд, метавонанд тавассути:
/dev/intel-fpga-fme.j
/dev/intel-fpga-port.k
Рӯйхати ронандагони PCIe
Ин бахш бартарӣ медиҳадview ҷараёни код барои номбаркунии дастгоҳ аз ҷониби intel-fpga-pci.ko. Сохторҳо ва функсияҳои асосии додаҳо нишон дода шудаанд. Ин бахш беҳтар аз паи вақте ки viewрамзи сарчашмаи ҳамроҳ (pcie.c).
Сохторҳои маълумотҳои номбаршуда
enum fpga_id_type {
PARENT_ID,
FME_ID,
PORT_ID,
FPGA_ID_MAX
};
сохтори статикӣ idr fpga_ids[FPGA_ID_MAX];
сохтори fpga_chardev_info {
const char *ном;
dev_t devt;
};
сохтори fpga_chardev_info fpga_chrdevs[] = {
{ .name = FPGA_FEATURE_DEV_FME },
{ .name = FPGA_FEATURE_DEV_PORT },
};
синфи сохтори статикӣ *fpga_class;
сохтори статикӣ 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,}
};
сохтори статикӣ 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
};
сохтор cci_drvdata {
int device_id;
дастгоҳи сохторӣ *fme_dev;
struct mutex lock;
struct list_head port_dev_list;
int release_port_num;
сохтори минтақаҳои list_head;
};
struct build_feature_devs_info {
struct pci_dev *pdev;
бекор __иомем *иоаддр;
бекор __иомем *иоенд;
int current_bar;
бекор __иомем *pfme_hdr;
дастгоҳи сохторӣ *parent_dev;
struct platform_device *feature_dev;
};
Ҷараёни рӯйхат
- ccidrv_init ()
- Fpga_ids -ро бо истифода аз idr_init () оғоз кунед.
- Бо истифода аз alloc_chrdev_region() fpga_chrdevs[i].devt-ро оғоз кунед.
- Бо истифода аз class_create() fpga_class-ро оғоз кунед.
- pci_register_driver (&cci_pci_driver);
- cci_pci_probe ()
- Дастгоҳи PCI-ро фаъол созед, дастрасӣ ба минтақаҳои онро дархост кунед, режими Master PCI-ро танзим кунед ва DMA-ро танзим кунед.
- cci_pci_create_feature_devs() build_info_alloc_and_init()
- Як сохтори build_feature_devs_info ҷудо кунед, онро оғоз кунед.
.parent_dev ба директорияи волидайни sysfs (intel-fpga-dev.id) гузошта шудааст, ки директорияҳои FME ва Port sysfs-ро дар бар мегирад.
- Як сохтори build_feature_devs_info ҷудо кунед, онро оғоз кунед.
- parse_feature_list()
- Рӯйхати хусусиятҳои дастгоҳи BAR0-ро сайр кунед, то FME, Порт ва хусусиятҳои хусусии онҳоро кашф кунед.
- parse_feature() parse_feature_afus() parse_feature_fme()
- Вақте ки бо FME дучор мешавад:
- build_info_create_dev()
- Таҷҳизоти платформаро барои FME ҷудо кунед, ки дар build_feature_devs_info.feature_dev захира кунед.
- feature_dev.id ба натиҷаи idr_alloc (fpga_ids [FME_ID]) оғоз карда мешавад,
- feature_dev.parent барои build_feature_devs_info.parent_dev таъин шудааст.
- Як қатор захираҳои сохториро дар feature_dev.resource ҷудо кунед.
- Сохтори feature_platform_data ҷудо кунед, онро оғоз кунед ва нишондодро дар feature_dev.dev.platform_data захира кунед
- create_feature_instance() build_info_add_sub_feature()
- Оғоз кардани feature_dev.resource[FME_FEATURE_ID_HEADER].
- feature_platform_data_add()
- Feature_platform_data.features[FME_FEATURE_ID_HEADER], ҳама чизро ба ҷуз .fops оғоз кунед.
- parse_feature() parse_feature_afus() parse_feature_port()
- Вақте ки порт дучор мешавад:
- build_info_create_dev()
- Таҷҳизоти платформаро барои Порт ҷудо кунед, ки дар build_feature_devs_info.feature_dev захира кунед.
- feature_dev.id ба натиҷаи idr_alloc (fpga_ids[PORT_ID] оғоз карда мешавад,
- feature_dev.parent барои build_feature_devs_info.parent_dev таъин шудааст.
- Ҷудо кардани массиви манбаи сохторӣ дар feature_dev.resource.
- Сохтори feature_platform_data ҷудо кунед, онро оғоз кунед ва нишондодро дар feature_dev.dev.platform_data захира кунед
- build_info_commit_dev()
- struct feature_platform_data.node барои Порт ба рӯйхати портҳо дар struct cci_drvdata.port_dev_list илова кунед
- create_feature_instance() build_info_add_sub_feature()
- Оғоз кардани feature_dev.resource[PORT_FEATURE_ID_HEADER].
- feature_platform_data_add()
- Оғоз кунед feature_platform_data.features[PORT_FEATURE_ID_HEADER], ҳама чизро ҷуз .fops.
- parse_feature() parse_feature_afus() parse_feature_port_uafu()
- Вақте ки AFU дучор мешавад:
- create_feature_instance() build_info_add_sub_feature()
- Оғоз кардани feature_dev.resource[PORT_FEATURE_ID_UAFU].
- feature_platform_data_add()
- Feature_platform_data.features[PORT_FEATURE_ID_UAFU], ҳама чизро ба ҷуз .fops оғоз кунед.
- parse_feature() parse_feature_private() parse_feature_fme_private()
- Вақте ки хусусияти хусусии FME дучор мешавад:
- create_feature_instance() build_info_add_sub_feature()
- Feature_dev.resource[id]-ро оғоз кунед.
- feature_platform_data_add()
- Оғоз кунед feature_platform_data.features[id], ҳама чиз ҷуз .fops.
- parse_feature() parse_feature_private() parse_feature_port_private()
- Вақте ки хусусияти хусусии Порт дучор мешавад: * create_feature_instance() build_info_add_sub_feature() * Initialize feature_dev.resource[id]. * feature_platform_data_add () Initialize feature_platform_data.features[id], ҳама чиз ҷуз .fops.
- parse_ports_from_fme()
- Агар ронанда ба Функсияи физикӣ (PF) бор карда шуда бошад, пас:
- Ҷараёни parse_feature_list()-ро дар ҳар як бандари дар сарлавҳаи FME тавсифшуда иҷро кунед.
- BAR-ро, ки дар ҳар як вуруди Порт дар сарлавҳа зикр шудааст, истифода баред.
Оғозсозии дастгоҳи платформаи FME
Ин бахш бартарӣ медиҳадview ҷараёни код барои оғозкунии дастгоҳи FME, ки аз ҷониби intel-fpga-fme.ko анҷом дода мешавад. Сохторҳо ва функсияҳои асосии додаҳо нишон дода шудаанд. Ин бахш беҳтар аз паи вақте ки viewрамзи сарчашмаи ҳамроҳ (fme-main.c).
Сохторҳои маълумотҳои дастгоҳи платформаи FME
struct feature_ops {
int (*init)(struct platform_device *pdev, хусусияти сохтор *хусусият);
int (*uinit)(struct platform_device *pdev, хусусияти сохтор *хусусият);
long (*ioctl)(struct platform_device *pdev, хусусияти сохтор *хусусият,
unsigned int cmd, unsigned long arg);
int (* санҷиш) (struct platform_device * pdev, хусусияти сохтор * хусусият);
};
хусусияти сохторӣ {
const char *ном;
int resource_index;
бекор __иомем *иоаддр;
struct feature_ops *ops;
};
сохтори feature_platform_data {
гиреҳи сохтори list_head;
struct mutex lock;
unsigned long dev_status;
struct cdev cdev;
struct platform_device *dev;
unsigned int disable_count;
беэътибор * хусусӣ;
int num;
int (*config_port)(struct platform_device *, u32, bool);
struct platform_device *(*fpga_for_each_port)(struct platform_device *,
void *, int (* мутобиқат) (struct platform_device *, void *)); сохтор
хусусият[0];
};
struct perf_object {
int id;
const struct attribute_group **attr_groups;
дастгоҳи сохторӣ *fme_dev;
гиреҳи сохтори list_head;
struct list_head кӯдакон;
struct kobject kobj;
};
сохтори fpga_fme {
u8 port_id;
u64 pr_err;
дастгоҳи сохторӣ *dev_err;
struct perf_object *perf_dev;
struct feature_platform_data *pdata;
};
Ҷараёни оғозкунии дастгоҳи платформаи FME
Ҷараёни ибтидоии FME
- fme_probe() fme_dev_init()
- Сохтори fpga_fme-ро оғоз кунед ва онро дар майдони feature_platform_data.private нигоҳ доред.
- fme_probe() fpga_dev_feature_init() feature_instance_init()
- Як сохтори Feature_ops-ро дар feature_platform_data.features барои ҳар як хусусияти пуркардашуда захира кунед.
- Функсияи санҷишро, агар мавҷуд бошад, аз сохтор даъват кунед.
- Функсияи init -ро аз сохтор даъват кунед.
- fme_probe() fpga_register_dev_ops()
- Сохтани гиреҳи дастгоҳи аломати FME, сабти сохтор file_амалиёти.
Оғозсозии дастгоҳи платформаи Порт
Ин бахш бартарӣ медиҳадview ҷараёни код барои оғозкунии дастгоҳи портӣ аз ҷониби intel-fpga-afu.ko. Сохторҳо ва функсияҳои асосии додаҳо нишон дода шудаанд. Ин бахш беҳтар аз паи вақте ки viewрамзи сарчашмаи ҳамроҳ (afu.c).
Сохторҳои маълумотҳои дастгоҳи платформаи Порт
struct feature_ops {
int (*init)(struct platform_device *pdev, хусусияти сохтор *хусусият);
int (*uinit)(struct platform_device *pdev, хусусияти сохтор *хусусият);
long (*ioctl)(struct platform_device *pdev, хусусияти сохтор *хусусият,
unsigned int cmd, unsigned long arg);
int (* санҷиш) (struct platform_device * pdev, хусусияти сохтор * хусусият);
};
хусусияти сохторӣ {
const char *ном;
int resource_index;
бекор __иомем *иоаддр;
struct feature_ops *ops;
};
сохтори feature_platform_data {
гиреҳи сохтори list_head;
struct mutex lock;
unsigned long dev_status;
struct cdev cdev;
struct platform_device *dev;
unsigned int disable_count;
беэътибор * хусусӣ;
int num;
int (*config_port)(struct platform_device *, u32, bool);
struct platform_device *(*fpga_for_each_port)(struct platform_device *,
void *, int (* мутобиқат) (struct platform_device *, void *));
хусусиятҳои сохторӣ[0];
};
сохтори fpga_afu_region {
индекс u32;
парчамҳои u32;
андозаи u64;
u64 ҷуброн;
u64 физкультура;
гиреҳи сохтори list_head;
};
сохтори fpga_afu_dma_region {
u64 user_addr;
дарозии u64;
u64 iova;
саҳифаи сохторӣ **саҳифаҳо;
struct гиреҳи rb_node;
bool in_use;
};
сохтори fpga_afu {
u64 region_cur_offset;
int рақами_минтақаҳо;
u8 num_umsgs;
сохтори минтақаҳои list_head;
сохтори rb_root dma_regions;
struct feature_platform_data *pdata;
};
Ҷараёни ибтидоии дастгоҳи платформаи Порт
Ҷараёни оғозсозии порт
- afu_probe() afu_dev_init()
- Сохтори fpga_afu-ро оғоз кунед ва онро дар майдони feature_platform_data.private нигоҳ доред.
- afu_probe() fpga_dev_feature_init() feature_instance_init()
- Як сохтори Feature_ops-ро дар feature_platform_data.features барои ҳар як хусусияти пуркардашуда захира кунед.
- Функсияи санҷишро, агар мавҷуд бошад, аз сохтор даъват кунед.
- Функсияи init -ро аз сохтор даъват кунед.
- afu_probe() fpga_register_dev_ops()
- Сохтани гиреҳи дастгоҳи аломати Порт бо сабти сохтор file_амалиёти.
FME IOCTLs
IOCTLҳо, ки дар кушода даъват карда мешаванд file тавсифкунанда барои /dev/intel-fpga-fme.j FPGA_GET_API_VERSION — баргардонидани версияи ҷорӣ ҳамчун адади бутун, аз 0 сар карда.
FPGA_CHECK_EXTENSION — айни замон дастгирӣ намешавад.
FPGA_FME_PORT_RELEASE — arg ишоракунанда ба a:
сохтори fpga_fme_port_release {
__u32 argsz; // дар: sizeof(struct fpga_fme_port_release)
__u32 байрақҳо; // дар: бояд 0 бошад
__u32 port_id; // дар: ID порт (аз 0) ба озод.
};
FPGA_FME_PORT_ASSIGN — arg ишоракунанда ба як:
сохтори fpga_fme_port_assign {
__u32 argsz; // дар: sizeof(struct fpga_fme_port_assign)
__u32 байрақҳо; // дар: бояд 0 бошад
__u32 port_id; // дар: ID порт (аз 0) барои таъин. (бояд буд
қаблан аз ҷониби FPGA_FME_PORT_RELEASE нашр шуда буд)
};
FPGA_FME_PORT_PR — arg ишоракунанда ба як:
сохтори fpga_fme_port_pr {
__u32 argsz; // дар: sizeof(struct fpga_fme_port_pr)
__u32 байрақҳо; // дар: бояд 0 бошад
__u32 port_id; // дар: ID порт (аз 0)
__u32 buffer_size; // дар: андозаи буфери бит дар байт. Бояд 4-байт бошад
мувофиқ карда шудааст.
__u64 buffer_address; // дар: суроғаи раванди буфери bitstream
ҳолати __u64; // берун: ҳолати хато (ниқоби бит)
};
Портҳои IOCTL
IOCTLҳо, ки дар кушода даъват карда мешаванд file дескриптор барои /dev/intel-fpga-port.k FPGA_GET_API_VERSION—баргардонидани версияи ҷорӣ ҳамчун адади бутун, аз 0 сар карда. FPGA_CHECK_EXTENSION — дар айни замон дастгирӣ намешавад.
FPGA_PORT_GET_INFO — arg ишоракунанда ба як:
сохтори fpga_port_info {
__u32 argsz; // дар: sizeof(struct fpga_port_info)
__u32 байрақҳо; // берун: 0 бар мегардонад
__u32 шумораи_минтақаҳо; // берун: шумораи минтақаҳои MMIO, 2 (1 барои AFU ва 1 барои
STP)
__u32 num_umsgs; // берун: шумораи UMsg, ки аз ҷониби сахтафзор дастгирӣ мешавад
};
FPGA_PORT_GET_REGION_INFO — arg ишоракунанда ба як:
сохтори fpga_port_region_info {
__u32 argsz; // дар: sizeof(struct fpga_port_region_info)
__u32 байрақҳо; // берун: (ниқоби бит) { FPGA_REGION_READ, FPGA_REGION_WRITE,
FPGA_REGION_MMAP }
__u32 индекс; // дар: FPGA_PORT_INDEX_UAFU ё FPGA_PORT_INDEX_STP
__u32 пуркунӣ; // дар: бояд 0 бошад
андоза __u64; // берун: андозаи минтақаи MMIO дар байт
__u64 офсет; // берун: ҷуброни минтақаи MMIO аз оғози дастгоҳ fd
};
FPGA_PORT_DMA_MAP — arg ишоракунанда ба як:
сохтори fpga_port_dma_map {
__u32 argsz; // дар: sizeof(struct fpga_port_dma_map)
__u32 байрақҳо; // дар: бояд 0 __u64 user_addr бошад; // дар: раванди виртуалӣ
суроға. Саҳифа бояд ҳамоҳанг карда шавад.
дарозии __u64; // дар: дарозии харитасозӣ дар байт. Бояд якчанд саҳифа бошад
андоза.
__у64 иова; // берун: суроғаи виртуалии IO };
FPGA_PORT_DMA_UNMAP — arg ишоракунанда ба як:
сохтори fpga_port_dma_unmap {
__u32 argsz; // дар: sizeof(struct fpga_port_dma_unmap)
__u32 байрақҳо; // дар: бояд 0 бошад
__у64 иова; // дар: суроғаи виртуалии IO, ки аз ҷониби қаблӣ баргардонида шудааст
FPGA_PORT_DMA_MAP };
- FPGA_PORT_RESET—arg бояд NULL бошад.
- FPGA_PORT_UMSG_ENABLE — arg бояд NULL бошад.
- FPGA_PORT_UMSG_DISABLE — args бояд NULL бошад.
FPGA_PORT_UMSG_SET_MODE — arg ишоракунанда ба як:
сохтори fpga_port_umsg_cfg {
__u32 argsz; // дар: sizeof(struct fpga_port_umsg_cfg)
__u32 байрақҳо; // дар: бояд 0 бошад
__u32 hint_bitmap; // дар: UMsg нишони режими bitmap. Нишон медиҳад, ки UMsg кадомҳоянд
фаъол карда шуд.
};
FPGA_PORT_UMSG_SET_BASE_ADDR -
- Пеш аз интишори ин ioctl UMsg бояд хомӯш карда шавад.
- Майдони iova бояд барои буфери кофӣ барои ҳамаи UMsg калон бошад (num_umsgs * PAGE_SIZE).
- Буфер аз ҷониби идораи буфери ронанда ҳамчун "дар истифода" қайд карда мешавад.
- Агар iova NULL бошад, ягон минтақаи қаблӣ ҳамчун "дар истифода" қайд карда намешавад.
- arg ишоракунанда ба a:
сохтори fpga_port_umsg_base_addr {- u32 argsz; // дар: sizeof(struct fpga_port_umsg_base_addr)
- парчамҳои u32; // дар: бояд 0 бошад
- u64 iova; // дар: суроғаи виртуалии IO аз FPGA_PORT_DMA_MAP. };
Шарҳ:
- Барои тоза кардани хатогиҳои порт, шумо бояд ниқоби дақиқи хатогиҳои ҷорӣро нависед, масаланampле, хатогихои кат> равшан
- UMsg танҳо тавассути Acceleration Stack барои протсессори Intel Xeon бо FPGA интегратсионӣ дастгирӣ карда мешавад.
sysfs Files
Sysfs сарлавҳаи FME files
intel-fpga-dev.i/intel-fpga-fme.j/
sysfs file | майдони ммио | навъи | дастрасӣ |
бандарҳои_рақам | fme_header.capability.num_ports | даҳӣ инт | Танҳо барои хондан |
кэш_андоза | fme_header.capability.cache_size | даҳӣ инт | Танҳо барои хондан |
версия | fme_header.capability.fabric_verid | даҳӣ инт | Танҳо барои хондан |
socket_id | fme_header.capability.socket_id | даҳӣ инт | Танҳо барои хондан |
bitstream_id | fme_header.bitstream_id | hex uint64_t | Танҳо барои хондан |
bitstream_metdata | fme_header.bitstream_md | hex uint64_t | Танҳо барои хондан |
Системаи идоракунии гармии FME files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/
sysfs file | майдони ммио | навъи | дастрасӣ |
ҳадди 1 | thermal.threshold.tmp_thshold1 | даҳӣ инт | Истифодабаранда: Реша барои хондан: Хондан-навиштан |
ҳадди 2 | thermal.threshold.tmp_thshold2 | даҳӣ инт | Истифодабаранда: Реша барои хондан: Хондан-навиштан |
остонаи_сафар | thermal.threshold.therm_trip_thshold | даҳӣ инт | Танҳо барои хондан |
ба ҳадди 1_ расид | thermal.threshold.thshold1_status | даҳӣ инт | Танҳо барои хондан |
ба ҳадди 2_ расид | thermal.threshold.thshold2_status | даҳӣ инт | Танҳо барои хондан |
ҳадди 1_сиёсат | гармӣ. threshold.thshold_policy | даҳӣ инт | Истифодабаранда: Реша барои хондан: Хондан-навиштан |
ҳарорат | thermal.rdsensor_fm1.fpga_temp | даҳӣ инт | Танҳо барои хондан |
Системаи идоракунии қувваи FME files
intel-fpga-dev.i/intel-fpga-fme.j/power_mgmt/
sysfs file | майдони ммио | навъи | дастрасӣ |
истеъмол карда мешавад | power.status.pwr_истеъмол | hex uint64_t | Танҳо барои хондан |
ҳадди 1 | қудрат.ҳадди остона1 | hex uint64_t | Истифодабаранда: Реша барои хондан: Хондан-навиштан |
ҳадди 2 | қудрат.ҳадди остона2 | hex uint64_t | Истифодабаранда: Реша барои хондан: Хондан-навиштан |
остона1_мақом | power.threshold.threshold1_status | даҳӣ беимзо | Танҳо барои хондан |
остона2_мақом | power.threshold.threshold2_status | даҳӣ беимзо | Танҳо барои хондан |
rtl | power.status.fpga_latency_report | даҳӣ беимзо | Танҳо барои хондан |
Хатои глобалии FME sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/errors/
sysfs file | майдони ммио | навъи | дастрасӣ |
pcie0_errors | gerror.pcie0_err | hex uint64_t | Хондан-навиштан |
pcie1_errors | gerror.pcie1_err | hex uint64_t | Хондан-навиштан |
inject_error | gerror.ras_error_inj | hex uint64_t | Хондан-навиштан |
intel-fpga-dev.i/intel-fpga-fme.j/errors/fme-errors/
sysfs file | майдони ммио | навъи | дастрасӣ |
хатогиҳо | gerror.fme_err | hex uint64_t | Танҳо барои хондан |
аввал_хато | gerror.fme_first_err.err_reg_status | hex uint64_t | Танҳо барои хондан |
навбатӣ_хато | gerror.fme_next_err.err_reg_status | hex uint64_t | Танҳо барои хондан |
равшан | Хатогиро тоза мекунад, first_error, next_error | uint64_t гуногун | Танҳо барои навиштан |
Шарҳ:
Барои тоза кардани хатогиҳои FME, шумо бояд ниқоби дақиқи хатогиҳои ҷорӣро нависед, масаланampхатогиҳои le cat > равшан.
Sysfs қисман аз нав танзимкунии FME files
intel-fpga-dev.i/intel-fpga-fme.j/pr/
sysfs file | майдони ммио | навъи | дастрасӣ |
interface_id | pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l | шонздаҳӣ 16-байт | Танҳо барои хондан |
FME Global Performance sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/dperf/clock
sysfs file | майдони ммио | навъи | дастрасӣ |
соат | gperf.clk.afu_interf_clock | hex uint64_t | Танҳо барои хондан |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (Барои Stack Acceleration for Intel Xeon CPU бо FPGAs эътибор надорад)
sysfs file | майдони ммио | навъи | дастрасӣ |
ях кардан | gperf.ch_ctl.freeze | даҳӣ инт | Хондан-навиштан |
хондан_задан | gperf.CACHE_RD_HIT | hex uint64_t | Танҳо барои хондан |
хондан_сахт | gperf.CACHE_RD_MISS | hex uint64_t | Танҳо барои хондан |
нависед_хит | gperf.CACHE_WR_HIT | hex uint64_t | Танҳо барои хондан |
бинависед | gperf.CACHE_WR_MISS | hex uint64_t | Танҳо барои хондан |
нигоҳ доштани_дархост | gperf.CACHE_HOLD_REQ | hex uint64_t | Танҳо барои хондан |
tx_req_stall | gperf.CACHE_TX_REQ_STALL | hex uint64_t | Танҳо барои хондан |
sysfs file | майдони ммио | навъи | дастрасӣ |
rx_req_stall | gperf.CACHE_RX_REQ_STALL | hex uint64_t | Танҳо барои хондан |
data_write_port_contition | gperf.CACHE_DATA_WR_PORT_CONTEN | hex uint64_t | Танҳо барои хондан |
tag_навиштани_порт | gperf.CACHE_TAG_WR_PORT_CONTEN | hex uint64_t | Танҳо барои хондан |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (Барои Stack Acceleration for Intel Xeon CPU бо FPGAs эътибор надорад)
sysfs file | майдони ммио | навъи | дастрасӣ |
ях кардан | gperf.vtd_ctl.freeze | даҳӣ инт | Истифодабаранда: Реша барои хондан: Хондан-навиштан |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (Барои Acceleration Stack барои CPU Intel Xeon бо FPGAҳо эътибор надорад)
sysfs file | майдони ммио | навъи | дастрасӣ |
хондан_амал | gperf.VTD_AFU0_MEM_RD_TRANS | hex uint64_t | Танҳо барои хондан |
навиштан_амалиёт | gperf.VTD_AFU0_MEM_WR_TRANS | hex uint64_t | Танҳо барои хондан |
tlb_read_hit | gperf.VTD_AFU0_TLB_RD_HIT | hex uint64_t | Танҳо барои хондан |
tlb_write_hit | gperf.VTD_AFU0_TLB_WR_HIT | hex uint64_t | Танҳо барои хондан |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/fabric/
sysfs file | майдони ммио | навъи | дастрасӣ |
имкон додан | gperf.fab_ctl.(фаъол) | даҳӣ инт | Истифодабаранда: Реша барои хондан: Хондан-навиштан |
ях кардан | gperf.fab_ctl.freeze | даҳӣ инт | Истифодабаранда: Реша барои хондан: Хондан-навиштан |
pcie0_read | gperf.FAB_PCIE0_RD | hex uint64_t | Танҳо барои хондан |
pcie0_write | gperf.FAB_PCIE0_WR | hex uint64_t | Танҳо барои хондан |
pcie1_read | gperf.FAB_PCIE1_RD | hex uint64_t | Танҳо барои хондан |
pcie1_write | gperf.FAB_PCIE1_WR | hex uint64_t | Танҳо барои хондан |
upi_read | gperf.FAB_UPI_RD | hex uint64_t | Танҳо барои хондан |
upi_write | gperf.FAB_UPI_WR | hex uint64_t | Танҳо барои хондан |
intel-fpga-ev.i/intel-fpga/fme.j/dperf/fabric/portk/
sysfs file | майдони ммио | навъи | дастрасӣ |
pcie0_read | gperf.FAB_PCIE0_RD | hex uint64_t | Танҳо барои хондан |
pcie0_write | gperf.FAB_PCIE0_WR | hex uint64_t | Танҳо барои хондан |
pcie1_read | gperf.FAB_PCIE1_RD | hex uint64_t | Танҳо барои хондан |
pcie1_write | gperf.FAB_PCIE1_WR | hex uint64_t | Танҳо барои хондан |
upi_read | gperf.FAB_UPI_RD | hex uint64_t | Танҳо барои хондан |
upi_write | gperf.FAB_UPI_WR | hex uint64_t | Танҳо барои хондан |
sysfs сарлавҳаи порт files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | майдони ммио | навъи | дастрасӣ |
id | port_header.capability.port_number | даҳӣ инт | Танҳо барои хондан |
лтр | port_header.control.latency_tolerance | даҳӣ инт | Танҳо барои хондан |
Сарлавҳаи порти AFU sysfs files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | майдони ммио | навъи | дастрасӣ |
afu_id | afu_header.guid | шонздаҳӣ 16-байт | Танҳо барои хондан |
Хатои порти sysfs files
intel-fpga-dev.i/intel-fpga-port.k/errors/
sysfs file | майдони ммио | навъи | дастрасӣ |
хатогиҳо | perror.port_error | hex uint64_t | Танҳо барои хондан |
аввал_хато | perror.port_first_error | hex uint64_t | Танҳо барои хондан |
аввал_хато_талаб | perror.malreq | шонздаҳӣ 16-байт | Танҳо барои хондан |
равшан | хато.(ҳамаи хатоҳо) | uint64_t гуногун | Танҳо барои навиштан |
Шарҳ:
Барои тоза кардани хатогиҳои Порт, шумо бояд ниқоби дақиқи хатогиҳои ҷорӣро нависед, масаланampхатогиҳои le cat > равшан.
Таърихи ревизия
Версияи ҳуҷҷат | Тағйирот |
2017.10.02 | Нашри аввал. |
Дастури меъмории ронандаи дастгоҳи OPAE Intel FPGA Linux
Ҳуҷҷатҳо / Сарчашмаҳо
![]() |
Архитектураи ронандаи дастгоҳи intel OPAE FPGA Linux [pdf] Дастури корбар Архитектураи ронандаи дастгоҳи Linux OPAE FPGA, OPAE FPGA, меъмории драйвери дастгоҳи Linux, меъмории драйверҳо, меъморӣ |