Eric, Firstly, PciBus driver can support single-segment-multiple-rootbridge system or multiple-segment-multiple-rootbridge very well. (I agree the enumeration logic confuses you.)
Take a platform containing 2 root bridges for example, your understanding is correct. PciBus does the full enumeration (full means resource assignment is done) for both root bridges. But since PciBus driver is a driver model driver and it starts on a root bridge handle, so only the PciIo handles behind that root bridge is created. The PciIo handles behind the other root bridge is not created until someone starts PciBus again using the other root bridge handle. And when this happens, only a light enumeration happens. Light means bus driver doesn't do the resource assignment but only populate the PciIo. I guess the full enumeration + light enumeration confuses you. You may have a question to ask: why not PciBus only does full enumeration on the specified root bridge passed into Start()? Instead of on all root bridges. My understanding is it's a limitation of the PciHostBridge->NotifyPhase() defined in PI spec. typedef EFI_STATUS (EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_NOTIFY_PHASE) ( IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *This, IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE Phase ); You can see that this interface doesn't carry the RootBridgeHandle so it implies that all root bridges should transfer the state to the next at the same moment. That's why when even only one root bridge is asked to start, bus driver assigns resources for all root bridges. In summary, we do have verified the code in single-segment-multiple-rootbridge system and multiple-segment-multiple-rootbridge system. The driver should work as expected. Thanks/Ray > -----Original Message----- > From: edk2-devel [mailto:[email protected]] On Behalf Of > Eric Song > Sent: Thursday, August 17, 2017 12:50 PM > To: [email protected] > Cc: Tiger Liu <[email protected]> > Subject: [edk2] [EDK2] PCI bus do 2 Enumeration when 2 root bridges under > 1 host bridge > > Hi, experts > If there is 2 root bridges under 1 host bridge on the PCI hierarchy, > whether EDK2 Pci bus driver can support it ? the answer is YES, but some > confused things in it. > > 1) On BDS phase, ConnectController is called for every root bridge, so > Pci > bus start() will be called for every root bridge. > > VisitAllInstancesOfProtocol (&gEfiPciRootBridgeIoProtocolGuid, > ConnectRootBridge, NULL); > > 2) In PCI bus driver, Pci start() will do enumeration on the entire host > bridge > > PciEnumerator()->PciHostBridgeEnumerator->”PciResAlloc- > >GetNextRootBridge()” > > That means Do enumeration on entire host bridge for every one root bridge. > So there are 2 enumerations on entire host bridge for my PCI hierarchy. > What I confused is why do 2 enumerations on entire host bridge by > every one root bridge. Since BDS connect controller by one root bridge , Pci > bus driver should enumerate corresponding root bridge, But it do the entire > host bridge which is the parent of the root bridge. > Or BDS should connect controller by one host bridge, then it will match the > pci bus driver ‘s enumeration policy. > In a word, I think it is illogical for current EDKII code. > > Well, the current code execution will do 2 enumerations on host > bridge > for 2 root bridges under 1 host bridge. Even though 2rd enumeration would > be not full enumeration, but do PciEnumeratorLight(), I think it is still not > necessary. Whether there is any side effect ? In another word, current PCI > bus driver enumeration can’t be Suitable for 2 root bridges under 1 host > bridge or not? It indeed match the PCI hierarchy of 2 host bridges and 1 root > bridge under 1 host bridge. > > Thanks > Eric > > > > 保密声明: > 本邮件含有保密或专有信息,仅供指定收件人使用。严禁对本邮件或其 > 内容做任何未经授权的查阅、使用、复制或转发。 > CONFIDENTIAL NOTE: > This email contains confidential or legally privileged information and is for > the > sole use of its intended recipient. Any unauthorized review, use, copying or > forwarding of this email or the content of this email is strictly prohibited. > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

