intel-ලාංඡනය

intel OPAE FPGA Linux Device Driver Architecture

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-Device-Driver-Architecture-fig- (1)

අථත්‍ය යන්ත්‍ර සඳහා තනි ත්වරණකාරක පැවරීමට භාවිතා කළ හැකි අතථ්‍ය කාර්යයන් (VFs) නිර්මාණය කිරීමට ධාවකය PCIe SR-IOV සඳහා සහය දක්වයි.

ඉන්ටෙල් සංස්ථාව. සියලුම හිමිකම් ඇවිරිණි. Intel, Intel ලාංඡනය සහ අනෙකුත් Intel සලකුණු Intel Corporation හෝ එහි අනුබද්ධිත සමාගම්වල වෙළඳ ලකුණු වේ. Intel විසින් එහි FPGA සහ අර්ධ සන්නායක නිෂ්පාදනවල ක්‍රියාකාරීත්වය Intel හි සම්මත වගකීම් සහතිකයට අනුව වත්මන් පිරිවිතරයන්ට සහතික කරන නමුත් දැනුම් දීමකින් තොරව ඕනෑම වේලාවක ඕනෑම භාණ්ඩයක් සහ සේවාවක් සඳහා වෙනස්කම් කිරීමට අයිතිය රඳවා තබා ගනී. Intel විසින් ලිඛිතව ලිඛිතව එකඟ වී ඇති පරිදි හැර මෙහි විස්තර කර ඇති ඕනෑම තොරතුරක්, නිෂ්පාදනයක් හෝ සේවාවක් යෙදුමෙන් හෝ භාවිතා කිරීමෙන් පැන නගින කිසිදු වගකීමක් හෝ වගකීමක් Intel භාර නොගනී. Intel පාරිභෝගිකයින්ට ඕනෑම ප්‍රකාශිත තොරතුරු මත විශ්වාසය තැබීමට පෙර සහ නිෂ්පාදන හෝ සේවා සඳහා ඇණවුම් කිරීමට පෙර උපාංග පිරිවිතරවල නවතම අනුවාදය ලබා ගැනීමට උපදෙස් දෙනු ලැබේ.

වෙනත් නම් සහ වෙළඳ නාම වෙනත් අයගේ දේපළ ලෙස හිමිකම් පෑමට හැකිය.

Virtualized FPGA PCIe උපාංගය

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

FPGA කළමනාකරණ එන්ජිම (FME)
FPGA කළමනාකරණ එන්ජිම බලය සහ තාප කළමනාකරණය, දෝෂ වාර්තා කිරීම, නැවත සකස් කිරීම, කාර්ය සාධන වාර්තා කිරීම සහ අනෙකුත් යටිතල පහසුකම් කාර්යයන් ඉටු කරයි. සෑම FPGA එකකම FME එකක් ඇත, එය සෑම විටම භෞතික ක්‍රියාකාරිත්වය (PF) හරහා ප්‍රවේශ වේ. පරිශීලක-අවකාශ යෙදුම් වලට විවෘත () භාවිතයෙන් FME වෙත සුවිශේෂී ප්‍රවේශය ලබා ගත හැකි අතර, වරප්‍රසාද ලත් පරිශීලකයෙකු (root) ලෙස close() භාවිතයෙන් එය මුදා හැරිය හැක.

වරාය
වරායක් නියෝජනය කරන්නේ ස්ථිතික FPGA රෙදි ("FPGA අතුරුමුහුණත් කළමනාකරු (FIM)") සහ ත්වරණ ශ්‍රිතයක් (AF) අඩංගු අර්ධ වශයෙන් නැවත සකස් කළ හැකි කලාපයක් අතර අතුරු මුහුණතයි. වරාය මෘදුකාංගයේ සිට ඇක්සලරේටරය දක්වා සන්නිවේදනය පාලනය කරන අතර යළි පිහිටුවීම සහ දෝෂහරණය වැනි විශේෂාංග නිරාවරණය කරයි. PCIe උපාංගයකට වරායන් කිහිපයක් තිබිය හැකි අතර, FME උපාංගයේ FPGA_FME_PORT_ASSIGN ioctl භාවිතයෙන් එය පැවරීමෙන් සෑම වරායක්ම VF හරහා නිරාවරණය කළ හැක.

