intel-logo

Intel OPAE FPGA Linux Device Driver Architecture

intel-OPAE-FPGA-Linux-Device-Driver-Arsitektur-produk

Arsitektur Driver Piranti Intel FPGA Linux OPAE

Driver OPAE Intel FPGA nyedhiyakake antarmuka kanggo aplikasi ruang pangguna kanggo ngatur, ngitung, mbukak, lan ngakses akselerator FPGA ing platform sing dilengkapi solusi Intel FPGA lan ngaktifake fungsi manajemen tingkat sistem kayata konfigurasi ulang FPGA, manajemen daya, lan virtualisasi.

Arsitektur Hardware

Saka titik OS kang view, hardware FPGA katon minangka piranti PCIe biasa. Memori piranti FPGA diatur nggunakake struktur data sing wis ditemtokake (Daftar Fitur Piranti). Fitur sing didhukung piranti FPGA kapapar liwat struktur data kasebut, kaya sing digambarake ing ngisor iki ing gambar ing ngisor iki:

Piranti FPGA PCIe

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

Pembalap ndhukung PCIe SR-IOV kanggo nggawe Fungsi Virtual (VFs) sing bisa digunakake kanggo nemtokake akselerator individu kanggo mesin virtual.

Intel Corporation. Kabeh hak dilindhungi undhang-undhang. Intel, logo Intel, lan merek Intel liyane minangka merek dagang saka Intel Corporation utawa anak perusahaan. Intel njamin kinerja produk FPGA lan semikonduktor kanggo spesifikasi saiki sesuai karo babar pisan standar Intel nanging nduweni hak kanggo ngganti produk lan layanan sawayah-wayah tanpa kabar. Intel ora tanggung jawab utawa tanggung jawab sing muncul saka aplikasi utawa panggunaan informasi, produk, utawa layanan sing diterangake ing kene kajaba sing disepakati kanthi tinulis dening Intel. Pelanggan Intel disaranake njupuk versi paling anyar saka spesifikasi piranti sadurunge ngandelake informasi sing diterbitake lan sadurunge nggawe pesenan kanggo produk utawa layanan.

Jeneng lan merek liyane bisa diklaim minangka properti wong liya.

Piranti FPGA PCIe virtual

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

FPGA Management Engine (FME)
Mesin Manajemen FPGA nindakake manajemen daya lan termal, laporan kesalahan, konfigurasi ulang, laporan kinerja, lan fungsi infrastruktur liyane. Saben FPGA nduweni siji FME, sing tansah diakses liwat Fungsi Fisik (PF). aplikasi pangguna-spasi bisa ndarbeni akses eksklusif kanggo FME nggunakake mbukak (), lan ngeculake nggunakake cedhak () minangka pangguna ndarbeni hak istimewa (ROOT).

Pelabuhan
A Port nggambarake antarmuka antarane kain FPGA statis ("FPGA Interface Manager (FIM)") lan wilayah sebagian reconfigurable ngemot Fungsi Akselerator (AF). Port ngontrol komunikasi saka piranti lunak menyang akselerator lan nampilake fitur kayata reset lan debug. Piranti PCIe bisa uga duwe sawetara Port, lan saben Port bisa kapapar liwat VF kanthi nemtokake nggunakake FPGA_FME_PORT_ASSIGN ioctl ing piranti FME.

Unit Fungsi Akselerator (AF).

  • Unit Fungsi Akselerator (AF) dipasang ing Port lan mbukak wilayah 256K MMIO kanggo digunakake kanggo register kontrol khusus akselerator.
  • Aplikasi pangguna-ruang bisa ndarbeni akses eksklusif menyang AFU ditempelake ing Port kanthi nggunakake mbukak () ing piranti Port, lan ngeculake nggunakake cedhak ().
  • Aplikasi pangguna-ruang uga bisa mmap () akselerator wilayah MMIO.

Konfigurasi ulang parsial
Kaya sing kasebut ing ndhuwur, akselerator bisa dikonfigurasi maneh liwat konfigurasi ulang sebagian saka Fungsi Akselerator (AF) file. Fungsi Akselerator (AF) kudu digawe kanggo FIM pas lan wilayah statis diangkah (Port) saka FPGA; yen ora, operasi reconfiguration bakal gagal lan bisa nimbulaké kahanan kang ora tetep sistem. Kompatibilitas iki bisa dipriksa kanthi mbandhingake ID antarmuka sing dicathet ing header AF karo ID antarmuka sing dideleng dening FME liwat sysfs. Priksa iki biasane ditindakake dening ruang pangguna sadurunge nelpon konfigurasi ulang IOCTL.

