intel OPAE FPGA ស្ថាបត្យកម្មកម្មវិធីបញ្ជាឧបករណ៍លីនុច
OPAE Intel FPGA ស្ថាបត្យកម្មកម្មវិធីបញ្ជាឧបករណ៍លីនុច
កម្មវិធីបញ្ជា OPAE Intel FPGA ផ្តល់ចំណុចប្រទាក់សម្រាប់កម្មវិធីចន្លោះអ្នកប្រើប្រាស់ដើម្បីកំណត់រចនាសម្ព័ន្ធ រាប់បញ្ចូល បើក និងចូលប្រើឧបករណ៍បង្កើនល្បឿន FPGA នៅលើវេទិកាដែលបំពាក់ដោយដំណោះស្រាយ Intel FPGA និងបើកដំណើរការមុខងារគ្រប់គ្រងកម្រិតប្រព័ន្ធដូចជា ការកំណត់រចនាសម្ព័ន្ធ FPGA ការគ្រប់គ្រងថាមពល និងនិម្មិត។
ស្ថាបត្យកម្មផ្នែករឹង
ពីចំណុចរបស់ OS viewផ្នែករឹង FPGA លេចឡើងជាឧបករណ៍ PCIe ធម្មតា។ អង្គចងចាំឧបករណ៍ FPGA ត្រូវបានរៀបចំដោយប្រើរចនាសម្ព័ន្ធទិន្នន័យដែលបានកំណត់ជាមុន (បញ្ជីលក្ខណៈពិសេសឧបករណ៍) ។ លក្ខណៈពិសេសដែលគាំទ្រដោយឧបករណ៍ FPGA ត្រូវបានលាតត្រដាងតាមរយៈរចនាសម្ព័ន្ធទិន្នន័យទាំងនេះ ដូចដែលបានបង្ហាញខាងក្រោមក្នុងរូបភាពខាងក្រោម៖
ឧបករណ៍ FPGA PCIe
កម្មវិធីបញ្ជាគាំទ្រ PCIe SR-IOV ដើម្បីបង្កើតមុខងារនិម្មិត (VFs) ដែលអាចត្រូវបានប្រើដើម្បីផ្តល់ឧបករណ៍បង្កើនល្បឿនបុគ្គលទៅម៉ាស៊ីននិម្មិត។
សាជីវកម្ម Intel ។ រក្សារសិទ្ធគ្រប់យ៉ាង។ Intel, និមិត្តសញ្ញា Intel និងសញ្ញា Intel ផ្សេងទៀតគឺជាពាណិជ្ជសញ្ញារបស់ Intel Corporation ឬក្រុមហ៊ុនបុត្រសម្ព័ន្ធរបស់ខ្លួន។ Intel ធានានូវដំណើរការនៃផលិតផល FPGA និង semiconductor របស់ខ្លួនទៅនឹងលក្ខណៈបច្ចេកទេសបច្ចុប្បន្នស្របតាមការធានាស្តង់ដាររបស់ Intel ប៉ុន្តែរក្សាសិទ្ធិក្នុងការផ្លាស់ប្តូរផលិតផល និងសេវាកម្មណាមួយនៅពេលណាមួយដោយមិនមានការជូនដំណឹងជាមុន។ Intel សន្មត់ថាគ្មានទំនួលខុសត្រូវ ឬការទទួលខុសត្រូវដែលកើតចេញពីកម្មវិធី ឬការប្រើប្រាស់ព័ត៌មាន ផលិតផល ឬសេវាកម្មណាមួយដែលបានពិពណ៌នានៅទីនេះ លើកលែងតែមានការយល់ព្រមជាលាយលក្ខណ៍អក្សរដោយ Intel ។ អតិថិជនរបស់ Intel ត្រូវបានណែនាំឱ្យទទួលបានកំណែចុងក្រោយបំផុតនៃលក្ខណៈបច្ចេកទេសឧបករណ៍ មុនពេលពឹងផ្អែកលើព័ត៌មានដែលបានបោះពុម្ពផ្សាយណាមួយ និងមុនពេលធ្វើការបញ្ជាទិញផលិតផល ឬសេវាកម្ម។
ឈ្មោះ និងម៉ាកផ្សេងទៀតអាចត្រូវបានអះអាងថាជាកម្មសិទ្ធិរបស់អ្នកដទៃ។
ឧបករណ៍ FPGA PCIe និម្មិត
ម៉ាស៊ីនគ្រប់គ្រង FPGA (FME)
ម៉ាស៊ីនគ្រប់គ្រង FPGA អនុវត្តការគ្រប់គ្រងថាមពល និងកម្ដៅ របាយការណ៍កំហុស ការកំណត់រចនាសម្ព័ន្ធឡើងវិញ របាយការណ៍ប្រតិបត្តិការ និងមុខងារហេដ្ឋារចនាសម្ព័ន្ធផ្សេងទៀត។ FPGA នីមួយៗមាន FME មួយ ដែលតែងតែចូលប្រើតាមរយៈមុខងាររូបវិទ្យា (PF)។ កម្មវិធីលំហអ្នកប្រើប្រាស់អាចទទួលបានការចូលប្រើផ្តាច់មុខទៅកាន់ FME ដោយប្រើ open() ហើយបញ្ចេញវាដោយប្រើ close() ជាអ្នកប្រើប្រាស់ដែលមានសិទ្ធិ (root)។
ច្រក
ច្រកតំណាងឱ្យចំណុចប្រទាក់រវាងក្រណាត់ FPGA ឋិតិវន្ត ( "កម្មវិធីគ្រប់គ្រងចំណុចប្រទាក់ FPGA (FIM)") និងតំបន់ដែលអាចកំណត់រចនាសម្ព័ន្ធឡើងវិញបានដោយផ្នែកដែលមានមុខងារបង្កើនល្បឿន (AF) ។ ច្រកគ្រប់គ្រងទំនាក់ទំនងពីកម្មវិធីទៅឧបករណ៍បង្កើនល្បឿន និងបង្ហាញលក្ខណៈពិសេសដូចជាការកំណត់ឡើងវិញ និងបំបាត់កំហុស។ ឧបករណ៍ PCIe អាចមានច្រកជាច្រើន ហើយច្រកនីមួយៗអាចត្រូវបានលាតត្រដាងតាមរយៈ VF ដោយកំណត់វាដោយប្រើ FPGA_FME_PORT_ASSIGN ioctl នៅលើឧបករណ៍ FME ។
ឯកតាមុខងារបង្កើនល្បឿន (AF)
- ឯកតាមុខងារបង្កើនល្បឿន (AF) ត្រូវបានភ្ជាប់ទៅច្រកមួយ និងបង្ហាញតំបន់ 256K MMIO ដែលត្រូវប្រើសម្រាប់ការចុះឈ្មោះត្រួតពិនិត្យជាក់លាក់នៃឧបករណ៍បង្កើនល្បឿន។
- កម្មវិធីលំហអ្នកប្រើប្រាស់អាចទទួលបានសិទ្ធិចូលប្រើផ្តាច់មុខទៅកាន់ AFU ដែលភ្ជាប់ទៅនឹងច្រកមួយ ដោយប្រើ open() នៅលើឧបករណ៍ Port ហើយបញ្ចេញវាដោយប្រើ close()។
- កម្មវិធីលំហអ្នកប្រើប្រាស់ក៏អាច mmap() accelerator តំបន់ MMIO ផងដែរ។
ការកំណត់រចនាសម្ព័ន្ធឡើងវិញដោយផ្នែក
ដូចដែលបានរៀបរាប់ខាងលើ ឧបករណ៍បង្កើនល្បឿនអាចត្រូវបានកំណត់រចនាសម្ព័ន្ធឡើងវិញតាមរយៈការកំណត់រចនាសម្ព័ន្ធឡើងវិញដោយផ្នែកនៃមុខងារបង្កើនល្បឿន (AF) file. មុខងារបង្កើនល្បឿន (AF) ត្រូវតែត្រូវបានបង្កើតសម្រាប់ FIM ពិតប្រាកដ និងតំបន់ឋិតិវន្តគោលដៅ (ច្រក) នៃ FPGA ។ បើមិនដូច្នេះទេ ប្រតិបត្តិការកំណត់រចនាសម្ព័ន្ធឡើងវិញនឹងបរាជ័យ ហើយអាចបណ្តាលឱ្យមានអស្ថិរភាពប្រព័ន្ធ។ ភាពឆបគ្នានេះអាចត្រូវបានពិនិត្យដោយប្រៀបធៀបលេខសម្គាល់ចំណុចប្រទាក់ដែលបានកត់សម្គាល់នៅក្នុងបឋមកថា AF ធៀបនឹងលេខសម្គាល់ចំណុចប្រទាក់ដែលបង្ហាញដោយ FME តាមរយៈ sysfs ។ ការត្រួតពិនិត្យនេះជាធម្មតាត្រូវបានធ្វើឡើងដោយទំហំអ្នកប្រើប្រាស់ មុនពេលហៅការកំណត់រចនាសម្ព័ន្ធឡើងវិញ IOCTL ។
ចំណាំ៖
បច្ចុប្បន្ន កម្មវិធីសូហ្វវែរណាមួយដែលចូលប្រើ FPGA រួមទាំងកម្មវិធីដែលកំពុងដំណើរការក្នុងម៉ាស៊ីននិម្មិត ត្រូវតែបិទមុនពេលព្យាយាមកំណត់រចនាសម្ព័ន្ធឡើងវិញដោយផ្នែក។ ជំហាននឹងមានៈ
- ដកអ្នកបើកបរចេញពីភ្ញៀវ
- ដក VF ចេញពីភ្ញៀវ
- បិទ SR-IOV
- អនុវត្តការកំណត់រចនាសម្ព័ន្ធឡើងវិញដោយផ្នែក
- បើក SR-IOV
- ដោត VF ទៅភ្ញៀវ
- ផ្ទុកអ្នកបើកបរនៅក្នុងភ្ញៀវ
FPGA និម្មិត
ដើម្បីបើកការចូលប្រើឧបករណ៍បង្កើនល្បឿនពីកម្មវិធីដែលកំពុងដំណើរការក្នុង VM ច្រករបស់ AFU នីមួយៗចាំបាច់ត្រូវកំណត់ទៅ VF ដោយប្រើជំហានខាងក្រោម៖
- PF គ្រប់គ្រងច្រក AFU ទាំងអស់តាមលំនាំដើម។ ច្រកណាមួយដែលត្រូវកំណត់ឡើងវិញទៅ VF ដំបូងត្រូវតែបញ្ចេញចេញពី PF តាមរយៈ FPGA_FME_PORT_RELEASE ioctl នៅលើឧបករណ៍ FME ។
- នៅពេលដែលច្រក N ត្រូវបានបញ្ចេញចេញពី PF ពាក្យបញ្ជាខាងក្រោមអាចត្រូវបានប្រើដើម្បីបើក SRIOV និង VFs ។ VF នីមួយៗមានច្រកតែមួយជាមួយ AFU ។ បន្ទរ N > PCI_DEVICE_PATH/sriov_numvfs
- ឆ្លងកាត់ VFs ទៅ VMs ។
- AFU ក្រោម VF អាចចូលប្រើបានពីកម្មវិធីនៅក្នុង VM (ដោយប្រើកម្មវិធីបញ្ជាដូចគ្នានៅខាងក្នុង VF) ។
ចំណាំ៖
FME មិនអាចត្រូវបានកំណត់ទៅ VF ទេ ដូច្នេះ PR និងមុខងារគ្រប់គ្រងផ្សេងទៀតគឺមានតែតាមរយៈ PF ប៉ុណ្ណោះ។
អង្គការអ្នកបើកបរ
កម្មវិធីបញ្ជាឧបករណ៍ម៉ូឌុល PCIe
អង្គការអ្នកបើកបរ
ឧបករណ៍ FPGA លេចឡើងជាឧបករណ៍ PCIe ធម្មតា; ដូច្នេះ កម្មវិធីបញ្ជាឧបករណ៍ FPGA PCIe (intel-FPGA-PCI.ko) តែងតែត្រូវបានផ្ទុកជាមុន នៅពេលដែល FPGA PCIe PF ឬ VF ត្រូវបានរកឃើញ។ កម្មវិធីបញ្ជានេះដើរតួនាទីជារចនាសម្ព័ន្ធនៅក្នុងស្ថាបត្យកម្មអ្នកបើកបរ។ វា៖
- បង្កើតឧបករណ៍កុងតឺន័រ FPGA ជាមេនៃឧបករណ៍លក្ខណៈពិសេស។
- ដើរតាមបញ្ជីមុខងារឧបករណ៍ ដែលត្រូវបានអនុវត្តនៅក្នុងអង្គចងចាំ BAR ឧបករណ៍ PCIe ដើម្បីស្វែងរកឧបករណ៍មុខងារ និងមុខងាររងរបស់វា ហើយបង្កើតឧបករណ៍វេទិកាសម្រាប់ពួកវានៅក្រោមឧបករណ៍ផ្ទុក។
- គាំទ្រ SR-IOV ។
- ណែនាំហេដ្ឋារចនាសម្ព័ន្ធឧបករណ៍លក្ខណៈពិសេស ដែលប្រតិបត្តិការអរូបីសម្រាប់មុខងាររង និងបង្ហាញមុខងារទូទៅដើម្បីបំពាក់កម្មវិធីបញ្ជាឧបករណ៍។
មុខងារកម្មវិធីបញ្ជាឧបករណ៍ម៉ូឌុល PCIe
- មានការរកឃើញ PCIe ការរាប់បញ្ចូលឧបករណ៍ និងការរកឃើញលក្ខណៈពិសេស។
- បង្កើតថតឯកសារ sysfs សម្រាប់ឧបករណ៍មេ ម៉ាស៊ីនគ្រប់គ្រង FPGA (FME) និងច្រក។
- បង្កើតឧទាហរណ៍កម្មវិធីបញ្ជាវេទិកា ដែលបណ្តាលឱ្យខឺណែលលីនុចផ្ទុកកម្មវិធីបញ្ជាម៉ូឌុលវេទិការៀងៗខ្លួន។
កម្មវិធីបញ្ជាឧបករណ៍ម៉ូឌុលវេទិកា FME
- ការគ្រប់គ្រងថាមពល និងកម្ដៅ របាយការណ៍កំហុស របាយការណ៍ប្រតិបត្តិការ និងមុខងារហេដ្ឋារចនាសម្ព័ន្ធផ្សេងទៀត។ អ្នកអាចចូលប្រើមុខងារទាំងនេះតាមរយៈចំណុចប្រទាក់ sysfs ដែលលាតត្រដាងដោយកម្មវិធីបញ្ជា FME ។
- ការកំណត់រចនាសម្ព័ន្ធឡើងវិញដោយផ្នែក។ កម្មវិធីបញ្ជា FME ចុះឈ្មោះអ្នកគ្រប់គ្រង FPGA កំឡុងពេលចាប់ផ្តើមមុខងាររង PR ។ នៅពេលដែលវាទទួលបាន FPGA_FME_PORT_PR ioctl ពីអ្នក វាហៅមុខងារចំណុចប្រទាក់ទូទៅពី FPGA Manager ដើម្បីបញ្ចប់ការកំណត់រចនាសម្ព័ន្ធឡើងវិញដោយផ្នែកនៃ bitstream ទៅច្រកដែលបានផ្តល់ឱ្យ។
- ការគ្រប់គ្រងច្រកសម្រាប់និម្មិត។ កម្មវិធីបញ្ជា FME ណែនាំ ioctls ពីរ FPGA_FME_PORT_RELEASE ដែលបញ្ចេញច្រកដែលបានផ្តល់ឱ្យពី PF ។ និង FPGA_FME_PORT_ASSIGN ដែលកំណត់ច្រកត្រឡប់ទៅ PF វិញ។ នៅពេលដែលច្រកត្រូវបានបញ្ចេញចេញពី PF វាអាចត្រូវបានកំណត់ទៅ VF តាមរយៈចំណុចប្រទាក់ SR-IOV ដែលផ្តល់ដោយកម្មវិធីបញ្ជា PCIe ។ សម្រាប់ព័ត៌មានបន្ថែម សូមមើល "FPGA Virtualization"។
មុខងារកម្មវិធីបញ្ជាឧបករណ៍ម៉ូឌុលវេទិកា FME
- បង្កើតថ្នាំងឧបករណ៍តួអក្សរ FME ។
- បង្កើត FME sysfs files និងអនុវត្ត FME sysfs file ឧបករណ៍ប្រើប្រាស់។
- អនុវត្តកម្មវិធីបញ្ជារងមុខងារឯកជន FME ។
- កម្មវិធីបញ្ជារងមុខងារឯកជន FME៖
- បឋមកថា FME
- ការគ្រប់គ្រងកំដៅ
- ការគ្រប់គ្រងថាមពល
- កំហុសសកល
- ការកំណត់រចនាសម្ព័ន្ធឡើងវិញដោយផ្នែក
- ការអនុវត្តជាសកល
កម្មវិធីបញ្ជាឧបករណ៍ម៉ូឌុលច្រកវេទិកា
ស្រដៀងទៅនឹងកម្មវិធីបញ្ជា FME ដែរ FPGA Port (និង AFU) driver (intel-fpga-afu. ko) ត្រូវបានស៊ើបអង្កេតនៅពេលដែលឧបករណ៍ Port platform ត្រូវបានបង្កើត។ មុខងារចម្បងនៃម៉ូឌុលនេះគឺដើម្បីផ្តល់នូវចំណុចប្រទាក់សម្រាប់កម្មវិធីចន្លោះអ្នកប្រើប្រាស់ដើម្បីចូលប្រើឧបករណ៍បង្កើនល្បឿនបុគ្គល រួមទាំងការគ្រប់គ្រងការកំណត់ឡើងវិញជាមូលដ្ឋាននៅលើច្រក ការនាំចេញតំបន់ AFU MMIO សេវាគូសផែនទីសតិបណ្ដោះអាសន្ន DMA ការជូនដំណឹង UMsg(1) និងមុខងារបំបាត់កំហុសពីចម្ងាយ ( សូមមើលខាងលើ) ។
UMsg ត្រូវបានគាំទ្រតែតាមរយៈ Acceleration Stack សម្រាប់ Intel Xeon® Processor ជាមួយនឹង FPGA រួមបញ្ចូលគ្នា។
Port Platform Module មុខងារកម្មវិធីបញ្ជាឧបករណ៍
- បង្កើតថ្នាំងឧបករណ៍តួអក្សរច្រក។
- បង្កើត Port sysfs files និងអនុវត្ត Port sysfs file ឧបករណ៍ប្រើប្រាស់។
- អនុវត្តកម្មវិធីបញ្ជារងមុខងារឯកជនរបស់កំពង់ផែ។
- កម្មវិធីបញ្ជារងមុខងារឯកជនកំពង់ផែ៖
- ក្បាលច្រក
- AFU
- កំហុសច្រក
- 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 មួយ និងច្រកពីរ (AFUs) ជាឧបករណ៍កុមារ៖
/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/
ដោយខ្ញុំដាក់លេខរៀងជាប់ៗគ្នានូវឧបករណ៍កុងតឺន័រទាំងអស់ 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;
រចនាសម្ព័ន្ធ mutex ចាក់សោ;
struct list_head port_dev_list;
int release_port_num;
រចនាសម្ព័ន្ធ list_head តំបន់;
};
រចនាសម្ព័ន្ធ build_feature_devs_info {
រចនាសម្ព័ន្ធ pci_dev * pdev;
មោឃៈ __ioem * ioaddr;
មោឃៈ __ioem * ioend;
int current_bar;
មោឃៈ __ioem * pfme_hdr;
ឧបករណ៍រចនាសម្ព័ន្ធ * parent_dev;
រចនាសម្ព័ន្ធ platform_device *feature_dev;
};
លំហូរការរាប់លេខ
- ccidrv_init()
- ចាប់ផ្តើម fpga_ids ដោយប្រើ idr_init() ។
- ចាប់ផ្តើម fpga_chrdevs[i].devt ដោយប្រើ alloc_chrdev_region()។
- ចាប់ផ្តើម fpga_class ដោយប្រើ class_create() ។
- pci_register_driver(&cci_pci_driver);
- cci_pci_probe()
- បើកដំណើរការឧបករណ៍ PCI ស្នើសុំការចូលប្រើតំបន់របស់វា កំណត់របៀបមេ 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 ។
- បែងចែករចនាសម្ព័ន្ធ struct 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 ។
- បែងចែករចនាសម្ព័ន្ធ struct 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() * ចាប់ផ្តើម feature_dev.resource[id] ។ * feature_platform_data_add() ចាប់ផ្តើម 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, struct feature *feature);
int (*uinit)(struct platform_device *pdev, struct feature *feature);
long (*ioctl)(struct platform_device *pdev, struct feature *feature,
unsigned int cmd, unsigned long arg);
int (*test)(struct platform_device *pdev, struct feature *feature);
};
លក្ខណៈពិសេសរចនាសម្ព័ន្ធ {
const char * ឈ្មោះ;
int resource_index;
មោឃៈ __ioem * ioaddr;
struct feature_ops * ops;
};
struct feature_platform_data {
struct list_head node;
រចនាសម្ព័ន្ធ mutex ចាក់សោ;
ស្ថានភាព dev_ដែលមិនបានចុះហត្ថលេខា;
រចនាសម្ព័ន្ធ cdev cdev;
រចនាសម្ព័ន្ធ platform_device * dev;
unsigned int disable_count;
មោឃៈ * ឯកជន;
int លេខ;
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 *)); រចនាសម្ព័ន្ធ
លក្ខណៈពិសេស[0];
};
struct perf_object {
លេខសម្គាល់ int;
const struct attribute_group ** attr_groups;
ឧបករណ៍រចនាសម្ព័ន្ធ * fme_dev;
struct list_head node;
struct list_head កុមារ;
រចនាសម្ព័ន្ធ kobject kobj;
};
រចនាសម្ព័ន្ធ fpga_fme {
u8 port_id;
u64 pr_err;
ឧបករណ៍រចនាសម្ព័ន្ធ * dev_err;
រចនាសម្ព័ន្ធ 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()
- រក្សាទុក struct feature_ops ទៅក្នុង feature_platform_data.features សម្រាប់លក្ខណៈពិសេសនីមួយៗ។
- ហៅមុខងារសាកល្បង ប្រសិនបើមាន ពីរចនាសម្ព័ន្ធ។
- ហៅមុខងារ init ពី struct ។
- 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, struct feature *feature);
int (*uinit)(struct platform_device *pdev, struct feature *feature);
long (*ioctl)(struct platform_device *pdev, struct feature *feature,
unsigned int cmd, unsigned long arg);
int (*test)(struct platform_device *pdev, struct feature *feature);
};
លក្ខណៈពិសេសរចនាសម្ព័ន្ធ {
const char * ឈ្មោះ;
int resource_index;
មោឃៈ __ioem * ioaddr;
struct feature_ops * ops;
};
struct feature_platform_data {
struct list_head node;
រចនាសម្ព័ន្ធ mutex ចាក់សោ;
ស្ថានភាព dev_ដែលមិនបានចុះហត្ថលេខា;
រចនាសម្ព័ន្ធ cdev cdev;
រចនាសម្ព័ន្ធ platform_device * dev;
unsigned int disable_count;
មោឃៈ * ឯកជន;
int លេខ;
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 *));
លក្ខណៈពិសេសរចនាសម្ព័ន្ធ[0];
};
រចនាសម្ព័ន្ធ fpga_afu_region {
u32 សន្ទស្សន៍;
u32 ទង់;
ទំហំ u64;
u64 អុហ្វសិត;
u64 រូបវិទ្យា;
struct list_head node;
};
រចនាសម្ព័ន្ធ fpga_afu_dma_region {
u64 user_addr;
u64 ប្រវែង;
u64 iova;
ទំព័ររចនាសម្ព័ន្ធ ** ទំព័រ;
struct rb_node node;
bool in_use;
};
រចនាសម្ព័ន្ធ fpga_afu {
u64 តំបន់_cur_offset;
int num_regions;
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()
- រក្សាទុក struct feature_ops ទៅក្នុង feature_platform_data.features សម្រាប់លក្ខណៈពិសេសនីមួយៗ។
- ហៅមុខងារសាកល្បង ប្រសិនបើមាន ពីរចនាសម្ព័ន្ធ។
- ហៅមុខងារ init ពី struct ។
- afu_probe() fpga_register_dev_ops()
- បង្កើតថ្នាំងឧបករណ៍តួអក្សរច្រក ដោយចុះឈ្មោះរចនាសម្ព័ន្ធ file_ប្រតិបត្តិការ។
FME IOCTLs
IOCTLs ដែលត្រូវបានហៅឱ្យបើក file អ្នកពិពណ៌នាសម្រាប់ /dev/intel-fpga-fme.j FPGA_GET_API_VERSION—ត្រឡប់កំណែបច្ចុប្បន្នជាចំនួនគត់ ដោយចាប់ផ្តើមពី 0។
FPGA_CHECK_EXTENSION — បច្ចុប្បន្នមិនត្រូវបានគាំទ្រ។
FPGA_FME_PORT_RELEASE—arg ជាទ្រនិចទៅកាន់៖
រចនាសម្ព័ន្ធ fpga_fme_port_release {
__u32 argsz; // ក្នុង៖ sizeof(struct fpga_fme_port_release)
__u32 ទង់; // ក្នុង៖ ត្រូវតែជា 0
__u32 port_id; // នៅក្នុង: លេខសម្គាល់ច្រក (ពី 0) ដើម្បីចេញផ្សាយ។
};
FPGA_FME_PORT_ASSIGN—arg ជាទ្រនិចទៅកាន់៖
រចនាសម្ព័ន្ធ fpga_fme_port_assign {
__u32 argsz; // ក្នុង៖ sizeof(struct fpga_fme_port_assign)
__u32 ទង់; // ក្នុង៖ ត្រូវតែជា 0
__u32 port_id; // ក្នុង៖ លេខសម្គាល់ច្រក (ពី ០) ដើម្បីចាត់ចែង។ (ត្រូវតែជា
ចេញផ្សាយពីមុនដោយ 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; // ក្នុង៖ លេខសម្គាល់ច្រក (ពី ០)
__u32 ទំហំសតិបណ្ដោះអាសន្ន; // ក្នុង៖ ទំហំនៃបណ្តុំចរន្តប៊ីតគិតជាបៃ។ ត្រូវតែជា 4 បៃ
តម្រឹម។
__u64 buffer_address; // នៅក្នុង៖ អាសយដ្ឋានដំណើរការនៃសតិបណ្ដោះអាសន្ន bitstream
ស្ថានភាព __u64; // ចេញ៖ ស្ថានភាពកំហុស (ប៊ីតម៉ាស)
};
ច្រក IOCTLs
IOCTLs ដែលត្រូវបានហៅឱ្យបើក file descriptor សម្រាប់ /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 ទង់; // ចេញ៖ ត្រឡប់ ០
__u32 num_regions; // ចេញ៖ ចំនួននៃតំបន់ 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 ទង់; // ចេញ៖ (bitmask) { 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 ប្រវែង; // ក្នុង៖ ប្រវែងនៃផែនទីគិតជាបៃ។ ត្រូវតែជាពហុទំព័រ
ទំហំ។
__u64 អ៊ីវ៉ា; // ចេញ៖ IO អាសយដ្ឋាននិម្មិត };
FPGA_PORT_DMA_UNMAP—arg ជាទ្រនិចទៅកាន់៖
រចនាសម្ព័ន្ធ fpga_port_dma_unmap {
__u32 argsz; // ក្នុង៖ sizeof(struct fpga_port_dma_unmap)
__u32 ទង់; // ក្នុង៖ ត្រូវតែជា 0
__u64 អ៊ីវ៉ា; // នៅក្នុង៖ 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 ។ បញ្ជាក់ថា UMsg មួយណា
បានបើកដំណើរការ។
};
FPGA_PORT_UMSG_SET_BASE_ADDR—
- UMsg ត្រូវតែបិទមុនពេលចេញ ioctl នេះ។
- វាល iova ត្រូវតែសម្រាប់សតិបណ្ដោះអាសន្នធំល្មមសម្រាប់ UMsg ទាំងអស់ (num_umsgs * PAGE_SIZE) ។
- សតិបណ្ដោះអាសន្នត្រូវបានសម្គាល់ថា "កំពុងប្រើ" ដោយការគ្រប់គ្រងសតិបណ្ដោះអាសន្នរបស់អ្នកបើកបរ។
- ប្រសិនបើ iova ជា NULL តំបន់ពីមុនណាមួយមិនត្រូវបានសម្គាល់ថា "កំពុងប្រើ"។
- arg គឺជាទ្រនិចទៅកាន់៖
រចនាសម្ព័ន្ធ fpga_port_umsg_base_addr {- u32 argsz; // ក្នុង៖ sizeof(struct fpga_port_umsg_base_addr)
- u32 ទង់; // ក្នុង៖ ត្រូវតែជា 0
- u64 iova; // នៅក្នុង៖ IO អាសយដ្ឋាននិម្មិតពី FPGA_PORT_DMA_MAP ។ };
ចំណាំ៖
- ដើម្បីជម្រះកំហុសច្រក អ្នកត្រូវតែសរសេរ bitmask ពិតប្រាកដនៃកំហុសបច្ចុប្បន្ន ឧ។ample, cat errors > clear
- UMsg ត្រូវបានគាំទ្រតែតាមរយៈ Acceleration Stack សម្រាប់ Intel Xeon Processor ជាមួយនឹង FPGA រួមបញ្ចូលគ្នា។
sysfs Files
FME បឋមកថា sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/
sysfs file | វាល mmio | ប្រភេទ | ការចូលប្រើ |
ports_num | fme_header.capability.num_ports | ទសភាគ int | បានតែអាន |
ទំហំឃ្លាំងសម្ងាត់ | fme_header.capability.cache_size | ទសភាគ int | បានតែអាន |
កំណែ | fme_header.capability.fabric_verid | ទសភាគ int | បានតែអាន |
socket_id | fme_header.capability.socket_id | ទសភាគ int | បានតែអាន |
bitstream_id | fme_header.bitstream_id | hex uint64_t | បានតែអាន |
bitstream_metadata | fme_header.bitstream_md | hex uint64_t | បានតែអាន |
FME Thermal Management sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/
sysfs file | វាល mmio | ប្រភេទ | ការចូលប្រើ |
កម្រិត 1 | thermal.threshold.tmp_thshold1 | ទសភាគ int | អ្នកប្រើប្រាស់៖ អានបានតែឫស៖ អាន-សរសេរ |
កម្រិត 2 | thermal.threshold.tmp_thshold2 | ទសភាគ int | អ្នកប្រើប្រាស់៖ អានបានតែឫស៖ អាន-សរសេរ |
threshold_trip | thermal.threshold.therm_trip_thshold | ទសភាគ int | បានតែអាន |
threshold1_ឈានដល់ | thermal.threshold.thshold1_ស្ថានភាព | ទសភាគ int | បានតែអាន |
threshold2_ឈានដល់ | thermal.threshold.thshold2_ស្ថានភាព | ទសភាគ int | បានតែអាន |
threshold1_policy | កម្ដៅ។ threshold.thshold_policy | ទសភាគ int | អ្នកប្រើប្រាស់៖ អានបានតែឫស៖ អាន-សរសេរ |
សីតុណ្ហភាព | thermal.rdsensor_fm1.fpga_temp | ទសភាគ int | បានតែអាន |
ការគ្រប់គ្រងថាមពល FME sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/power_mgmt/
sysfs file | វាល mmio | ប្រភេទ | ការចូលប្រើ |
ប្រើប្រាស់ | power.status.pwr_consumed | hex uint64_t | បានតែអាន |
កម្រិត 1 | power.threshold.threshold1 | hex uint64_t | អ្នកប្រើប្រាស់៖ អានបានតែឫស៖ អាន-សរសេរ |
កម្រិត 2 | power.threshold.threshold2 | hex uint64_t | អ្នកប្រើប្រាស់៖ អានបានតែឫស៖ អាន-សរសេរ |
threshold1_status | power.threshold.threshold1_ស្ថានភាព | ទសភាគដែលមិនបានចុះហត្ថលេខា | បានតែអាន |
threshold2_status | power.threshold.threshold2_ស្ថានភាព | ទសភាគដែលមិនបានចុះហត្ថលេខា | បានតែអាន |
rtl | power.status.fpga_latency_report | ទសភាគដែលមិនបានចុះហត្ថលេខា | បានតែអាន |
FME Global Error sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/errors/
sysfs file | វាល mmio | ប្រភេទ | ការចូលប្រើ |
pcie0_កំហុស | gerror.pcie0_err | hex uint64_t | អានសរសេរ |
pcie1_កំហុស | 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 | វាល mmio | ប្រភេទ | ការចូលប្រើ |
កំហុស | gerror.fme_err | hex uint64_t | បានតែអាន |
first_error | gerror.fme_first_err.err_reg_status | hex uint64_t | បានតែអាន |
Next_error | gerror.fme_next_err.err_reg_status | hex uint64_t | បានតែអាន |
ច្បាស់ | ជម្រះកំហុស, first_error, next_error | ផ្សេងៗ uint64_t | សរសេរតែប៉ុណ្ណោះ |
ចំណាំ៖
ដើម្បីជម្រះកំហុស FME អ្នកត្រូវតែសរសេរ bitmask ពិតប្រាកដនៃកំហុសបច្ចុប្បន្ន ឧ។ampកំហុសឆ្មា > ច្បាស់។
FME ការកំណត់រចនាសម្ព័ន្ធឡើងវិញដោយផ្នែក sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/pr/
sysfs file | វាល mmio | ប្រភេទ | ការចូលប្រើ |
លេខសម្គាល់ចំណុចប្រទាក់ | pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l | hex 16-byte | បានតែអាន |
FME Global Performance sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/dperf/clock
sysfs file | វាល mmio | ប្រភេទ | ការចូលប្រើ |
នាឡិកា | gperf.clk.afu_interf_clock | hex uint64_t | បានតែអាន |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (មិនត្រឹមត្រូវសម្រាប់ Acceleration Stack សម្រាប់ Intel Xeon CPU ជាមួយ FPGAs)
sysfs file | វាល mmio | ប្រភេទ | ការចូលប្រើ |
បង្កក | gperf.ch_ctl.បង្កក | ទសភាគ int | អានសរសេរ |
read_hit | gperf.CACHE_RD_HIT | hex uint64_t | បានតែអាន |
read_នឹក | gperf.CACHE_RD_MISS | hex uint64_t | បានតែអាន |
write_hit | gperf.CACHE_WR_HIT | hex uint64_t | បានតែអាន |
សរសេរ_នឹក | gperf.CACHE_WR_MISS | hex uint64_t | បានតែអាន |
hold_request | gperf.CACHE_HOLD_REQ | hex uint64_t | បានតែអាន |
tx_req_stall | gperf.CACHE_TX_REQ_STALL | hex uint64_t | បានតែអាន |
sysfs file | វាល mmio | ប្រភេទ | ការចូលប្រើ |
rx_req_stall | gperf.CACHE_RX_REQ_STALL | hex uint64_t | បានតែអាន |
data_write_port_ការឈ្លោះប្រកែកគ្នា។ | gperf.CACHE_DATA_WR_PORT_CONTEN | hex uint64_t | បានតែអាន |
tag_write_port_ការឈ្លោះប្រកែកគ្នា។ | gperf.CACHE_TAG_WR_PORT_CONTEN | hex uint64_t | បានតែអាន |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (មិនត្រឹមត្រូវសម្រាប់ Acceleration Stack សម្រាប់ CPU Intel Xeon ជាមួយ FPGAs)
sysfs file | វាល mmio | ប្រភេទ | ការចូលប្រើ |
បង្កក | gperf.vtd_ctl.បង្កក | ទសភាគ int | អ្នកប្រើប្រាស់៖ អានបានតែឫស៖ អាន-សរសេរ |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (មិនត្រឹមត្រូវសម្រាប់ Acceleration Stack សម្រាប់ Intel Xeon CPU ជាមួយ FPGAs)
sysfs file | វាល mmio | ប្រភេទ | ការចូលប្រើ |
read_transaction | gperf.VTD_AFU0_MEM_RD_TRANS | hex uint64_t | បានតែអាន |
write_transaction | 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 | វាល mmio | ប្រភេទ | ការចូលប្រើ |
បើក | gperf.fab_ctl.(បានបើក) | ទសភាគ int | អ្នកប្រើប្រាស់៖ អានបានតែឫស៖ អាន-សរសេរ |
បង្កក | gperf.fab_ctl.freeze | ទសភាគ int | អ្នកប្រើប្រាស់៖ អានបានតែឫស៖ អាន-សរសេរ |
pcie0_អាន | gperf.FAB_PCIE0_RD | hex uint64_t | បានតែអាន |
pcie0_write | gperf.FAB_PCIE0_WR | hex uint64_t | បានតែអាន |
pcie1_អាន | 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 | វាល mmio | ប្រភេទ | ការចូលប្រើ |
pcie0_អាន | gperf.FAB_PCIE0_RD | hex uint64_t | បានតែអាន |
pcie0_write | gperf.FAB_PCIE0_WR | hex uint64_t | បានតែអាន |
pcie1_អាន | 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 | វាល mmio | ប្រភេទ | ការចូលប្រើ |
id | port_header.capability.port_number | ទសភាគ int | បានតែអាន |
លីត្រ | port_header.control.latency_tolerance | ទសភាគ int | បានតែអាន |
ច្រក AFU បឋមកថា sysfs files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | វាល mmio | ប្រភេទ | ការចូលប្រើ |
afu_id | afu_header.guid | hex 16-byte | បានតែអាន |
កំហុសច្រក sysfs files
intel-fpga-dev.i/intel-fpga-port.k/errors/
sysfs file | វាល mmio | ប្រភេទ | ការចូលប្រើ |
កំហុស | perror.port_error | hex uint64_t | បានតែអាន |
first_error | perror.port_first_error | hex uint64_t | បានតែអាន |
first_malformed_req | perror.malreq | hex 16-byte | បានតែអាន |
ច្បាស់ | កំហុស។ (កំហុសទាំងអស់) | ផ្សេងៗ uint64_t | សរសេរតែប៉ុណ្ណោះ |
ចំណាំ៖
ដើម្បីជម្រះកំហុសច្រក អ្នកត្រូវតែសរសេរ bitmask ពិតប្រាកដនៃកំហុសបច្ចុប្បន្ន ឧទាហរណ៍ampកំហុសឆ្មា > ច្បាស់។
ប្រវត្តិកែប្រែ
កំណែឯកសារ | ការផ្លាស់ប្តូរ |
2017.10.02 | ការចេញផ្សាយដំបូង។ |
ការណែនាំអំពីស្ថាបត្យកម្មកម្មវិធីបញ្ជាឧបករណ៍លីនុច OPAE Intel FPGA
ឯកសារ/ធនធាន
![]() |
intel OPAE FPGA ស្ថាបត្យកម្មកម្មវិធីបញ្ជាឧបករណ៍លីនុច [pdf] ការណែនាំអ្នកប្រើប្រាស់ OPAE FPGA ស្ថាបត្យកម្មកម្មវិធីបញ្ជាឧបករណ៍លីនុច, OPAE FPGA, ស្ថាបត្យកម្មកម្មវិធីបញ្ជាឧបករណ៍លីនុច, ស្ថាបត្យកម្មកម្មវិធីបញ្ជា, ស្ថាបត្យកម្ម |