intel-logo

intel OPAE FPGA लिनक्स यन्त्र चालक वास्तुकला

intel-OPAE-FPGA-Linux-उपकरण-ड्राइभर-वास्तुकला-उत्पादन

OPAE Intel FPGA लिनक्स यन्त्र चालक वास्तुकला

OPAE Intel FPGA ड्राइभरले Intel FPGA समाधानहरूसँग सुसज्जित प्लेटफर्महरूमा FPGA एक्सेलेटरहरू कन्फिगर गर्न, गणना गर्न, खोल्न र पहुँच गर्न प्रयोगकर्ता-स्पेस अनुप्रयोगहरूको लागि इन्टरफेसहरू प्रदान गर्दछ र FPGA पुन: कन्फिगरेसन, पावर व्यवस्थापन, र भर्चुअलाइजेसन जस्ता प्रणाली-स्तर व्यवस्थापन कार्यहरू सक्षम गर्दछ।

हार्डवेयर वास्तुकला

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

FPGA PCIe यन्त्र

intel-OPAE-FPGA-Linux-Device-Driver-Architecture-fig- (1)

भर्चुअल प्रकार्यहरू (VFs) सिर्जना गर्न ड्राइभरले PCIe SR-IOV लाई समर्थन गर्दछ जुन भर्चुअल मेसिनहरूमा व्यक्तिगत एक्सेलेटरहरू तोक्न प्रयोग गर्न सकिन्छ।

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

अन्य नाम र ब्रान्डहरू अरूको सम्पत्तिको रूपमा दाबी गर्न सकिन्छ।

भर्चुअलाइज्ड FPGA PCIe यन्त्र

intel-OPAE-FPGA-Linux-Device-Driver-Architecture-fig- (2)

FPGA व्यवस्थापन इन्जिन (FME)
FPGA व्यवस्थापन इन्जिनले शक्ति र थर्मल व्यवस्थापन, त्रुटि रिपोर्टिङ, पुन: कन्फिगरेसन, प्रदर्शन रिपोर्टिङ, र अन्य पूर्वाधार कार्यहरू गर्दछ। प्रत्येक FPGA को एक FME हुन्छ, जसलाई सधैं शारीरिक प्रकार्य (PF) मार्फत पहुँच गरिन्छ। प्रयोगकर्ता-स्पेस अनुप्रयोगहरूले open() को प्रयोग गरेर FME मा विशेष पहुँच प्राप्त गर्न सक्छन्, र विशेषाधिकार प्राप्त प्रयोगकर्ता (रूट) को रूपमा close() प्रयोग गरेर यसलाई जारी गर्न सक्छन्।

पोर्ट
पोर्टले स्थिर FPGA कपडा ("FPGA इन्टरफेस प्रबन्धक (FIM)") र एक एक्सेलरेटर प्रकार्य (AF) समावेश भएको आंशिक रूपमा पुन: कन्फिगर योग्य क्षेत्र बीचको इन्टरफेसलाई प्रतिनिधित्व गर्दछ। पोर्टले सफ्टवेयरबाट एक्सेलेरेटरमा सञ्चारलाई नियन्त्रण गर्छ र रिसेट र डिबग जस्ता सुविधाहरू उजागर गर्दछ। PCIe यन्त्रमा धेरै पोर्टहरू हुन सक्छन्, र FME यन्त्रमा FPGA_FME_PORT_ASSIGN ioctl प्रयोग गरी प्रत्येक पोर्टलाई VF मार्फत खुलाउन सकिन्छ।

एक्सेलेरेटर प्रकार्य (AF) एकाइ

  • एक एक्सेलरेटर फंक्शन (AF) एकाइ पोर्टमा जोडिएको छ र एक्सेलेटर-विशिष्ट नियन्त्रण दर्ताहरूको लागि प्रयोग गर्नको लागि 256K MMIO क्षेत्रलाई उजागर गर्दछ।
  • प्रयोगकर्ता-स्पेस अनुप्रयोगहरूले पोर्ट उपकरणमा open() प्रयोग गरेर पोर्टमा संलग्न AFU मा विशेष पहुँच प्राप्त गर्न सक्छन्, र यसलाई close() प्रयोग गरेर जारी गर्न सक्छन्।
  • प्रयोगकर्ता-स्पेस अनुप्रयोगहरूले mmap() एक्सेलेटर MMIO क्षेत्रहरू पनि गर्न सक्छन्।

