इंटेल ओपीएई एफपीजीए लिनक्स डिव्हाइस ड्रायव्हर आर्किटेक्चर
ओपीएई इंटेल एफपीजीए लिनक्स डिव्हाइस ड्रायव्हर आर्किटेक्चर
OPAE Intel FPGA ड्रायव्हर वापरकर्ता-स्पेस ऍप्लिकेशन्सना इंटेल FPGA सोल्यूशन्ससह सुसज्ज असलेल्या प्लॅटफॉर्मवर FPGA एक्सीलरेटर कॉन्फिगर करण्यासाठी, गणना करण्यासाठी, उघडण्यासाठी आणि ऍक्सेस करण्यासाठी इंटरफेस प्रदान करतो आणि FPGA रीकॉन्फिगरेशन, पॉवर मॅनेजमेंट आणि व्हर्च्युअलायझेशन सारखी सिस्टम-स्तरीय व्यवस्थापन कार्ये सक्षम करतो.
हार्डवेअर आर्किटेक्चर
च्या OS च्या बिंदू पासून view, FPGA हार्डवेअर नियमित PCIe उपकरण म्हणून दिसते. FPGA डिव्हाइस मेमरी पूर्वनिर्धारित डेटा संरचना (डिव्हाइस वैशिष्ट्य सूची) वापरून आयोजित केली जाते. FPGA डिव्हाइसद्वारे समर्थित वैशिष्ट्ये या डेटा स्ट्रक्चर्सद्वारे उघड केली जातात, जसे की खालील चित्रात स्पष्ट केले आहे:
FPGA PCIe डिव्हाइस
व्हर्च्युअल फंक्शन्स (VFs) तयार करण्यासाठी ड्रायव्हर PCIe SR-IOV ला समर्थन देतो ज्याचा वापर आभासी मशीनला वैयक्तिक प्रवेगक नियुक्त करण्यासाठी केला जाऊ शकतो.
इंटेल कॉर्पोरेशन. सर्व हक्क राखीव. इंटेल, इंटेल लोगो आणि इतर इंटेल चिन्ह हे इंटेल कॉर्पोरेशन किंवा त्याच्या उपकंपन्यांचे ट्रेडमार्क आहेत. इंटेल त्याच्या FPGA आणि सेमीकंडक्टर उत्पादनांच्या कार्यप्रदर्शनास इंटेलच्या मानक वॉरंटीनुसार वर्तमान वैशिष्ट्यांनुसार हमी देते परंतु कोणत्याही उत्पादनांमध्ये आणि सेवांमध्ये कोणत्याही वेळी सूचना न देता बदल करण्याचा अधिकार राखून ठेवते. इंटेलने लिखित स्वरूपात स्पष्टपणे मान्य केल्याशिवाय येथे वर्णन केलेल्या कोणत्याही माहिती, उत्पादन किंवा सेवेच्या अर्जामुळे किंवा वापरामुळे उद्भवणारी कोणतीही जबाबदारी किंवा दायित्व स्वीकारत नाही. इंटेल ग्राहकांना कोणत्याही प्रकाशित माहितीवर विसंबून राहण्यापूर्वी आणि उत्पादने किंवा सेवांसाठी ऑर्डर देण्यापूर्वी डिव्हाइस वैशिष्ट्यांची नवीनतम आवृत्ती प्राप्त करण्याचा सल्ला दिला जातो.
इतर नावे आणि ब्रँडवर इतरांची मालमत्ता म्हणून दावा केला जाऊ शकतो.
आभासी FPGA PCIe डिव्हाइस
FPGA व्यवस्थापन इंजिन (FME)
एफपीजीए मॅनेजमेंट इंजिन पॉवर आणि थर्मल मॅनेजमेंट, एरर रिपोर्टिंग, रिकॉन्फिगरेशन, परफॉर्मन्स रिपोर्टिंग आणि इतर इन्फ्रास्ट्रक्चर फंक्शन्स करते. प्रत्येक FPGA मध्ये एक FME असतो, ज्यामध्ये नेहमी शारीरिक कार्य (PF) द्वारे प्रवेश केला जातो. युजर-स्पेस ऍप्लिकेशन्स ओपन() वापरून FME मध्ये अनन्य प्रवेश मिळवू शकतात आणि विशेषाधिकार प्राप्त वापरकर्ता (रूट) म्हणून close() वापरून ते सोडू शकतात.
बंदर
पोर्ट स्थिर FPGA फॅब्रिक ("FPGA इंटरफेस मॅनेजर (FIM)") आणि एक्सीलरेटर फंक्शन (AF) असलेले अंशतः पुनर्रचना करता येण्याजोग्या क्षेत्रामधील इंटरफेसचे प्रतिनिधित्व करते. पोर्ट सॉफ्टवेअर ते प्रवेगक संप्रेषण नियंत्रित करते आणि रीसेट आणि डीबग सारखी वैशिष्ट्ये उघड करते. PCIe डिव्हाइसमध्ये अनेक पोर्ट असू शकतात आणि FME डिव्हाइसवर FPGA_FME_PORT_ASSIGN ioctl वापरून प्रत्येक पोर्ट VF द्वारे उघड केला जाऊ शकतो.
प्रवेगक कार्य (AF) युनिट
- एक्सीलरेटर फंक्शन (एएफ) युनिट एका पोर्टशी संलग्न आहे आणि एक्सीलरेटर-विशिष्ट नियंत्रण नोंदणीसाठी वापरण्यासाठी 256K MMIO क्षेत्र उघड करते.
- वापरकर्ता-स्पेस ऍप्लिकेशन्स पोर्ट डिव्हाइसवर ओपन() वापरून पोर्टशी संलग्न AFU मध्ये विशेष प्रवेश मिळवू शकतात आणि क्लोज() वापरून ते सोडू शकतात.
- वापरकर्ता-स्पेस अनुप्रयोग mmap() प्रवेगक MMIO प्रदेश देखील करू शकतात.
आंशिक पुनर्रचना
वर नमूद केल्याप्रमाणे, प्रवेगक फंक्शन (AF) च्या आंशिक पुनर्रचनाद्वारे पुन्हा कॉन्फिगर केले जाऊ शकतात. file. एक्सीलरेटर फंक्शन (AF) FPGA च्या अचूक FIM आणि लक्ष्यित स्थिर प्रदेश (पोर्ट) साठी व्युत्पन्न केले गेले असावे; अन्यथा, रीकॉन्फिगरेशन ऑपरेशन अयशस्वी होईल आणि कदाचित सिस्टम अस्थिरता निर्माण करेल. AF हेडरमध्ये नमूद केलेल्या इंटरफेस आयडीची FME द्वारे sysfs द्वारे उघड केलेल्या इंटरफेस आयडीशी तुलना करून ही सुसंगतता तपासली जाऊ शकते. ही तपासणी सामान्यतः वापरकर्ता स्पेसद्वारे पुनर्रचना IOCTL ला कॉल करण्यापूर्वी केली जाते.
टीप:
सध्या, FPGA मध्ये प्रवेश करणारा कोणताही सॉफ्टवेअर प्रोग्राम, ज्यामध्ये व्हर्च्युअलाइज्ड होस्टमध्ये चालत आहे, आंशिक पुनर्रचना करण्याचा प्रयत्न करण्यापूर्वी बंद करणे आवश्यक आहे. पायऱ्या असतील:
- अतिथीकडून ड्रायव्हर अनलोड करा
- अतिथीकडून VF अनप्लग करा
- SR-IOV अक्षम करा
- आंशिक पुनर्रचना करा
- SR-IOV सक्षम करा
- अतिथीला VF प्लग करा
- अतिथीमध्ये ड्रायव्हर लोड करा
FPGA आभासीकरण
VM मध्ये चालणार्या ऍप्लिकेशन्समधून प्रवेगक ऍक्सेस करणे सक्षम करण्यासाठी, संबंधित AFU चे पोर्ट खालील चरणांचा वापर करून VF ला नियुक्त करणे आवश्यक आहे:
- डीफॉल्टनुसार सर्व AFU पोर्ट पीएफकडे असतात. कोणतेही पोर्ट ज्याला VF ला पुन्हा नियुक्त करणे आवश्यक आहे ते प्रथम PF मधून FME डिव्हाइसवर FPGA_FME_PORT_RELEASE ioctl द्वारे सोडले जाणे आवश्यक आहे.
- एकदा PF मधून N पोर्ट्स रिलीझ झाल्यावर, खालील कमांडचा वापर SRIOV आणि VF सक्षम करण्यासाठी केला जाऊ शकतो. प्रत्येक VF कडे AFU सह फक्त एक पोर्ट आहे. echo N > PCI_DEVICE_PATH/sriov_numvfs
- VFs मधून VM मध्ये जा.
- VF अंतर्गत AFU VM मधील ऍप्लिकेशन्समधून प्रवेशयोग्य आहे (VF मध्ये समान ड्रायव्हर वापरुन).
टीप:
VF ला FME नियुक्त केले जाऊ शकत नाही, अशा प्रकारे PR आणि इतर व्यवस्थापन कार्ये फक्त PF द्वारे उपलब्ध आहेत.
चालक संघटना
PCIe मॉड्यूल डिव्हाइस ड्रायव्हर
चालक संघटना
FPGA साधने नियमित PCIe साधने म्हणून दिसतात; अशा प्रकारे, एकदा FPGA PCIe PF किंवा VF आढळल्यानंतर FPGA PCIe डिव्हाइस ड्रायव्हर (intel-FPGA-PCI.ko) नेहमी प्रथम लोड केला जातो. हा ड्रायव्हर ड्रायव्हर आर्किटेक्चरमध्ये पायाभूत भूमिका बजावतो. ते:
- वैशिष्ट्य डिव्हाइसेसचे पालक म्हणून FPGA कंटेनर डिव्हाइस तयार करते.
- वैशिष्ट्य उपकरणे आणि त्यांची उप-वैशिष्ट्ये शोधण्यासाठी आणि कंटेनर डिव्हाइसच्या अंतर्गत त्यांच्यासाठी प्लॅटफॉर्म डिव्हाइसेस तयार करण्यासाठी, PCIe डिव्हाइस BAR मेमरीमध्ये लागू केलेल्या डिव्हाइस वैशिष्ट्य सूचीमधून चालते.
- SR-IOV चे समर्थन करते.
- वैशिष्ट्य डिव्हाइस इन्फ्रास्ट्रक्चरची ओळख करून देते, जी उप-वैशिष्ट्यांसाठी ऑपरेशन्स अॅबस्ट्रॅक्ट करते आणि वैशिष्ट्य डिव्हाइस ड्रायव्हर्ससाठी सामान्य कार्ये उघड करते.
PCIe मॉड्यूल डिव्हाइस ड्रायव्हर कार्ये
- PCIe शोध, डिव्हाइस गणन आणि वैशिष्ट्य शोध समाविष्टीत आहे.
- मूळ उपकरण, FPGA व्यवस्थापन इंजिन (FME), आणि पोर्टसाठी sysfs निर्देशिका तयार करते.
- प्लॅटफॉर्म ड्रायव्हर उदाहरणे तयार करते, ज्यामुळे लिनक्स कर्नल त्यांच्या संबंधित प्लॅटफॉर्म मॉड्यूल ड्रायव्हर्स लोड करते.
FME प्लॅटफॉर्म मॉड्यूल डिव्हाइस ड्रायव्हर
- पॉवर आणि थर्मल मॅनेजमेंट, एरर रिपोर्टिंग, परफॉर्मन्स रिपोर्टिंग आणि इतर इन्फ्रास्ट्रक्चर फंक्शन्स. FME ड्रायव्हरद्वारे उघड केलेल्या sysfs इंटरफेसद्वारे तुम्ही या फंक्शन्समध्ये प्रवेश करू शकता.
- आंशिक पुनर्रचना. एफएमई ड्रायव्हर पीआर उप-वैशिष्ट्य प्रारंभादरम्यान एफपीजीए व्यवस्थापकाची नोंदणी करतो; एकदा तुमच्याकडून FPGA_FME_PORT_PR ioctl प्राप्त झाल्यावर, ते दिलेल्या पोर्टवर बिटस्ट्रीमचे आंशिक पुनर्रचना पूर्ण करण्यासाठी FPGA व्यवस्थापकाकडून सामान्य इंटरफेस फंक्शनची विनंती करते.
- आभासीकरणासाठी पोर्ट व्यवस्थापन. FME ड्रायव्हर दोन ioctls, FPGA_FME_PORT_RELEASE सादर करतो, जे PF मधून दिलेले पोर्ट सोडते; आणि FPGA_FME_PORT_ASSIGN, जे PF ला पोर्ट परत नियुक्त करते. एकदा PF मधून पोर्ट मुक्त झाल्यानंतर, PCIe ड्रायव्हरद्वारे प्रदान केलेल्या SR-IOV इंटरफेसद्वारे ते VF ला नियुक्त केले जाऊ शकते. अधिक माहितीसाठी, “FPGA Virtualization” पहा.
FME प्लॅटफॉर्म मॉड्यूल डिव्हाइस ड्रायव्हर कार्ये
- FME अक्षर उपकरण नोड तयार करते.
- FME sysfs तयार करते files आणि FME sysfs लागू करते file ऍक्सेसर्स
- FME खाजगी वैशिष्ट्य उप-ड्रायव्हर्स लागू करते.
- FME खाजगी वैशिष्ट्य उप-ड्रायव्हर्स:
- FME शीर्षलेख
- थर्मल व्यवस्थापन
- पॉवर व्यवस्थापन
- जागतिक त्रुटी
- आंशिक पुनर्रचना
- जागतिक कामगिरी
पोर्ट प्लॅटफॉर्म मॉड्यूल डिव्हाइस ड्रायव्हर
FME ड्रायव्हर प्रमाणेच, FPGA पोर्ट (आणि AFU) ड्रायव्हर (intel-fpga-afu. ko) एकदा पोर्ट प्लॅटफॉर्म उपकरण तयार झाल्यावर तपासले जाते. या मॉड्यूलचे मुख्य कार्य म्हणजे पोर्टवरील मूलभूत रीसेट नियंत्रण, AFU MMIO प्रदेश निर्यात, DMA बफर मॅपिंग सेवा, UMsg(1) सूचना आणि रिमोट डीबग फंक्शन्ससह वैयक्तिक प्रवेगकांमध्ये प्रवेश करण्यासाठी वापरकर्ता-स्पेस ऍप्लिकेशन्ससाठी इंटरफेस प्रदान करणे. वर पहा).
इंटिग्रेटेड FPGA सह Intel Xeon® प्रोसेसरसाठी UMsg केवळ एक्सीलरेशन स्टॅकद्वारे समर्थित आहे.
पोर्ट प्लॅटफॉर्म मॉड्यूल डिव्हाइस ड्रायव्हर कार्ये
- पोर्ट कॅरेक्टर डिव्हाइस नोड तयार करते.
- पोर्ट sysfs तयार करते files आणि पोर्ट sysfs लागू करते file ऍक्सेसर्स
- पोर्ट खाजगी वैशिष्ट्य सब-ड्रायव्हर्स लागू करते.
- पोर्ट खाजगी वैशिष्ट्य उप-ड्रायव्हर्स:
- पोर्ट हेडर
- AFU
- पोर्ट एरर
- UMsg(2)
- सिग्नल टॅप
अनुप्रयोग FPGA डिव्हाइस गणना
हा विभाग /sys/class/fpga अंतर्गत sysfs पदानुक्रमातून FPGA डिव्हाइसची गणना कशी करतात हे या विभागात सादर केले आहे. माजी मध्येampखाली, दोन इंटेल 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/
मी लागोपाठ सर्व कंटेनर उपकरणे क्रमांकित करतो, 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[] = {
{ .नाव = FPGA_FEATURE_DEV_FME },
{ .नाव = 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),},
{०,}
};
स्थिर रचना 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 लॉक;
struct list_head port_dev_list;
int release_port_num;
struct list_head क्षेत्रे;
};
struct build_feature_devs_info {
रचना pci_dev *pdev;
void __iomem *ioaddr;
void __iomem *ioend;
int current_bar;
void __iomem *pfme_hdr;
संरचना उपकरण *पालक_देव;
struct platform_device *feature_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_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()
- FME, पोर्ट आणि त्यांची खाजगी वैशिष्ट्ये शोधण्यासाठी BAR0 डिव्हाइस वैशिष्ट्य सूचीमध्ये चाला.
- parse_feature() parse_feature_afus() parse_feature_fme()
- जेव्हा एफएमईचा सामना केला जातो:
- build_info_create_dev()
- build_feature_devs_info.feature_dev मध्ये संचयित करून FME साठी प्लॅटफॉर्म डिव्हाइस वाटप करा.
- 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] सुरू करा.
- फीचर_प्लॅटफॉर्म_डेटा_जोड ()
- फीचर_प्लॅटफॉर्म_डेटा.विशेषता[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()
- struct cci_drvdata.port_dev_list मधील पोर्टच्या सूचीमध्ये पोर्टसाठी struct feature_platform_data.node जोडा
- create_feature_instance() build_info_add_sub_feature()
- feature_dev.resource[PORT_FEATURE_ID_HEADER] सुरू करा.
- फीचर_प्लॅटफॉर्म_डेटा_जोड ()
- फीचर_प्लॅटफॉर्म_डेटा.विशेषता[PORT_FEATURE_ID_HEADER] सुरू करा, .fops शिवाय सर्व काही.
- parse_feature() parse_feature_afus() parse_feature_port_uafu()
- जेव्हा एएफयूचा सामना केला जातो:
- create_feature_instance() build_info_add_sub_feature()
- feature_dev.resource[PORT_FEATURE_ID_UAFU] सुरू करा.
- फीचर_प्लॅटफॉर्म_डेटा_जोड ()
- फीचर_प्लॅटफॉर्म_डेटा.विशेषता[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] सुरू करा.
- फीचर_प्लॅटफॉर्म_डेटा_जोड ()
- फीचर_प्लॅटफॉर्म_डेटा.फीचर[आयडी] सुरू करा, .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() सुरु करा feature_platform_data.features[id], .fops शिवाय सर्व काही.
- parse_ports_from_fme()
- जर ड्रायव्हर फिजिकल फंक्शन (पीएफ) वर लोड केला असेल तर:
- FME हेडरमध्ये वर्णन केलेल्या प्रत्येक पोर्टवर parse_feature_list() प्रवाह चालवा.
- शीर्षलेखातील प्रत्येक पोर्ट एंट्रीमध्ये नमूद केलेला बार वापरा.
FME प्लॅटफॉर्म डिव्हाइस इनिशियलायझेशन
हा विभाग ओव्हर देतोview intel-fpga-fme.ko द्वारे FME डिव्हाइस इनिशिएलायझेशनसाठी कोड प्रवाह. मुख्य डेटा संरचना आणि कार्ये हायलाइट केली आहेत. हा विभाग सर्वोत्तम तेव्हा पाळला जातो viewसोबतचा सोर्स कोड (fme-main.c) द्या.
FME प्लॅटफॉर्म डिव्हाइस डेटा स्ट्रक्चर्स
रचना वैशिष्ट्य_ऑप्स {
int (*init)(struct platform_device *pdev, स्ट्रक्चर वैशिष्ट्य *वैशिष्ट्य);
int (*uinit)(struct platform_device *pdev, स्ट्रक्चर वैशिष्ट्य *वैशिष्ट्य);
लांब (*ioctl)(struct platform_device *pdev, स्ट्रक्चर वैशिष्ट्य *वैशिष्ट्य,
unsigned int cmd, unsigned long arg);
int (*चाचणी)(स्ट्रक्चर प्लॅटफॉर्म_डिव्हाइस *pdev, स्ट्रक्चर वैशिष्ट्य *वैशिष्ट्य);
};
रचना वैशिष्ट्य {
const char *नाव;
int resource_index;
void __iomem *ioaddr;
स्ट्रक्चर फीचर_ऑप्स *ऑप्स;
};
रचना वैशिष्ट्य_प्लॅटफॉर्म_डेटा {
struct list_head नोड;
struct mutex लॉक;
unsigned long dev_status;
struct cdev cdev;
struct platform_device *dev;
unsigned int disable_count;
शून्य *खाजगी;
पूर्णांक;
int (*config_port)(struct platform_device *, u32, bool);
स्ट्रक्चर प्लॅटफॉर्म_डिव्हाइस *(*fpga_for_each_port)(struct platform_device*,
void *, int (*match)(struct platform_device *, void*)); रचना
वैशिष्ट्य वैशिष्ट्ये[0];
};
रचना perf_object {
इंट आयडी;
const struct attribute_group **attr_groups;
स्ट्रक्चर डिव्हाइस *fme_dev;
struct list_head नोड;
struct list_head मुले;
struct kobject kobj;
};
रचना fpga_fme {
u8 port_id;
u64 pr_err;
संरचना उपकरण *dev_err;
रचना perf_object *perf_dev;
संरचना वैशिष्ट्य_प्लॅटफॉर्म_डेटा *पीडेटा;
};
FME प्लॅटफॉर्म डिव्हाइस इनिशियलायझेशन फ्लो
FME इनिशियलायझेशन फ्लो
- fme_probe() fme_dev_init()
- स्ट्रक्चर fpga_fme इनिशियल करा आणि फीचर_प्लॅटफॉर्म_डेटा.प्राइवेट फील्डमध्ये स्टोअर करा.
- fme_probe() fpga_dev_feature_init() feature_instance_init()
- प्रत्येक पॉप्युलेट केलेल्या वैशिष्ट्यासाठी feature_platform_data.features मध्ये स्ट्रक्चर फीचर_ऑप्स सेव्ह करा.
- चाचणी फंक्शन, जर असेल तर, स्ट्रक्चरवरून कॉल करा.
- init फंक्शनला स्ट्रक्चरमधून कॉल करा.
- fme_probe() fpga_register_dev_ops()
- FME कॅरेक्टर डिव्हाइस नोड तयार करा, स्ट्रक्चरची नोंदणी करा file_ऑपरेशन्स.
पोर्ट प्लॅटफॉर्म डिव्हाइस इनिशियलायझेशन
हा विभाग ओव्हर देतोview intel-fpga-afu.ko द्वारे पोर्ट डिव्हाइस इनिशिएलायझेशनसाठी कोड फ्लोचा. मुख्य डेटा संरचना आणि कार्ये हायलाइट केली आहेत. हा विभाग सर्वोत्तम तेव्हा पाळला जातो viewसोबतचा सोर्स कोड (afu.c) द्या.
पोर्ट प्लॅटफॉर्म डिव्हाइस डेटा स्ट्रक्चर्स
रचना वैशिष्ट्य_ऑप्स {
int (*init)(struct platform_device *pdev, स्ट्रक्चर वैशिष्ट्य *वैशिष्ट्य);
int (*uinit)(struct platform_device *pdev, स्ट्रक्चर वैशिष्ट्य *वैशिष्ट्य);
लांब (*ioctl)(struct platform_device *pdev, स्ट्रक्चर वैशिष्ट्य *वैशिष्ट्य,
unsigned int cmd, unsigned long arg);
int (*चाचणी)(स्ट्रक्चर प्लॅटफॉर्म_डिव्हाइस *pdev, स्ट्रक्चर वैशिष्ट्य *वैशिष्ट्य);
};
रचना वैशिष्ट्य {
const char *नाव;
int resource_index;
void __iomem *ioaddr;
स्ट्रक्चर फीचर_ऑप्स *ऑप्स;
};
रचना वैशिष्ट्य_प्लॅटफॉर्म_डेटा {
struct list_head नोड;
struct mutex लॉक;
unsigned long dev_status;
struct cdev cdev;
struct platform_device *dev;
unsigned int disable_count;
शून्य *खाजगी;
पूर्णांक;
int (*config_port)(struct platform_device *, u32, bool);
स्ट्रक्चर प्लॅटफॉर्म_डिव्हाइस *(*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 नोड;
};
संरचना fpga_afu_dma_region {
u64 user_addr;
u64 लांबी;
u64 iova;
रचना पृष्ठ ** पृष्ठे;
struct rb_node नोड;
bool in_use;
};
रचना fpga_afu {
u64 region_cur_offset;
int num_regions;
u8 num_umsgs;
struct list_head क्षेत्रे;
संरचना rb_root dma_regions;
संरचना वैशिष्ट्य_प्लॅटफॉर्म_डेटा *पीडेटा;
};
पोर्ट प्लॅटफॉर्म डिव्हाइस इनिशियलायझेशन फ्लो
पोर्ट इनिशियलायझेशन फ्लो
- afu_probe() afu_dev_init()
- स्ट्रक्चर fpga_afu सुरू करा आणि ते feature_platform_data.private फील्डमध्ये स्टोअर करा.
- afu_probe() fpga_dev_feature_init() feature_instance_init()
- प्रत्येक पॉप्युलेट केलेल्या वैशिष्ट्यासाठी 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 हा एक पॉइंटर आहे:
संरचना fpga_fme_port_release {
__u32 argsz; // in: sizeof(struct fpga_fme_port_release)
__u32 ध्वज; // मध्ये: 0 असणे आवश्यक आहे
__u32 port_id; // मध्ये: पोर्ट आयडी (0 पासून) रिलीझ करण्यासाठी.
};
FPGA_FME_PORT_ASSIGN—arg हा एक पॉइंटर आहे:
रचना fpga_fme_port_assign {
__u32 argsz; // in: sizeof(struct fpga_fme_port_assign)
__u32 ध्वज; // मध्ये: 0 असणे आवश्यक आहे
__u32 port_id; // मध्ये: पोर्ट आयडी (0 पासून) नियुक्त करण्यासाठी. (असेल
पूर्वी FPGA_FME_PORT_RELEASE द्वारे प्रसिद्ध)
};
FPGA_FME_PORT_PR—arg हा एक पॉइंटर आहे:
रचना fpga_fme_port_pr {
__u32 argsz; // in: sizeof(struct fpga_fme_port_pr)
__u32 ध्वज; // मध्ये: 0 असणे आवश्यक आहे
__u32 port_id; // मध्ये: पोर्ट आयडी (0 पासून)
__u32 बफर_आकार; // मध्ये: बाइट्समध्ये बिटस्ट्रीम बफरचा आकार. 4-बाइट असणे आवश्यक आहे
संरेखित
__u64 बफर_पत्ता; // मध्ये: बिटस्ट्रीम बफरचा पत्ता प्रक्रिया करा
__u64 स्थिती; // बाहेर: त्रुटी स्थिती (बिटमास्क)
};
पोर्ट IOCTLs
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; // in: sizeof(struct fpga_port_info)
__u32 ध्वज; // आउट: ० परतावा
__u32 संख्या_क्षेत्र; // बाहेर: MMIO प्रदेशांची संख्या, 2 (AFU साठी 1 आणि साठी 1
STP)
__u32 num_umsgs; // आउट: हार्डवेअरद्वारे समर्थित UMsg ची संख्या
};
FPGA_PORT_GET_REGION_INFO—arg हा एक पॉइंटर आहे:
संरचना fpga_port_region_info {
__u32 argsz; // in: 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 ऑफसेट; // आउट: डिव्हाइस fd सुरू झाल्यापासून MMIO प्रदेशाचा ऑफसेट
};
FPGA_PORT_DMA_MAP—arg हा एक पॉइंटर आहे:
संरचना fpga_port_dma_map {
__u32 argsz; // in: sizeof(struct fpga_port_dma_map)
__u32 ध्वज; // मध्ये: 0 __u64 user_addr असणे आवश्यक आहे; // मध्ये: प्रक्रिया आभासी
पत्ता. पृष्ठ संरेखित करणे आवश्यक आहे.
__u64 लांबी; // मध्ये: बाइट्समध्ये मॅपिंगची लांबी. पृष्ठाचा एक मल्टिपल असणे आवश्यक आहे
आकार
__u64 iova; // बाहेर: IO आभासी पत्ता };
FPGA_PORT_DMA_UNMAP—arg हा एक पॉइंटर आहे:
संरचना fpga_port_dma_unmap {
__u32 argsz; // in: sizeof(struct fpga_port_dma_unmap)
__u32 ध्वज; // मध्ये: 0 असणे आवश्यक आहे
__u64 iova; // मध्ये: IO आभासी पत्ता मागील द्वारे परत केला
FPGA_PORT_DMA_MAP };
- FPGA_PORT_RESET—आर्ग शून्य असणे आवश्यक आहे.
- FPGA_PORT_UMSG_ENABLE—आर्ग शून्य असणे आवश्यक आहे.
- FPGA_PORT_UMSG_DISABLE—आर्ग्स शून्य असणे आवश्यक आहे.
FPGA_PORT_UMSG_SET_MODE—arg हा एक पॉइंटर आहे:
रचना fpga_port_umsg_cfg {
__u32 argsz; // in: sizeof(struct fpga_port_umsg_cfg)
__u32 ध्वज; // मध्ये: 0 असणे आवश्यक आहे
__u32 hint_bitmap; // मध्ये: UMsg इशारा मोड बिटमॅप. कोणते UMsg आहेत हे सूचित करते
सक्षम
};
FPGA_PORT_UMSG_SET_BASE_ADDR—
- हे ioctl जारी करण्यापूर्वी UMsg अक्षम करणे आवश्यक आहे.
- iova फील्ड सर्व UMsg च्या (num_umsgs * PAGE_SIZE) पुरेशा मोठ्या बफरसाठी असणे आवश्यक आहे.
- ड्रायव्हरच्या बफर व्यवस्थापनाद्वारे बफरला "वापरात" म्हणून चिन्हांकित केले जाते.
- iova NULL असल्यास, मागील कोणताही प्रदेश "वापरात" म्हणून अचिन्हांकित केला जातो.
- arg हा एक सूचक आहे:
रचना fpga_port_umsg_base_addr {- u32 argsz; // in: sizeof(struct fpga_port_umsg_base_addr)
- u32 ध्वज; // मध्ये: 0 असणे आवश्यक आहे
- u64 iova; // मध्ये: FPGA_PORT_DMA_MAP वरून IO आभासी पत्ता. };
टीप:
- पोर्ट एरर साफ करण्यासाठी, तुम्हाला सध्याच्या त्रुटींचा अचूक बिटमास्क लिहावा लागेल, उदाहरणार्थample, मांजर त्रुटी > स्पष्ट
- UMsg फक्त इंटिग्रेटेड FPGA सह Intel Xeon प्रोसेसरसाठी प्रवेग स्टॅकद्वारे समर्थित आहे.
सिस्फ्स Files
FME हेडर sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/
सिस्फ्स file | mmio फील्ड | प्रकार | प्रवेश |
ports_num | fme_header.capability.num_ports | दशांश पूर्णांक | केवळ वाचनीय |
कॅशे_साईज | fme_header.capability.cache_size | दशांश पूर्णांक | केवळ वाचनीय |
आवृत्ती | fme_header.capability.fabric_verid | दशांश पूर्णांक | केवळ वाचनीय |
सॉकेट_आयडी | fme_header.capability.socket_id | दशांश पूर्णांक | केवळ वाचनीय |
bitstream_id | fme_header.bitstream_id | hex uint64_t | केवळ वाचनीय |
bitstream_metadata | fme_header.bitstream_md | hex uint64_t | केवळ वाचनीय |
FME थर्मल मॅनेजमेंट sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/
सिस्फ्स file | mmio फील्ड | प्रकार | प्रवेश |
थ्रेशोल्ड१ | thermal.threshold.tmp_thshold1 | दशांश पूर्णांक | वापरकर्ता: केवळ-वाचनीय रूट: वाचा-लिहा |
थ्रेशोल्ड१ | thermal.threshold.tmp_thshold2 | दशांश पूर्णांक | वापरकर्ता: केवळ-वाचनीय रूट: वाचा-लिहा |
threshold_trip | thermal.threshold.therm_trip_thshold | दशांश पूर्णांक | केवळ वाचनीय |
थ्रेशोल्ड1_ गाठले | thermal.threshold.thshold1_status | दशांश पूर्णांक | केवळ वाचनीय |
थ्रेशोल्ड2_ गाठले | thermal.threshold.thshold2_status | दशांश पूर्णांक | केवळ वाचनीय |
threshold1_policy | थर्मल threshold.thshold_policy | दशांश पूर्णांक | वापरकर्ता: केवळ-वाचनीय रूट: वाचा-लिहा |
तापमान | thermal.rdsensor_fm1.fpga_temp | दशांश पूर्णांक | केवळ वाचनीय |
FME पॉवर मॅनेजमेंट sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/power_mgmt/
सिस्फ्स file | mmio फील्ड | प्रकार | प्रवेश |
सेवन | power.status.pwr_consumed | hex uint64_t | केवळ वाचनीय |
थ्रेशोल्ड१ | power.threshold.threshold1 | hex uint64_t | वापरकर्ता: केवळ-वाचनीय रूट: वाचा-लिहा |
थ्रेशोल्ड१ | power.threshold.threshold2 | hex uint64_t | वापरकर्ता: केवळ-वाचनीय रूट: वाचा-लिहा |
threshold1_status | power.threshold.threshold1_status | दशांश स्वाक्षरी न केलेले | केवळ वाचनीय |
threshold2_status | power.threshold.threshold2_status | दशांश स्वाक्षरी न केलेले | केवळ वाचनीय |
आरटीएल | power.status.fpga_latency_report | दशांश स्वाक्षरी न केलेले | केवळ वाचनीय |
FME ग्लोबल एरर sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/errors/
सिस्फ्स 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/
सिस्फ्स file | mmio फील्ड | प्रकार | प्रवेश |
चुका | 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 | फक्त लिहा |
टीप:
एफएमई त्रुटी दूर करण्यासाठी, तुम्हाला सध्याच्या त्रुटींचा अचूक बिटमास्क लिहावा लागेल, उदाहरणार्थampमांजरीच्या चुका > स्पष्ट करा.
FME आंशिक पुनर्रचना sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/pr/
सिस्फ्स file | mmio फील्ड | प्रकार | प्रवेश |
इंटरफेस_आयडी | pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l | हेक्स 16-बाइट | केवळ वाचनीय |
FME ग्लोबल परफॉर्मन्स sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/dperf/clock
सिस्फ्स file | mmio फील्ड | प्रकार | प्रवेश |
घड्याळ | gperf.clk.afu_interf_clock | hex uint64_t | केवळ वाचनीय |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (FPGAs सह Intel Xeon CPU साठी प्रवेग स्टॅकसाठी वैध नाही)
सिस्फ्स file | mmio फील्ड | प्रकार | प्रवेश |
फ्रीझ | 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_स्टॉल | gperf.CACHE_TX_REQ_STALL | hex uint64_t | केवळ वाचनीय |
सिस्फ्स file | mmio फील्ड | प्रकार | प्रवेश |
rx_req_stall | gperf.CACHE_RX_REQ_STALL | hex uint64_t | केवळ वाचनीय |
data_write_port_content | gperf.CACHE_DATA_WR_PORT_CONTEN | hex uint64_t | केवळ वाचनीय |
tag_write_port_content | gperf.CACHE_TAG_WR_PORT_CONTEN | hex uint64_t | केवळ वाचनीय |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (FPGAs सह Intel Xeon CPU साठी प्रवेग स्टॅकसाठी वैध नाही)
सिस्फ्स file | mmio फील्ड | प्रकार | प्रवेश |
फ्रीझ | gperf.vtd_ctl.freeze | दशांश पूर्णांक | वापरकर्ता: केवळ-वाचनीय रूट: वाचा-लिहा |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (FPGAs सह Intel Xeon CPU साठी प्रवेग स्टॅकसाठी वैध नाही)
सिस्फ्स file | mmio फील्ड | प्रकार | प्रवेश |
वाचा_व्यवहार | 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/
सिस्फ्स file | mmio फील्ड | प्रकार | प्रवेश |
सक्षम करा | 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/
सिस्फ्स file | mmio फील्ड | प्रकार | प्रवेश |
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/
सिस्फ्स file | mmio फील्ड | प्रकार | प्रवेश |
id | port_header.capability.port_number | दशांश पूर्णांक | केवळ वाचनीय |
लि | port_header.control.latency_tolerance | दशांश पूर्णांक | केवळ वाचनीय |
पोर्ट AFU शीर्षलेख sysfs files
intel-fpga-dev.i/intel-fpga-port.k/
सिस्फ्स file | mmio फील्ड | प्रकार | प्रवेश |
afu_id | afu_header.guid | हेक्स 16-बाइट | केवळ वाचनीय |
पोर्ट एरर sysfs files
intel-fpga-dev.i/intel-fpga-port.k/errors/
सिस्फ्स file | mmio फील्ड | प्रकार | प्रवेश |
चुका | pererror.port_error | hex uint64_t | केवळ वाचनीय |
पहिली_त्रुटी | pererror.port_first_error | hex uint64_t | केवळ वाचनीय |
first_malformed_req | pererror.malreq | हेक्स 16-बाइट | केवळ वाचनीय |
स्पष्ट | perror. (सर्व त्रुटी) | विविध uint64_t | फक्त लिहा |
टीप:
पोर्ट एरर साफ करण्यासाठी, तुम्ही सध्याच्या त्रुटींचे अचूक बिटमास्क लिहिणे आवश्यक आहेampमांजरीच्या चुका > स्पष्ट करा.
पुनरावृत्ती इतिहास
दस्तऐवज आवृत्ती | बदल |
2017.10.02 | प्रारंभिक प्रकाशन. |
OPAE Intel FPGA Linux डिव्हाइस ड्रायव्हर आर्किटेक्चर मार्गदर्शक
कागदपत्रे / संसाधने
![]() |
इंटेल ओपीएई एफपीजीए लिनक्स डिव्हाइस ड्रायव्हर आर्किटेक्चर [pdf] वापरकर्ता मार्गदर्शक ओपीएई एफपीजीए लिनक्स डिव्हाइस ड्रायव्हर आर्किटेक्चर, ओपीएई एफपीजीए, लिनक्स डिव्हाइस ड्रायव्हर आर्किटेक्चर, ड्रायव्हर आर्किटेक्चर, आर्किटेक्चर |