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 -