Accelerator Function (AF) ඒකකය

  • Accelerator Function (AF) ඒකකයක් වරායකට අනුයුක්ත කර ඇති අතර ත්වරණකාරක-විශේෂිත පාලන රෙජිස්ටර් සඳහා භාවිතා කිරීමට 256K MMIO කලාපයක් නිරාවරණය කරයි.
  • පරිශීලක-අවකාශ යෙදුම් වලට Port උපාංගයේ open() භාවිතා කිරීමෙන් වරායකට අමුණා ඇති AFU වෙත සුවිශේෂී ප්‍රවේශය ලබා ගත හැකි අතර එය close() භාවිතයෙන් මුදා හැරිය හැක.
  • පරිශීලක-අවකාශ යෙදුම් වලට mmap() ත්වරණකාරක MMIO කලාප ද කළ හැක.

අර්ධ නැවත සකස් කිරීම
ඉහත සඳහන් කළ පරිදි, ඇක්සලරේටර් ශ්‍රිතයක (AF) අර්ධ ප්‍රතිනිර්මාණය කිරීම හරහා ත්වරණකාරක නැවත සකස් කළ හැක. file. FPGA හි නිශ්චිත FIM සහ ඉලක්කගත ස්ථිතික කලාපය (වරාය) සඳහා Accelerator Function (AF) ජනනය කර තිබිය යුතුය; එසේ නොමැති නම්, නැවත සකස් කිරීමේ මෙහෙයුම අසාර්ථක වන අතර සමහර විට පද්ධතියේ අස්ථාවරත්වය ඇති කරයි. sysfs හරහා FME විසින් නිරාවරණය කරන ලද අතුරුමුහුණත් හැඳුනුම්පත සමඟ AF ශීර්ෂයේ සටහන් කර ඇති අතුරුමුහුණත් ID සංසන්දනය කිරීමෙන් මෙම ගැළපුම පරීක්ෂා කළ හැක. IOCTL ප්‍රතිසංවිධානය ඇමතීමට පෙර මෙම පරීක්ෂාව සාමාන්‍යයෙන් පරිශීලක අවකාශය මගින් සිදු කෙරේ.

සටහන:
දැනට, FPGA වෙත ප්‍රවේශ වන ඕනෑම මෘදුකාංග වැඩසටහනක්, අථත්‍ය කරන ලද ධාරකයක ක්‍රියාත්මක වන ඒවා ඇතුළුව, අර්ධ ප්‍රතිනිර්මාණය කිරීමට උත්සාහ කිරීමට පෙර වසා දැමිය යුතුය. පියවර වනු ඇත:

  1. ආගන්තුකයාගෙන් රියදුරු බාගන්න
  2. ආගන්තුකයාගෙන් VF විසන්ධි කරන්න
  3. SR-IOV අක්‍රිය කරන්න
  4. අර්ධ නැවත සකස් කිරීම සිදු කරන්න
  5. SR-IOV සබල කරන්න
  6. ආගන්තුකයාට VF පේනුගත කරන්න
  7. ආගන්තුකයා තුළ රියදුරු පටවන්න

FPGA Virtualization
VM එකක ක්‍රියාත්මක වන යෙදුම් වලින් ත්වරණයක් වෙත ප්‍රවේශ වීම සබල කිරීමට, පහත පියවර භාවිතා කරමින් අදාළ AFU හි වරාය VF වෙත පැවරීම අවශ්‍ය වේ:

  1. පෙරනිමියෙන් සියලුම AFU වරායන් PF සතු වේ. VF වෙත නැවත පැවරීමට අවශ්‍ය ඕනෑම වරායක් පළමුව FME උපාංගයේ FPGA_FME_PORT_RELEASE ioctl හරහා PF වෙතින් මුදා හැරිය යුතුය.
  2. PF වෙතින් N ports නිදහස් කළ පසු, SRIOV සහ VFs සක්‍රීය කිරීමට පහත විධානය භාවිතා කළ හැක. එක් එක් VF සතුව AFU සමඟ එක් වරායක් පමණි. echo N > PCI_DEVICE_PATH/sriov_numvfs
  3. VF හරහා 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 උපාංග BAR මතකයේ ක්‍රියාත්මක වන උපාංග විශේෂාංග ලැයිස්තුව හරහා ගමන් කරයි.
  • SR-IOV සඳහා සහය දක්වයි.
  • උප-විශේෂාංග සඳහා මෙහෙයුම් සාරාංශ කරන සහ විශේෂාංග උපාංග ධාවක සඳහා පොදු කාර්යයන් නිරාවරණය කරන විශේෂාංග උපාංග යටිතල ව්‍යුහය හඳුන්වා දෙයි.