आंशिक पुन: कन्फिगरेसन
माथि उल्लेख गरिए अनुसार, एक्सेलेटर फंक्शन (एएफ) को आंशिक पुन: कन्फिगरेसन मार्फत पुन: कन्फिगर गर्न सकिन्छ। file। एक्सलेरेटर प्रकार्य (AF) FPGA को सटीक FIM र लक्षित स्थिर क्षेत्र (पोर्ट) को लागि उत्पन्न गरिएको हुनुपर्छ; अन्यथा, पुन: कन्फिगरेसन अपरेशन असफल हुनेछ र सम्भवतः प्रणाली अस्थिरताको कारण हुनेछ। यो अनुकूलता AF हेडरमा उल्लेख गरिएको इन्टरफेस ID लाई FME द्वारा sysfs मार्फत खुलाएको इन्टरफेस ID विरुद्ध तुलना गरेर जाँच गर्न सकिन्छ। यो जाँच सामान्यतया प्रयोगकर्ता स्पेस द्वारा पुन: कन्फिगरेसन IOCTL कल गर्नु अघि गरिन्छ।

नोट:
हाल, FPGA पहुँच गर्ने कुनै पनि सफ्टवेयर प्रोग्राम, भर्चुअलाइज्ड होस्टमा चल्नेहरू सहित, आंशिक पुन: कन्फिगरेसन प्रयास गर्नु अघि बन्द हुनुपर्छ। चरणहरू हुनेछ:

  1. अतिथिबाट चालक अनलोड गर्नुहोस्
  2. अतिथिबाट VF अनप्लग गर्नुहोस्
  3. SR-IOV असक्षम गर्नुहोस्
  4. आंशिक पुन: कन्फिगरेसन प्रदर्शन गर्नुहोस्
  5. SR-IOV सक्षम गर्नुहोस्
  6. अतिथिमा VF प्लग गर्नुहोस्
  7. अतिथिमा चालक लोड गर्नुहोस्

FPGA भर्चुअलाइजेशन
VM मा चलिरहेको अनुप्रयोगहरूबाट एक एक्सेलेटर पहुँच सक्षम गर्न, सम्बन्धित AFU को पोर्ट निम्न चरणहरू प्रयोग गरेर VF मा तोक्न आवश्यक छ:

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

नोट:
एक FME VF लाई तोक्न सकिँदैन, यसरी PR र अन्य व्यवस्थापन कार्यहरू PF मार्फत मात्र उपलब्ध छन्।

चालक संगठन

PCIe मोड्युल यन्त्र चालक

चालक संगठन

intel-OPAE-FPGA-Linux-Device-Driver-Architecture-fig- (3)

FPGA यन्त्रहरू नियमित PCIe यन्त्रहरू जस्तै देखिन्छन्; यसरी, FPGA PCIe यन्त्र चालक (intel-FPGA-PCI.ko) FPGA PCIe PF वा VF पत्ता लागेपछि सधैं पहिले लोड हुन्छ। यो चालकले चालक वास्तुकलामा पूर्वाधारको भूमिका खेल्छ। यो:

  • सुविधा यन्त्रहरूको अभिभावकको रूपमा FPGA कन्टेनर उपकरण सिर्जना गर्दछ।
  • PCIe यन्त्र बार मेमोरीमा लागू गरिएको यन्त्र सुविधा सूची मार्फत चल्छ, सुविधा उपकरणहरू र तिनीहरूका उप-सुविधाहरू पत्ता लगाउन र कन्टेनर यन्त्र अन्तर्गत तिनीहरूका लागि प्लेटफर्म यन्त्रहरू सिर्जना गर्न।
  • SR-IOV लाई समर्थन गर्दछ।
  • सुविधा यन्त्र पूर्वाधार प्रस्तुत गर्दछ, जसले उप-सुविधाहरूका लागि अपरेसनहरू सार गर्छ र यन्त्र चालकहरूलाई सुविधा दिने सामान्य कार्यहरूलाई उजागर गर्छ।

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, जसले PF लाई पोर्ट फिर्ता प्रदान गर्दछ। PF बाट पोर्ट रिलिज भएपछि, PCIe ड्राइभरले उपलब्ध गराएको SR-IOV इन्टरफेसहरू मार्फत VF लाई तोक्न सकिन्छ। थप जानकारीको लागि, "FPGA भर्चुअलाइजेशन" हेर्नुहोस्।

