इंटेल-लोगो

इंटेल OPAE FPGA Linux डिवाइस ड्राइवर आर्किटेक्चर

इंटेल-OPAE-FPGA-लिनक्स-डिवाइस-चालक-आर्किटेक्चर-उत्पाद

OPAE Intel FPGA Linux डिवाइस ड्राइवर आर्किटेक्चर

OPAE Intel FPGA ड्राइवर, Intel FPGA समाधानों से लैस प्लेटफॉर्म पर FPGA त्वरक को कॉन्फ़िगर करने, गणना करने, खोलने और एक्सेस करने के लिए यूजर-स्पेस एप्लिकेशन के लिए इंटरफेस प्रदान करता है और सिस्टम-स्तरीय प्रबंधन कार्यों जैसे FPGA पुनर्संरचना, पावर प्रबंधन और वर्चुअलाइजेशन को सक्षम करता है।

हार्डवेयर आर्किटेक्चर

ओएस के बिंदु से view, FPGA हार्डवेयर एक नियमित PCIe डिवाइस के रूप में दिखाई देता है। एफपीजीए डिवाइस मेमोरी को पूर्वनिर्धारित डेटा संरचना (डिवाइस फीचर लिस्ट) का उपयोग करके व्यवस्थित किया जाता है। एफपीजीए डिवाइस द्वारा समर्थित विशेषताएं इन डेटा संरचनाओं के माध्यम से सामने आती हैं, जैसा कि नीचे दिए गए चित्र में दिखाया गया है:

एफपीजीए पीसीआईई डिवाइस

इंटेल-OPAE-FPGA-लिनक्स-उपकरण-चालक-आर्किटेक्चर-अंजीर- (1)

वर्चुअल फ़ंक्शंस (VFs) बनाने के लिए ड्राइवर PCIe SR-IOV का समर्थन करता है जिसका उपयोग वर्चुअल मशीनों के लिए अलग-अलग त्वरक असाइन करने के लिए किया जा सकता है।

इंटेल कॉर्पोरेशन। सर्वाधिकार सुरक्षित। Intel, Intel लोगो और अन्य Intel चिह्न Intel Corporation या इसकी सहायक कंपनियों के ट्रेडमार्क हैं। Intel अपने FPGA और सेमीकंडक्टर उत्पादों के प्रदर्शन को Intel की मानक वारंटी के अनुसार वर्तमान विनिर्देशों के अनुसार वारंट करता है लेकिन किसी भी समय बिना सूचना के किसी भी उत्पाद और सेवाओं में परिवर्तन करने का अधिकार सुरक्षित रखता है। इंटेल द्वारा लिखित रूप में स्पष्ट रूप से सहमति के अलावा, यहां वर्णित किसी भी जानकारी, उत्पाद या सेवा के आवेदन या उपयोग से उत्पन्न होने वाली कोई जिम्मेदारी या उत्तरदायित्व नहीं लेता है। इंटेल ग्राहकों को सलाह दी जाती है कि वे किसी भी प्रकाशित जानकारी पर भरोसा करने से पहले और उत्पादों या सेवाओं के लिए ऑर्डर देने से पहले डिवाइस विनिर्देशों का नवीनतम संस्करण प्राप्त करें।

अन्य नामों और ब्रांडों पर दूसरों की संपत्ति होने का दावा किया जा सकता है।

वर्चुअलाइज्ड FPGA PCIe डिवाइस

इंटेल-OPAE-FPGA-लिनक्स-उपकरण-चालक-आर्किटेक्चर-अंजीर- (2)

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 तक पहुँचने वाले किसी भी सॉफ़्टवेयर प्रोग्राम को आंशिक पुनर्संरचना का प्रयास करने से पहले बंद कर देना चाहिए। कदम होंगे:

  1. ड्राइवर को अतिथि से उतारें
  2. अतिथि से VF को अनप्लग करें
  3. SR-IOV अक्षम करें
  4. आंशिक पुन: कॉन्फ़िगरेशन करें
  5. एसआर-आईओवी सक्षम करें
  6. अतिथि को VF प्लग करें
  7. ड्राइवर को अतिथि में लोड करें

एफपीजीए वर्चुअलाइजेशन
एक वीएम में चल रहे अनुप्रयोगों से एक त्वरक तक पहुंच को सक्षम करने के लिए, संबंधित एएफयू के बंदरगाह को निम्नलिखित चरणों का उपयोग करके वीएफ को सौंपा जाना चाहिए:

  1. पीएफ डिफ़ॉल्ट रूप से सभी एएफयू बंदरगाहों का मालिक है। कोई भी पोर्ट जिसे VF को फिर से असाइन करने की आवश्यकता है, उसे पहले FME डिवाइस पर FPGA_FME_PORT_RELEASE ioctl के माध्यम से PF से रिलीज़ किया जाना चाहिए।
  2. एक बार पीएफ से एन पोर्ट जारी होने के बाद, नीचे दिए गए कमांड का उपयोग SRIOV और VFs को सक्षम करने के लिए किया जा सकता है। प्रत्येक VF AFU के साथ केवल एक पोर्ट का मालिक है। इको एन > PCI_DEVICE_PATH/sriov_numvfs
  3. वीएफ के माध्यम से वीएम को पास करें।
  4. VF के तहत AFU VM में अनुप्रयोगों से सुलभ है (VF के अंदर समान ड्राइवर का उपयोग करके)।

टिप्पणी:
एक FME को VF को नहीं सौंपा जा सकता है, इस प्रकार PR और अन्य प्रबंधन कार्य केवल PF के माध्यम से उपलब्ध हैं।

चालक संगठन

PCIe मॉड्यूल डिवाइस ड्राइवर

चालक संगठन

इंटेल-OPAE-FPGA-लिनक्स-उपकरण-चालक-आर्किटेक्चर-अंजीर- (3)

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 प्लेटफ़ॉर्म डिवाइस इनिशियलाइज़ेशन फ़्लो

एफएमई प्रारंभिक प्रवाहइंटेल-OPAE-FPGA-लिनक्स-उपकरण-चालक-आर्किटेक्चर-अंजीर- (4)

  • 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;
संरचना सुविधा_प्लेटफ़ॉर्म_डेटा * पीडेटा;
};

पोर्ट प्लेटफ़ॉर्म डिवाइस इनिशियलाइज़ेशन फ़्लो

पोर्ट इनिशियलाइज़ेशन फ्लोइंटेल-OPAE-FPGA-लिनक्स-उपकरण-चालक-आर्किटेक्चर-अंजीर- (5)

  • 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 डिवाइस ड्राइवर आर्किटेक्चर, ड्राइवर आर्किटेक्चर, आर्किटेक्चर

संदर्भ

एक टिप्पणी छोड़ें

आपकी ईमेल आईडी प्रकाशित नहीं की जाएगी। आवश्यक फ़ील्ड चिह्नित हैं *