इंटेल OPAE FPGA Linux डिवाइस ड्राइवर आर्किटेक्चर
OPAE Intel FPGA Linux डिवाइस ड्राइवर आर्किटेक्चर
OPAE Intel FPGA ड्राइवर, Intel FPGA समाधानों से लैस प्लेटफॉर्म पर FPGA त्वरक को कॉन्फ़िगर करने, गणना करने, खोलने और एक्सेस करने के लिए यूजर-स्पेस एप्लिकेशन के लिए इंटरफेस प्रदान करता है और सिस्टम-स्तरीय प्रबंधन कार्यों जैसे FPGA पुनर्संरचना, पावर प्रबंधन और वर्चुअलाइजेशन को सक्षम करता है।
हार्डवेयर आर्किटेक्चर
ओएस के बिंदु से view, FPGA हार्डवेयर एक नियमित PCIe डिवाइस के रूप में दिखाई देता है। एफपीजीए डिवाइस मेमोरी को पूर्वनिर्धारित डेटा संरचना (डिवाइस फीचर लिस्ट) का उपयोग करके व्यवस्थित किया जाता है। एफपीजीए डिवाइस द्वारा समर्थित विशेषताएं इन डेटा संरचनाओं के माध्यम से सामने आती हैं, जैसा कि नीचे दिए गए चित्र में दिखाया गया है:
एफपीजीए पीसीआईई डिवाइस
वर्चुअल फ़ंक्शंस (VFs) बनाने के लिए ड्राइवर PCIe SR-IOV का समर्थन करता है जिसका उपयोग वर्चुअल मशीनों के लिए अलग-अलग त्वरक असाइन करने के लिए किया जा सकता है।
इंटेल कॉर्पोरेशन। सर्वाधिकार सुरक्षित। Intel, Intel लोगो और अन्य Intel चिह्न Intel Corporation या इसकी सहायक कंपनियों के ट्रेडमार्क हैं। Intel अपने FPGA और सेमीकंडक्टर उत्पादों के प्रदर्शन को Intel की मानक वारंटी के अनुसार वर्तमान विनिर्देशों के अनुसार वारंट करता है लेकिन किसी भी समय बिना सूचना के किसी भी उत्पाद और सेवाओं में परिवर्तन करने का अधिकार सुरक्षित रखता है। इंटेल द्वारा लिखित रूप में स्पष्ट रूप से सहमति के अलावा, यहां वर्णित किसी भी जानकारी, उत्पाद या सेवा के आवेदन या उपयोग से उत्पन्न होने वाली कोई जिम्मेदारी या उत्तरदायित्व नहीं लेता है। इंटेल ग्राहकों को सलाह दी जाती है कि वे किसी भी प्रकाशित जानकारी पर भरोसा करने से पहले और उत्पादों या सेवाओं के लिए ऑर्डर देने से पहले डिवाइस विनिर्देशों का नवीनतम संस्करण प्राप्त करें।
अन्य नामों और ब्रांडों पर दूसरों की संपत्ति होने का दावा किया जा सकता है।
वर्चुअलाइज्ड FPGA PCIe डिवाइस
FPGA प्रबंधन इंजन (FME)
एफपीजीए प्रबंधन इंजन बिजली और थर्मल प्रबंधन, त्रुटि रिपोर्टिंग, पुनर्संरचना, प्रदर्शन रिपोर्टिंग और अन्य बुनियादी ढांचे के कार्यों को करता है। प्रत्येक FPGA में एक FME होता है, जिसे हमेशा फिजिकल फंक्शन (PF) के माध्यम से एक्सेस किया जाता है। उपयोगकर्ता-स्थान अनुप्रयोग खुले () का उपयोग करके एफएमई तक विशेष पहुंच प्राप्त कर सकते हैं, और विशेषाधिकार प्राप्त उपयोगकर्ता (रूट) के रूप में बंद () का उपयोग करके इसे जारी कर सकते हैं।
पत्तन
एक पोर्ट स्थिर FPGA फैब्रिक ("FPGA इंटरफ़ेस मैनेजर (FIM)") और आंशिक रूप से पुन: कॉन्फ़िगर करने योग्य क्षेत्र के बीच एक त्वरक फ़ंक्शन (AF) के बीच इंटरफ़ेस का प्रतिनिधित्व करता है। पोर्ट सॉफ्टवेयर से त्वरक तक संचार को नियंत्रित करता है और रीसेट और डिबग जैसी सुविधाओं को उजागर करता है। एक PCIe डिवाइस में कई पोर्ट हो सकते हैं, और FME डिवाइस पर FPGA_FME_PORT_ASSIGN ioctl का उपयोग करके इसे निर्दिष्ट करके प्रत्येक पोर्ट को VF के माध्यम से प्रदर्शित किया जा सकता है।
त्वरक समारोह (एएफ) इकाई
- एक एक्सेलरेटर फंक्शन (AF) यूनिट एक पोर्ट से जुड़ी होती है और एक्सीलरेटर-विशिष्ट नियंत्रण रजिस्टरों के लिए उपयोग किए जाने वाले 256K MMIO क्षेत्र को उजागर करती है।
- उपयोगकर्ता-स्थान अनुप्रयोग पोर्ट डिवाइस पर खुले () का उपयोग करके पोर्ट से जुड़े AFU तक विशेष पहुंच प्राप्त कर सकते हैं, और इसे बंद () का उपयोग करके जारी कर सकते हैं।
- उपयोगकर्ता-स्थान अनुप्रयोग mmap () त्वरक MMIO क्षेत्र भी कर सकते हैं।
आंशिक पुन: विन्यास
जैसा कि ऊपर उल्लेख किया गया है, त्वरक फ़ंक्शन (AF) के आंशिक पुनर्संरचना के माध्यम से त्वरक को पुन: कॉन्फ़िगर किया जा सकता है। file. एक्सीलरेटर फंक्शन (एएफ) एफपीजीए के सटीक एफआईएम और लक्षित स्थिर क्षेत्र (पोर्ट) के लिए उत्पन्न होना चाहिए; अन्यथा, पुनर्संरचना कार्रवाई विफल हो जाएगी और संभवतः सिस्टम अस्थिरता का कारण बनेगी। एफ़एमई द्वारा sysfs के माध्यम से उजागर की गई इंटरफ़ेस आईडी के विरुद्ध AF हेडर में नोट की गई इंटरफ़ेस आईडी की तुलना करके इस संगतता की जाँच की जा सकती है। यह जांच आम तौर पर पुन: कॉन्फ़िगरेशन IOCTL को कॉल करने से पहले उपयोगकर्ता स्थान द्वारा की जाती है।
टिप्पणी:
वर्तमान में, वर्चुअलाइज्ड होस्ट में चलने वाले सहित FPGA तक पहुँचने वाले किसी भी सॉफ़्टवेयर प्रोग्राम को आंशिक पुनर्संरचना का प्रयास करने से पहले बंद कर देना चाहिए। कदम होंगे:
- ड्राइवर को अतिथि से उतारें
- अतिथि से VF को अनप्लग करें
- SR-IOV अक्षम करें
- आंशिक पुन: कॉन्फ़िगरेशन करें
- एसआर-आईओवी सक्षम करें
- अतिथि को VF प्लग करें
- ड्राइवर को अतिथि में लोड करें
एफपीजीए वर्चुअलाइजेशन
एक वीएम में चल रहे अनुप्रयोगों से एक त्वरक तक पहुंच को सक्षम करने के लिए, संबंधित एएफयू के बंदरगाह को निम्नलिखित चरणों का उपयोग करके वीएफ को सौंपा जाना चाहिए:
- पीएफ डिफ़ॉल्ट रूप से सभी एएफयू बंदरगाहों का मालिक है। कोई भी पोर्ट जिसे VF को फिर से असाइन करने की आवश्यकता है, उसे पहले FME डिवाइस पर FPGA_FME_PORT_RELEASE ioctl के माध्यम से PF से रिलीज़ किया जाना चाहिए।
- एक बार पीएफ से एन पोर्ट जारी होने के बाद, नीचे दिए गए कमांड का उपयोग SRIOV और VFs को सक्षम करने के लिए किया जा सकता है। प्रत्येक VF AFU के साथ केवल एक पोर्ट का मालिक है। इको एन > PCI_DEVICE_PATH/sriov_numvfs
- वीएफ के माध्यम से वीएम को पास करें।
- VF के तहत AFU VM में अनुप्रयोगों से सुलभ है (VF के अंदर समान ड्राइवर का उपयोग करके)।
टिप्पणी:
एक FME को VF को नहीं सौंपा जा सकता है, इस प्रकार PR और अन्य प्रबंधन कार्य केवल PF के माध्यम से उपलब्ध हैं।
चालक संगठन
PCIe मॉड्यूल डिवाइस ड्राइवर
चालक संगठन
FPGA डिवाइस नियमित PCIe डिवाइस के रूप में दिखाई देते हैं; इस प्रकार, FPGA PCIe PF या VF का पता लगने के बाद FPGA PCIe डिवाइस ड्राइवर (Intel-FPGA-PCI.ko) को हमेशा पहले लोड किया जाता है। यह ड्राइवर ड्राइवर आर्किटेक्चर में एक इंफ्रास्ट्रक्चरल भूमिका निभाता है। यह:
- फ़ीचर डिवाइस के पैरेंट के रूप में एक FPGA कंटेनर डिवाइस बनाता है।
- डिवाइस फ़ीचर सूची के माध्यम से चलता है, जो PCIe डिवाइस BAR मेमोरी में लागू किया गया है, फ़ीचर डिवाइस और उनकी उप-सुविधाओं की खोज करने और कंटेनर डिवाइस के तहत उनके लिए प्लेटफ़ॉर्म डिवाइस बनाने के लिए।
- एसआर-आईओवी का समर्थन करता है।
- फीचर डिवाइस इन्फ्रास्ट्रक्चर का परिचय देता है, जो उप-फीचर्स के लिए संचालन को सार करता है और डिवाइस ड्राइवरों को फीचर करने के लिए सामान्य कार्यों को उजागर करता है।
PCIe मॉड्यूल डिवाइस ड्राइवर कार्य करता है
- PCIe डिस्कवरी, डिवाइस एन्यूमरेशन और फीचर डिस्कवरी शामिल हैं।
- मूल उपकरण, FPGA प्रबंधन इंजन (FME) और पोर्ट के लिए sysfs निर्देशिका बनाता है।
- प्लेटफ़ॉर्म ड्राइवर इंस्टेंस बनाता है, जिससे लिनक्स कर्नेल अपने संबंधित प्लेटफ़ॉर्म मॉड्यूल ड्राइवरों को लोड करता है।
FME प्लेटफ़ॉर्म मॉड्यूल डिवाइस ड्राइवर
- पावर और थर्मल प्रबंधन, त्रुटि रिपोर्टिंग, प्रदर्शन रिपोर्टिंग, और अन्य आधारभूत संरचना कार्य। आप FME ड्राइवर द्वारा उजागर किए गए sysfs इंटरफेस के माध्यम से इन कार्यों तक पहुँच सकते हैं।
- आंशिक पुन: विन्यास। FME ड्राइवर PR सब-फीचर इनिशियलाइज़ेशन के दौरान एक FPGA मैनेजर को रजिस्टर करता है; एक बार जब इसे आपसे FPGA_FME_PORT_PR ioctl प्राप्त हो जाता है, तो यह दिए गए पोर्ट पर बिटस्ट्रीम के आंशिक पुनर्संरचना को पूरा करने के लिए FPGA प्रबंधक से सामान्य इंटरफ़ेस फ़ंक्शन को आमंत्रित करता है।
- वर्चुअलाइजेशन के लिए पोर्ट प्रबंधन। FME ड्राइवर दो ioctls, FPGA_FME_PORT_RELEASE पेश करता है, जो दिए गए पोर्ट को PF से रिलीज़ करता है; और FPGA_FME_PORT_ASSIGN, जो पीएफ को वापस पोर्ट असाइन करता है। एक बार पोर्ट पीएफ से मुक्त हो जाने के बाद, इसे PCIe ड्राइवर द्वारा प्रदान किए गए SR-IOV इंटरफेस के माध्यम से VF को सौंपा जा सकता है। अधिक जानकारी के लिए, "एफपीजीए वर्चुअलाइजेशन" देखें।
FME प्लेटफ़ॉर्म मॉड्यूल डिवाइस ड्राइवर फ़ंक्शंस
- FME कैरेक्टर डिवाइस नोड बनाता है।
- FME sysfs बनाता है files और FME sysfs को लागू करता है file एक्सेसर्स
- FME निजी सुविधा उप-ड्राइवरों को लागू करता है।
- FME निजी सुविधा उप-चालक:
- एफएमई हैडर
- थर्मल प्रबंधन
- पावर प्रबंधन
- वैश्विक त्रुटि
- आंशिक पुन: विन्यास
- वैश्विक प्रदर्शन
पोर्ट प्लेटफ़ॉर्म मॉड्यूल डिवाइस ड्राइवर
FME ड्राइवर के समान, FPGA पोर्ट (और AFU) ड्राइवर (Intel-fpga-afu. ko) की जांच एक बार पोर्ट प्लेटफॉर्म डिवाइस बनने के बाद की जाती है। इस मॉड्यूल का मुख्य कार्य पोर्ट, एएफयू एमएमआईओ क्षेत्र निर्यात, डीएमए बफर मैपिंग सेवा, यूएमएसजी (1) अधिसूचना, और रिमोट डिबग कार्यों पर बुनियादी रीसेट नियंत्रण सहित व्यक्तिगत त्वरक तक पहुंचने के लिए यूजर-स्पेस अनुप्रयोगों के लिए एक इंटरफ़ेस प्रदान करना है। ऊपर देखें)।
UMsg केवल इंटीग्रेटेड FPGA के साथ Intel Xeon® प्रोसेसर के लिए एक्सेलेरेशन स्टैक द्वारा समर्थित है।
पोर्ट प्लेटफ़ॉर्म मॉड्यूल डिवाइस ड्राइवर फ़ंक्शंस
- पोर्ट कैरेक्टर डिवाइस नोड बनाता है।
- पोर्ट sysfs बनाता है files और पोर्ट sysfs को लागू करता है file एक्सेसर्स
- पोर्ट प्राइवेट फीचर सब-ड्राइवर्स को लागू करता है।
- पोर्ट निजी सुविधा उप-चालक:
- पोर्ट हैडर
- एएफयू
- पोर्ट त्रुटि
- यूएमएसजी(2)
- सिग्नल टैप
आवेदन एफपीजीए डिवाइस गणना
यह खंड बताता है कि कैसे अनुप्रयोग sysfs पदानुक्रम से /sys/class/fpga के अंतर्गत FPGA युक्ति की गणना करते हैं। पूर्व मेंampनीचे, होस्ट में दो Intel FPGA डिवाइस इंस्टॉल किए गए हैं। प्रत्येक FPGA डिवाइस में एक FME और दो पोर्ट (AFU) होते हैं। प्रत्येक 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/पोर्ट 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 () के लिए उपयोग किए जाने वाले डिवाइस नोड्स को इसके माध्यम से संदर्भित किया जा सकता है:
/देव/इंटेल-fpga-fme.j
/देव/इंटेल-fpga-port.k
PCIe चालक गणन
यह खंड एक ओवर देता हैview Intel-fpga-pci.ko द्वारा निष्पादित डिवाइस गणना के लिए कोड प्रवाह का। मुख्य डेटा संरचनाओं और कार्यों पर प्रकाश डाला गया है। इस खंड का सबसे अच्छा पालन किया जाता है viewसाथ में स्रोत कोड (pcie.c) शामिल है।
गणना डेटा संरचनाएं
एनम fpga_id_type {
माता पिता की पहचान,
एफएमई_आईडी,
पोर्ट_आईडी,
एफपीजीए_आईडी_मैक्स
};
स्थिर संरचना आईडीआर fpga_ids [FPGA_ID_MAX];
संरचना fpga_chardev_info {
स्थिरांक चार *नाम;
देव_त देवता;
};
संरचना fpga_chardev_info fpga_chrdevs[] = {
{ नाम = 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 = {
.नाम = DRV_NAME,
.id_table = cci_pcie_id_tbl,
.जांच = सीसीआई_पीसीआई_जांच,
.निकालें = cci_pci_remove,
.sriov_configure = cci_pci_sriov_configure
};
संरचना cci_drvdata {
इंट डिवाइस_आईडी;
स्ट्रक्चर डिवाइस * fme_dev;
स्ट्रक्चर म्यूटेक्स लॉक;
संरचना सूची_हेड पोर्ट_देव_सूची;
int जारी_पोर्ट_नम;
संरचना सूची_हेड क्षेत्र;
};
स्ट्रक्चर बिल्ड_फीचर_देव्स_इन्फो {
संरचना pci_dev * pdev;
शून्य __iomem *ioaddr;
शून्य __iomem *ioend;
इंट करंट_बार;
शून्य __iomem *pfme_hdr;
संरचना उपकरण *parent_dev;
स्ट्रक्चर प्लेटफॉर्म_डिवाइस *फीचर_देव;
};
गणना प्रवाह
- ccidrv_init ()
- idr_init () का उपयोग करके fpga_ids को प्रारंभ करें।
- alloc_chrdev_region() का उपयोग करके fpga_chrdevs[i].devt प्रारंभ करें।
- class_create() का उपयोग करके fpga_class प्रारंभ करें।
- pci_register_driver (&cci_pci_driver);
- सीसीआई_पीसीआई_प्रोब ()
- पीसीआई डिवाइस को सक्षम करें, इसके क्षेत्रों तक पहुंच का अनुरोध करें, पीसीआई मास्टर मोड सेट करें और डीएमए को कॉन्फ़िगर करें।
- cci_pci_create_feature_devs () build_info_alloc_and_init ()
- एक स्ट्रक्चर बिल्ड_फीचर_देव्स_इन्फो आवंटित करें, इसे इनिशियलाइज़ करें।
.parent_dev एक मूल sysfs निर्देशिका (Intel-fpga-dev.id) पर सेट है जिसमें FME और पोर्ट sysfs निर्देशिकाएँ हैं।
- एक स्ट्रक्चर बिल्ड_फीचर_देव्स_इन्फो आवंटित करें, इसे इनिशियलाइज़ करें।
- पार्स_फीचर_लिस्ट ()
- FME, पोर्ट और उनकी निजी विशेषताओं को खोजने के लिए BAR0 डिवाइस फीचर सूची पर जाएं।
- 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 में संरचना संसाधनों की एक सरणी आवंटित करें।
- एक स्ट्रक्चर फीचर_प्लेटफ़ॉर्म_डेटा आवंटित करें, इसे इनिशियलाइज़ करें और फ़ीचर_देव.देव.प्लेटफ़ॉर्म_डेटा में एक पॉइंटर स्टोर करें
- 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 में स्ट्रक्चर रिसोर्स की एक सरणी आवंटित करें।
- एक स्ट्रक्चर फीचर_प्लेटफ़ॉर्म_डेटा आवंटित करें, इसे इनिशियलाइज़ करें और फ़ीचर_देव.देव.प्लेटफ़ॉर्म_डेटा में एक पॉइंटर स्टोर करें
- build_info_commit_dev ()
- संरचना 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 [आईडी] प्रारंभ करें।
- 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) पर लोड है, तो:
- FME हेडर में वर्णित प्रत्येक पोर्ट पर parse_feature_list () प्रवाह चलाएँ।
- शीर्षलेख में प्रत्येक पोर्ट प्रविष्टि में उल्लिखित बार का प्रयोग करें।
FME प्लेटफ़ॉर्म डिवाइस इनिशियलाइज़ेशन
यह खंड एक ओवर देता हैview Intel-fpga-fme.ko द्वारा निष्पादित FME डिवाइस आरंभीकरण के लिए कोड प्रवाह का। मुख्य डेटा संरचनाओं और कार्यों पर प्रकाश डाला गया है। इस खंड का सबसे अच्छा पालन किया जाता है viewसंलग्न स्रोत कोड (fme-main.c) शामिल करें।
FME प्लेटफ़ॉर्म डिवाइस डेटा संरचनाएँ
संरचना सुविधा_ऑप्स {
int (*init)(स्ट्रक्चर प्लेटफॉर्म_डिवाइस *pdev, स्ट्रक्चर फीचर *फीचर);
int (*uinit)(स्ट्रक्चर प्लेटफॉर्म_डिवाइस *pdev, स्ट्रक्चर फीचर *फीचर);
लंबा (*ioctl)(स्ट्रक्चर प्लेटफॉर्म_डिवाइस *pdev, स्ट्रक्चर फीचर *फीचर,
अहस्ताक्षरित int cmd, अहस्ताक्षरित लंबा आर्ग);
int (* टेस्ट) (स्ट्रक्चर प्लेटफॉर्म_डिवाइस * pdev, स्ट्रक्चर फीचर * फीचर);
};
संरचना सुविधा {
स्थिरांक चार *नाम;
इंट रिसोर्स_इंडेक्स;
शून्य __iomem *ioaddr;
स्ट्रक्चर फीचर_ऑप्स * ऑप्स;
};
संरचना सुविधा_प्लेटफ़ॉर्म_डेटा {
संरचना सूची_हेड नोड;
स्ट्रक्चर म्यूटेक्स लॉक;
अहस्ताक्षरित लंबा dev_status;
संरचना सीडीईवी सीडीईवी;
स्ट्रक्चर प्लेटफॉर्म_डिवाइस * देव;
अहस्ताक्षरित int अक्षम_काउंट;
शून्य * निजी;
int संख्या;
int (*config_port)(स्ट्रक्चर प्लेटफॉर्म_डिवाइस *, u32, बूल);
स्ट्रक्चर प्लेटफॉर्म_डिवाइस *(*fpga_for_each_port)(स्ट्रक्चर प्लेटफॉर्म_डिवाइस *,
शून्य *, इंट (* मैच) (स्ट्रक्चर प्लेटफॉर्म_डिवाइस *, शून्य *)); struct
फ़ीचर सुविधाएँ [0];
};
संरचना perf_object {
पूर्णांक आईडी;
कास्ट स्ट्रक्चर एट्रीब्यूट_ग्रुप ** attr_groups;
स्ट्रक्चर डिवाइस * fme_dev;
संरचना सूची_हेड नोड;
संरचना सूची_हेड बच्चे;
संरचना कोबजेक्ट कोब्ज;
};
संरचना fpga_fme {
यू8 पोर्ट_आईडी;
u64 pr_err;
संरचना डिवाइस * dev_err;
संरचना perf_object *perf_dev;
संरचना सुविधा_प्लेटफ़ॉर्म_डेटा * पीडेटा;
};
FME प्लेटफ़ॉर्म डिवाइस इनिशियलाइज़ेशन फ़्लो
एफएमई प्रारंभिक प्रवाह
- fme_probe () fme_dev_init ()
- एक संरचना fpga_fme प्रारंभ करें और इसे feature_platform_data.private फ़ील्ड में संग्रहीत करें।
- fme_probe() fpga_dev_feature_init() फीचर_इंस्टेंस_इनिट()
- प्रत्येक आबादी वाले फीचर के लिए feature_platform_data.features में एक स्ट्रक्चर फीचर_ऑप्स सेव करें।
- संरचना से परीक्षण फ़ंक्शन, यदि कोई हो, को कॉल करें।
- संरचना से init फ़ंक्शन को कॉल करें।
- fme_probe () fpga_register_dev_ops ()
- FME कैरेक्टर डिवाइस नोड बनाएं, एक संरचना दर्ज करें file_ऑपरेशन।
पोर्ट प्लेटफ़ॉर्म डिवाइस आरंभीकरण
यह खंड एक ओवर देता हैview Intel-fpga-afu.ko द्वारा निष्पादित पोर्ट डिवाइस आरंभीकरण के लिए कोड प्रवाह। मुख्य डेटा संरचनाओं और कार्यों पर प्रकाश डाला गया है। इस खंड का सबसे अच्छा पालन किया जाता है viewसंलग्न स्रोत कोड (afu.c) के साथ।
पोर्ट प्लेटफ़ॉर्म डिवाइस डेटा स्ट्रक्चर्स
संरचना सुविधा_ऑप्स {
int (*init)(स्ट्रक्चर प्लेटफॉर्म_डिवाइस *pdev, स्ट्रक्चर फीचर *फीचर);
int (*uinit)(स्ट्रक्चर प्लेटफॉर्म_डिवाइस *pdev, स्ट्रक्चर फीचर *फीचर);
लंबा (*ioctl)(स्ट्रक्चर प्लेटफॉर्म_डिवाइस *pdev, स्ट्रक्चर फीचर *फीचर,
अहस्ताक्षरित int cmd, अहस्ताक्षरित लंबा आर्ग);
int (* टेस्ट) (स्ट्रक्चर प्लेटफॉर्म_डिवाइस * pdev, स्ट्रक्चर फीचर * फीचर);
};
संरचना सुविधा {
स्थिरांक चार *नाम;
इंट रिसोर्स_इंडेक्स;
शून्य __iomem *ioaddr;
स्ट्रक्चर फीचर_ऑप्स * ऑप्स;
};
संरचना सुविधा_प्लेटफ़ॉर्म_डेटा {
संरचना सूची_हेड नोड;
स्ट्रक्चर म्यूटेक्स लॉक;
अहस्ताक्षरित लंबा dev_status;
संरचना सीडीईवी सीडीईवी;
स्ट्रक्चर प्लेटफॉर्म_डिवाइस * देव;
अहस्ताक्षरित int अक्षम_काउंट;
शून्य * निजी;
int संख्या;
int (*config_port)(स्ट्रक्चर प्लेटफॉर्म_डिवाइस *, u32, बूल);
स्ट्रक्चर प्लेटफॉर्म_डिवाइस *(*fpga_for_each_port)(स्ट्रक्चर प्लेटफॉर्म_डिवाइस *,
शून्य *, इंट (* मैच) (स्ट्रक्चर प्लेटफॉर्म_डिवाइस *, शून्य *));
संरचना सुविधा सुविधाएँ [0];
};
संरचना fpga_afu_region {
यू32 सूचकांक;
यू32 झंडे;
यू64 आकार;
u64 ऑफ़सेट;
u64 भौतिक;
संरचना सूची_हेड नोड;
};
संरचना fpga_afu_dma_region {
u64 user_addr;
यू64 लंबाई;
u64 आयोवा;
संरचना पृष्ठ ** पृष्ठ;
संरचना आरबी_नोड नोड;
बूल in_use;
};
संरचना fpga_afu {
u64 क्षेत्र_कर_ऑफ़सेट;
int num_regions;
u8 अंक_umsgs;
संरचना सूची_हेड क्षेत्र;
संरचना rb_root dma_regions;
संरचना सुविधा_प्लेटफ़ॉर्म_डेटा * पीडेटा;
};
पोर्ट प्लेटफ़ॉर्म डिवाइस इनिशियलाइज़ेशन फ़्लो
पोर्ट इनिशियलाइज़ेशन फ्लो
- afu_probe () afu_dev_init ()
- एक संरचना fpga_afu प्रारंभ करें और इसे feature_platform_data.private फ़ील्ड में संग्रहीत करें।
- afu_probe() fpga_dev_feature_init() फीचर_instance_init()
- प्रत्येक आबादी वाले फीचर के लिए feature_platform_data.features में एक स्ट्रक्चर फीचर_ऑप्स सेव करें।
- संरचना से परीक्षण फ़ंक्शन, यदि कोई हो, को कॉल करें।
- संरचना से init फ़ंक्शन को कॉल करें।
- afu_probe () fpga_register_dev_ops ()
- पोर्ट कैरेक्टर डिवाइस नोड बनाएं, एक संरचना पंजीकृत करें file_ऑपरेशन।
एफएमई आईओसीटीएल
IOCTL जिन्हें खुले में बुलाया जाता है file /dev/intel-fpga-fme.j FPGA_GET_API_VERSION के लिए डिस्क्रिप्टर—वर्तमान संस्करण को पूर्णांक के रूप में लौटाता है, जो 0 से शुरू होता है।
FPGA_CHECK_EXTENSION—वर्तमान में समर्थित नहीं है।
FPGA_FME_PORT_RELEASE—arg एक संकेतक है:
संरचना fpga_fme_port_release {
__u32 आर्गज़; // में: आकार (संरचना fpga_fme_port_release)
__u32 झंडे; // में: 0 होना चाहिए
__u32 पोर्ट_आईडी; // इन: पोर्ट आईडी (0 से) जारी करने के लिए।
};
FPGA_FME_PORT_ASSIGN—आर्ग एक संकेतक है:
संरचना fpga_fme_port_assign {
__u32 आर्गज़; // में: आकार (संरचना fpga_fme_port_assign)
__u32 झंडे; // में: 0 होना चाहिए
__u32 पोर्ट_आईडी; // इन: पोर्ट आईडी (0 से) असाइन करने के लिए। (रहा होगा
पहले FPGA_FME_PORT_RELEASE द्वारा जारी किया गया था)
};
FPGA_FME_PORT_PR—arg एक संकेतक है:
संरचना fpga_fme_port_pr {
__u32 आर्गज़; // में: आकार (संरचना fpga_fme_port_pr)
__u32 झंडे; // में: 0 होना चाहिए
__u32 पोर्ट_आईडी; // इन: पोर्ट आईडी (0 से)
__u32 बफ़र_साइज़; // इन: बाइट्स में बिटस्ट्रीम बफर का आकार। 4-बाइट होना चाहिए
संरेखित.
__u64 बफ़र_पता; // इन: बिटस्ट्रीम बफर का प्रोसेस एड्रेस
__u64 स्थिति; // बाहर: त्रुटि स्थिति (बिटमास्क)
};
पोर्ट आईओसीटीएल
IOCTL जिन्हें खुले में बुलाया जाता है file /dev/intel-fpga-port.k FPGA_GET_API_VERSION के लिए डिस्क्रिप्टर—वर्तमान संस्करण को पूर्णांक के रूप में लौटाता है, 0 से शुरू होता है। FPGA_CHECK_EXTENSION—वर्तमान में समर्थित नहीं है।
FPGA_PORT_GET_INFO—arg एक संकेतक है:
संरचना fpga_port_info {
__u32 आर्गज़; // में: आकार (संरचना fpga_port_info)
__u32 झंडे; // बाहर: रिटर्न 0
__u32 अंक_क्षेत्र; // आउट: MMIO क्षेत्रों की संख्या, 2 (AFU के लिए 1 और
एसटीपी)
__u32 अंक_umsgs; // आउट: हार्डवेयर द्वारा समर्थित UMsg की संख्या
};
FPGA_PORT_GET_REGION_INFO—arg एक संकेतक है:
संरचना fpga_port_region_info {
__u32 आर्गज़; // में: आकार (संरचना 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 ऑफ़सेट; // बाहर: डिवाइस एफडी की शुरुआत से एमएमआईओ क्षेत्र की ऑफसेट
};
FPGA_PORT_DMA_MAP—arg एक संकेतक है:
संरचना fpga_port_dma_map {
__u32 आर्गज़; // में: आकार (संरचना fpga_port_dma_map)
__u32 झंडे; // इन: 0 होना चाहिए __u64 user_addr; // इन: वर्चुअल प्रोसेस करें
पता। पृष्ठ संरेखित होना चाहिए।
__u64 लंबाई; // इन: बाइट्स में मैपिंग की लंबाई। पृष्ठ का गुणज होना चाहिए
आकार।
__u64 आईओवा; // आउट: आईओ वर्चुअल एड्रेस};
FPGA_PORT_DMA_UNMAP—arg एक संकेतक है:
संरचना fpga_port_dma_unmap {
__u32 आर्गज़; // में: आकार (संरचना fpga_port_dma_unmap)
__u32 झंडे; // में: 0 होना चाहिए
__u64 आईओवा; // इन: IO वर्चुअल एड्रेस पिछले द्वारा लौटाया गया
एफपीजीए_पोर्ट_डीएमए_एमएपी};
- FPGA_PORT_RESET—आर्ग NULL होना चाहिए।
- FPGA_PORT_UMSG_ENABLE—आर्ग NULL होना चाहिए।
- FPGA_PORT_UMSG_DISABLE—तर्क NULL होना चाहिए।
FPGA_PORT_UMSG_SET_MODE—arg एक संकेतक है:
संरचना fpga_port_umsg_cfg {
__u32 आर्गज़; // में: आकार (संरचना fpga_port_umsg_cfg)
__u32 झंडे; // में: 0 होना चाहिए
__u32 संकेत_बिटमैप; // इन: यूएमएसजी हिंट मोड बिटमैप। दर्शाता है कि कौन से UMsg हैं
सक्षम.
};
FPGA_PORT_UMSG_SET_BASE_ADDR—
- इस ioctl को जारी करने से पहले UMsg को निष्क्रिय कर देना चाहिए।
- iova फ़ील्ड सभी UMsg (num_umsgs * PAGE_SIZE) के लिए काफ़ी बड़े बफ़र के लिए होना चाहिए।
- बफ़र को ड्राइवर के बफ़र प्रबंधन द्वारा "उपयोग में" के रूप में चिह्नित किया गया है।
- यदि iova NULL है, तो कोई पिछला क्षेत्र "उपयोग में" के रूप में अचिह्नित है।
- आर्ग एक सूचक है:
संरचना fpga_port_umsg_base_addr {- यू32 आर्गज़्ज़; // में: आकार (संरचना fpga_port_umsg_base_addr)
- यू32 झंडे; // में: 0 होना चाहिए
- u64 आयोवा; // इन: FPGA_PORT_DMA_MAP से IO वर्चुअल एड्रेस। };
टिप्पणी:
- पोर्ट त्रुटियों को दूर करने के लिए, आपको वर्तमान त्रुटियों का सटीक बिटमास्क लिखना होगा, उदाहरण के लिएampले, बिल्ली त्रुटियाँ> स्पष्ट
- UMsg केवल इंटीग्रेटेड FPGA के साथ Intel Xeon प्रोसेसर के लिए एक्सेलेरेशन स्टैक द्वारा समर्थित है।
सिस्टमफ़्स Files
FME हैडर sysfs files
इंटेल-fpga-dev.i/intel-fpga-fme.j/
सिस्टमफ़्स file | एमएमआईओ क्षेत्र | प्रकार | पहुँच |
port_num | fme_header.capability.num_ports | दशमलव पूर्णांक | केवल पढ़ने के लिए |
कैचे आकार | fme_header.capability.cache_size | दशमलव पूर्णांक | केवल पढ़ने के लिए |
संस्करण | fme_header.capability.fabric_verid | दशमलव पूर्णांक | केवल पढ़ने के लिए |
सॉकेट_आईडी | fme_header.capability.socket_id | दशमलव पूर्णांक | केवल पढ़ने के लिए |
बिटस्ट्रीम_आईडी | fme_header.bitstream_id | हेक्स uint64_t | केवल पढ़ने के लिए |
बिटस्ट्रीम_मेटाडेटा | fme_header.bitstream_md | हेक्स uint64_t | केवल पढ़ने के लिए |
FME थर्मल प्रबंधन sysfs files
इंटेल-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/
सिस्टमफ़्स file | एमएमआईओ क्षेत्र | प्रकार | पहुँच |
सीमा1 | थर्मल.दहलीज.tmp_thshold1 | दशमलव पूर्णांक | उपयोगकर्ता: रीड-ओनली रूट: रीड-राइट |
सीमा2 | थर्मल.दहलीज.tmp_thshold2 | दशमलव पूर्णांक | उपयोगकर्ता: रीड-ओनली रूट: रीड-राइट |
दहलीज_ट्रिप | थर्मल.दहलीज.थर्म_ट्रिप_थशोल्ड | दशमलव पूर्णांक | केवल पढ़ने के लिए |
दहलीज1_पहुंच गया | थर्मल.दहलीज.thshold1_status | दशमलव पूर्णांक | केवल पढ़ने के लिए |
दहलीज2_पहुंच गया | थर्मल.दहलीज.thshold2_status | दशमलव पूर्णांक | केवल पढ़ने के लिए |
दहलीज1_नीति | थर्मल। दहलीज.thshold_policy | दशमलव पूर्णांक | उपयोगकर्ता: रीड-ओनली रूट: रीड-राइट |
तापमान | थर्मल.आरडीसेंसर_एफएम1.एफपीजीए_टेम्प | दशमलव पूर्णांक | केवल पढ़ने के लिए |
FME पावर प्रबंधन sysfs files
इंटेल-fpga-dev.i/intel-fpga-fme.j/power_mgmt/
सिस्टमफ़्स file | एमएमआईओ क्षेत्र | प्रकार | पहुँच |
ग्रहण किया हुआ | शक्ति.स्थिति.pwr_उपभोग | हेक्स uint64_t | केवल पढ़ने के लिए |
सीमा1 | पावर.थ्रेसहोल्ड.थ्रेसहोल्ड1 | हेक्स uint64_t | उपयोगकर्ता: रीड-ओनली रूट: रीड-राइट |
सीमा2 | पावर.थ्रेसहोल्ड.थ्रेसहोल्ड2 | हेक्स uint64_t | उपयोगकर्ता: रीड-ओनली रूट: रीड-राइट |
दहलीज1_status | पॉवर.थ्रेसहोल्ड.थ्रेसहोल्ड1_स्टेटस | दशमलव अहस्ताक्षरित | केवल पढ़ने के लिए |
दहलीज2_status | पॉवर.थ्रेसहोल्ड.थ्रेसहोल्ड2_स्टेटस | दशमलव अहस्ताक्षरित | केवल पढ़ने के लिए |
आरटीएल | पॉवर.स्टेटस.एफपीजीए_लेटेंसी_रिपोर्ट | दशमलव अहस्ताक्षरित | केवल पढ़ने के लिए |
FME वैश्विक त्रुटि sysfs files
इंटेल-fpga-dev.i/intel-fpga-fme.j/errors/
सिस्टमफ़्स file | एमएमआईओ क्षेत्र | प्रकार | पहुँच |
pcie0_errors | gerror.pcie0_err | हेक्स uint64_t | पढ़ना लिखना |
pcie1_errors | gerror.pcie1_err | हेक्स uint64_t | पढ़ना लिखना |
injection_error | gerror.ras_error_inj | हेक्स uint64_t | पढ़ना लिखना |
इंटेल-fpga-dev.i/intel-fpga-fme.j/errors/fme-errors/
सिस्टमफ़्स file | एमएमआईओ क्षेत्र | प्रकार | पहुँच |
त्रुटियाँ | gerror.fme_err | हेक्स uint64_t | केवल पढ़ने के लिए |
प्रथम_त्रुटि | gerror.fme_first_err.err_reg_status | हेक्स uint64_t | केवल पढ़ने के लिए |
अगला_त्रुटि | gerror.fme_next_err.err_reg_status | हेक्स uint64_t | केवल पढ़ने के लिए |
स्पष्ट | त्रुटियों को साफ़ करता है, first_error, next_error | विभिन्न uint64_t | राइट-केवल |
टिप्पणी:
FME त्रुटियों को दूर करने के लिए, आपको वर्तमान त्रुटियों का सटीक बिटमास्क लिखना होगा, उदाहरण के लिएampले बिल्ली त्रुटियाँ> स्पष्ट।
FME आंशिक पुनर्विन्यास sysfs files
इंटेल-fpga-dev.i/intel-fpga-fme.j/pr/
सिस्टमफ़्स file | एमएमआईओ क्षेत्र | प्रकार | पहुँच |
इंटरफ़ेस_आईडी | pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l | हेक्स 16-बाइट | केवल पढ़ने के लिए |
FME वैश्विक प्रदर्शन sysfs files
इंटेल-fpga-dev.i/intel-fpga-fme.j/dperf/घड़ी
सिस्टमफ़्स file | एमएमआईओ क्षेत्र | प्रकार | पहुँच |
घड़ी | gperf.clk.afu_interf_घड़ी | हेक्स uint64_t | केवल पढ़ने के लिए |
Intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (FPGAs के साथ Intel Xeon CPU के लिए त्वरण स्टैक के लिए मान्य नहीं है)
सिस्टमफ़्स file | एमएमआईओ क्षेत्र | प्रकार | पहुँच |
जमाना | gperf.ch_ctl.फ़्रीज़ | दशमलव पूर्णांक | पढ़ना लिखना |
read_hit | gperf.CACHE_RD_HIT | हेक्स uint64_t | केवल पढ़ने के लिए |
read_miss | gperf.CACHE_RD_MISS | हेक्स uint64_t | केवल पढ़ने के लिए |
लिखें_हिट | gperf.CACHE_WR_HIT | हेक्स uint64_t | केवल पढ़ने के लिए |
लिखना_छोड़ना | gperf.CACHE_WR_MISS | हेक्स uint64_t | केवल पढ़ने के लिए |
Hold_request | gperf.CACHE_HOLD_REQ | हेक्स uint64_t | केवल पढ़ने के लिए |
tx_req_stall | gperf.CACHE_TX_REQ_STALL | हेक्स uint64_t | केवल पढ़ने के लिए |
सिस्टमफ़्स file | एमएमआईओ क्षेत्र | प्रकार | पहुँच |
rx_req_stall | gperf.CACHE_RX_REQ_STALL | हेक्स uint64_t | केवल पढ़ने के लिए |
data_write_port_contention | gperf.CACHE_DATA_WR_PORT_CONTEN | हेक्स uint64_t | केवल पढ़ने के लिए |
tag_लेखन_पोर्ट_विवाद | gperf.CACHE_TAG_WR_PORT_CONTEN | हेक्स uint64_t | केवल पढ़ने के लिए |
Intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (FPGAs के साथ Intel Xeon CPU के लिए त्वरण स्टैक के लिए मान्य नहीं है)
सिस्टमफ़्स file | एमएमआईओ क्षेत्र | प्रकार | पहुँच |
जमाना | gperf.vtd_ctl.freeze | दशमलव पूर्णांक | उपयोगकर्ता: रीड-ओनली रूट: रीड-राइट |
Intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (FPGAs के साथ Intel Xeon CPU के लिए त्वरण स्टैक के लिए मान्य नहीं है)
सिस्टमफ़्स file | एमएमआईओ क्षेत्र | प्रकार | पहुँच |
read_transaction | gperf.VTD_AFU0_MEM_RD_TRANS | हेक्स uint64_t | केवल पढ़ने के लिए |
लिखें_लेनदेन | gperf.VTD_AFU0_MEM_WR_TRANS | हेक्स uint64_t | केवल पढ़ने के लिए |
tlb_read_hit | gperf.VTD_AFU0_TLB_RD_HIT | हेक्स uint64_t | केवल पढ़ने के लिए |
tlb_write_hit | gperf.VTD_AFU0_TLB_WR_HIT | हेक्स uint64_t | केवल पढ़ने के लिए |
इंटेल-fpga-dev.i/intel-fpga-fme.j/dperf/fabric/
सिस्टमफ़्स file | एमएमआईओ क्षेत्र | प्रकार | पहुँच |
सक्षम | gperf.fab_ctl.(सक्षम) | दशमलव पूर्णांक | उपयोगकर्ता: रीड-ओनली रूट: रीड-राइट |
जमाना | gperf.fab_ctl.freeze | दशमलव पूर्णांक | उपयोगकर्ता: रीड-ओनली रूट: रीड-राइट |
pcie0_read | gperf.FAB_PCIE0_RD | हेक्स uint64_t | केवल पढ़ने के लिए |
pcie0_write | gperf.FAB_PCIE0_WR | हेक्स uint64_t | केवल पढ़ने के लिए |
pcie1_read | gperf.FAB_PCIE1_RD | हेक्स uint64_t | केवल पढ़ने के लिए |
pcie1_write | gperf.FAB_PCIE1_WR | हेक्स uint64_t | केवल पढ़ने के लिए |
upi_read | gperf.FAB_UPI_RD | हेक्स uint64_t | केवल पढ़ने के लिए |
upi_write | gperf.FAB_UPI_WR | हेक्स uint64_t | केवल पढ़ने के लिए |
इंटेल-fpga-ev.i/intel-fpga/fme.j/dperf/fabric/portk/
सिस्टमफ़्स file | एमएमआईओ क्षेत्र | प्रकार | पहुँच |
pcie0_read | gperf.FAB_PCIE0_RD | हेक्स uint64_t | केवल पढ़ने के लिए |
pcie0_write | gperf.FAB_PCIE0_WR | हेक्स uint64_t | केवल पढ़ने के लिए |
pcie1_read | gperf.FAB_PCIE1_RD | हेक्स uint64_t | केवल पढ़ने के लिए |
pcie1_write | gperf.FAB_PCIE1_WR | हेक्स uint64_t | केवल पढ़ने के लिए |
upi_read | gperf.FAB_UPI_RD | हेक्स uint64_t | केवल पढ़ने के लिए |
upi_write | gperf.FAB_UPI_WR | हेक्स uint64_t | केवल पढ़ने के लिए |
पोर्ट हैडर sysfs files
इंटेल-fpga-dev.i/intel-fpga-port.k/
सिस्टमफ़्स file | एमएमआईओ क्षेत्र | प्रकार | पहुँच |
id | port_header.capability.port_number | दशमलव पूर्णांक | केवल पढ़ने के लिए |
लीटर | port_header.control.latency_tolerance | दशमलव पूर्णांक | केवल पढ़ने के लिए |
पोर्ट एएफयू हैडर sysfs files
इंटेल-fpga-dev.i/intel-fpga-port.k/
सिस्टमफ़्स file | एमएमआईओ क्षेत्र | प्रकार | पहुँच |
afu_id | afu_header.guid | हेक्स 16-बाइट | केवल पढ़ने के लिए |
पोर्ट त्रुटि sysfs files
इंटेल-fpga-dev.i/intel-fpga-port.k/errors/
सिस्टमफ़्स file | एमएमआईओ क्षेत्र | प्रकार | पहुँच |
त्रुटियाँ | perror.port_error | हेक्स uint64_t | केवल पढ़ने के लिए |
प्रथम_त्रुटि | पेरर.पोर्ट_फर्स्ट_एरर | हेक्स uint64_t | केवल पढ़ने के लिए |
प्रथम_विकृत_अनुरोध | pererror.malreq | हेक्स 16-बाइट | केवल पढ़ने के लिए |
स्पष्ट | पेरर। (सभी त्रुटियां) | विभिन्न uint64_t | राइट-केवल |
टिप्पणी:
पोर्ट त्रुटियों को दूर करने के लिए, आपको वर्तमान त्रुटियों का सटीक बिटमास्क लिखना होगा, उदाहरण के लिएampले बिल्ली त्रुटियाँ> स्पष्ट।
संशोधन इतिहास
दस्तावेज़ संस्करण | परिवर्तन |
2017.10.02 | प्रारंभिक रिहाई। |
OPAE Intel FPGA Linux डिवाइस ड्राइवर आर्किटेक्चर गाइड
दस्तावेज़ / संसाधन
![]() |
इंटेल OPAE FPGA Linux डिवाइस ड्राइवर आर्किटेक्चर [पीडीएफ] उपयोगकर्ता गाइड OPAE FPGA Linux डिवाइस ड्राइवर आर्किटेक्चर, OPAE FPGA, Linux डिवाइस ड्राइवर आर्किटेक्चर, ड्राइवर आर्किटेक्चर, आर्किटेक्चर |