FME प्लेटफर्म मोड्युल यन्त्र चालक कार्यहरू

  • FME क्यारेक्टर उपकरण नोड सिर्जना गर्दछ।
  • FME sysfs सिर्जना गर्दछ files र FME sysfs लागू गर्दछ file सहायकहरू।
  • FME निजी सुविधा उप-ड्राइभरहरू लागू गर्दछ।
  • FME निजी सुविधा उप-चालक:
    • FME हेडर
    • थर्मल व्यवस्थापन
    • पावर व्यवस्थापन
    • विश्वव्यापी त्रुटि
    • आंशिक पुन: कन्फिगरेसन
    • ग्लोबल प्रदर्शन

पोर्ट प्लेटफर्म मोड्युल उपकरण चालक
FME ड्राइभर जस्तै, FPGA पोर्ट (र AFU) ड्राइभर (intel-fpga-afu. ko) पोर्ट प्लेटफर्म यन्त्र सिर्जना भएपछि जाँच गरिन्छ। यस मोड्युलको मुख्य कार्य पोर्टमा आधारभूत रिसेट नियन्त्रण, AFU MMIO क्षेत्र निर्यात, DMA बफर म्यापिङ सेवा, UMsg(1) सूचना, र रिमोट डिबग प्रकार्यहरू सहित व्यक्तिगत एक्सेलेटरहरूमा पहुँच गर्न प्रयोगकर्ता-स्पेस अनुप्रयोगहरूको लागि इन्टरफेस प्रदान गर्नु हो। माथि हेर)।

UMsg एकीकृत FPGA को साथ Intel Xeon® प्रोसेसरको लागि एक्सेलेरेशन स्ट्याक मार्फत मात्र समर्थित छ।

पोर्ट प्लेटफर्म मोड्युल यन्त्र चालक कार्यहरू

  • पोर्ट क्यारेक्टर उपकरण नोड सिर्जना गर्दछ।
  • पोर्ट sysfs सिर्जना गर्दछ files र पोर्ट sysfs लागू गर्दछ file सहायकहरू।
  • पोर्ट निजी सुविधा उप-ड्राइभरहरू लागू गर्दछ।
  • पोर्ट निजी सुविधा उप-ड्राइभरहरू:
    • पोर्ट हेडर
    • AFU
    • पोर्ट त्रुटि
    • UMsg(२)
    • सिग्नल ट्याप

आवेदन FPGA उपकरण गणना
यस खण्डले परिचय दिन्छ कि कसरी अनुप्रयोगहरूले sysfs पदानुक्रमबाट FPGA यन्त्रलाई /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) ing।