Cathetan:
Saiki, program piranti lunak apa wae sing ngakses FPGA, kalebu sing mlaku ing host virtual, kudu ditutup sadurunge nyoba konfigurasi ulang parsial. Langkah-langkah kasebut bakal dadi:

  1. Mbongkar driver saka tamu
  2. Copot VF saka tamu
  3. Pateni SR-IOV
  4. Nindakake konfigurasi ulang parsial
  5. Aktifake SR-IOV
  6. Tancepake VF menyang tamu
  7. Muat driver ing tamu

Virtualisasi FPGA
Kanggo ngaktifake ngakses akselerator saka aplikasi sing mlaku ing VM, port AFU kudu ditugasake menyang VF nggunakake langkah-langkah ing ngisor iki:

  1. PF nduweni kabeh port AFU kanthi standar. Sembarang port sing kudu ditransfer menyang VF kudu dibebasake dhisik saka PF liwat FPGA_FME_PORT_RELEASE ioctl ing piranti FME.
  2. Sawise port N dirilis saka PF, printah ing ngisor iki bisa digunakake kanggo ngaktifake SRIOV lan VFs. Saben VF ndarbeni mung siji port karo AFU. echo N > PCI_DEVICE_PATH/sriov_numvfs
  3. Pass liwat VFs kanggo VMs.
  4. AFU ing VF bisa diakses saka aplikasi ing VM (nggunakake driver sing padha ing VF).

Cathetan:
FME ora bisa ditugasake menyang VF, mula PR lan fungsi manajemen liyane mung kasedhiya liwat PF.

Organisasi Driver

Driver Piranti Modul PCIe

Organisasi Driver

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

Piranti FPGA katon minangka piranti PCIe biasa; mangkono, driver piranti FPGA PCIe (intel-FPGA-PCI.ko) tansah dimuat pisanan yen FPGA PCIe PF utawa VF dideteksi. Pembalap iki nduweni peran infrastruktur ing arsitektur driver. iku:

  • Nggawe piranti wadhah FPGA minangka wong tuwa saka piranti fitur.
  • Mlaku liwat Dhaptar Fitur Piranti, sing dileksanakake ing memori BAR piranti PCIe, kanggo nemokake piranti fitur lan sub-fitur lan nggawe piranti platform kanggo piranti kasebut ing sangisore piranti wadhah.
  • Ndhukung SR-IOV.
  • Ngenalke infrastruktur piranti fitur, sing abstrak operasi kanggo sub-fitur lan mbabarake fungsi umum kanggo fitur driver piranti.

Fungsi Driver Piranti Modul PCIe

  • Ngandhut panemuan PCIe, enumerasi piranti, lan panemuan fitur.
  • Nggawe direktori sysfs kanggo piranti induk, FPGA Management Engine (FME), lan Port.
  • Nggawe conto driver platform, nyebabake kernel Linux mbukak driver modul platform masing-masing.

Driver Piranti Modul Platform FME

  • Manajemen daya lan termal, laporan kesalahan, laporan kinerja, lan fungsi infrastruktur liyane. Sampeyan bisa ngakses fungsi kasebut liwat antarmuka sysfs sing kapapar dening driver FME.
  • Konfigurasi ulang parsial. Pembalap FME ndhaptar Manager FPGA sajrone initialization sub-fitur PR; sawise nampa FPGA_FME_PORT_PR ioctl saka sampeyan, invokes fungsi antarmuka umum saka FPGA Manager kanggo ngrampungake reconfiguration sebagean saka bitstream menyang Port diwenehi.
  • Manajemen port kanggo virtualisasi. Pembalap FME ngenalaken loro ioctls, FPGA_FME_PORT_RELEASE, kang nerbitaké Port diwenehi saka PF; lan FPGA_FME_PORT_ASSIGN, kang nemtokake Port bali kanggo PF. Sawise Port dirilis saka PF, bisa diutus kanggo VF liwat antarmuka SR-IOV diwenehake dening driver PCIe. Kanggo informasi luwih lengkap, waca "Virtualisasi FPGA".

FME Platform Modul Piranti Driver Fungsi

  • Nggawe simpul piranti karakter FME.
  • Nggawe sysfs FME files lan ngleksanakake sysfs FME file aksesoris.
  • Ngleksanakake sub-driver fitur pribadi FME.
  • Sub-driver fitur pribadi FME:
    • Header FME
    • Manajemen Thermal
    • Manajemen daya
    • Kesalahan Global
    • Konfigurasi ulang parsial
    • Kinerja Global