PCIe මොඩියුල උපාංග ධාවක කාර්යයන්

  • PCIe සොයාගැනීම, උපාංග ගණනය කිරීම සහ විශේෂාංග සොයාගැනීම අඩංගු වේ.
  • මව් උපාංගය, FPGA කළමනාකරණ එන්ජිම (FME) සහ වරාය සඳහා sysfs නාමාවලි නිර්මාණය කරයි.
  • වේදිකා ධාවක අවස්ථා නිර්මාණය කරයි, ලිනක්ස් කර්නලය ඔවුන්ගේ වේදිකා මොඩියුල ධාවක පැටවීමට හේතු වේ.

FME වේදිකා මොඩියුල උපාංග ධාවකය

  • බලශක්ති සහ තාප කළමනාකරණය, දෝෂ වාර්තා කිරීම, කාර්ය සාධන වාර්තා කිරීම සහ අනෙකුත් යටිතල පහසුකම් කාර්යයන්. FME ධාවකය විසින් නිරාවරණය කරන ලද sysfs අතුරුමුහුණත් හරහා ඔබට මෙම කාර්යයන් වෙත ප්‍රවේශ විය හැක.
  • අර්ධ නැවත සකස් කිරීම. PR උප-විශේෂාංග ආරම්භයේදී FME ධාවකය FPGA කළමනාකරු ලියාපදිංචි කරයි; එය ඔබෙන් FPGA_FME_PORT_PR ioctl ලබා ගත් පසු, එය ලබා දී ඇති Port වෙත bitstream අර්ධ වශයෙන් ප්‍රතිනිර්මාණය කිරීම සම්පූර්ණ කිරීම සඳහා 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 Port (සහ AFU) ධාවකය (intel-fpga-afu. ko) පරීක්ෂා කරනු ලැබේ. මෙම මොඩියුලයේ ප්‍රධාන කාර්යය වනුයේ Port, AFU MMIO කලාප අපනයනය, DMA බෆර සිතියම්කරණ සේවාව, UMsg(1) දැනුම්දීම සහ දුරස්ථ දෝශ නිරාකරණ කාර්යයන් ඇතුළුව, පරිශීලක-අවකාශ යෙදුම් සඳහා තනි ත්වරක වෙත ප්‍රවේශ වීමට අතුරු මුහුණතක් සැපයීමයි. ඉහළ බලන්න).

UMsg සහය දක්වන්නේ Intel Xeon® Processor සඳහා Acceleration Stack හරහා පමණක් Integrated FPGA සමඟිනි.

Port Platform Module Device Driver Functions

  • වරාය අක්ෂර උපාංග නෝඩය සාදයි.
  • Port sysfs නිර්මාණය කරයි files සහ Port sysfs ක්‍රියාත්මක කරයි file ප්රවේශයන්.
  • වරාය පුද්ගලික විශේෂාංග උප-ධාවක ක්‍රියාත්මක කරයි.
  • වරාය පුද්ගලික විශේෂාංග උප-ධාවක:
    • වරාය ශීර්ෂකය
    • AFU
    • වරාය දෝෂය
    • UMsg(2)
    • සිග්නල් ටැප්

