Other Parts Discussed in Thread: AM6548
尊敬的 TI 支持团队:
我们使用 AM6548的 PCIe 子系统建立与 x86 CPU 的 PCIe 连接。 在此设置中、AM6548以端点模式运行、我们的代码使用 TI-RTOS /处理器 SDK 06.01在 R5f 上运行。
由于处理器 SDK 附带的 PCIe 驱动程序(pdk_am65xx_1_0_6\packages/ti\drv\PCIe\src\v2)似乎是专为连接在一起的两个 AM*器件而定制的示例,因此我们编写了自己的代码来设置 PCIe 端点。
端点由 RC 检测、访问配置空间有效。 在 x86上执行的 lspci 命令显示了默认的条形布局:
# lspci -vv -n -s 01:00.0
(笑声)
区域0:存储器位于 (64位、不可预取)[size=1M]
区域2:存储器位于 (64位、不可预取)[SIZE=8M]
区域4:I/O 端口位于 [已禁用][size=256]
区域5:存储器位于 (32位、不可预取)[size=2G]
(笑声)
此布局与 TRM (SPRUID7E)第12.2.2.4.15节中的布局匹配-尽管此部分仅对 SR2.0有效。 SR1.0的对应段不存在。
- TRM 的第12.2.4.15节为何仅对 SR2.0有效? SR1.0如何?
我们需要更改此布局。 更改条形类型和存储器类型(更改为 MEM 32位)的工作正常、并被 RC 正确检测到。
但是、更改条形尺寸不能按预期工作。 根据手册、屏蔽寄存器是条形寄存器地址处的影子寄存器。
我们执行了以下步骤对其进行更改(如手册中所述):
- 设置 PCIe_EP_CMD_STATUS (05500004h 处的位5)中的字段 DBI_CS2
- 写入新的条形码(例如、将0000ffh 写入寄存器05501024h)
- 清除 PCIe_EP_CMD_STATUS 中的字段 DBI_CS2
之后、条形的尺寸没有变化。
当值 ffffffffffh 将被写入5501024h 并立即回读时、返回的值仍然为80000000h。 这对应于2G 条码大小(如默认配置)。
KeyStoneArchitecture PCI 用户指南(不适用于 AM6548)建议条形码屏蔽寄存器的位0启用或禁用条形码。
实际上、在设置 DBI_CS2、写入值 fffffeh 和清除 DBI_CS2后、该栏将被禁用。 这意味着写入屏蔽寄存器会产生结果。 但是、更改条形尺寸不起作用。
处理器 SDK 附带的 PCIe 示例中有代码、但由于该代码从未使用条形寄存器的内容、该示例无法检测条形尺寸的编程是否出错。
- 如何更改条形尺寸?
- AM6548是否也有 BAR_ENABLE 位(手册中没有提到它、或者根本没有记录条形码屏蔽寄存器)?
- 哪些掩码值对应于哪些条码大小(我们猜是:00000fffh 为4K、00001fffh 为8k、等等)?
此致、
Dominic