ఇంటెల్-లోగో

intel OPAE FPGA Linux పరికర డ్రైవర్ ఆర్కిటెక్చర్

intel-OPAE-FPGA-Linux-Device-Driver-Architecture-product

OPAE Intel FPGA Linux పరికర డ్రైవర్ ఆర్కిటెక్చర్

OPAE Intel FPGA డ్రైవర్ Intel FPGA సొల్యూషన్స్‌తో కూడిన ప్లాట్‌ఫారమ్‌లపై FPGA యాక్సిలరేటర్‌లను కాన్ఫిగర్ చేయడానికి, లెక్కించడానికి, తెరవడానికి మరియు యాక్సెస్ చేయడానికి యూజర్-స్పేస్ అప్లికేషన్‌లకు ఇంటర్‌ఫేస్‌లను అందిస్తుంది మరియు FPGA రీకాన్ఫిగరేషన్, పవర్ మేనేజ్‌మెంట్ మరియు వర్చువలైజేషన్ వంటి సిస్టమ్-స్థాయి మేనేజ్‌మెంట్ ఫంక్షన్‌లను ప్రారంభిస్తుంది.

హార్డ్‌వేర్ ఆర్కిటెక్చర్

OS యొక్క పాయింట్ నుండి view, FPGA హార్డ్‌వేర్ సాధారణ PCIe పరికరం వలె కనిపిస్తుంది. FPGA పరికర మెమరీ ముందుగా నిర్వచించబడిన డేటా నిర్మాణాన్ని (పరికర ఫీచర్ జాబితా) ఉపయోగించి నిర్వహించబడుతుంది. FPGA పరికరం ద్వారా మద్దతిచ్చే ఫీచర్‌లు ఈ డేటా స్ట్రక్చర్‌ల ద్వారా బహిర్గతం చేయబడతాయి, ఈ క్రింది చిత్రంలో క్రింద వివరించబడ్డాయి:

FPGA PCIe పరికరం

intel-OPAE-FPGA-Linux-డివైస్-డ్రైవర్-ఆర్కిటెక్చర్-ఫిగ్- (1)

వర్చువల్ మిషన్‌లకు వ్యక్తిగత యాక్సిలరేటర్‌లను కేటాయించడానికి ఉపయోగించే వర్చువల్ ఫంక్షన్‌లను (VFలు) సృష్టించడానికి డ్రైవర్ PCIe SR-IOVకి మద్దతు ఇస్తుంది.

ఇంటెల్ కార్పొరేషన్. అన్ని హక్కులు ప్రత్యేకించబడ్డాయి. ఇంటెల్, ఇంటెల్ లోగో మరియు ఇతర ఇంటెల్ గుర్తులు ఇంటెల్ కార్పొరేషన్ లేదా దాని అనుబంధ సంస్థల ట్రేడ్‌మార్క్‌లు. Intel దాని FPGA మరియు సెమీకండక్టర్ ఉత్పత్తుల పనితీరును ఇంటెల్ యొక్క ప్రామాణిక వారంటీకి అనుగుణంగా ప్రస్తుత స్పెసిఫికేషన్‌లకు హామీ ఇస్తుంది, అయితే నోటీసు లేకుండా ఏ సమయంలోనైనా ఏదైనా ఉత్పత్తులు మరియు సేవలకు మార్పులు చేసే హక్కును కలిగి ఉంది. ఇంటెల్ వ్రాతపూర్వకంగా అంగీకరించినట్లు మినహా ఇక్కడ వివరించిన ఏదైనా సమాచారం, ఉత్పత్తి లేదా సేవ యొక్క అప్లికేషన్ లేదా ఉపయోగం నుండి ఉత్పన్నమయ్యే బాధ్యత లేదా బాధ్యతను Intel తీసుకోదు. ఇంటెల్ కస్టమర్‌లు ఏదైనా ప్రచురించబడిన సమాచారంపై ఆధారపడే ముందు మరియు ఉత్పత్తులు లేదా సేవల కోసం ఆర్డర్‌లు చేసే ముందు పరికర నిర్దేశాల యొక్క తాజా వెర్షన్‌ను పొందాలని సూచించారు.

ఇతర పేర్లు మరియు బ్రాండ్‌లు ఇతరుల ఆస్తిగా క్లెయిమ్ చేయబడవచ్చు.

వర్చువలైజ్డ్ FPGA PCIe పరికరం

intel-OPAE-FPGA-Linux-డివైస్-డ్రైవర్-ఆర్కిటెక్చర్-ఫిగ్- (2)

FPGA మేనేజ్‌మెంట్ ఇంజిన్ (FME)
FPGA మేనేజ్‌మెంట్ ఇంజిన్ పవర్ మరియు థర్మల్ మేనేజ్‌మెంట్, ఎర్రర్ రిపోర్టింగ్, రీకాన్ఫిగరేషన్, పెర్ఫార్మెన్స్ రిపోర్టింగ్ మరియు ఇతర ఇన్‌ఫ్రాస్ట్రక్చర్ ఫంక్షన్‌లను నిర్వహిస్తుంది. ప్రతి FPGAకి ఒక FME ఉంటుంది, ఇది ఎల్లప్పుడూ ఫిజికల్ ఫంక్షన్ (PF) ద్వారా యాక్సెస్ చేయబడుతుంది. యూజర్-స్పేస్ అప్లికేషన్‌లు ఓపెన్()ని ఉపయోగించి FMEకి ప్రత్యేకమైన యాక్సెస్‌ను పొందగలవు మరియు ఒక ప్రత్యేక వినియోగదారు (రూట్)గా క్లోజ్()ని ఉపయోగించి విడుదల చేయవచ్చు.