යෙදුම FPGA උපාංග ගණනය කිරීම
/sys/class/fpga යටතේ ඇති sysfs ධුරාවලියෙන් යෙදුම් 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's සහ 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[] = {
{ .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,
.probe = cci_pci_probe,
.ඉවත් කරන්න = cci_pci_remove,
.sriov_configure = cci_pci_sriov_configure
};
ව්‍යුහය cci_drvdata {
int device_id;
struct උපාංගය *fme_dev;
ව්යුහය mutex අගුල;
struct list_head port_dev_list;
int released_port_num;
struct list_head කලාප;
};
struct build_feature_devs_info {
ව්‍යුහය pci_dev *pdev;
void __iomem *ioaddr;
void __iomem *ioend;
int current_bar;
අවලංගු __iomem *pfme_hdr;
struct device *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()
    • struct build_feature_devs_info එකක් වෙන් කරන්න, එය ආරම්භ කරන්න.
      .parent_dev FME සහ Port sysfs නාමාවලි අඩංගු මාපිය sysfs නාමාවලියකට (intel-fpga-dev.id) සකසා ඇත.
  • parse_feature_list()
    • FME, වරාය සහ ඒවායේ පුද්ගලික විශේෂාංග සොයා ගැනීමට BAR0 උපාංග විශේෂාංග ලැයිස්තුව ඇවිදින්න.
  • parse_feature() parse_feature_afus() parse_feature_fme()
    • 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 හි ව්‍යුහාත්මක සම්පත් මාලාවක් වෙන් කරන්න.
  • struct feature_platform_data වෙන් කරන්න, එය ආරම්භ කරන්න, සහ feature_dev.dev.platform_data හි දර්ශකයක් ගබඩා කරන්න
    • 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 හි struct සම්පත් මාලාවක් වෙන් කරන්න.
    • struct feature_platform_data වෙන් කරන්න, එය ආරම්භ කරන්න, සහ feature_dev.dev.platform_data හි දර්ශකයක් ගබඩා කරන්න
  • build_info_commit_dev()
    • වරාය සඳහා struct feature_platform_data.node struct 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[id] ආරම්භ කරන්න.
  • 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() ප්‍රවාහය ධාවනය කරන්න.
  • ශීර්ෂයේ එක් එක් වරාය ප්‍රවේශය තුළ සඳහන් BAR භාවිතා කරන්න.

FME වේදිකා උපාංගය ආරම්භ කිරීම
මෙම කොටස මඟින් වාරයක් ලබා දේview intel-fpga-fme.ko විසින් සිදු කරන ලද FME උපාංග ආරම්භය සඳහා කේත ප්‍රවාහය. ප්‍රධාන දත්ත ව්‍යුහයන් සහ කාර්යයන් ඉස්මතු කර ඇත. මෙම කොටස වඩාත් හොඳින් අනුගමනය කරන විට viewමේ සමඟ ඇති මූල කේතය (fme-main.c)

FME වේදිකා උපාංග දත්ත ව්‍යුහයන්

struct feature_ops {
int (*init)(struct platform_device *pdev, struct feature *feature);
int (*uinit)(struct platform_device *pdev, struct feature *feature);
දිගු (*ioctl)(struct platform_device *pdev, struct feature *feature,
අත්සන් නොකළ int cmd, අත්සන් නොකළ දිගු arg);
int (* test)(struct platform_device *pdev, struct feature *feature);
};
ව්‍යුහාත්මක ලක්ෂණය {
const char * නම;
int සම්පත්_දර්ශකය;
void __iomem *ioaddr;
struct feature_ops *ops;
};
struct feature_platform_data {
struct list_head node;
ව්යුහය mutex අගුල;
අත්සන් නොකළ දිගු dev_status;
struct cdev cdev;
struct platform_device *dev;
අත්සන් නොකළ int disable_count;
හිස් * පුද්ගලික;
int අංකය;
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 {
ඔබ අත;
const struct attribute_group **attr_groups;
struct උපාංගය *fme_dev;
struct list_head node;
struct list_head ළමයි;
struct kobject kobj;
};
ව්‍යුහය fpga_fme {
u8 port_id;
u64 pr_err;
struct උපාංගය *dev_err;
struct perf_object *perf_dev;
struct feature_platform_data *pdata;
};

FME වේදිකා උපාංග ආරම්භක ප්‍රවාහය

FME ආරම්භක ප්‍රවාහයintel-OPAE-FPGA-Linux-Device-Driver-Architecture-fig- (4)

  • fme_probe() fme_dev_init()
    • struct fpga_fme ආරම්භ කර එය feature_platform_data.private ක්ෂේත්‍රය තුළ ගබඩා කරන්න.
  • fme_probe() fpga_dev_feature_init() feature_instance_init()
    • එක් එක් ජනාකීර්ණ විශේෂාංගය සඳහා struct feature_ops විශේෂාංග_platform_data.features වෙත සුරකින්න.
    • පරීක්ෂණ ශ්‍රිතය තිබේ නම්, 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 feature *feature);
int (*uinit)(struct platform_device *pdev, struct feature *feature);
දිගු (*ioctl)(struct platform_device *pdev, struct feature *feature,
අත්සන් නොකළ int cmd, අත්සන් නොකළ දිගු arg);
int (* test)(struct platform_device *pdev, struct feature *feature);
};
ව්‍යුහාත්මක ලක්ෂණය {
const char * නම;
int සම්පත්_දර්ශකය;
void __iomem *ioaddr;
struct feature_ops *ops;
};
struct feature_platform_data {
struct list_head node;
ව්යුහය mutex අගුල;
අත්සන් නොකළ දිගු dev_status;
struct cdev cdev;
struct platform_device *dev;
අත්සන් නොකළ int disable_count;
හිස් * පුද්ගලික;
int අංකය;
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 භෞතික;
struct list_head node;
};
ව්‍යුහය fpga_afu_dma_region {
u64 user_addr;
u64 දිග;
u64 iova;
struct පිටුව **පිටු;
struct rb_node node;
bool in_use;
};
ව්‍යුහය fpga_afu {
u64 කලාපය_කර්_ඕෆ්සෙට්;
int num_regions;
u8_umsgs;
struct list_head කලාප;
rb_root dma_regions ව්‍යුහය;
struct feature_platform_data *pdata;
};