Driver Piranti Modul Port Platform
Kaya driver FME, driver FPGA Port (lan AFU) (intel-fpga-afu. ko) wis probed sawise piranti platform Port digawe. Fungsi utama modul iki yaiku nyedhiyakake antarmuka kanggo aplikasi ruang pangguna kanggo ngakses akselerator individu, kalebu kontrol reset dhasar ing Port, ekspor wilayah AFU MMIO, layanan pemetaan buffer DMA, kabar UMsg(1), lan fungsi debug remot ( ndeleng ndhuwur).

UMsg mung didhukung liwat Acceleration Stack kanggo Prosesor Intel Xeon® kanthi FPGA Terpadu.

Port Platform Modul Piranti Driver Fungsi

  • Nggawe simpul piranti karakter Port.
  • Nggawe sysfs Port files lan ngleksanakake sysfs Port file aksesoris.
  • Ngleksanakake sub-driver fitur pribadi Port.
  • Sub-driver fitur pribadi port:
    • Port Header
    • AFU
    • Salah Port
    • UMsg(2)
    • Sinyal Tap

Aplikasi FPGA Device Enumeration
Bagean iki ngenalake carane aplikasi ngitung piranti FPGA saka hierarki sysfs ing /sys/class/fpga. Ing mantanample ngisor, loro piranti Intel FPGA diinstal ing inang. Saben piranti FPGA nduweni siji FME lan rong Port (AFU). Kanggo saben piranti FPGA, direktori piranti digawe ing /sys/class/fpga:

/sys/class/fpga/intel-fpga-dev.0
/sys/class/fpga/intel-fpga-dev.1

Saben simpul nduweni siji FME lan rong Port (AFU) minangka piranti anak:
/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

Umumé, antarmuka FME/Port sysfs dijenengi kaya ing ngisor iki:
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-fme.j/
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-port.k/

karo Aku consecutively nomer kabeh piranti wadhah, j consecutively nomer FME lan k consecutively nomer kabeh Ports.

Node piranti sing digunakake kanggo ioctl() lan mmap() bisa dirujuk liwat:
/dev/intel-fpga-fme.j
/dev/intel-fpga-port.k

PCIe Driver Enumeration
Bagean iki menehi katranganview saka aliran kode kanggo enumerasi piranti dileksanakake dening intel-fpga-pci.ko. Struktur lan fungsi data utama disorot. Bagean iki paling apik tindakake nalika viewing kode sumber sing dilampirake (pcie.c).

Struktur Data Enumerasi

enum fpga_id_type {
PARENT_ID,
FME_ID,
PORT_ID,
FPGA_ID_MAX
};
struct statis idr fpga_ids[FPGA_ID_MAX];
struct fpga_chardev_info {
const char * jeneng;
dev_t devt;
};
struct fpga_chardev_info fpga_chrdevs[] = {
{ .jeneng = FPGA_FEATURE_DEV_FME },
{ .jeneng = FPGA_FEATURE_DEV_PORT },
};
kelas struct statis *fpga_class;
struct statis 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,}
};
struct statis pci_driver cci_pci_driver = {
.jeneng = DRV_NAME,
.id_table = cci_pcie_id_tbl,
.probe = cci_pci_probe,
.remove = cci_pci_remove,
.sriov_configure = cci_pci_sriov_configure
};
struct cci_drvdata {
int device_id;
piranti struct *fme_dev;
struct mutex kunci;
struct list_head port_dev_list;
int release_port_num;
struct list_head wilayah;
};
struct build_feature_devs_info {
struct pci_dev *pdev;
void __iomem *ioaddr;
void __iomem *ioend;
int saiki_bar;
void __iomem *pfme_hdr;
piranti struct * parent_dev;
struct platform_device *feature_dev;
};