పోర్ట్
స్టాటిక్ FPGA ఫాబ్రిక్ ("FPGA ఇంటర్‌ఫేస్ మేనేజర్ (FIM)") మరియు యాక్సిలరేటర్ ఫంక్షన్ (AF)ని కలిగి ఉన్న పాక్షికంగా పునర్నిర్మించదగిన ప్రాంతం మధ్య ఇంటర్‌ఫేస్‌ను పోర్ట్ సూచిస్తుంది. పోర్ట్ సాఫ్ట్‌వేర్ నుండి యాక్సిలరేటర్‌కు కమ్యూనికేషన్‌ను నియంత్రిస్తుంది మరియు రీసెట్ మరియు డీబగ్ వంటి లక్షణాలను బహిర్గతం చేస్తుంది. PCIe పరికరం అనేక పోర్ట్‌లను కలిగి ఉండవచ్చు మరియు ప్రతి పోర్ట్‌ను FME పరికరంలో FPGA_FME_PORT_ASSIGN ioctlని ఉపయోగించి కేటాయించడం ద్వారా VF ద్వారా బహిర్గతం చేయవచ్చు.

యాక్సిలరేటర్ ఫంక్షన్ (AF) యూనిట్

  • యాక్సిలరేటర్ ఫంక్షన్ (AF) యూనిట్ పోర్ట్‌కు జోడించబడింది మరియు యాక్సిలరేటర్-నిర్దిష్ట నియంత్రణ రిజిస్టర్‌ల కోసం ఉపయోగించాల్సిన 256K MMIO ప్రాంతాన్ని బహిర్గతం చేస్తుంది.
  • వినియోగదారు-స్పేస్ అప్లికేషన్‌లు పోర్ట్ పరికరంలో ఓపెన్()ని ఉపయోగించడం ద్వారా పోర్ట్‌కి జోడించబడిన AFUకి ప్రత్యేకమైన యాక్సెస్‌ను పొందవచ్చు మరియు క్లోజ్()ని ఉపయోగించి దాన్ని విడుదల చేయవచ్చు.
  • వినియోగదారు-స్పేస్ అప్లికేషన్‌లు కూడా mmap() యాక్సిలరేటర్ MMIO ప్రాంతాలను చేయవచ్చు.

పాక్షిక పునర్నిర్మాణం
పైన పేర్కొన్నట్లుగా, యాక్సిలరేటర్ ఫంక్షన్ (AF) యొక్క పాక్షిక రీకాన్ఫిగరేషన్ ద్వారా యాక్సిలరేటర్‌లను మళ్లీ కాన్ఫిగర్ చేయవచ్చు. file. FPGA యొక్క ఖచ్చితమైన FIM మరియు టార్గెటెడ్ స్టాటిక్ రీజియన్ (పోర్ట్) కోసం యాక్సిలరేటర్ ఫంక్షన్ (AF) తప్పనిసరిగా రూపొందించబడి ఉండాలి; లేకుంటే, రీకాన్ఫిగరేషన్ ఆపరేషన్ విఫలమవుతుంది మరియు సిస్టమ్ అస్థిరతకు కారణం కావచ్చు. sysfs ద్వారా FME ద్వారా బహిర్గతం చేయబడిన ఇంటర్‌ఫేస్ IDతో AF హెడర్‌లో గుర్తించబడిన ఇంటర్‌ఫేస్ 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. PF నుండి N పోర్ట్‌లు విడుదలైన తర్వాత, SRIOV మరియు VFలను ప్రారంభించడానికి దిగువ ఆదేశాన్ని ఉపయోగించవచ్చు. ప్రతి VF AFUతో ఒక పోర్ట్ మాత్రమే కలిగి ఉంటుంది. echo N > PCI_DEVICE_PATH/sriov_numvfs
  3. VFల ద్వారా VMలకు పాస్ చేయండి.
  4. VF కింద AFU VMలోని అప్లికేషన్‌ల నుండి అందుబాటులో ఉంటుంది (VF లోపల అదే డ్రైవర్‌ని ఉపయోగించడం).

గమనిక:
VFకి FMEని కేటాయించడం సాధ్యం కాదు, కాబట్టి PR మరియు ఇతర నిర్వహణ విధులు PF ద్వారా మాత్రమే అందుబాటులో ఉంటాయి.

డ్రైవర్ ఆర్గనైజేషన్

PCIe మాడ్యూల్ పరికర డ్రైవర్

డ్రైవర్ ఆర్గనైజేషన్

intel-OPAE-FPGA-Linux-డివైస్-డ్రైవర్-ఆర్కిటెక్చర్-ఫిగ్- (3)