Port Platform Device Initialization Flow

වරාය ආරම්භක ප්රවාහයintel-OPAE-FPGA-Linux-Device-Driver-Architecture-fig- (5)

  • afu_probe() afu_dev_init()
    • struct fpga_afu ආරම්භ කර එය feature_platform_data.private ක්ෂේත්‍රය තුළ ගබඩා කරන්න.
  • afu_probe() fpga_dev_feature_init() feature_instance_init()
    • එක් එක් ජනාකීර්ණ විශේෂාංගය සඳහා struct feature_ops විශේෂාංග_platform_data.features වෙත සුරකින්න.
    • පරීක්ෂණ ශ්‍රිතය තිබේ නම්, struct වෙතින් අමතන්න.
    • struct එකෙන් 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 කොඩි; // in: 0 විය යුතුය
__u32 port_id; // in: port ID (0 සිට) මුදා හැරීමට.
};

FPGA_FME_PORT_ASSIGN—arg යනු මේ සඳහා දර්ශකයකි:

ව්‍යුහය fpga_fme_port_assign {
__u32 argsz; // in: sizeof(struct fpga_fme_port_assign)
__u32 කොඩි; // in: 0 විය යුතුය
__u32 port_id; // in: 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 කොඩි; // in: 0 විය යුතුය
__u32 port_id; // තුළ: වරාය හැඳුනුම්පත (0 සිට)
__u32 buffer_size; // in: bitstream buffer හි ප්‍රමාණය බයිට් වලින්. බයිට් 4ක් විය යුතුය
පෙළගස්වා ඇත.
__u64 බෆර_ලිපිනය; // in: bitstream buffer හි ක්‍රියාවලි ලිපිනය
__u64 තත්ත්වය; // out: දෝෂ තත්ත්වය (bitmask)
};

වරාය IOCTLs
විවෘතව කැඳවනු ලබන IOCTL file /dev/intel-fpga-port.k සඳහා descriptor

FPGA_PORT_GET_INFO—arg යනු මේ සඳහා දර්ශකයකි:

ව්‍යුහය fpga_port_info {
__u32 argsz; // in: sizeof(struct fpga_port_info)
__u32 කොඩි; // පිටතට: ආපසු 0
__u32 num_regions; // out: 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 කොඩි; // out: (bitmask) { FPGA_REGION_READ, FPGA_REGION_WRITE,
FPGA_REGION_MMAP }
__u32 දර්ශකය; // තුළ: FPGA_PORT_INDEX_UAFU හෝ FPGA_PORT_INDEX_STP
__u32 පෑඩිං; // in: 0 විය යුතුය
__u64 ප්‍රමාණය; // out: MMIO කලාපයේ ප්‍රමාණය බයිට් වලින්
__u64 ඕෆ්සෙට්; // out: උපාංගය 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 දිග; // in: බයිට් වලින් සිතියම්ගත කිරීමේ දිග. පිටුවේ ගුණාකාරයක් විය යුතුය
ප්රමාණය.
__u64 අයෝවා; // out: IO අතථ්‍ය ලිපිනය };

FPGA_PORT_DMA_UNMAP—arg යනු ඒ සඳහා වන දර්ශකයකි:
ව්‍යුහය fpga_port_dma_unmap {
__u32 argsz; // in: sizeof(struct fpga_port_dma_unmap)
__u32 කොඩි; // in: 0 විය යුතුය
__u64 iova; // in: 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 කොඩි; // in: 0 විය යුතුය
__u32 ඉඟි_බිට්මැප්; // in: UMsg ඉඟි මාදිලියේ බිට්මැප්. කුමන UMsg ද යන්න හඟවයි
සක්රීය කර ඇත.
};

