PCI mmio访问对齐怎么样?

时间:2017-05-25 11:37:20

标签: kernel memory-alignment pci

在访问PCIe bar mmio空间时,我有一个关于对齐的基本问题。访问的地址是否必须是DW对齐且count必须是DW对齐的?

据我所知,TLB的地址字段忽略低2位,长度字段的单位也是DW。所以这意味着上面的问题是肯定的吗?否则CPU会处理mmio空间的未对齐访问吗?

我想知道以下访问是非法的:    - readb(bar0)    - readb(bar0 + 1)    - readl(bar0 + 1)

PCIe上会发生什么事务 总线如果发出未对齐的mmio访问权限?

1 个答案:

答案 0 :(得分:0)

如果你仔细研究一下TLP,你会发现它有第一个字节启用和最后一个字节启用等字段。他们的目的是处理DW错位。每一个都显示第一个和最后一个DW中的哪些字节被屏蔽掉。最后一个字节使能仅用于大于1 DW的存储器访问。

例如: 如果您尝试在偏移量0x3处读取1个字节,则会将其转换为偏移0处的DW读取,并将第一个字节启用设置为0x4(last_be将为0x0,因为它是1 DW访问)。完成数据然后应该掩盖不必要的字节。

另一个例子: 如果您尝试从偏移1读取1个DW,它将被转换为2个DWords的读取,其中第1个和最后一个被设置为忽略第1个DW中的第1个字节和第2个DW中的最后3个字节。

的问候,
Mateusz。