FPGA పరికరాలు సాధారణ PCIe పరికరాల వలె కనిపిస్తాయి; అందువల్ల, FPGA PCIe PF లేదా VF కనుగొనబడిన తర్వాత FPGA PCIe పరికర డ్రైవర్ (intel-FPGA-PCI.ko) ఎల్లప్పుడూ లోడ్ చేయబడుతుంది. ఈ డ్రైవర్ డ్రైవర్ ఆర్కిటెక్చర్‌లో మౌలిక సదుపాయాల పాత్రను పోషిస్తాడు. ఇది:

  • ఫీచర్ పరికరాలకు పేరెంట్‌గా FPGA కంటైనర్ పరికరాన్ని సృష్టిస్తుంది.
  • ఫీచర్ పరికరాలను మరియు వాటి ఉప-లక్షణాలను కనుగొనడానికి మరియు కంటైనర్ పరికరం క్రింద వాటి కోసం ప్లాట్‌ఫారమ్ పరికరాలను రూపొందించడానికి PCIe పరికరం BAR మెమరీలో అమలు చేయబడిన పరికర ఫీచర్ జాబితా ద్వారా నడుస్తుంది.
  • SR-IOVకి మద్దతు ఇస్తుంది.
  • ఫీచర్ డివైజ్ ఇన్‌ఫ్రాస్ట్రక్చర్‌ను పరిచయం చేస్తుంది, ఇది ఉప-ఫీచర్‌ల కోసం ఆపరేషన్‌లను సంగ్రహిస్తుంది మరియు ఫీచర్ డివైజ్ డ్రైవర్‌లకు సాధారణ ఫంక్షన్‌లను బహిర్గతం చేస్తుంది.

PCIe మాడ్యూల్ పరికర డ్రైవర్ విధులు

  • PCIe డిస్కవరీ, డివైజ్ ఎన్యూమరేషన్ మరియు ఫీచర్ డిస్కవరీని కలిగి ఉంటుంది.
  • మాతృ పరికరం, FPGA మేనేజ్‌మెంట్ ఇంజిన్ (FME) మరియు పోర్ట్ కోసం sysfs డైరెక్టరీలను సృష్టిస్తుంది.
  • ప్లాట్‌ఫారమ్ డ్రైవర్ ఇన్‌స్టాన్స్‌లను సృష్టిస్తుంది, దీని వలన Linux కెర్నల్ వాటి సంబంధిత ప్లాట్‌ఫారమ్ మాడ్యూల్ డ్రైవర్‌లను లోడ్ చేస్తుంది.

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) నోటిఫికేషన్ మరియు రిమోట్ డీబగ్ ఫంక్షన్‌లపై ప్రాథమిక రీసెట్ నియంత్రణతో సహా వ్యక్తిగత యాక్సిలరేటర్‌లను యాక్సెస్ చేయడానికి వినియోగదారు-స్పేస్ అప్లికేషన్‌లకు ఇంటర్‌ఫేస్ అందించడం ఈ మాడ్యూల్ యొక్క ప్రధాన విధి ( పైన చుడండి).

ఇంటిగ్రేటెడ్ FPGAతో Intel Xeon® ప్రాసెసర్ కోసం యాక్సిలరేషన్ స్టాక్ ద్వారా మాత్రమే UMsg మద్దతునిస్తుంది.

పోర్ట్ ప్లాట్‌ఫారమ్ మాడ్యూల్ పరికర డ్రైవర్ విధులు

  • పోర్ట్ క్యారెక్టర్ పరికర నోడ్‌ను సృష్టిస్తుంది.
  • పోర్ట్ sysfsని సృష్టిస్తుంది files మరియు పోర్ట్ sysfsని అమలు చేస్తుంది file ఉపకరణాలు.
  • పోర్ట్ ప్రైవేట్ ఫీచర్ సబ్-డ్రైవర్‌లను అమలు చేస్తుంది.
  • పోర్ట్ ప్రైవేట్ ఫీచర్ సబ్ డ్రైవర్లు:
    • పోర్ట్ హెడర్
    • AFU
    • పోర్ట్ లోపం
    • UMsg(2)
    • సిగ్నల్ ట్యాప్

