在访问PCIe bar mmio空间时,我有一个关于对齐的基本问题。访问的地址是否必须是DW对齐且count必须是DW对齐的?
据我所知,TLB的地址字段忽略低2位,长度字段的单位也是DW。所以这意味着上面的问题是肯定的吗?否则CPU会处理mmio空间的未对齐访问吗?
我想知道以下访问是非法的: - readb(bar0) - readb(bar0 + 1) - readl(bar0 + 1)
PCIe上会发生什么事务 总线如果发出未对齐的mmio访问权限?
答案 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。