On Thu, 2 Jun 2022 at 15:15, Gerd Hoffmann <kra...@redhat.com> wrote:
>
>   Hi,
>
> > I did a quick test with both ArmVirtQemu and microvm (using this
> > series but omitting the MdeModulePkg), and I can confirm that not
> > having a I/O resource window at all seems to work fine if none of the
> > PCI devices have I/O BARs.
> >
> > Gerd, do you remember why exactly this patch is needed? Is it related
> > to devices that have I/O BARs but don't actually require them to
> > function correctly?
>
> Well, the difference seem to be pcie root ports.  When plugging my
> virtio device into the root bus everything is fine:
>
>   PCI Bus First Scanning
>   PciBus: Discovered PCI @ [00|00|00]
>
>   PciBus: Discovered PCI @ [00|01|00]
>      BAR[1]: Type =  Mem32; Alignment = 0xFFF;  Length = 0x1000;        
> Offset = 0x14
>      BAR[4]: Type = PMem64; Alignment = 0x3FFF; Length = 0x4000;        
> Offset = 0x20
>   [ ... ]
>   PciHostBridge: NotifyPhase (AllocateResources)
>    RootBridge: PciRoot(0x0)
>     Mem64: Base/Length/Alignment = 6000000000/100000/FFFFF - Success
>     Mem: Base/Length/Alignment = C0000000/100000/FFFFF - Success
>   PciBus: HostBridge->NotifyPhase(AllocateResources) - Success
>
> When plugging the virtio device into a pcie root port it doesn't work
> and the log looks like this:
>
>   PCI Bus First Scanning
>   PciBus: Discovered PCI @ [00|00|00]
>
>   PciBus: Discovered PPB @ [00|08|00]
>      Padding: Type =  Mem32; Alignment = 0x1FFFFF;      Length = 0x200000
>      Padding: Type =     Io; Alignment = 0x1FF; Length = 0x200
>      BAR[0]: Type =  Mem32; Alignment = 0xFFF;  Length = 0x1000;        
> Offset = 0x10
>
>   PciBus: Discovered PCI @ [01|00|00]
>      BAR[1]: Type =  Mem32; Alignment = 0xFFF;  Length = 0x1000;        
> Offset = 0x14
>      BAR[4]: Type = PMem64; Alignment = 0x3FFF; Length = 0x4000;        
> Offset = 0x20
>   [ ... ]
>   PciHostBridge: NotifyPhase (AllocateResources)
>    RootBridge: PciRoot(0x0)
>     Mem: Base/Length/Alignment = C0000000/300000/1FFFFF - Success
>     Mem64: Base/Length/Alignment = 6000000000/100000/FFFFF - Success
>     I/O: Base/Length/Alignment = FFFFFFFFFFFFFFFF/1000/FFF - Out Of Resource!
>   [ ... ]
>   PciHostBridge: NotifyPhase (AllocateResources)
>    RootBridge: PciRoot(0x0)
>     Mem64: Base/Length/Alignment = 6000000000/100000/FFFFF - Success
>     Mem: Base/Length/Alignment = C0000000/200000/FFFFF - Success
>     I/O: Base/Length/Alignment = FFFFFFFFFFFFFFFF/0/FFF - Out Of Resource!
>
> So, it's apparently the io window of the pcie root port which causes
> edk2 try allocate io resources.
>

This seems to be related to the padding logic, i.e., we are trying to
preserve some extra I/O space for the root port in case we hotplug
something that might need it.

The hack below gets around this - we'll need something suitable check
here that avoids I/O padding when the root port has not I/O resource
window in the first place. Care to cook something up?



--- a/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c
+++ b/OvmfPkg/PciHotPlugInitDxe/PciHotPlugInit.c
@@ -733,7 +733,7 @@ GetResourcePadding (
     }
   }

-  if (DefaultIo) {
+  if (DefaultIo && FALSE) {
     //
     // Request defaults.
     //


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#90161): https://edk2.groups.io/g/devel/message/90161
Mute This Topic: https://groups.io/mt/91495635/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to