गणना डाटा संरचनाहरू

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),},
{0,}
};
स्थिर संरचना pci_driver cci_pci_driver = {
नाम = 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;
संरचना म्यूटेक्स लक;
संरचना सूची_हेड पोर्ट_देव_सूची;
int जारी_पोर्ट_संख्या;
संरचना सूची_हेड क्षेत्रहरू;
};
struct build_feature_devs_info {
संरचना pci_dev *pdev;
void __iomem *ioaddr;
शून्य __iomem *ioend;
int current_bar;
शून्य __iomem *pfme_hdr;
संरचना उपकरण *parent_dev;
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 डाइरेक्टरीहरू छन्।
  • parse_feature_list()
    • 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 मा संरचना स्रोतहरूको एरे आवंटित गर्नुहोस्।
  • स्ट्रक्चर फिचर_प्लेटफार्म_डेटा आवंटित गर्नुहोस्, यसलाई प्रारम्भ गर्नुहोस्, र फीचर_dev.dev.platform_data मा एक सूचक भण्डार गर्नुहोस्।
    • create_feature_instance() build_info_add_sub_feature()
    • सुरु गर्नुहोस् feature_dev.resource[FME_FEATURE_ID_HEADER]।
    • फिचर_प्लेटफर्म_डेटा_जोड्नुहोस्()
    • सुरु गर्नुहोस् 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 मा संरचना स्रोतको एरे आवंटित गर्नुहोस्।
    • स्ट्रक्चर फिचर_प्लेटफार्म_डेटा आवंटित गर्नुहोस्, यसलाई प्रारम्भ गर्नुहोस्, र फीचर_dev.dev.platform_data मा एक सूचक भण्डार गर्नुहोस्।
  • build_info_commit_dev()
    • स्ट्रक्चर 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]।
  • फिचर_प्लेटफर्म_डेटा_जोड्नुहोस्()
    • सुरु गर्नुहोस् 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.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.features[id], .fops बाहेक सबै कुरा।
  • parse_feature() parse_feature_private() parse_feature_port_private()
  • जब एउटा पोर्ट निजी सुविधाको सामना हुन्छ: * create_feature_instance() build_info_add_sub_feature() * initialize feature_dev.resource[id]। * feature_platform_data_add() initialize feature_platform_data.features[id], .fops बाहेक सबै कुरा।
  • parse_ports_from_fme()
    • यदि ड्राइभर भौतिक प्रकार्य (PF) मा लोड छ, तब:
  • FME हेडरमा वर्णन गरिएको प्रत्येक पोर्टमा parse_feature_list() प्रवाह चलाउनुहोस्।
  • हेडरमा प्रत्येक पोर्ट प्रविष्टिमा उल्लेख गरिएको बार प्रयोग गर्नुहोस्।

FME प्लेटफर्म उपकरण प्रारम्भिकरण
यो खण्ड एक ओभर दिन्छview intel-fpga-fme.ko द्वारा प्रदर्शन गरिएको FME यन्त्र प्रारम्भको लागि कोड प्रवाहको। मुख्य डाटा संरचना र कार्यहरू हाइलाइट गरिएका छन्। यो खण्ड सबै भन्दा राम्रो पछ्याइएको छ जब viewसँगै स्रोत कोड (fme-main.c) ing।

FME प्लेटफर्म उपकरण डेटा संरचना

संरचना सुविधा_अप्स {
int (*init)(struct platform_device *pdev, struct सुविधा *सुविधा);
int (*uinit)(struct platform_device *pdev, struct सुविधा *सुविधा);
लामो (*ioctl)(struct platform_device *pdev, struct सुविधा *सुविधा,
अहस्ताक्षरित int cmd, अहस्ताक्षरित लामो arg);
int (*test)(struct platform_device *pdev, struct सुविधा *सुविधा);
};
संरचना विशेषता {
const char *नाम;
int resource_index;
void __iomem *ioaddr;
संरचना सुविधा_ops *ops;
};
संरचना सुविधा_प्लेटफर्म_डेटा {
संरचना सूची_हेड नोड;
संरचना म्यूटेक्स लक;
हस्ताक्षर नगरिएको लामो dev_status;
संरचना cdev cdev;
struct platform_device *dev;
हस्ताक्षर नगरिएको int disable_count;
शून्य * निजी;
int num;
int (*config_port)(struct platform_device *, u32, bool);
struct platform_device *(*fpga_for_each_port)(struct platform_device*,
void *, int (*match)(struct platform_device *, void*)); संरचना
विशेषता सुविधाहरू [0];
};
संरचना perf_object {
ईन्ट आईडी;
const struct विशेषता_समूह **attr_groups;
संरचना उपकरण *fme_dev;
संरचना सूची_हेड नोड;
संरचना सूची_हेड बच्चाहरु;
संरचना kobject kobj;
};
संरचना fpga_fme {
u8 port_id;
u64 pr_err;
संरचना उपकरण *dev_err;
संरचना perf_object *perf_dev;
संरचना सुविधा_प्लेटफर्म_डेटा *पीडेटा;
};

FME प्लेटफर्म उपकरण प्रारम्भिक प्रवाह

