by support »
There is a bit in each BAR entry (usually called "64-bit capable") which says if the respective memory region can be mapped to a 64-bit address or not. If this bit indicates 32-bit addressing only, there is no reason for the server to generate 4DW-header TLPs.
This is relevant, because the only reason the root complex could have to produce an address-based TLP is for accessing the BAR-mapped portions of the device. Completions are addressed by the bus address ID.
In theory, the root complex could send a 4DW-header TLP to a 32-bit addressable BAR, with an address that maps into 32 bit space. I have to admit, that looking at the specification, I didn't find any clear statement about whether the root complex is allowed to do this or not. But having seen some "interesting" PC hardware, I wouldn't feel safe to assume that turning the 64-bit off would prevent 4DW-header TLPs, even if the spec said it should.
As for manipulating this issue with the driver -- I'm sorry, I have no idea. The 64-bit capable bit in the BAR is your best shot, I think, and I would follow that up by monitoring what arrives at the hardware.
Eli
There is a bit in each BAR entry (usually called "64-bit capable") which says if the respective memory region can be mapped to a 64-bit address or not. If this bit indicates 32-bit addressing only, there is no reason for the server to generate 4DW-header TLPs.
This is relevant, because the only reason the root complex could have to produce an address-based TLP is for accessing the BAR-mapped portions of the device. Completions are addressed by the bus address ID.
In theory, the root complex could send a 4DW-header TLP to a 32-bit addressable BAR, with an address that maps into 32 bit space. I have to admit, that looking at the specification, I didn't find any clear statement about whether the root complex is allowed to do this or not. But having seen some "interesting" PC hardware, I wouldn't feel safe to assume that turning the 64-bit off would prevent 4DW-header TLPs, even if the spec said it should.
As for manipulating this issue with the driver -- I'm sorry, I have no idea. The 64-bit capable bit in the BAR is your best shot, I think, and I would follow that up by monitoring what arrives at the hardware.
Eli