Alur Enumerasi

  • ccidrv_init()
    • Initialize fpga_ids nggunakake idr_init().
    • Initialize fpga_chrdevs[i].devt nggunakake alloc_chrdev_region().
    • Initialize fpga_class nggunakake class_create ().
    • pci_register_driver(&cci_pci_driver);
  • cci_pci_probe()
    • Aktifake piranti PCI, njaluk akses menyang wilayah, nyetel mode master PCI, lan ngatur DMA.
  • cci_pci_create_feature_devs() build_info_alloc_and_init()
    • Alokasikan struct build_feature_devs_info, initialize.
      .parent_dev disetel menyang direktori sysfs induk (intel-fpga-dev.id) sing ngemot direktori sysfs FME lan Port.
  • parse_feature_list()
    • Lumaku Dhaptar Fitur Piranti BAR0 kanggo nemokake FME, Port, lan fitur pribadi.
  • parse_feature() parse_feature_afus() parse_feature_fme()
    • Nalika FME ditemoni:
  • build_info_create_dev()
    • Alokasi piranti platform kanggo FME, simpen ing build_feature_devs_info.feature_dev.
    • feature_dev.id diinisialisasi dadi asil idr_alloc(fpga_ids[FME_ID],
    • feature_dev.parent disetel kanggo build_feature_devs_info.parent_dev.
    • Alokasi sumber daya struct ing feature_dev.resource.
  • Alokasi struct feature_platform_data, initialize, lan nyimpen pointer ing feature_dev.dev.platform_data
    • create_feature_instance() build_info_add_sub_feature()
    • Miwiti feature_dev.resource[FME_FEATURE_ID_HEADER].
    • feature_platform_data_add()
    • Initialize feature_platform_data.features [FME_FEATURE_ID_HEADER], kabeh kajaba .fops.
  • parse_feature() parse_feature_afus() parse_feature_port()
    • Nalika Port ditemoni:
  • build_info_create_dev()
    • Alokasi piranti platform kanggo Port, nyimpen ing build_feature_devs_info.feature_dev.
    • feature_dev.id diinisialisasi dadi asil idr_alloc(fpga_ids[PORT_ID],
    • feature_dev.parent disetel kanggo build_feature_devs_info.parent_dev.
    • Alokasi sumber daya struct ing feature_dev.resource.
    • Alokasi struct feature_platform_data, initialize, lan nyimpen pointer ing feature_dev.dev.platform_data
  • build_info_commit_dev()
    • Tambah struct feature_platform_data.node kanggo Port menyang dhaptar Port ing struct cci_drvdata.port_dev_list
  • create_feature_instance() build_info_add_sub_feature()
    • Miwiti feature_dev.resource[PORT_FEATURE_ID_HEADER].
  • feature_platform_data_add()
    • Initialize feature_platform_data.features [PORT_FEATURE_ID_HEADER], kabeh kajaba .fops.
  • parse_feature() parse_feature_afus() parse_feature_port_uafu()
    • Nalika AFU ditemoni:
  • create_feature_instance() build_info_add_sub_feature()
    • Inisialisasi feature_dev.resource[PORT_FEATURE_ID_UAFU].
  • feature_platform_data_add()
    • Initialize feature_platform_data.features[PORT_FEATURE_ID_UAFU], kabeh kajaba .fops.
  • parse_feature() parse_feature_private() parse_feature_fme_private()
    • Nalika fitur pribadi FME ditemoni:
  • create_feature_instance() build_info_add_sub_feature()
    • Inisialisasi feature_dev.resource[id].
  • feature_platform_data_add()
    • Initialize feature_platform_data.features[id], kabeh kajaba .fops.
  • parse_feature() parse_feature_private() parse_feature_port_private()
  • Nalika fitur pribadi Port ditemoni: * create_feature_instance () build_info_add_sub_feature () * Initialize feature_dev.resource[id]. * feature_platform_data_add () Initialize feature_platform_data.features[id], kabeh kajaba .fops.
  • parse_ports_saka_fme()
    • Yen driver dimuat ing Fungsi Fisik (PF), banjur:
  • Mbukak aliran parse_feature_list () ing saben port diterangake ing header FME.
  • Gunakake BAR kasebut ing saben entri Port ing header.

Inisialisasi Piranti Platform FME
Bagean iki menehi katranganview saka aliran kode kanggo initialization piranti FME dileksanakake dening intel-fpga-fme.ko. Struktur lan fungsi data utama disorot. Bagean iki paling apik tindakake nalika viewing kode sumber sing dilampirake (fme-main.c).

Struktur Data Piranti Platform FME

struct feature_ops {
int (* init)(struct platform_device *pdev, fitur struct *fitur);
int (*uinit)(struct platform_device *pdev, fitur struct *fitur);
long (*ioctl)(struct platform_device *pdev, fitur struct *fitur,
unsigned int cmd, unsigned long arg);
int (*test)(struct platform_device *pdev, fitur struct *fitur);
};
fitur struktur {
const char * jeneng;
int sumber_indeks;
void __iomem *ioaddr;
struct feature_ops *ops;
};
struct feature_platform_data {
struct list_head node;
struct mutex kunci;
unsigned long dev_status;
struktur cdev cdev;
struct platform_device *dev;
unsigned int disable_count;
batal * pribadi;
int nomer;
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 *)); struktur
fitur fitur[0];
};
struct perf_object {
int id;
const struct attribute_group **attr_groups;
piranti struct *fme_dev;
struct list_head node;
struct list_head anak;
struct kobject kobj;
};
struct fpga_fme {
u8 port_id;
u64 pr_err;
piranti struct * dev_err;
struct perf_object *perf_dev;
struct feature_platform_data *pdata;
};