FME प्रारम्भिक प्रवाहintel-OPAE-FPGA-Linux-Device-Driver-Architecture-fig- (4)

  • fme_probe() fme_dev_init()
    • एक संरचना fpga_fme सुरु गर्नुहोस् र यसलाई feature_platform_data.private फिल्डमा भण्डार गर्नुहोस्।
  • fme_probe() fpga_dev_feature_init() feature_instance_init()
    • प्रत्येक आबादी सुविधाको लागि feature_platform_data.features मा struct feature_ops बचत गर्नुहोस्।
    • परीक्षण प्रकार्यलाई कल गर्नुहोस्, यदि कुनै छ भने, संरचनाबाट।
    • संरचनाबाट init प्रकार्यलाई कल गर्नुहोस्।
  • fme_probe() fpga_register_dev_ops()
    • FME क्यारेक्टर उपकरण नोड सिर्जना गर्नुहोस्, संरचना दर्ता गर्दै file_सञ्चालनहरू।

पोर्ट प्लेटफर्म उपकरण प्रारम्भिकरण
यो खण्ड एक ओभर दिन्छview intel-fpga-afu.ko द्वारा प्रदर्शन गरिएको पोर्ट उपकरण प्रारम्भको लागि कोड प्रवाहको। मुख्य डाटा संरचना र कार्यहरू हाइलाइट गरिएका छन्। यो खण्ड सबै भन्दा राम्रो पछ्याइएको छ जब viewसँगै स्रोत कोड (afu.c) ing।

पोर्ट प्लेटफर्म उपकरण डेटा संरचना

संरचना सुविधा_अप्स {
int (*init)(struct platform_device *pdev, struct सुविधा *सुविधा);
int (*uinit)(struct platform_device *pdev, struct सुविधा *सुविधा);
लामो (*ioctl)(struct platform_device *pdev, struct सुविधा *सुविधा,
अहस्ताक्षरित int cmd, अहस्ताक्षरित लामो arg);
int (*test)(struct platform_device *pdev, struct सुविधा *सुविधा);
};
संरचना विशेषता {
const char *नाम;
int resource_index;
void __iomem *ioaddr;
संरचना सुविधा_ops *ops;
};
संरचना सुविधा_प्लेटफर्म_डेटा {
संरचना सूची_हेड नोड;
संरचना म्यूटेक्स लक;
हस्ताक्षर नगरिएको लामो dev_status;
संरचना cdev cdev;
struct platform_device *dev;
हस्ताक्षर नगरिएको int disable_count;
शून्य * निजी;
int num;
int (*config_port)(struct platform_device *, u32, bool);
struct platform_device *(*fpga_for_each_port)(struct platform_device*,
void *, int (* match) (struct platform_device *, void *));
संरचना विशेषता सुविधाहरू [0];
};
संरचना fpga_afu_region {
u32 सूचकांक;
u32 झण्डा;
u64 आकार;
u64 अफसेट;
u64 भौतिक;
संरचना सूची_हेड नोड;
};
संरचना fpga_afu_dma_region {
u64 user_addr;
u64 लम्बाइ;
u64 iova;
संरचना पृष्ठ ** पृष्ठहरू;
संरचना rb_node नोड;
bool in_use;
};
संरचना fpga_afu {
u64 region_cur_offset;
int num_regions;
u8 num_umsgs;
संरचना सूची_हेड क्षेत्रहरू;
संरचना rb_root dma_regions;
संरचना सुविधा_प्लेटफर्म_डेटा *पीडेटा;
};

पोर्ट प्लेटफर्म उपकरण प्रारम्भिक प्रवाह

पोर्ट प्रारम्भिक प्रवाहintel-OPAE-FPGA-Linux-Device-Driver-Architecture-fig- (5)

  • afu_probe() afu_dev_init()
    • एक संरचना fpga_afu सुरु गर्नुहोस् र यसलाई feature_platform_data.private फिल्डमा भण्डार गर्नुहोस्।
  • afu_probe() fpga_dev_feature_init() feature_instance_init()
    • प्रत्येक आबादी सुविधाको लागि feature_platform_data.features मा struct feature_ops बचत गर्नुहोस्।
    • परीक्षण प्रकार्यलाई कल गर्नुहोस्, यदि कुनै छ भने, संरचनाबाट।
    • संरचनाबाट init प्रकार्यलाई कल गर्नुहोस्।
  • afu_probe() fpga_register_dev_ops()
    • पोर्ट क्यारेक्टर उपकरण नोड सिर्जना गर्नुहोस्, संरचना दर्ता गर्दै file_सञ्चालनहरू।