అప్లికేషన్ FPGA పరికర గణన
/sys/class/fpga క్రింద sysfs సోపానక్రమం నుండి 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/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
};
స్టాటిక్ స్ట్రక్ట్ ఐడిఆర్ fpga_ids[FPGA_ID_MAX];
నిర్మాణం fpga_chardev_info {
const char *పేరు;
dev_t devt;
};
నిర్మాణం fpga_chardev_info fpga_chrdevs[] = {
{ .name = FPGA_FEATURE_DEV_FME},
{ .name = FPGA_FEATURE_DEV_PORT},
};
స్టాటిక్ స్ట్రక్ట్ క్లాస్ *fpga_class;
స్టాటిక్ స్ట్రక్ట్ pci_device_id cci_pcie_id_tbl[] = {{
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_RCiEP0_MCP),},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_VF_MCP),},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_RCiEP0_SKX_P),},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_VF_SKX_P),},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_RCiEP0_DCP),},
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCIe_DEVICE_ID_VF_DCP),},
{0,}
};
స్టాటిక్ స్ట్రక్ట్ pci_driver cci_pci_driver = {{
.పేరు = DRV_NAME,
.id_table = cci_pcie_id_tbl,
.ప్రోబ్ = cci_pci_probe,
.తొలగించు = cci_pci_remove,
.sriov_configure = cci_pci_sriov_configure
};
నిర్మాణం cci_drvdata {
int device_id;
struct పరికరం *fme_dev;
స్ట్రక్ట్ మ్యూటెక్స్ లాక్;
struct list_head port_dev_list;
int released_port_num;
struct list_head ప్రాంతాలు;
};
struct build_feature_devs_info {
struct pci_dev *pdev;
శూన్యం __iomem *ioaddr;
శూన్యం __iomem *ioend;
int కరెంట్_బార్;
శూన్యం __iomem *pfme_hdr;
struct పరికరం *parent_dev;
struct platform_device *feature_dev;
};

ఎన్యుమరేషన్ ఫ్లో

  • ccidrv_init()
    • idr_init()ని ఉపయోగించి fpga_idలను ప్రారంభించండి.
    • 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()
    • struct build_feature_devs_infoని కేటాయించండి, దాన్ని ప్రారంభించండి.
      .parent_dev అనేది FME మరియు పోర్ట్ sysfs డైరెక్టరీలను కలిగి ఉన్న పేరెంట్ sysfs డైరెక్టరీకి (intel-fpga-dev.id) సెట్ చేయబడింది.
  • 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కి సెట్ చేయబడింది.
    • ఫీచర్_dev.resourceలో నిర్మాణ వనరుల శ్రేణిని కేటాయించండి.
  • struct feature_platform_dataని కేటాయించండి, దాన్ని ప్రారంభించండి మరియు ఫీచర్_dev.dev.platform_dataలో పాయింటర్‌ను నిల్వ చేయండి
    • create_feature_instance() build_info_add_sub_feature()
    • ఫీచర్_dev.resource[FME_FEATURE_ID_HEADER]ని ప్రారంభించండి.
    • feature_platform_data_add()
    • ఫీచర్_ప్లాట్‌ఫార్మ్_డేటా.ఫీచర్స్[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కి సెట్ చేయబడింది.
    • ఫీచర్_dev.resourceలో struct వనరు యొక్క శ్రేణిని కేటాయించండి.
    • struct feature_platform_dataని కేటాయించండి, దాన్ని ప్రారంభించండి మరియు ఫీచర్_dev.dev.platform_dataలో పాయింటర్‌ను నిల్వ చేయండి
  • build_info_commit_dev()
    • struct cci_drvdata.port_dev_listలోని పోర్ట్‌ల జాబితాకు పోర్ట్ కోసం struct feature_platform_data.nodeని జోడించండి
  • create_feature_instance() build_info_add_sub_feature()
    • ఫీచర్_dev.resource[PORT_FEATURE_ID_HEADER]ని ప్రారంభించండి.
  • feature_platform_data_add()
    • ఫీచర్_ప్లాట్‌ఫార్మ్_డేటా.ఫీచర్‌లను ప్రారంభించండి[PORT_FEATURE_ID_HEADER], .fops మినహా అన్నీ.
  • parse_feature() parse_feature_afus() parse_feature_port_uafu()
    • AFU ఎదురైనప్పుడు:
  • create_feature_instance() build_info_add_sub_feature()
    • ఫీచర్_dev.resource[PORT_FEATURE_ID_UAFU]ని ప్రారంభించండి.
  • feature_platform_data_add()
    • ఫీచర్_ప్లాట్‌ఫార్మ్_డేటా.ఫీచర్‌లను[PORT_FEATURE_ID_UAFU] ప్రారంభించండి, .fops మినహా అన్నీ.
  • parse_feature() parse_feature_private() parse_feature_fme_private()
    • FME ప్రైవేట్ ఫీచర్ ఎదురైనప్పుడు:
  • create_feature_instance() build_info_add_sub_feature()
    • ఫీచర్_dev.resource[id]ని ప్రారంభించండి.
  • feature_platform_data_add()
    • ఫీచర్_ప్లాట్‌ఫార్మ్_డేటా.ఫీచర్స్[ఐడి], .ఫాప్స్ మినహా అన్నీ ప్రారంభించండి.
  • 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() ఫ్లోను అమలు చేయండి.
  • హెడర్‌లోని ప్రతి పోర్ట్ ఎంట్రీలో పేర్కొన్న BARని ఉపయోగించండి.

FME ప్లాట్‌ఫారమ్ పరికరం ప్రారంభించడం
ఈ విభాగం ఓవర్ ఇస్తుందిview intel-fpga-fme.ko ద్వారా నిర్వహించబడే FME పరికర ప్రారంభానికి కోడ్ ప్రవాహం. ప్రధాన డేటా నిర్మాణాలు మరియు విధులు హైలైట్ చేయబడ్డాయి. ఈ విభాగం ఉత్తమంగా ఎప్పుడు అనుసరించబడుతుంది viewదానితో పాటు సోర్స్ కోడ్ (fme-main.c)

FME ప్లాట్‌ఫారమ్ పరికర డేటా నిర్మాణాలు

struct feature_ops {
int (*init)(struct platform_device *pdev, struct ఫీచర్ *ఫీచర్);
int (*uinit)(struct platform_device *pdev, struct ఫీచర్ *ఫీచర్);
పొడవైన (*ioctl)(struct platform_device *pdev, struct ఫీచర్ *ఫీచర్,
సంతకం చేయని int cmd, సంతకం చేయని లాంగ్ ఆర్గ్);
int (*test)(struct platform_device *pdev, struct ఫీచర్ *ఫీచర్);
};
నిర్మాణ లక్షణం {
const char *పేరు;
int resource_index;
శూన్యం __iomem *ioaddr;
struct feature_ops *ops;
};
struct feature_platform_data {
స్ట్రక్ట్ లిస్ట్_హెడ్ నోడ్;
స్ట్రక్ట్ మ్యూటెక్స్ లాక్;
సంతకం చేయని పొడవైన dev_status;
struct cdev cdev;
struct platform_device *dev;
సంతకం చేయని int disable_count;
void * ప్రైవేట్;
పూర్ణాంక సంఖ్య;
int (*config_port)(struct platform_device *, u32, bool);
struct platform_device *(*fpga_for_each_port)(struct platform_device *,
void *, int (*match)(struct platform_device *, void *)); నిర్మాణం
ఫీచర్ ఫీచర్లు[0];
};
struct perf_object {
int id;
const struct attribute_group **attr_groups;
struct పరికరం *fme_dev;
స్ట్రక్ట్ లిస్ట్_హెడ్ నోడ్;
struct list_head పిల్లలు;
struct kobject kobj;
};
నిర్మాణం fpga_fme {
u8 పోర్ట్_ఐడి;
u64 pr_err;
struct పరికరం *dev_err;
struct perf_object *perf_dev;
struct feature_platform_data *pdata;
};

FME ప్లాట్‌ఫారమ్ పరికర ప్రారంభ విధానం

FME ఇనిషియలైజేషన్ ఫ్లోintel-OPAE-FPGA-Linux-డివైస్-డ్రైవర్-ఆర్కిటెక్చర్-ఫిగ్- (4)

  • fme_probe() fme_dev_init()
    • struct fpga_fmeని ప్రారంభించి, ఫీచర్_ప్లాట్‌ఫార్మ్_డేటా.ప్రైవేట్ ఫీల్డ్‌లో నిల్వ చేయండి.
  • fme_probe() fpga_dev_feature_init() feature_instance_init()
    • ప్రతి జనాభా ఫీచర్ కోసం ఫీచర్_ప్లాట్‌ఫార్మ్_డేటా.ఫీచర్‌లలో స్ట్రక్ట్ ఫీచర్_ఓప్స్‌ని సేవ్ చేయండి.
    • struct నుండి పరీక్ష ఫంక్షన్ ఏదైనా ఉంటే కాల్ చేయండి.
    • struct నుండి init ఫంక్షన్‌కు కాల్ చేయండి.
  • fme_probe() fpga_register_dev_ops()
    • FME క్యారెక్టర్ పరికర నోడ్‌ను సృష్టించండి, స్ట్రక్ట్‌ను నమోదు చేయండి file_ఆపరేషన్లు.

పోర్ట్ ప్లాట్‌ఫారమ్ పరికరం ప్రారంభించడం
ఈ విభాగం ఓవర్ ఇస్తుందిview intel-fpga-afu.ko ద్వారా పోర్ట్ పరికర ప్రారంభానికి కోడ్ ప్రవాహం. ప్రధాన డేటా నిర్మాణాలు మరియు విధులు హైలైట్ చేయబడ్డాయి. ఈ విభాగం ఉత్తమంగా ఎప్పుడు అనుసరించబడుతుంది viewదానితో పాటు సోర్స్ కోడ్ (afu.c)

పోర్ట్ ప్లాట్‌ఫారమ్ పరికర డేటా నిర్మాణాలు

struct feature_ops {
int (*init)(struct platform_device *pdev, struct ఫీచర్ *ఫీచర్);
int (*uinit)(struct platform_device *pdev, struct ఫీచర్ *ఫీచర్);
పొడవైన (*ioctl)(struct platform_device *pdev, struct ఫీచర్ *ఫీచర్,
సంతకం చేయని int cmd, సంతకం చేయని లాంగ్ ఆర్గ్);
int (*test)(struct platform_device *pdev, struct ఫీచర్ *ఫీచర్);
};
నిర్మాణ లక్షణం {
const char *పేరు;
int resource_index;
శూన్యం __iomem *ioaddr;
struct feature_ops *ops;
};
struct feature_platform_data {
స్ట్రక్ట్ లిస్ట్_హెడ్ నోడ్;
స్ట్రక్ట్ మ్యూటెక్స్ లాక్;
సంతకం చేయని పొడవైన dev_status;
struct cdev cdev;
struct platform_device *dev;
సంతకం చేయని int disable_count;
void * ప్రైవేట్;
పూర్ణాంక సంఖ్య;
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 *));
struct ఫీచర్ ఫీచర్లు[0];
};
నిర్మాణం fpga_afu_region {
u32 సూచిక;
u32 జెండాలు;
u64 పరిమాణం;
u64 ఆఫ్‌సెట్;
u64 భౌతిక;
స్ట్రక్ట్ లిస్ట్_హెడ్ నోడ్;
};
నిర్మాణం fpga_afu_dma_region {
u64 user_addr;
u64 పొడవు;
u64 iova;
struct పేజీ **పేజీలు;
struct rb_node నోడ్;
bool in_use;
};
నిర్మాణం fpga_afu {
u64 రీజియన్_కర్_ఆఫ్‌సెట్;
పూర్ణ సంఖ్య_ప్రాంతాలు;
u8 num_umsgs;
struct list_head ప్రాంతాలు;
struct rb_root dma_regions;
struct feature_platform_data *pdata;
};

