Spear PCIe Gadget 驅動程式¶
位置¶
driver/misc/spear13xx_pcie_gadget.c
支援的晶片:¶
SPEAr1300 SPEAr1310
目的¶
此驅動程式具有多個可透過 configfs 介面讀/寫的節點。其主要目的是將選定的雙模 PCIe 控制器配置為裝置,然後對其各種暫存器進行程式設計,以將其配置為特定裝置型別。此驅動程式可用於展示 Spear 的 PCIe 裝置能力。
不同節點的描述:¶
節點的讀取行為:¶
link |
返回 ltssm 狀態。 |
int_type |
支援的中斷型別 |
no_of_msi |
如果主機未啟用 MSI,則為零。正值表示授予的 MSI 向量數量。 |
vendor_id |
返回已程式設計的供應商 ID (十六進位制) |
device_id |
返回已程式設計的裝置 ID (十六進位制) |
bar0_size |
返回 bar0 的大小 (十六進位制)。 |
bar0_address |
返回 bar0 對映區域的地址 (十六進位制)。 |
bar0_rw_offset |
返回 bar0 的偏移量,bar0_data 將為此偏移量返回值。 |
bar0_data |
返回 bar0_rw_offset 處的資料。 |
節點的寫入行為:¶
link |
寫入 UP 以啟用 ltsmm,寫入 DOWN 以停用 |
int_type |
寫入要配置的中斷型別 (int_type 可以是 INTA、MSI 或 NO_INT)。僅當您已程式設計 no_of_msi 節點時才選擇 MSI。 |
no_of_msi |
所需的 MSI 向量數量。 |
inta |
寫入 1 以置位 INTA,寫入 0 以解除置位。 |
send_msi |
寫入要傳送的 MSI 向量。 |
vendor_id |
寫入要程式設計的供應商 ID (十六進位制)。 |
device_id |
寫入要程式設計的裝置 ID (十六進位制)。 |
bar0_size |
寫入 bar0 的大小 (十六進位制)。預設 bar0 大小為 1000 (十六進位制) 位元組。 |
bar0_address |
寫入 bar0 對映區域的地址 (十六進位制)。(bar0 的預設對映是 SYSRAM1(E0800000)。總是在程式設計 bar 地址之前程式設計 bar 大小。核心可能會為對齊而修改 bar 大小和地址,因此在寫入後請重新讀取 bar 大小和地址進行交叉檢查。 |
bar0_rw_offset |
寫入 bar0 的偏移量,bar0_data 將為此偏移量寫入值。 |
bar0_data |
寫入 bar0_rw_offset 處的資料。 |
節點程式設計示例¶
以這樣的方式程式設計所有 PCIe 暫存器:當此裝置連線到 PCIe 主機時,主機將此裝置視為 1MB RAM。
#mount -t configfs none /Config
對於第 n 個 PCIe 裝置控制器
# cd /config/pcie_gadget.n/
現在您擁有此目錄中的所有節點。將供應商 ID 程式設計為 0x104a
# echo 104A >> vendor_id
將裝置 ID 程式設計為 0xCD80
# echo CD80 >> device_id
將 BAR0 大小程式設計為 1MB
# echo 100000 >> bar0_size
檢查已程式設計的 bar0 大小
# cat bar0_size
將 BAR0 地址程式設計為 DDR (0x2100000)。這是記憶體的物理地址,將被 PCIe 主機可見。類似地,任何其他外設也可以被 PCIe 主機可見。例如,如果您將 UART 的基地址程式設計為 BAR0 地址,那麼當此裝置連線到主機時,它將顯示為 UART。
# echo 2100000 >> bar0_address
程式設計中斷型別:INTA
# echo INTA >> int_type
現在進行連結建立
# echo UP >> link
必須確保,一旦在 Gadget 上完成連結建立,主機才初始化並開始在其埠上搜索 PCIe 裝置。
/*wait till link is up*/
# cat link
等待直到它返回 UP。
置位 INTA
# echo 1 >> inta
解除置位 INTA
# echo 0 >> inta
如果使用 MSI 作為中斷,請程式設計所需的 MSI 向量數量 (例如 4)
# echo 4 >> no_of_msi
選擇 MSI 作為中斷型別
# echo MSI >> int_type
現在進行連結建立
# echo UP >> link
等待直到連結建立
# cat link
應用程式可以重複讀取此節點,直到找到 UP 狀態的連結。它可以在兩次讀取之間休眠。
等待直到 MSI 被啟用
# cat no_of_msi
應返回 4 (請求的 MSI 向量數量)
傳送 MSI 向量 2
# echo 2 >> send_msi
# cd -