I’m new to participating in the platform WG. I’m working at SiFive now. I spent the last 20 years doing PCIe compliant IO fabrics for Intel chipsets.
I have a few comments / questions about the PCIe:
1) section 22.214.171.124
: Why are we requiring INTx? We should allow a modern system to be built without the legacy INTx requirements.
The intention behind requiring intx was to ensure better compatibility. There are few cases where we fallback to INTx if MSI is not available. For e.g:
But if such cases are considered to be rare and not required to be supported then this requirement can be removed.
2) section 126.96.36.199
: A discussion of No_snoop must also include Relaxed Order (RO). When a root port forwards a mix of traffic with NS=0, RO=0 and NS=1 , RO=0. The requirement to enforce ordering tends to lead to ignoring the NS hint and snooping the trarffic anyway.
A system is required to provide hardware managed coherence for PCIe traffic. A system may ignore the No_snoop hint bit and treat all PCIe traffic as HW coherent. A system may choose to honor the No_snoop (NS) hint bit on incoming PCIe transactions. In this case software must manage coherence for the memory used by the device issuing the transactions. Such systems must also honor the relaxed order (RO) hint bit. To take full advantage of SW coherence the device should set both NS and RO to 1. Otherwise, when RO=0 the snooped and non-snooped traffic arriving through a host bridge must be kept ordered, eliminating the benefit of routing some traffic around the cache hierarchy to memory.
AFAIK, these are two separate attributes and a requester could set either or both of them. I am not sure if we can link the two together. Please correct me if I am wrong but does it mean that ,for e.g, all the mem write requests which may have the NS attribute set must also have the RO attribute set?
2) section 188.8.131.52
: Why do we exclude the possibility of a Host bridge that supports both RCiEP and Root Ports?
Actually the requirement is to support atleast one of them ie RCiEP (+RCEC) or Root port but an RC can certainly support both.