亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

PCIe配置空間與BAR空間詳解:從枚舉到FPGA實(shí)戰(zhàn)調(diào)試

PCIe配置空間與BAR空間詳解:從枚舉到FPGA實(shí)戰(zhàn)調(diào)試 PCIe 這玩意兒剛接觸的時(shí)候最容易讓人懵圈的不是那些高速信號(hào)、鏈路訓(xùn)練反而是軟件層面那兩個(gè)看起來平平無奇的東西配置空間和 BAR 空間。我見過不少做 FPGA 的兄弟邏輯寫得飛起DMA 也能跑通但一到主機(jī)識(shí)別不到設(shè)備、或者 BAR 地址映射錯(cuò)亂就抓瞎了。問題往往就出在對(duì)這兩個(gè)空間的機(jī)制理解得不夠透。這篇就專門把配置空間和 BAR 空間掰開揉碎講清楚它們各自裝了什么、為什么這么設(shè)計(jì)、實(shí)際調(diào)試中怎么用以及那些文檔里不會(huì)寫的坑。1. 為什么 PCIe 需要配置空間和 BAR 這兩套地址體系要理解配置空間和 BAR得先回到 PCIe 設(shè)計(jì)的一個(gè)根本矛盾上。主機(jī) CPU 訪問內(nèi)存是按物理地址走的而 PCIe 設(shè)備自己內(nèi)部也有一堆寄存器、緩沖區(qū)、控制邏輯這些東西也需要被 CPU 訪問。問題是設(shè)備插到哪個(gè)槽位、系統(tǒng)里掛了多少設(shè)備這些在開機(jī)之前都是未知的。你不可能給每個(gè)設(shè)備預(yù)先分配一段固定的物理地址那樣地址空間早就沖突了。所以 PCIe 采用了一套先枚舉、后分配的機(jī)制。配置空間就是設(shè)備的身份證加簡(jiǎn)歷里面記錄了廠商 ID、設(shè)備 ID、類型、需要多大地址空間等固定信息。主機(jī)在枚舉階段掃描總線讀每個(gè)設(shè)備的配置空間搞清楚你是誰、你要多少資源然后統(tǒng)一分配地址。BAR 空間則是設(shè)備向主機(jī)申請(qǐng)的地盤主機(jī)分配好地址后把基地址寫回 BAR 寄存器設(shè)備就知道哦原來我的寄存器在主機(jī)眼里是這個(gè)地址。這套機(jī)制的核心價(jià)值在于地址無關(guān)性。設(shè)備不需要知道自己會(huì)被映射到哪個(gè)地址它只需要聲明我需要 4KB 的寄存器空間和我需要 16MB 的顯存空間剩下的交給主機(jī)。這也是為什么同一塊 FPGA 板卡插到不同主板上都能正常工作因?yàn)榈刂肥莿?dòng)態(tài)分配的。從拓?fù)浣Y(jié)構(gòu)上看PCIe 是一棵樹根復(fù)合體Root Complex是根下面掛交換機(jī)Switch和端點(diǎn)設(shè)備Endpoint。配置空間和 BAR 的分配是沿著這棵樹逐級(jí)進(jìn)行的。每個(gè)橋設(shè)備包括交換機(jī)端口也有自己的配置空間負(fù)責(zé)管理下游總線的地址窗口。理解這個(gè)層級(jí)關(guān)系對(duì)后面排查 BAR 分配失敗非常關(guān)鍵。很多人把配置空間和 BAR 空間混為一談其實(shí)它們是兩個(gè)完全不同的地址域。配置空間通過 CFG 事務(wù)訪問走的是獨(dú)立的配置讀寫通道BAR 空間則是通過 MEM 或 IO 事務(wù)訪問走的是正常的內(nèi)存映射通道。這個(gè)區(qū)別在調(diào)試時(shí)非常重要。2. 配置空間里到底裝了哪些東西配置空間是 PCIe 設(shè)備的標(biāo)準(zhǔn)寄存器區(qū)域規(guī)范定義每個(gè)功能Function必須有至少 256 字節(jié)的配置空間PCIe 還擴(kuò)展到了 4KB。這 4KB 不是隨便堆的而是按固定偏移劃分成一個(gè)個(gè)有明確用途的字段。理解這些字段的布局是讀懂枚舉日志和排查識(shí)別問題的前提。2.1 前 64 字節(jié)設(shè)備身份與命令控制配置空間的前 64 字節(jié)是所有 PCIe 設(shè)備都必須實(shí)現(xiàn)的這部分叫 Type 0 頭對(duì)于端點(diǎn)設(shè)備或 Type 1 頭對(duì)于橋設(shè)備。里面最關(guān)鍵的幾個(gè)字段Vendor ID 和 Device ID偏移 0x00 和 0x02廠商 ID 由 PCI-SIG 統(tǒng)一分配設(shè)備 ID 由廠商自己定義。主機(jī)枚舉時(shí)第一件事就是讀這兩個(gè)值如果是 0xFFFF說明這個(gè)位置沒有設(shè)備或者設(shè)備沒準(zhǔn)備好。Command 寄存器偏移 0x04控制設(shè)備是否響應(yīng) MEM 訪問、IO 訪問、總線主控等。很多新手遇到設(shè)備能識(shí)別但訪問不了 BAR的問題十有八九是 Command 寄存器里的 Memory Space Enable 位沒置起來。Status 寄存器偏移 0x06反映設(shè)備狀態(tài)比如是否支持能力列表、是否有錯(cuò)誤等。Revision ID 和 Class Code偏移 0x08 和 0x09Revision 是版本號(hào)Class Code 標(biāo)識(shí)設(shè)備類型比如 0x020000 是以太網(wǎng)控制器0x010802 是 NVMe 存儲(chǔ)控制器。操作系統(tǒng)就是靠 Class Code 來加載對(duì)應(yīng)驅(qū)動(dòng)的。Header Type偏移 0x0E標(biāo)識(shí)這是 Type 0 還是 Type 1 頭以及是否是多功能設(shè)備。BAR0 到 BAR5偏移 0x10 到 0x24六個(gè)基地址寄存器這是配置空間和 BAR 空間的交匯點(diǎn)后面單獨(dú)展開講。Capabilities Pointer偏移 0x34指向能力列表的偏移PCIe 的各種高級(jí)功能都掛在能力列表里。我實(shí)際調(diào)試中遇到最多的情況是FPGA 加載了錯(cuò)誤的比特流Vendor ID 和 Device ID 讀出來是默認(rèn)值或者全 F主機(jī)直接判定為無效設(shè)備。所以每次上電先確認(rèn)這兩個(gè) ID 是否正確是最基本的排查動(dòng)作。2.2 能力列表PCIe 的高級(jí)功能入口從偏移 0x34 開始配置空間里掛了一條鏈表叫能力列表Capability List。每個(gè)能力項(xiàng)都有一個(gè) 8 位的 Capability ID 和一個(gè)指向下一項(xiàng)的指針。PCIe 設(shè)備必須實(shí)現(xiàn)的能力包括Power Management CapabilityID 0x01電源管理相關(guān)控制設(shè)備在不同電源狀態(tài)間切換。MSI CapabilityID 0x05消息信號(hào)中斷替代傳統(tǒng)的 INTx 中斷。現(xiàn)代 PCIe 設(shè)備基本都用 MSI 或 MSI-X。PCI Express CapabilityID 0x10這是 PCIe 特有的包含設(shè)備類型、鏈路狀態(tài)、鏈路能力等信息。調(diào)試鏈路降速、降寬問題時(shí)就是讀這里的 Link Status 寄存器。MSI-X CapabilityID 0x11支持更多中斷向量NVMe 和高速網(wǎng)卡常用。能力列表的遍歷方式是從 Capabilities Pointer 開始讀第一個(gè)能力的 ID 和 Next Pointer然后順著指針一直走直到 Next Pointer 為 0。這個(gè)遍歷邏輯在寫驅(qū)動(dòng)或者調(diào)試工具時(shí)經(jīng)常用到。2.3 擴(kuò)展配置空間4KB 里的后半部分PCIe 把配置空間從 256 字節(jié)擴(kuò)展到了 4KB前 256 字節(jié)保持和 PCI 兼容后面的 3.75KB 是 PCIe 擴(kuò)展配置空間。這里最重要的是擴(kuò)展能力列表Extended Capability List從偏移 0x100 開始每個(gè)擴(kuò)展能力有 16 位的 ID。常見的擴(kuò)展能力包括Advanced Error ReportingAER高級(jí)錯(cuò)誤報(bào)告能精確報(bào)告是哪種錯(cuò)誤、發(fā)生在哪個(gè)層級(jí)。排查掉卡、鏈路錯(cuò)誤時(shí)必看。Secondary PCI Express Extended Capability包含鏈路均衡相關(guān)的寄存器調(diào)試鏈路穩(wěn)定性時(shí)用得到。SR-IOV Capability單根 IO 虛擬化網(wǎng)卡和 FPGA 加速卡常用。TPHTLP Processing Hints提示 TLP 的處理方式對(duì)性能優(yōu)化有幫助。訪問擴(kuò)展配置空間需要用 PCIe 的配置事務(wù)傳統(tǒng)的 CF8/CFC 端口只能訪問前 256 字節(jié)。在 Linux 下可以用lspci -vvv看到擴(kuò)展能力的詳細(xì)信息或者用setpci直接讀寫。3. BAR 空間設(shè)備向主機(jī)申請(qǐng)的地址地盤BAR 是 Base Address Register 的縮寫直譯就是基地址寄存器。它位于配置空間里但它的作用遠(yuǎn)不止存一個(gè)地址這么簡(jiǎn)單。BAR 是設(shè)備和主機(jī)之間關(guān)于地址空間的一份合同設(shè)備通過 BAR 聲明自己需要多大的空間、是什么類型的空間主機(jī)通過 BAR 告訴設(shè)備你的空間被映射到了這個(gè)地址。3.1 BAR 的探測(cè)機(jī)制寫全 1 再讀回BAR 的探測(cè)機(jī)制是 PCIe 里一個(gè)非常巧妙的設(shè)計(jì)。主機(jī)在枚舉時(shí)并不知道設(shè)備需要多大空間它的做法是向 BAR 寫入全 10xFFFFFFFF。讀回 BAR 的值。讀回的值中低位為 0 的位數(shù)就代表了空間大小的對(duì)齊要求。舉個(gè)例子如果一個(gè) BAR 讀回來是 0xFFFFF000說明低 12 位是 0設(shè)備需要 4KB 的空間。如果讀回來是 0xFF000000說明低 24 位是 0需要 16MB 空間。這個(gè)機(jī)制的好處是設(shè)備不需要額外的寄存器來聲明大小BAR 自己就能表達(dá)。這里有個(gè)細(xì)節(jié)容易踩坑BAR 的最低位表示空間類型。bit 0 為 1 表示 IO 空間為 0 表示 MEM 空間。MEM 空間里 bit 1 和 bit 2 表示是否支持 64 位地址和是否可預(yù)取。所以實(shí)際計(jì)算大小時(shí)要把這些控制位排除掉。比如一個(gè) 64 位 MEM BAR低 4 位是控制位從 bit 4 開始才是地址對(duì)齊信息。寫全 1 探測(cè) BAR 大小時(shí)一定要先保存原來的值探測(cè)完再恢復(fù)。有些設(shè)備的 BAR 在探測(cè)過程中如果被破壞可能導(dǎo)致設(shè)備進(jìn)入異常狀態(tài)。雖然規(guī)范說這是安全的但實(shí)際硬件實(shí)現(xiàn)千奇百怪謹(jǐn)慎為上。3.2 MEM BAR 和 IO BAR 的區(qū)別與選擇PCIe 支持兩種 BAR 類型MEM BAR 和 IO BAR。MEM BAR 映射到系統(tǒng)的內(nèi)存地址空間CPU 可以用普通的 load/store 指令訪問IO BAR 映射到 IO 地址空間需要專門的 IN/OUT 指令訪問?,F(xiàn)代 PCIe 設(shè)備幾乎都用 MEM BAR原因很簡(jiǎn)單IO 空間只有 64KB資源緊張而且訪問效率低。MEM 空間可以很大支持 64 位地址訪問方式統(tǒng)一。PCIe 規(guī)范雖然保留了 IO 事務(wù)但明確不推薦新設(shè)計(jì)使用。不過在實(shí)際項(xiàng)目中有些老舊的 FPGA 設(shè)計(jì)或者兼容性要求可能還會(huì)實(shí)現(xiàn) IO BAR。我的建議是除非有明確的兼容性需求否則一律用 MEM BAR而且優(yōu)先用 64 位 BAR。MEM BAR 還有一個(gè)屬性叫可預(yù)取Prefetchable。如果 BAR 聲明為可預(yù)取主機(jī)可以把它映射到帶緩存的內(nèi)存區(qū)域CPU 讀取時(shí)可以利用緩存提高性能。但可預(yù)取的前提是讀操作沒有副作用讀和寫之間沒有嚴(yán)格的順序依賴。對(duì)于 FIFO、狀態(tài)寄存器這類有副作用的地址絕對(duì)不能聲明為可預(yù)取否則會(huì)出現(xiàn)讀一次數(shù)據(jù)就丟一次的問題。3.3 64 位 BAR 的配對(duì)使用一個(gè) 64 位 BAR 需要占用兩個(gè)連續(xù)的 BAR 位置。比如 BAR0 和 BAR1 組成一個(gè) 64 位 BARBAR0 存低 32 位BAR1 存高 32 位。BAR0 的 bit 2 置 1 表示這是 64 位 BAR此時(shí) BAR1 不再是一個(gè)獨(dú)立的 BAR而是作為高 32 位地址寄存器。這個(gè)配對(duì)關(guān)系在寫驅(qū)動(dòng)和做地址映射時(shí)特別容易搞錯(cuò)。我見過有同事在設(shè)備樹里只寫了 BAR0 的地址結(jié)果高 32 位沒配訪問直接飛到錯(cuò)誤的內(nèi)存區(qū)域系統(tǒng)當(dāng)場(chǎng)掛掉。正確的做法是先讀 BAR0 判斷 bit 2 是否為 1如果是說明是 64 位 BAR需要同時(shí)處理 BAR0 和 BAR1。對(duì)于 FPGA 開發(fā)者來說在 IP 核里配置 BAR 時(shí)也要注意這個(gè)配對(duì)。Xilinx 的 XDMA IP 和 Intel 的 PCIe Hard IP 都有 BAR 配置選項(xiàng)選 64 位 BAR 時(shí)它會(huì)自動(dòng)占用兩個(gè) BAR 編號(hào)。4. 從枚舉到映射配置空間和 BAR 是怎么被主機(jī)處理的理解了配置空間和 BAR 各自的內(nèi)容接下來要把它們串起來看看主機(jī)從上電到設(shè)備可用到底經(jīng)歷了什么。這個(gè)過程叫枚舉Enumeration是 PCIe 系統(tǒng)啟動(dòng)的核心流程。4.1 枚舉的完整流程枚舉是從根復(fù)合體開始沿著 PCIe 樹逐級(jí)掃描的過程。大致步驟如下掃描總線 0根復(fù)合體首先掃描自己下面的總線 0讀取每個(gè)可能的設(shè)備號(hào)0 到 31和功能號(hào)0 到 7的配置空間。讀 Vendor ID如果讀回來的 Vendor ID 是 0xFFFF說明這個(gè)位置沒有設(shè)備跳過。如果是有效值說明發(fā)現(xiàn)了一個(gè)設(shè)備。判斷設(shè)備類型讀 Header Type如果是 Type 1說明是橋設(shè)備需要繼續(xù)掃描它下面的總線如果是 Type 0說明是端點(diǎn)設(shè)備。分配總線號(hào)對(duì)于橋設(shè)備主機(jī)分配一個(gè)總線號(hào)范圍給它下面的子樹。探測(cè) BAR 大小對(duì)每個(gè)端點(diǎn)設(shè)備寫全 1 探測(cè)每個(gè) BAR 需要多大空間。分配地址主機(jī)根據(jù)所有設(shè)備的需求統(tǒng)一分配 MEM 和 IO 地址空間把基地址寫回 BAR。使能設(shè)備設(shè)置 Command 寄存器使能 MEM 訪問、IO 訪問和總線主控。配置中斷分配中斷號(hào)配置 MSI/MSI-X。加載驅(qū)動(dòng)操作系統(tǒng)根據(jù) Class Code 和 Vendor/Device ID 匹配驅(qū)動(dòng)。這個(gè)過程在 Linux 下可以用lspci -vvv看到結(jié)果在 Windows 下可以用設(shè)備管理器查看資源分配情況。調(diào)試時(shí)如果設(shè)備沒被識(shí)別就要順著這個(gè)流程一步步查是 Vendor ID 沒讀到還是 BAR 分配失敗還是 Command 寄存器沒使能。4.2 地址窗口與橋的轉(zhuǎn)發(fā)規(guī)則PCIe 樹里的每個(gè)橋設(shè)備都有三個(gè)地址窗口寄存器Memory Base/Limit、Prefetchable Memory Base/Limit、IO Base/Limit。這些寄存器定義了橋下面子樹使用的地址范圍。當(dāng) CPU 發(fā)起一個(gè)內(nèi)存訪問時(shí)根復(fù)合體首先判斷這個(gè)地址落在哪個(gè)橋的窗口里然后把事務(wù)轉(zhuǎn)發(fā)給對(duì)應(yīng)的橋。橋再往下判斷直到到達(dá)目標(biāo)設(shè)備。如果地址不在任何窗口里事務(wù)就會(huì)被丟棄或者報(bào)錯(cuò)。這個(gè)機(jī)制解釋了為什么 BAR 分配失敗會(huì)導(dǎo)致設(shè)備完全無法訪問。如果主機(jī)沒有正確配置橋的地址窗口即使設(shè)備的 BAR 被分配了地址事務(wù)也到不了設(shè)備。我在調(diào)試一塊多級(jí)交換機(jī)的板卡時(shí)就遇到過交換機(jī)端口的 Memory Limit 設(shè)小了導(dǎo)致下游設(shè)備的 BAR 地址超出了窗口范圍設(shè)備能識(shí)別但訪問就報(bào)錯(cuò)。排查這類問題時(shí)可以用lspci -vvv查看每個(gè)橋的窗口配置對(duì)比設(shè)備的 BAR 地址是否落在窗口內(nèi)。也可以用setpci手動(dòng)調(diào)整窗口寄存器驗(yàn)證。4.3 Linux 下的資源分配與 sysfs 接口Linux 內(nèi)核在啟動(dòng)時(shí)會(huì)做一次完整的 PCIe 枚舉分配資源。如果 BIOS 已經(jīng)分配好了內(nèi)核一般會(huì)沿用 BIOS 的分配結(jié)果除非有沖突或者用pcirealloc參數(shù)強(qiáng)制重新分配。在 Linux 下每個(gè) PCIe 設(shè)備在/sys/bus/pci/devices/下有一個(gè)目錄目錄名是domain:bus:device.function的格式。這個(gè)目錄里有很多有用的文件config配置空間的二進(jìn)制內(nèi)容可以用hexdump查看。resource0、resource1等BAR 空間的內(nèi)存映射文件可以用mmap映射到用戶空間直接訪問。enable寫入 1 使能設(shè)備。driver指向當(dāng)前綁定的驅(qū)動(dòng)。對(duì)于 FPGA 開發(fā)者來說resource0特別有用。你可以寫一個(gè)簡(jiǎn)單的用戶態(tài)程序mmap這個(gè)文件就能直接讀寫 FPGA 的寄存器不需要寫內(nèi)核驅(qū)動(dòng)。這在調(diào)試階段非常方便。# 查看設(shè)備的 BAR 分配情況 lspci -vvv -s 01:00.0 | grep -A 10 Region # 用 setpci 讀取配置空間 setpci -s 01:00.0 0x04.w # 查看 sysfs 下的資源文件 ls -l /sys/bus/pci/devices/0000:01:00.0/resource*5. FPGA 開發(fā)中配置空間與 BAR 的實(shí)戰(zhàn)要點(diǎn)對(duì)于做 FPGA 的工程師來說配置空間和 BAR 不是抽象概念而是每天都要打交道的實(shí)際配置。無論是用 Xilinx 的 XDMA、Intel 的 PCIe Hard IP還是自己寫 PCIe 核BAR 的規(guī)劃都直接影響系統(tǒng)的易用性和性能。5.1 BAR 規(guī)劃把什么放進(jìn)哪個(gè) BAR一個(gè) PCIe 設(shè)備最多有 6 個(gè) BAR怎么分配這些 BAR 是有講究的。常見的規(guī)劃方式BAR0控制寄存器和狀態(tài)寄存器通常幾 KB 到幾十 KB。這部分訪問頻繁但數(shù)據(jù)量小。BAR1DMA 描述符區(qū)域或者大塊數(shù)據(jù)緩沖區(qū)可能需要 MB 級(jí)別。BAR2/BAR3如果做成 64 位 BAR和 BAR0/BAR1 配對(duì)使用。BAR4/BAR5預(yù)留給擴(kuò)展功能或者第二個(gè)功能。我的一般原則是把訪問頻繁的小寄存器放在一個(gè) BAR 里把大塊數(shù)據(jù)緩沖區(qū)單獨(dú)放一個(gè) BAR。這樣做的好處是小 BAR 可以映射成非預(yù)取的保證讀寫順序大 BAR 可以映射成預(yù)取的利用緩存提高吞吐。另外BAR 的大小要按 2 的冪次對(duì)齊。如果你聲明需要 3KB實(shí)際會(huì)占用 4KB。所以規(guī)劃時(shí)要留余量但也不要浪費(fèi)太多地址空間。在資源緊張的系統(tǒng)里BAR 大小直接影響能不能枚舉成功。5.2 配置空間在 IP 核里的實(shí)現(xiàn)用 Xilinx XDMA IP 時(shí)配置空間的大部分字段是 IP 自動(dòng)生成的但有幾個(gè)地方需要手動(dòng)配置Vendor ID 和 Device ID在 IP 配置界面里填寫或者通過參數(shù)傳遞。Class Code決定操作系統(tǒng)加載哪個(gè)驅(qū)動(dòng)比如 0x020000 是以太網(wǎng)0x010802 是 NVMe。BAR 配置選擇每個(gè) BAR 的大小和類型XDMA 支持配置 BAR 為 MEM 或 IO32 位或 64 位。MSI/MSI-X選擇中斷方式XDMA 支持 MSI-X可以配置中斷向量數(shù)量。Intel 的 PCIe Hard IP 類似但配置方式不同。它的配置空間是通過 Avalon-MM 接口暴露的可以在邏輯里動(dòng)態(tài)修改某些字段。這在需要?jiǎng)討B(tài)改變?cè)O(shè)備 ID 或者 BAR 大小的場(chǎng)景下很有用。自己寫 PCIe 核的話配置空間的實(shí)現(xiàn)就更靈活了但也更容易出錯(cuò)。最常見的問題是 BAR 大小聲明和實(shí)際實(shí)現(xiàn)不匹配導(dǎo)致主機(jī)分配了地址但設(shè)備不響應(yīng)。我的經(jīng)驗(yàn)是配置空間里的 BAR 大小一定要和邏輯里地址譯碼的范圍嚴(yán)格一致差一個(gè)字節(jié)都可能出問題。5.3 DMA 與 BAR 的配合DMA 是 FPGA 加速卡的核心功能而 DMA 和 BAR 的配合有幾個(gè)關(guān)鍵點(diǎn)DMA 描述符的存放位置描述符可以放在 BAR 空間里由主機(jī)寫入FPGA 讀取也可以放在主機(jī)內(nèi)存里FPGA 通過 DMA 讀取。前者簡(jiǎn)單后者靈活。地址轉(zhuǎn)換FPGA 發(fā)出的 DMA 讀寫請(qǐng)求地址是主機(jī)物理地址。如果 FPGA 邏輯里用的是虛擬地址或者偏移地址需要做轉(zhuǎn)換。XDMA IP 提供了地址轉(zhuǎn)換功能可以配置 AXI 地址到 PCIe 地址的映射。BAR 空間作為 DMA 目標(biāo)主機(jī)可以通過 BAR 空間直接讀寫 FPGA 的緩沖區(qū)這種方式叫 PIOProgrammed IO適合小數(shù)據(jù)量。大數(shù)據(jù)量還是要用 DMA。我做過一個(gè)高速 ADC 采集的項(xiàng)目ADC 數(shù)據(jù)先寫入 FPGA 的 DDR然后通過 DMA 搬到主機(jī)內(nèi)存。BAR 空間里放的是控制寄存器和 DMA 描述符數(shù)據(jù)緩沖區(qū)不映射到 BAR而是通過 DMA 直接訪問主機(jī)內(nèi)存。這樣設(shè)計(jì)的好處是 BAR 空間很小枚舉容易而且 DMA 帶寬不受 BAR 大小限制。5.4 調(diào)試 BAR 訪問問題的排查鏈路BAR 訪問出問題是最常見的 PCIe 調(diào)試場(chǎng)景。我總結(jié)了一個(gè)排查鏈路按順序走基本能定位問題確認(rèn)設(shè)備被識(shí)別lspci能不能看到設(shè)備Vendor ID 和 Device ID 對(duì)不對(duì)確認(rèn) BAR 被分配lspci -vvv看 Region 字段有沒有Memory at xxxx的分配結(jié)果如果顯示Region 0: Memory at unassigned說明 BAR 沒分配成功。確認(rèn) Command 寄存器setpci -s xx:xx.x 0x04.w讀出來Memory Space Enable 位bit 1是不是 1確認(rèn)橋窗口如果設(shè)備掛在橋下面檢查橋的 Memory Base/Limit 是否覆蓋了設(shè)備的 BAR 地址。確認(rèn)地址譯碼用setpci往 BAR 地址寫一個(gè)值再讀回來看是否一致。如果不一致說明地址譯碼有問題。確認(rèn) FPGA 邏輯如果前面都正常但讀寫數(shù)據(jù)不對(duì)就要查 FPGA 邏輯里的地址譯碼和寄存器實(shí)現(xiàn)。這個(gè)鏈路我用了很多次大部分 BAR 問題都能在前三步定位。第四步和第五步涉及橋和地址譯碼稍微復(fù)雜一些但只要有l(wèi)spci和setpci兩個(gè)工具也能查清楚。有一個(gè)坑特別隱蔽有些主板的 BIOS 會(huì)把 BAR 分配到一個(gè)和系統(tǒng)內(nèi)存重疊的地址導(dǎo)致訪問 BAR 時(shí)實(shí)際訪問到了內(nèi)存。這種情況在lspci -vvv里看不出來需要用cat /proc/iomem查看系統(tǒng)的內(nèi)存映射確認(rèn) BAR 地址沒有落在 System RAM 區(qū)域。6. 那些文檔里不會(huì)寫的踩坑經(jīng)驗(yàn)配置空間和 BAR 的規(guī)范寫得很清楚但實(shí)際硬件和軟件實(shí)現(xiàn)里有很多規(guī)范沒覆蓋的細(xì)節(jié)。這些細(xì)節(jié)往往就是調(diào)試時(shí)卡住的地方。6.1 BAR 大小探測(cè)的邊界情況寫全 1 探測(cè) BAR 大小時(shí)有一個(gè)邊界情況如果設(shè)備實(shí)現(xiàn)的 BAR 大小是 0也就是不需要任何地址空間寫全 1 讀回來還是全 1。這時(shí)候主機(jī)應(yīng)該跳過這個(gè) BAR不分配地址。但有些主機(jī)會(huì)誤判給一個(gè)大小為 0 的 BAR 分配地址導(dǎo)致后續(xù) BAR 分配錯(cuò)位。還有一種情況是 BAR 大小不是 2 的冪次。規(guī)范要求 BAR 大小必須是 2 的冪次但有些 FPGA 設(shè)計(jì)為了省地址空間聲明了一個(gè)非 2 冪次的大小。這種行為在枚舉時(shí)可能被主機(jī)糾正也可能導(dǎo)致分配失敗。我的建議是老老實(shí)實(shí)按 2 的冪次來別耍小聰明。6.2 熱插拔場(chǎng)景下的 BAR 重新分配PCIe 熱插拔是一個(gè)復(fù)雜的功能涉及到 BAR 的重新分配。當(dāng)設(shè)備被熱插入時(shí)主機(jī)需要重新枚舉這條總線給新設(shè)備分配 BAR 地址。如果之前的地址空間不夠可能還需要調(diào)整已有設(shè)備的 BAR 分配。這個(gè)過程在 Linux 下由pciehp驅(qū)動(dòng)處理。實(shí)際使用中熱插拔失敗最常見的原因是地址空間不足。特別是 32 位 MEM 空間在很多系統(tǒng)上已經(jīng)很緊張了。如果新設(shè)備需要大塊 32 位 BAR很可能分配失敗。解決辦法是盡量用 64 位 BAR把地址需求放到 64 位空間里。另外熱插拔時(shí)橋窗口的配置也需要更新。如果橋的 Memory Limit 沒有擴(kuò)展到覆蓋新設(shè)備的 BAR 地址設(shè)備雖然被識(shí)別但訪問會(huì)失敗。這個(gè)問題在調(diào)試熱插拔時(shí)經(jīng)常遇到需要手動(dòng)或者通過腳本調(diào)整橋窗口。6.3 鏈路降速與 BAR 訪問的關(guān)系PCIe 鏈路降速比如從 Gen3 降到 Gen1或者降寬從 x4 降到 x1通常被認(rèn)為是物理層問題但實(shí)際上它也會(huì)影響 BAR 訪問。鏈路降速后配置空間和 BAR 的訪問延遲會(huì)增加如果軟件里有超時(shí)機(jī)制可能會(huì)誤判為設(shè)備無響應(yīng)。更嚴(yán)重的是鏈路不穩(wěn)定可能導(dǎo)致配置空間讀取錯(cuò)誤比如 Vendor ID 讀出來是 0xFFFF 或者隨機(jī)值。這種情況下主機(jī)會(huì)認(rèn)為設(shè)備不存在或者設(shè)備故障直接跳過枚舉。排查這類問題時(shí)不能只看 BAR 分配還要檢查鏈路狀態(tài)寄存器確認(rèn)鏈路是否穩(wěn)定在預(yù)期的速度和寬度。AER高級(jí)錯(cuò)誤報(bào)告是排查這類問題的利器。使能 AER 后任何鏈路錯(cuò)誤都會(huì)被記錄到 AER 寄存器里包括錯(cuò)誤類型、發(fā)生時(shí)間、涉及的 TLP 等。在 Linux 下可以用dmesg看到 AER 報(bào)告的錯(cuò)誤信息。6.4 不同操作系統(tǒng)對(duì) BAR 分配的差異Windows 和 Linux 在 BAR 分配策略上有一些差異這些差異在跨平臺(tái)開發(fā)時(shí)需要注意Windows對(duì) 32 位 BAR 的分配比較保守如果 32 位空間不足可能會(huì)拒絕分配導(dǎo)致設(shè)備無法啟動(dòng)。Windows 對(duì) 64 位 BAR 的支持較好但需要設(shè)備正確聲明。Linux默認(rèn)沿用 BIOS 分配如果 BIOS 分配不合理可以用pcirealloc強(qiáng)制重新分配。Linux 對(duì)資源不足的處理更靈活但重新分配可能導(dǎo)致設(shè)備編號(hào)變化。我遇到過一塊 FPGA 卡在 Windows 下 BAR 分配失敗但在 Linux 下正常。原因是 Windows 的 32 位 MEM 空間被其他設(shè)備占滿了而這塊卡的 BAR 只支持 32 位。后來把 BAR 改成 64 位Windows 下也正常了。這個(gè)案例說明BAR 的類型選擇不只是技術(shù)問題還要考慮目標(biāo)操作系統(tǒng)的資源管理策略。6.5 配置空間讀寫失敗的常見原因配置空間讀寫失敗通常表現(xiàn)為讀回來全 F 或者全 0。常見原因包括設(shè)備未完成鏈路訓(xùn)練鏈路還沒建立配置空間自然讀不到。等鏈路訓(xùn)練完成后再讀。設(shè)備電源未就緒有些設(shè)備需要外部電源電源沒上或者時(shí)序不對(duì)配置空間不可訪問。配置事務(wù)路由錯(cuò)誤總線號(hào)、設(shè)備號(hào)、功能號(hào)不對(duì)事務(wù)被路由到了錯(cuò)誤的位置。設(shè)備處于復(fù)位狀態(tài)復(fù)位沒釋放設(shè)備不響應(yīng)配置事務(wù)。時(shí)鐘未穩(wěn)定PCIe 參考時(shí)鐘不穩(wěn)定鏈路訓(xùn)練反復(fù)失敗。排查時(shí)可以用示波器看參考時(shí)鐘和復(fù)位信號(hào)用協(xié)議分析儀抓配置事務(wù)確認(rèn)事務(wù)是否到達(dá)設(shè)備。軟件層面可以用lspci -xxxx讀原始配置空間看是否全 F。7. 從理解到落地把配置空間和 BAR 用起來講了這么多原理和坑最后回到實(shí)際使用上。配置空間和 BAR 不是只用來理解的它們?cè)谌粘i_發(fā)和調(diào)試中有一堆實(shí)際用途。7.1 用 sysfs 和工具快速查看設(shè)備信息Linux 下查看 PCIe 設(shè)備信息最常用的工具是lspci配合不同的參數(shù)可以看到不同層次的信息命令作用lspci列出所有設(shè)備的基本信息lspci -t以樹形顯示拓?fù)浣Y(jié)構(gòu)lspci -vvv顯示詳細(xì)配置空間信息包括 BAR、能力列表、鏈路狀態(tài)lspci -xxxx以十六進(jìn)制顯示完整配置空間setpci讀寫配置空間寄存器lspci -vvv -s 01:00.0查看指定設(shè)備的詳細(xì)信息除了lspci/sys/bus/pci/devices/下的文件系統(tǒng)接口也很重要。每個(gè)設(shè)備的config文件是配置空間的二進(jìn)制鏡像resource文件是 BAR 空間的映射信息。寫腳本自動(dòng)化調(diào)試時(shí)直接讀這些文件比解析lspci輸出更可靠。7.2 用戶態(tài)直接訪問 BAR 空間對(duì)于 FPGA 調(diào)試用戶態(tài)直接訪問 BAR 空間是最方便的方式。基本步驟找到設(shè)備的 sysfs 路徑比如/sys/bus/pci/devices/0000:01:00.0/。打開resource0文件用mmap映射到用戶空間。通過映射后的指針直接讀寫寄存器。#include stdio.h #include stdlib.h #include fcntl.h #include sys/mman.h #include unistd.h int main() { int fd open(/sys/bus/pci/devices/0000:01:00.0/resource0, O_RDWR | O_SYNC); if (fd 0) { perror(open); return -1; } // 假設(shè) BAR0 大小為 64KB size_t bar_size 64 * 1024; volatile unsigned int *bar mmap(NULL, bar_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (bar MAP_FAILED) { perror(mmap); close(fd); return -1; } // 讀偏移 0x00 的寄存器 unsigned int value bar[0]; printf(Register at offset 0x00: 0x%08X\n, value); // 寫偏移 0x04 的寄存器 bar[1] 0x12345678; munmap((void *)bar, bar_size); close(fd); return 0; }這段代碼的關(guān)鍵點(diǎn)是O_SYNC標(biāo)志和volatile指針。O_SYNC保證寫操作立即生效不會(huì)被緩存volatile防止編譯器優(yōu)化掉看似冗余的讀寫。對(duì)于有副作用的寄存器這兩個(gè)都很重要。7.3 在 FPGA 邏輯里實(shí)現(xiàn)配置空間和 BAR如果自己寫 PCIe 邏輯配置空間的實(shí)現(xiàn)需要覆蓋規(guī)范要求的字段。最小實(shí)現(xiàn)包括Vendor ID、Device ID、Revision ID、Class CodeHeader Type、Cache Line Size、Latency TimerBAR0 到 BAR5Command 和 Status 寄存器Capabilities Pointer 和能力列表BAR 的實(shí)現(xiàn)需要做地址譯碼當(dāng) PCIe 事務(wù)的地址落在 BAR 范圍內(nèi)時(shí)把事務(wù)轉(zhuǎn)發(fā)到內(nèi)部邏輯否則返回 URUnsupported Request響應(yīng)。地址譯碼的邏輯不復(fù)雜但要注意幾點(diǎn)BAR 的地址范圍要和配置空間里聲明的大小一致。64 位 BAR 要同時(shí)比較高 32 位和低 32 位地址。預(yù)取 BAR 和非預(yù)取 BAR 的處理方式不同預(yù)取 BAR 可以接受更大的突發(fā)長度。地址譯碼的時(shí)序要滿足 PCIe 的延遲要求不能引入太多組合邏輯。7.4 配置空間和 BAR 在虛擬化場(chǎng)景下的變化在虛擬化環(huán)境里配置空間和 BAR 的處理會(huì)多一層。虛擬機(jī)監(jiān)控器Hypervisor需要把物理設(shè)備的配置空間和 BAR 空間映射到虛擬機(jī)里讓虛擬機(jī)里的操作系統(tǒng)以為自己在直接訪問硬件。這個(gè)映射過程涉及到地址轉(zhuǎn)換虛擬機(jī)里的 BAR 地址是虛擬地址Hypervisor 需要把它轉(zhuǎn)換成物理地址。如果設(shè)備支持 SR-IOV每個(gè)虛擬功能VF都有自己的配置空間和 BARHypervisor 需要管理這些資源的分配。在虛擬化場(chǎng)景下調(diào)試 PCIe 問題要注意區(qū)分是物理設(shè)備的問題還是虛擬化層的問題??梢韵仍谒拗鳈C(jī)上確認(rèn)設(shè)備正常再在虛擬機(jī)里排查。lspci在虛擬機(jī)里看到的設(shè)備信息可能和宿主機(jī)不同因?yàn)?Hypervisor 可能修改了某些字段。8. 寫在最后配置空間和 BAR 空間是 PCIe 軟件接口的基石理解了它們就理解了 PCIe 設(shè)備是怎么被主機(jī)發(fā)現(xiàn)、配置和訪問的。我剛開始接觸 PCIe 的時(shí)候也覺得這些東西瑣碎不如高速信號(hào)和 DMA 來得刺激。但后來發(fā)現(xiàn)大部分調(diào)試問題都出在這些瑣碎的地方。Vendor ID 讀不對(duì)、BAR 分配失敗、Command 寄存器沒使能這些問題看起來簡(jiǎn)單但如果沒有系統(tǒng)的理解排查起來就是碰運(yùn)氣。實(shí)際項(xiàng)目中我養(yǎng)成了一個(gè)習(xí)慣拿到一塊新的 PCIe 板卡先不急著跑功能而是用lspci -vvv把配置空間完整看一遍確認(rèn) BAR 分配、鏈路狀態(tài)、能力列表都正常。這個(gè)習(xí)慣幫我提前發(fā)現(xiàn)了很多問題比如 BAR 大小聲明錯(cuò)誤、鏈路降速、MSI 配置不對(duì)等?;ㄊ昼娮鲞@個(gè)檢查比后面花幾個(gè)小時(shí)排查要?jiǎng)澦愕枚?。?duì)于 FPGA 開發(fā)者來說配置空間和 BAR 的規(guī)劃應(yīng)該在設(shè)計(jì)初期就確定好而不是等到調(diào)試時(shí)再改。BAR 的大小、類型、數(shù)量Class Code 的選擇MSI-X 向量的數(shù)量這些都會(huì)影響后續(xù)的驅(qū)動(dòng)開發(fā)和系統(tǒng)集成。前期多花點(diǎn)時(shí)間規(guī)劃后期少踩很多坑。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲色人阁| 亚洲五码一区二区三区| 亚洲在钱| 久久久不能久久久久| 91足交| 九九九九热| 自拍视频大全亚洲专媒视频/一区二区三区| 新婚人妻扶着粗大强行坐下| 测评在线观看AV| 日本99一区二区| AV丝袜少妇| 五月丁香成人网| 国产隔壁老王影院在线| 搡老熟女免费视频 | 一二三区操逼国产91| 久久久久久91香蕉国产| 俺去俺来也在线www| 国产区在线| h色99999| 啊啊啊要高潮了| 亚洲AV无码| 丁香五月激情网| 在线A日本| 国产日韩欧美中文在线播放| 97干97色| 国产呦精品系列在线观看| 热久久无毒不卡| 老司机免费视频在线91| 高清肉丝中文无码| 九九英色视频| 久久精品无码熟妇一区二区三区视频导航| 天美传媒av在线| 欧美影音在线| 国产av色网| 九七毛片九九毛片| 五月天久久婷婷亚洲| 黑丝少妇在线观看| 综合熟女| 夜夜操夜夜爽夜夜高潮| 91麻豆天美国产| 九X超碰| 黄色乱论网站| 精品人妻一区春色| 99999久久精| 91痴汉| AV中文字幕三四五| 久久9久| 欧美AB在线| 97在线看| 亚洲最大成人a毛毛片| 99这里只有精品国产| 91av熟女人妻| 1禁看欧美黄片免费看| 中国一级特黄大片护士| av日韩在线观看电影| 欧美色性爱| 欧美日本国产日韩激情视频| 青青草日韩无码| 六六久久日韩不卡| 国产精品视频| 天天躁日日躁狠狠狠躁| 香蕉欧美| 日韩性爱视频免费在线| 一二区在线观看视频| 超碰碰小说97| 国产精品视频内谢女人| 国产精品久久久久无码AV会牛| 久久精品欧美一区蜜桃| 国产乱不卡| 欧美综合色,www| 97视频在线| 国产精品原创巨作?v网站| 少妇高潮特黄A片| 国产日韩在线播放| 人人搡人人肉久久精品| 超碰成人人人爽人人爽| 中文字幕免费看大片| 天天色播| 日韩78m视频| 操一对老熟妇爽上天视频| av毛片aaaaa免费看| 国产成人精品日本视频| 啊啊啊啊啊啊啊啊啊啊在线观看| 久久超碰网| 中文字幕一区电影在线观看| 欧美有码亚洲中文字幕一区二区三区四区 | 丁香五月天激情综合| 91麻豆天美国产欧美| 国产九区| 亚洲日韩精品久久久久一区壹牛| 日韩性爱网址| 激情文学小说一区二区 | 欧美中文字幕一区 | 色婷五月天| 免费亚洲黄色视频在线观看 | 96国产精品| 日韩精品在线观看观看| 亚洲熟女乱色| 97网色| 高跟丝袜AV专区国产| 久久伊人在线五区| 亚洲久久久久| 91丨九色丨国产打屁股| 久久99干一本高清| 亚洲精品亚洲人成人网| 一本一道久久综合久久| 噜噜噜在线视频| 午夜呻吟欧美| 亚洲中字幕日本一区二区三区| 多乙久久久久久| 操死我了啊啊啊| 高清无码在线播放网站| 亚洲情色在线| 久久伊人亚洲AV无码网站| 欧美成人精品A片免费一区99| 亚洲色图第一页| 岛国网址国产| 久久久久国色αv免费观看| 国产 日韩 欧美高清 | 日韩精品一区二区高清| 天天α片| 国产精品香蕉热久久新品| 北京美女一区二区| 乱伦日本色图AⅤ| 精品女同一区二区三区| 亚洲三级。日韩三级| av天堂天堂av日韩| 999熟女精品| 中文字幕国产| 加勒比av官网在线| 中文字幕在线日亚洲9| 色亚洲欧美| 91在线页| 欧美日本中字另类在线| 日本精品久久久久久久| 国产成人自拍视频在线| 99少妇| 97WW精品| 99热综合| 欧美不卡五十路| 超碰97资源大奶| 蜜桃视频成a人v在线| 六月丁操逼| 天天艹天天日| 黄色免费网| 亚洲国产精品久久久男人的天堂| 不卡啪啪视频| 亚洲国产成人精品女人久久久| 综合色图,成人综合网| 人妻丝袜美腿中文字幕| 色天堂综合| A片 AV一级在线播放观看免费 | 人妻一二三区| 欧美色网| 亚洲第一男人天堂| 男女激情中文字幕| 偷窥自拍亚洲天堂网爆| 日本 色 导航| 91精片| 啊啊啊啊啊好大好舒服想要| 国产一级片| 91色色网站| 欧美精品欧美精品系列| 韩国三级三级BD在线| 亚洲黄色a级片| 成人五月天丁香激情综合| 亚州色国| 白丝1区2区3区| 国产一区二区a毛片| 97国产中文| 人妻在线臀日韩| 操逼日韩无码 | 丰满欧美少妇| 熟女六十路| 欧美日韩大黄片| 亚洲黄色| 五月情色天| 超碰午夜| 欧美亚洲美少妇一区二区| 91制服丝袜| 欧美日韩精品国产91| 九九色影院| 国产欧美精选自拍一区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 欧美偷| 精品乱码久久久久| 久久久久ab| 久操视频免费在线观看| 97干在线视频| 自拍偷拍2025在线观看| 中文字幕交换人妻| 中文字幕日韩人妻视频一区二区三区 | 久久久一区二区三区三州| 97色操| 欧美色图91p| 嗯嗯啊啊操死我| 免费观看的av| 色婷婷影院| 桃花色涩综合影院| 日韩av在线播放不卡| 日本一区二区三区免费观看| 精品人妻一二三| 青娱乐91| 91亚洲网| 在线观看亚洲成人精品| 人人玩人人添人人澡免费| 一起草高清无码| 九九九免费视频| 黑丝内射一区二区三区| www.91色综合| 日本人体九九九九九九| 亚洲黑丝在线| 裸模AV女优| 天天享受天天看| 丝袜无码a片| 欧亚第一综合网| 欧美色图偷拍另类| 欧美中文狠| 亚洲视频二区| 欧美色图自拍| 91美| 人妻色偷色噜| αⅴ天堂| 亚欧韩av| 在线女人91| 美女淫穴| 97精品97久久| 国产日韩久久| 亚洲AV无码翔田千里网站| 日韩三级天堂在线观看| 中文字幕 人妻不满 在线视频| 欧美色棕合| 亚洲中文字幕乱码无码一区二区| 欧美亚洲日韩16色| 我爱操| 国产精品一区二区三区免费视频| 精品三级在线专区| 日本操逼二区| 婷婷在线播放| 少妇精品久久久| 中文字幕欧美日本乱码一线二线| 啊啊啊好想要| 高清无码 国产精品| 天天天堂影视日韩亚洲91| 亚洲性综合11| 欧美不卡五十路| 国产欧美岛国精品一区| 蜜臀在线免费观看在线免费观看| 精品人妻一区二区三区夜夜| 日日骚一区二区三区| 久久久久久久强迫| 欧美日综合| 污污污8888| 91综合无码| 一起草欧美| 水澄无码AV| 人妻免费观看| 又粗又长又大国产不卡| 人人摸人人添人人操| 亚洲无套久久嗯嗯| 国产97在线播放| 日本人妻中文字幕精品| 精品超碰中文在线| 超碰美国| 色噜噜人妻丝袜a∨先锋影| 色老汉玖玖爱| 99re视频这里只有精品| 操美女高潮抽搐白浆| 男人久久精品| 日韩成人高清一区二区| 亚洲少妇色| 久久美国毛片| 亚洲综合中文字幕有码| 九九九九九九九九九五码| 麻豆久久一区二区三区| www.夜夜| 99无码狠狠久久| 丰满人妻一区二区三区| 国产精品午夜福利| 深夜激情无码| 欧美日韩人妻婷婷一区| 97人妻免费中文字幕| 大香蕉 222| 啊v在线观看视频| 婷婷久月| 亚欧高清v| 免费成人在线熟妇网| a亚洲欧美色欲| 91九色网| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 色99视频| 91欧美网| 久久人妻视频| 天美传媒婬乱在| 久久99久久99精品免视看婷婷| 亚洲人码13| 岛国免费黄色网址| 成人情色综合网| 天天天天天干夜夜夜夜夜操| 91N综合网| 天天干少妇| 在线天堂资源亚洲| 2020视频1区2区3区| 色亚洲欧美| 久久精品性| 伊人9| 丁香五月色情| 69少妇一区二区| 97 九色| 色天使亚洲综合在线观看| 天天摸天天舔天天操| 国产精品制服丝袜清纯唯美 | 四虎国产精品永久地址入口| 黑人精品欧美一区二区蜜桃| 久久国产视频性吧 | 六月色婷婷| 久久大黄片| 99在线免费公开视频| 色欲色香天天天综合网www-亚洲综合国| 人人做天天爱| 欧美一区二区三熟女剧情| JULIA一区二区三区在线播放| 欧美啪啪天堂| 青青草吊丝| 日本日逼高清| 日韩无码一区二区三区| 亚州综合AⅤ| 日韩国产中文字幕| 久久精品一区二区一8| 好好的日:com久久九九| 婷婷色中文字幕| 国产免费黄色一级大片| 91欧美性| 97九色人妻| 国产大学生口爆吞精合集| 黄色成年| 欧美 日韩 婷婷 五月| 丁香五月激情综合国产| 国产亚洲精品美女久久久| 精品免费成人久久| 嫩草伊人久久精品| 天天影视色香色欲| 日韩性爱播放| 天天操天天射天天日| 欧色网址| 超碰在线1234区| 神马视频久久久久久| 国产不卡免费在线视频| 欧美一二三| 欧美91色| 狠狠2050在线观看| 婷婷五月天久久精品视频一区二区三区| 强奸乱伦大香蕉网| 久操网视频| 在线观看中文字幕| 九九九不卡| 91nbbbbbb| 亚洲人在线| 亚洲精品视频在线播放| 人妻人人做人人澡人人爽欧美一区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 香蕉一区二区三区在线视频| 亚洲精品男人的天堂| 国产www色在线观看| 另类图片欧美激情综合| 97伊人网| 国产精品不卡少妇白| 欧美丝袜美女电影一二三四区| 欧美一二三区四五区| 又黄又爽在线观看视频| 婷婷六月色| 美女自卫慰黄网站免费| 亚洲女毛多水多21P| 大香蕉一区二区在线观看.| 精品一级毛片在线观看| 日本操逼视频免费| 色综合一本| 100啪啪视频大全| 伊人激情| 久久精品国产亚洲妲己影视| 69精品| 天天综合色图| 天久久久噜噜噜久久国产精品爽爽| 亚洲骚男同com| 熟女91网| 97超碰日韩| 超碰色综合| 久久男人的天堂| 无码人妻一区二区三区免费九色| 啊啊啊想要| 亚洲日韩美女丝袜美腿人妻视频| 97欧美视频| 国产精品爆乳懂色蜜乳| 亚洲一区二区三区播放在线| 久久精品毛片免费不卡| 亚洲精品中文字幕一区在线视频| 婷婷五月丁香五月| 青青草在线成人视频| 欧美三级一级| 亚洲视频,小说| 风骚少妇视频中文字幕| 清纯唯美综合亚洲| 无码天堂| 天天操天天干一区二区| 午夜色婷婷| 99re视频在线观看这里只有精品| 2001天天操| 黄色高清久久无码依人| 色香91| 一本色道综合久久欧美日韩精品| 午夜性刺激视频免费观看| 国产探花日韩援交| 亚洲经典啪啪| 国产有码一区| 欧美线天码中字| 97日亚洲欧美| h无码动漫在线观看| 强奸a片网| 超碰超碰95| 欧美熟女妇同| 大香蕉综合网| 国产精品蜜乳AV| 日本有码影片下载| 久久久精品,3| 99久久久无码精品国产人| 96久久精品一二三区色欲| 日本人体九九九九九九| 久久同城AV| 东京热天堂网| 精品久久久久久中文| 久久99久久99久久99人受| 玖玖综合色| 天天综合91入口| 9国产超碰| 久热9| 蜜臀久久99精品| 久久黄人人爽视频| 人、人、摸,人、人、草| 欧美日韩222| 香蕉精品二区二区| 亚洲国产精品无码AV在线| 日本熟妇熟色97一本在线观看| 国产人人干| 中文字幕乱码人妻二区三区| 国产丝袜美女诱惑| 国产馆| 男男H黄动漫啪啪无遮挡网站| 嗯啊啊啊轻点视频 | 艹少妇网站| 一区麻豆 高清中文字幕| 天天综合91入口| 91人妻素女| 超碰在线97国产| 欧美福利视频啊啊啊啊| 欧美日韩资源在线| 丁香色狠狠色综合久久小说| 95人妻爽爽人人做人人澡| 97少妇人妻中文字幕久久| 少妇厨房愉情理伦片bd在线观看| 老女人爆菊| 夜夜爽夜夜高潮夜夜爽| 色婷婷色99国产综合精品| 射丝袜大香蕉| 色色色天美视频| 91AV天美在线视频| 日本色色色视频| 精品国产久久乱码| 秋霞免费AV| 97视频在线观看网站| 亚洲最大成人a毛毛片| 91亚州欧美| 久久久一区二区三区三州| 久久久久久久久久久人妻| 91w欧美| 亚洲国产欧美日韩人妻日中文| 97美日韩视频| 啊…啊…操我用力操我| 亚洲成a人v欧美综合天堂下载| 99色悠悠| 亚洲国产av中文字幕久久| 亚洲污一污二| AV无码久久久精品| 大香蕉淫人| 亚洲影视综合网| a'v在线资源| 欧美亚洲影视| 欧美久久人人网| 在线五区| 欧美夜夜狠| 夜草网站| Julia Annxxxxx| 91精品久久久久久77777| 亚洲综合色图欧美| 欧美日本久久精品一区| 人人摸人人干人人拍97| 人妻第一页| 亚熟在线| 激情五月天社区| 日本综合色图| 久久熟女久| 91色久| 综合影院永久入口国产| 五月天AV资源| 淫色网综合| 熟女精品va中文字幕| 色淫网站优优视频| 久久大线蕉一区| 国产麻豆一级精品视频| 国产内射爽爽大片| 好爽要喷了| 天堂资源欧美| 国产无套粉嫩白浆在| 久操视频在线观看| 日韩八十路老熟女| 欧美亚综合色图| AA特级绝黄| 97视频在线| 99视频自拍区| 亚州色图欧美| 人妻精品综合中文字幕在线| 男人的天堂一区三区| 日韩电影在线观看网址| 中文字幕欧美精品亚洲日韩蜜臀| 97久久超碰国产网站| 色婷婷导航| 日日日日做夜夜夜夜无码| 97超碰超| 蜜臀中文无码午夜| 亚洲drav色图| 欧美熟女妇同| 日本三级小说中文字幕| 高清国产av无码| 黄色电影在线播放综合网站| 69天堂| 黑人精品欧美一区二区蜜桃| 熟女AV一区| 内射中出日韩在线观看视频| 一本道综合色图| 日韩欧美字幕亚洲一区二区| 亚洲国产婷婷在线播放| 无码免费在线观看黄色片| 久久啊啊| 久久久久99精品成人片蜜臀| 午夜精品久久久久久久| 风骚少妇视频中文字幕| 中 文字幕一区二区三四 五 区日 日 骚| 激情婷婷丁香| 成人短视频在线观看| 秋霞免费AV| 欧美经典一区二区三区| 国产91乱伦| 欧美探花网| 91看黄片| 欧美性生活免费网| 色综合av男人天堂| 亚洲成a人片在线观看中文!!!| 婷婷丁香九月| 久干9操| 97欧美性爱| 国产亚洲禁久一区二区| 久久久 国产精品| 国产超碰| 色99在线| 天天综合日韩网| 久久99国产综合精品女同| 人妻天堂综合网| 亚洲中文字幕噜噜噜久久久| 999久久久九| 夜夜操夜夜爽夜夜高潮| 密臀AV在线| 亚洲91大片| 九九热午夜欧亚国产视频| 亚洲在线A| 东京热综合久久一区二区| 日韩一二三区| 天天夜躁日日躁狠狠2002| 正在播放国产精品一区| 操我无码| 亚洲AV无码天美传媒一区| 青青草自拍视频在线播放| 97天天综合网| 久肏视频字幕| 色欲天天综合久久久无码网中文| 中国一级操逼视频| 久久欧美性爱视频| 热天堂一区二区| 久日91在线| 蜜臀久久99精品久久久久电影| 亚洲熟女诱惑| 99re热有精品视频国产| 日韩不卡毛片Av免费高清| 大香蕉久操| 91欧美偷拍| 天天插天天操天天摸天天射天天看| 校园春色美腿丝袜 | 操逼操逼逼操操逼91 | 极品白嫩福利在线| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 黑白配性爱AV成| 国产精品美女视频诱惑| 久久91精品国产9丨久久分亭 | 精品午夜福利| 日欧亚洲二三区大片不卡| 白嫩国模丰满一二三区| 中文字幕加勒比海高清无码免费视频| 天天操天天日天天干| 97极品无码| 操我无码| 99在线视频播放| 国产精品视屏| 99久久网站| 色天堂综合| 国产传媒日韩| 丁香婷婷大香蕉| 久久鲁夜| 精品人妻一区二区三区四区不卡在| 操逼天美3区| 黑操B| 天天日天天干天天摸天天操| 国产日韩欧美中文在线播放| 人妻日日夜夜精品 | 日韩久久三区| 人妻精品一区一区三区蜜桃91| 国产肏逼网站| 色香色香欲天天天影视综合网| 日本黄色天堂| 日本免费一级AAA大片器| 翘臀vidoes| 国产精品农村妇女| 韩国黄色片精品久久久| 俺也射| av日韩国产一区二区| 熟妇一区二区三区| 91久久久亚洲| 青青11操操操操操操操操| 久夜操| 婷婷五月天激情小说| 人妖欧美一区二区| 9久久精品| 国产精品另类一区大香蕉| 操逼操逼逼操操逼91| 天天操人人操骚逼网站| 色翁荡息又大又硬又粗又爽| 亚洲日韩青青草色月| 天天日天天操天天射河南省| 欧美极品女人的天堂| 91精品人妻一区二区三区蜜桃| 乱色视频中文字幕| 极品美女嘿咻| 日本在线一二 | 免费av在线播放二区| 妇女视频网站| www亚洲免费| 啊啊啊好大好湿| 2021久久国产综合精品青草| 97久久国产亚洲精品超碰热| 天天摸天天碰天天添青青| 久久六六| 久久精品视频28| 在线色导航| 久久精品国产久精国产| 精品国产丝袜一区二区三区乱码| 亚洲drav色图| 亚洲人妻AV| 久久久久久97| 诱惑人妻欧美一区在线播放| 乱论91| 97超级久久| 操人妻丝袜高跟| 成人影院永久免费观看网址| 久久97超碰香蕉| 五月丁香色色网| 99久久国产精品免费高潮| 97色爱| 国产熟女乱论| 校园春色五月天| 天美欧美国产| 久久XX| 一区操逼| 老熟乱一区二区三区四区| 天天添天天干电影| 免费伦费视频在线观看| 好涩综合| 亚洲宗合网| 日韩精品区二区三区不卡| 日本1区2区不卡视频| 青青草一区二区三区四| 国产天美欧美| 干婷婷综合网| 亚洲无码视频免费在线观看网址! J?P?NESEHD熟女熟妇伦 | 久久亚洲日韩国产欧| 欧美黑人猛交春色影视大全| 黑人白女精品一区| 久久加勒比| 精品国产久久乱码| 中文字幕精品丝袜| 日本3级一区二区免费| 翔田千里无码一区| 天天久久久久久| 干b在线性社区| 91碰碰碰| 欧美视频一区二区在线| 日本操逼视频免费| 久久久啊啊啊| 精吧天堂| 久久国产对白激情浪潮| 狠狠操夜夜操蜜桃视频三区| 日韩午夜精品一区二区三区电影| 国产在线播放成人免费| 78m啪啪啪| 九九综合久久中文字幕| 夜夜嗨视频| 日本不卡中文| 九七人妻在线| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 99精品在线| 欧美日韩大陆黑人少妇99| 欧美性猛交美女自慰91| 日本99久久| 综合久久六月久久婷婷| 亚洲国产av中文字幕久久| 一起草高清无码| 日本不卡在线二区三区| 清纯唯美亚洲另类| 天天综合网视频91| 伊人嫩草| 好爽要喷了| 精品无码产区一区二| 欧日韩在线观看| 色综合加勒比四四季| 青娱乐 成人娱乐在线| 欧美男人一区| 啊…啊…操我用力操我| 五月天社区| 天天肏夜夜肏| 日日操天天操| 亚洲天堂综合AV| 在线观看一卡二卡| 日本人体九九九九九九| 97九色人妻| 久久欧美1卡2卡3| 欧美综合97www| 亚洲色欲一区二区三区| 91 丝袜在线| 2019AV天堂| 狠综合网| 伊人少妇久久久| 天天综合,91入口| 蜜臀久久99精品久久久久久成人小说| 4tube欧美女厕所| 欧美成97爱| 亚洲精品久久久久久久蜜桃臀| 射久久| 韩国免费播放一级毛片| 成人av在线播放| 欧美强奸乱能| 99人人干| 日韩美女久久一区二区三区| 男女91| 蜜臀一二三| 清纯唯美综合亚洲| 欧美乱欲| AV乱伦专区| 亚洲系列第一页| 人人扣人人操| 男人的天堂激情| 亚州色图片在线色| 四虎AV在线播放| 精品国产av一区二区三区四区入口| 日本黄色精品专区网站| 嫩草影院在线观看精品| 五月天色色色| 操操操操网黑人| 噜噜瑟| www国产无码| 亚洲欧洲精品视频发布| 婷婷尹人大香蕉免费| 欧美se亚洲| 99久在线精品99re8| 99久久99久久免费精品蜜臀| 95自拍视频在线观看| 秋霞视频一区二区| 麻豆影音天美视频| 噜噜噜噜天天狠狠| 国产探花日韩援交| 婷婷啪啪| 91色色综合| 嗯嗯啊啊操我| 精品久久久久av影院| 色综合美国| chaopen97久久| 国产精品露脸在线观看| 天天爽天天操| 超碰到97情色| 亚洲天堂五月天国产| 国产激情综合五月久久| 九九九影院| 在线视频97| 国产成人自拍视频在线| 精品视频97| 日韩少妇无码| 你懂得91| 国产诱惑| AV和黑人在线播放| 精品久久久中文字幕不| AV色女综合| 亚洲AV无码黄色强奸| 96精品久久久久中文字幕| 久久精品国产亚洲av水密被窝| 激情综合二| 91天射| 香蕉国产精品麻豆亚洲欧美日韩 | 激情五月激情综合网| 啊嗯嗯啊好大好爽| 无码外流操逼视频| 国产夜夜艹| 黑人综合网| 亚洲.欧美.丝袜.中文.综合| 亚洲少妇自拍中文字幕懂色| 亚洲色图欧美色图日韩色图| 中美日韩毛片| 婷婷超| 精品无码久久久| 综合 亚洲 欧美| 91大学精品激情戏| 少妇激情一区二区三区视频| a级理论午夜日本| 亚洲青青草| 午夜寂寞欧美| 人妻无码一区二区三区久久99| 欧美另类综合久久| 操逼无毒无码免费视频| 激情国产乱伦Av| 天天操天天日天天干| 91人妻做a观看视频| 国产欧美后入| 精品一区二区人妖| 精品二区久久| 丁香五月电影| 欧美黄业| 91女人的网站| 一个国产在线综合网站| 久草综合视频| 日本www操操操| 国产精品午夜福利| 长长久久88视频| 东北女人无套内谢视频| 2025亚洲男人天堂| 亚洲无码太久| 天天射夜夜| 插欧洲美女欧美精品| 久热伊人| 亚洲中文字幕乱码无码一区二区| CCYY草草影院地址入口| 日韩 成人 有码| 色噜噜人妻丝袜a∨先锋影| 东北女人性交| av优播| 一区二区三区亚洲| 人妻精品一区一区三区蜜桃91| 99久久99久久综合| 日韩无码人妻| 韩日巨乳美女免费视频在线观看| 久久精品亚洲成a人天堂| 传媒在线观看一区二区三区| 爆乳免费黄网站| 精品午夜福利国产一区二区在线观看| 最新9久久久9免费视频| 天天干美少妇一区| 18禁无码永久免费无限制| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 在线不欧美| 神马久久69| 99久久婷婷| 亚洲欧洲日本精品中文a∨| 亚州欧美综合| 澳门人妻久久| 欧美精品1区2区3区| 91精品国产91久久青草| 99精品丰满人妻无码| 91在线页| 国产97视频免费观看| 麻豆久久一区二区三区| 久久精品国产精品| 国产乱码久久| 看日韩操逼| 国产真乱mangent| 欧美另类丝袜熟女| 日韩中文字幕av在线播放| 99日韩| 欧美一区二区成人一卡| 九九热在线视频| 影音先锋视频在线| 97综合久久| 久久9免费视频| 亚洲熟妇熟在线电影视频| 色综合婷婷| 亚洲91在线播放影院| 中文字幕在线观| 男人的天堂kva| 欧美成人综合| 精品网站9999| 99综合网| 日韩一级欧美一级在线观看| 国产第12页| 精品视频一区二区| 中文字幕人妻丝袜乱一区三区| 成人久久精品| 青青草视频在线观看一区二区| 久久伊人五月天| 曰韩成人免费视频| 中日韩久久久| 欧美日韩日产免费网站看| 偷拍 欧美 日韩| 97天天摸天天爽| 国语精品av| 超碰9 7女人| 97精品97久久| 超碰免费欧美7| 97超碰免费人人性爱| 青青草日逼视频| 狠狠躁AV| 亚洲色堂免费视频| 欧美亚性天堂| 欧美1727免费观看视频| 成人看片网站| 亚洲综合五月天| 高清无码网址| 九九av| 五月丁香久久| 丁香激情五月| 嗯啊不要在线观看嗯啊| 一区二区日韩欧美久久| 日本久久网| 99无码视频| 嗯啊不要在线| 欧美熟爽综合| 欧美熟妇乱码在线一区| 麻豆区99999| 中文字幕片| 国产污视频麻豆传媒一区二区| 日本一片一区| 人人噜夜夜操| 很狠操| 亚洲影视高清三级-草1024榴社区入口-品爱AV| 国模久久在线| 久久久涩| 久久久亚洲| 亚洲电影中字一区二区| 免费1级a做爰片观看| 少妇xx精品| 久久久国产成人一区二区三区在线| 欧亚在线视频| 夜夜操天| 一个色导综合| 澳门特级毛片免费观看| 五月婷丁香| 天天射天天| 四虎av在线| 翔田千里A片一区二区| 大肉棒导航| 综合操逼| 91n处女在线观看| 加勒比海成人视频网| 亚洲激情久久| 久操热| 伊人久久婷婷| 福利视频网站| 淫纸中9区| 美女网站黄页| 日本影视久久免费| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 亚洲大色堂| 日韩性爱免费观看视频| 久久久久久久久999| 亚洲欧美国产va在线播放频| 国产午夜福利电影免费在线观看 | 色丁香久久| 欧美熟妇操操视频| 国内一区二区三区| 精品人妻一区二区乱码一区二区| 免费看日产一区二区三区| 国语人妻精彩刺激| 欧美 亚洲 另类 综合| 91亚洲黄色网| 欧美大香蕉久| 717影院理论午夜伦八戒| 精品91摸| 五十路熟女在线不卡观看一区二区| 色网色网色网色网色网色| 国产一区二区免费福利片| 九九综合久久| 青青草精玖玖69精品| 91中出在线| 午夜福利无毒不卡| 日日日日日| 青青伊人久久| a'v在线资源| 精品一区二区亚洲国产| 99re8超碰| 熟妇女伦乱视频| 国人欧美精品一区二区| 久久亚州高清| 国产AV中文| wwwcaobibi| 麻豆一区在线| 男人的天堂 在线一区| 日韩啪啪网| 99精品在线| 精品人妻中文字幕高清| 综合自拍| 99国内熟女露脸视频| 一级片视频啪啪| 亚欧精品久久久久久久久久久| 超碰97在线色男人??| 久久性爱视频99| 99啪| 这里只有精品97| 久久肏大逼| 欧美 日韩 婷婷 五月| 高清无码久操视频| 精精夜夜| 亚洲 暴爽 AV人人爽日日碰| 婷婷五月丁香五月| 超碰色大香蕉| 精品伊人久久久大香线蕉小说| 久久大线蕉一区| 黄色大片视频在线免费看| www.五月天| 情色五月天就去干| 国产福利av精彩对白| 久久骚| 日本www操操操| 综合九九| 日本精品高清一二区一本到| 中字一区| 日韩一级片在线看| 中日992视频| 99久久久久| 超碰诱惑| 熟妇人妻精品一区二区视频色欲| 久久内射| 欧亚综合一卡二卡中文字幕| 丝袜美腿av女优在线| 97超碰碰碰| 蜜臀无码视频在线观看| 第二页中文字幕| 国产黄色小视频网站| 欧美另类自拍 | 久久久久久国产精品| 大香蕉日韩| 91人妻人人妻| 日本国产亚洲一区在线观看| 另类av天堂| 51一区二区三区| 伊人在线大香蕉二。| 亚洲一区中文字幕一区| 春色综合网| 日本青青草在线| 人人操人人干网页| 麻豆黄站| 亚洲熟妇极品| 欧美成熟性爱精品| 五十路人妻在线| 婷婷丁香五月激情啪啪| 97精品在线视频| 色眯眯射| 99只有精品| 性爱1区| 一区二区中文| 2017大香蕉国产精品久久| 午夜久久无码1000合集| 欧美熟妇色| 欧美爆操91| 精品一区二区人妖| 98久久| 欧美综合 站| www.91色综合| 性影在线视频| 97亚洲中文| 东京热精品97综合网| 天天躁日日躁AAAXX| 人妻精品视频一区二区三区| 一区二区三区成人| 五月综合视频| 国产大陆天天艹| 综合色欧美| 日韩噜噜69| 精品久久久久久亚洲| 老熟妇一区二区三区…| 97chaopengongkai| 动漫av中文| 98一区二区精品| 91爆操视频| 中文操逼字幕| 超碰 欧美| 嗯嗯啊啊视频一区二区三区| 激情av| 国产中文精品一区二区在线观看| 久久久久久久| 亚洲国产亚洲天堂| 大香蕉综合| 大香蕉啪啪啪| 亚洲精品第一| 伊人一区二区在线播放| 97这里有精品| 五月天亚洲网| 丝袜无码a片| 999狠狠综合| 国产精品成人无码av| 亚洲三区视频| 国产操逼网站亚洲一级黄色| 久久老熟女| 视频二区熟女人妻| 欧州激情视频在线一区二区| 麻豆人妻精品一区二区| 日韩性爱视频免费在线 | 亚州中文字幕超碰97| 亚洲色图超碰在线| 亚洲高清无码免费观看视频| 成全在线观看免费观看| 日本人妻丰满熟妇久久久久久| 大香蕉人妻久久| 亚洲色天堂九9| 亚洲诱惑天堂| 九九九九九用不成了| 亚洲棕合电彰| 嗯……啊…嗯嗯…啊…好舒服| 九九成人| 99亚洲精品| 日韩另类| 亚洲五月婷婷| 国产99 中文字幕日韩小视频| 日韩人妻中文视频| 国产精品婬乱一级毛片彝族| www亚洲免费| 国产精品网址| 黄色av网站在线播放| 中文字幕日韩电影人妻| 乱性AV| 最新av网站在线观看| 亚洲国产av中文字幕久久| 成人无码在线视频网站| 国产丝袜美女在线一区| 日B操| 少妇人妻太紧太深av| 精品国产人成在线| 亚洲国产麻豆一区二区三区| 天天干夜夜一操| 亚洲精品成人激情在线| 日本色婷婷| 蜜臀少妇一区二区| 97 亚洲 日韩 欧美 在线| 日本少妇va7777| 九九九久久久久| 久久美国毛片| 日韩91网| 99国产精品| 中文字幕五月婷婷免费| 久久毛卡|