FME IOCTLs
IOCTL हरू जुन खुलामा बोलाइन्छ file /dev/intel-fpga-fme.j FPGA_GET_API_VERSION का लागि वर्णनकर्ता— ० बाट सुरु गरी हालको संस्करणलाई पूर्णांकको रूपमा फर्काउनुहोस्।

FPGA_CHECK_EXTENSION—हाल समर्थित छैन।

FPGA_FME_PORT_RELEASE — arg एउटा सूचक हो:

संरचना fpga_fme_port_release {
__u32 argsz; // in: sizeof(struct fpga_fme_port_release)
__u32 झण्डा; // मा: ० हुनुपर्छ
__u32 port_id; // मा: पोर्ट आईडी (० बाट) जारी गर्न।
};

FPGA_FME_PORT_ASSIGN — arg एउटा सूचक हो:

संरचना fpga_fme_port_assign {
__u32 argsz; // in: sizeof(struct fpga_fme_port_assign)
__u32 झण्डा; // मा: ० हुनुपर्छ
__u32 port_id; // मा: पोर्ट ID (० बाट) असाइन गर्न। (हुनु पर्छ
पहिले FPGA_FME_PORT_RELEASE द्वारा जारी)
};

FPGA_FME_PORT_PR—arg एउटा सूचक हो:

संरचना fpga_fme_port_pr {
__u32 argsz; // in: sizeof(struct fpga_fme_port_pr)
__u32 झण्डा; // मा: ० हुनुपर्छ
__u32 port_id; // मा: पोर्ट आईडी (० बाट)
__u32 बफर_साइज; // in: बाइटहरूमा बिटस्ट्रीम बफरको आकार। 4-बाइट हुनुपर्छ
पङ्क्तिबद्ध।
__u64 बफर_ठेगाना; // in: बिटस्ट्रीम बफरको प्रक्रिया ठेगाना
__u64 स्थिति; // बाहिर: त्रुटि स्थिति (बिटमास्क)
};

पोर्ट IOCTLs
IOCTL हरू जुन खुलामा बोलाइन्छ file /dev/intel-fpga-port.k FPGA_GET_API_VERSION का लागि वर्णनकर्ता— ० बाट सुरु गरी हालको संस्करणलाई पूर्णांकको रूपमा फर्काउनुहोस्। FPGA_CHECK_EXTENSION—हाल समर्थित छैन।

FPGA_PORT_GET_INFO — arg एउटा सूचक हो:

संरचना fpga_port_info {
__u32 argsz; // in: sizeof(struct fpga_port_info)
__u32 झण्डा; // बाहिर: ० फर्काउँछ
__u32 num_regions; // बाहिर: 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 प्याडिङ; // मा: ० हुनुपर्छ
__u64 आकार; // बाहिर: बाइटहरूमा MMIO क्षेत्रको आकार
__u64 अफसेट; // बाहिर: यन्त्र fd को सुरु देखि MMIO क्षेत्र को अफसेट
};