Aliran Initialization Piranti Platform FME

Alur Initialization FMEintel-OPAE-FPGA-Linux-Device-Driver-Architecture-fig- (4)

  • fme_probe() fme_dev_init()
    • Initialize a struct fpga_fme lan nyimpen ing feature_platform_data.private kolom.
  • fme_probe() fpga_dev_feature_init() feature_instance_init()
    • Simpen struct feature_ops menyang feature_platform_data.features kanggo saben fitur populated.
    • Telpon fungsi test, yen ana, saka struct.
    • Nelpon fungsi init saka struct.
  • fme_probe() fpga_register_dev_ops()
    • Nggawe simpul piranti karakter FME, ndhaptar struct a file_operasi.

Inisialisasi Piranti Platform Port
Bagean iki menehi katranganview saka aliran kode kanggo initialization piranti port dileksanakake dening intel-fpga-afu.ko. Struktur lan fungsi data utama disorot. Bagean iki paling apik tindakake nalika viewing kode sumber sing dilampirake (afu.c).

Struktur Data Piranti Platform Port

struct feature_ops {
int (* init)(struct platform_device *pdev, fitur struct *fitur);
int (*uinit)(struct platform_device *pdev, fitur struct *fitur);
long (*ioctl)(struct platform_device *pdev, fitur struct *fitur,
unsigned int cmd, unsigned long arg);
int (*test)(struct platform_device *pdev, fitur struct *fitur);
};
fitur struktur {
const char * jeneng;
int sumber_indeks;
void __iomem *ioaddr;
struct feature_ops *ops;
};
struct feature_platform_data {
struct list_head node;
struct mutex kunci;
unsigned long dev_status;
struktur cdev cdev;
struct platform_device *dev;
unsigned int disable_count;
batal * pribadi;
int nomer;
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 *));
fitur fitur struktur[0];
};
struct fpga_afu_region {
indeks u32;
gendera u32;
ukuran u64;
u64 ngimbangi;
u64 fisik;
struct list_head node;
};
struct fpga_afu_dma_region {
u64 user_addr;
u64 dawa;
u64 iova;
kaca struktur **kaca;
struct rb_node node;
bool in_use;
};
struct fpga_afu {
u64 region_cur_offset;
int num_regions;
u8 num_umsgs;
struct list_head wilayah;
struct rb_root dma_regions;
struct feature_platform_data *pdata;
};

Alur Initialization Piranti Platform Port

Alur Initialization Portintel-OPAE-FPGA-Linux-Device-Driver-Architecture-fig- (5)

  • afu_probe() afu_dev_init()
    • Initialize a struct fpga_afu lan nyimpen ing feature_platform_data.private kolom.
  • afu_probe() fpga_dev_feature_init() feature_instance_init()
    • Simpen struct feature_ops menyang feature_platform_data.features kanggo saben fitur populated.
    • Telpon fungsi test, yen ana, saka struct.
    • Nelpon fungsi init saka struct.
  • afu_probe() fpga_register_dev_ops()
    • Nggawe simpul piranti karakter Port, ndhaptar struct a file_operasi.

FME IOCTLs
IOCTLs sing diarani mbukak file deskriptor kanggo /dev/intel-fpga-fme.j FPGA_GET_API_VERSION—mbalekake versi saiki minangka integer, wiwit saka 0.

FPGA_CHECK_EXTENSION—ora didhukung saiki.

FPGA_FME_PORT_RELEASE—arg minangka pointer menyang:

struct fpga_fme_port_release {
__u32 argsz; // in: sizeof(struct fpga_fme_port_release)
__u32 gendera; // ing: kudu 0
__u32 port_id; // ing: port ID (saka 0) kanggo release.
};

