Intel OPAE FPGA Usanifu wa Kifaa cha Linux
Usanifu wa Dereva wa Kifaa cha OPAE Intel FPGA Linux
Dereva wa OPAE Intel FPGA hutoa miingiliano ya programu-tumizi za nafasi ya mtumiaji ili kusanidi, kuhesabu, kufungua, na kufikia vichapuzi vya FPGA kwenye majukwaa yaliyo na suluhu za Intel FPGA na kuwezesha utendaji wa usimamizi wa kiwango cha mfumo kama vile usanidi upya wa FPGA, usimamizi wa nishati na uboreshaji.
Usanifu wa Vifaa
Kutoka kwa hatua ya OS view, maunzi ya FPGA yanaonekana kama kifaa cha kawaida cha PCIe. Kumbukumbu ya kifaa cha FPGA imepangwa kwa kutumia muundo wa data ulioainishwa awali (Orodha ya Vipengele vya Kifaa). Vipengele vinavyotumika na kifaa cha FPGA vinafichuliwa kupitia miundo hii ya data, kama inavyoonyeshwa hapa chini katika kielelezo kifuatacho:
Kifaa cha FPGA PCIe
Dereva huauni PCIe SR-IOV ili kuunda kipengele cha Virtual Functions (VFs) ambacho kinaweza kutumika kugawa viongeza kasi vya mtu binafsi kwa mashine pepe.
Shirika la Intel. Haki zote zimehifadhiwa. Intel, nembo ya Intel, na alama zingine za Intel ni chapa za biashara za Intel Corporation au kampuni zake tanzu. Intel inathibitisha utendakazi wa bidhaa zake za FPGA na semiconductor kwa vipimo vya sasa kwa mujibu wa udhamini wa kawaida wa Intel lakini inahifadhi haki ya kufanya mabadiliko kwa bidhaa na huduma zozote wakati wowote bila taarifa. Intel haichukui jukumu au dhima yoyote inayotokana na maombi au matumizi ya taarifa yoyote, bidhaa, au huduma iliyoelezwa humu isipokuwa kama ilivyokubaliwa kwa maandishi na Intel. Wateja wa Intel wanashauriwa kupata toleo jipya zaidi la vipimo vya kifaa kabla ya kutegemea taarifa yoyote iliyochapishwa na kabla ya kuagiza bidhaa au huduma.
Majina na chapa zingine zinaweza kudaiwa kama mali ya wengine.
Kifaa kilichoboreshwa cha FPGA PCIe
Injini ya Usimamizi ya FPGA (FME)
Injini ya Kusimamia ya FPGA hufanya usimamizi wa nishati na joto, kuripoti makosa, usanidi upya, kuripoti utendakazi, na kazi zingine za miundombinu. Kila FPGA ina FME moja, ambayo daima hupatikana kupitia Kazi ya Kimwili (PF). Programu za nafasi ya mtumiaji zinaweza kupata ufikiaji wa kipekee kwa FME kwa kutumia open(), na kuifungua kwa kutumia close() kama mtumiaji aliyebahatika (mizizi).
Bandari
Lango inawakilisha kiolesura kati ya kitambaa tuli cha FPGA (“Kidhibiti cha Kiolesura cha FPGA (FIM)”) na eneo linaloweza kusanidiwa upya ambalo lina Kazi ya Kuongeza Kasi (AF). Mlango hudhibiti mawasiliano kutoka kwa programu hadi kwa kiongeza kasi na kufichua vipengele kama vile kuweka upya na utatuzi. Kifaa cha PCIe kinaweza kuwa na Bandari kadhaa, na kila Mlango unaweza kufichuliwa kupitia VF kwa kuikabidhi kwa kutumia FPGA_FME_PORT_ASSIGN ioctl kwenye kifaa cha FME.
Kitengo cha Kazi ya Kuongeza kasi (AF).
- Kitengo cha Kazi ya Kuongeza kasi (AF) kimeambatishwa kwenye Bandari na kufichua eneo la 256K MMIO litakalotumika kwa rejista za udhibiti mahususi wa kiongeza kasi.
- Programu za nafasi ya mtumiaji zinaweza kupata ufikiaji wa kipekee kwa AFU iliyoambatishwa kwenye Bandari kwa kutumia open() kwenye kifaa cha Bandari, na kuiachilia kwa kutumia close().
- Programu-tumizi za nafasi ya mtumiaji pia zinaweza mmap() kuongeza kasi ya maeneo ya MMIO.
Urekebishaji wa Sehemu
Kama ilivyoelezwa hapo juu, vichapuzi vinaweza kusanidiwa upya kupitia usanidi upya wa Sehemu ya Kazi ya Kiakibishaji (AF) file. Kazi ya Kuongeza kasi (AF) lazima iwe imetolewa kwa ajili ya FIM halisi na eneo tuli linalolengwa (Bandari) la FPGA; vinginevyo, operesheni ya urekebishaji itashindwa na ikiwezekana kusababisha kuyumba kwa mfumo. Utangamano huu unaweza kuangaliwa kwa kulinganisha kitambulisho cha kiolesura kilichobainishwa kwenye kichwa cha AF dhidi ya kitambulisho cha kiolesura kilichofichuliwa na FME kupitia sysfs. Ukaguzi huu kwa kawaida hufanywa na nafasi ya mtumiaji kabla ya kupiga usanidi upya wa IOCTL.
Kumbuka:
Kwa sasa, programu yoyote ya programu inayofikia FPGA, ikijumuisha zile zinazoendeshwa katika seva pangishi iliyoboreshwa, lazima ifungwe kabla ya kujaribu usanidi upya kiasi. Hatua zitakuwa:
- Pakua dereva kutoka kwa mgeni
- Chomoa VF kutoka kwa mgeni
- Zima SR-IOV
- Tekeleza usanidi upya wa sehemu
- Washa SR-IOV
- Chomeka VF kwa mgeni
- Pakia dereva katika mgeni
Uboreshaji wa FPGA
Ili kuwezesha kupata kiongeza kasi kutoka kwa programu zinazoendeshwa katika VM, bandari husika ya AFU inahitaji kupewa VF kwa kutumia hatua zifuatazo:
- PF inamiliki bandari zote za AFU kwa chaguo-msingi. Lango lolote linalohitaji kukabidhiwa upya kwa VF lazima kwanza litolewe kutoka kwa PF kupitia FPGA_FME_PORT_RELEASE ioctl kwenye kifaa cha FME.
- Mara bandari N zinapotolewa kutoka kwa PF, amri iliyo hapa chini inaweza kutumika kuwezesha SRIOV na VF. Kila VF inamiliki bandari moja pekee yenye AFU. echo N > PCI_DEVICE_PATH/sriov_nuMVfs
- Pitia VF hadi VM.
- AFU chini ya VF inapatikana kutoka kwa programu katika VM (kwa kutumia kiendeshi sawa ndani ya VF).
Kumbuka:
FME haiwezi kupewa VF, kwa hivyo PR na kazi zingine za usimamizi zinapatikana tu kupitia PF.
Shirika la madereva
Kiendesha Kifaa cha Moduli ya PCIe
Shirika la madereva
Vifaa vya FPGA vinaonekana kama vifaa vya kawaida vya PCIe; kwa hivyo, kiendeshi cha kifaa cha FPGA PCIe (intel-FPGA-PCI.ko) kila mara hupakiwa kwanza mara tu FPGA PCIe PF au VF inapogunduliwa. Dereva huyu ana jukumu la miundombinu katika usanifu wa dereva. Ni:
- Huunda kifaa cha kontena cha FPGA kama mzazi wa vifaa vinavyoangaziwa.
- Hupitia Orodha ya Vipengele vya Kifaa, ambayo inatekelezwa katika kumbukumbu ya BAR ya kifaa cha PCIe, ili kugundua vifaa vinavyoangaziwa na vipengele vyake vidogo na kuviundia vifaa vya jukwaa chini ya kifaa cha kontena.
- Inasaidia SR-IOV.
- Hutanguliza kipengele cha miundombinu ya kifaa, ambacho huchota utendakazi kwa vipengele vidogo na kufichua utendakazi wa kawaida ili kuangazia viendesha kifaa.
Kazi za Kiendeshi cha Kifaa cha Moduli ya PCIe
- Ina ugunduzi wa PCIe, hesabu za kifaa na ugunduzi wa vipengele.
- Huunda saraka za sysfs za kifaa kikuu, Injini ya Kusimamia ya FPGA (FME), na Mlango.
- Huunda hali za kiendeshi cha jukwaa, na kusababisha kinu cha Linux kupakia viendeshi vya moduli zao za jukwaa.
Kiendeshi cha Kifaa cha Mfumo wa Jukwaa la FME
- Udhibiti wa nishati na mafuta, kuripoti makosa, kuripoti utendaji kazi na utendakazi mwingine wa miundombinu. Unaweza kufikia vitendaji hivi kupitia violesura vya sysfs vilivyofichuliwa na kiendeshi cha FME.
- Urekebishaji wa Sehemu. Dereva wa FME husajili Meneja wa FPGA wakati wa uanzishaji wa kipengele kidogo cha PR; mara tu inapopokea FPGA_FME_PORT_PR ioctl kutoka kwako, inaomba kiolesura cha kawaida kutoka kwa Kidhibiti cha FPGA ili kukamilisha usanidi upya wa sehemu ya mkondo kwenye Mlango uliotolewa.
- Usimamizi wa bandari kwa uboreshaji. Dereva wa FME anatanguliza ioctls mbili, FPGA_FME_PORT_RELEASE, ambayo inatoa Bandari iliyotolewa kutoka PF; na FPGA_FME_PORT_ASSIGN, ambayo inakabidhi Bandari kwa PF. Mara baada ya Bandari kutolewa kutoka kwa PF, inaweza kupewa VF kupitia miingiliano ya SR-IOV iliyotolewa na dereva wa PCIe. Kwa maelezo zaidi, rejelea "FPGA Virtualization".
Kazi za Kiendeshi cha Kifaa cha Jukwaa la FME
- Huunda nodi ya kifaa cha herufi ya FME.
- Huunda sysf za FME files na kutekeleza sysfs za FME file wafikiaji.
- Hutekeleza viendeshi vidogo vya kipengele cha kibinafsi cha FME.
- Viendeshaji vidogo vya kipengele cha kibinafsi cha FME:
- Kichwa cha FME
- Usimamizi wa joto
- Usimamizi wa Nguvu
- Hitilafu ya Ulimwenguni
- Urekebishaji wa Sehemu
- Utendaji wa Kimataifa
Kiendeshi cha Kifaa cha Mfumo wa Bandari
Sawa na kiendeshi cha FME, kiendeshi cha Bandari ya FPGA (na AFU) (intel-fpga-afu. ko) huchunguzwa mara tu kifaa cha jukwaa la Bandari kinapoundwa. Kazi kuu ya moduli hii ni kutoa kiolesura cha programu-tumizi za nafasi ya mtumiaji kufikia viongeza kasi vya mtu binafsi, ikijumuisha udhibiti wa kimsingi wa kuweka upya kwenye Bandari, usafirishaji wa eneo la AFU MMIO, huduma ya kutengeneza ramani ya akiba ya DMA, arifa ya UMsg(1), na vitendakazi vya utatuzi wa mbali ( tazama hapo juu).
UMsg inatumika tu kupitia Rafu ya Kuongeza Kasi ya Kichakata cha Intel Xeon® yenye FPGA Iliyounganishwa.
Kazi za Kiendeshi cha Kifaa cha Mfumo wa Bandari
- Huunda nodi ya kifaa cha herufi ya Mlango.
- Inaunda sysfs za Port files na kutekeleza sysfs za Bandari file wafikiaji.
- Hutekeleza viendeshi vidogo vya kipengele cha Bandari.
- Viendeshi vidogo vya kipengele cha kibinafsi cha bandari:
- Kichwa cha Bandari
- AFU
- Hitilafu ya Mlango
- Msg(2)
- Gonga Mawimbi
Uhesabuji wa Kifaa cha FPGA
Sehemu hii inatanguliza jinsi programu zinavyohesabu kifaa cha FPGA kutoka kwa safu ya sysfs chini ya /sys/class/fpga. Katika exampchini, vifaa viwili vya Intel FPGA vimewekwa kwenye seva pangishi. Kila kifaa cha FPGA kina FME moja na Bandari mbili (AFUs). Kwa kila kifaa cha FPGA, saraka ya kifaa imeundwa chini ya /sys/class/fpga:
/sys/class/fpga/intel-fpga-dev.0
/sys/class/fpga/intel-fpga-dev.1
Kila nodi ina FME moja na Bandari mbili (AFUs) kama vifaa vya watoto:
/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
Kwa ujumla, miingiliano ya FME/Port sysfs imepewa jina kama ifuatavyo:
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-fme.j/
/sys/class/fpga/intel-fpga-dev.i/intel-fpga-port.k/
kwa kuhesabu vifaa vyote vya kontena kwa kufuatana, j kwa nambari za FME na k kuhesabu Bandari zote mfululizo.
Nodi za kifaa zinazotumiwa kwa ioctl() na mmap() zinaweza kurejelewa kupitia:
/dev/intel-fpga-fme.j
/dev/intel-fpga-port.k
Uhesabuji wa Dereva wa PCIe
Sehemu hii inatoa malipoview ya mtiririko wa msimbo wa kuhesabu kifaa unaofanywa na intel-fpga-pci.ko. Miundo kuu ya data na kazi zinaangaziwa. Sehemu hii inafuatwa vyema wakati gani viewikiambatana na msimbo wa chanzo (pcie.c).
Miundo ya Data ya Hesabu
enum fpga_id_type {
PARENT_ID,
FME_ID,
PORT_ID,
FPGA_ID_MAX
};
muundo tuli idr fpga_ids[FPGA_ID_MAX];
muundo fpga_chardev_info {
const char *jina;
dev_t devt;
};
muundo fpga_chardev_info fpga_chrdevs[] = {
{ .jina = FPGA_FEATURE_DEV_FME },
{ .jina = FPGA_FEATURE_DEV_PORT },
};
darasa la muundo tuli *fpga_class;
muundo tuli 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,}
};
muundo tuli pci_driver cci_pci_driver = {
.jina = DRV_NAME,
.id_table = cci_pcie_id_tbl,
.probe = cci_pci_probe,
.ondoa = cci_pci_remove,
.sriov_configure = cci_pci_sriov_configure
};
muundo cci_drvdata {
int device_id;
muundo wa kifaa * fme_dev;
tengeneza kufuli ya mutex;
struct list_head port_dev_list;
int released_port_num;
struct list_head mikoa;
};
struct build_feature_devs_info {
tengeneza pci_dev *pdev;
batili __iomem *ioaddr;
utupu __iomem *ioend;
int current_bar;
utupu __iomem *pfme_hdr;
muundo wa kifaa *mzazi_dev;
muundo_kifaa cha jukwaa *feature_dev;
};
Mtiririko wa Hesabu
- ccidrv_init()
- Anzisha fpga_ids kwa kutumia idr_init().
- Anzisha fpga_chrdevs[i].devt kwa kutumia alloc_chrdev_region().
- Anzisha fpga_class kwa kutumia class_create().
- pci_register_driver(&cci_pci_driver);
- cci_pci_probe()
- Washa kifaa cha PCI, omba ufikiaji wa maeneo yake, weka hali kuu ya PCI, na usanidi DMA.
- cci_pci_create_feature_devs() build_info_alloc_and_init()
- Tenga muundo wa build_feature_devs_info, uanzishe.
.parent_dev imewekwa kwenye saraka kuu ya sysfs (intel-fpga-dev.id) ambayo ina saraka za FME na Port sysfs.
- Tenga muundo wa build_feature_devs_info, uanzishe.
- orodha_ya_kipengele()
- Tembea Orodha ya Vipengele vya Kifaa BAR0 ili kugundua FME, Bandari na vipengele vyake vya faragha.
- parse_feature() parse_feature_afus() parse_feature_fme()
- Wakati FME inapokutana:
- build_info_create_dev()
- Tenga kifaa cha jukwaa kwa FME, ukihifadhi katika build_feature_devs_info.feature_dev.
- feature_dev.id imeanzishwa kwa matokeo ya idr_alloc(fpga_ids[FME_ID],
- feature_dev.parent imewekwa kujenga_feature_devs_info.parent_dev.
- Tenga safu ya rasilimali za muundo katika kipengele_dev.resource.
- Tenga data_ya_jukwaa_muundo, ianzishe, na uhifadhi kiashirio katika data_dev.dev.platform_data
- create_feature_instance() build_info_add_sub_feature()
- Anzisha kipengele_dev.resource[FME_FEATURE_ID_HEADER].
- kipengele_data_jukwaa_add()
- Anzisha kipengele_platform_data.features[FME_FEATURE_ID_HEADER], kila kitu isipokuwa .fops.
- changanua_kipengele() changanua_kipengele_afus() changanua_kipengele_bandari()
- Wakati Bandari inakabiliwa:
- build_info_create_dev()
- Tenga kifaa cha jukwaa kwa Bandari, ukihifadhi katika build_feature_devs_info.feature_dev.
- feature_dev.id imeanzishwa kwa matokeo ya idr_alloc(fpga_ids[PORT_ID],
- feature_dev.parent imewekwa kujenga_feature_devs_info.parent_dev.
- Tenga safu ya rasilimali ya muundo katika kipengele_dev.resource.
- Tenga data_ya_jukwaa_muundo, ianzishe, na uhifadhi kiashirio katika data_dev.dev.platform_data
- build_info_commit_dev()
- Ongeza muundo wa kipengele_platform_data.nodi ya Bandari kwenye orodha ya Bandari katika muundo cci_drvdata.port_dev_list
- create_feature_instance() build_info_add_sub_feature()
- Anzisha kipengele_dev.resource[PORT_FEATURE_ID_HEADER].
- kipengele_data_jukwaa_add()
- Anzisha kipengele_platform_data.features[PORT_FEATURE_ID_HEADER], kila kitu isipokuwa .fops.
- parse_feature() changanua_feature_afus() changanua_kipengele_port_uafu()
- Wakati AFU inakabiliwa:
- create_feature_instance() build_info_add_sub_feature()
- Anzisha kipengele_dev.resource[PORT_FEATURE_ID_UAFU].
- kipengele_data_jukwaa_add()
- Anzisha kipengele_platform_data.features[PORT_FEATURE_ID_UAFU], kila kitu isipokuwa .fops.
- parse_feature() changanua_feature_private() changanua_feature_fme_private()
- Wakati kipengele cha faragha cha FME kinapopatikana:
- create_feature_instance() build_info_add_sub_feature()
- Anzisha kipengele_dev.resource[id].
- kipengele_data_jukwaa_add()
- Anzisha kipengele_platform_data.features[id], kila kitu isipokuwa .fops.
- changanua_kipengele() changanua_kipengele_kibinafsi() changanua_kipengele_bandari_kibinafsi()
- Wakati kipengele cha faragha cha Mlango kinapopatikana: * create_feature_instance() build_info_add_sub_feature() * Anzisha kipengele_dev.resource[id]. * feature_platform_data_add() Anzisha kipengele_platform_data.features[id], kila kitu isipokuwa .fops.
- changanua_bandari_kutoka_fme()
- Ikiwa dereva amepakiwa kwenye Kazi ya Kimwili (PF), basi:
- Endesha mtiririko wa parse_feature_list() kwenye kila mlango uliofafanuliwa kwenye kichwa cha FME.
- Tumia BAR iliyotajwa katika kila ingizo la Bandari kwenye kichwa.
Uanzishaji wa Kifaa cha Jukwaa la FME
Sehemu hii inatoa malipoview ya mtiririko wa msimbo wa uanzishaji wa kifaa cha FME unaotekelezwa na intel-fpga-fme.ko. Miundo na kazi kuu za data zimeangaziwa. Sehemu hii inafuatwa vyema wakati gani viewkuambatana na msimbo wa chanzo (fme-main.c).
Miundo ya Data ya Kifaa cha Jukwaa la FME
muundo_vipengele_vya_vifaa{
int (*init)(muundo platform_device *pdev, struct kipengele *kipengele);
int (*unit)(muundo platform_device *pdev, struct kipengele *kipengele);
long (*ioctl)(struct platform_device *pdev, kipengele cha muundo *kipengele,
int cmd isiyosajiliwa, arg ndefu isiyo na saini);
int (* test)(struct platform_device *pdev, struct kipengele *feature);
};
kipengele cha muundo {
const char *jina;
int resource_index;
batili __iomem *ioaddr;
muundo kipengele_ops *ops;
};
muundo_data_jukwaa_la_data {
struct list_head nodi;
tengeneza kufuli ya mutex;
unsigned dev_status ndefu;
muundo cdev cdev;
tengeneza platform_device *dev;
bila saini disable_count;
utupu *faragha;
nambari ya int;
int (*config_port)(muundo platform_device *, u32, bool);
tengeneza kifaa_cha_jukwaa *(*fpga_for_each_port)(unda kifaa_cha_jukwaa*,
batili *, int (*mechi)(muundo jukwaa_device *, batili *)); muundo
vipengele vya kipengele[0];
};
muundo perf_object {
kitambulisho cha int;
const struct attribute_group **attr_groups;
muundo wa kifaa * fme_dev;
struct list_head nodi;
struct list_head watoto;
struct kobject kobj;
};
tengeneza fpga_fme {
kitambulisho cha bandari cha u8;
u64 pr_err;
muundo wa kifaa *dev_err;
struct perf_object *perf_dev;
muundo_data_jukwaa_data *pdata;
};
Mtiririko wa Uanzishaji wa Kifaa cha Mfumo wa FME
Mtiririko wa Uanzishaji wa FME
- fme_probe() fme_dev_init()
- Anzisha muundo wa fpga_fme na uihifadhi katika uga wa feature_platform_data.private.
- fme_probe() fpga_dev_feature_init() kipengele_instance_init()
- Hifadhi vipengele vya muundo_katika vipengele vya_platform_data.features kwa kila kipengele kilichojaa watu.
- Piga kitendakazi cha jaribio, ikiwa kipo, kutoka kwa muundo.
- Piga kitendakazi cha init kutoka kwa muundo.
- fme_probe() fpga_register_dev_ops()
- Unda nodi ya kifaa cha herufi ya FME, kusajili muundo file_operesheni.
Uanzishaji wa Kifaa cha Mfumo wa Bandari
Sehemu hii inatoa malipoview ya mtiririko wa msimbo wa uanzishaji wa kifaa cha mlango unaotekelezwa na intel-fpga-afu.ko. Miundo kuu ya data na kazi zinaangaziwa. Sehemu hii inafuatwa vyema wakati gani viewkwa msimbo wa chanzo unaoambatana (afu.c).
Miundo ya Data ya Kifaa cha Mfumo wa Bandari
muundo_vipengele_vya_vifaa{
int (*init)(muundo platform_device *pdev, struct kipengele *kipengele);
int (*unit)(muundo platform_device *pdev, struct kipengele *kipengele);
long (*ioctl)(struct platform_device *pdev, kipengele cha muundo *kipengele,
int cmd isiyosajiliwa, arg ndefu isiyo na saini);
int (* test)(struct platform_device *pdev, struct kipengele *feature);
};
kipengele cha muundo {
const char *jina;
int resource_index;
batili __iomem *ioaddr;
muundo kipengele_ops *ops;
};
muundo_data_jukwaa_la_data {
struct list_head nodi;
tengeneza kufuli ya mutex;
unsigned dev_status ndefu;
muundo cdev cdev;
tengeneza platform_device *dev;
bila saini disable_count;
utupu *faragha;
nambari ya int;
int (*config_port)(muundo platform_device *, u32, bool);
tengeneza kifaa_cha_jukwaa *(*fpga_for_each_port)(unda kifaa_cha_jukwaa*,
batili *, int (*mechi)(muundo jukwaa_device *, batili *));
vipengele vya kipengele cha muundo[0];
};
tengeneza fpga_afu_region {
u32 index;
bendera za u32;
ukubwa wa u64;
u64 kukabiliana;
u64 fizikia;
struct list_head nodi;
};
tengeneza fpga_afu_dma_region {
u64 mtumiaji_add;
urefu wa u64;
u64 iova;
ukurasa wa muundo **kurasa;
tengeneza nodi ya rb_nodi;
bool in_use;
};
tengeneza fpga_afu {
u64 mkoa_cur_offset;
int num_regions;
u8 num_umsgs;
struct list_head mikoa;
struct rb_root dma_regions;
muundo_data_jukwaa_data *pdata;
};
Mtiririko wa Uanzishaji wa Kifaa cha Mfumo wa Bandari
Mtiririko wa Kuanzisha Bandari
- afu_probe() afu_dev_init()
- Anzisha muundo wa fpga_afu na uihifadhi katika uga wa kipengele_data_faragha.
- afu_probe() fpga_dev_feature_init() kipengele_instance_init()
- Hifadhi vipengele vya muundo_katika vipengele vya_platform_data.features kwa kila kipengele kilichojaa watu.
- Piga kitendakazi cha jaribio, ikiwa kipo, kutoka kwa muundo.
- Piga kitendakazi cha init kutoka kwa muundo.
- afu_probe() fpga_register_dev_ops()
- Unda nodi ya kifaa cha mhusika Bandari, kusajili muundo file_operesheni.
IOCTL za FME
IOCTL zinazoitwa kwenye open file descriptor for /dev/intel-fpga-fme.j FPGA_GET_API_VERSION—rudisha toleo la sasa kama nambari kamili, kuanzia 0.
FPGA_CHECK_EXTENSION-haitumiki kwa sasa.
FPGA_FME_PORT_RELEASE—arg ni kiashirio kwa:
tengeneza fpga_fme_port_release {
__u32 argsz; // katika: sizeof(muundo wa fpga_fme_port_release)
__u32 bendera; // ndani: lazima iwe 0
__u32 kitambulisho_cha_mlango; // katika: kitambulisho cha bandari (kutoka 0) hadi kutolewa.
};
FPGA_FME_PORT_ASSIGN—arg ni kiashirio kwa:
tengeneza fpga_fme_port_assign {
__u32 argsz; // katika: sizeof(muundo wa fpga_fme_port_assign)
__u32 bendera; // ndani: lazima iwe 0
__u32 kitambulisho_cha_mlango; // katika: kitambulisho cha bandari (kutoka 0) cha kugawa. (lazima iwe
iliyotolewa hapo awali na FPGA_FME_PORT_RELEASE)
};
FPGA_FME_PORT_PR—arg ni kiashirio kwa:
tengeneza fpga_fme_port_pr {
__u32 argsz; // katika: sizeof(muundo wa fpga_fme_port_pr)
__u32 bendera; // ndani: lazima iwe 0
__u32 kitambulisho_cha_mlango; // katika: kitambulisho cha bandari (kutoka 0)
__u32 ukubwa_wa_bafa; // ndani: saizi ya bafa ya mkondo kidogo katika baiti. Lazima iwe 4-baiti
iliyokaa.
__u64 bafa_anwani; // katika: anwani ya mchakato wa bafa ya bitstream
__u64 hali; // nje: hali ya makosa (bitmask)
};
IOCTL za bandari
IOCTL zinazoitwa kwenye open file kifafanuzi cha /dev/intel-fpga-port.k FPGA_GET_API_VERSION—rudisha toleo la sasa kama nambari kamili, kuanzia 0. FPGA_CHECK_EXTENSION—haitumiki kwa sasa.
FPGA_PORT_GET_INFO-arg ni kiashirio kwa:
tengeneza fpga_port_info {
__u32 argsz; // katika: saizi ya (muundo wa fpga_port_info)
__u32 bendera; // nje: inarudi 0
__u32 nambari_maeneo; // nje: idadi ya mikoa ya MMIO, 2 (1 kwa AFU na 1 kwa
STP)
__u32 nambari_umsgs; // out: idadi ya UMsg inayoungwa mkono na maunzi
};
FPGA_PORT_GET_REGION_INFO—arg ni kiashirio kwa:
muundo fpga_port_region_info {
__u32 argsz; // katika: sizeof(muundo wa fpga_port_region_info)
__u32 bendera; // nje: (bitmask) {FPGA_REGION_READ, FPGA_REGION_WRITE,
FPGA_REGION_MMAP }
__u32 index; // katika: FPGA_PORT_INDEX_UAFU au FPGA_PORT_INDEX_STP
__u32 pedi; // ndani: lazima iwe 0
__u64 ukubwa; // nje: ukubwa wa eneo la MMIO kwa baiti
__u64 kukabiliana; // nje: kukabiliana na eneo la MMIO kutoka mwanzo wa kifaa fd
};
FPGA_PORT_DMA_MAP—arg ni kiashirio kwa:
tengeneza fpga_port_dma_map {
__u32 argsz; // katika: sizeof(muundo fpga_port_dma_map)
__u32 bendera; // katika: lazima iwe 0 __u64 user_addr; // katika: mchakato wa mtandaoni
anwani. Lazima ukurasa upangiliwe.
__u64 urefu; // katika: urefu wa ramani kwa baiti. Lazima iwe nakala ya ukurasa
ukubwa.
__u64 iova; // nje: IO anwani pepe };
FPGA_PORT_DMA_UNMAP—arg ni kiashirio kwa:
tengeneza fpga_port_dma_unmap {
__u32 argsz; // katika: sizeof(muundo wa fpga_port_dma_unmap)
__u32 bendera; // ndani: lazima iwe 0
__u64 iova; // katika: Anwani pepe ya IO iliyorejeshwa na iliyotangulia
FPGA_PORT_DMA_MAP };
- FPGA_PORT_RESET—arg lazima iwe NULL.
- FPGA_PORT_UMSG_ENABLE—arg lazima iwe NULL.
- FPGA_PORT_UMSG_DISABLE—mabishano lazima yawe NULL.
FPGA_PORT_UMSG_SET_MODE—arg ni kiashirio kwa:
tengeneza fpga_port_umsg_cfg {
__u32 argsz; // katika: sizeof(muundo fpga_port_umsg_cfg)
__u32 bendera; // ndani: lazima iwe 0
__u32 kidokezo_bitmap; // katika: Njia ya kidokezo ya UMsg bitmap. Inaashiria UMsg ni zipi
kuwezeshwa.
};
FPGA_PORT_UMSG_SET_BASE_ADDR—
- UMsg lazima izime kabla ya kutoa ioctl hii.
- Sehemu ya iova lazima iwe ya bafa kubwa ya kutosha kwa UMsg zote (num_umsgs * PAGE_SIZE).
- Bafa imealamishwa kama "inatumika" na udhibiti wa bafa ya dereva.
- Ikiwa iova ni NULL, eneo lolote la awali halijawekwa alama kuwa "linatumika".
- arg ni kiashirio kwa:
tengeneza fpga_port_umsg_base_addr {- u32 argsz; // katika: sizeof(muundo wa fpga_port_umsg_base_addr)
- bendera za u32; // ndani: lazima iwe 0
- u64 iova; // katika: IO anwani pepe kutoka FPGA_PORT_DMA_MAP. };
Kumbuka:
- Ili kufuta makosa ya bandari, unapaswa kuandika bitmask halisi ya makosa ya sasa, kwa mfanoample, makosa ya paka > wazi
- UMsg inatumika tu kupitia Rafu ya Kuongeza Kasi ya Intel Xeon Processor yenye FPGA Iliyounganishwa.
sysfs Files
FME Header sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/
sysfs file | shamba la mmio | aina | ufikiaji |
bandari_nambari | fme_header.capability.num_ports | desimali int | Kusoma pekee |
saizi_ya kache | fme_header.capability.cache_size | desimali int | Kusoma pekee |
toleo | fme_header.capability.fabric_verid | desimali int | Kusoma pekee |
kitambulisho_cha_kitu | fme_header.capability.socket_id | desimali int | Kusoma pekee |
bitstream_id | fme_header.bitstream_id | hex uint64_t | Kusoma pekee |
bitstream_metadata | fme_header.bitstream_md | hex uint64_t | Kusoma pekee |
Mfumo wa Udhibiti wa Joto wa FME files
intel-fpga-dev.i/intel-fpga-fme.j/thermal_mgmt/
sysfs file | shamba la mmio | aina | ufikiaji |
kizingiti1 | thermal.threshold.tmp_thshold1 | desimali int | Mtumiaji: Mzizi wa Kusoma pekee: Soma-andika |
kizingiti2 | thermal.threshold.tmp_thshold2 | desimali int | Mtumiaji: Mzizi wa Kusoma pekee: Soma-andika |
kizingiti_safari | thermal.threshold.therm_trip_thshold | desimali int | Kusoma pekee |
kizingiti1_kimefikiwa | thermal.threshold.thshold1_hadhi | desimali int | Kusoma pekee |
kizingiti2_kimefikiwa | thermal.threshold.thshold2_hadhi | desimali int | Kusoma pekee |
threshold1_sera | joto. threshold.thshold.sera | desimali int | Mtumiaji: Mzizi wa Kusoma pekee: Soma-andika |
joto | thermal.rdsensor_fm1.fpga_temp | desimali int | Kusoma pekee |
Mfumo wa Usimamizi wa Nguvu za FME files
intel-fpga-dev.i/intel-fpga-fme.j/power_mgmt/
sysfs file | shamba la mmio | aina | ufikiaji |
zinazotumiwa | power.status.pwr_consumed | hex uint64_t | Kusoma pekee |
kizingiti1 | nguvu.kizingiti.1 | hex uint64_t | Mtumiaji: Mzizi wa Kusoma pekee: Soma-andika |
kizingiti2 | nguvu.kizingiti.2 | hex uint64_t | Mtumiaji: Mzizi wa Kusoma pekee: Soma-andika |
kizingiti1_hadhi | nguvu.kizingiti.kizingiti1_hadhi | desimali haijatiwa saini | Kusoma pekee |
kizingiti2_hadhi | nguvu.kizingiti.kizingiti2_hadhi | desimali haijatiwa saini | Kusoma pekee |
rtl | power.status.fpga_latency_report | desimali haijatiwa saini | Kusoma pekee |
FME Global Hitilafu sysfs files
intel-fpga-dev.i/intel-fpga-fme.j/errors/
sysfs file | shamba la mmio | aina | ufikiaji |
makosa_ya pcie0 | gerror.pcie0_err | hex uint64_t | Soma -andika |
makosa_ya pcie1 | gerror.pcie1_err | hex uint64_t | Soma -andika |
ingiza_kosa | gerror.ras_error_inj | hex uint64_t | Soma -andika |
intel-fpga-dev.i/intel-fpga-fme.j/errors/fme-errors/
sysfs file | shamba la mmio | aina | ufikiaji |
makosa | gerror.fme_err | hex uint64_t | Kusoma pekee |
kosa_kwanza | gerror.fme_first_err.err_reg_status | hex uint64_t | Kusoma pekee |
kosa_linalofuata | gerror.fme_next_err.err_reg_status | hex uint64_t | Kusoma pekee |
wazi | Hufuta makosa, kosa_kwanza, kosa_linalofuata | uint64_t mbalimbali | Andika pekee |
Kumbuka:
Ili kufuta makosa ya FME, lazima uandike bitmask halisi ya makosa ya sasa, kwa mfanoampmakosa ya paka > wazi.
Mipangilio ya Urekebishaji Sehemu ya FME files
intel-fpga-dev.i/intel-fpga-fme.j/pr/
sysfs file | shamba la mmio | aina | ufikiaji |
interface_id | pr.fme_pr_intfc_id0_h, pr.fme_pre_intfc_id0_l | hex 16-baiti | Kusoma pekee |
Mfumo wa Utendaji wa Kimataifa wa FME files
intel-fpga-dev.i/intel-fpga-fme.j/dperf/clock
sysfs file | shamba la mmio | aina | ufikiaji |
saa | gperf.clk.afu_interf_clock | hex uint64_t | Kusoma pekee |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/cache/ (Si sahihi kwa Rafu ya Kuongeza Kasi kwa Intel Xeon CPU yenye FPGAs)
sysfs file | shamba la mmio | aina | ufikiaji |
kufungia | gperf.ch_ctl.freeze | desimali int | Soma -andika |
soma_piga | gperf.CACHE_RD_HIT | hex uint64_t | Kusoma pekee |
soma_kosa | gperf.CACHE_RD_MISS | hex uint64_t | Kusoma pekee |
andika_piga | gperf.CACHE_WR_HIT | hex uint64_t | Kusoma pekee |
andika_kosa | gperf.CACHE_WR_MISS | hex uint64_t | Kusoma pekee |
shikilia_ombi | gperf.CACHE_HOLD_REQ | hex uint64_t | Kusoma pekee |
tx_req_stall | gperf.CACHE_TX_REQ_STALL | hex uint64_t | Kusoma pekee |
sysfs file | shamba la mmio | aina | ufikiaji |
rx_req_stall | gperf.CACHE_RX_REQ_STALL | hex uint64_t | Kusoma pekee |
data_write_port_contention | gperf.CACHE_DATA_WR_PORT_CONTEN | hex uint64_t | Kusoma pekee |
tag_andika_bandari_content | gperf.CACHE_TAG_WR_PORT_CONTEN | hex uint64_t | Kusoma pekee |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/ (Si halali kwa Rafu ya Kuongeza Kasi kwa Intel Xeon CPU yenye FPGAs)
sysfs file | shamba la mmio | aina | ufikiaji |
kufungia | gperf.vtd_ctl.gandisha | desimali int | Mtumiaji: Mzizi wa Kusoma pekee: Soma-andika |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/iommu/afuk/ (Si sahihi kwa Rafu ya Kuongeza Kasi kwa Intel Xeon CPU yenye FPGAs)
sysfs file | shamba la mmio | aina | ufikiaji |
soma_muamala | gperf.VTD_AFU0_MEM_RD_TRANS | hex uint64_t | Kusoma pekee |
andika_muamala | gperf.VTD_AFU0_MEM_WR_TRANS | hex uint64_t | Kusoma pekee |
tlb_soma_hit | gperf.VTD_AFU0_TLB_RD_HIT | hex uint64_t | Kusoma pekee |
tlb_write_hit | gperf.VTD_AFU0_TLB_WR_HIT | hex uint64_t | Kusoma pekee |
intel-fpga-dev.i/intel-fpga-fme.j/dperf/fabric/
sysfs file | shamba la mmio | aina | ufikiaji |
wezesha | gperf.fab_ctl.(imewezeshwa) | desimali int | Mtumiaji: Mzizi wa Kusoma pekee: Soma-andika |
kufungia | gperf.fab_ctl.freeze | desimali int | Mtumiaji: Mzizi wa Kusoma pekee: Soma-andika |
pcie0_soma | gperf.FAB_PCIE0_RD | hex uint64_t | Kusoma pekee |
pcie0_andika | gperf.FAB_PCIE0_WR | hex uint64_t | Kusoma pekee |
pcie1_soma | gperf.FAB_PCIE1_RD | hex uint64_t | Kusoma pekee |
pcie1_andika | gperf.FAB_PCIE1_WR | hex uint64_t | Kusoma pekee |
upi_soma | gperf.FAB_UPI_RD | hex uint64_t | Kusoma pekee |
upi_andika | gperf.FAB_UPI_WR | hex uint64_t | Kusoma pekee |
intel-fpga-ev.i/intel-fpga/fme.j/dperf/fabric/portk/
sysfs file | shamba la mmio | aina | ufikiaji |
pcie0_soma | gperf.FAB_PCIE0_RD | hex uint64_t | Kusoma pekee |
pcie0_andika | gperf.FAB_PCIE0_WR | hex uint64_t | Kusoma pekee |
pcie1_soma | gperf.FAB_PCIE1_RD | hex uint64_t | Kusoma pekee |
pcie1_andika | gperf.FAB_PCIE1_WR | hex uint64_t | Kusoma pekee |
upi_soma | gperf.FAB_UPI_RD | hex uint64_t | Kusoma pekee |
upi_andika | gperf.FAB_UPI_WR | hex uint64_t | Kusoma pekee |
sysfs za Kichwa cha Bandari files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | shamba la mmio | aina | ufikiaji |
id | port_header.capability.port_number | desimali int | Kusoma pekee |
ltr | port_header.control.latency_tolerance | desimali int | Kusoma pekee |
Port AFU Header sysfs files
intel-fpga-dev.i/intel-fpga-port.k/
sysfs file | shamba la mmio | aina | ufikiaji |
afu_id | afu_header.guid | hex 16-baiti | Kusoma pekee |
Hitilafu ya Mlango sysfs files
intel-fpga-dev.i/intel-fpga-port.k/errors/
sysfs file | shamba la mmio | aina | ufikiaji |
makosa | kosa_la_port | hex uint64_t | Kusoma pekee |
kosa_kwanza | kosa.port_first_error | hex uint64_t | Kusoma pekee |
req_ya_iliyoharibika_kwanza | kosa.mabaya | hex 16-baiti | Kusoma pekee |
wazi | kosa.(makosa yote) | uint64_t mbalimbali | Andika pekee |
Kumbuka:
Ili kufuta makosa ya Bandari, lazima uandike bitmask halisi ya makosa ya sasa, kwa mfanoampmakosa ya paka > wazi.
Historia ya Marekebisho
Toleo la Hati | Mabadiliko |
2017.10.02 | Toleo la Awali. |
Mwongozo wa Usanifu wa Dereva wa Kifaa cha OPAE Intel FPGA Linux
Nyaraka / Rasilimali
![]() |
Intel OPAE FPGA Usanifu wa Kifaa cha Linux [pdf] Mwongozo wa Mtumiaji OPAE FPGA Usanifu wa Kiendesha Kifaa cha Linux, OPAE FPGA, Usanifu wa Kiendeshi cha Kifaa cha Linux, Usanifu wa Dereva, Usanifu. |