FPGA_PORT_DMA_MAP — arg एउटा सूचक हो:
संरचना fpga_port_dma_map {
__u32 argsz; // in: sizeof(struct fpga_port_dma_map)
__u32 झण्डा; // in: 0 __u64 user_addr हुनुपर्छ; // in: प्रक्रिया भर्चुअल
ठेगाना। पृष्ठ पङ्क्तिबद्ध हुनुपर्छ।
__u64 लम्बाइ; // in: बाइटहरूमा म्यापिङको लम्बाइ। पृष्ठको बहुविध हुनुपर्छ
आकार।
__u64 iova; // बाहिर: IO भर्चुअल ठेगाना };

FPGA_PORT_DMA_UNMAP — arg एउटा सूचक हो:
संरचना fpga_port_dma_unmap {
__u32 argsz; // in: sizeof(struct fpga_port_dma_unmap)
__u32 झण्डा; // मा: ० हुनुपर्छ
__u64 iova; // मा: 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; // in: sizeof(struct fpga_port_umsg_cfg)
__u32 झण्डा; // मा: ० हुनुपर्छ
__u32 hint_bitmap; // in: 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 झण्डा; // मा: ० हुनुपर्छ
    • u64 iova; // मा: IO भर्चुअल ठेगाना FPGA_PORT_DMA_MAP बाट। };

नोट:

  • पोर्ट त्रुटिहरू खाली गर्न, तपाईंले हालको त्रुटिहरूको सही बिटमास्क लेख्नुपर्छ, पूर्वका लागिample, बिरालो त्रुटिहरू > स्पष्ट
  • UMsg एकीकृत FPGA को साथ Intel Xeon प्रोसेसरको लागि एक्सेलेरेशन स्ट्याक मार्फत मात्र समर्थित छ।

sysfs Files

FME हेडर sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/

sysfs file mmio क्षेत्र प्रकार पहुँच
ports_num fme_header.capability.num_ports दशमलव int पढ्ने मात्र
cache_size 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 थर्मल व्यवस्थापन sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/

sysfs file mmio क्षेत्र प्रकार पहुँच
थ्रेसहोल्ड १ thermal.threshold.tmp_thshold1 दशमलव int प्रयोगकर्ता: पढ्ने मात्र रूट: पढ्ने-लेख्नुहोस्
थ्रेसहोल्ड १ thermal.threshold.tmp_thshold2 दशमलव int प्रयोगकर्ता: पढ्ने मात्र रूट: पढ्ने-लेख्नुहोस्
threshold_trip thermal.threshold.therm_trip_thshold दशमलव int पढ्ने मात्र
थ्रेसहोल्ड1_ पुग्यो thermal.threshold.thshold1_status दशमलव int पढ्ने मात्र
थ्रेसहोल्ड2_ पुग्यो thermal.threshold.thshold2_status दशमलव int पढ्ने मात्र
थ्रेसहोल्ड1_नीति थर्मल। 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 पढ्ने मात्र
थ्रेसहोल्ड १ power.threshold.threshold1 hex uint64_t प्रयोगकर्ता: पढ्ने मात्र रूट: पढ्ने-लेख्नुहोस्
थ्रेसहोल्ड १ power.threshold.threshold2 hex uint64_t प्रयोगकर्ता: पढ्ने मात्र रूट: पढ्ने-लेख्नुहोस्
थ्रेसहोल्ड1_स्थिति power.threshold.threshold1_status दशमलव अहस्ताक्षरित पढ्ने मात्र
थ्रेसहोल्ड2_स्थिति power.threshold.threshold2_status दशमलव अहस्ताक्षरित पढ्ने मात्र
rtl power.status.fpga_latency_report दशमलव अहस्ताक्षरित पढ्ने मात्र

FME ग्लोबल त्रुटि sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/errors/

sysfs file 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 पढ्ने मात्र
पहिलो_त्रुटि gerror.fme_first_err.err_reg_status hex uint64_t पढ्ने मात्र
अर्को_त्रुटि gerror.fme_next_err.err_reg_status hex uint64_t पढ्ने मात्र
स्पष्ट त्रुटिहरू खाली गर्दछ, first_error, next_error विभिन्न uint64_t मात्र लेख्नुहोस्

नोट:
FME त्रुटिहरू खाली गर्न, तपाईंले हालको त्रुटिहरूको सही बिटमास्क लेख्नुपर्छ, पूर्वका लागिampले बिरालो त्रुटिहरू > स्पष्ट।

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 हेक्स 16-बाइट पढ्ने मात्र

FME ग्लोबल प्रदर्शन 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/ (FPGAs भएको Intel Xeon CPU को लागि एक्सेलेरेशन स्ट्याकको लागि मान्य छैन)

sysfs file mmio क्षेत्र प्रकार पहुँच
फ्रिज gperf.ch_ctl.freeze दशमलव int पढ्नुहोस्-लेख्नुहोस्
पढ्नुहोस्_हिट gperf.CACHE_RD_HIT hex uint64_t पढ्ने मात्र
पढ्न_miss gperf.CACHE_RD_MISS hex uint64_t पढ्ने मात्र
लेख्नुहोस्_हिट gperf.CACHE_WR_HIT hex uint64_t पढ्ने मात्र
write_miss gperf.CACHE_WR_MISS hex uint64_t पढ्ने मात्र
होल्ड_अनुरोध gperf.CACHE_HOLD_REQ hex uint64_t पढ्ने मात्र
tx_req_stall gperf.CACHE_TX_REQ_STALL hex uint64_t पढ्ने मात्र
sysfs file 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 को लागि एक्सेलेरेशन स्ट्याकको लागि मान्य छैन)

sysfs file mmio क्षेत्र प्रकार पहुँच
फ्रिज gperf.vtd_ctl.freeze दशमलव int प्रयोगकर्ता: पढ्ने मात्र रूट: पढ्ने-लेख्नुहोस्

intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (FPGAs संग Intel Xeon CPU को लागि एक्सेलेरेशन स्ट्याकको लागि मान्य छैन)

sysfs 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/

sysfs file mmio क्षेत्र प्रकार पहुँच
सक्षम गर्नुहोस् gperf.fab_ctl.(सक्षम) दशमलव int प्रयोगकर्ता: पढ्ने मात्र रूट: पढ्ने-लेख्नुहोस्
फ्रिज gperf.fab_ctl.freeze दशमलव int प्रयोगकर्ता: पढ्ने मात्र रूट: पढ्ने-लेख्नुहोस्
pcie0_read gperf.FAB_PCIE0_RD hex uint64_t पढ्ने मात्र
pcie0_write gperf.FAB_PCIE0_WR hex uint64_t पढ्ने मात्र
pcie1_read gperf.FAB_PCIE1_RD hex uint64_t पढ्ने मात्र
pcie1_write gperf.FAB_PCIE1_WR hex uint64_t पढ्ने मात्र
upi_read gperf.FAB_UPI_RD hex uint64_t पढ्ने मात्र
upi_write gperf.FAB_UPI_WR hex uint64_t पढ्ने मात्र

intel-fpga-ev.i/intel-fpga/fme.j/dperf/fabric/portk/

sysfs file 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/

sysfs file mmio क्षेत्र प्रकार पहुँच
id port_header.capability.port_number दशमलव int पढ्ने मात्र
ltr 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 हेक्स 16-बाइट पढ्ने मात्र

पोर्ट त्रुटि sysfs files
intel-fpga-dev.i/intel-fpga-port.k/errors/

sysfs file mmio क्षेत्र प्रकार पहुँच
त्रुटिहरू pererror.port_error hex uint64_t पढ्ने मात्र
पहिलो_त्रुटि pererror.port_first_error hex uint64_t पढ्ने मात्र
first_malformed_req peror.malreq हेक्स 16-बाइट पढ्ने मात्र
स्पष्ट त्रुटि। (सबै त्रुटिहरू) विभिन्न uint64_t मात्र लेख्नुहोस्

नोट:
पोर्ट त्रुटिहरू खाली गर्न, तपाईंले हालको त्रुटिहरूको सही बिटमास्क लेख्नुपर्छ, पूर्वका लागिampले बिरालो त्रुटिहरू > स्पष्ट।

संशोधन इतिहास

कागजात संस्करण परिवर्तनहरू
2017.10.02 प्रारम्भिक रिलीज।

OPAE Intel FPGA लिनक्स यन्त्र चालक वास्तुकला गाइड

कागजातहरू / स्रोतहरू

intel OPAE FPGA लिनक्स यन्त्र चालक वास्तुकला [pdf] प्रयोगकर्ता गाइड
OPAE FPGA लिनक्स यन्त्र चालक वास्तुकला, OPAE FPGA, लिनक्स यन्त्र चालक वास्तुकला, चालक वास्तुकला, वास्तुकला

सन्दर्भहरू

एक टिप्पणी छोड्नुहोस्

तपाईंको इमेल ठेगाना प्रकाशित गरिने छैन। आवश्यक क्षेत्रहरू चिन्ह लगाइएका छन् *