FPGA_FME_PORT_ASSIGN—arg minangka pointer menyang:

struct fpga_fme_port_assign {
__u32 argsz; // in: sizeof(struct fpga_fme_port_assign)
__u32 gendera; // ing: kudu 0
__u32 port_id; // ing: port ID (saka 0) kanggo nemtokake. (mesti wis
sadurunge dirilis dening FPGA_FME_PORT_RELEASE)
};

FPGA_FME_PORT_PR—arg minangka pointer menyang:

struct fpga_fme_port_pr {
__u32 argsz; // in: sizeof(struct fpga_fme_port_pr)
__u32 gendera; // ing: kudu 0
__u32 port_id; // ing: ID port (saka 0)
__u32 buffer_size; // ing: ukuran buffer bitstream ing bita. Mesthi 4-bait
didadekake siji.
__u64 buffer_address; // ing: alamat proses buffer bitstream
__u64 status; // metu: status kesalahan (bitmask)
};

Port IOCTLs
IOCTLs sing diarani mbukak file deskriptor kanggo /dev/intel-fpga-port.k FPGA_GET_API_VERSION-bali versi saiki minangka integer, miwiti saka 0. FPGA_CHECK_EXTENSION-ora didhukung.

FPGA_PORT_GET_INFO—arg minangka pointer menyang:

struct fpga_port_info {
__u32 argsz; // in: sizeof(struct fpga_port_info)
__u32 gendera; // metu: bali 0
__u32 nomer_wilayah; // metu: nomer wilayah MMIO, 2 (1 kanggo AFU lan 1 kanggo
STP)
__u32 num_umsgs; // metu: nomer UMsg kang didhukung dening hardware
};

FPGA_PORT_GET_REGION_INFO—arg minangka pointer menyang:

struct fpga_port_region_info {
__u32 argsz; // in: sizeof(struct fpga_port_region_info)
__u32 gendera; // metu: (bitmask) { FPGA_REGION_READ, FPGA_REGION_WRITE,
FPGA_REGION_MMAP }
__u32 indeks; // ing: FPGA_PORT_INDEX_UAFU utawa FPGA_PORT_INDEX_STP
__u32 padding; // ing: kudu 0
__u64 ukuran; // metu: ukuran wilayah MMIO ing bita
__u64 ngimbangi; // metu: ngimbangi wilayah MMIO saka wiwitan piranti fd
};

FPGA_PORT_DMA_MAP—arg minangka pointer menyang:
struct fpga_port_dma_map {
__u32 argsz; // in: sizeof(struct fpga_port_dma_map)
__u32 gendera; // ing: kudu 0 __u64 user_addr; // ing: proses virtual
alamat. Kudu kaca selaras.
__u64 dawa; // ing: dawa pemetaan ing bita. Kudu dadi pirang-pirang kaca
ukuran.
__u64 iova; // metu: alamat virtual IO };

FPGA_PORT_DMA_UNMAP—arg minangka pointer menyang:
struct fpga_port_dma_unmap {
__u32 argsz; // in: sizeof(struct fpga_port_dma_unmap)
__u32 gendera; // ing: kudu 0
__u64 iova; // ing: alamat virtual IO bali dening sadurungé
FPGA_PORT_DMA_MAP };

  • FPGA_PORT_RESET—arg kudu NULL.
  • FPGA_PORT_UMSG_ENABLE—arg kudu NULL.
  • FPGA_PORT_UMSG_DISABLE—args kudu NULL.

FPGA_PORT_UMSG_SET_MODE—arg minangka pointer menyang:

struct fpga_port_umsg_cfg {
__u32 argsz; // in: sizeof(struct fpga_port_umsg_cfg)
__u32 gendera; // ing: kudu 0
__u32 pitunjuk_bitmap; // ing: UMsg mode petunjuk bitmap. Tegese UMsg kang
diaktifake.
};

FPGA_PORT_UMSG_SET_BASE_ADDR—

  • UMsg kudu dipateni sadurunge nerbitake ioctl iki.
  • Lapangan iova kudu kanggo buffer cukup gedhe kanggo kabeh UMsg kang (num_umsgs * PAGE_SIZE).
    • Buffer ditandhani minangka "digunakake" dening manajemen buffer driver.
    • Yen iova NULL, wilayah sadurunge ora ditandhani minangka "digunakake".
  • arg minangka pointer menyang:
    struct fpga_port_umsg_base_addr {
    • u32 argsz; // in: sizeof(struct fpga_port_umsg_base_addr)
    • gendera u32; // ing: kudu 0
    • u64 iova; // ing: alamat virtual IO saka FPGA_PORT_DMA_MAP. };

Cathetan:

  • Kanggo mbusak kasalahan port, sampeyan kudu nulis bitmask pas kasalahan saiki, kanggo Example, kesalahan kucing > cetha
  • UMsg mung didhukung liwat Acceleration Stack kanggo Prosesor Intel Xeon kanthi FPGA Terpadu.

sysfs Files

FME Header sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/

sysfs file lapangan mmo jinis akses
port_num fme_header.capability.num_ports desimal int Mung diwaca
cache_size fme_header.capability.cache_size desimal int Mung diwaca
versi fme_header.capability.fabric_verid desimal int Mung diwaca
soket_id fme_header.capability.socket_id desimal int Mung diwaca
bitstream_id fme_header.bitstream_id hex uint64_t Mung diwaca
bitstream_metadata fme_header.bitstream_md hex uint64_t Mung diwaca

Sistem Manajemen Termal FME files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/

sysfs file lapangan mmo jinis akses
ambang 1 thermal.threshold.tmp_thshold1 desimal int Panganggo: Waca-mung ROOT: Waca-tulis
ambang 2 thermal.threshold.tmp_thshold2 desimal int Panganggo: Waca-mung ROOT: Waca-tulis
ambang_trip thermal.threshold.therm_trip_thshold desimal int Mung diwaca
ambang 1_tekan thermal.threshold.thshold1_status desimal int Mung diwaca
ambang 2_tekan thermal.threshold.thshold2_status desimal int Mung diwaca
ambang 1_kabijakan termal. threshold.thshold_policy desimal int Panganggo: Waca-mung ROOT: Waca-tulis
suhu thermal.rdsensor_fm1.fpga_temp desimal int Mung diwaca

Sistem Manajemen Daya FME files
intel-fpga-dev.i/intel-fpga-fme.j/power_mgmt/

sysfs file lapangan mmo jinis akses
dikonsumsi daya.status.pwr_consumed hex uint64_t Mung diwaca
ambang 1 daya.ambang.ambang1 hex uint64_t Panganggo: Waca-mung ROOT: Waca-tulis
ambang 2 daya.ambang.ambang2 hex uint64_t Panganggo: Waca-mung ROOT: Waca-tulis
ambang 1_status power.threshold.threshold1_status desimal unsigned Mung diwaca
ambang 2_status power.threshold.threshold2_status desimal unsigned Mung diwaca
rtl power.status.fpga_latency_report desimal unsigned Mung diwaca

Kesalahan Global FME sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/errors/

sysfs file lapangan mmo jinis akses
pcie0_errors gerror.pcie0_err hex uint64_t Maca-nulis
pcie1_errors gerror.pcie1_err hex uint64_t Maca-nulis
inject_error gerror.ras_error_inj hex uint64_t Maca-nulis

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

sysfs file lapangan mmo jinis akses
kasalahan gerror.fme_err hex uint64_t Mung diwaca
first_error gerror.fme_first_err.err_reg_status hex uint64_t Mung diwaca
next_error gerror.fme_next_err.err_reg_status hex uint64_t Mung diwaca
cetha Mbusak kasalahan, first_error, next_error macem-macem uint64_t Mung nulis

Cathetan:
Kanggo mbusak kasalahan FME, sampeyan kudu nulis bitmask pas kasalahan saiki, kanggo Exampkesalahan kucing > cetha.

Sistem Konfigurasi Sebagean FME files
intel-fpga-dev.i/intel-fpga-fme.j/pr/

sysfs file lapangan mmo jinis akses
antarmuka_id pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l hex 16-bait Mung diwaca

Sistem Kinerja Global FME files
intel-fpga-dev.i/intel-fpga-fme.j/dperf/clock

sysfs file lapangan mmo jinis akses
jam gperf.clk.afu_interf_clock hex uint64_t Mung diwaca

intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (Ora valid kanggo Acceleration Stack kanggo Intel Xeon CPU karo FPGAs)

sysfs file lapangan mmo jinis akses
beku gperf.ch_ctl.freeze desimal int Maca-nulis
maca_hit gperf.CACHE_RD_HIT hex uint64_t Mung diwaca
maca_miss gperf.CACHE_RD_MISS hex uint64_t Mung diwaca
write_hit gperf.CACHE_WR_HIT hex uint64_t Mung diwaca
nulis_miss gperf.CACHE_WR_MISS hex uint64_t Mung diwaca
terus_njaluk gperf.CACHE_HOLD_REQ hex uint64_t Mung diwaca
tx_req_stall gperf.CACHE_TX_REQ_STALL hex uint64_t Mung diwaca
sysfs file lapangan mmo jinis akses
rx_req_stall gperf.CACHE_RX_REQ_STALL hex uint64_t Mung diwaca
data_write_port_contention gperf.CACHE_DATA_WR_PORT_CONTEN hex uint64_t Mung diwaca
tag_write_port_contention gperf.CACHE_TAG_WR_PORT_CONTEN hex uint64_t Mung diwaca

intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (Ora valid kanggo Acceleration Stack kanggo Intel Xeon CPU karo FPGAs)

sysfs file lapangan mmo jinis akses
beku gperf.vtd_ctl.freeze desimal int Panganggo: Waca-mung ROOT: Waca-tulis

intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (Ora valid kanggo Acceleration Stack kanggo Intel Xeon CPU karo FPGAs)

sysfs file lapangan mmo jinis akses
maca_transaksi gperf.VTD_AFU0_MEM_RD_TRANS hex uint64_t Mung diwaca
nulis_transaksi gperf.VTD_AFU0_MEM_WR_TRANS hex uint64_t Mung diwaca
tlb_read_hit gperf.VTD_AFU0_TLB_RD_HIT hex uint64_t Mung diwaca
tlb_write_hit gperf.VTD_AFU0_TLB_WR_HIT hex uint64_t Mung diwaca

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

sysfs file lapangan mmo jinis akses
ngaktifake gperf.fab_ctl.(diaktifake) desimal int Panganggo: Waca-mung ROOT: Waca-tulis
beku gperf.fab_ctl.freeze desimal int Panganggo: Waca-mung ROOT: Waca-tulis
pcie0_maca gperf.FAB_PCIE0_RD hex uint64_t Mung diwaca
pcie0_write gperf.FAB_PCIE0_WR hex uint64_t Mung diwaca
pcie1_maca gperf.FAB_PCIE1_RD hex uint64_t Mung diwaca
pcie1_write gperf.FAB_PCIE1_WR hex uint64_t Mung diwaca
upi_maca gperf.FAB_UPI_RD hex uint64_t Mung diwaca
upi_nulis gperf.FAB_UPI_WR hex uint64_t Mung diwaca

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

sysfs file lapangan mmo jinis akses
pcie0_maca gperf.FAB_PCIE0_RD hex uint64_t Mung diwaca
pcie0_write gperf.FAB_PCIE0_WR hex uint64_t Mung diwaca
pcie1_maca gperf.FAB_PCIE1_RD hex uint64_t Mung diwaca
pcie1_write gperf.FAB_PCIE1_WR hex uint64_t Mung diwaca
upi_maca gperf.FAB_UPI_RD hex uint64_t Mung diwaca
upi_nulis gperf.FAB_UPI_WR hex uint64_t Mung diwaca

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

sysfs file lapangan mmo jinis akses
id port_header.capability.port_number desimal int Mung diwaca
ltr port_header.control.latency_tolerance desimal int Mung diwaca

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

sysfs file lapangan mmo jinis akses
afu_id afu_header.guid hex 16-bait Mung diwaca

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

sysfs file lapangan mmo jinis akses
kasalahan perror.port_error hex uint64_t Mung diwaca
first_error perror.port_first_error hex uint64_t Mung diwaca
first_malformed_req perror.malreq hex 16-bait Mung diwaca
cetha kesalahan.(kabeh kesalahan) macem-macem uint64_t Mung nulis

Cathetan:
Kanggo mbusak kasalahan Port, sampeyan kudu nulis bitmask pas kasalahan saiki, kanggo Exampkesalahan kucing > cetha.

Riwayat Revisi

Versi Dokumen Owah-owahan
2017.10.02 Rilis dhisikan.

Pandhuan Arsitektur Driver Piranti Intel FPGA Linux OPAE

Dokumen / Sumber Daya

Intel OPAE FPGA Linux Device Driver Architecture [pdf] Pandhuan pangguna
Arsitektur Driver Piranti OPAE FPGA Linux, OPAE FPGA, Arsitektur Driver Piranti Linux, Arsitektur Driver, Arsitektur

Referensi

Ninggalake komentar

Alamat email sampeyan ora bakal diterbitake. Kolom sing dibutuhake ditandhani *