పోర్ట్ ప్లాట్‌ఫారమ్ డివైస్ ఇనిషియలైజేషన్ ఫ్లో

పోర్ట్ ఇనిషియలైజేషన్ ఫ్లోintel-OPAE-FPGA-Linux-డివైస్-డ్రైవర్-ఆర్కిటెక్చర్-ఫిగ్- (5)

  • afu_probe() afu_dev_init()
    • struct fpga_afuని ప్రారంభించి, దాన్ని ఫీచర్_ప్లాట్‌ఫార్మ్_డేటా.ప్రైవేట్ ఫీల్డ్‌లో నిల్వ చేయండి.
  • afu_probe() fpga_dev_feature_init() feature_instance_init()
    • ప్రతి జనాభా ఫీచర్ కోసం ఫీచర్_ప్లాట్‌ఫార్మ్_డేటా.ఫీచర్‌లలో స్ట్రక్ట్ ఫీచర్_ఓప్స్‌ని సేవ్ చేయండి.
    • struct నుండి పరీక్ష ఫంక్షన్ ఏదైనా ఉంటే కాల్ చేయండి.
    • struct నుండి init ఫంక్షన్‌కు కాల్ చేయండి.
  • afu_probe() fpga_register_dev_ops()
    • పోర్ట్ క్యారెక్టర్ పరికర నోడ్‌ను సృష్టించండి, స్ట్రక్ట్‌ను నమోదు చేయండి file_ఆపరేషన్లు.