FPGA_PORT_UMSG_SET_BASE_ADDR—

  • මෙම ioctl නිකුත් කිරීමට පෙර UMsg අක්‍රිය කළ යුතුය.
  • iova ක්ෂේත්‍රය සියලුම UMsg සඳහා ප්‍රමාණවත් තරම් විශාල බෆරයක් සඳහා විය යුතුය (num_umsgs * PAGE_SIZE).
    • බෆරය රියදුරු බෆර කළමනාකාරිත්වය විසින් “භාවිතා කරන” ලෙස සලකුණු කර ඇත.
    • iova NULL නම්, ඕනෑම පෙර කලාපයක් "භාවිතයේ" ලෙස සලකුණු නොකෙරේ.
  • arg යනු a සඳහා දර්ශකයකි:
    ව්‍යුහය fpga_port_umsg_base_addr {
    • u32 argsz; // in: sizeof(struct fpga_port_umsg_base_addr)
    • u32 කොඩි; // in: 0 විය යුතුය
    • u64 iova; // in: FPGA_PORT_DMA_MAP වෙතින් IO අතථ්‍ය ලිපිනය. };

සටහන:

  • වරාය දෝෂ ඉවත් කිරීම සඳහා, ඔබ වත්මන් දෝෂ වල නිශ්චිත බිට්මාස්ක් ලිවිය යුතුය, උදාහරණයක් ලෙසample, cat errors > clear
  • UMsg සහය දක්වන්නේ Intel Xeon Processor සඳහා Integrated FPGA සඳහා Acceleration Stack හරහා පමණි.

සිස්ෆ්ස් Files

FME ශීර්ෂකය sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/

සිස්ෆ්ස් file mmio ක්ෂේත්රය වර්ගය ප්රවේශය
ports_num fme_header.capability.num_ports දශම int කියවීමට පමණි
කෑෂ්_ප්‍රමාණය 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/

සිස්ෆ්ස් file mmio ක්ෂේත්රය වර්ගය ප්රවේශය
එළිපත්ත1 thermal.threshold.tmp_thshold1 දශම int පරිශීලක: කියවීමට පමණක් මූල: කියවන්න-ලියන්න
එළිපත්ත2 thermal.threshold.tmp_thshold2 දශම int පරිශීලක: කියවීමට පමණක් මූල: කියවන්න-ලියන්න
threshold_trip thermal.threshold.therm_trip_thshold දශම int කියවීමට පමණි
threshold1_reached thermal.threshold.thshold1_තත්ත්වය දශම int කියවීමට පමණි
threshold2_reached thermal.threshold.thshold2_තත්ත්වය දශම 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/

සිස්ෆ්ස් file mmio ක්ෂේත්රය වර්ගය ප්රවේශය
පරිභෝජනය කළා power.status.pwr_consumed hex uint64_t කියවීමට පමණි
එළිපත්ත1 බලය. එළිපත්ත. එළිපත්ත1 hex uint64_t පරිශීලක: කියවීමට පමණක් මූල: කියවන්න-ලියන්න
එළිපත්ත2 බලය. එළිපත්ත. එළිපත්ත2 hex uint64_t පරිශීලක: කියවීමට පමණක් මූල: කියවන්න-ලියන්න
එළිපත්ත1_තත්ත්වය power.threshold.threshold1_තත්ත්වය දශම අත්සන් නොකළ කියවීමට පමණි
එළිපත්ත2_තත්ත්වය power.threshold.threshold2_තත්ත්වය දශම අත්සන් නොකළ කියවීමට පමණි
ආර්ටීඑල් power.status.fpga_latency_වාර්තාව දශම අත්සන් නොකළ කියවීමට පමණි

FME Global Error 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 කියවන්න - ලියන්න
එන්නත්_දෝෂය 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 කියවීමට පමණි
පැහැදිලිය දෝෂ ඉවත් කරයි, පළමු_දෝෂය, ඊළඟ_දෝෂය විවිධ uint64_t ලිවීමට පමණි

සටහන:
FME දෝෂ ඉවත් කිරීමට, ඔබ වත්මන් දෝෂ වල නිශ්චිත බිට්මාස්ක් ලිවිය යුතුය, උදාample cat වැරදි > පැහැදිලි.

FME අර්ධ ප්රතිනිර්මාණය sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/pr/

සිස්ෆ්ස් file mmio ක්ෂේත්රය වර්ගය ප්රවේශය
අතුරුමුහුණත_id pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l hex 16-byte කියවීමට පමණි

FME Global Performance 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 දශම int කියවන්න - ලියන්න
කියවීම_පහර 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_stall gperf.CACHE_TX_REQ_STALL hex uint64_t කියවීමට පමණි
සිස්ෆ්ස් file mmio ක්ෂේත්රය වර්ගය ප්රවේශය
rx_req_stall gperf.CACHE_RX_REQ_STALL hex uint64_t කියවීමට පමණි
data_write_port_contention gperf.CACHE_DATA_WR_PORT_CONTEN hex uint64_t කියවීමට පමණි
tag_write_port_contention 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 දශම int පරිශීලක: කියවීමට පමණක් මූල: කියවන්න-ලියන්න

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.(සක්‍රීය කර ඇත) දශම int පරිශීලක: කියවීමට පමණක් මූල: කියවන්න-ලියන්න
කැටි කරන්න gperf.fab_ctl.freeze දශම int පරිශීලක: කියවීමට පමණක් මූල: කියවන්න-ලියන්න
pcie0_කියවන්න gperf.FAB_PCIE0_RD hex uint64_t කියවීමට පමණි
pcie0_ලියන්න gperf.FAB_PCIE0_WR hex uint64_t කියවීමට පමණි
pcie1_කියවන්න gperf.FAB_PCIE1_RD hex uint64_t කියවීමට පමණි
pcie1_ලියන්න gperf.FAB_PCIE1_WR hex uint64_t කියවීමට පමණි
upi_කියෙව්වා 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_කියවන්න gperf.FAB_PCIE0_RD hex uint64_t කියවීමට පමණි
pcie0_ලියන්න gperf.FAB_PCIE0_WR hex uint64_t කියවීමට පමණි
pcie1_කියවන්න gperf.FAB_PCIE1_RD hex uint64_t කියවීමට පමණි
pcie1_ලියන්න gperf.FAB_PCIE1_WR hex uint64_t කියවීමට පමණි
upi_කියෙව්වා gperf.FAB_UPI_RD hex uint64_t කියවීමට පමණි
upi_write gperf.FAB_UPI_WR hex uint64_t කියවීමට පමණි

Port Header sysfs files
intel-fpga-dev.i/intel-fpga-port.k/

සිස්ෆ්ස් 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/

සිස්ෆ්ස් file mmio ක්ෂේත්රය වර්ගය ප්රවේශය
afu_id afu_header.guid hex 16-byte කියවීමට පමණි

Port Error sysfs files
intel-fpga-dev.i/intel-fpga-port.k/errors/

සිස්ෆ්ස් file mmio ක්ෂේත්රය වර්ගය ප්රවේශය
වැරදි perror.port_error hex uint64_t කියවීමට පමණි
පළමු_දෝෂය perror.port_first_error hex uint64_t කියවීමට පමණි
පළමු_විකෘති_req perror.malreq hex 16-byte කියවීමට පමණි
පැහැදිලිය වැරදි.(සියලු දෝෂ) විවිධ uint64_t ලිවීමට පමණි

සටහන:
වරාය දෝෂ ඉවත් කිරීම සඳහා, ඔබ වත්මන් දෝෂ වල නිශ්චිත බිට්මාස්ක් ලිවිය යුතුය, උදාample cat වැරදි > පැහැදිලි.

සංශෝධන ඉතිහාසය

ලේඛන අනුවාදය වෙනස්කම්
2017.10.02 මුල් නිකුතුව.

OPAE Intel FPGA Linux උපාංග ධාවක ගෘහ නිර්මාණ මාර්ගෝපදේශය

ලේඛන / සම්පත්

intel OPAE FPGA Linux Device Driver Architecture [pdf] පරිශීලක මාර්ගෝපදේශය
OPAE FPGA Linux Device Driver Architecture, OPAE FPGA, Linux Device Driver Architecture, Driver Architecture, Architecture

යොමු කිරීම්

කමෙන්ට් එකක් දාන්න

ඔබගේ විද්‍යුත් තැපැල් ලිපිනය ප්‍රකාශනය නොකෙරේ. අවශ්‍ය ක්ෂේත්‍ර සලකුණු කර ඇත *