FME IOCTLలు
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; // ఇన్: sizeof(struct fpga_fme_port_release)
__u32 జెండాలు; // లో: తప్పనిసరిగా 0 ఉండాలి
__u32 పోర్ట్_ఐడి; // ఇన్: పోర్ట్ ID (0 నుండి) విడుదల చేయడానికి.
};

FPGA_FME_PORT_ASSIGN—arg ఒక పాయింటర్:

నిర్మాణం fpga_fme_port_assign {
__u32 argsz; // in: sizeof(struct fpga_fme_port_assign)
__u32 జెండాలు; // లో: తప్పనిసరిగా 0 ఉండాలి
__u32 పోర్ట్_ఐడి; // ఇన్: కేటాయించడానికి పోర్ట్ 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 పోర్ట్_ఐడి; // ఇన్: పోర్ట్ ID (0 నుండి)
__u32 బఫర్_పరిమాణం; // ఇన్: బైట్‌లలో బిట్‌స్ట్రీమ్ బఫర్ పరిమాణం. తప్పనిసరిగా 4-బైట్ ఉండాలి
సమలేఖనమైంది.
__u64 బఫర్_చిరునామా; // ఇన్: బిట్‌స్ట్రీమ్ బఫర్ యొక్క ప్రాసెస్ చిరునామా
__u64 స్థితి; // అవుట్: లోపం స్థితి (బిట్‌మాస్క్)
};

పోర్ట్ IOCTLలు
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; // లో: sizeof(struct fpga_port_info)
__u32 జెండాలు; // అవుట్: 0ని అందిస్తుంది
__u32 సంఖ్య_ప్రాంతాలు; // అవుట్: MMIO ప్రాంతాల సంఖ్య, 2 (AFU కోసం 1 మరియు 1 కోసం
STP)
__u32 num_umsgs; // అవుట్: హార్డ్‌వేర్ ద్వారా మద్దతిచ్చే UMsgల సంఖ్య
};

FPGA_PORT_GET_REGION_INFO—arg ఒక పాయింటర్:

నిర్మాణం fpga_port_region_info {
__u32 argsz; // లో: sizeof(struct fpga_port_region_info)
__u32 జెండాలు; // అవుట్: (బిట్‌మాస్క్) {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 జెండాలు; // in: తప్పనిసరిగా 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; // in: IO వర్చువల్ చిరునామా మునుపటి ద్వారా అందించబడింది
FPGA_PORT_DMA_MAP };

  • FPGA_PORT_RESET—arg తప్పనిసరిగా NULL అయి ఉండాలి.
  • FPGA_PORT_UMSG_ENABLE—arg తప్పనిసరిగా NULL అయి ఉండాలి.
  • FPGA_PORT_UMSG_DISABLE—ఆర్గ్‌లు తప్పనిసరిగా NULL అయి ఉండాలి.

FPGA_PORT_UMSG_SET_MODE—arg ఒక పాయింటర్:

నిర్మాణం fpga_port_umsg_cfg {
__u32 argsz; // in: sizeof(struct fpga_port_umsg_cfg)
__u32 జెండాలు; // లో: తప్పనిసరిగా 0 ఉండాలి
__u32 సూచన_బిట్‌మ్యాప్; // ఇన్: 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; // ఇన్: sizeof(struct fpga_port_umsg_base_addr)
    • u32 జెండాలు; // లో: తప్పనిసరిగా 0 ఉండాలి
    • u64 iova; // ఇన్: FPGA_PORT_DMA_MAP నుండి IO వర్చువల్ చిరునామా. };

గమనిక:

  • పోర్ట్ లోపాలను క్లియర్ చేయడానికి, మీరు ప్రస్తుత ఎర్రర్‌ల యొక్క ఖచ్చితమైన బిట్‌మాస్క్‌ను వ్రాయాలి, ఉదాహరణకుample, పిల్లి లోపాలు > క్లియర్
  • ఇంటిగ్రేటెడ్ FPGAతో ఇంటెల్ జియాన్ ప్రాసెసర్ కోసం యాక్సిలరేషన్ స్టాక్ ద్వారా మాత్రమే UMsg మద్దతు ఇస్తుంది.

సిస్ఎఫ్ఎస్ Files

FME హెడర్ sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/

సిస్ఎఫ్ఎస్ file mmio ఫీల్డ్ రకం యాక్సెస్
పోర్టుల_సంఖ్య fme_header.capability.num_ports దశాంశ పూర్ణాంకం చదవడానికి మాత్రమే
కాష్_సైజు fme_header.capability.cache_size దశాంశ పూర్ణాంకం చదవడానికి మాత్రమే
వెర్షన్ fme_header.capability.fabric_verid దశాంశ పూర్ణాంకం చదవడానికి మాత్రమే
socket_id fme_header.capability.socket_id దశాంశ పూర్ణాంకం చదవడానికి మాత్రమే
bitstream_id fme_header.bitstream_id హెక్స్ uint64_t చదవడానికి మాత్రమే
బిట్‌స్ట్రీమ్_మెటాడేటా fme_header.bitstream_md హెక్స్ uint64_t చదవడానికి మాత్రమే

FME థర్మల్ మేనేజ్‌మెంట్ sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/

సిస్ఎఫ్ఎస్ file mmio ఫీల్డ్ రకం యాక్సెస్
థ్రెషోల్డ్1 thermal.threshold.tmp_thshold1 దశాంశ పూర్ణాంకం వినియోగదారు: చదవడానికి-మాత్రమే రూట్: చదవడానికి-వ్రాయడానికి
థ్రెషోల్డ్2 thermal.threshold.tmp_thshold2 దశాంశ పూర్ణాంకం వినియోగదారు: చదవడానికి-మాత్రమే రూట్: చదవడానికి-వ్రాయడానికి
త్రెషోల్డ్_ట్రిప్ thermal.threshold.therm_trip_thshold దశాంశ పూర్ణాంకం చదవడానికి మాత్రమే
థ్రెషోల్డ్1_ చేరుకుంది thermal.threshold.thshold1_status దశాంశ పూర్ణాంకం చదవడానికి మాత్రమే
థ్రెషోల్డ్2_ చేరుకుంది thermal.threshold.thshold2_status దశాంశ పూర్ణాంకం చదవడానికి మాత్రమే
థ్రెషోల్డ్1_విధానం థర్మల్. 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 హెక్స్ uint64_t చదవడానికి మాత్రమే
థ్రెషోల్డ్1 శక్తి.త్రెషోల్డ్.థ్రెషోల్డ్1 హెక్స్ uint64_t వినియోగదారు: చదవడానికి-మాత్రమే రూట్: చదవడానికి-వ్రాయడానికి
థ్రెషోల్డ్2 శక్తి.త్రెషోల్డ్.థ్రెషోల్డ్2 హెక్స్ uint64_t వినియోగదారు: చదవడానికి-మాత్రమే రూట్: చదవడానికి-వ్రాయడానికి
థ్రెషోల్డ్1_స్థితి power.threshold.threshold1_status దశాంశ సంతకం చేయబడలేదు చదవడానికి మాత్రమే
థ్రెషోల్డ్2_స్థితి 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 హెక్స్ uint64_t చదువు రాయి
pcie1_ లోపాలు gerror.pcie1_err హెక్స్ uint64_t చదువు రాయి
ఇంజెక్ట్_లోపం gerror.ras_error_inj హెక్స్ uint64_t చదువు రాయి

intel-fpga-dev.i/intel-fpga-fme.j/errors/fme-errors/

సిస్ఎఫ్ఎస్ file mmio ఫీల్డ్ రకం యాక్సెస్
లోపాలు 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 ఎర్రర్‌లను క్లియర్ చేయడానికి, మీరు ప్రస్తుత ఎర్రర్‌ల యొక్క ఖచ్చితమైన బిట్‌మాస్క్‌ను తప్పనిసరిగా వ్రాయాలి, ఉదాహరణకుample cat లోపాలు > క్లియర్.

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 హెక్స్ uint64_t చదవడానికి మాత్రమే

intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (FPGAలతో Intel Xeon CPU కోసం యాక్సిలరేషన్ స్టాక్‌కు చెల్లదు)

సిస్ఎఫ్ఎస్ file mmio ఫీల్డ్ రకం యాక్సెస్
ఫ్రీజ్ gperf.ch_ctl.freeze దశాంశ పూర్ణాంకం చదువు రాయి
చదవండి_హిట్ gperf.CACHE_RD_HIT హెక్స్ uint64_t చదవడానికి మాత్రమే
చదవలేదు gperf.CACHE_RD_MISS హెక్స్ uint64_t చదవడానికి మాత్రమే
వ్రాయండి_హిట్ gperf.CACHE_WR_HIT హెక్స్ uint64_t చదవడానికి మాత్రమే
వ్రాయండి_మిస్ gperf.CACHE_WR_MISS హెక్స్ uint64_t చదవడానికి మాత్రమే
హోల్డ్_రిక్వెస్ట్ gperf.CACHE_HOLD_REQ హెక్స్ uint64_t చదవడానికి మాత్రమే
tx_req_stall gperf.CACHE_TX_REQ_STALL హెక్స్ uint64_t చదవడానికి మాత్రమే
సిస్ఎఫ్ఎస్ file mmio ఫీల్డ్ రకం యాక్సెస్
rx_req_stall gperf.CACHE_RX_REQ_STALL హెక్స్ uint64_t చదవడానికి మాత్రమే
data_write_port_contention gperf.CACHE_DATA_WR_PORT_CONTEN హెక్స్ uint64_t చదవడానికి మాత్రమే
tag_write_port_contention gperf.CACHE_TAG_WR_PORT_CONTEN హెక్స్ uint64_t చదవడానికి మాత్రమే

intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (FPGAలతో Intel Xeon CPU కోసం యాక్సిలరేషన్ స్టాక్‌కు చెల్లదు)

సిస్ఎఫ్ఎస్ file mmio ఫీల్డ్ రకం యాక్సెస్
ఫ్రీజ్ gperf.vtd_ctl.freeze దశాంశ పూర్ణాంకం వినియోగదారు: చదవడానికి-మాత్రమే రూట్: చదవడానికి-వ్రాయడానికి

intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (FPGAలతో Intel Xeon CPU కోసం యాక్సిలరేషన్ స్టాక్‌కు చెల్లదు)

సిస్ఎఫ్ఎస్ file mmio ఫీల్డ్ రకం యాక్సెస్
రీడ్_లావాదేవీ gperf.VTD_AFU0_MEM_RD_TRANS హెక్స్ uint64_t చదవడానికి మాత్రమే
వ్రాత_లావాదేవీ gperf.VTD_AFU0_MEM_WR_TRANS హెక్స్ uint64_t చదవడానికి మాత్రమే
tlb_రీడ్_హిట్ gperf.VTD_AFU0_TLB_RD_HIT హెక్స్ uint64_t చదవడానికి మాత్రమే
tlb_write_hit gperf.VTD_AFU0_TLB_WR_HIT హెక్స్ uint64_t చదవడానికి మాత్రమే

intel-fpga-dev.i/intel-fpga-fme.j/dperf/fabric/

సిస్ఎఫ్ఎస్ file mmio ఫీల్డ్ రకం యాక్సెస్
ప్రారంభించు gperf.fab_ctl.(ఎనేబుల్ చేయబడింది) దశాంశ పూర్ణాంకం వినియోగదారు: చదవడానికి-మాత్రమే రూట్: చదవడానికి-వ్రాయడానికి
ఫ్రీజ్ gperf.fab_ctl.freeze దశాంశ పూర్ణాంకం వినియోగదారు: చదవడానికి-మాత్రమే రూట్: చదవడానికి-వ్రాయడానికి
pcie0_చదవండి gperf.FAB_PCIE0_RD హెక్స్ uint64_t చదవడానికి మాత్రమే
pcie0_write gperf.FAB_PCIE0_WR హెక్స్ uint64_t చదవడానికి మాత్రమే
pcie1_చదవండి gperf.FAB_PCIE1_RD హెక్స్ uint64_t చదవడానికి మాత్రమే
pcie1_write gperf.FAB_PCIE1_WR హెక్స్ uint64_t చదవడానికి మాత్రమే
upi_రీడ్ gperf.FAB_UPI_RD హెక్స్ uint64_t చదవడానికి మాత్రమే
upi_write gperf.FAB_UPI_WR హెక్స్ uint64_t చదవడానికి మాత్రమే

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

సిస్ఎఫ్ఎస్ file mmio ఫీల్డ్ రకం యాక్సెస్
pcie0_చదవండి gperf.FAB_PCIE0_RD హెక్స్ uint64_t చదవడానికి మాత్రమే
pcie0_write gperf.FAB_PCIE0_WR హెక్స్ uint64_t చదవడానికి మాత్రమే
pcie1_చదవండి gperf.FAB_PCIE1_RD హెక్స్ uint64_t చదవడానికి మాత్రమే
pcie1_write gperf.FAB_PCIE1_WR హెక్స్ uint64_t చదవడానికి మాత్రమే
upi_రీడ్ gperf.FAB_UPI_RD హెక్స్ uint64_t చదవడానికి మాత్రమే
upi_write gperf.FAB_UPI_WR హెక్స్ uint64_t చదవడానికి మాత్రమే

పోర్ట్ హెడర్ sysfs files
intel-fpga-dev.i/intel-fpga-port.k/

సిస్ఎఫ్ఎస్ file mmio ఫీల్డ్ రకం యాక్సెస్
id port_header.capability.port_number దశాంశ పూర్ణాంకం చదవడానికి మాత్రమే
ltr 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 ఫీల్డ్ రకం యాక్సెస్
లోపాలు perror.port_error హెక్స్ uint64_t చదవడానికి మాత్రమే
మొదటి_తప్పు perror.port_first_error హెక్స్ uint64_t చదవడానికి మాత్రమే
మొదటి_తక్కువ_రూపం perror.malreq హెక్స్ 16-బైట్ చదవడానికి మాత్రమే
స్పష్టమైన తప్పు.(అన్ని లోపాలు) వివిధ uint64_t వ్రాయడానికి మాత్రమే

గమనిక:
పోర్ట్ లోపాలను క్లియర్ చేయడానికి, మీరు ప్రస్తుత ఎర్రర్‌ల యొక్క ఖచ్చితమైన బిట్‌మాస్క్‌ను తప్పనిసరిగా వ్రాయాలి, ఉదాహరణకుample cat లోపాలు > క్లియర్.

పునర్విమర్శ చరిత్ర

డాక్యుమెంట్ వెర్షన్ మార్పులు
2017.10.02 ప్రారంభ విడుదల.

OPAE Intel FPGA Linux పరికర డ్రైవర్ ఆర్కిటెక్చర్ గైడ్

పత్రాలు / వనరులు

intel OPAE FPGA Linux పరికర డ్రైవర్ ఆర్కిటెక్చర్ [pdf] యూజర్ గైడ్
OPAE FPGA లైనక్స్ డివైస్ డ్రైవర్ ఆర్కిటెక్చర్, OPAE FPGA, Linux డివైస్ డ్రైవర్ ఆర్కిటెక్చర్, డ్రైవర్ ఆర్కిటెక్చర్, ఆర్కిటెక్చర్

సూచనలు

వ్యాఖ్యానించండి

మీ ఇమెయిల్ చిరునామా ప్రచురించబడదు. అవసరమైన ఫీల్డ్‌లు గుర్తించబడ్డాయి *